home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / bwbasic.zip / src / bwbasic.ipf < prev    next >
Text File  |  1993-04-27  |  23KB  |  663 lines

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