home *** CD-ROM | disk | FTP | other *** search
/ ftp.update.uu.se / ftp.update.uu.se.2014.03.zip / ftp.update.uu.se / pub / pdp8 / os278-src.tar.Z / os278-src.tar / basic.pa next >
Text File  |  1992-09-18  |  46KB  |  2,296 lines

  1. /BASIC.PA FOR OS78 V4
  2. /ORIGINALLY:
  3. /16 OS/8 COMMERCIAL BASIC EDITOR, V7A
  4. /
  5. /
  6. /
  7. /
  8. /
  9. /
  10. /
  11. /
  12. /
  13. /
  14. /
  15. /
  16. /COPYRIGHT (C) 1972, 1973, 1974, 1975, 1978, 1979, 1981, 1982
  17. /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
  18. /
  19. /
  20. /
  21. /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A
  22. /SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU-
  23. /SION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE, OR ANY OTHER
  24. /COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE
  25. /TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO
  26. /AGREES TO THESE LICENSE TERMS.  TITLE TO AND OWNERSHIP OF THE
  27. /SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC.
  28. /
  29. /
  30. /THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT
  31. /NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL
  32. /EQUIPMENT CORPORATION.
  33. /
  34. /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
  35. /SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
  36. /
  37. /
  38. /
  39. /
  40. /
  41. /
  42.  
  43. /DEC-S8-LBASA-B-LA
  44. /
  45. /COPYRIGHT  C 1972, 1973, 1974
  46. /
  47. /DIGITAL EQUIPMENT CORPORATION
  48. /MAYNARD,MASSACHUSETTS 01754
  49. /
  50. /AUGUST 19, 1972
  51. /
  52. /    ASSEMBLE AND LOAD INSTRUCTIONS
  53. /
  54. /    .PAL BASIC
  55. /    .LOAD BASIC
  56. /    .SA SYS BASIC=2000
  57. /
  58. /
  59.     VERSON=    "B&77^100    /VERSION LOCATED IN CORE AT TAG "VERLOC"
  60.     PATCH=    "0&77        /LEFT 6BIT HALF = VERSION NUMBER
  61.                 /RIGHT 6BIT HALF = PATCH LEVEL
  62.  
  63. /
  64. /FIXES FOR V4    1975
  65. /
  66. /.LINE TOO LONG ERROR MESSAGE
  67. /.CLEAR CD OPTION TABLE AT START UP
  68. /.LIST FROM ACROSS FLD BOUNDRIES
  69. /.MEMORY OVERFLOW
  70. /.INPUT FROM TTY
  71.  
  72. /    5-APR-77    ADDED EXTENDED DATE PRINTOUT
  73. /    13-APR-77    ADDED SCROLLING, SCOPE SUPPORT AND .BASIC COMMAND INTERFACE
  74. /    30-APR-77    FIX JSW FIELD BUG
  75. /    1-MAR-78    ADD LINKAGE TO BCOMP V6
  76. /    27-MAR-78    BUTCHERED FOR 7 BIT ASCII SUPPORT
  77. /    5-MAR-79    ADD SOURCE FIX FOR CD SWITCH CLEARING BUG
  78. /    17-FEB-81    MAKE MODIFICATIONS OS78 V4
  79. /    01-JAN-82    REMOVED BASIC.UF LOOKUP
  80.     BCSIZ1=    1000    /SIZE WORD FOR FIELD 1 OF BCOMP
  81.     DORUN1=    3200    /ENTRY ADDR FOR BCOMP FROM EDITOR
  82.     BCLOC1=    2000    /STARTING ADDR OF BCOMP FIELD 1 LOAD REGION
  83.     INFO=    7604    / INFORMATION AREA (FIELD 1)
  84.     JSW=    7746    /JOB STATUS WORD IN FIELD 0
  85.     CDOPT2=    7642    /HIGH ORDER CD = OPTION AND ALTMODE FLAG
  86.     CDOPT3=    7643    /CD SWITCHES [ABC DEF GHI JKL]
  87.     CDOPT4=    7644    /CD SWITCHES [MNO PQR STU VWX]
  88.     CDOPT5=    7645    /CD SWITCHES [YZ0 123 456 789]
  89.     CDOPT6=    7646    /LOW ORDER CD = OPTION
  90.     DCWTBL=    7760    /DEVICE CONTROL WORD TABLE IN FIELD 1
  91.     OS8RES=    4400    / SWAP AREA FOR OS8
  92.     DSKBUF=    OS8RES+600    / FILE BUFFER
  93.     HANDLR=    DSKBUF+400    / INPUT OUTPUT HANDLER ADDRESS
  94.     TXTAREA=HANDLR+400    / START OF TEXT AREA
  95.     MDATE=    7666    /ADDR OF OS8 DATE IN FIELD 1
  96.     BIPCCL=    7777    /ADDR OF DATE EXTENSION IN FIELD 0
  97.  
  98.     AC7775=    CLL STA RTL
  99.     AC7776=    CLL STA RAL
  100.  
  101.     *1
  102.     CIF    30    /SYMBIOSIS INTERRUPT LINKAGE
  103.     JMP    .-1
  104.  
  105.     *3
  106. SWAPT1,    0
  107. SWAPT2,    0
  108. SWAPT3,    0
  109. SWAPT4,    0
  110. SWAPT5,    0
  111. X10,    INFO-1
  112. X11,    NAMLST-1
  113. X12,    0
  114. X13,    0
  115. X14,    0
  116. X15,    0
  117. X16,    0
  118. X17,    0
  119.     *20
  120. RDTMP,    0        /USED BY INPUT ROUTINE
  121. RDPTR,    0
  122. SIZE,    0        /USED BY LINE EDITOR STUFF
  123. TEMP,    0
  124. TEMP2,    0
  125. TOWARD,    0
  126. PTR,    0
  127. PAKPTR,    0
  128. WSPTR,    0
  129. COFLAG,    0        /=0 IF CTRL/O
  130. CHNFLAG,0        /=1 IF BACK FROM RUN, 0 IF OLD
  131. RUNFLAG,0        /=1 IF RUN, 0 IF SAVE
  132. OLDFLAG,0        /=1 IF INPUT COMING FROM FILE
  133. SEQFLAG,0        /=1 IF AUTO SEQ MODE
  134. EOFADR,    TXTAREA
  135. CORSIZ,    1
  136. SAVCHR,    0        /CHARACTER SAVE POSITION
  137. LINENO,    0;0        /HOLDS MOST RECENT LINE NUM
  138. EOFLIN,    0;0        /LAST LINE NUMBER
  139. NAME,    0;0;0;0        /NAME BUFFER
  140. FNAME,    FILENAME NONAME.BA /CURRENT FILE NAME
  141. DEVHAN,    7607        /ADDRESS OF DEVICE HANDLER, INITIALLY SYS: TO PROTECT
  142.             /AGAINST BAD RESPONSE TO "NEW OR OLD--"
  143. DEVNUM,    1        /CURRENT DEVICE NUMBER
  144. SWPNUM,    0        /SWAPPER FLAG (FOR ^C)
  145.  
  146. CSFLG,    0
  147. TEMPDF,    0
  148.     0
  149.     JMP I    TEMPDF
  150.  
  151.     PAGE
  152.     /MAIN EDITOR ENTRY POINTS
  153.  
  154.     JMP I    TABCVT    /JMP TO ONCE ONLY CODE IN LINE BUFFER IF R COMMAND
  155.  
  156.     /GET A LINE OF INPUT FROM TTY
  157.     /STORES ONE 7 BIT CHAR/WORD IN LINE BUFFER
  158.  
  159. GETLIN,    JMP I    FILMSG /JMP IF CHAINED TO
  160.     DCA    TABCVT    /SAVE TAB CONVERSION SWITCH
  161.     STA        /KLUDGE FOR TEXT PROMPTS
  162.     TAD I    [TYPE    /GET ADDR OF PREV MESSAGE
  163.     DCA    FILMSG
  164.     TAD I    FILMSG
  165.     DCA    FILMSG    /STORE INLINE IN ALTMODE CODE
  166. GETLUP,    TAD I    (HEIGHT    /RESET SCREEN HEIGHT ON USER INPUT
  167.     DCA I    (LINCNT
  168.     DCA    CSFLG    /ZERO OUT ^S FLAG WHENEVER WE GET INPUT
  169.     TAD    [LINE+2    /INIT LINE POINTER
  170.     DCA    PTR
  171.     DCA I    (LINE+6    /CLEAR ANY LISTNH OR RUNNH CHARS
  172.     TAD    SEQFLAG    /SEE IF AUTO SEQ MODE
  173.     SZA CLA
  174.     JMS I    (SEQFUD    /GENERATE LINE NUMBER IF YES
  175. IGNORE,    JMS I    [GETCH
  176.     DCA    TEMP2    /SAVE CHAR
  177.     KCC        //ENABLE THE KEYBOARD BUFFER FOR VT278
  178.     TAD    TEMP2    /GET THE CHARACTER BACK
  179.     SZA        /IGNORE NULLS
  180.     TAD    (-32    /IGNORE ^Z
  181.     SZA
  182.     TAD    (32-12    /IGNORE LF, VT AND FF
  183.     CLL
  184.     TAD    (-3
  185.     SNL CLA
  186.     JMP    IGNORE    /JMP BACK IF ANY OF ABOVE
  187.     TAD    TEMP2    /CONVERT TABS TO SPACES IF FLAG SET
  188.     TAD    TABCVT
  189.     SNA CLA
  190.     TAD    [40
  191.     SZA
  192.     DCA    TEMP2    /STORE A SPACE INSTEAD
  193.     CLL CMA RTL    /CHECK FOR CONTROL C
  194.     TAD    TEMP2
  195.     SNA
  196.     JMP I    (BYEBYE    /ITS ^C  EXIT TO OS8
  197.     TAD    (-12    /CHECK FOR CARRIAGE RETURN
  198.     SNA
  199.     JMP    CARRET    /JUMP IF 015 - CARRET.
  200.     TAD    [15-25    /CHECK FOR ^U
  201.     SZA
  202.     TAD    (25-33    /OR ESC
  203.     SZA
  204.     JMP    NOTALT    /JMP IF NONE OF ABOVE
  205. ALT,    JMS I    [TYPE
  206.     MSGALT
  207.     DCA    SEQFLAG    /CLEAR SEQUENCE MODE ON ALTMODE
  208. GETLN2,    TAD    TABCVT    /IS IT A TEXT PROMPT?
  209.     SNA CLA
  210.     JMP    GETLUP    /NO
  211.     IAC        /YES, ECHO THE PROMPT
  212.     JMS I    [TYPE
  213. FILMSG,    START+1
  214.     JMP    GETLUP
  215. NOTALT,    TAD    (33-177 /CHECK FOR RUBOUT
  216.     SZA
  217.     TAD    (177-10    /OR BACKSPACE
  218.     SNA CLA
  219.     JMP    ARROW    /JUMP IF RUBOUT OR BS
  220.     TAD    OLDFLAG    /INPUT FROM FILE ?
  221.     SZA CLA
  222.     JMP    .+3    /YES, DON'T ECHO
  223.     TAD    TEMP2
  224.     JMS I    [TTYOUT    /PRINT ON TTY
  225.     TAD    PTR    /SEE IF LINE IS ALREADY FULL
  226.     TAD    (-LINEND
  227.     SPA CLA        /SKP IF PTR GE LIMIT
  228.     JMP    .+5
  229.     JMS I    [CRLF    /LINE IS TOO LONG
  230.     JMS I    [TYPE
  231.     MSGTOO
  232.     JMP    GETLUP /IGNORE THE LINE
  233.     TAD    TEMP2
  234.     DCA I    PTR    /STORE THE CHAR
  235.     ISZ    PTR
  236.     JMP    IGNORE
  237.  
  238. ARROW,    TAD    PTR    /SEE IF AT LEFT MARGIN
  239.     TAD    (-LINE-2
  240.     SNA CLA
  241.     JMP    IGNORE    /IGNORE IF YES
  242.     STA        /ELSE BACK UP THE POINTER
  243.     TAD    PTR
  244.     DCA    PTR
  245.     TAD    OLDFLAG    /INPUT FROM FILE ?
  246.     SNA CLA
  247.     JMS I    (PRTBSP    /NO, GO PRINT BACKSPACE OR BACKARROW
  248.     JMP    IGNORE    /BACK TO LISTEN LOOP
  249.  
  250. CARRET,    TAD    OLDFLAG    /INPUT FROM FILE ?
  251.     SNA CLA
  252.     JMS I    [CRLF    /NO, PRINT CR-LF
  253.     TAD    PTR
  254.     TAD    (-LINE-2
  255.     SNA CLA
  256.     JMP    GETLN2    /IGNORE EMPTY LINES
  257.     DCA I    PTR    /STORE NULL TO DELIMIT END OF LINE
  258.     TAD    [LINE+2    /LEAVE SCAN POINTER AT START OF LINE
  259.     DCA    PAKPTR
  260.     JMP I    GETLIN
  261. TABCVT,    RBASIC
  262.  
  263.     PAGE
  264.     /GET A BCD LINE NUMBER FROM CONSOLE INPUT BUFFER
  265.     /SKIP RETURN IF NUMBER GOTTEN
  266.  
  267. GETNUM,    0
  268.     STA
  269.     DCA    SHCNT    /CLEAR DIGIT FLAG
  270.     DCA    LINENO    /CLEAR REGISTER
  271. GETDIG,    DCA    LINENO+1
  272.     TAD I    PAKPTR
  273.     TAD    (-72    /RANGE CHECK CHAR
  274.     CLL
  275.     TAD    [12
  276.     DCA    TEMP    /TENTATIVELY SAVE DIGIT
  277.     SNL
  278.     JMP    EONUM    /END OF NUMBER IF NOT DIGIT (OR EOL)
  279.     ISZ    PAKPTR    /BUMP PTR UP
  280.     TAD    [7774    /SET SHIFT COUNTER
  281.     DCA    SHCNT
  282. SHFTLP,    TAD    LINENO+1
  283.     CLL RAL
  284.     DCA    LINENO+1 /SHIFT A PLACE
  285.     TAD    LINENO
  286.     RAL
  287.     DCA    LINENO
  288.     SZL        /SKP IF NUMBER NOT TOO BIG
  289.     JMP    TOOHI    /WRONG, WRONG. GIVE ERROR
  290.     ISZ    SHCNT
  291.     JMP    SHFTLP
  292.     TAD    TEMP    /NOW ADD NEW ONE IN
  293.     TAD    LINENO+1
  294.     JMP    GETDIG    /REITERATE
  295. EONUM,    ISZ    SHCNT    /SEE IF ANY DIGITS SEEN
  296.     ISZ    GETNUM    /TAKE SKIP RETURN IF YES
  297.     JMP I    GETNUM
  298. SHCNT,    0
  299.  
  300. TOOHI,    TAD    OLDFLAG    /SUPPRESS MESSAGE IF OLD MODE
  301.     SZA CLA
  302.     JMP I    [MAINLUP
  303.     JMS I    [TYPE
  304.     MSGNER        /LINE NUMBER ERROR
  305.     JMP I    [MAINLUP /BREAK OUT TO MAIN INPUT LOOP
  306.  
  307.     /TYPE A MESSAGE
  308.  
  309. TYPE,    0
  310.     DCA    CRSWIT    /SAVE CARRIAGE RETURN SWITCH
  311.     TAD I    TYPE    /GET ADDR OF MESSAGE
  312.     ISZ    TYPE
  313.     DCA    PASS
  314. TLOOP,    JMS I    [CTRLO    /CHECK FOR CTRL/O
  315.     JMP    TCRLF    /YES, STOP PRINTING
  316.     TAD I    PASS    /GET HIGH CHAR
  317.     CLL RTR        /SHIFT RIGHT
  318.     RTR
  319.     RTR
  320.     JMS    T6CH    /TYPE A 6BIT CHAR
  321.     TAD I    PASS    /GET LOWER CHAR
  322.     ISZ    PASS
  323.     JMS    T6CH    /TYPE ANOTHER 6BIT CHAR
  324.     JMP    TLOOP
  325. T6CH,    0
  326.     AND    [77
  327.     SNA
  328.     JMP    TCRLF    /RETURN IF AT DELIMITER
  329.     TAD    [40    /EXPAND TO 7BIT
  330.     AND    [77
  331.     TAD    [40
  332.     JMS I    [TTYOUT    /PRINT IT ON CONSOLE
  333.     JMP I    T6CH
  334. TCRLF,    TAD    CRSWIT    /RETURN THE CARRIAGE ?
  335.     SNA CLA
  336.     JMS I    [CRLF    /YES
  337.     JMP I    TYPE    /DONE
  338. CRSWIT,    0
  339.     /SKIP OVER A LINE IN MEMORY
  340.     /RETURN WITH TEMP AND DF POINTING AT NEXT LINE (OR EOF)
  341.  
  342. PASS,    0
  343.     ISZ    TEMP
  344.     SKP
  345.     JMS    FINCR
  346.     TAD I    TEMP    /LINES TERMINATED BY 7 BIT NULL IN LOW 7 BITS
  347.     AND    [177
  348.     SZA CLA
  349.     JMP    PASS+1
  350.     ISZ    TEMP
  351.     JMP I    PASS
  352.     JMS    FINCR
  353.     JMP I    PASS
  354.  
  355.     /INCREMENT CURRENT DATA FIELD
  356.  
  357. FINCR,    0
  358.     RDF
  359.     TAD    [6211
  360.     DCA    .+1
  361.     HLT
  362.     JMP I    FINCR
  363.  
  364.     /SET NEW WORKSPACE EOF MARKER
  365.     /AC = NEW ADDR, DF = FIELD
  366.  
  367. SETEOF,    0
  368.     DCA    EOFADR    /SAVE ADDR
  369.     RDF        /GET FLD
  370.     TAD    [6201
  371.     DCA    EOFFLD    /SAVE IT
  372.     TAD    [377    /STORE EOF
  373.     DCA I    EOFADR
  374.     JMP I    SETEOF
  375.  
  376. GETEOF,    0
  377.     TAD    EOFADR    /RETRIEVE EOF INFO
  378.     DCA    TEMP    /FIRST ADDR
  379. EOFFLD,    CDF
  380.     JMP I    GETEOF
  381.  
  382.     /CHECK IF FILE EXPANSION WILL FIT
  383.  
  384. CHKFIT,    0
  385.     CLL
  386.     TAD    EOFADR    /AC = NUMBER OF WORDS TO EXPAND BY
  387.     SZL CLA
  388.     TAD    [10    /PROPAGATE CARRY INTO CDF
  389.     TAD    EOFFLD
  390.     RTR        /SHIFT FIELD BITS TO AC8-11
  391.     RAR
  392.     AND    [17
  393.     TAD    CORSIZ    /COMPARE TO LIMIT
  394.     SPA CLA        /SKP IF GT MACHINE SIZE
  395.     JMP I    CHKFIT    /OK, RETURN
  396.     CDF        /GIVE ERROR
  397.     JMS I    [TYPE
  398.     MSGBIG        /MEMORY OVERFLOW
  399.     DCA    OLDFLAG    /KILL OLD STATUS
  400.     JMP I    [MAINLUP /RETURN TO COMMAND LOOP
  401.  
  402.     PAGE
  403.     /MAIN EDITOR COMMAND PROCESSING LOOP
  404.  
  405. CMDDONE,CDF
  406.     JMS I    [CRLF    /TYPE READY MESSAGE
  407.     JMS I    [TYPE
  408.     MSGRDY
  409.     DCA    SEQFLAG    /CLEAR AUTO SEQ MODE
  410. MAINLUP,CDF
  411.     JMS I    [GETLIN    /GET AN EDITED LINE.
  412. PROCLN,    JMS I    (GETNUM    /TRY TO GET A LINE NUMBER
  413.     SKP        /SKP IF NO NUMBER SEEN
  414.     JMP    NOCOMD    /NOT A COMMAND
  415.     TAD    OLDFLAG    /IN OLD MODE ?
  416.     SNA CLA
  417.     JMP I    (COMMAND/NO, MUST BE A COMMAND
  418.     JMP    MAINLUP    /OTHERWISE IGNORE
  419. NOCOMD,    JMS I    (PACK7    /PACK INTO OS/8 FORMAT
  420.     TAD    PTR    /OR A LINE WITH A LINE
  421.     CIA        /NUMBER ON IT.
  422.     TAD      [LINE
  423.     DCA    SIZE    /SET UP SIZE OF LINE.
  424.     TAD I    [LINE+2    /IS LINE EMPTY ??
  425.     SNA CLA
  426.     DCA    SIZE    /POSSIBLY ZERO.
  427.     TAD    LINENO    /IS IT > LAST LINE ?
  428.     CIA CLL
  429.     TAD    EOFLIN
  430.     SZA CLA
  431.     JMP    .+4    /HI PART NOT =, FORGET LOW
  432.     TAD    LINENO+1
  433.     CIA CLL
  434.     TAD    EOFLIN+1 /COMPARE LOW PARTS
  435.     SZL CLA
  436.     JMP    NOTLAST    /NOT > LAST
  437.     JMS I    [GETEOF    /GET EOF
  438.     TAD    TEMP    /MAKE IT LOOK LIKE
  439.     DCA    PTR    /A CALL TO FINDLN
  440.     TAD    LINENO    /SAVE NEW LAST LINE
  441.     DCA    EOFLIN
  442.     TAD    LINENO+1
  443.     DCA    EOFLIN+1
  444.     RDF
  445.     TAD    [6201
  446.     DCA    TEMPDF+1
  447.     SKP
  448. NOTLAST,JMS I    [FINDLN    /GENERAL CASE - SEARCH
  449. INSERT,    TAD    TEMPDF+1
  450.     DCA    PTRFLD    /GET FIELD OF START OF OLD LINE
  451.     TAD    PTR
  452.     CLL CIA
  453.     TAD    TEMP
  454.     TAD    SIZE    /WHICH WAY ?
  455.     SNA
  456.     JMP    MOVE    /SAME SIZE, MOVE IN NEW LINE
  457.     SPA
  458.     JMP I    (EXPAND    /MAKE MORE ROOM FOR NEW LINE
  459.     CIA
  460.     TAD    TEMP    /SHRINK THE FILE
  461.     DCA    TOWARD    /MOVE FILE DOWN TO HERE
  462.     RDF
  463.     TAD    [6201
  464.     DCA    TMPFLD    /GET FIELD OF READ POINTER
  465.     TAD    TOWARD
  466.     CLL CMA
  467.     TAD    TEMP
  468.     SNL CLA
  469.     TAD    [7770
  470.     TAD    TMPFLD
  471.     DCA    TWDFLD    /GET FIELD OF WRITE POINTER
  472.     JMS    SHRINK    /NOW SHRINK WORKSPACE
  473. MOVE,    TAD    SIZE
  474.     SNA CLA
  475.     JMP    MAINLUP    /IT WAS A DELETE
  476.     CDF 00
  477.     TAD    LINENO    /PUT IN LINE NUMBER
  478.     DCA I    [LINE
  479.     TAD    LINENO+1
  480.     DCA I    (LINE+1
  481. MOVENTR,TAD      [LINE
  482.     DCA    TEMP
  483. MOVLUP,    CDF        /MOVE IN NEW LINE
  484.     TAD I    TEMP
  485.     ISZ    TEMP
  486. PTRFLD,    HLT
  487.     DCA I    PTR
  488.     ISZ    PTR    /INCREMENT POINTERS
  489.     JMP    .+4
  490.     TAD    PTRFLD    /WHATCH OUT FOR FIELDS
  491.     TAD    [10    /(W.C. OR E.M. ?)
  492.     DCA    PTRFLD
  493.     ISZ    SIZE
  494.     JMP    MOVLUP
  495.     JMP    MAINLUP
  496.     /ROUTINE TO SHRINK WORKSPACE
  497.  
  498. SHRINK,    0
  499. TMPFLD,    HLT
  500.     TAD I    TEMP
  501. TWDFLD,    HLT
  502.     DCA I    TOWARD    /MOVE DOWN
  503.     TAD I    TOWARD
  504.     TAD    [-377    /END OF FILE ???
  505.     SNA CLA
  506.     JMP    LWREOF    /YES, PUT NEW LINE IN AT END
  507.     ISZ    TEMP    /INCREMENT POINTERS
  508.     JMP    .+4
  509.     TAD    TMPFLD    /AND FIELDS IF NECESSARY
  510.     TAD    [10
  511.     DCA    TMPFLD
  512.     ISZ    TOWARD
  513.     JMP    TMPFLD
  514.     TAD    TWDFLD
  515.     TAD    [10
  516.     DCA    TWDFLD
  517.     JMP    TMPFLD    /KEEP SHRINKING
  518. LWREOF,    TAD    TOWARD    /SET NEW EOF
  519.     JMS I    [SETEOF
  520.     JMP I    SHRINK
  521.  
  522.     /SCRATCH COMMAND
  523.  
  524. SCRATCH,JMS    CLEARWS
  525.     JMP I    [CMDDONE
  526.  
  527.     /CLEAR INCORE WORKSPACE
  528.  
  529. CLEARWS,0
  530.     TAD    [TXTAREA/SCRATCH FILE
  531.     JMS I    [SETEOF
  532.     DCA    EOFLIN    /ZERO LAST LINE NUM
  533.     DCA    EOFLIN+1
  534.     JMP I    CLEARWS
  535.  
  536.     PAGE
  537. EXPAND,    CIA        /EXTRA ROOM NEEDED
  538.     DCA    TOWARD
  539.     TAD    TOWARD    /SEE IF WILL FIT
  540.     JMS I    (CHKFIT
  541.     TAD I    TEMP    /SAVE THIS PLACE
  542.     DCA    TEMP2
  543.     TAD    [177    /NOW MARK THIS PLACE
  544.     DCA I    TEMP
  545.     JMS I    [GETEOF    /GET EOF
  546.     RDF
  547.     TAD    [6201
  548.     DCA    TMP2FLD    /GET FIELD OF END OF FILE
  549.     CLL
  550.     TAD    TEMP    /MOVE FILE UP
  551.     TAD    TOWARD    /TO
  552.     DCA    TOWARD    /HERE
  553.     SZL
  554.     JMS I    [FINCR    /MIGHT BE ACROSS A FIELD
  555.     RDF
  556.     TAD    [6201
  557.     DCA    TWD2FLD    /SAVE NEW EOF FIELD
  558.     TAD    TOWARD    /SAVE NEW EOF
  559.     JMS I    [SETEOF
  560. TMP2FLD,HLT
  561.     TAD I    TEMP
  562. TWD2FLD,HLT
  563.     DCA I    TOWARD    /MOVE UP ONE WORD
  564.     TAD I    TOWARD
  565.     TAD    (-177    /IS THE MARK ?
  566.     SNA CLA
  567.     JMP    LASTWD    /YES, PUT IN LAST WORD
  568.     CLA CLL CMA
  569.     TAD    TOWARD    /BACK UP POINTERS
  570.     DCA    TOWARD
  571.     SZL
  572.     JMP    .+4
  573.     TAD    TWD2FLD    /AND FIELDS (MAYBE)
  574.     TAD    [7770
  575.     DCA    TWD2FLD
  576.     CLA CLL CMA
  577.     TAD    TEMP
  578.     DCA    TEMP
  579.     SZL
  580.     JMP    TMP2FLD
  581.     TAD    TMP2FLD
  582.     TAD    [7770
  583.     DCA    TMP2FLD
  584.     JMP    TMP2FLD
  585. LASTWD,    TAD    TEMP2    /PUT IN SAVED WORD
  586.     DCA I    TOWARD
  587.     JMP I    (MOVE    /GO MOVE IN NEW LINE
  588.  
  589. BYEBYE,    KCC        //ENABLE THE KEYBOARD BUFFER FOR VT278
  590.     CLA IAC
  591.     AND    SWPNUM    /IS OS8 RES IN PLACE ?
  592.     SZA CLA        /YES IF EVEN NUMBER OF SWAPS
  593. BYE,    JMS I    [SWAP    /PUT BACK OS8
  594. GOODBY,    NOP        //NOP'D FOR VT278 MODIFICATION
  595.     NOP        //NOP'D FOR VT278 MODIFICATION
  596.     JMP I    [7605    /EXIT TO OS8
  597.  
  598. MSGBIG,    TEXT    /MEMORY OVERFLOW/
  599. MSGALT,    TEXT    / DELETED/
  600. MSGWHAT,TEXT    /WHAT?/
  601. MSGTOO,    TEXT    /LINE TOO LONG/
  602.     /ROUTINE TO PROCESS CHARACTERS FOR FILENAMES
  603.  
  604. NAMGCH,    0
  605.     JMS I    (GETNC    /GET A NAME CHAR
  606.     JMP I    NAMGCH    /RETURN TO CALL+1 IF EOL
  607.     DCA    NCHAR    /SAVE CHAR
  608.     TAD    NCHAR    /SEE IF .
  609.     TAD    (-56
  610.     SNA CLA
  611.     JMP    GOTDOT    /JMP IF YES, HANDLE FILENAME EXTENSION
  612.     TAD    NCHAR    /RANGE CHECK CHAR FOR ALPHANUMERIC
  613.     CLL
  614.     TAD    (-60    /TOGGLE LINK ON EACH NEG CONSTANT
  615.     SMA
  616.     TAD    (60-72
  617.     SNA
  618.     JMP    GOTCOL    /JMP OUT IF : SEEN, DO DEVICE
  619.     SMA
  620.     TAD    (72-101
  621.     SMA
  622.     TAD    (101-133
  623.     SNL CLA        /SKP IF 0-9 OR A-Z
  624.     JMP I    (INERRX    /BAD FILE IF OUT OF RANGE
  625.     ISZ    NAMGCH    /SKP RETURN IF OK
  626. GOTCOL,    TAD    NCHAR    /REGET CHAR
  627.     AND    [77    /RETURN 6 BITS
  628.     JMP I    NAMGCH
  629. GOTDOT,    TAD    (NAME+3    /MOVE UP TO EXTENSION FIELD
  630.     DCA    TEMP2
  631.     STA
  632.     DCA    SIZE    /JUST ONE WORD
  633.     JMP I    (NAMLUP    /JMP OUT TO NAME GETTER LOOP
  634. NCHAR,    0
  635.  
  636.     PAGE
  637.     /COMMAND LOOKUP AND DISPATCH
  638.  
  639. COMMAND,DCA    SEQFLAG    /ALWAYS CLEAR SEQ FLAG ON COMMAND
  640.     JMS    GETNC    /GET CHAR FOR COMMAND
  641.     JMP I    [WHAT
  642.     CLL RTL
  643.     RTL
  644.     RTL
  645.     DCA    TEMPDF    /SAVE IN TEMP
  646.     JMS    GETNC
  647.     JMP I    [WHAT
  648.     AND    [77    /MASK TO 6BIT
  649.     TAD    TEMPDF    /MAKE PACKED 6BIT WORD
  650.     DCA    TEMPDF
  651.     TAD    COMTBL    /COMMAND LIST POINTER
  652.     DCA    TEMP
  653. COMLUP,    ISZ    TEMP    /GET 2 CHAR COMMAND
  654.     TAD I    TEMP
  655.     ISZ    TEMP
  656.     SNA
  657.     JMP    WHAT    /END OF LIST
  658.     TAD    TEMPDF    /IS THIS IT?
  659.     SZA CLA
  660.     JMP    COMLUP    /NO, LOOK AGAIN
  661.     TAD I    TEMP    /GET COMMAND ADDR
  662.     DCA    TEMP    /AND GO TO IT
  663.     JMP I    TEMP
  664. WHAT,    DCA    SEQFLAG
  665.     JMS I    [TYPE    /TYPE WHAT?
  666.     MSGWHAT
  667.     JMP I    [MAINLUP
  668. COMTBL,    .
  669.     -1411
  670.     LIST
  671.     -1714
  672.     OLD
  673.     -2301
  674.     SAVE
  675.     -2225
  676.     RUN
  677.     -2223
  678.     RUNSP
  679.     -2303
  680.     SCRATCH
  681.     -0231
  682.     BYE
  683.     -1605
  684.     NEW
  685.     -2205
  686.     RENAME
  687.     -0504
  688.     EDIT
  689.     -1601
  690.     RENAME
  691.     -0405
  692.     DELETE
  693.     -2305
  694.     SEQUENCE
  695.     -2705
  696.     WEAVE
  697.     0
  698.     /PRINT HEADING
  699.  
  700. HEADING,0
  701.     TAD    (LINE+5    /POINT AT LOCATION OF "NH" IN BUFFER
  702.     DCA    X17
  703.     TAD I    X17    /ROUGH TEST
  704.     CLL RTL
  705.     TAD I    X17
  706.     TAD    (-116^4-110
  707.     SNA CLA
  708.     JMP I    HEADING
  709.     JMS I    [CRLF    /LATER
  710.     TAD    [FNAME    /SET UP FOR CONVERSION
  711.     DCA    TEMP    /POINTER TO FILE NAME
  712.     TAD    XTITLE    /WHERE IT GOES
  713.     DCA    PTR
  714.     JMS    CONV    /OUTPUT FIRST TWO CHARS
  715.     JMS    CONV    /NEXT TWO
  716.     JMS    CONV    /THIRD TWO
  717.     ISZ    PTR    /SKIP FOR EXT
  718.     JMS    CONV    /OUTPUT EXTENSION
  719.     JMS I    [TYPE    /TYPE HEADING
  720. XTITLE,    TITLE
  721.     JMS I    [CRLF    /FOLLOWED BY A CRLF
  722.     JMP I    HEADING
  723.  
  724. CONV,    0        /CONVERT TO SIX BIT ASCII
  725.     TAD I    TEMP    /GET NEXT WORD
  726.     AND    [77    /CHECK FOR 0
  727.     SNA        /SUBSTITUTE BLANKS
  728.     TAD    [40
  729.     DCA I    PTR
  730.     TAD I    TEMP    /DO UPPER CHAR
  731.     AND    [7700
  732.     SNA
  733.     CLL CML RAR
  734.     TAD I    PTR    /COMBINE THEM
  735.     DCA I    PTR
  736.     ISZ    TEMP
  737.     ISZ    PTR
  738.     JMP I    CONV
  739.  
  740. TITLE,    0;0;0;4040;0    /FOR THE PROG NAME
  741.     4040;4040    /SOME BLANKS
  742. VERLOC,    VERSON+PATCH    /VERSION NUMBER + PATCH LEVEL
  743.     4040;4040    /MORE BLANKS
  744. DATE,    0;0;0        /DATE TEMPLATE
  745. DASH6,    5566        /"-6" FOR BUILDING DATE
  746. EODAT,    0        /END OF DATE TEMPLATE
  747.     /GET A CHAR FOR A FILE NAME
  748.  
  749. GETNC,    0
  750.     TAD I    PAKPTR    /GET 7BIT CHAR
  751.     SZA
  752.     ISZ    PAKPTR    /BUMP IF NOT AT EOL
  753.     TAD    [7605    /CONVERT LOWER CASE TO UPPER CASE
  754.     CLL
  755.     TAD    [32
  756.     SZL
  757.     TAD    [-40    /MAKE UPPER
  758.     TAD    (141    /RESTORE CHAR
  759.     SZA
  760.     ISZ    GETNC
  761.     JMP I    GETNC    /RETURN WITH CHAR
  762.  
  763.     PAGE
  764.     /GET CHAR FROM WORKSPACE FILE
  765.     /INITIALIZED WITH PTR2FLD AND WSPTR ADDRESSING NEXT WORD
  766.     /TEMP = STATE VARIABLE
  767.  
  768. GETFIL,    0
  769.     TAD    TEMP
  770.     ISZ    TEMP
  771.     TAD    .+3
  772.     DCA    .+1
  773.     HLT
  774.     JMP I    .+1    /SEQUENCE OF OPERATIONS
  775.     PTR2FLD        /GET FIRST WORD
  776.     FRSTDIG        /FIRST DIGIT
  777.     DIGIT        /SECOND DIGIT
  778.     DIGIT        /THIRD DIGIT
  779.     PTR2FLD        /SECOND LINE NO WORD
  780.     DIGIT        /FOURTH DIGIT
  781.     DIGIT        /FIFTH DIGIT
  782.     LASTDIG        /LAST DIGIT
  783.     CHAR1        /SPACE FOLLOWING LINE NUMBER
  784.     PTR2FLD        /GET WORD OF TEXT
  785.     FRSTCH        /FIRST 3 FOR 2 CHAR
  786.     PTR2FLD        /GET WORD OF TEXT
  787.     SCNDCH        /SECOND 3 FOR 2 CHAR
  788.     THRDCH        /THIRD 3 FOR 2 CHAR
  789.     LINFTXT        /LINE FEED CHARACTER
  790. PTR2FLD,HLT        /CHECK FOR EOF
  791.     TAD I    WSPTR
  792.     CDF
  793.     TAD    [-377
  794.     SNA
  795.     JMP I    GETFIL    /YES, RETURN UNSKIPPED
  796.     TAD    [377
  797.     DCA    TEMP2    /NO, SAVE WORD
  798.     ISZ    WSPTR    /BUMP POINTER
  799.     JMP    GETFIL+1
  800.     TAD    PTR2FLD
  801.     TAD    [10
  802.     DCA    PTR2FLD
  803.     JMP    GETFIL+1
  804. CHAR1,    TAD    [40    /GENERATE BLANK FOLLOWING LINE NUMBER
  805.     JMP    GFRET
  806. LASTDIG,CLA IAC        /FORCE LAST DIGIT (EVEN IF 0)
  807. FRSTDIG,DCA    SAV3RD    /ZERO DIGIT COUNT
  808. DIGIT,    TAD    TEMP2
  809.     RTL
  810.     RTL
  811.     DCA    TEMP2    /SHIFT LEFT ONE DIGIT
  812.     TAD    TEMP2
  813.     RAL
  814.     AND    [17    /GET DIGIT
  815.     SZA
  816.     JMP    NZDIGIT    /ITS NOT ZERO
  817.     TAD    SAV3RD    /IS IT A LEADING ZERO ?
  818.     SNA CLA
  819.     JMP    GETFIL+1/YES, DON'T PRINT IT
  820. NZDIGIT,ISZ    SAV3RD    /NON ZERO OR NON LEADING ZERO
  821.     TAD    (60    /SO PRINT IT
  822.     JMP    GFRET
  823. FRSTCH,    TAD    TEMP2    /GET CHAR
  824.     AND    [7400    /ISOLATE HIGH 4 BITS FOR LATER
  825.     CLL RTR
  826.     RTR
  827.     JMP    FSCOMN    /DO COMMON STUFF (ANYTHING FOR A WORD OF CORE)
  828. SCNDCH,    TAD    TEMP2    /GET WORD
  829.     AND    [7400    /AS ABOVE, ISOLATE HI 4 BITS
  830.     CLL RTL
  831.     RTL
  832.     RAL
  833.     TAD    SAV3RD    /ADD TO OTHER BITS
  834. FSCOMN,    DCA    SAV3RD    /SAVE AWAY
  835.     TAD    TEMP2    /GET CHAR BACK
  836.     JMP    DOCHAR    /DO COMMON LOW CHAR STUFF
  837. THRDCH,    TAD    (11    /RESET STATE TABLE
  838.     DCA    TEMP
  839.     TAD    SAV3RD    /LOOK AT THIRD CHAR
  840.     SNA
  841.     JMP    GETFIL+1 /IGNORE IF ITS NULL
  842. DOCHAR,    AND    [177    /MASK TO 7 BITS
  843.     SNA        /SKP IF NOT END OF LINE
  844.     JMP    ZEROTXT    /ELSE GENERATE CR/LF
  845. GFRET,    ISZ    GETFIL
  846.     JMP I    GETFIL
  847. ZEROTXT,TAD    (16    /SETUP FOR LF NEXT
  848.     DCA    TEMP
  849.     TAD    [15    /RETURN CR
  850.     JMP    GFRET
  851. LINFTXT,DCA    TEMP    /CLEAR SEQUENCER AND RETURN LF
  852.     TAD    [12
  853.     JMP    GFRET
  854. SAV3RD,    0
  855.  
  856. MSGNER,    TEXT    /LINE NUMBER > 999999/
  857. MSGEDT,    TEXT    /EDIT COMMAND ERROR/
  858. WSSAVE,    40;104;123;113;72;102;101;123;111;103;56;127;123;0 /"DSK:BASIC.WS"
  859. WSSIZE=    .-WSSAVE
  860.  
  861.     PAGE
  862.     /GET A FILE NAME AND FETCH ITS HANDLER
  863.  
  864. GETFN,    0
  865.     DCA    SAVFLAG    /=1 FOR SAVE, 0 FOR OLD OR NEW
  866.     TAD    CHNFLAG    /RETURNING FROM RUN ?
  867.     SZA CLA
  868.     JMP    NOFUSR    /YES, DON'T FETCH USR
  869.     JMS I    [SWAP    /GET OS8 RESIDENT
  870.     TAD    SAVFLAG    /IS IT OLD OR NEW ??
  871.     SNA CLA
  872.     IAC        /YES, DON'T SWAP 10000-11777
  873.     DCA I    (JSW    /DO IF SAVE, SO ALTER JSW
  874.     CIF    10    /GET THE USR
  875.     JMS I    [7700
  876.     10
  877. NOFUSR,    TAD    [LINE+2
  878.     DCA    PAKPTR    /RESET CHAR POINTER
  879. BSKIP,    JMS I    (GETNC    /GET A CHAR
  880.     JMP    ASKNAM    /ASK FOR FILE NAME
  881.     TAD    M40    /BLANK ?
  882.     SZA CLA
  883.     JMP    BSKIP    /NO, LOOP
  884. NOSKIP,    JMS    GETNAM    /GET A NAME
  885.     SNA CLA
  886.     JMP    USEDSK    /NO DEVICE SPECIFIED, USE DSK:
  887.     TAD    NAME    /PUT IN THE DEVICE NAME
  888.     DCA    DEV    /AS SPECIFIED
  889.     TAD    NAME+1
  890.     DCA    DEV+1
  891.     JMS    GETNAM    /FETCH THE FILE NAME
  892.     SZA CLA
  893.     JMP I    (IOERR    /BAD SYNTAX IN FILE DESCRIPTOR
  894.     JMP    GETHAN    /GO FETCH THE HANDLER
  895. USEDSK,    TAD    (0423    /SET DEVICE NAME TO DSK:
  896.     DCA    DEV
  897.     TAD    (1300
  898.     DCA    DEV+1
  899. GETHAN,    TAD    [HANDLR+1
  900.     DCA    DEV+2    /ALSO THE HANDLER ORIGIN
  901.     CIF    10
  902.     JMS I    [200    /CALL THE USR
  903.     1        /FETCH HANDLER BY NAME
  904. DEV,    0;0;0
  905.     JMP I    (IOERR    /BAD DEVICE
  906.     TAD    DEV+1    /SAVE THE DEVICE NUMBER
  907.     DCA    DEVNUM
  908.     TAD    DEV+2    /AND THE HANDLER ENTRY POINT
  909.     DCA    DEVHAN
  910. MOVEFN,    TAD    SAVFLAG    /WAS IT A SAVE ?
  911. M40,    SMA SZA CLA
  912.     JMP I    GETFN    /YES, JUST RETURN
  913.     TAD    NAME    /NEW OR OLD, ANY NAME GIVEN ?
  914.     SNA
  915.     JMP I    GETFN    /NO, PROBABLY JUST A DEVICE
  916.     DCA    FNAME    /YES, SAVE IT
  917.     TAD    NAME+1
  918.     DCA    FNAME+1
  919.     TAD    NAME+2
  920.     DCA    FNAME+2
  921.     TAD    NAME+3
  922.     DCA    FNAME+3
  923.     JMP I    GETFN
  924. ASKNAM,    TAD    SAVFLAG    /WAS THIS A SAVE ?
  925.     SMA SZA CLA    /SKP IF NO
  926.     TAD    FNAME    /IT WAS A SAVE, ANY OLD NAME TO USE ?
  927.     SNA
  928.     JMP    ASKNM    /NO, GO ASK FOR ONE
  929.     DCA    NAME    /YES, MOVE INTO NAME
  930.     TAD    FNAME+1
  931.     DCA    NAME+1
  932.     TAD    FNAME+2
  933.     DCA    NAME+2
  934.     TAD    FNAME+3
  935.     DCA    NAME+3
  936.     JMP I    GETFN
  937. ASKNM,    CLA IAC        /ASK FOR FILE NAME
  938.     JMS I    [TYPE
  939.     ASKFN
  940.     TAD    (-11    /SET TAB CONVERSION FLAG
  941.     JMS I    [GETLIN
  942.     JMP    NOSKIP
  943. SAVFLAG,0
  944. GETNAM,    0        /GET A FILE OR DEVICE NAME
  945.     DCA    NAME    /ZERO THE NAME BUFFER
  946.     DCA    NAME+1
  947.     DCA    NAME+2
  948.     TAD    (201    /USE DEFAULT EXT .BA
  949.     DCA    NAME+3
  950.     TAD    (NAME    /SETUP POINTER
  951.     DCA    TEMP2
  952.     TAD    [7774    /SET SIZE TO 4 WORDS MAX
  953.     DCA    SIZE
  954. NAMLUP,    JMS I    (NAMGCH
  955.     JMP I    GETNAM
  956.     CLL RTL
  957.     RTL
  958.     RTL
  959.     DCA I    TEMP2    /SAVE IT
  960.     JMS I    (NAMGCH
  961.     JMP I    GETNAM
  962.     TAD I    TEMP2    /COMBINE THE 2
  963.     DCA I    TEMP2
  964.     ISZ    TEMP2
  965.     ISZ    SIZE    /ANY MORE ?
  966.     JMP    NAMLUP
  967.     JMP I    GETNAM
  968.  
  969.     /RENAME COMMAND
  970.  
  971. RENAME,    CLL CML RAR    /SAVE USR AREA
  972.     JMS    GETFN    /GET FILE NAME
  973.     CIF    10
  974.     JMS I    [200    /REMOVE USR
  975.     11        /AND RESTORE 10000-11777
  976.     JMP    RENWFN
  977.  
  978.     /NEW COMMAND
  979.  
  980. NEW,    JMS I    (CLEARWS /CLEAR THE WORKSPACE FIRST
  981.     JMS    GETFN    /GET THE FILE NAME
  982. RENWFN,    JMS I    [SWAP    /REMOVE OS8
  983.     JMP I    [CMDDONE
  984.  
  985.     PAGE
  986.     /WRITE THE CURRENT WORKSPACE
  987.  
  988. PUTFIL,    0
  989.     TAD    [TXTAREA
  990.     DCA    WSPTR    /GET POINTER TO TEXT
  991.     TAD    [6201    /GET FIELD OF TEXT
  992.     DCA I    (PTR2FLD
  993.     DCA    TEMP    /ZERO LINE SEQUENCER
  994.     TAD    [DSKBUF    /GET ADDR OF DISK BUFFER
  995.     DCA    SWAPT1    /BUFFER POINTER
  996.     TAD    S7600
  997.     DCA    SWAPT2    /DOUBLE WORD COUNTER
  998.     TAD    JMPINS    /SET 3 WAY SWITCH
  999.     DCA    PUTJMP
  1000. PFLOOP,    JMS I    [GETFIL    /GET A CHAR FROM TEXT AREA
  1001.     JMP    PFCTLZ    /END OF FILE
  1002.     JMS    PUTCH    /OUTPUT IT
  1003.     JMP    PFLOOP    /DO NEXT CHAR
  1004. PFCTLZ,    TAD    [32    /PUT CTRL-Z
  1005.     JMS    PUTCH
  1006.     TAD    (7201    /BUFFER DUMP COUNT
  1007.     DCA    PFTEMP
  1008.     JMS    PUTCH    /FILL WITH ZEROES
  1009.     ISZ    PFTEMP
  1010.     JMP    .-2
  1011.     JMP I    PUTFIL    /DONE
  1012. PFTEMP,    0
  1013. PUTCH,    0        /PUT A CHAR ONTO THE OS8 FILE
  1014.     DCA    SWAPT4    /SAVE THE CHAR
  1015. PUTJMP,    HLT        /JUMP TO CORRECT PLACE
  1016.     JMP    PH1    /FIRST CHAR
  1017.     JMP    PH2    /SECOND CHAR
  1018. PH3,    TAD    JMPINS    /RESTORE SWITCH
  1019.     DCA    PUTJMP
  1020.     TAD    SWAPT4    /GET THE CHAR
  1021.     AND    [17    /LOW FOUR BITS
  1022.     CLL RAR
  1023.     RTR        /INTO THE HIGH PART OF WORD TWO
  1024.     RTR
  1025.     TAD I    SWAPT1    /COMBINE WITH CHAR 2
  1026.     DCA I    SWAPT1
  1027.     TAD    SWAPT4    /GET THE HIGH FOUR BITS
  1028.     RTL
  1029.     RTL        /INTO THE HIGH PART OF WORD ONE
  1030.     AND    [7400
  1031.     TAD I    SWAPT3    /COMBINE WITH WORD ONE
  1032.     DCA I    SWAPT3
  1033.     ISZ    SWAPT1    /BUMP POINTER
  1034.     ISZ    SWAPT2    /BUMP DOUBLE WORD COUNT
  1035.     JMP I    PUTCH    /RETURN
  1036.     JMS I    [SWAP    /SWAP IN OS8
  1037.     JMS I    DEVHAN    /WRITE THIS BUFFER
  1038.     4200
  1039.     DSKBUF
  1040. WRBLOK,    0
  1041.     JMP I    (OUERR
  1042.     ISZ    OUSIZE    /ANY ROOM LEFT ?
  1043.     SKP
  1044.     JMP    NOROOM    /NO, ERROR
  1045.     ISZ    WRBLOK    /BUMP BLOCK NUMBER
  1046.     ISZ I    (OULEN    /BUMP ACTUAL SIZE
  1047.     JMS I    [SWAP    /SWAP BACK
  1048.     TAD    [DSKBUF    /SET UP BUFFER POINTER
  1049.     DCA    SWAPT1
  1050.     TAD    S7600
  1051.     DCA    SWAPT2    /SET UP COUNT
  1052.     JMP I    PUTCH
  1053. PH2,    TAD    SWAPT1    /SAVE POINTER TO FIRST
  1054.     DCA    SWAPT3
  1055.     ISZ    SWAPT1    /BUMP POINTER
  1056. PH1,    TAD    SWAPT4    /GET CHAR
  1057.     DCA I    SWAPT1    /INTO BUFFER
  1058.     ISZ    PUTJMP    /BUMP SWITCH
  1059.     JMP I    PUTCH
  1060. JMPINS,    JMP    PUTJMP+1
  1061. OUSIZE,    0
  1062.  
  1063. NOROOM,    JMS I    [TYPE    /TYPE FILE TOO BIG MESSAGE
  1064.     MSGRM
  1065.     JMP I    (IORETN    /TAKE ERROR ABORT
  1066.  
  1067. MSGRM,    TEXT    /FILE TOO BIG/
  1068.     /SWAP OS/8 RESIDENT
  1069.  
  1070. SWAP,    0
  1071.     ISZ    SWPNUM    /TOGGLE RESIDENCY BIT
  1072. S7600,    7600
  1073.     TAD    (OS8RES    /SET POINTER TO SAVE AREA
  1074.     DCA    SWAPT1
  1075. PATCH5,    AC7775        /AC7776 IF ONLY 8K CORE
  1076.     DCA    SWAPT2
  1077.     TAD    S6201    /INIT FIELD
  1078.     DCA    SWPFLD
  1079. SWPLUP,    TAD    S7600    /SET POINTER TO PAGE 7600 IN NEXT FIELD
  1080.     DCA    SWAPT3
  1081. SWPLP,    TAD I    SWAPT1    /SAVE WORD IN SAVE AREA
  1082.     DCA    SWAPT4
  1083. SWPFLD,    HLT        /GET OVER INTO OS/8 FIELD
  1084.     TAD I    SWAPT3    /SAVE A WORD FROM N7600
  1085.     DCA    SWAPT5
  1086.     TAD    SWAPT4    /PUT SAVE AREA WORD IN PLACE
  1087.     DCA I    SWAPT3
  1088. S6201,    CDF
  1089.     TAD    SWAPT5
  1090.     DCA I    SWAPT1    /NOW PUT IN SAVE AREA
  1091.     ISZ    SWAPT1
  1092.     ISZ    SWAPT3
  1093.     JMP    SWPLP    /LOOP FOR THE PAGE
  1094.     TAD    [10    /BUMP CDF
  1095.     TAD    SWPFLD
  1096.     DCA    SWPFLD
  1097.     ISZ    SWAPT2    /BUMP PASS COUNTER
  1098.     JMP    SWPLUP    /REITERATE
  1099.     JMP I    SWAP    /--RETURN--
  1100.  
  1101. ASKFN,    TEXT    /FILE NAME--/
  1102.  
  1103.     PAGE
  1104.     /RUN AND RSPACE COMMANDS
  1105.  
  1106. RUNSP,    TAD    [40    /SET /S SWITCH FOR BRTS TO EXHIBIT FREE SPACE
  1107. RUN,    DCA I    (OS8RES+200+CDOPT4-7600 /IN CD SWITCHES M-X WORD
  1108.     STA
  1109.     JMS I    [HEADING/GIVE A HEADING
  1110.     TAD    [LINE+1    /SET UP FAKE LINE
  1111.     DCA    X15
  1112.     TAD    [WSSAVE-1
  1113.     DCA    X16
  1114.     TAD I    X16    /TO SAVE BASIC.WS
  1115.     SNA
  1116.     JMP    .+3
  1117.     DCA I    X15
  1118.     JMP    .-4
  1119.     DCA I    X15
  1120.     TAD    [LINE+2    /RESET SCAN POINTER
  1121.     DCA    PAKPTR
  1122.     ISZ    RUNFLAG    /SET RUN FLAG
  1123.     JMP    GFN
  1124.  
  1125.     /SAVE COMMAND
  1126.  
  1127. SAVE,    DCA    RUNFLAG    /CLEAR THE RUN FLAG
  1128.     TAD    DEVNUM    /SAVE CURRENT DEVICE NUM
  1129.     DCA    OLDDEV    /INCASE WE CHANGE
  1130. GFN,    CLA IAC        /SET SAVFLAG
  1131.     JMS I    [GETFN    /GET THE DEV:NAME.EX
  1132.     TAD    XNAME    /SET UP ENTER
  1133.     DCA    SAVBLK    /POINTER TO FILE NAME
  1134.     TAD    DEVNUM    /GET DEVICE NUMBER
  1135.     CIF    10
  1136.     JMS I    [200    /ENTER FILE
  1137.     3
  1138. SAVBLK,    0        /STARTING BLOCK GOES HERE
  1139.     0        /SIZE GOES HERE
  1140.     JMP I    (IOERR
  1141.     TAD    SAVBLK    /PUT BLOCK NUMBER
  1142.     DCA I    (WRBLOK    /INTO WRITE
  1143.     TAD    SAVBLK+1/PUT SIZE
  1144.     DCA I    (OUSIZE    /SOMEWHERE TOO
  1145.     DCA    OULEN    /ZERO BLOCK COUNT
  1146.     CIF    10
  1147.     JMS I    [200    /DUMP USR
  1148.     11
  1149.     JMS I    [SWAP    /AND NOW OS8
  1150.     JMS I    (PUTFIL    /DO THE SAVE
  1151.     JMS I    [SWAP    /GET OS8
  1152.     TAD    RUNFLAG    /SET NO SWAP BIT IF RUN
  1153.     DCA I    (JSW
  1154.     CIF    10    /GET THE USR
  1155.     JMS I    [7700
  1156.     10
  1157.     TAD    DEVNUM    /GET DEVICE NUMBER
  1158.     CIF    10
  1159.     JMS I    [200    /CLOSE THE FILE
  1160.     4
  1161. XNAME,    NAME
  1162. OULEN,    0        /SIZE
  1163.     JMP I    (IOERR
  1164.     TAD    RUNFLAG    /WAS IT A RUN ?
  1165.     SZA CLA
  1166.     JMP I    (DORUN    /YES
  1167.     TAD    OLDDEV    /IS OLD DEVICE
  1168.     CIA        /THE SAME AS
  1169.     TAD    DEVNUM    /THE NEW ONE ??
  1170.     SNA CLA
  1171.     JMP    HNDLOK    /YES, THE HANDLER IS OK
  1172.     TAD    OLDDEV    /RESTORE DEVICE NUMBER
  1173.     DCA    DEVNUM
  1174.     TAD    [HANDLR+1
  1175.     DCA    DEVN    /SET UP HANDLER LOAD ADDR
  1176.     TAD    DEVNUM
  1177.     CIF    10
  1178.     JMS I    [200
  1179.     1
  1180. DEVN,    0
  1181.     JMP I    (IOERR
  1182.     TAD    DEVN    /RESET THE HANDLER ADDRESS
  1183.     DCA    DEVHAN
  1184. HNDLOK,    CIF    10    /GET RID OF THE USR
  1185.     JMS I    [200
  1186.     11
  1187.     JMS I    [SWAP    /REMOVE OS8 AGAIN
  1188.     JMP I    [CMDDONE
  1189. OLDDEV,    0
  1190.     /FIND A LINE IN THE WORKSPACE
  1191.     /RETURN WITH DF AND TEMP ADDRESSING NEXT LINE OR EOF
  1192.     /TEMPDF AND PTR ADDRESS BEGINNING OF LINE IF MATCHING LINE NUMBER
  1193.  
  1194. FINDLN,    0
  1195.     TAD      [TXTAREA
  1196.     DCA    TEMP    /INIT START OF FIRST LINE
  1197. SEARCH,    TAD    TEMP    /COMPARE THE NUMBER OF
  1198.     DCA    PTR    /THIS LINE WITH THE SPOT
  1199.     RDF        /SAVE DF OF START OF THIS LINE
  1200.     TAD    [6201
  1201.     DCA    TEMPDF+1
  1202.     TAD I    TEMP    /IN THE TEXT AREA.
  1203.     TAD    [-377
  1204.     SNA
  1205.     JMP I    FINDLN    /NEW LINE GOES AT EOF
  1206.     TAD    [377
  1207.     CLL CIA
  1208.     TAD    LINENO
  1209.     SNA
  1210.     JMP    SAME1ST
  1211.     SNL CLA
  1212.     JMP I    FINDLN    /INSERT NEW LINE
  1213.     ISZ    TEMP
  1214.     SKP
  1215.     JMS I    [FINCR
  1216. CONTIN,    JMS I    [PASS    /IF ITS GREATER KEEP SEARCHING.
  1217.     JMP    SEARCH
  1218. SAME1ST,ISZ    TEMP    /FIRST HALF OF LINE NUM SAME
  1219.     SKP
  1220.     JMS I    [FINCR
  1221.     TAD I    TEMP
  1222.     CLL CIA        /CHECK SECOND HALF
  1223.     TAD    LINENO+1
  1224.     SNA
  1225.     JMP    SAME2ND    /REPLACE OLD WITH NEW
  1226.     SZL CLA
  1227.     JMP    CONTIN
  1228.     TAD    PTR    /RESTORE POINTER TO START OF LINE
  1229.     DCA    TEMP
  1230.     JMS    TEMPDF    /RESTORE DF ALSO
  1231.     JMP I    FINDLN    /INSERT NEW LINE
  1232. SAME2ND,JMS I    [PASS
  1233.     JMP I    FINDLN
  1234.  
  1235.     PAGE
  1236.     /LIST COMMAND
  1237.  
  1238. LIST,    JMS I    (GET2LN    /GET LINE NUMBERS
  1239.     JMP    DOALL    /JMP IF NONE SPECD
  1240.     JMP    DOONE    /JMP IF ONLY ONE
  1241.     TAD    TEMP    /GENERAL CASE, GET LINE GT END
  1242.     DCA    SAVEND
  1243.     JMP    LSTCNT    /CONTINUE ON
  1244. DOALL,    TAD    EOFADR    /LIST TO END OF FILE
  1245.     DCA    SAVEND
  1246.     TAD I    (EOFFLD
  1247.     DCA I    (TMPFLD
  1248.     JMP    LSTCNT
  1249. DOONE,    TAD    WSPTR    /JUST ONE LINE IF SINGLE
  1250.     DCA    SAVEND
  1251.     STA        /DISABLE HEADING IF ONE LINE
  1252. LSTCNT,    DCA I    [HEADING
  1253.     TAD    TOWARD    /GET START OF REGION TO LIST
  1254.     DCA    WSPTR
  1255.     TAD I    (TWDFLD    /GET FIELD TOO
  1256.     DCA I    (PTR2FLD
  1257.     ISZ I    [HEADING
  1258.     JMS I    [HEADING /PRINT THE HEADING
  1259.     DCA    TEMP    /CLEAR WORKSPACE GETTER STATE
  1260.     TAD    COFLAG
  1261.     SNA CLA
  1262.     JMP I    [CMDDONE
  1263. LSTLUP,    TAD    SAVEND    /SEE IF NEXT WORD PAST LIMIT
  1264.     CLL CIA
  1265.     TAD    WSPTR
  1266.     CLA CML RAL
  1267.     TAD I    (TMPFLD
  1268.     CIA
  1269.     TAD I    (PTR2FLD
  1270.     SNL CLA        /SKP OUT IF PAST LIMIT
  1271. XONWT,    JMS I    [CTRLO    /STOP IF ^O HIT
  1272.     JMP I    [CMDDONE
  1273.     TAD    CSFLG    /SEE IF ^S HIT
  1274.     SZA CLA        /SKP IF NO
  1275.     JMP    XONWT    /IDLE IF YES TO HOLD SCREEN
  1276.     JMS I    (GETFIL
  1277.     JMP I    [CMDDONE
  1278.     JMS I    [TTYOUT
  1279.     JMP    LSTLUP
  1280. SAVEND,    0
  1281.     /SEARCH FOR SPACE OR TAB
  1282.  
  1283. SRCHSP,    0
  1284.     TAD I    PAKPTR    /LOOK AT CHAR
  1285.     SZA
  1286.     ISZ    PAKPTR    /BUMP ONLY IF NOT EOL
  1287.     SZA
  1288.     TAD    [-40    /IS IT SPACE
  1289.     SZA
  1290.     TAD    (40-11    /OR TAB
  1291.     SZA CLA
  1292.     JMP    SRCHSP+1 /LOOK AGAIN IF NO
  1293.     JMP I    SRCHSP    /RETURN POINTING AT NEXT CHAR OR EOL
  1294.  
  1295.     /SKIP PAST LEADING SPACES
  1296.  
  1297. SKIPSP,    0
  1298.     TAD I    PAKPTR
  1299.     SNA
  1300.     JMP I    SKIPSP    /RETURN IF AT EOL
  1301.     TAD    [-40
  1302.     SZA
  1303.     TAD    (40-11
  1304.     SZA CLA
  1305.     JMP I    SKIPSP
  1306.     ISZ    PAKPTR
  1307.     JMP    SKIPSP+1
  1308.  
  1309. EDTBUF,    ZBLOCK    60
  1310. EBEND,    0
  1311.  
  1312. CRLF,    0
  1313.     TAD    [15    /SEND CR
  1314.     JMS I    [TTYOUT
  1315.     TAD    [12    /SEND LF
  1316.     JMS I    [TTYOUT
  1317.     JMP I    CRLF
  1318.  
  1319.     PAGE
  1320.     /EDIT NNNNNN /OLDSTRING/NEWSTRING(CR) COMMAND
  1321.  
  1322. EDIT,    JMS I    (SRCHSP    /LOOK FOR SPACE
  1323.     JMS I    (GETNUM    /TRY TO GET LINE NUMBER
  1324.     JMP    EDTERR    /ERROR IF NO NUMBER
  1325.     JMS I    [FINDLN    /LOOK FOR THE LINE
  1326.     CDF
  1327.     TAD    TEMPDF+1 /INIT CHAR GETTER FOR START OF LINE
  1328.     DCA I    (PTR2FLD
  1329.     TAD    PTR
  1330.     DCA    WSPTR
  1331.     TAD    PTR    /SEE IF NULL LINE (NOT FOUND)
  1332.     CIA
  1333.     TAD    TEMP
  1334.     SNA CLA
  1335.     JMP    EDTERR    /ERROR IF LINE NOT LOCATED
  1336.     JMS I    (SKIPSP    /IGNORE TRAILING BLANKS
  1337.     TAD I    PAKPTR    /ERROR IF NO EDIT STRING
  1338.     SNA
  1339.     JMP    EDTERR
  1340.     CIA
  1341.     DCA    DELIM    /STORE AS DELIMITER
  1342.     DCA    EDTSIZ    /CLEAR SIZE OF STRING
  1343.     TAD    (EDTBUF    /INIT PTR TO EDIT BUFFER
  1344.     DCA    EDTPTR
  1345. GETST1,    ISZ    PAKPTR    /GET NEXT PATTERN CHAR
  1346.     TAD I    PAKPTR
  1347.     SNA
  1348.     JMP    EDTERR    /ERROR IF NO END TO PATTERN
  1349.     TAD    DELIM    /SEE IF AT DELIMITER
  1350.     SNA CLA
  1351.     JMP    GETST2    /END OF PATTERN, GET REPLACEMENT
  1352.     ISZ    EDTSIZ    /TALLY SIZE OF PATTERN
  1353.     TAD I    PAKPTR
  1354.     JMS    EDTSAV    /SAVE CHAR AWAY
  1355.     JMP    GETST1    /GET NEXT ONE
  1356. GETST2,    ISZ    PAKPTR    /NOW STORE THE REPLACEMENT PATTERN
  1357.     TAD I    PAKPTR
  1358.     SNA
  1359.     JMP    GOTST2    /END OF REPLACEMENT
  1360.     JMS    EDTSAV    /SAVE NEXT CHAR
  1361.     JMP    GETST2
  1362. GOTST2,    JMS    EDTSAV    /MARK END OF REPLACEMENT
  1363.     DCA    TEMP    /CLEAR FILE GETTER STATE
  1364.     TAD    [LINE+2    /SET POINTER TO RESULT LINE
  1365.     DCA    PAKPTR
  1366.     TAD    EDTSIZ    /MOVE AN INITIAL STRING IN
  1367.     CMA
  1368.     DCA    EDTCNT
  1369.     JMP    GETLGO
  1370. GETLN,    JMS I    (EDTGCH    /GET A CHAR FROM FILE
  1371.     JMP    EDTERR    /ERROR IF UNEXPECTED EOL
  1372.     JMS I    (EDTPUT    /PUT IN RESULT STRING
  1373. GETLGO,    ISZ    EDTCNT
  1374.     JMP    GETLN
  1375.     TAD    [LINE+2    /INIT POINTER TO SUBSTRING START
  1376.     DCA    BEGPTR
  1377. COMPLP,    TAD    BEGPTR
  1378.     DCA    PTR
  1379.     TAD    (EDTBUF
  1380.     DCA    EDTPTR
  1381.     TAD    EDTSIZ    /COMPARE TO ORIGIONAL STRING
  1382.     CMA
  1383.     DCA    EDTCNT
  1384.     JMP    COMPGO
  1385. COMPAR,    TAD I    EDTPTR    /GET A PATTERN CHAR
  1386.     CIA
  1387.     TAD I    PTR
  1388.     SZA CLA
  1389.     JMP    MISMAT    /GET ANOTHER FILE CHAR IF MISMATCH
  1390.     ISZ    EDTPTR
  1391.     ISZ    PTR
  1392. COMPGO,    ISZ    EDTCNT
  1393.     JMP    COMPAR    /TRY NEXT ONE
  1394.     TAD    BEGPTR    /REPLACE WITH NEW STRING NOW
  1395.     DCA    PAKPTR
  1396. MOVREP,    TAD I    EDTPTR
  1397.     SNA
  1398.     JMP    EOREP    /END OF REPLACEMENT
  1399.     JMS I    (EDTPUT    /PUT IN LINE
  1400.     ISZ    EDTPTR
  1401.     JMP    MOVREP
  1402. EOREP,    JMS I    (EDTGCH    /GET REMAINDER OF LINE
  1403.     JMP    EDTFIN
  1404.     JMS I    (EDTPUT
  1405.     JMP    EOREP
  1406. EDTFIN,    DCA I    PAKPTR    /MARK EOL
  1407.     TAD    [LINE+2    /EXHIBIT THE NEW LINE FOR USER
  1408.     DCA    PAKPTR
  1409. VIEWLP,    TAD I    PAKPTR
  1410.     SNA
  1411.     JMP    VIEWOK
  1412.     JMS I    [TTYOUT
  1413.     ISZ    PAKPTR
  1414.     JMP    VIEWLP
  1415. VIEWOK,    JMS I    [CRLF    /RETURN CARRAIGE
  1416.     TAD    [LINE+2
  1417.     DCA    PAKPTR
  1418.     JMP I    (PROCLN    /JMP TO PROCESS LINE AS IF TYPED IN
  1419. MISMAT,    JMS I    (EDTGCH    /GET ANOTHER CHAR
  1420.     JMP    EDTERR    /ERROR IF UNEXPEDTED EOL
  1421.     JMS I    (EDTPUT    /PUT IN LINE
  1422.     ISZ    BEGPTR    /MOVE UP START OF SEARCH
  1423.     JMP    COMPLP    /GO AGAIN
  1424.  
  1425. EDTERR,    JMS I    [TYPE
  1426.     MSGEDT        /EDIT COMMAND ERROR
  1427.     JMP I    [CMDDONE /GO BACK TO EDITOR LOOP
  1428.     /SAVE EDIT STRING AND SEE IF FITS
  1429.  
  1430. EDTSAV,    0
  1431.     DCA I    EDTPTR
  1432.     ISZ    EDTPTR
  1433.     TAD    EDTPTR
  1434.     TAD    (-EBEND    /AT END?
  1435.     SNA CLA
  1436.     JMP    EDTERR    /GIVE ERROR
  1437.     JMP I    EDTSAV    /ALL RIGHT
  1438.  
  1439. EDTPTR,    0
  1440. BEGPTR,    0
  1441. EDTSIZ,    0
  1442. EDTCNT,    0
  1443. DELIM,    0
  1444.  
  1445.     PAGE
  1446. HEIGHT,    -30        /SET TO SCREEN HEIGHT BY SET COMMAND
  1447. SDELAY,    -200        /SET TO HOLD SCREEN DELAY BY SET COMMAND
  1448.     IFNZRO HEIGHT-3000 <__FIX SET COMMAND__>
  1449. LINCNT,    0        /THIS WORD IS ZERO TO FLAG THE NEW BASIC EDITOR TO "SET"
  1450. CURPOS,    0
  1451.  
  1452. STIMER,    0
  1453. SCOPFG,    0        /SET NONZERO IF TERMINAL IS A SCOPE
  1454. ZERO,    0
  1455.  
  1456.     /PRINT A CHAR ON TERMINAL
  1457.     /PAUSE IF LF WAS PRINTED AND DELAY REQUESTED
  1458.     /SCREENSIZE ALSO SET BY "SET TTY" COMMAND
  1459.  
  1460. TTYOUT,    0
  1461.     AND    [177
  1462.     DCA    TCHAR
  1463.     TAD    TCHAR
  1464.     CLL
  1465.     TAD    [7770    /SEE IF CONTROL CODE
  1466.     SMA
  1467.     TAD    (10-16
  1468.     SMA
  1469.     TAD    (16-40
  1470.     SZL CLA
  1471.     JMP    NOTCTL    /JMP IF NO
  1472.     TAD    (136    /ECHO ^
  1473.     JMS I    (TTYO
  1474.     TAD    TCHAR
  1475.     TAD    (-7    /SEE IF BELL
  1476.     SZA CLA
  1477.     JMP    .+3
  1478.     TAD    TCHAR    /YES, SOUND IT
  1479.     JMS I    (TTYO
  1480.     TAD    (100    /MAKE CHAR VISIBLE
  1481. NOTCTL,    TAD    TCHAR
  1482.     JMS I    (TTYO    /ECHO IT
  1483.     TAD    TCHAR
  1484.     TAD    (-15    /TEST IF LF WILL FOLLOW
  1485.     SZA CLA
  1486.     JMP I    TTYOUT    /RETURN IF NO
  1487.     ISZ    LINCNT    /TEST LINE COUNTER FOR SCREENFULL
  1488.     JMP I    TTYOUT
  1489.     TAD    HEIGHT
  1490.     DCA    LINCNT    /NOW RESET SCREEN COUNTER
  1491.     TAD    SDELAY
  1492.     SNA        /SKIP IF DELAY REQUESTED
  1493.     JMP I    TTYOUT    /OTHERWISE JUST RETURN AT ONCE
  1494.     DCA    STIMER    /SET HOLD SCREEN TIMER
  1495. DLOOP,    KSF        /FIRST TEST IF KEY STRUCK
  1496.     JMP I    TTYOUT    /JMP IF NO
  1497.     KRB        /ELSE READ CHAR
  1498.     AND    [177    /MASK TO 7BIT
  1499.     TAD    (-3
  1500.     SNA
  1501.     JMP I    (BYEBYE    /JMP IF ^C SEEN
  1502.     TAD    (3-17
  1503.     SZA
  1504.     TAD    (17-21    /TEST IF ^Q OR ^S HIT
  1505.     CLL RTR
  1506.     SNA CLA
  1507.     JMP I    TTYOUT    /RETURN WITH CHAR STILL IN BUFFER IF ANY OF ABOVE SEEN
  1508.  
  1509.     /PRINT A BACKSPACE
  1510.     /IF TERMINAL IS A SCOPE, ECHO BS,SP,BS TO RUBOUT AND REPOSITION
  1511.     /CURSOR.  OTHERWWISE ECHO BACKARROW
  1512.  
  1513. PRTBSP,    0
  1514.     TAD    SCOPFG    /TEST SCOPE BIT
  1515.     SNA CLA
  1516.     JMP    BKARRW    /NOT - ECHO BACKARROW
  1517.     TAD I    PTR    /SEE IF CHAR TO BE ZAPPED IS A TAB
  1518.     CLL
  1519.     TAD    (-11
  1520.     SNA
  1521.     JMP    ECHOLN    /SPECIAL TREATMENT IF YES
  1522.     SMA
  1523.     TAD    (11-16
  1524.     SMA
  1525.     TAD    (16-40    /TEST IF CONTROL CODE BEING DELETED
  1526.     SNL CLA        /SKP IF NO
  1527.     JMS    BKSP    /ELSE ECHO EXTRA BKSP
  1528.     JMS    BKSP
  1529.     JMP I    PRTBSP    /DONE
  1530. BKARRW,    TAD    ("_
  1531.     JMS I    [TTYOUT
  1532.     JMP I    PRTBSP
  1533.  
  1534. TCHAR,
  1535. BKSP,    0
  1536.     TAD    [10    /ECHO BS
  1537.     JMS I    (TTYO
  1538.     TAD    [40
  1539.     JMS I    (TTYO
  1540.     TAD    [10    /BS
  1541.     JMS I    (TTYO
  1542.     JMP I    BKSP
  1543.  
  1544. ECHOLN,    TAD    [15    /RESET CURSOR
  1545.     JMS I    [TTYOUT
  1546.     TAD    [LINE+2    /POINT AT BEGINNING OF LINE
  1547.     DCA    SWAPT5
  1548. ECHOLP,    TAD    PTR    /FIRST SEE IF AT CHAR TO DELETE
  1549.     CIA
  1550.     TAD    SWAPT5
  1551.     SNA CLA
  1552.     JMP I    PRTBSP    /JMP OUT IF YES
  1553.     TAD I    SWAPT5    /ELSE ECHO IT
  1554.     JMS I    [TTYOUT
  1555.     ISZ    SWAPT5    /BUMP PTR
  1556.     JMP    ECHOLP    /DO NEXT
  1557.  
  1558. MSGRDY,    TEXT    /READY/
  1559.  
  1560.     PAGE
  1561.     /RANDOM NON FITTING ROUTINES FOR EDIT COMMAND
  1562.  
  1563.     /GET CHAR FROM WORKSPACE FOR EDIT STATEMENT
  1564.     /RETURN TO CALL+1 IF EOL
  1565.     /RETURN TO CALL+2 IF CHAR IN AC
  1566.  
  1567. EDTGCH,    0
  1568.     JMS I    (GETFIL    /GET A CHAR
  1569.     HLT        /UNREACHABLE
  1570.     TAD    (-15    /SEE IF CR YET
  1571.     SNA
  1572.     JMP I    EDTGCH    /TAKE EOL RETURN IF YES
  1573.     TAD    [15    /RESTORE CHAR
  1574.     ISZ    EDTGCH
  1575.     JMP I    EDTGCH    /SKIP RETURN
  1576.  
  1577.     /PUT A CHAR IN LINE FOR EDIT COMMAND
  1578.  
  1579. EDTPUT,    0
  1580.     DCA I    PAKPTR    /STORE THE CHAR
  1581.     ISZ    PAKPTR
  1582.     TAD    PAKPTR    /SEE IF AT LIMIT
  1583.     TAD    (-LINEND
  1584.     SZA CLA
  1585.     JMP I    EDTPUT    /OK, FITS
  1586.     JMP I    (EDTERR    /GIVE ERROR MESSAGE, LINE TOO LONG
  1587.     /CONTINUATION OF RUN COMMAND
  1588.  
  1589. DORUN,    TAD    (INFO+11/SET UP SOME OF INFO BLOCK
  1590.     DCA    X10
  1591.     CDF    10
  1592.     TAD    DEVHAN    /SAVE DEVICE HANDLER ADDRESS (DSK:)
  1593.     DCA I    X10
  1594.     CLL CML RTL    /SAVE DEVICE NUMBER
  1595.     DCA I    X10
  1596.     CDF
  1597.     TAD I    (SAVBLK    /SAVE STARTING BLOCK
  1598.     CDF    10
  1599.     DCA I    X10
  1600.     TAD    FNAME    /SAVE FILE NAME
  1601.     DCA I    X10
  1602.     TAD    FNAME+1
  1603.     DCA I    X10
  1604.     TAD    FNAME+2
  1605.     DCA I    X10
  1606.     TAD    FNAME+3
  1607.     DCA I    X10
  1608.     TAD I    (INFO+1    /PICK UP START OF BCOMP FIELD 1 STUFF
  1609.     DCA    BCBLOK    /STORE IN LINE
  1610.     CDF        /RESET DF
  1611.     JMS I    (7607    /CALL SYS:
  1612.     BCSIZ1+10    /READ THIS MUCH TO FIELD 1
  1613.     BCLOC1        /STARTING HERE
  1614. BCBLOK,    0        /FROM HERE
  1615.     JMP    WHUPS    /ERROR ON SYS!
  1616.     CIF CDF    10
  1617.     JMP I    (DORUN1    /JMP INTO CONTINUATION OF RUN COMMAND
  1618.  
  1619. WHUPS,    JMS I    [TYPE    /TYPE ERROR MESSAGE
  1620.     MSGSY
  1621.     JMP I    (GOODBY    /RETURN TO OS/8
  1622.  
  1623.     /RECOVERY FROM GENERAL FILE I/O ERRORS
  1624.  
  1625. IORETN,    DCA    OLDFLAG    /KILL OLD STATUS
  1626.     JMS I    [SWAP    /GET OS/8 OUT
  1627.     TAD    DEVNUM    /FORGET TENTATIVE FILE ON CURRENT DEVICE
  1628.     TAD    (OS8RES+200+DCWTBL-7600-1 /(SWAPPED OUT)
  1629.     DCA    TTYO
  1630.     TAD I    TTYO
  1631.     AND    [7770
  1632.     DCA I    TTYO
  1633.     JMP I    [MAINLUP /RETURN TO COMMAND LOOP
  1634.  
  1635. TTYO,    0
  1636.     TLS
  1637.     TSF
  1638.     JMP    .-1
  1639.     CLA
  1640.     JMP I    TTYO
  1641.  
  1642.  
  1643. MSGSY,    TEXT    /SYSTEM ERROR/
  1644.     /PACK COMMAND LINE IN OS/8 FORMAT
  1645.  
  1646. PACK7,    0
  1647.     TAD    [LINE+2    /SETUP PACKING POINTERS
  1648.     DCA    PTR
  1649.     TAD    PTR
  1650.     DCA    PTR3
  1651.     TAD I    PAKPTR    /DONT STORE LEADING BLANK IN FILE TO SAVE SPACE
  1652.     TAD    [-40
  1653.     SNA CLA
  1654.     ISZ    PAKPTR
  1655. PACKLP,    JMS    G7BITS    /GET CHAR
  1656.     DCA I    PTR    /STORE IN BUFFER
  1657.     ISZ    PTR
  1658.     JMS    G7BITS    /GET ANOTHER
  1659.     DCA I    PTR
  1660.     ISZ    PTR    /STORE ALSO
  1661.     JMS    G7BITS    /GET THIRD OF GROUP
  1662.     RTL
  1663.     RTL
  1664.     DCA    TMPWD    /SAVE FOR LATER
  1665.     TAD    TMPWD
  1666.     AND    [7400    /ISOLATE 4 BITS
  1667.     TAD I    PTR3    /PUT IN HI 4 BITS
  1668.     DCA I    PTR3
  1669.     ISZ    PTR3
  1670.     TAD    TMPWD    /REGET PREV CHAR
  1671.     RTL
  1672.     RTL
  1673.     AND    [7400    /4 BITS
  1674.     TAD I    PTR3
  1675.     DCA I    PTR3    /STORE THEM
  1676.     ISZ    PTR3
  1677.     JMP    PACKLP    /ITERATE
  1678.  
  1679. G7BITS,    0
  1680.     TAD I    PAKPTR    /GET CHAR
  1681.     ISZ    PAKPTR
  1682.     SZA        /NULL IS END OF LINE MARKER
  1683.     JMP I    G7BITS    /RETURN WITH IT OTHERWISE
  1684. PAKEOL,    DCA I    PTR    /MARK THE END OF LINE WITH A NULL IN THE LOW 7 BITS
  1685.     ISZ    PTR    /TALLY THE NULL
  1686.     JMP I    PACK7    /--RETURN--
  1687.  
  1688. TMPWD,    0
  1689. PTR3,    0
  1690.  
  1691.     PAGE
  1692.     /GET A CHARACTER FROM THE TTY
  1693.  
  1694. GETCH,    0
  1695.     TAD    OLDFLAG    /INPUT FROM A FILE ?
  1696.     SZA CLA
  1697.     JMP    FILEIN    /YES
  1698.     KSF
  1699.     JMP    .-1
  1700.     KRB
  1701.     AND    [177
  1702.     JMP I    GETCH
  1703. FILEIN,    ISZ    COUNT    /ANYTHING IN BUFFER ?
  1704.     JMP    NOREAD    /YES, NO READ
  1705.     TAD    O7200    /SET BUFFER COUNT
  1706.     DCA    COUNT
  1707.     TAD    [DSKBUF    /SET BUFFER POINTER
  1708.     DCA    RDPTR
  1709.     TAD    RDJMP    /RESET JUMP
  1710.     DCA    NOREAD
  1711.     JMS I    [SWAP    /GET OS8
  1712.     TAD    RDSIZE    /ANY ROOM LEFT ?
  1713.     SNA
  1714.     JMP    INERR    /BAD END OF FILE, TREAT AS I/O ERROR
  1715.     IAC
  1716.     DCA    RDSIZE
  1717.     JMS I    DEVHAN    /READ NEXT BLOCK
  1718.     200
  1719.     DSKBUF
  1720. RDBLOK,    0
  1721.     JMP    CHKSOF    /CHECK FOR SOFT ERROR
  1722. SOFTOK,    ISZ    RDBLOK    /BUMP BLOCK NUMBER
  1723.     JMS I    [SWAP    /AWAY WITH OS8
  1724. NOREAD,    HLT        /3W UNPACK JUMP
  1725.     JMP    INCHR1
  1726.     JMP    INCHR2
  1727. INCHR3,    TAD    RDJMP    /RESET SWITCH
  1728.     DCA    NOREAD
  1729.     TAD I    RDPTR    /GET LOW 4 BITS
  1730.     ISZ    RDPTR    /BUMP POINTER
  1731.     AND    [7400    /MASK IT
  1732.     CLL RTR        /SHIFT RIGHT 4
  1733.     RTR
  1734.     DCA    TEMP    /SAVE
  1735.     TAD I    RDTMP    /GET HIGH 4 BITS
  1736.     AND    [7400
  1737.     TAD    TEMP    /COMBINE THEM
  1738.     CLL RTR        /SHIFT RIGHT 4
  1739.     RTR
  1740.     JMP    AND177    /GO FINISH
  1741. INCHR2,    TAD    RDPTR    /SAVE ADDR OF FIRST WORD
  1742.     DCA    RDTMP
  1743.     ISZ    RDPTR    /BUMP POINTER
  1744. INCHR1,    TAD I    RDPTR    /GET NEXT CHAR
  1745.     ISZ    NOREAD    /BUMP SWITCH
  1746. AND177,    AND    [177    /MASK 7 BITS
  1747.     TAD    (-32    /CHECK FOR ^Z
  1748.     SNA
  1749.     JMP    ENDOLD    /EOF
  1750.     TAD    [32    /RESTORE CHAR
  1751.     JMP I    GETCH
  1752. ENDOLD,    DCA    OLDFLAG    /KILL OLD FLAG
  1753.     TAD    CHNFLAG    /WAS IT A RETURN FROM RUN ?
  1754.     SNA CLA
  1755.     JMP I    [CMDDONE/NO, JUST AN OLD COMMAND
  1756.     DCA    CHNFLAG    /KILL FLAG
  1757.     TAD    (INFO-7600+OS8RES+214
  1758.     DCA    X10    /PICK UP NAME FROM INFO BLOCK
  1759.     TAD I    X10    /(WHICH IS SWAPPED OUT)
  1760.     DCA    FNAME
  1761.     TAD I    X10
  1762.     DCA    FNAME+1
  1763.     TAD I    X10
  1764.     DCA    FNAME+2
  1765.     TAD I    X10
  1766.     DCA    FNAME+3
  1767.     JMP I    [CMDDONE/DONE WITH RETURN
  1768. CHKSOF,    SMA CLA        /SKP IF HARD ERROR
  1769.     JMP    SOFTOK
  1770. INERR,
  1771. OUERR,
  1772. O7200,    CLA        /AC NONZERO IF OUTPUT ERROR
  1773.     JMS I    [TYPE    /REPORT THE I/O ERROR
  1774.     MSGIO
  1775.     JMP I    (IORETN
  1776.  
  1777.     /OLD AND WEAVE COMMANDS
  1778.  
  1779. OLD,    JMS I    (CLEARWS /CLEAR HIS WORKSPACE NOW!
  1780.     SKP
  1781. WEAVE,    CLA STL RAR    /PRESERVE HIS WORKSPACE, INCLUDING USR AREA
  1782.     JMS I    [GETFN    /GET FILE NAME
  1783.     CLL CMA RAL    /SET RETRY COUNT
  1784.     DCA    TEMP
  1785. OLDTRY,    TAD    [FNAME    /POINTER TO FILE NAME
  1786.     DCA    SB    /INTO LOOKUP CALL
  1787.     TAD    DEVNUM    /GET DEVICE NUMBER
  1788.     CIF    10
  1789.     JMS I    [200    /LOOKUP FILE
  1790.     2
  1791. SB,    0        /START GOES HERE
  1792. RDSIZE,    0        /SIZE GOES HERE
  1793.     JMP    OLDBAD    /BAD FILE
  1794.     CIF    10    /REMOVE USR
  1795.     JMS I    [200
  1796.     11
  1797.     TAD    SB    /MOVE BLOCK
  1798.     SNA
  1799.     ISZ    RDSIZE    /SET COUNT TO 4095 IF NOT D.A.
  1800.     DCA    RDBLOK
  1801.     CLA IAC        /SET SWITCH
  1802.     DCA    OLDFLAG    /INPUT COMING FROM FILE
  1803.     CLA CMA        /SET COUNT TO INITIALIZE READ
  1804.     DCA    COUNT
  1805.     JMS I    [SWAP    /MOVE OS8
  1806.     JMP I    [MAINLUP/DO OLD
  1807. RDJMP,    JMP    NOREAD+1
  1808. COUNT,    0
  1809.  
  1810. OLDBAD,    DCA    FNAME+3    /TRY WITHOUT EXT
  1811.     ISZ    TEMP    /OR HAVE WE ALREADY ?
  1812.     JMP    OLDTRY    /NO, NOT YET
  1813.     JMS I    [TYPE    /REPORT FILE NOT FOUND
  1814.     MSGNF
  1815.     JMP    ERRDIS
  1816. INERRX,
  1817. IOERR,    JMS I    [TYPE    /REPORT CATCHALL "BAD FILE" MESSAGE
  1818.     BADFIL
  1819. ERRDIS,    CIF    10
  1820.     JMS I    [200    /DISMISS USR
  1821.     11
  1822.     JMP I    (IORETN    /TAKE ERROR RETURN
  1823.  
  1824.     PAGE
  1825.     /DELETE BEGIN-END COMMAND
  1826.  
  1827. DELETE,    JMS    GET2LN    /GET A PAIR OF LINE NUMBERS
  1828.     JMP I    [WHAT    /ERROR IF NONE
  1829.     NOP        /HANDLE SINGLE DELETE NORMALLY
  1830.     TAD    TOWARD    /NOW SEE IF SRC GE TARGET
  1831.     CLL CIA
  1832.     TAD    TEMP
  1833.     CLA CML RAL
  1834.     TAD I    (TWDFLD
  1835.     CIA
  1836.     TAD I    (TMPFLD
  1837.     SNL CLA
  1838.     JMP I    [WHAT    /ERROR IF END LT BEGIN
  1839.     JMS I    (SHRINK    /DELETE THE LINES
  1840.     JMP I    [CMDDONE /DONE, PRINT "READY"
  1841.     /GET 2 LINE NUMBERS OF THE FORM NNNN-NNNN
  1842.  
  1843. GET2LN,    0
  1844.     TAD    [TXTAREA /ASSUME BEGINNING OF FILE
  1845.     DCA    TOWARD
  1846.     TAD    [6201
  1847.     DCA I    (TWDFLD
  1848.     JMS I    (SRCHSP    /SKP TO DELIMITER
  1849.     TAD I    PAKPTR    /SEE IF "DELETE -NNNN" CONSTRUCTION
  1850.     TAD    (-55
  1851.     SNA CLA
  1852.     JMP    FRMSOF    /YES, DO FROM START OF FILE
  1853.     JMS I    (GETNUM    /TRY TO GET LINE NUMBER
  1854.     JMP I    GET2LN    /GIVE ERROR
  1855.     JMS I    [FINDLN    /LOOK UP LINE
  1856.     RDF        /RETURN DF = START OF NEXT LINE
  1857.     CDF
  1858.     TAD    [6201    /SAVE IN CASE SINGLE DELETE
  1859.     DCA I    (TMPFLD
  1860.     TAD    TEMP    /SAVE ADDR TOO
  1861.     DCA    WSPTR    /IN A SAVE PLACE
  1862.     TAD    PTR    /NOW SET POINTER TO START OF DELETION AREA
  1863.     DCA    TOWARD    /TARGET PTR FOR MOVE
  1864.     TAD    TEMPDF+1
  1865.     DCA I    (TWDFLD
  1866.     TAD I    PAKPTR    /SEE IF ANY MORE
  1867.     SNA CLA
  1868.     JMP    ONEDEL    /DELETE ONE LINE (WHAT A WASTE)
  1869. FRMSOF,    ISZ    PAKPTR    /SKIP PAST DELIMITER
  1870.     JMS I    (GETNUM    /GET LINE NUMBER
  1871.     JMP    TOEOF    /DELETE TO END OF FILE IF "DEL NNN-"
  1872.     JMS I    [FINDLN    /LOOKUP LINE
  1873.     RDF
  1874.     CDF
  1875.     TAD    [6201    /GET SOURCE TO START SHRINK WITH
  1876.     DCA I    (TMPFLD
  1877.     ISZ    GET2LN
  1878.     ISZ    GET2LN
  1879.     JMP I    GET2LN    /RETURN
  1880. TOEOF,    TAD I    (EOFFLD    /USE EOF
  1881.     DCA I    (TMPFLD
  1882.     TAD    EOFADR
  1883.     JMP    DELGO
  1884. ONEDEL,    TAD    WSPTR    /USE BEGIN OF NEXT LINE IF ONE ONLY
  1885.     SKP
  1886. DELGO,    ISZ    GET2LN
  1887.     ISZ    GET2LN
  1888.     DCA    TEMP    /SET SOURCE PTR
  1889.     JMP I    GET2LN
  1890.     /SEQUENCE COMMAND
  1891.  
  1892. SEQUEN,    DCA I    (NUM1    /ASSUME START WITH 100
  1893.     TAD    (400
  1894.     DCA I    (NUM1+1
  1895.     JMS I    (SRCHSP    /SKIP TO DELIMITER
  1896.     JMS I    (GETNUM    /GET START NUMBER
  1897.     JMP    DEFLT    /USE DEFAULT IF NONE
  1898.     TAD    LINENO    /OK, SAVE START POINT
  1899.     DCA I    (NUM1
  1900.     TAD    LINENO+1
  1901.     DCA I    (NUM1+1
  1902. DEFLT,    JMS I    (SAVNXT    /SAVE LINE NUMBER FOLLOWING START OF SEQ
  1903.     DCA I    (NUM2    /ASSUME STEP OF 10
  1904.     TAD    (20
  1905.     DCA I    (NUM2+1
  1906.     TAD I    PAKPTR    /SEE IF ANY MORE TO COMMAND
  1907.     SZA CLA
  1908.     ISZ    PAKPTR    /DISCARD DELIMITER IF YES
  1909.     JMS I    (GETNUM
  1910.     JMP    SEQRDY    /READY IF NO STEP SPECD
  1911.     TAD    LINENO    /COPY STEP
  1912.     DCA I    (NUM2
  1913.     TAD    LINENO+1
  1914.     DCA I    (NUM2+1
  1915. SEQRDY,    ISZ    SEQFLAG    /SET FLAG NOW!
  1916.     JMP I    [MAINLUP /GO TO LOOP
  1917.  
  1918.     /SKIP IF ^O NOT TYPED AND CLEAR 'COFLG'
  1919.     /RETURN TO CALL+1 IF ^O WAS TYPED AND SET 'COFLG'
  1920.     /SET OR CLEAR 'CLFLG' IF ^S OR ^Q TYPED OTHERWISE
  1921.  
  1922. CTRLO,    0
  1923.     KSF
  1924.     JMP    CTRLOX    /TAKE SKIP RETURN IF NO CHAR HIT
  1925.     KRS
  1926.     DCA SAVCHR    //SAVE THE CHARACTER
  1927.     KCC        //ENABLE THE KEYBOARD BUFFER FOR VT278
  1928.     TAD SAVCHR    //GET THE CHARACTER BACK
  1929.     AND    [177
  1930.     TAD    (-3    /TEST IF ^C ABORT
  1931.     SNA
  1932.     JMP I    (BYEBYE    /JMP IF YES
  1933.     TAD    (3-17
  1934.     SNA
  1935.     JMP     GOTCO    /JMP IF ^O HIT
  1936.     TAD    (17-21
  1937.     CLL RTR
  1938.     SZA        /SKP IF ^S OR ^Q HIT
  1939.     JMP    CTRLOX    /ELSE EXIT
  1940.     RAL        /LINK ON IF ^S
  1941.     DCA    CSFLG    /SAVE FLAG AS APPROPRIATE
  1942. CTRLOX,    ISZ    CTRLO    /SKP RETURN IF ^O NOT HIT
  1943.     CLA IAC
  1944. GOTCO,    DCA    COFLAG    /ZERO SAYS NO ECHO
  1945.     JMP I    CTRLO
  1946.  
  1947.     PAGE
  1948.     /ROUTINE TO GENERATE AUTO SEQUENCED LINE NUMBERS
  1949.  
  1950. SEQFUD,    0
  1951.     TAD    SAVNO+1 /TEST IF INTERLEAVING OF LINES
  1952.     CLL CIA
  1953.     TAD    NUM1+1
  1954.     CLA CML RAL
  1955.     TAD    SAVNO
  1956.     CIA
  1957.     TAD    NUM1
  1958.     SNL CLA        /SKP IF YES
  1959.     JMP    .+3
  1960.     TAD    (7    /WARN HIM BY SOUNDING BELL
  1961.     JMS I    (TTYO
  1962.     DCA    CARRY    /CLEAR LZ SUPPRESSION FLAG
  1963.     TAD    NUM1    /PRINT FIRST DIGITS
  1964.     JMS    PRTBCD
  1965.     TAD    NUM1+1    /PRINT SECOND DIGITS
  1966.     JMS    PRTBCD
  1967.     TAD    [40    /PRINT A SPACE
  1968.     JMS I    [TTYOUT
  1969.     TAD    [40
  1970.     DCA I    PTR    /STORE IN BUFFER TOO
  1971.     ISZ    PTR
  1972.     TAD    (-6    /NOW INCREMENT BCD LINENO (WHAT A PAIN)
  1973.     DCA    DIGCTR    /DO 6 DIGITS
  1974. DIGLUP,    DCA    OVFL1
  1975.     DCA    OVFL2    /CLEAR OVERFLOW WORDS
  1976.     TAD    [7774
  1977.     DCA    CARRY    /SET STEP COUNTER
  1978. SHIFT4,    TAD    (-6    /DO 6 WORDS
  1979.     DCA    TEMPDF
  1980.     TAD    (NUM1
  1981.     DCA    TOWARD    /USE A FEW TEMPS
  1982.     CLL
  1983. SHIFT6,    TAD I    TOWARD
  1984.     RAR
  1985.     DCA I    TOWARD    /SHIFT RIGHT ONE BIT
  1986.     ISZ    TOWARD
  1987.     ISZ    TEMPDF
  1988.     JMP    SHIFT6
  1989.     ISZ    CARRY
  1990.     JMP    SHIFT4
  1991.     TAD    OVFL2    /RECIRCULATE STEPSIZE DIGITS
  1992.     TAD    NUM2
  1993.     DCA    NUM2
  1994.     CLL        /ADD THE NEXT DIGIT
  1995.     TAD    OVFL1
  1996.     TAD    OVFL2
  1997.     RAR
  1998.     TAD    (-2400    /MOD 10
  1999.     SZL
  2000.     ISZ    CARRY    /BUMP CARRY
  2001.     SNL
  2002.     TAD    (2400    /RESTORE
  2003.     CLL RAL
  2004.     TAD    NUM1    /STORE NEW DIGIT
  2005.     DCA    NUM1
  2006.     TAD    CARRY    /ADD CARRY IN
  2007.     TAD    NUM1+1
  2008.     DCA    NUM1+1
  2009.     ISZ    DIGCTR
  2010.     JMP    DIGLUP    /DO ALL 6 DIGITS
  2011.     TAD    CARRY    /SEE IF EXCEEDED 999999
  2012.     SZA CLA
  2013.     JMP I    [WHAT    /YES
  2014.     JMP I    SEQFUD    /ALL SET, RETURN
  2015.     /STORE AND PRINT BCD DIGITS FOR SEQ MODE
  2016.  
  2017. PRTBCD,    0
  2018.     DCA    OVFL1    /SAVE DIGIT
  2019.     CLL STA RTL
  2020.     DCA    OVFL2    /3 DIGITS
  2021. CVTBCD,    TAD    OVFL1
  2022.     RTL
  2023.     RTL
  2024.     DCA    OVFL1
  2025.     TAD    OVFL1
  2026.     RAL
  2027.     AND    [17    /ISOLATE DIGIT
  2028.     SZA
  2029.     JMP    .+4
  2030.     TAD    CARRY    /SEE IF LEADING ZERO
  2031.     SNA CLA
  2032.     JMP    SKIP0    /YES, IGNORE IT
  2033.     ISZ    CARRY    /COUNT DIGIT
  2034.     TAD    (60    /MAKE ASCII
  2035.     DCA I    PTR    /STORE IN BUFFER
  2036.     TAD I    PTR
  2037.     ISZ    PTR
  2038.     JMS I    [TTYOUT    /PRINT IT
  2039. SKIP0,    ISZ    OVFL2
  2040.     JMP    CVTBCD
  2041.     JMP I    PRTBCD
  2042.  
  2043.     /SAVE LOC OF NUMBER OF FOLLOWING LINE
  2044.  
  2045. SAVNXT,    0
  2046.     JMS I    [FINDLN    /FIND THE LINE
  2047.     JMS    TEMPDF    /SET THE DF TO ITS START
  2048.     TAD I    PTR    /GET LINENO
  2049.     TAD    [-377    /SEE IF EOF
  2050.     SNA
  2051.     TAD    [7400    /SET TO INFINITY IF YES
  2052.     TAD    [377    /RESTORE NUMBER
  2053.     DCA    SAVNO
  2054.     ISZ    PTR    /BUMP PTR
  2055.     SKP
  2056.     JMS I    [FINCR    /AND DF IF NEEDED
  2057.     TAD I    PTR    /GET THE NEXT WORD
  2058.     DCA    SAVNO+1    /STORE IT
  2059.     CDF
  2060.     JMP I    SAVNXT    /RETURN
  2061.  
  2062. CARRY,    0
  2063. NUM1,    0;0        /ADJACENCY ASSUMED
  2064. OVFL1,    0
  2065. NUM2,    0;0
  2066. OVFL2,    0        /ADJACENCY ASSUMED
  2067. SAVNO,    0;0
  2068. DIGCTR,    0
  2069.  
  2070.     PAGE
  2071.     /A FEW NON FITTING ERROR MESSAGES
  2072.  
  2073. MSGNF,    TEXT    /FILE NOT FOUND/
  2074. MSGIO,    TEXT    "I/O ERROR"
  2075. OLDNEW,    TEXT    /NEW OR OLD--/
  2076. BADFIL,    TEXT    /BAD FILE/
  2077.  
  2078. LINE,            /THE TELETYPE LINE BUFFER.
  2079.  
  2080. WSNAME,    0;0;40;104;123;113;72;102;101;123;111;103;56;127;123;0    /" DSK:BASIC.WS"
  2081.  
  2082. START,    JMP    RBASIC    /IT WAS RAN
  2083.     CDF    10    /IF CHAINED TO CHECK IF CCL PASSED
  2084.     TAD I    (CDOPT4    /Q SWITCH IN RESPONSE TO .BASIC COMMAND (OS78)
  2085.     CDF
  2086.     AND    [200    /ISOLATE THE BIT
  2087.     SZA CLA
  2088.     JMP    RBASIC    /TREAT AS .R BASIC IF YES
  2089.     JMS I    (CORE
  2090.     CLA IAC
  2091.     DCA I    (JSW    /NO SWAP 
  2092.     CIF 10
  2093.     JMS I    (7700    /FETCH USR
  2094.     10
  2095.     CIF    10
  2096.     JMS I    (200    /RESET SYSTEM TABLES
  2097.     13
  2098.     TLS        /SET TTY FLAG
  2099.     JMS I    (GETDAT    /SET UP TITLE
  2100.     ISZ    CHNFLAG    /TELL ABOUT RETURN FROM RUN
  2101.     JMP I    (OLD    /READ IN OLD WORK SPACE
  2102. RBASIC,    CDF 10
  2103.     DCA I    (CDOPT3
  2104.     DCA I    (CDOPT4
  2105.     DCA I    (CDOPT5
  2106.     DCA I    (CDOPT6
  2107.     CDF 0
  2108.     TLS
  2109.     JMS I    (CORE
  2110.     TAD    [77
  2111.     DCA I    [TXTAREA
  2112.     JMS I    (GETDAT    /SET UP TITLE
  2113. FINDSV,    TAD I    X11    /LOOK UP SOME SAVE FILES
  2114.     SNA
  2115.     JMP    LUBUF    /
  2116.     DCA    XXXXSV    /SAVE POINTER TO NAME
  2117.     CLA IAC
  2118.     CIF    10
  2119.     JMS I    (200
  2120.     2
  2121. XXXXSV,    0
  2122.     0
  2123.     JMP    NG
  2124.     IAC
  2125.     CDF    10
  2126.     TAD    XXXXSV
  2127.     DCA I    X10    /SAVE BLOCK PLUS 1
  2128.     CDF        /IN INFO AREA
  2129.     JMP    FINDSV
  2130. LUBUF,    CLA        /REMOVED BASIC.UF LOOKUP
  2131.     CDF    10
  2132.     DCA I    X10
  2133.     CDF
  2134.     CLA IAC        /TYPE WITH NO CARRIAGE RETURN
  2135.     JMS I    [TYPE    /"OLD OR NEW -- "
  2136.     OLDNEW
  2137.     JMS I    [SWAP
  2138.     JMS I    (CLEARWS /CLEAR THE WORKSPACE IN CASE OF NO RESPONSE
  2139.     TAD    (-11    /SET TAB TO SPACE CONVERSION FLAG HERE
  2140.     JMP I    (MAINLUP
  2141. NG,    JMS I    [TYPE    /PART OF SYSTEM MISSING
  2142.     MISING
  2143.     JMP I    (7605
  2144.  
  2145.     PAGE
  2146.  
  2147. LINEND=    .-1        /DEFINE THE END OF THE LINE BUFFER
  2148.     /THE FOLLOWING ROUTINE ASSUMES THAT THE YEAR IS ALREADY
  2149.     /SET UP BY A CALL TO "CORE" - JR
  2150.  
  2151. GETDAT,    0        /PUT OS8 DATE INTO THE TITLE
  2152.     CDF    10
  2153.     TAD I    (MDATE    /GET DATE WORD
  2154.     CDF
  2155.     DCA    TEMP2    /SAVE IT
  2156.     TAD    TEMP2
  2157.     SNA
  2158.     JMP I    GETDAT    /NO DATE
  2159.     AND    [7400    /GET MONTH
  2160.     CLL RTL        /SHIFT SOME
  2161.     RTL
  2162.     RTL
  2163.     TAD    (MONTHS-3
  2164.     DCA    X12
  2165.     TAD    (DATE-1    /SET UP POINTER TO DATE
  2166.     DCA    X13
  2167.     TAD    TEMP2    /GET DAY
  2168.     RTR
  2169.     RAR
  2170.     AND    (37
  2171.     JMP    DAYGO    /CONVER TO TEXT
  2172. DAYLP,    TAD    (100-12    /REDUCE AND TALLY QUOTIENT
  2173.     TAD    TEMP
  2174. DAYGO,    DCA    TEMP
  2175.     TAD    TEMP    /SEE IF OVERFLOW
  2176.     AND    [77
  2177.     TAD    (7766
  2178.     SMA CLA
  2179.     JMP    DAYLP    /REDUCE MOD 10 IF NOT
  2180.     TAD    TEMP
  2181.     TAD    (6060    /UNPACK TO 6 BIT ASCII
  2182.     DCA I    X13    /INTO DATE
  2183.     TAD I    X12    /GET MONTH CHARS
  2184.     DCA I    X13
  2185.     TAD I    X12
  2186.     DCA I    X13
  2187. /    TAD    TEMP2    /GET YEAR
  2188. /    AND    (7
  2189. /    TAD    (21
  2190. /    CLL RTL
  2191. /    RTL
  2192. /    RTL
  2193. /    ISZ    X13    /THE WORD WITH -7 IS THERE
  2194. /    DCA I    X13    /STORE LAST DIGIT OF YEAR
  2195.  
  2196.     /ABOVE JOB DONE BY "CORE" DURING INIT TIME
  2197.  
  2198.     JMP I    GETDAT
  2199. MONTHS,    TEXT    /-JAN-FEB-MAR-APR-MAY-JUN-JUL-AUG-SEP-OCT-NOV-DEC/
  2200. NAMLST,    BASICN
  2201.     BCOMPN
  2202.     BLOADN
  2203.     BRTSN
  2204.     BOVN
  2205.     0
  2206. BASICN,    FILENAME BASIC.SV
  2207. BCOMPN,    FILENAME BCOMP.SV
  2208. BLOADN,    FILENAME BLOAD.SV
  2209. BRTSN,    FILENAME BRTS.SV
  2210. BOVN,    FILENAME BASIC.OV
  2211. MISING,    TEXT    /INCOMPLETE SYSTEM/
  2212.  
  2213.     PAGE
  2214.     /THIS PAGE GETS WIPED OUT SOON
  2215.  
  2216.     /ROUTINE TO GET CORESIZE, SETUP DATE IN HEADING
  2217.     /AND SET SCOPE / TTY FLAG FOR RUBOUT TREATMENT
  2218.  
  2219.  
  2220. CORE,    0        /CORE SIZE SUBROUTINE
  2221.     CDF    10    /GET INTO DATE FIELD
  2222.     TAD I    (MDATE
  2223.     CDF        /RESET FIELD
  2224.     AND    (7    /LOOK AT LOW YEAR BITS
  2225.     DCA    TEMP    /HOLD
  2226.     TAD I    (BIPCCL    /NOW GET THE EXTENDED BITS
  2227.     AND    (600    /FROM THE 600 BITS
  2228.     CLL RTR
  2229.     CLL RTR        /SHIFT INTO PLACE
  2230.     TAD    TEMP    /ADD TO LOW BITS
  2231.     ISZ I    (DASH6    /BUMP THE YEAR TENS DIGIT
  2232.     TAD    (-12
  2233.     SMA        /SKP IF .LT. 10 OFF OF 1970
  2234.     JMP    .-3    /ELSE DECR AGAIN
  2235.     TAD    (12+60    /CONVERT TO 6 BIT ASCII
  2236.     CLL RTL
  2237.     RTL
  2238.     RTL        /SWAP TO LEFT HALF BYTE
  2239.     DCA I    (EODAT    /NOW STORE IN DATE TEMPLATE
  2240.     CDF    10
  2241.     TAD I    (7726    /LOOK AT HLT/CLA HLT SCOPE KLUDGE
  2242.     CDF
  2243.     AND    [200    /GET SCOPE BIT
  2244.     DCA I    (SCOPFG    /AND STORE IT
  2245.  
  2246.     /STANDARD OS/8 CORESIZE ROUTINE
  2247.  
  2248.     TAD I    (7777
  2249.     AND COR70
  2250.     CLL RAR
  2251.     RTR
  2252.     SNA
  2253.     JMP COR0
  2254.     IAC
  2255.     DCA CORSIZ
  2256.     JMP COREX
  2257. COR0,    CDF
  2258.     TAD    CORSIZ
  2259.     RTL
  2260.     RAL
  2261.     AND    COR70
  2262.     TAD    COREX
  2263.     DCA    .+1
  2264. COR1,    CDF
  2265.     TAD I    CORLOC
  2266. COR2,    NOP
  2267.     DCA    COR1
  2268.     TAD    COR2
  2269.     DCA I    CORLOC
  2270. COR70,    70
  2271.     TAD I    CORLOC
  2272. CORX,    7400
  2273.     TAD    CORX
  2274.     TAD    CORV
  2275.     SZA CLA
  2276.     JMP    COREX
  2277.     TAD    COR1
  2278.     DCA I    CORLOC
  2279.     ISZ    CORSIZ
  2280.     JMP    COR0
  2281. COREX,    CDF
  2282.     TAD    CORSIZ
  2283.     CIA
  2284.     DCA    CORSIZ
  2285.     CLL CML CLA RTL    /2
  2286.     TAD    CORSIZ
  2287.     SZA CLA
  2288.     JMP I    CORE
  2289.     TAD    (AC7776    /SAVE ONLY FIELDS 0 AND 1 IF 8K SYSTEM
  2290.     DCA I    (PATCH5
  2291.     JMP I    CORE
  2292. CORLOC,    CORX
  2293. CORV,    1400
  2294.  
  2295.     $$
  2296.