home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / robot-pd / 12400.ZIP / 12400B.DSK / manual05.txt < prev    next >
Text File  |  1998-04-30  |  21KB  |  635 lines

  1.                  ╩C H A P T E R   F I V EΩ
  2.  
  3.  
  4. ╩5 COMP - Extended BASIC Language CompilerΩ
  5.  
  6. ╩FormatΩ :╔COMP [<selectors>] <source.file> <object.file>Θ
  7.  
  8. The compiler reads  through  the  given  source  file  and
  9. converts it into a BASIC program. This program can then be
  10. executed under Centrox in the  same  way  as  a  transient
  11. program. The object code produced by COMP will  be  placed
  12. in the destination file path.
  13.  
  14. Compilation can be aborted by holding down the "Q" key for
  15. about one second.
  16.  
  17. The selector "S" produces  system  object  code.  If  this
  18. option is selected then COMP will create a /COM file.  The
  19. file name element of the destination  file  path  will  be
  20. acknowledged but the directory path and file type will  be
  21. ignored.
  22.  
  23. Single drive users can only use this option if the  source
  24. code is held on  the  SYSTEM  disk.  The  easiest  way  to
  25. transfer your source across is to load it into  CTX,  then
  26. save it back onto the system disk.
  27.  
  28. The selector "E" produces error trapped code. If an  error
  29. occurs the program will display the BASIC error number and
  30. line, by default this switch is disabled which means  that
  31. errors cause the system to return to BASIC.
  32.  
  33.  
  34. ╩5.1 Source File RequirementsΩ
  35.  
  36. EBL differs from BASIC  in  that  it  does  not  use  line
  37. numbers.  The  program  is  laid  out  as  a   series   of
  38. statements, for which only the  order  is  important.  The
  39. actual "style" of the text is irrelevant to the computer.
  40.  
  41. It is recommended that all global variables be defined  in
  42. one go, right at the start.  The  term  "global  variable"
  43. simply means a type of variable which can be  accessed  by
  44. any part of the program. All  locomotive  BASIC  variables
  45. are global, for example.
  46.  
  47. Note that all the commands listed here can be  abbreviated
  48. by truncating the command name, and following it by a dot.
  49.  
  50. Comments can be inserted by enclosing the text between two
  51. braces eg: {This is a comment}
  52.  
  53. Commands must  be  followed  by  a  semicolon  `;'.  Older
  54. versions of the  compiler  allowed  the  semicolon  to  be
  55. omitted if it was at the end of a line-THIS IS  NO  LONGER
  56. ALLOWED.
  57.  
  58. Extensive use  is  made  of  complex  overlay  techniques.
  59. Whilst this releases  useful  memory,  it  does  have  the
  60. disadvantage of increasing disk access. As a  result,  the
  61. compiler does run fairly slowly. With a trailing  wind  it
  62. can average 10 lines per minute!
  63.  
  64.  
  65. ╩5.2 ProceduresΩ
  66.  
  67. Procedures are similar to subroutines. That is,  they  are
  68. sections of code which can be "called"  (invoked)  at  any
  69. time to carry out  frequently  required  tasks.  The  main
  70. difference between a subroutine and a  procedure  is  that
  71. procedures have defined entry and exit  points-subroutines
  72. do not.
  73.  
  74. The other difference is that procedures usually provide  a
  75. means by which arguments can be passed into  the  routine.
  76. They also provide for the creation of  "local"  variables.
  77.  
  78. Local variables become invisible  whenever  a  section  of
  79. code outside "their" procedure  is  being  executed.  This
  80. provides TOTAL  isolation  for  a  procedure's  variables,
  81. reducing the possibility of unwanted interference.
  82.  
  83.  
  84. ╩5.3 Using CommandsΩ
  85.  
  86. The compiler is only programmed with program flow commands
  87. such as IF..THEN, WHILE..WEND etc. It is up to the user to
  88. define ╔actionΘ commands such as PRINT,≤DRAW etc.≤They can
  89. be defined using the DEFCOM command, or inserted  directly
  90. into the BASIC code using the "INLINE" command.
  91.  
  92.  
  93. ╩5.4 Code BlocksΩ
  94.  
  95. Most of the structure commands work on a  principle  known
  96. as code  blocking.  One  example  of  this  is  the  BASIC
  97. WHILE...WEND structure. The code  being  repeated  can  be
  98. thought of as a block of instructions. This  principle  is
  99. extended in EBL.
  100.  
  101. It is considered good practice to indent each  section  of
  102. code in a block. This improves readability of the code, as
  103. it makes it easier to see where a code block has not  been
  104. closed.
  105.  
  106.  
  107. ╩5.5 Command DictionaryΩ
  108.  
  109. Each of the commands listed  is  given  in  the  following
  110. format:-
  111.  
  112. 1.Command Format.
  113.  
  114. Describes the general form of the command-ie exactly  what
  115. the compiler can expect. This information is given in  the
  116. same form as for the O.S. command list.
  117.  
  118. 2.Example Code.
  119.  
  120. This is a short section of code which shows one use of the
  121. command under consideration. In all the examples, only the
  122. relevant section  of  code  is  given.  The  commands  and
  123. functions shown may need to have  been  defined  elsewhere
  124. for the example to ╔workΘ.
  125.  
  126.  
  127. ╩5.5.1 Definition CommandsΩ
  128.  
  129.  
  130. ╩FormatΩ :╔DEFTITLE("<Title string>"[,version[,mark]]);Θ
  131. (Overlayed)
  132.  
  133. This  changes  the  program  title  from  the  default  of
  134. <program name>. This title will form part of the copyright
  135. banner. The version and mark numbers can  also  be  added.
  136. Note that the message:-
  137.  
  138. The format of the copyright banner is:-
  139. <Title String> v<version>.<mark> - (c) <user name>, <year>
  140. Where <version> and <mark> default to 1 and 0.
  141.  
  142. The copyright banner is always displayed  by  COMP  object
  143. code and is  displayed  after  the  program  has  finished
  144. loading.
  145.  
  146.  
  147. ╩FormatΩ :╔DEFVAR ++<<variable><type>[=<expression>]>;Θ
  148. (Overlayed)
  149.  
  150. ╩ExampleΩ :DEFVAR name$="This is my name"
  151.                 count%
  152.                 money!=0
  153.          ENDVAR;
  154.  
  155. Defines the  following  list  of  variables  so  that  the
  156. compiler will recognise them when they appear  (later)  in
  157. the code. If DEFVAR  is  used  outside  a  procedure,  the
  158. variables will be global. If it is used within a procedure
  159. they will be local to that procedure.
  160.  
  161. If the optional expession is included, then  the  variable
  162. will be given that value every time the  DEFVAR  statement
  163. is executed. Note that  for  this  to  happen  the  DEFVAR
  164. statement be inside the main program body or a procedure.
  165.  
  166. External variables-variables which were  created  by  some
  167. other program-can be defined  simply  by  placing  a  star
  168. between the name and type. The most common use of external
  169. variables  is  accessing  Centrox  variables.  A  list  of
  170. Centrox variables can be found in the technical section of
  171. this manual.
  172.  
  173.  
  174. ╩FormatΩ :╔DEFFUNC <name>:<keyword>[<type>]
  175. ╙≤≤≤≤ ([++<<name><type>>])Θ
  176. (Overlayed)
  177.  
  178. ╩ExampleΩ :DEFFUNC left:left$(string$,posn%);
  179.  
  180. Defines a BASIC function. The  keyword  will  replace  the
  181. name  when  compiled.  The  list  of  types  indicate  the
  182. parameter type required for the function.  If  a  function
  183. has optional parameters, then define more than one version
  184. of the function:-
  185.  
  186.                   ╔DEFFUNC rnd0:RND!();Θ
  187.                   ╔DEFFUNC rnd1:RND!(value%);Θ
  188.  
  189. The name supplied as a parameter serves only as a reminder
  190. to the programmer as to the argument required to be passed
  191. to the function. The  parameters  do,  however,  exist  as
  192. global variables in their own right.  You  can  use  these
  193. parameters by name if you find  yourself  running  out  of
  194. memory. Note that string functions MUST be suffixed by the
  195. dollar sign as normal.
  196.  
  197.  
  198. ╩FormatΩ :╔DEFPROC <name>([++<<variable><type>>]);Θ
  199. (Overlayed)
  200.  
  201. ╩ExampleΩ :DEFPROC box(xco%,
  202.                      yco%,
  203.                     side%)
  204.           move(xco,yco);
  205.           drawr(side,0);
  206.           drawr(0,-side);
  207.           drawr(-side,0);
  208.           drawr(0,side);
  209.          ENDPROC;
  210.  
  211. Defines a section of code such that  its  actions  can  be
  212. invoked by name and treated as a  command.  It  should  be
  213. noted however that procedures do involve some overhead  in
  214. code  and  will  therefore  execute  slower  than   normal
  215. commands.
  216.  
  217. The list of variables are the parameters of the procedure.
  218. The best way to think of parameter variables is that  they
  219. are normal variables (like  those  that  might  have  been
  220. created with  DEFVAR)  but  that  when  the  procedure  is
  221. invoked, they take  on  the  value  of  the  corresponding
  222. argument.
  223.  
  224. The above ╔BOXΘ procedure could be invoked by:-
  225.  
  226.                         ╔box(50,50,100);Θ
  227.  
  228. Which would draw a box whose  top  left  coordinates  were
  229. 50,50 and whose sides were 100 pixels long.
  230.  
  231.  
  232. ╩FormatΩ :╔DEFPROG <name>([++<<variable><type>>]);Θ
  233. (Overlayed)
  234.  
  235. ╩ExampleΩ :DEFPROG mode(mode.number%)
  236.           mode(mode.number);
  237.          ENDPROG;
  238.  
  239. NB:The name given with the command has no  affect  on  the
  240. program, it only  serves  as  a  useful  reminder  to  the
  241. programmer.
  242.  
  243. Defines the start of a program. The list of variables  may
  244. be given to allow argument passing  from  the  Shell.  The
  245. Shell command line format  for  such  arguments  is  given
  246. below:-
  247.  
  248. 1.INTEGERs and REAL numbers.
  249.  
  250. Simply type the number after the command name or  previous
  251. arguments:-
  252.  
  253.                     ╔1>box 50 50 100Θ
  254.  
  255. 2.STRING values.
  256.  
  257. These should be entered enclosed between quotes.
  258.  
  259.        ╔2>centre 12 "Centres text on given line"Θ
  260.  
  261. It is NOT recommended that you read filenames into  string
  262. parameters, since users may  be  confused  by  the  double
  263. quotes (remember-the Shell does not normally require  that
  264. you use double quotes). The solution to this problem  will
  265. be covered in the section on using KERNEL vectors.
  266.  
  267. Arguments must be constant values. Expressions will NOT be
  268. evaluated-only misinterpreted.  Take  care  when  entering
  269. numeric data from the Shell, programs may crash if numeric
  270. data is given in an invalid format. At the very  least,  a
  271. value of zero will be placed in the parameter.
  272.  
  273.  
  274. ╩FormatΩ :╔DEFLOOP <number of times>[ USING <variable>];Θ
  275. (Internal)
  276.  
  277. ╩ExampleΩ :prints("8 Times table");
  278.          count=1;
  279.          DEFLOOP 12;
  280.           printn(count);prints("times 8 is");
  281.           printn(count*8);
  282.          ENDLOOP
  283.  
  284. In most programs there will be a  section  of  code  which
  285. needs to be  repeated  a  certain  number  of  times.  The
  286. DEFLOOP command defines the start of  such  a  section  of
  287. code, and the number of repetitions. The section  of  code
  288. is terminated by an ENDLOOP command.
  289.  
  290. The  optional  USING  clause  allows  you  to  specify   a
  291. particular variable to be used as the  loop  counter.  The
  292. above example could (and should) be written as:-
  293.  
  294.          Prints("8 Times table");
  295.          DEFLOOP 12 USING Count;
  296.           Printn(Count);Prints("times 8 is");
  297.           Printn(Count*8);
  298.          ENDLOOP
  299.  
  300. Loops may be nested - that is, one  loop  may  be  defined
  301. inside another, up to the level of ten nested  loops.  The
  302. compiler will associate ONE AND ONLY ONE  ENDLOOP  command
  303. with every DEFLOOP.
  304.  
  305.  
  306. ╩FormatΩ :╔DEFCASE <variable>:++<<expression>
  307. ≤≤≤≤≤ DO <procedure call> {CONT DONE DEFAULT ENDCASE}>;Θ
  308. (Overlayed)
  309.  
  310. ╩ExampleΩ :DEFCASE menu.choice "L" DO load.file;DONE;
  311.                              "S" DO save.file;DONE;
  312.                              "P" DO print.file;DEFAULT;
  313.                                     not.a.choice;ENDCASE;
  314.  
  315. Defines a multiple 'IF' command. In effect,  each  of  the
  316. expressions is evaluated in turn. When the result  matches
  317. the  contents  of  the  given  variable,   the   procedure
  318. associated with the expression will be called.  There  are
  319. four possible actions after the procedure has been called.
  320. The action depends on the next identifier.
  321.  
  322. CONT - Continue searching down  the  tree  for  a  further
  323. match.
  324.  
  325. DONE - Jump past the remaining tree tests.
  326.  
  327. DEFAULT - The next procedure call (NO expression) is to be
  328. executed if no match has been found so far.
  329.  
  330. ENDCASE - End of tree.
  331.  
  332.  
  333. ╩FormatΩ :╔DEFCOM <command name><BASIC.name>
  334. ≤≤≤≤≤ ([++<<name><type>>]);Θ
  335. (Overlayed)
  336.  
  337. ╩ExampleΩ :DEFCOM prints:print(string$);
  338.  
  339. As mentioned above, COMP knows very  few  BASIC  commands.
  340. There are two methods of entering commands  that  it  does
  341. not know about. DEFCOM is ideal for  BASIC  commands  that
  342. have a set number of parameters. When it finds the command
  343. name, the compiler will swap it for the  BASIC  name.  The
  344. brackets will ┴NOTß appear in the object code.
  345.  
  346. If a command has optional parameters, then define  several
  347. versions with different command names, but the same  BASIC
  348. name. The parameter name serves only as a reminder  as  to
  349. the nature of the argument.
  350.  
  351.  
  352. ╩FormatΩ :╔DEFLABEL <name>[=<address>];Θ
  353. (Overlayed)
  354.  
  355. ╩ExampleΩ :DEFLABEL data1;
  356.            INLINE restore^data1
  357.  
  358. This defines a label that can be  referenced  from  INLINE
  359. code-see later. The optional [=<address>]  clause  can  be
  360. used to assign a particular  line  number  to  the  label.
  361.  
  362.  
  363. ╩FormatΩ :╔DEFWHILE <condition>;Θ
  364. (Internal)
  365.  
  366. ╩ExampleΩ :count=0;
  367.          DEFWHILE count<10;
  368.           count=count+1;
  369.           prints("Now at number");printn(count);
  370.          ENDWHILE;
  371.  
  372. In a lot of programs there will be a section of code which
  373. needs to be repeated until  a  certain  condition  becomes
  374. true. The DEFWHILE command defines the start of just  such
  375. a section of program  code.  The  code  is  terminated  by
  376. ENDWHILE.
  377.  
  378. WHILE loops can be nested up to ten deep.
  379.  
  380.  
  381. ╩FormatΩ :╔DEFARRAY <array name><type.id>
  382. ≤≤≤≤≤ [++<subscript range>]Θ
  383. (Overlayed)
  384.  
  385. ╩ExampleΩ :DEFARRAY name$[6-10]
  386.  
  387. Warns the compiler that space should be made available for
  388. the given array. Note that the command allows the user  to
  389. choose the range of subscripts, ie choose  the  number  of
  390. the first subscript instead of it starting at  zero.  COMP
  391. will NOT accept a starting subscript number less than one.
  392.  
  393. Note that COMP produces object code  in  which  the  first
  394. subscript of an array is ALWAYS zero, by compensating  for
  395. any offset. This means that care needs to  be  taken  when
  396. accessing arrays using INLINE code-it must be  written  to
  397. allow for this.
  398.  
  399. As an example:-
  400.  
  401. ╔DEFARRAY fred$[6-6] {Single dimension array !}
  402.  ....
  403.  fred[6]="Example"
  404.  INLINE ?fred[0]  {Display `Example'}Θ
  405.  
  406. Once defined, arrays can  be  accessed  like  variables-as
  407. long as the subscripts are given. They can also  be  local
  408. if required.≤Array ╔elementsΘ can ≤be passed as  arguments
  409. but not if they are to form part of an array's  subscript.
  410. Arrays or their elements may NOT be defined as  parameters
  411. under any circumstances !
  412.  
  413. Note that array  notation  requires  that  subscripts  are
  414. enclosed in square brackets,  hence  the  square  brackets
  415. used  to  define  the  command  do  NOT  imply  that   the
  416. subscripts are optional.
  417.  
  418.  
  419. ╩5.5.2 Control StructuresΩ
  420.  
  421. ╩FormatΩ :╔IF <cond.> THEN <comd.> [ELSE <comd.>] ENDIFΘ
  422. (Internal)
  423.  
  424. ╩ExampleΩ :IF choice=1 THEN got.it.right;
  425.                      ELSE got.it.wrong;
  426.          ENDIF;
  427.  
  428. If the result of the condition is TRUE, the first  section
  429. of commands  will  be  executed.  If  the  result  of  the
  430. condition is FALSE then the second  set  of  commands  (if
  431. given) will be executed, control then jumps  to  the  next
  432. command after the ENDIF command.
  433.  
  434.  
  435. ╩5.5.3 General CommandsΩ
  436.  
  437. ╩FormatΩ :╔READARG([++<<variable><type>])Θ
  438. (Overlayed)
  439.  
  440. ╩ExampleΩ :READARG(name$);
  441.  
  442. Reads arguments into the given variables, in the same  way
  443. as DEFPROG. Note that, again, the variables do not have to
  444. have been defined already.
  445.  
  446.  
  447. ╩FormatΩ :╔INLINE(<inline code>);Θ
  448. (Overlayed)
  449.  
  450. ╩ExampleΩ :INLINE(?using"╤##±";var!);
  451.  
  452. The INLINE command is the alternative method for  entering
  453. BASIC commands. The inline code will be  copied  into  the
  454. object code exactly  as  read  except  for  certain  "meta
  455. characters":-
  456.  
  457.                     ╔_<expression>_Θ
  458.  
  459. This signals that the following text is a COMP evaluatable
  460. expression. The resulting code will then be inserted  into
  461. the text. The use of "_" as an  expression  terminator  is
  462. optional. Any other legal terminator would  also  suffice,
  463. with the following proviso.
  464.  
  465. Standard terminators  like  ";,)]"  are  accepted  by  the
  466. expression parser and not returned to INLINE.  This  means
  467. that the following INLINE statement would not work:-
  468.  
  469.          ╔INLINE(ink _expr1,_expr2);Θ
  470.  
  471. The  separating  comma  would  be   "swallowed"   by   the
  472. expression parser and would hence not appear in the object
  473. code. The solution is to add a "throwaway" terminator. The
  474. "_" sysmbol is intended to be used for this  purpose.  The
  475. correct code might be:-
  476.  
  477.          ╔INLINE(ink _expr1_,_expr2_);Θ
  478.  
  479.                        ╔"^<label>"Θ
  480.  
  481. This allows the user to reference a label. (see  DEFLABEL)
  482. note that this command causes the current line  of  object
  483. code to be written to disk and hence the  following  would
  484. not have the intended result:-
  485.  
  486.      ╔INLINE(If true% THEN GOSUB^DoThis:GOTO ^DoThatΘ
  487.  
  488. The GOTO≤statement would be≤placed on the line ╔afterΘ the
  489. GOSUB and IF.
  490.  
  491.  
  492. ╩FormatΩ :╔INCLUDE <file path>Θ
  493. (Overlayed)
  494.  
  495. ╩ExampleΩ :INCLUDE -/eblc.src/basiccom.lib;
  496.  
  497. Tells≤the compiler≤to ╔temporarilyΘ abandon  reading  from
  498. the current file, and to start reading from the given file
  499. instead. INCLUDE should be used to build up library  files
  500. which contain  useful  sections  of  code.  The  following
  501. library files are provided as standard:-
  502.  
  503. "BASICCOM.LIB"
  504.  
  505. Contains  common  BASIC   command   definitions.   It   is
  506. recommended that this file be  automatically  INCLUDEd  at
  507. the start of all programs.
  508.  
  509.  
  510. "TURTLE.LIB"
  511.  
  512. This file contains turtle extensions, mainly in  the  form
  513. of procedures. Note that these  definitions  require  that
  514. the "BASICCOM.LIB" and  "BASICFN.LIB"  files  be  included
  515. BEFORE the "TURTLE.LIB" file.
  516.  
  517.  
  518. "BASICFN.LIB"
  519.  
  520. Contains common BASIC function definitions.
  521.  
  522. It is recommended that users CAT each LIB file to see what
  523. commands are available.
  524.  
  525. Note that≤all ╔proceduresΘ appear in the≤resulting  object
  526. code-even if they  haven't  been  used.  This  means  that
  527. surplus procedures will waste  disk  storage  space.  Bare
  528. this in mind when creating  library  text  files.  Such  a
  529. problem≤will not occur≤with ╔commandsΘ and ╔functionsΘ  as
  530. they don't translate to BASIC code.
  531.  
  532. INCLUDEd files can themselves use INCLUDE, but  only  four
  533. files can be suspended at any one  time.  INCLUDE  can  be
  534. used any number of times provided that the above  rule  is
  535. adhered to.
  536.  
  537.  
  538. ╩FormatΩ :╔EXCLUDEΘ
  539. (Overlayed)
  540.  
  541. Instructs the compiler to abandon  the  current  file  and
  542. return to the previous file suspended by INCLUDE.
  543.  
  544.  
  545. ╩FormatΩ :╔SETLINE <line number>Θ
  546. (Overlayed)
  547.  
  548. Instruct the compiler to compile  subsequent  object  code
  549. with a new sequence of line  numbers,  starting  with  the
  550. number  given.  This  command  can  be  used  to  generate
  551. Compiler LINK files, by making the first  command  in  the
  552. file:-
  553.                        SETLINE 10000
  554.  
  555.  
  556. ╩FormatΩ :╔LINETO <address>[,<offset>]Θ
  557.  
  558. This marks the start of a block of  code  that  is  to  be
  559. compiled from the given line number.  The  <offset>  saves
  560. your from having to use the DEFSEG command, but  works  in
  561. the same way. The block  of  code  is  terminated  by  the
  562. LINEBACK command and subsequent code is generated  in  the
  563. original sequence until further SETLINE or LINETO commands
  564. are issued.
  565.  
  566.  
  567. ╩FormatΩ :╔EXIT LOOPΘ
  568.         or
  569.       ╔EXIT WHILEΘ
  570.       ╔EXIT PROCΘ
  571.       ╔EXIT VIA <proc call>Θ
  572.  
  573. EXIT LOOP  and  EXIT  WHILE  cause  a  jump  to  the  next
  574. statement after the current ENDLOOP or ENDWHILE. Note that
  575. use of EXIT LOOP while inside a DEFLOOP  nested   DEFWHILE
  576. block will terminate both the DEFWHILE and DEFLOOP blocks.
  577.  
  578. EXIT PROC simply terminates the current  procedure,  while
  579. EXIT VIA  terminates  the  current  procedure  by  jumping
  580. directly into another, specified, procedure.
  581.  
  582.  
  583. ╩FormatΩ :╔SYSTEM <vector>[++<argument>]Θ
  584. (Overlayed)
  585.  
  586. Calls one of the system vectors.  The  list  of  arguments
  587. vary for each vector and are listed here:-
  588.  
  589. ╤#±1 :<directory number>
  590. ╤#±2 :<directory path>╟+τ
  591. ╤#±3 :<File path>╟+τ
  592. ╤#±4 :None.
  593. ╤#±5 :<command phrase>
  594. ╤#±6 :<AMSDOS file.name>,<USER number>,<drive flag>
  595. ╤#±7 :None.
  596. ╤#±8 :<Type flag>
  597. ╤#±9 :<phrase or word>
  598. ╤#±10:As ╤#±6
  599. ╤#±11:None.
  600. ╤#±12:None.
  601. ╤#±13:<drive flag>
  602.  
  603. ╟+τ:These should be prefixed by a space eg; " test.bas"
  604.  
  605. ╩Passing Filenames As Arguments From The ShellΩ
  606.  
  607. If your program requires a filename to be passed, use  the
  608. following method:-
  609.  
  610. ╔Command format:1>MYPROG <number> <filename> <selectors>Θ
  611.  
  612. ╔Program:-Θ
  613. DEFPROG myprog(number%); {Read number direct}
  614.  INLINE vectr%=3:GOSUB 60000;
  615.  {Above line evaluates file path as received from Shell}
  616.  READARG(selectors$); {read string of selectors}
  617. ...
  618. ENDPROG
  619.  
  620. Note that SYSTEM 3 is NOT used, since this requires that a
  621. file path is already known.
  622.  
  623. Note that your program picks up command tail arguments  in
  624. the same way as other programs, allowing  the  intermixing
  625. of vector╤#±3 with READARG() as above.
  626.  
  627. For further details, see the technical information section
  628. at the end of this manual.
  629.   F I V EΩ
  630.  
  631.  
  632. ╩5 COMP - Extended BASIC Language CompilerΩ
  633.  
  634. ╩FormatΩ :╔COMP [<selectors>]