home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / bwbasic.zip / bwbasic.INF (.txt) < prev    next >
OS/2 Help File  |  1993-04-27  |  21KB  |  557 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Read Me ΓòÉΓòÉΓòÉ
  3.  
  4.                            Bywater Software Announces
  5.                            the First Public Release of
  6.  
  7.  
  8.                   Bywater BASIC Interpreter/Shell, version 1.10
  9.  
  10.                        Copyright (c) 1992, Ted A. Campbell
  11.                     for bwBASIC version 1.10, 1 November 1992
  12.  
  13. DESCRIPTION:
  14.  
  15.   The Bywater BASIC Interpreter (bwBASIC) implements a large
  16.   superset of the ANSI Standard for Minimal BASIC (X3.60-1978)
  17.   implemented in ANSI C, and offers a simple interactive environ-
  18.   ment including some shell program facilities as an extension of
  19.   BASIC. The interpreter has been compiled successfully on a range
  20.   of ANSI C compilers on varying platforms with no alterations
  21.   to source code necessary.
  22.  
  23.  
  24. OBTAINING THE SOURCE CODE:
  25.  
  26.   The source code for bwBASIC 1.10 will be posted to network news
  27.   groups and is available immediately by anonymous ftp. To obtain
  28.   the source code, ftp to site duke.cs.duke.edu, cd to /pub/bywater
  29.   and get the appropriate files.  These are as follows:
  30.  
  31.   bwb110.zip    Source code in ZIP compressed format, with text lines
  32.           concluded with CR-LF. This is the appropriate version
  33.           for DOS-based computers.
  34.  
  35.   bwb110.tar.Z    Tar'd and compressed source code with text lines con-
  36.           cluded with LF only.  This is the appropriate version
  37.           for Unix-based computers.
  38.  
  39.  
  40. COMMUNICATIONS:
  41.  
  42.   Ted A. Campbell
  43.   Bywater Software
  44.   P.O. Box 4023
  45.   Duke Station
  46.   Durham, NC  27706
  47.   USA
  48.  
  49.   email:  tcamp@acpub.duke.edu
  50.  
  51.  
  52. A LIST OF BASIC COMMANDS AND FUNCTIONS IMPLEMENTED in bwBASIC 1.10:
  53.  
  54.   ABS( number )
  55.   ASC( string$ )
  56.   ATN( number )
  57.   CHAIN [MERGE] file-name [, line-number] [, ALL]
  58.   CHR$( number )
  59.   CINT( number )
  60.   CLEAR
  61.   CLOSE [[#]file-number]...
  62.   COMMON variable [, variable...]
  63.   COS( number )
  64.   CSNG( number )
  65.   CVD( string$ )
  66.   CVI( string$ )
  67.   CVS( string$ )
  68.   DATA constant[,constant]...
  69.   DATE$
  70.   DEF FNname(arg...)] = expression
  71.   DEFDBL letter[-letter](, letter[-letter])...
  72.   DEFINT letter[-letter](, letter[-letter])...
  73.   DEFSNG letter[-letter](, letter[-letter])...
  74.   DEFSTR letter[-letter](, letter[-letter])...
  75.   DELETE line[-line]
  76.   DIM variable(elements...)[variable(elements...)]...
  77.   END
  78.   ENVIRON variable-string = string
  79.   ENVIRON$( variable-string )
  80.   EOF( device-number )
  81.   ERASE variable[, variable]...
  82.   ERL
  83.   ERR
  84.   ERROR number
  85.   EXP( number )
  86.   FIELD [#] device-number, number AS string-variable [, number AS string-variable...]
  87.   FOR counter = start TO finish [STEP increment]
  88.   GET [#] device-number [, record-number]
  89.   GOSUB line
  90.   GOTO line
  91.   HEX$( number )
  92.   IF expression THEN statement [ELSE statement]
  93.   INPUT [# device-number]|[;]["prompt string";]list of variables
  94.   INSTR( [start-position,] string-searched$, string-pattern$ )
  95.   INT( number )
  96.   KILL file-name
  97.   LEFT$( string$, number-of-spaces )
  98.   LEN( string$ )
  99.   LET variable = expression
  100.   LINE INPUT [[#] device-number,]["prompt string";] string-variable$
  101.   LIST line[-line]
  102.   LOAD file-name
  103.   LOC( device-number )
  104.   LOF( device-number )
  105.   LOG( number )
  106.   LSET string-variable$ = expression
  107.   MERGE file-name
  108.   MID$( string$, start-position-in-string[, number-of-spaces ] )
  109.   MKD$( double-value# )
  110.   MKI$( integer-value% )
  111.   MKS$( single-value! )
  112.   NAME old-file-name AS new-file-name
  113.   NEW
  114.   NEXT counter
  115.   OCT$( number )
  116.   ON variable GOTO|GOSUB line[,line,line,...]
  117.   ON ERROR GOSUB line
  118.   OPEN O|I|R, [#]device-number, file-name [,record length]
  119.     file-name FOR INPUT|OUTPUT|APPEND AS [#]device-number [LEN = record-length]
  120.   OPTION BASE number
  121.   POS
  122.   PRINT [# device-number,][USING format-string$;] expressions...
  123.   PUT [#] device-number [, record-number]
  124.   RANDOMIZE number
  125.   READ variable[, variable]...
  126.   REM string
  127.   RESTORE line
  128.   RETURN
  129.   RIGHT$( string$, number-of-spaces )
  130.   RND( number )
  131.   RSET string-variable$ = expression
  132.   RUN [line][file-name]
  133.   SAVE file-name
  134.   SGN( number )
  135.   SIN( number )
  136.   SPACE$( number )
  137.   SPC( number )
  138.   SQR( number )
  139.   STOP
  140.   STR$( number )
  141.   STRING$( number, ascii-value|string$ )
  142.   SWAP variable, variable
  143.   SYSTEM
  144.   TAB( number )
  145.   TAN( number )
  146.   TIME$
  147.   TIMER
  148.   TROFF
  149.   TRON
  150.   VAL( string$ )
  151.   WEND
  152.   WHILE expression
  153.   WIDTH [# device-number,] number
  154.   WRITE [# device-number,] element [, element ]....
  155.  
  156.   If DIRECTORY_CMDS is set to TRUE when the program is compiled,
  157.   then the following commands will be available:
  158.  
  159.   CHDIR pathname
  160.   MKDIR pathname
  161.   RMDIR pathname
  162.  
  163.  
  164. ΓòÉΓòÉΓòÉ 2. Documentation ΓòÉΓòÉΓòÉ
  165.  
  166.                   Bywater BASIC Interpreter/Shell, version 1.10
  167.  
  168.                        Copyright (c) 1992, Ted A. Campbell
  169.                     for bwBASIC version 1.10, 1 November 1992
  170.  
  171.  
  172. ΓòÉΓòÉΓòÉ 2.1. Description ΓòÉΓòÉΓòÉ
  173.  
  174. The Bywater BASIC Interpreter (bwBASIC) implements a large superset of the ANSI 
  175. Standard for Minimal BASIC (X3.60-1978) in ANSI C and offers shell program 
  176. facilities as an extension of BASIC. 
  177.  
  178. The set of BASIC commands and functions implemented is fairly limited (see 
  179. section three below), although more commands and functions are implemented than 
  180. appear in the specification for Minimal BASIC. There are no commands that are 
  181. terminal- or hardware specific. (Seriously -- CLS may work under bwBASIC on 
  182. your DOS-based pc, but that is because bwBASIC shells out to DOS when it does 
  183. not recognize CLS and executes CLS there.) 
  184.  
  185. The interpreter is slow.  Whenever faced with a choice between conceptual 
  186. clarity and speed, I have consistently chosen the former.  The interpreter is 
  187. the simplest design available, and utilizes no system of intermediate code, 
  188. which would speed up considerably its operation.  As it is, each line is 
  189. interpreted afresh as the interpreter comes to it. 
  190.  
  191. bwBASIC implements one feature not available in previous BASIC interpreters: a 
  192. shell command can be entered interactively at the bwBASIC prompt, and the 
  193. interpreter will execute it under a command shell.  For instance, the command 
  194. "dir *.bas" can be entered in bwBASIC (under DOS, or "ls -l *.bas" under UNIX) 
  195. and it will be executed as from the operating system command line. Shell 
  196. commands can also be given on numbered lines in a bwBASIC program, so that 
  197. bwBASIC can be used as a shell programming language. bwBASIC's implementation 
  198. of the RMDIR, CHDIR, MKDIR, NAME, KILL, ENVIRON, and ENVIRON$() commands and 
  199. functions offer further shell-processing capabilities. 
  200.  
  201.  
  202. ΓòÉΓòÉΓòÉ 2.2. Terms of Use ΓòÉΓòÉΓòÉ
  203.  
  204. The bwBASIC source code and executables produced from it can be used subject to 
  205. the following statement which is included in the header to all the source code 
  206. files: 
  207.  
  208. All U.S. and international copyrights are claimed by the author. The author 
  209. grants permission to use this code and software based on it under the following 
  210. conditions: (a) in general, the code and software based upon it may be used by 
  211. individuals and by non-profit organizations; (b) it may also be utilized by 
  212. governmental agencies in any country, with the exception of military agencies; 
  213. (c) the code and/or software based upon it may not be sold for a profit without 
  214. an explicit and specific permission from the author, except that a minimal fee 
  215. may be charged for media on which it is copied, and for copying and handling; 
  216. (d) the code must be distributed in the form in which it has been released by 
  217. the author; and (e) the code and software based upon it may not be used for 
  218. illegal activities. 
  219.  
  220.  
  221. ΓòÉΓòÉΓòÉ 2.3. BASIC Commands and Functions Implemented ΓòÉΓòÉΓòÉ
  222.  
  223. ABS( number )
  224. ASC( string$ )
  225. ATN( number )
  226. CHAIN [MERGE] file-name [, line-number] [, ALL]
  227. CHR$( number )
  228. CINT( number )
  229. CLEAR
  230. CLOSE [[#]file-number]...
  231. COMMON variable [, variable...]
  232. COS( number )
  233. CSNG( number )
  234. CVD( string$ )
  235. CVI( string$ )
  236. CVS( string$ )
  237. DATA constant[,constant]...
  238. DATE$
  239. DEF FNname(arg...)] = expression
  240. DEFDBL letter[-letter](, letter[-letter])...
  241. DEFINT letter[-letter](, letter[-letter])...
  242. DEFSNG letter[-letter](, letter[-letter])...
  243. DEFSTR letter[-letter](, letter[-letter])...
  244. DELETE line[-line]
  245. DIM variable(elements...)[variable(elements...)]...
  246. END
  247. ENVIRON variable-string = string
  248. ENVIRON$( variable-string )
  249. EOF( device-number )
  250. ERASE variable[, variable]...
  251. ERL
  252. ERR
  253. ERROR number
  254. EXP( number )
  255. FIELD [#] device-number, number AS string-variable [, number AS string-variable...]
  256. FOR counter = start TO finish [STEP increment]
  257. GET [#] device-number [, record-number]
  258. GOSUB line
  259. GOTO line
  260. HEX$( number )
  261. IF expression THEN statement [ELSE statement]
  262. INPUT [# device-number]|[;]["prompt string";]list of variables
  263. INSTR( [start-position,] string-searched$, string-pattern$ )
  264. INT( number )
  265. KILL file-name
  266. LEFT$( string$, number-of-spaces )
  267. LEN( string$ )
  268. LET variable = expression
  269. LINE INPUT [[#] device-number,]["prompt string";] string-variable$
  270. LIST line[-line]
  271. LOAD file-name
  272. LOC( device-number )
  273. LOF( device-number )
  274. LOG( number )
  275. LSET string-variable$ = expression
  276. MERGE file-name
  277. MID$( string$, start-position-in-string[, number-of-spaces ] )
  278. MKD$( double-value# )
  279. MKI$( integer-value% )
  280. MKS$( single-value! )
  281. NAME old-file-name AS new-file-name
  282. NEW
  283. NEXT counter
  284. OCT$( number )
  285. ON variable GOTO|GOSUB line[,line,line,...]
  286. ON ERROR GOSUB line
  287. OPEN O|I|R, [#]device-number, file-name [,record length]
  288.    file-name FOR INPUT|OUTPUT|APPEND AS [#]device-number [LEN = record-length]
  289. OPTION BASE number
  290. POS
  291. PRINT [# device-number,][USING format-string$;] expressions...
  292. PUT [#] device-number [, record-number]
  293. RANDOMIZE number
  294. READ variable[, variable]...
  295. REM string
  296. RESTORE line
  297. RETURN
  298. RIGHT$( string$, number-of-spaces )
  299. RND( number )
  300. RSET string-variable$ = expression
  301. RUN [line][file-name]
  302. SAVE file-name
  303. SGN( number )
  304. SIN( number )
  305. SPACE$( number )
  306. SPC( number )
  307. SQR( number )
  308. STOP
  309. STR$( number )
  310. STRING$( number, ascii-value|string$ )
  311. SWAP variable, variable
  312. SYSTEM
  313. TAB( number )
  314. TAN( number )
  315. TIME$
  316. TIMER
  317. TROFF
  318. TRON
  319. VAL( string$ )
  320. WEND
  321. WHILE expression
  322. WIDTH [# device-number,] number
  323. WRITE [# device-number,] element [, element ]....
  324.  
  325. If DIRECTORY_CMDS is set to TRUE when the program is compiled, then the 
  326. following commands will be available: 
  327.  
  328. CHDIR pathname
  329. MKDIR pathname
  330. RMDIR pathname
  331.  
  332. [There commands *are* implemented] 
  333.  
  334. If DEBUG is set to TRUE when the program is compiled then the following 
  335. debugging commands (unique to bwBASIC) will be available: 
  336.  
  337. VARS         (prints a list of all variables)
  338. CMDS         (prints a list of all commands)
  339. FNCS         (prints a list of all functions)
  340.  
  341. [There commands *are* implemented] 
  342.  
  343. If COMMAND_SHELL is set to TRUE when the program is compiled, then the user may 
  344. enter a shell command at the bwBASIC prompt. 
  345.  
  346.  
  347. ΓòÉΓòÉΓòÉ 2.4. Some Notes on Usage ΓòÉΓòÉΓòÉ
  348.  
  349. An interactive environment is provided, so that a line with a line number can 
  350. be entered at the bwBASIC prompt and it will be added to the program in memory. 
  351.  
  352. Line numbers are not strictly required, but are useful if the interactive 
  353. enviroment is used for programming.  For longer program entry one might prefer 
  354. to use an ASCII text editor, and in this case lines can be entered without 
  355. numbers. In this case, however, one will not be able to alter the numberless 
  356. lines within the interactive environment. 
  357.  
  358. Command names and function names are not case sensitive, so that "Run" and 
  359. "RUN" and "run" are equivalent and "abs()" and "ABS()" and "Abs()" are 
  360. equivalent. HOWEVER: variable names ARE case sensitive in bwbASIC, so that "d$" 
  361. and "D$" are different variables.  This differs from some BASIC implementations 
  362. where variable names are not case sensitive. 
  363.  
  364. A filename can be specified on the command line and will be LOADed and RUN 
  365. immediately, so that the command line 
  366.  
  367. bwbasic prog.bas 
  368.  
  369. will load and execute "prog.bas". 
  370.  
  371. All programs are stored as ASCII text files. 
  372.  
  373. TRUE is defined as -1 and FALSE is defined as 0 in the default distribution of 
  374. bwBASIC. These definitions can be changed by those compiling bwBASIC (see file 
  375. BWBASIC.H). 
  376.  
  377. Assignment must be made to variables.  This differs from some implementations 
  378. of BASIC where assignment can be made to a function.  Implication: "INSTR( 3, 
  379. x$, y$ ) = z$" will not work under bwBASIC. 
  380.  
  381. Notes on the implementation of specific commands: 
  382.  
  383. CVI(), CVD(), CVS(), MKI$(), MKD$(), MKS$(): These functions are implemented, 
  384. but are dependent on a) the sizes for integer, float, and double values on 
  385. particular systems, and b) how particular versions of C store these numerical 
  386. values. The implication is that data files created using these functions on a 
  387. DOS-based microcomputer may not be translated correctly by bwBASIC running on a 
  388. Unix-based computer.  Similarly, data files created by bwBASIC compiled by one 
  389. version of C may not be readable by bwBASIC compiled by another version of C 
  390. (even under the same operating system). So be careful with these. 
  391.  
  392. ENVIRON:  The ENVIRON command requires BASIC strings on either side of the 
  393. equals sign.  Thus: 
  394.  
  395.    environ "PATH" = "/usr/bin" 
  396.  
  397. It might be noted that this differs from the implementation of ENVIRON in some 
  398. versions of BASIC, but bwBASIC's ENVIRON allows BASIC variables to be used on 
  399. either side of the equals sign.  Note that the function ENVIRON$() is different 
  400. from the command, and be aware of the fact that in some operating systems an 
  401. environment variable set within a program will not be passed to its parent 
  402. shell. 
  403.  
  404. ERR: Note that if PROG_ERRORS has been defined when bwBASIC is compiled, the 
  405. ERR variable will not be set correctly upon errors.  It only works when 
  406. standard error messages are used. 
  407.  
  408. FOR and NEXT:  In this implementation of bwBASIC, a NEXT statement must appear 
  409. in the first position in a program line; it cannot appear in a line segment 
  410. beyond a colon. 
  411.  
  412. INPUT: bwBASIC cannot support the optional feature of INPUT that suppresses the 
  413. carriage-return and line-feed at the end of the input.  This is because ANSI C 
  414. does not provide for any means of input other than CR-LF-terminated strings. 
  415.  
  416.  
  417. ΓòÉΓòÉΓòÉ 2.5. Unimplemented Commands and Functions ΓòÉΓòÉΓòÉ
  418.  
  419. There are a few items not implemented that have been so long a part of standard 
  420. BASICs that their absence will seem surprising. In each case, though, their 
  421. implementation would require opera- ting-system-specific functions or 
  422. terminal-specific functions that ANSI C cannot provide. Some specific examples: 
  423.  
  424. CALL         In some versions of BASIC, CALL is used to call a machine language 
  425.              subroutine, but machine language routines are highly 
  426.              system-specific.  In other BASICs (conforming to the more complete 
  427.              ANSI definition of BASIC), CALL is used to call a named 
  428.              subroutine.  Although it's possible that bwBASIC could develop as 
  429.              a numberless BASIC with named subroutine calls, these features are 
  430.              not implemented in this earliest released version. 
  431. CLOAD        See CALL above (machine language subroutines). 
  432. CONT         See RESUME below (programmer ignorance?). 
  433. DEF USR      See CALL above (machine language subroutines). 
  434. EDIT         EDIT would be especially nice, but requires some specific 
  435.              knowledge of how particular computers handle interaction between 
  436.              the screen and the keyboard.  This knowledge isn't available 
  437.              within the bounds of ANSI C alone ("innerhalb die Grenzen der 
  438.              reinen Vernunft," with apologies to Immanuel Kant). 
  439. FRE()        The ability to report the amount of free memory remaining is 
  440.              system-specific due to varying patterns of memory allocation and 
  441.              access; consequently this ability is not present in ANSI C and 
  442.              this function is not available in bwBASIC. 
  443. FILES        The FILES command requires a list of files conforming to a 
  444.              specifier; ANSI C does not provide this. When COMMAND_SHELL is 
  445.              defined as TRUE, users might want to issue operating-system 
  446.              commands such as "DIR" (DOS) or "ls -l" (Unix) to get a list of 
  447.              files. 
  448. INKEY$       This function requires a keyboard scan to indicate whether a key 
  449.              is pending. Although this facility is easily available on 
  450.              microcomputers (it is part of the minimal CP/M Operating System), 
  451.              it is not easily available on some more complex systems. 
  452.              Consequently, it's not part of the C standard and bwBASIC has not 
  453.              implemented INKEY$. 
  454. INPUT$()     Similar to INKEY$ above, ANSI C by itself is not able to read 
  455.              unechoed keyboard input, and can read keyboard input only after a 
  456.              Carriage-Return has been entered. 
  457. INP          Calls to hardware ports, like machine-language routines, are 
  458.              highly system-specific and cannot be implemented in ANSI C alone. 
  459. LLIST        See LPRINT below. 
  460. LPOS         See LPRINT below. 
  461. LPRINT       and LLIST, etc., require access to a printer device, and this 
  462.              varies from one system to another. Users might try OPENing the 
  463.              printer device on their own operating system (e.g., "/dev/lp" on 
  464.              Unix systems, or "PRN" under DOS) and see if printing can be done 
  465.              from bwBASIC in this way. 
  466. NULL         In this case, I am convinced that NULL is no longer necessary, 
  467.              since very few printers now require NULLs at the end of lines. 
  468. OUT          See INP above (calls to hardware ports). 
  469. PEEK()       PEEK and POKE enabled earlier BASICs to address particular memory 
  470.              locations. Although bwBASIC could possibly implement this command 
  471.              (POKE) and this function (PEEK()), the limitation would be highly 
  472.              limited by the different systems for memory access in different 
  473.              systems. 
  474. POKE         see PEEK() above. 
  475. RENUM        Since unnumbered lines can be entered and executed under bwBASIC, 
  476.              it would not be possible to implement a RENUM routine. 
  477. RESUME       Is this possible under ANSI C? If so, I simply have failed to 
  478.              figure it out yet. Mea culpa (but not maxima). 
  479. USR          See CALL and DEF USR above (machine language subroutines). 
  480. VARPTR       See PEEK and POKE above. 
  481. WAIT         See INP and OUT above. 
  482.  
  483.  
  484. ΓòÉΓòÉΓòÉ 2.6. Some Notes on Compilation ΓòÉΓòÉΓòÉ
  485.  
  486. bwBASIC is written in ANSI C and takes advantage of some of the enhancements of 
  487. ANSI C over the older K&R standard.  The program expects to find standard ANSI 
  488. C include files (such as <stddef.h>). Because there is nothing terminal- or 
  489. hardware-specific about it, I should hope that it would compile correctly under 
  490. any ANSI C compiler, but you may have to construct your own makefile. 
  491.  
  492. Two makefiles are currently provided: "makefile.qcl" will compile the program 
  493. utilizing the Microsoft QuickC (tm) line-oriented compiler on DOS-based p.c.'s, 
  494. and "makefile.gcc" will compile the program utilizing the ANSI option of Gnu 
  495. C++. I have also compiled the program utilizing Borland's Turbo C++ (tm) on 
  496. DOS- based machines. 
  497.  
  498. No alterations to flags are necessary for varied environments, but the 
  499. beginning of file <bwbasic.h> allows the user to set some debugging flags and 
  500. to control some program defaults. The file <bwb_mes.h> has a number of 
  501. language-specific message sets that can be controlled by setting the 
  502. appropriate language flag. 
  503.  
  504.  
  505. ΓòÉΓòÉΓòÉ 2.7. The Story of Bywater BASIC ΓòÉΓòÉΓòÉ
  506.  
  507. This program was originally begun in 1982 by my grandmother, Mrs. Verda Spell 
  508. of Beaumont, TX.  She was writing the program using an ANSI C compiler on an 
  509. Osborne I CP/M computer and although my grandfather (Lockwood Spell) had bought 
  510. an IBM PC with 256k of RAM my grandmother would not use it, paraphrasing George 
  511. Herbert to the effect that "He who cannot in 64k program, cannot in 512k." She 
  512. had used Microsoft BASIC and although she had nothing against it she said 
  513. repeatedly that she didn't understand why Digital Research didn't "sue the 
  514. socks off of Microsoft" for version 1.0 of MSDOS and so I reckon that she hoped 
  515. to undercut Microsoft's entire market and eventually build a new software 
  516. empire on the North End of Beaumont. Her programming efforts were cut 
  517. tragically short when she was thrown from a Beaumont to Port Arthur commuter 
  518. train in the summer of 1986. I found the source code to bwBASIC on a 
  519. single-density Osborne diskette in her knitting bag and eventually managed to 
  520. have it all copied over to a PC diskette. I have revised it slightly prior to 
  521. this release. You should know, though, that I myself am an historian, not a 
  522. programmer. 
  523.  
  524.  
  525. ΓòÉΓòÉΓòÉ 2.8. Communications ΓòÉΓòÉΓòÉ
  526.  
  527. Ted A. Campbell
  528. Bywater Software
  529. P.O. Box 4023
  530. Duke Station
  531. Durham, NC  27706
  532. USA
  533.  
  534. email:  tcamp@acpub.duke.edu
  535.  
  536.  
  537. ΓòÉΓòÉΓòÉ 3. OS/2 Port Notes ΓòÉΓòÉΓòÉ
  538.  
  539. Changes: 
  540.  
  541. o OS/2 2.x required. 
  542. o Makefile completely rewritten. 
  543. o IPF help file added in place of documentation.  (README, etc.) 
  544. o Small changes made to the language to make it nicer to live with under the 
  545.   OS/2 environment. 
  546.  
  547. This was compiled with emx-0.8f but it does not require EMX.DLL. 
  548.  
  549. Since the full, unmodified source and documentation was not included, I am 
  550. obligated to tell you that you can get it from the archive site 
  551. wuarchive.wustl.edu in the directory /usenet/comp.sources.games/..... 
  552.  
  553.                          Jeff M. Garzik - April 27, 1993
  554.               gtd543a@prism.gatech.edu (preferred until June 1997)
  555.                               jgarzik@nyx.cs.du.edu
  556.                            jeff.garzik@bbs.oit.unc.edu
  557.