home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPMHELP / CBAS2.HLP < prev    next >
Text File  |  2000-06-30  |  22KB  |  633 lines

  1. CBASIC in General
  2. CBASIC2 Compile-Time Toggled Options
  3. XREF Cross Reference Facility
  4. Compiler Error Messages
  5. Run-Time Error Messages -- Warnings
  6. Run-Time Error Messages -- Error Codes
  7. CBASIC2 Reserved Words
  8. CBASIC2 Expression Hierarchy
  9. CBASIC2 Predefined Functions
  10. :CBASIC2:  CBASIC in General
  11.  
  12.      CBASIC  is  a compiler BASIC which may be executed on any floppy  disk 
  13. based  CP/M system having at least 20K bytes of memory.   In order to  make 
  14. the  best use of the power and flexibility of CBASIC,  a dual  floppy  disk 
  15. system  and at least 32K of memory is recommended.   If CBASIC is  executed 
  16. in a system smaller than 20K, a CP/M LOAD ERROR may occur.
  17.  
  18.      The CBASIC system consists of two programs -- CBASIC and CRUN.  CBASIC 
  19. is the compiler,  and CRUN is the run-time intepreter.  In a typical CBASIC 
  20. session,  the user will write the program using ED, compile it using CBASIC 
  21. (with the $B option to suppress listing), and run it using CRUN.
  22.  
  23.      Refer to the 84-page CBASIC manual --
  24.  
  25.                                 C B A S I C
  26.                           A Commercially Oriented
  27.                         Compiler/Interpreter BASIC
  28.                            Language Facility for
  29.                                CP/M Systems
  30.  
  31.                              February 17, 1978
  32.  
  33.      CBASIC2 is an upward-compatable (in terms of source code) extension of 
  34. the  original CBASIC.   In addition to all of the features of the  original 
  35. CBASIC, CBASIC2 adds the following:
  36.           1.  Integer variables
  37.           2.  Chaining with common variables
  38.           3.  Additional pre-defined functions
  39.           4.  Cross Reference capability
  40.      Note  that  CBASIC2 is upward-compatable with CBASIC only in terms  of 
  41. the source code files.   An INT file created under CBASIC will not  execute 
  42. with the Version 2 Run-Time Monitor (CRUN2).
  43.      For further information, refer to the 100-page reference manual --
  44.  
  45.                                 C B A S I C
  46.                           A Commercially Oriented
  47.                         Compiler/Interpreter BASIC
  48.                            Language Facility for
  49.                                CP/M Systems
  50.                                  Version 2
  51.  
  52.                                 May 1, 1979
  53. :CBASIC2:  CBASIC2 Compile-Time Toggled Options
  54.  
  55.      Compiler  toggles  are a series of switches that can be set  when  the 
  56. compiler  is  executed.   The toggles are set by typing a  dollar-sign  ($) 
  57. followed  by  the letter designations of the desired toggles  starting  one 
  58. space or more after the program name on the command line.  Toggles may only 
  59. be set for the compiler.
  60.  
  61.      Examples of compiler toggles and invocation forms are --
  62.           CBAS2 INVENTRY $BGF
  63.           B:CBAS2 A:COMPARE $GEC
  64.           CBAS2 PAYROLL $B
  65.           CBAS2 B:VALIDATE $E
  66.  
  67.                           CBASIC Compiler Toggles
  68.  
  69.      TOGGLE B:  Suppresses the listing of the program on the console during 
  70. compilation.   If an error is detected,  the source line with the error and 
  71. the  error message will be printed even if Toggle B is set.   Toggle B does 
  72. not affect listing to the printer (Toggle F) or disk file (Toggle G).
  73.      Toggle B is initially off.
  74.  
  75.      TOGGLE  C:   Suppresses the generation of an INT file.  Engaging  this 
  76. toggle  will  provide a syntax check without the overhead  of  writing  the 
  77. intermediate file.
  78.      Toggle C is initially off.
  79.  
  80.      TOGGLE D:  Suppresses translation of lower-case letters to upper-case.  
  81. For example,  if Toggle D is on,  'AMT' will not refer to the same variable 
  82. as 'amt'.
  83.      Toggle D is initially off.
  84.  
  85.  
  86.      TOGGLE  E:  Causes the run-time program (CRUN2) to accompany any error 
  87. messages with the CBASIC line number in which the error occurred.  Toggle E 
  88. must be set in order for the TRACE option (see section 13.4 of the  manual) 
  89. to work.
  90.      Toggle E is initially off.
  91.  
  92.      TOGGLE  F:   Causes the compiler output listing to be printed  on  the 
  93. LST: device in addition to the system console.  
  94.      Toggle F is initially off.
  95.  
  96.      TOGGLE  G:   Causes  the  compiler output listing  to  be  written  to 
  97. diskette.   The  file containing the compiler listing has the same name  as 
  98. the .BAS file, but its type is .LST.
  99.      Normally  the disk listing will be placed on the same source drive  as 
  100. the  source file.   The operator may select another drive by specifying the 
  101. desired drive, enclosed in parens, following the G toggle; for example,
  102.                             CBAS2 B:TAX $G(A:)
  103. extracts the source from drive B: and sends the listing to drive A:.
  104.      Toggle G is initially off.
  105. :CBASIC2:  XREF Cross Reference Facility
  106.      The  XREF.COM  Cross Reference utility program produces a  file  which 
  107. contains an alphabetized list of all identifiers used in a CBASIC  program.  
  108. The usage of the identifier (function,  parameter,  or global) is provided, 
  109. as well as a list of each line in which that identifier is used.   The file 
  110. created  has  the same name as the CBASIC source file and is of  type  XRF.  
  111. The standard output is 132 columns wide.
  112.      The following command is used to invoke XREF --
  113.  
  114.              XREF <filename> [disk ref] [$<toggles>] ['title']
  115.  
  116.      If the disk reference is specified,  it instructs XREF as to what disk 
  117. to place the output on.
  118.      The toggles are described on the next display.
  119.      The  optional title field must be the last field in the command  line.  
  120. All characters following the first apostrophe on the command line up to the 
  121. second  apostrophe or until the end of the command line become  the  title.  
  122. The  title is truncated to 30 characters if the listing is 132 columns wide 
  123. and 20 characters if the D toggle (80 column listing) is specified.
  124.  
  125.  
  126.                                XREF Toggles
  127.  
  128.      Toggle  A:  Causes the listing to be otput to the list device as  well 
  129. as the disk file.
  130.  
  131.      Toggle  B:   Suppresses output to the disk.   If only the B toggle  is 
  132. specified, no output is produced.
  133.  
  134.      Toggle  C:   Suppresses output to the disk and permits output  to  the 
  135. list device; same as A and B combined.
  136.  
  137.      Toggle  D:  Causes output to be 80 columns wide instead of 132.
  138.  
  139.      Toggle  E:  Produces output with only the identifiers and their usage.
  140.  
  141.  
  142.      For example,  the following command produces a cross reference listing 
  143. on the list device which is 80 columns wide --
  144.  
  145.                                XREF PROG $CD
  146. :CBASIC:  Compiler Error Messages
  147.  
  148.                                Text Messages
  149.  
  150. NO SOURCE FILE:  <FILENAME>.BAS
  151.      The  compiler could not locate a source file used in either  a  CBASIC 
  152. command or an INCLUDE directive.
  153.  
  154. PROGRAM CONTAINS n UNMATCHED FOR STATEMENT(S)
  155.      There are n FOR statements for which a NEXT could not be found.
  156.  
  157. PROGRAM CONTAINS n UNMATCHED WHILE STATEMENT(S)
  158.      There are n WHILE statements for which a WEND could not be found.
  159.  
  160. WARNING:  INVALID CHARACTER IGNORED
  161.      The previous line contains an invalid ASCII character;  this character 
  162. is ignored by the compiler, and a question mark is printed in its place.
  163.  
  164. OUT OF DISK SPACE
  165.      The  compiler  has  run out of disk space while  attempting  to  write 
  166. either the INT or LST files.
  167.  
  168.                            Text Messages (Con't)
  169.  
  170. OUT OF DIRECTORY SPACE
  171.      The  compiler  has run out of directory entries  while  attempting  to 
  172. create or extend a file.
  173.  
  174. DISK ERROR
  175.      A disk error occurred while trying to read or write to a disk file.
  176.  
  177. INCLUDE NESTING TOO DEEP NEAR LINE n
  178.      An  include  statement near line n in the source program  exceeds  the 
  179. maximum level of nesting of source files.
  180.  
  181.  
  182.                            2-Letter Error Codes
  183.  
  184. BF -- Branch into Function
  185.      A branch into a multiple line function from outside was attempted.
  186.  
  187. BN -- Bad Number
  188.      An invalid numeric constant was encountered.
  189.  
  190. CE -- Close Error
  191.      The intermediate (.INT) file could not be closed.
  192.  
  193. CI -- Close Include
  194.      An invalid file name in an %INCLUDE statement.
  195.  
  196. CS -- COMMON Statement error
  197.      A  COMMON statement which was not the first statement in  the  program 
  198. was detected.
  199.  
  200. CV -- COMMON Variable error
  201.      An improper reference to a subscripte variable in a COMMON statement.
  202.  
  203. DE -- Disk Error
  204.      A disk error occurred while trying to read the .BAS file.
  205.  
  206. DF -- Disk Full
  207.      There  was no space on the disk or the disk directory was  full.   The 
  208. .INT file was not created.
  209.  
  210. DL -- Duplicate Line number
  211.      The same line number was used on two different lines.   Other compiler 
  212. errors  may  cause a DL error message to be printed even if duplicate  line 
  213. numbers do not exist.
  214.  
  215. DP -- Defined Previously
  216.      A variable in a DIM statement was previously defined.
  217.  
  218. EF -- Exponential Format
  219.      A number in exponential format was input with no digits following  the 
  220. E.
  221.  
  222. FA -- Function Attribute
  223.      A  function  name appears on the left side of an assignment  statement 
  224. but is not within that function.
  225.  
  226. FD -- Function Definition
  227.      A function name that has been previously defined is being redefined in 
  228. a DEF statement.
  229.  
  230. FE -- FOR Error
  231.      A  mixed mode expression exists in a FOR statement which the  compiler 
  232. cannot correct.
  233.  
  234. FI -- FOR Index
  235.      An  expression which is not an unsubscripted numeric variable is being 
  236. used as a FOR loop index.
  237.  
  238. FN -- Function parameter Number 
  239.      A function reference contains an incorrect number of parameters.
  240.  
  241. FP -- Function Parameter type
  242.      A function reference parameter type does not match the parameter  type 
  243. used in the function's DEF statement.
  244.  
  245. FU -- Function Undefined
  246.      A function has been referenced before it has been defined.
  247.  
  248. IE -- IF Expression
  249.      An  expression  used  immediately following an IF  evaluates  to  type 
  250. string.  Only type numeric is permitted.
  251.  
  252. IF -- In File
  253.      A  variable  used  in a FILE statement is of type numeric  where  type 
  254. string is required.
  255.  
  256. IP -- Input Prompt
  257.      An input prompt string is not surrounded by quotes.
  258.  
  259.  
  260. IS -- Invalid Subscript
  261.      A subscripted variable was referenced before it was dimensioned.
  262.  
  263. IT -- Invalid Toggle
  264.      An invalid compiler directive was encountered.
  265.  
  266. IU -- Invalid Use
  267.      A variable defined as an array is used with no subscripts.
  268.  
  269. MF -- Mixed Format
  270.      An expression evaluates to type string when type numeric is required.
  271.  
  272. MM -- Mixed Mode
  273.      Variables  of  type string and type numeric are combined in  the  same 
  274. expression.
  275.  
  276. MS -- Mixed String
  277.      A numeric expression was used where a string expression is required.
  278.  
  279. ND -- No DEFFN
  280.      A FEND statement was encountered without a corresponding DEF.
  281.  
  282. NI -- NEXT Index
  283.      A variable referenced by a NEXT statement does not match the  variable 
  284. referenced by the associated FOR statement.
  285.  
  286. NU -- NEXT Unexpected
  287.      A NEXT statement occurs without an associated FOR statement.
  288.  
  289. OF -- Out of Function
  290.      A branch out of a multiple line function from inside the function  was 
  291. attempted.
  292.  
  293. OO -- ON Overflow
  294.      More than 25 ON statements were used in the program.
  295.  
  296.  
  297. PM -- ??
  298.      A  DEF statement appeared within a multiple line function.   Functions 
  299. may not be nested.
  300.  
  301. SE -- Syntax Error
  302.      The source line contains a syntax error.
  303.  
  304. SF -- SAVEMEM File
  305.      A SAVEMEM statement uses an expression of type numeric to specify  the 
  306. file  to  be  loaded.   This expression must be  a  string.   Possibly  the 
  307. quotation marks were left off a string constant.
  308.  
  309. SN -- Subscript Number
  310.      A subscripted variable contains an incorrect number of subscripts.
  311.  
  312. SO -- Syntax Overflow
  313.      The  expression is too complex and should be simplified and placed  on 
  314. more than one line.
  315.  
  316. TO -- Table Overflow
  317.      The  program  is  too  large for the  system.   The  program  must  be 
  318. simplified or the system size increased.
  319.  
  320. UL -- Undefined Line number
  321.      A line number that does not exist has been referenced.
  322.  
  323. US -- Undefined String
  324.      A string has been terminated by a carriage return rather than quotes.
  325.  
  326. VO -- Variable Overflow
  327.      Variable names are too long for one statement.
  328.      This should not occur.
  329.  
  330. WE -- WHILE Error
  331.      The expression immediately following a WHILE statement is not numeric.
  332.  
  333. WU -- WHILE Undefined
  334.      A WEND statement occurs without an associated WHILE statement.
  335. :CBASIC:  Run-Time Error Messages -- Warnings
  336.  
  337.      Two textual run-time error messages are presented by CRUN:
  338.  
  339. NO INTERMEDIATE FILE
  340.      A  file name was not specified with the CRUN command,  or no  file  of 
  341. type .INT and the specified file name was found on disk.
  342.  
  343. IMPROPER INPUT - REENTER
  344.      This  message  occurs when the fields entered from the console do  not 
  345. match  the  field specified in the INPUT statement.   This can  occur  when 
  346. field types do not match or the number of fields entered is different  from 
  347. the  number  of  fields  specified.   All fields  specified  by  the  INPUT 
  348. statement must be reentered.
  349.  
  350.                      2-Letter Warning Codes
  351.  
  352. DZ -- Divide by Zero
  353.      A number was divided by zero.   The result is set to the largest valid 
  354. CBASIC number.
  355.  
  356. FL -- Field Length
  357.      A  field  length greater than 255 bytes was encountered during a  READ 
  358. LINE.  Only the first 255 characters of the record are retained.
  359.  
  360. LN -- Logarithm error
  361.      The  argument  given in the LOG function was zero  or  negative.   The 
  362. value of the argument is returned.
  363.  
  364. NE -- NEgative number
  365.      A  negative  number  was  specified following the  raise  to  a  power 
  366. operator (^).  The absolute value is used in the calculation.
  367.  
  368.  
  369. OF -- OverFlow
  370.      A calculation produced a number too large.   The result is set ot  the 
  371. largest valid CBASIC number.
  372.  
  373. SQ -- SQuare root error
  374.      A  negative  number was specified in the SQR function.   The  absolute 
  375. value is used.
  376. :CBASIC:  Run-Time Error Messages -- Error Codes
  377.  
  378. AC -- AsCii error
  379.      The string used as the argument in an ASC function evaluated to a null 
  380. string.
  381.  
  382. BN -- BUFF Number
  383.      The  value following the BUFF option in an OPEN or CREATE statement is 
  384. less than 1 or greater than 52.
  385.  
  386. CC -- Chain Code
  387.      A  chained program's code area is larger than the main program's  code 
  388. area.
  389.  
  390. CD -- Chain Data
  391.      A  chained program's data area is larger than the main program's  data 
  392. area.
  393.  
  394. CE -- Close Error
  395.      An error occurred upon closing a file.
  396.  
  397. CF -- Chain Function
  398.      A  chained program's constant area is larger than the  main  program's 
  399. constant area.
  400.  
  401. CP -- Chain Var Storage
  402.      A  chained  program's  variable storage area is larger than  the  main 
  403. program's variable storage area.
  404.  
  405. CS -- Chain SAVEMEM
  406.      A chained progra reserved a difference amount of memory with a SAVEMEM 
  407. statement than the main program.
  408.  
  409. CU -- Close Undefined file 
  410.      A close statement specified a file number that was not active.
  411.  
  412. DF -- Defined File
  413.      An  OPEN or CREATE was specified with a file number that  was  already 
  414. active.
  415.  
  416. DU -- Delete Undefined file
  417.      A DELETE statement specified a file number that was not active.
  418.  
  419. DW -- Disk Write error
  420.      An  error occurred while writing to a file.   This occurs when  either 
  421. the directory or the disk is full.
  422.  
  423. EF -- End of File
  424.      A  read  past the end of file occurred on a file for which no  IF  END 
  425. statement has been executed.
  426.  
  427. ER -- Error in Record
  428.      An  attempt  was  made to write a record of length  greater  than  the 
  429. maximum  record  size specified in the associated  OPEN,  CREATE,  or  FILE 
  430. statement.
  431.  
  432. FR -- File Rename
  433.      An attempt was made to rename a file to an existing file name.
  434.  
  435. FT -- File Toggle
  436.      A FILE statement was executed when 20 files were already active.
  437.  
  438. FU -- File Undefined
  439.      An attempt was made to read or write to a file that was not active.
  440.  
  441. IF -- Invalid File name
  442.      A file name was invalid.
  443.  
  444. IR -- Invalid Record number
  445.      A record number less than one was specified.
  446.  
  447. IV -- Invalid Version
  448.      An  attempt  was made to execute an INT file created by  a  Version  1 
  449. Compiler.
  450.  
  451. IX -- ??
  452.      A   FEND  statement  was  encountered  prior  to  executing  a  RETURN 
  453. statement.
  454.  
  455. LW -- Line Width
  456.      A  line  width  less than 1 or greater than 133 was  specified  in  an 
  457. LPRINTER WIDTH statement.
  458.  
  459. ME -- MAKE Error
  460.      An  error occurred while creating or extending a file because the disk 
  461. directory was full.
  462.  
  463. MP -- MATCH Parameter
  464.      The third parameter in a MATCH function was zero or negative.
  465.  
  466. NF -- Number of FILE
  467.      The file number specified was less than 1 or greater than 20.
  468.  
  469. NM -- No Memory
  470.      There was insufficient memory to load the program.
  471.  
  472. NN -- No Number field
  473.      An attempt was made to print a number with a PRINT USING statement but 
  474. there was not a numeric data field in the USING string.
  475.  
  476. NS -- No String field
  477.      An attempt was made to print a string with a PRINT USING statement but 
  478. there was not a string field in the USING string.
  479.  
  480. OD -- Overflow Data
  481.      A  READ  statement was executed with no DATA available.
  482.  
  483. OE -- OPEN Error
  484.      An attempt was made to OPEN a file that didn't exist and for which  no 
  485. IF END statement had been previously executed.
  486.  
  487. OI -- ON Index
  488.      The  expression  specified  in  an ON ...  GOSUB or  an  ON  ...  GOTO 
  489. statement  evaluated to a number less than 1 or greater than the number  of 
  490. line numbers contained in the statement.
  491.  
  492. OM -- Overflow Memory
  493.      The program ran out of memory during execution.
  494.  
  495. QE -- Quote Error
  496.      An attempt was made to PRINT to a file a string containing a quotation 
  497. mark.
  498.  
  499. RB -- Random BUFF
  500.      Random  access was attempted to a file activated with the BUFF  option 
  501. specifying more than 1 buffer.
  502.  
  503. RE -- READ Error
  504.      An attempt was made to read past the end of a record in a fixed file.
  505.  
  506. RG -- RETURN with no GOSUB
  507.      A RETURN occurred for which there was no GOSUB.
  508.  
  509. RU -- Random Undefined
  510.      A random read or print was attempted to other than a fixed file.
  511.  
  512. SB -- SuBscript
  513.      An  array subscript was used which exceeded the boundaries  for  which 
  514. the array was defined.
  515.  
  516. SL -- String Length
  517.      A concatenation operation resulted in a string of more than 255 bytes.
  518.  
  519. SO -- SAVEMEM
  520.      The file specified in a SAVEMEM statement could not be located on  the 
  521. referenced disk.
  522.  
  523. SS -- SubString error
  524.      The second parameter of a MID$ function was zero or negative.
  525.  
  526. TF -- Too many Files
  527.      An attempt was made to have more than 20 active files simultaneously.
  528.  
  529. TL -- TAB Length
  530.      A  TAB statement contained a parameter less than 1 or greater than the 
  531. current line width.
  532.  
  533. UN -- UNdefined edit string
  534.      A PRINT USING statement was executed with a null edit string.
  535.  
  536. WR -- WRite error
  537.      An  attempt was made to write to a file after it had  been  read,  but 
  538. before it had been read to the end of the file.
  539. :CBASIC:  CBASIC Reserved Words
  540.  
  541.      ABS       AND       AS        ASC       ATN
  542.      BUFF      CALL      CHAIN     CHR$      CLOSE
  543.      COMMAND$  COMMON    CONCHAR%  CONSOLE   CONSTAT%
  544.      COS       CREATE    DATA      DEF       DELETE
  545.      DIM       ELSE      END       EQ        EXP
  546.      FEND      FILE      FOR       FRE       GE
  547.      GO        GOSUB     GOTO      GT        IF
  548.      INITIALIZE INP      INPUT     INT       INT%
  549.      LE        LEFT$     LEN       LET       LINE
  550.      LOG       LPRINTER  LT        MATCH     MID$
  551.      NE        NEXT      NOT       ON        OPEN
  552.      OR        OUT       PEEK      POKE      POS
  553.      PRINT     RANDOMIZE READ      RECL      RECS
  554.      REM       REMARK    RENAME    RESTORE   RETURN
  555.      RIGHT$    RND       SADD      SGN       SIN
  556.      SIZE      SQR       STEP      STOP      STR$
  557.      SUB       TAB       TAN       THEN      TO
  558.      UCASE$    USING     VAL       WEND      WHILE
  559.      WIDTH     XOR
  560. :CBASIC2:  Expression Hierarchy
  561.  
  562.      The Hierarchy for expression evaluation is a follows --
  563.  
  564.           1.  nested parentheses ()
  565.           2.  power operator ^
  566.           3.  * /
  567.           4.  + - concatenation[+] unary[+ -]
  568.           5.  relational operators:
  569.                < <= > >= = <> LT LE GT GE EQ NE
  570.           6.  NOT
  571.           7.  AND
  572.           8.  OR XOR
  573. :CBASIC2:  Predefined Functions
  574.  
  575.                                I/O Functions
  576.  
  577. CONSTAT%  - Returns the console status as an integer.   If ready, a logical 
  578.           TRUE is returned.
  579.  
  580. CONCHAR%  - Reads one character from the console device.
  581.  
  582.  
  583.  
  584.                         Machine-Language Functions
  585.  
  586. PEEK (<exp>)
  587.           - Returns  the  contents  of  the memory location  given  by  the 
  588.           expression.
  589.  
  590. POKE <exp>, <exp>
  591.           - Low-order eight bits of second expression are stored in  memory 
  592.           location selected by first expression.
  593.  
  594. CALL <exp>
  595.           - CALL a machine language program at address specified.
  596.  
  597. SAVEMEM <constant>, <exp>
  598.           - Reserve  <constant> number of bytes and load the file specified 
  599. by the string <exp> into the reserved area.
  600.  
  601.                              Numeric Functions
  602.  
  603.      FRE            ABS(x)         INT(x)         INT%(x)
  604.      FLOAT(i%)      RND            SGN(x)         ATN(x)
  605.      COS(x)         EXP(x)         LOG(x) [e]     SIN(x)
  606.      SQR(x)         TAN(x)
  607.  
  608.                              String Functions
  609.  
  610.      ASC(a$)        CHR$(i%)       LEFT$(a$,i%)   LEN(a$)
  611.      UCASE$(a$)     MATCH(a$,b$,i%) MID$(a$,i%,j%) RIGHT$(a$,i%)
  612.      STR$(x)        VAL(a$)        COMMAND$       SADD(a$)
  613.  
  614.  
  615.                               Disk Functions
  616.  
  617.      RENAME(a$,b$)  SIZE(a$)
  618.  
  619.  
  620.                           User-Defined Functions
  621.  
  622.      The general forms are --
  623.  
  624.    [<line number>] DEF <function name> [<dummy arg list>] = <expression>
  625.  
  626. and
  627.  
  628.           [<line number>] DEF <function name> [<dummy arg list>]
  629.                                      .
  630.                                      .
  631.                                      .
  632.           [<line number>] FEND
  633.