Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-04 - decus/20-0134/focal.doc
There is 1 other file named focal.doc in the archive. Click here to see a list.


        Status of FOCAL for DECsystem-10.

1.0     Summary of changes
        ------- -- -------

        Ian Pugsley would appreciate your comments  on  FOCAL-10.
        Please send comments, suggestions or problems to:
        Digital  Equipment  Australia,  60  Park  street,   South
        Melbourne, Victoria 3205 Australia.

2.0     External changes.
        -------- -------

3.0     Internal changes.
        -------- --------

4.0     Bugs fixed.
        ---- ------

5.0     Changes to installation instructions.
        ------- -- ------------ -------------

        Monitor software level is now indicated by the  parameter
        "MONITOR".  MONITOR should be set to one of the following
        values or to a higher value.

        3.27 (Assumes monitor does nothing for the user.)
        4.72 (Assumes Teletype fill characters  are  provided  by
        the monitor     and  RENAME  does  not  require  a  prior
        CLOSE.)
        5.03 (Assumes protection can be specified at ENTER  time,
        and the CORE UUO sets C(.JBREL))
        5.04 (Assumes DEVCHR UUO can accept a channel number.)
        5.05 (Assumes monitor can handle all brands of alt mode.)
        5.06 (Assumes KI-10 floating-point trap works correctly.)

        FOCAL.MAC will now assemble  two  different  .REL  files,
        depending upon whether the symbol FNEW is defined or not.
        If FNEW is not defined, a .REL file  is  generated  which
        has  the  full high segment for the .SHR file, and a null
        low segment.  If FNEW is defined (insert  "EXTERNAL FNEW"
        at the front of the source) then a .REL file is generated
        which may be named FOCALL.REL, and placed  on  SYS:   for
        loading  with  user-programs  that need FNEW.  Users then
        create  their  own  FNEW.REL  file  on  DSK,  and   issue
        "EXECUTE SYS:FOCALL,DSK:FNEW" in order to load FOCAL with
        FNEW and start FOCAL.
FOCAL.DOC version 5J(345)-1 [19-Oct-76]                    Page 3


6.0     Known bugs.
        ----- -----

6.1     GETTAB is a reserved word not beginning with  the  letter
        F.

7.0     Monitor sensitivity.
        ------- ------------

        FOCAL-10 will run on all monitors.  However, the assembly
        parameter  MONITOR  should  be set as high as possible to
        obtain the maximum efficiency and minimum core size  (see
        installation instructions).

        There is  a  monitor  feature  which  causes  a  spurious
        character  to  appear before the asterisk after a REENTER
        in those  cases  where  type-out  was  in  progress  when
        control-C  interruption occurred.  This will not be fixed
        in FOCAL.

        FOCAL-10 is difficult to use on 2741 terminals.


8.0     Summary of suggestions and ideas for  contemplation.
        ------- -- ----------- --- ----- ---  --------------

8.1     LIBRA LIST (without wild-cards).

8.2     Computed GOTO.

8.3     FOCAL to look at and use the SWITCH.INI file.

8.4     Sub-file directories.

8.5     The format descriptor %Emm.nn should  be  eliminated  and
        made to depend upon %mm.nn alone.

8.6     Extended exponent.

8.7     Bye.

8.8     DO command to allow a variable name as an argument.   The
        only incompatibility would be that if a variable name ALL
        or A existed, then DO ALL and DO A would have  a  meaning
        different  from  the present one.  The intention would be
        that if the variable name referred to a string, then  the
        string would be interpreted as a FOCAL command string.

8.9     The GO logic should be improved still further.

8.10    Turn of the debug switch on a QUIT command.

8.11    Make UUOMAC (on page 10 of  FOCAL.MAC)  depend  on  SPEED
        rather than on PDP-6.
FOCAL.DOC version 5J(345)-1 [19-Oct-76]                    Page 4


8.12    In order to speed up FOCAL, we should  try  to  eliminate
        some UUO calls.

8.13    Invent a re-sequencing feature such as  MODIFY  2.13=2.15
        or MAKE 2.13=2.15.
FOCAL.DOC version 5J(345)-1 [19-Oct-76]                    Page 5


9.0     Distribution notes.
        ------------ ------

17Jul72 Released v(127) (not sources) to John  Nugent  for  KI-10
        testing.
17Jul72 Released v(127) to Townsville.
02Aug72 Released v(127) to ARL, Melbourne.
11Sep72 Created edit (131).
28Oct72 Sundry changes occurred while I was in Maynard.  From now
        on  please  look  at  page  1 of FOCAL.MAC for historical
        notes.
01Nov72 Created v2.  Released v2 to Hakan Agvald in Sweden.
07Dec72 Created v2A.  Released v2A to UWA and UQ.
--May73 Released v3 to JCU at about this date.
--Jul73 Released v3A to UWA at about this date.
--Aug73 Released v3A to Alan Williamson to take to Maynard.
26Oct73 Released v3A(216) to David Abel (JCU).
13Nov73 Released v3B(234) to UWA.
20Nov73 Released v3B(234) to UQ.
21Feb74 Released v3C(245) to UQ, JCU, ARL, Stockex, La Trobe.
18Mar74 Released v3C(245) to UWA.
14Jun74 Released v3D(252) to Floyd Benson.
21Nov74 Released v4(272) to Charles Denny (.REL,.RND,.RNO,.FCL)
21Nov74 Released v4(272) to Bernard Eiben (.MAC,.RND,.RNO,.CTL)
09Feb75 Released v5(303) to La Trobe University.
06Mar75 Released v5A(306) to La Trobe University.
23Mar75 Released v5B(311) to La Trobe University.
24Feb76 Released v5J(331) to La Trobe University.
25Feb76 Released v5J(331) to ARL.
09Aug76 Released v5J(344) to La Trobe University.
12Aug76 Released v5J(344) to Digital Equipment New Zealand.
11Sep76 Released v5J(344) to Australian National University.
FOCAL.DOC version 5J(345)-1 [19-Oct-76]                    Page 6


10.0    Serial list of bug reports.
        ------ ---- -- --- --------

30Jan74 H.  Grebler:
        1.  FOCAL types out  .001  in  an  erroneous  manner  for
        E-format.
        2.  The F-format selector (TYPE %nn.mm)  should  also  be
        trapped  against erroneous values in the way that %Enn.mm
        is.  These bugs were fixed in edit #241.

 7May74 M.  Rahilly:
        1.  On input of a number with many  places  of  decimals,
        the  error  message  is  %Floating  overflow  instead  of
        %Floating underflow.
        2.  Also the message comes  out  once  for  every  excess
        digit, instead of once only.
        These problems were fixed in edit #257.

1974    H.  Davies:
        We need a sleep facility.
        This was fixed in edit #303.

20Feb75 R.  McLean:
        MODIFY can produce a null line.
        This was a documentation problem and had been regarded as
        a "feature"!  This was fixed in edit #313.

20Feb75 R.  McLean:
        A  switch  is  required  on  the  LIBRA SAVE  command  to
        suppress saving the symbol table.
        Note that this is possible with a  (somewhat  cumbersome)
        sequence of commands such as
        L S TMP;E;L S PROG;L C TMP;L S TMP;L S TMP;L D TMP
        However,  the  problem  was  fixed  in   edit   #305   by
        suppressing the symbol table if a list is given.

24Mar75 H.  Davies:
        On an ASK command, FOCAL treats  a  leading  space  as  a
        delimiter  if  some  character is typed without a leading
        space, rubbed out, and replaced with a leading space.
        This was fixed in edit #312.
FOCAL.DOC version 5J(345)-1 [19-Oct-76]                    Page 7


11.0    Serial list of changes.
        ------ ---- -- --------

2.6     The format of error messages was changed to give  a  text
        instead of a code number.

2.8     PDP-6 floating overflow and floating underflow now 'trap'
        in the double-precision case.

2.9     Floating-point underflow and  overflow  now  print  error
        messages.

2.11    "division  by  zero"  error  message  now   replaced   by
        "floating-point overflow".

2.12    "logarithm of zero requested" error message now  replaced
        by "floating-point overflow".

2.13    Integer format is now used for %mm.00 specification.

2.14    Numeric typeout now has a floating sign.

        (edit number 122 included changes up to this point.)

#123    If a function call has no parentheses following it, it is
        assumed that there is no argument.

#133    Error messages now appear in upper and lower case.

#142    Device "TTY" can now be used to release a channel.

3.4     The FTTRAP assembly feature-test switch was  replaced  by
        PDP-6 in most places.

3.5     I have now changed the I/O UUO's to  do  character-input,
        character-output, and string-output as separate UUO's, to
        speed things.

        (edit number 123 included changes up to this point.)

2.16    GETTAB function added (approx 30Aug72).

        (edit number 132 included changes up to this point.)

#135    A fast GETLN routine is now implemented.

#137    The VERSTR macro is used to save core.

4.3     The 'ASK' command with ??  around the argument now  works
        reasonably, and does not echo the input.

4.5     Old monitors without Teletype filling characters can  now
        have  fill  characters inserted by FOCAL if assembled for
        it.
FOCAL.DOC version 5J(345)-1 [19-Oct-76]                    Page 8


4.6     Exponentiation is now done as accurately as possible,  to
        make things like 3**3-27 give exactly zero.

4.7     UUOs can optionally  be  replaced  by  PUSHJ's  to  avoid
        monitor overhead in the PDP-6.

4.9     The TYPNUM routine TDZA MQ,MQ  instruction  assumed  that
        integers  were represented in AC,MQ.  This is now made to
        be true for all precisions.

        (edit number 120 included fixes up to here)

4.12    Single-precision FATN function for  very  small  negative
        argument now works correctly.

4.14    Double-precision  FATN  accuracy  is  now   improved   by
        better-optimizing the reduction formulae.  There is still
        inaccuracy of about one part in 3*10**13 at  an  argument
        of  0.27,  and  an  inaccuracy of about one in 10**14 for
        argument of one, but  elsewhere  it  has  full  accuracy.
        (approx 30Aug72).

4.16    FOCAL now allows for monitor bug not clearing core  on  a
        RUN or GET.

        (edit number 122 includes fixes up to this point.)

4.21    LIBRA SAVE with a list  of  more  than  one  element  now
        works.

4.25    PDP-6 DFSB now does not call a UUO  from  within  itself.
        (it used to give the wrong answers for zero ac.)

        (edit number 132 included changes up to this point.)

#136    When a new I/O channel is initted,  any  current  use  is
        correctly suspended.

#140    FATN now makes a better guess at number of iterations.

#141    Wide formats now print more accurately and correctly.

#156    Changed all occurences of "@nn" to "0(nn)" where nn is an
        accumulator mnemonic, in UUO/OPDEF/MACRO arguments.  This
        solves the problem that the MACRO definition uses the  ()
        as  enclosing  the  MACRO arguments, whereas the @ uses a
        23-bit field.  The problem was that  large  arguments  to
        FCHR caused illegal memory references.


#157    Modified GETTAB routine to correctly handle  full  36-bit
        answers.   There  still  exists  a  limitation  here  for
        single-precision versions of FOCAL, in that  they  cannot
        retain  all  36  bits  in  a 27-bit fraction field.  That
        problem will remain a limitation of the  single-precision
FOCAL.DOC version 5J(345)-1 [19-Oct-76]                    Page 9


        versions,  and will not be changed.  The original bug was
        that if bit 1 was on alone with bit 35, we got  erroneous
        floating-point overflow.


#160    The DFSB UUO routine was moved slightly to save core.


#161    Bug corrected which would cause a loop inside FOCAL if  a
        program  contained a statement such as "ASK +4", which is
        illegal.


#162    Control-C intercept during ASK data has now been removed.
        It is necessary to use control-P now.


#163    Leading spaces are now allowed as ASK  data.   Previously
        they  had  caused  the  ASK  command  to  assume that the
        element of data was  zero,  because  a  space  terminates
        data.   It now will terminate data only after a non-space
        has been typed.  (A "non-space" is a character with ASCII
        value more than 40 octal.)


#164    The EXP. routine was improved in both  timing  and  size.
        This  was  done by separating the input number not into a
        straight integer and fraction, but into an integer  which
        was  nearest to the number and a fraction between -.5 and
        +.5.  In this way it is easier to figure  out  the  sign.
        FOCAL,  in  case  you  may  not  know  it, has no complex
        arithmetic, but if it is asked to take a negative  number
        to  a  fractional power, it will give a sign which is the
        sign of the real part of  the  result,  and  a  magnitude
        which is the magnitude of the result.  The imaginary part
        is ignored.


#165    The GETNM routine was improved in both size  and  timing.
        This  was done by cutting a few pieces of code and making
        the entire  routine  accept  a  sign.   The  exponent  is
        handled by re-entrant use of the routine.


#166    DFLOAT was corrected so that it returns numbers as signed
        36-bit  integers.   PFLOAT  will  now  handle  numbers of
        either sign.


#167    All odd functions,(those  functions  which  change  their
        sign  and  only their sign if the sign of the argument is
        changed) now call a new routine  "ODDFNC"  which  handles
        these cases more economically.
FOCAL.DOC version 5J(345)-1 [19-Oct-76]                   Page 10


#170    The FOCAL function has been expanded now so that it  will
        take  a  single  argument greater than or equal to 23 and
        return  a  signed  36-bit  number  which  is  the  number
        contained  in that address of FOCAL's low segment.  It is
        intended to be used by programs wishing to determine  the
        amount  of  core  which  has  been used, channels in use,
        buffer sizes etc.

[1-May-73]


#171    Some items in FOCAL's data-base (in the low segment) were
        moved  around,  so  that  the FOCAL function could access
        most of the items without too many problems such  as  the
        precision of FOCAL and the type of processor running.


#172    The operations FSBRI and FMPRI were defined for the PDP-6
        version in such a way that they could be used in the code
        without special cases having to be written to handle  the
        PDP-6.


#173    The appending of the word " error" to error messages  was
        made  more  economical  by using a flag in the error word
        (Y) and putting it in specially each time.


#174    Because the KI-10 has pages of only half the size of  the
        PDP-6  and  KA-10, the core-expansion coding was modified
        according  to  the  recommended  method   (see   Software
        Notebooks).


#175    The GETNM routine was slightly modified to save core.


#176    The error message pertaining to the  attempts  to  use  a
        channel  which  was not initted or which was initted in a
        wrong direction was altered, so that it now has  its  own
        special message "Device not correctly INITted"


#177    The error messages for input  and  output  device  errors
        were slightly modified to save core.

[14-May-73]


#200    A correction was made so  that  LIBRA  delete  etc. would
        work  properly.   Until  now FOCAL would not accept lower
        case modifiers for LIBRA.


#201    There was a problem  with  unsubscripted  variable  names
FOCAL.DOC version 5J(345)-1 [19-Oct-76]                   Page 11


        longer  than  three  characters.   The  routine to handle
        subscripts did not clear the right half of the name field
        if  there  was no subscript, so the extra characters were
        interpreted as a kind of subscript.  This was fixed.


#202    Single precision FOCAL did not work in the area  of  data
        entry  and  number input, because of the erroneous coding
        of the PFLOAT routine.  This has now been fixed.


[17-May-73]


#203    Since the double-precision compare UUO was only  used  at
        one  place  in  the  program,  it was replaced by in-line
        code.  This saved space and time.


#204    The PDP-6 routines for double precision do not work.   It
        is thought that this may be because the carry-one flag is
        not set in the same way by the 166 processor as it is for
        the  PDP-10  in the case of the MOVNS instruction.  Hence
        the  NEGANS  routine  was  modified  to  eliminate   this
        instruction.


#205    One word was saved in the RETURN  instruction  processor,
        by  allowing  the interpreter to remain active during the
        remainder of the line.  This should have no effect except
        to do a bit of typing if the trace was active.
        One word was saved at FIX:  by using a  MOVM  instead  of
        MOVE and TSC.
        One word was saved in the INCHR UUO processor.  This  was
        done by using JRSTs instead of PUSHJs and POPJs.


[28-May-73]


#206    A convention was adopted internally that the sign bit  of
        the   low   order   word   (in   double   precision)   of
        floating-point numbers should be zero.   Hence  all  data
        items in the source program were adjusted if required.


#207    The double-precision PDP-6 NEGANS routine was adjusted to
        the above convention for bit 0 of the low order word.


#210    There was a bug relating  to  initialization  of  an  I/O
        channel  which  caused  core-expansion to occur under the
        monitor's  control  rather  than  under  FOCAL's.    This
        sometimes  caused  loss  of symbols, uncontrolled looping
        etc.  The fix was to correct the FIT:  routine to use  an
FOCAL.DOC version 5J(345)-1 [19-Oct-76]                   Page 12


        internal core-flag rather than .JBREL which is set by the
        monitor.


[30-May-73]


#211    There was a bug in the  core-expansion  code  (at  FIT+6)
        which caused buffers to be set up incorrectly.


v3A     Released 1-Jun-73.


#211    To allow C.A.I.  programs to run in FOCAL, it was decided
        to  allow  active  lines  to  be eligible for deletion or
        modification.  This was done  by  changing  the  internal
        checking  routine  so it performed harmlessly when a user
        attempted to delete a line which he was either  executing
        or  using  as  a  call  to  the  line being executed (for
        example with a DO.)


#212    One word of code was saved at location NEGANS.


#213    The factor for converting sine  and  cosine  in  degrees,
        namely    PI/180,    was    slightly   inaccurate.    The
        multiple-precision  package  was  used  to  compute  this
        factor more accurately, and the new value is now in place
        in FOCAL.


#214    The method of loading the PDP-6 version has been changed,
        and the internal arrangement of low and high segments has
        been altered.  It is now no longer necessary to  use  the
        /H  switch  to  LOADER, since the assembly switch ensures
        correct loading.  However, it is important that  the  low
        segment  of  FOCAL  is  loaded first, before DDT or FNEW,
        since the "FOCAL" function depends on this.


#215    The  algorithm  for  logarithm  in  double-precision  was
        slightly modified.


#216    A constant used in the double-precision  exponential  was
        adjusted  in  accuracy.  The constant, eightth root of 2,
        is used in computing fractional powers.


#217    There was a problem with RETURN statements  from  a  line
        number  greater  than 31.99.  This originated back in the
        days when FOCAL only allowed line numbers  up  to  31.99.
        The problem is now fixed.
FOCAL.DOC version 5J(345)-1 [19-Oct-76]                   Page 13


#220    The NEWLIN routine was corrected so  that  a  line  could
        overwrite itself.  This is a side-effect of the edit 211,
        which allowed deletions of active  lines.   Of  course  a
        line  overwriting  itself  does  no good, since the rules
        require that it merely erase itself, but at least it  now
        does no harm.


#221    The PDP-6 double floating divide routine had an error  in
        that  the  low order word was wrong half the time.  It is
        necessary to check for overflow from the low order  word,
        and the final JUMPGE/SOJA was required.

#222    The reduction formula for double-precision logarithm  was
        changed  so  that it used floating-point division instead
        of fixed-point division.  This is useful when running  on
        a  KI-10,  because  it  is  considerably faster.  It also
        saves a little space in core.

#223    It   was   discovered,   after    writing    the    FOCAL
        multiple-precision  package,  that  some  of the internal
        double-precision constants were not fully accurate.  This
        deficiency was remedied by this edit.

#224    Because of the change from LOADER to LINK-10,  I  had  to
        modify  the  instructions for loading FOCAL.  I took this
        opportunity to correct a misunderstanding some people had
        concerning  the  PDP-6  version,  which  has to be loaded
        first and has to be loaded in  one  segment.   This  edit
        forces  the  assembler  to  create a one-segment program,
        regardless of the commands used to load  it.   Of  course
        the low segment of FOCAL still has to be loaded first, in
        order  that  the  FOCAL  function  retain   its   defined
        specification.

#225    I have now removed the requirement that the PDP-6 version
        be  run with the parameter MONITOR=3.27.  This is because
        the raison d'etre of the PDP-6 version has  now  changed.
        It exists now not because someone might have a PDP-6, but
        rather that they may have a  KA-10  and  wish  to  retain
        62-bit  precision.   It  won't  be  as good as the KI-10,
        which computes three words and rounds the low order  bit,
        but  it  should  give  better  precision  than  the KA-10
        version, at the cost of cpu-time.

#226    Users of the FCOSD and  FSIND  functions  in  FOCAL  will
        often   use  arguments  which  are  integers,  and  often
        multiples or submultiples of 90 degrees.  For this reason
        it  is  desirable  to make a special computation directly
        from the argument to the  fraction  of  quadrant,  rather
        than  first  converting  it  into  radians  and then into
        quadrants.  The rounding errors saved will  usually  give
        much  better  results,  specially  when  computing  large
        angles.
FOCAL.DOC version 5J(345)-1 [19-Oct-76]                   Page 14


#227    There was a problem in that FOCAL went into a loop if you
        had  GOTO  followed  by  double  periods.   This has been
        corrected by a re-written GETLN routine.

#230    The monitor manual  says  (and  the  Maynard  programmers
        refuse to deny) that a DECtape RENAME must be preceded by
        a CLOSE.  This is in contrast to a disk RENAME which must
        not  be preceded by a CLOSE (in case some other user then
        grabs the file in between), and so FOCAL has been changed
        to make a special case for DECtape RENAME.

#231    The PDP-6  double-floating-divide  routine  was  slightly
        modified  in  the hope that another half bit of precision
        could be squeezed out of it.  It has not been proved that
        the precision is in fact improved, but at least it is not
        made worse.  Perhaps some kind  numerical  analyst  could
        prove it one way or the other for me.

#232    The SQRT, ATAN, ABS, SIGN  functions  were  removed  from
        FOCAL-10.   This  is  because  small  computer FOCALs may
        perhaps be using these names  as  variables,  and  it  is
        therefore bad to have them as reserved words in FOCAL-10.
        The  policy  has  been  adopted  for  FOCAL-10  that  all
        reserved  words  shall  commence with the letter "F".  To
        this end, the functions FSIND, FCOSD and FLOG10 have been
        added  to  the  function table in anticipation of the day
        when SIND, COSD and LOG10 will be deleted.

#233    The multi-file channel numbers are now decimal.   Also  a
        bug  was fixed in that ASK /0, TYPE /0 and OPERATE /0 now
        work as per the manual.

#234    A bug was corrected which  previously  caused  a  problem
        during  floating  point traps which typed error messages.
        Accumulator PC is now saved in the trap handler.

v3B     Released 14-Nov-73.

#235    The PDP-6 double-floating-multiply routine had a  problem
        in  that  multiplication  by  2  caused a rounding error.
        This was because of a lack of internal precision, and the
        problem has now been corrected.  (21-Dec-73)

#236    The Teletype input routine (used for initial command  and
        for  ASK  data)  is  now gathered on the stack instead of
        into free core.  It solves the long-standing problem that
        if  free core is unavailable you couldn't type a command,
        even an ERASE command.  (21-Dec-73)

#237    I have attempted to improve the capability of the monitor
        SAVE  command,  so that you will be able to stop FOCAL at
        any time and SAVE it.  (9-Jan-74)

#240    There was a problem in that the command TYPE %Emm.nn /chn
        failed  because  accumulator  T2  was  not preserved, and
FOCAL.DOC version 5J(345)-1 [19-Oct-76]                   Page 15


        because there was no comma between  the  arguments,  this
        was required.  The problem is now fixed.  (15-Jan-74)

#241    Two  problems  were  reported  relating  to  type-out  in
        E-format.   The  first  was that TYPE %10.5 should really
        give a warning because it is confusing for  the  user  to
        have  it  automatically  revert  to  E-format.  The FOCAL
        specifications were changed to give a  warning  only  and
        ignore  the  request  unless  the user gave %0 or %.  The
        second problem was  that  TYPE  %,.001  gave  00.00000E-6
        because  the  code  at  FIX:   did not work correctly for
        double precision negative numbers close to a power of  2.
        This   is   fixed   now.    This   corrects  patch  #205.
        (31-Jan-74)

#242    The EVAL routine was modified to run faster if  no  unary
        sign preceded the expression.  Also ** for exponentiation
        now works if a space separates the **'s.  (1-Feb-74)

#243    FOCAL will now trap expressions which illegally terminate
        with an operator such as 5+6* or 5*6+.  (1-Feb-74)

#244    Code is now included in the source of FOCAL to allow  the
        construction  "TYPE  $$"  to  give  the symbol table with
        octal  commented  into  it.   This  is  very  handy   for
        debugging  logical  operations  in  FOCAL programs.  This
        code is conditional upon version number.  It will  be  in
        version 4.  (4-Feb-74)

#245    The type-out of zero was  incorrectly  output  as   .0000
        instead  of 0.0000 for E-format or F-format which allowed
        sufficient width.  It is felt that the  specification  is
        indeed  correct,  and FOCAL has been modified to conform.
        (13-Feb-74)

v3C     Released 14-Feb-74.

#246    There was some inaccuracy with the type-out  of  numbers,
        and  it  was  discovered  that this was due mostly to the
        fact that I converted all numbers to a logarithm and back
        again.   This  double-conversion  was  removed.  Also the
        code in this area was cleaned up.  Also the RFIX  routine
        was  slightly  improved  so that the instruction used for
        rounding did exactly add 0.5 instead of  adding  0.5  and
        then rounding again.  (18-Mar-74)

#247    Some specific numbers were typed out incorrectly when the
        field  width for the type-out was greater or equal to the
        accuracy of the computer.  The error was manifest  as  an
        overflow  on  to  the  sign field instead of changing the
        exponent field to one higher and  shifting  the  printout
        one  place  to  the  right.   The  correction is to add a
        slight weight to the log10 so  that  any  errors  in  the
        log10  will  be  on the high side, never on the low side.
        This  does  have  the  slight  disadvantage  that  a  few
FOCAL.DOC version 5J(345)-1 [19-Oct-76]                   Page 16


        E-format  numbers  will  now type as 0.nnnnE+mm, but this
        shouldn't worry anybody.  (8-Apr-74)

#250    The default E-format field width has now been modified to
        %E5.04, so that in most simple cases the total field size
        will initially be the  same  as  for  F-format.   In  the
        single-precision  cases  this will also minimize problems
        of lack of accuracy showing through.  (8-Apr-74)

#251    A large symbol-table with most of the  symbols  having  a
        zero  index  looks  a bit messy because of all the (0)'s.
        At the expense of one additional  word  of  core  I  have
        tested  for  this  special case, and so now those symbols
        with  a  zero  index   will   have   the   index-printing
        suppressed.   Also the number of spaces after the "S" and
        before the symbol is reduced to one.  (16-Apr-74)

#252    The MODIFY command used to be  incapable  of  deleting  a
        question  mark  in column 1 of the data line.  In fact it
        caused the debug flag  to  get  switched  on.   This  was
        because  we  flipped  the "INTERP" flag too late, and the
        question mark was taken as program rather than  as  data.
        The  fix  is just to move the TLZ instruction from MOD:+6
        up  two  lines  to  just  before   the   JSP   PC,NEWTXT.
        (16-Apr-74)

#253    The names of the months as they are printed  out  at  the
        heading  of  the  listing produced by WRITE or LIBRA SAVE
        are now changed to consist of one upper case  letter  and
        two  lower  case  letters  instead  of  three  upper case
        letters.  (26-Jun-74)

#254    The virtual-memory monitor no longer uses the contents of
        .JBDDT  in  the  job  data area to indicate the amount of
        core to be saved by a monitor SAVE command.  Instead, the
        left  half  of  .JBCOR  and  .JBSA  are  used.  FOCAL was
        changed to reflect the new specifications.  (26-Jun-74)

v4      With the advent  of  version  4,  the  obsolete  commands
        beginning  with  backarrow or equals disappear, as do the
        obsolete commands with a file-specifier to begin followed
        by equals or backarrow.  Also edit 244 becomes effective,
        to  allow  symbol-table  in  octal.    The   LIBRA   CALL
        improvements  scheduled  for  version  4 were deferred to
        version 5 because they do not yet  work,  and  they  take
        additional core storage.  (26-Jun-74)

#255    LIBRA SAVE command now saves the symbol table as well  as
        the  program  lines.  This is more helpful to novices and
        to people who want  to  save  programs  part-way  through
        execution.   It  will  of  course  use  more  disk space.
        (6-Jul-74)

#256    The speed of LIBRA CALL has been  improved,  by  slightly
        increasing  the  size of the core chunks allocated during
FOCAL.DOC version 5J(345)-1 [19-Oct-76]                   Page 17


        program building.  (6-Jul-74)

#257    Input of numerics with large number of decimal places had
        three   problems.    Firstly  the  error  message  showed
        overflow  instead  of  underflow.   Secondly  the   error
        message  came  out  once for each excess digit instead of
        only once for  the  whole  number.   Thirdly  all  digits
        beyond  the  eleventh  decimal  place  were  only held to
        single   precision   instead   of    double    precision.
        (14-Jul-74)

#260    There was a problem with library files commencing with  a
        blank  line.   This  arose because part of the LIBRA CALL
        procedure involved translating  crlf's  into  nulls,  and
        placing the whole LIBRA file into the immediate-mode text
        area of core.  The core-expansion routine then looked  up
        into  the immediate-mode text area, saw the initial null,
        and  thought  it  could  go  ahead  and  use  the  space!
        (23-Jul-74)

#261    The SQUEEZ routine was operating incorrectly, in that the
        pointers  were  adjusted  before the new space was zeroed
        instead of after.  The end result was that SQUEEZ tricked
        itself  into  believing  the  garbage was meaningful, and
        FOCAL text being inserted into the middle  of  a  program
        caused some other text higher up to be lost.  (23-Jul-74)

#262    The sine/cosine routines were modified to use a  variable
        number of terms in the power series.  This has both speed
        and accuracy advantages for FOCAL.  In order  to  compute
        the size of the last significant term, it should be noted
        that the smallest RATIO  of  last  significant  to  first
        non-significant  term  occurs  for  x=PI/4 when there are
        11,17 or 19 significant terms for fraction sizes of 27,54
        or 62 bits.  (5-Aug-74)

#263    Single-precision FATN for very small  negative  arguments
        had the wrong sign.  This was corrected by changing FOCAL
        to use the double-precision method for  both  single  and
        double-precision computations.  It also enhances accuracy
        somewhat for the single-precision case.  (9-Aug-74)

#264    The   double-precision   KA-10   FEXP    was    returning
        non-normalized  numbers  in  certain  cases.  The problem
        arose because I forgot that FSC  of  the  low-order  word
        normalizes   the   low-order   word,   which   is  wrong.
        Correction is to insert FADL AC,MQ.  (9-Aug-74)

#265    The exponential function was modified to make both single
        and double precision methods the same.  They both use the
        continued fraction series instead  of  an  approximation.
        It  turns  out  that  you don't need very many terms, and
        that it is fairly economic in terms of  core  storage  to
        compute the coefficients.  (28-Aug-74)
FOCAL.DOC version 5J(345)-1 [19-Oct-76]                   Page 18


#266    There  was  an  error  in  the  type-out  routine   which
        manifested  itself  as a floating overflow message during
        type-out of small numbers with a long  fraction  part  of
        E-format.   The reason for the error was that pre-typeout
        normalization required adjustment  with  an  out-of-range
        factor.   Correction  was  a  minor  modification  of the
        adjustment algorithm.  (8-Sep-74)

#267    Scanning for empty space in the text storage  area  while
        inserting  a  new  line  was  changed  to commence at the
        low-core end,  so  that  repeated  calling  of  the  same
        library   file  would  not  result  in  unnecessary  core
        expansion.  (8-Sep-74)

#270    End-of-file  handling  was   improved,   so   that   more
        reasonable  things  happen.   For  example  FCHR(-1)  now
        returns -1 when end-of file is  encountered,  instead  of
        letting FOCAL exit.  (8-Sep-74)

#271    The  FIXOAT  routine  was  re-written,  to  prevent   the
        fraction  part  ever  reaching  +1.  The problem was that
        2^(-1) was not computed accurately, and  did  not  equate
        exactly with 1/2.  (12-Sep-74)

#272    Corrections to edit #267.  (21-Sep-74)

#273    Code was added to check for and reject  the  forms  ASK %
        and  ASK $.   The  code  was  made  conditional on having
        enough core;  meaning that the code is  in  all  versions
        except  the KA-10 double-precision version which is a bit
        tight for core.  (14-Oct-74)

#274    A new logarithm algorithm was invented, and used in place
        of  the  existing  ones in those cases which are short of
        core, namely KA-10 double-precision.   The  algorithm  is
        based on successive squaring and exponent-extraction;  it
        is slower but smaller and more accurate.  (21-Oct-74)

#275    The accumulator values were changed  in  anticipation  of
        the  day  when  the Subroutine Calling Convention will be
        adhered to.  (21-Oct-74)

#276    String  variables  and  string  expressions  were  added.
        (22-Oct-74)

#277    It was discovered that for  KA-10  double-precision,  the
        number  576400000000,  146001000000 is normalized but its
        negative via DFN  (201377777777,  146777000000)  is  not.
        Therefore  negation  was made subject to normalization as
        well.  I.e. DFN was followed by FADL.  (27-Oct-74)

#300    The new logarithm method (edit 274)  was  made  mandatory
        for  all  versions  of FOCAL.  This ensures good accuracy
        and compact code for every situation, even  though  speed
        of logarithms and fractional powers will suffer slightly.
FOCAL.DOC version 5J(345)-1 [19-Oct-76]                   Page 19


        I have demonstrated that  the  new  method  gives  better
        precision than the old:  sometimes as much as five in the
        least significant bit.  For arguments close to unity, the
        logarithm  is very small and may bear a significance only
        as great as the argument itself.  (3-Feb-75)

#301    A few instructions have been saved by minor re-coding  in
        a few places.  (3-Feb-75)

#302    The  EVAL  routine  with  a  null   argument   or   empty
        parentheses  has  now  been defined as numeric with value
        zero.  This was necessary  in  order  that  legality  and
        format   decisions   could  be  made  internally  without
        unnecessary delay or confusion.  The  previous  confusion
        of  undefined numeric/string status caused illegal memory
        reference due to bad format null  string  representation.
        (4-Feb-75)

#303    Functions LOG, LOG10, COS, COSD, SIN, SIND, and EXP  were
        removed   because   they  violated  the  rule  about  all
        functions commencing  with  the  letter  F.   The  FHIBER
        function  was introduced to allow FOCAL programs to sleep
        or hibernate if required.  (6-Feb-75)

v5      The announcement  to  the  world  that  string  variables
        exist.  (6-Feb-75)

#304    The title on the listing of FOCAL.MAC  now  depends  upon
        the  assembly  parameter  FNEW,  and  will  also show the
        version number, precision, and cpu-type.  (23-Feb-75)

#305    LIBRA SAVE now does not save the symbol-table when a list
        is given.  This reduces disk requirement for saved files.

#306    FNEW is now allowed;  FOCAL now complies with the Calling
        Sequence Standard.  (1-Mar-75)

#307    Repair edit #305 to  save  INCHN  and  OUTCHN  correctly.
        (11-Mar-75)

#310    .JBERR is now incremented under the following conditions:
        1.  FHIBER function in a detached job.
        2.  FHIBER function when TRMNO.  UUO is illegal.
        3.  Error return on GETTAB UUO in GETTAB function.
        4.  Any error detected by FOCAL, whether it results in  a
        printed message or not.  (11-Mar-75)

#311    FOCAL now gives an error message if an attempt is made to
        set  an  output  format  with  a  width  greater  than 99
        columns.  Previously this  resulted  in  a  type-out-time
        PDL OV message.  (11-Mar-75)

#312    There was a problem in that the ASK data "leading  space"
        flag got clobbered if you inserted a non-space and rubbed
        it out.  This was solved by not having a flag  any  more,
FOCAL.DOC version 5J(345)-1 [19-Oct-76]                   Page 20


        but  rather  by  looking  at  the previous character each
        time, to see if it was a space too.  You will be safe  if
        the  new  space  follows  another  space;  but if not, it
        won't be a leading space.  (2-Apr-75)

#313    Echoing of rubbed out characters used to be in  the  same
        form  as  TECO,  except for MODIFY command.  This has now
        been changed  so  that  all  rubbed  out  characters  are
        embedded  in  reverse slants.  For half-duplex terminals,
        the rubbed out character is  not  echoed,  but  rather  a
        reverse  slant  is  typed  for each rubbed-out character.
        (5-Apr-75)

#314    Control-R now repeats the prompt character  and  displays
        the  first part of the line (cleaned up) for input lines,
        ASK data, and MODIFY work.  Also  control-P  may  now  be
        used  to  abort  a  modify command if you decide that you
        don't want to complete the modifications.  (5-Apr-75)

#315    In an OPERATE command, a non-existent device  now  causes
        an   error   message   instead   of   a  channel-release.
        Channel-release can now only be caused by OPENing TTY  on
        the channel.  (25-Apr-75)

#316    Error messages used to come out on the TTY if  fatal  but
        on  the  current  output device if non-fatal.  This seems
        stupid because the user really wants to see them straight
        away,  and  he's  sitting  at  the terminal.  This change
        makes it always come on to TTY.  (18-Sep-75)

#317    MODIFY command will now correctly handle lines containing
        question  marks,  and  will  allow  question  marks to be
        inserted.  (20-Sep-75)

#320    The ASK command can, as you know, be used to type text in
        the  same  way  as  the TYPE command, including new lines
        etc.  What I have now done is to arrange to  regard  this
        feature as a kind of cue for the input.  The advantage is
        that you can then have all useful output  (results,  say)
        going to the line printer, whilst that message requesting
        input will go  to  the  TTY.   In  actual  fact,  I  have
        arranged  for  all  output during an ASK command to go to
        TTY, but only if input is expected from TTY.  (4-Oct-75)

#321    MODIFY should be handled the same way because the  output
        from MODIFY is really only for the guidance of the person
        doing the typing.  (4-Oct-75)

#322    The debug feature turns out to be very difficult  to  use
        for  debugging  a  program which has output directed to a
        file other than  TTY.   To  assist  with  debugging,  and
        hopefully  not  inconvenience too many people who use the
        feature to plug data into  output  files,  we  will  make
        debug output always go to TTY.  (4-Oct-75).
FOCAL.DOC version 5J(345)-1 [19-Oct-76]                   Page 21


#323    Data transmission errors causing failures of  IN  or  OUT
        UUOs  now  causes the device status bits (from the GETSTS
        UUO) to  be  printed  in  the  error  message  by  FOCAL.
        (4-Oct-75)

#324    Change I/O routines so that file output to other than TTY
        only  occurs  during  the  WRITE TYPE and LIBRA commands.
        (10-Oct-75)

#325    Logical IF using = and # operators.  (10-Oct-75)

#326    Logical IF using .NE.  and .EQ.  operators.  (13-Oct-75)

#327    The format of I/O error messages which return  a  monitor
        code  number  have been changed.  The old format error-##
        has been  changed  to  error  #.   This  will  save  some
        locations of core.  (21-Oct-75)

#330    A BACKSPACE from the keyboard will now perform  the  same
        function  as a RUBOUT except that the BACKSPACE is echoed
        and the rubbed-out  characters  are  not  displayed;   no
        back-slashes  are used.  This simulates the 5.07 monitor.
        (8-Feb-76)

#331    The  GO  command  can  now  accept  a  comment  after   a
        semi-colon without an error.  (15-Feb-76)

#332    The half-duplex terminal test has now been replaced  with
        a  local-copy  test,  which is really more correct, since
        the feature being adjusted is the layout  of  backslashes
        on  the  paper.   The  DPOP  UUO  was  not in fact called
        anywhere, and so it was removed along with  its  handler.
        The trap handler had some inaccessible code in it, and so
        it was cleaned up and abbreviated.  (1-Apr-76)

#333    The SET command will no longer create a new  symbol-table
        entry  when  a new symbol is set to zero.  This will save
        core and cannot affect programs because if  an  undefined
        symbol  is  referenced  it  is  given  the  value of zero
        anyhow.  Some inaccessible code in the SQUEAZ routine  is
        eliminated.  (2-Apr-76)

#334    Commands to FOCAL must now consist of alphabetic  letters
        only.   This  means that commands such as TYPE2.6 with no
        spaces will be more meaningful to novices and  folk  used
        to  BASIC.   Also  I  have modified the INCREM and DECREM
        macros in the source so that they may have  an  argument.
        (4-Apr-76)

#335    The logical operators .LT., .LE., .GT.,  and  .GE.   have
        been  added.   The  PRINTX pseudo-op has been replaced by
        the macro PX in most places to make  it  a  fatal  error.
        (10-Apr-76)

#336    The INCREM and DECREM macros have been removed  from  the
FOCAL.DOC version 5J(345)-1 [19-Oct-76]                   Page 22


        source  code.  The FADRI instruction is now simulated for
        the PDP-6 version so some code  is  simpler.   The  DEXCH
        code for the KI-10 double-precision version is faster and
        uses a PUSHJ to a literal rather than a UUO.  (11-Apr-76)

#337    The efficiency of the  WRITE  command  was  increased  by
        removing   the  character-counter  to  the  error-handler
        routine.  (11-Apr-76)

#340    The EVAL  routine  was  speeded  up  and  the  expression
        routine  was  modified  to  correct the case of -1.EQ.-1.
        (15-Apr-76)

#341    A better try at edit #340.  (17-Apr-76)

#342    FNEWGO now attempts to find FOCAL.SHR on NEW and  OLD  if
        it cannot find it on DSK or SYS.  This should help people
        who want to run FORTRAN subroutines with newer  or  older
        than standard FOCAL.  (2-May-76)

#343    The symbol-table is now searched  with  a  binary  search
        method.  This speeds up production programs which tend to
        have a large number of fixed symbols.  There are  several
        side-effects of this change.  Firstly the symbol table is
        stored in alphabetical order rather  than  chronological,
        which  will  affect  the  appearance  of the symbol-table
        printout.   Secondly  the  actual  setting  up   of   the
        symbol-table will be slightly slower because shuffling is
        required to  make  it  alphabetical.   Thirdly  a  slight
        increase  of  space is required for the symbol-table - an
        increase of 33% for double-precision, but no increase for
        single  precision;   this is required to avoid a division
        instruction in  the  inner  loop.   Fourthly  it  is  now
        possible  to  change  the  way  a FOR loop works when you
        erase the symbol table;  the error message on  the  ERASE
        is  no  longer  required,  and the FOR will exit from the
        loop when it cannot find the index any more.  (25-Jul-76)

#344    ASK for a string will  now  accept  a  string  containing
        spaces  and  commas.   The  terminator  for  a  string is
        line-feed alone;   carriage-return  is  ignored;   ESCAPE
        aborts the ASK input.  I also took the opportunity in the
        source file, of defining  KL  to  allow  future  hardware
        dependencies.  (31-Jul-76)

#345    LOOKUP  is  now  non-fatal  except  in  case   of   KA-10
        double-precision  version  of FOCAL.  This means that you
        can test for the existence of a file by  opening  it  for
        input  and seeing whether or not you get an error.  LIBRA
        SAVE   now   generates   backup    except    for    KA-10
        double-precision  version of FOCAL.  The backup takes the
        form of renaming an existing file if any to  .BAK,  after
        deleting  any .BAK file;  then the LIBRA SAVE proceeds as
        it would have without an existing file of the same  name.
        A  few internal changes were made at LIMSET to reduce the
FOCAL.DOC version 5J(345)-1 [19-Oct-76]                   Page 23


        core size;  MAXLN,MINLN were  replaced  by  LUPARG.   The
        MACRO  exclusive OR operator ^!  was introduced to assist
        definition   of   certian   opcode   fiddle   parameters.
        (9-Oct-76)