14 /COPYRIGHT (C) 1972, 1973, 1974, 1975
15 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
19 /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A
20 /SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU-
21 /SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANT OTHER
22 /COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE
23 /TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO
24 /AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE
25 /SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC.
28 /THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT
29 /NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL
30 /EQUIPMRNT COROPATION.
32 /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
33 /SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
42 /COPYRIGHT C 1972, 1973, 1974
44 /DIGITAL EQUIPMENT CORPORATION
45 /MAYNARD,MASSACHUSETTS 01754
54 /ASSEMBLE AND LOAD AS FOLLOWS:
57 / *BASIC,BASIC<BASIC.03
62 /NOTE DIFFERENCES FROM VERSION 1 AS FOLLOWS:
65 / *LPT:<BASIC.01,BASIC.03
68 VERSON= 5 /VERSION LOCATED IN CORE AT TAG "VERLOC"
69 /LEFT 6BIT HALF = VERSION NUMBER+21
70 /RIGHT 6BIT HALF = PATCH LEVEL+41 (A=01)
73 /FIXES FOR V4 J.K. 1975
75 /.LINE TOO LONG ERROR MESSAGE
76 /.CLEAR CD OPTION TABLE AT START UP
77 /.LIST FROM ACROSS FLD BOUNDRIES
81 /JR 5-APR-77 ADDED EXTENDED DATE PRINTOUT
82 /JR 13-APR-77 ADDED SCROLLING, SCOPE SUPPORT AND .BASIC COMMAND INTERFACE
83 /JR 30-APR-77 FIX JSW FIELD BUG
84 \f BCSIZE= 3700 / SIZE OF BCOMP.SV
85 BCBEGN= 7001 / START OF BCOMP
86 INFO= 7604 / INFORMATION AREA (FIELD 1)
87 JSW= 7746 /JOB STATUS WORD IN FIELD 0
88 OS8RES= 3400 / SWAP AREA FOR OS8
89 DSKBUF= 4200 / FILE BUFFER
90 HANDLR= 4600 / INPUT OUTPUT HANDLER ADDRESS
91 TXTAREA=5200 / START OF TEXT AREA
92 MDATE= 7666 /ADDR OF OS8 DATE IN FIELD 1
93 BIPCCL= 7777 /ADDR OF DATE EXTENSION IN FIELD 0
109 RDTMP, 0 /USED BY INPUT ROUTINE
111 SIZE, 0 /USED BY LINE EDITOR STUFF
118 COFLAG, 0 /=0 IF CTRL/O
119 CHNFLAG,0 /=1 IF BACK FROM RUN, 0 IF OLD
120 RUNFLAG,0 /=1 IF RUN, 0 IF SAVE
121 OLDFLAG,0 /=1 IF INPUT COMING FROM FILE
125 LINENO, 0;0 /HOLDS MOST RECENT LINE NUM
126 EOFLIN, 0;0 /LAST LINE NUMBER
127 NAME, 0;0;0;0 /NAME BUFFER
128 FNAME, FILENAME NONAME.BA /CURRENT FILE NAME
129 DEVHAN, 0 /ADDRESS OF DEVICE HANDLER
130 DEVNUM, 0 /CURRENT DEVICE NUMBER
131 SWPNUM, 0 /SWAPPER FLAG (FOR ^C)
175 GETLIN, 0 /GET A LINE FROM TTY.
176 TAD I (HEIGHT /RESET SCREEN HEIGHT ON USER INPUT
178 DCA NDIGS /CLEAR LINE NUMBER.
179 DCA CSFLG /ZERO OUT ^S FLAG WHENEVER WE GET INPUT
180 DCA NCHARS /CLEAR TEXT COUNT.
184 CLL CMA RTL /CHECK FOR CONTROL C
187 JMP I (BYEBYE /ITS ^C EXIT TO OS8
188 TAD O7766 /CHECK FOR CARRIAGE RETURN
190 JMP CARRET /JUMP IF 015 - CARRET.
191 TAD O7770 /CHECK FOR ^U
193 JMP ALT /TREAT ^U AS ALTMODE
194 TAD O7772 /CHECK FOR ALTMODE
196 JMP ALT /JUMP IF 033 - ALTMODE.
197 TAD O7634 /CHECK FOR RUBOUT
199 JMP ARROW /TREAT LIKE BACK ARROW
200 IAC /CHECK FOR ALTMODE
202 JMP ALT /JUMP IF 176 - ALTMODE.
205 JMP .+4 /PRINT IF 175 - ALTMODE.
209 TAD O36 /CHECK FOR BACK ARROW
211 JMP ARROW /JUMP IF 137 - BACKARROW.
215 JMP IGNORE /JUMP IF NOT PRINTABLE.
217 DCA TEMP /SAVE IT(SP=01,^=77,NO 00).
218 TAD OLDFLAG /INPUT FROM FILE ?
220 JMP .+3 /YES, DON'T ECHO
222 JMS I [TTYOUT /PRINT ON TTY
225 JMP ISTEXT /NOT LINE NUMBER.
227 TAD O7745 /SEE IF ITS A DIGIT
228 JMS I [LNDIG /PUT DIGIT INTO LINE NUM
229 JMP IGNORE /GET NEXT CHAR
230 ISTEXT, TAD NCHARS /PUT CHAR IN THE LINE.
235 JMS I [TYPE /250 CHARS IS OK TO FIT 1 MORE.
237 JMP GETLIN+1/IF AN EVEN NUMBER
238 TAD NCHARS /OF CHARS SO FAR
244 TAD TEMP /THEN STORE AS THE LEFT
245 CLL RTL /HALF OF THE WORD.
249 RIGHTY, TAD I PTR /ELSE AS THE RIGHT.
255 ARROW, TAD OLDFLAG /INPUT FROM FILE ?
257 JMS I (PRTBSP /NO, GO PRINT BACKSPACE OR BACKARROW
259 TAD NCHARS /IF THERE IS A TEXT CHAR TO ERASE
262 DCA NCHARS /THEN ERASE IT.
264 TAD NDIGS /OTHERWISE, IF THERE IS A LINENO
265 SMA /CHARACTER TO ERASE THEN ERASE
267 JMP IGNORE /OTHERWISE, NEVER MIND.
268 CARRET, TAD OLDFLAG /INPUT FROM FILE ?
270 JMS I [CRLF /NO, PRINT CR-LF
273 JMP .+4 /NOT AN EMPTY LINE
274 TAD NDIGS /ANY CHARS AT ALL ?
276 JMP IGNORE /NO, IGNORE EMPTY LINES
281 TAD I PTR /STORE 00 (CAR. RET.) LIKE ALL
282 AND O7700 /THE OTHER CHARACTERS.
284 JMS I [NORM /NORMALIZE LINE NUMBER
286 /CRLF, 0 /PRINT CR-LF
303 \fLNDIG, 0 /GET DIGIT INTO LINE NUM
316 JMP I LNDIG /IGNORE MORE THAN 6 DIGITS.
318 DCA .+1 /PUT IN THE NTH DIGIT IN THE
319 HLT /4 BIT BCD LINE NUMBER:
326 DIG6, TAD LINENO+1/WHERE N=6
329 DIG5, TAD TEMP /WHERE N=5
337 DIG4, TAD TEMP /WHERE N=4
343 DIG3, TAD LINENO /WHERE N=3
346 DIG2, TAD TEMP /WHERE N=2
354 DIG1, TAD TEMP /WHERE N=1
360 TYPE, 0 /TYPE A MESSAGE
361 DCA CRSWIT /SAVE CARRIAGE RETURN SWITCH
362 TAD I TYPE /GET ADDR OF MESSAGE
365 TLOOP, JMS I [CTRLO /CHECK FOR CTRL/O
366 JMP TCRLF /YES, STOP PRINTING
367 TAD I PASS /GET HIGH CHAR
373 JMP TCRLF /END OF MESSAGE
374 TAD O237 /CONVERT TO ASCII
375 JMS I [TTYOUT /PRINT CHAR
376 TAD I PASS /GET LOWER CHAR
380 JMP TCRLF /END OF LINE
381 TAD O237 /CONVERT TO ASCII
384 TCRLF, TAD CRSWIT /RETURN THE CARRIAGE ?
388 /TTYOUT, 0 /PRINT ONE CHAR
394 PASS, 0 /SKIP OVER LINE
407 FDECR, 0 /DECR. POINTER AND FIELD
419 FINCR, 0 /INCR. CURRENT DATA FIELD
431 JMP I [COREOV /FILE TOO BIG
434 JMS I [CRLF /TYPE READY MESSAGE
438 JMS I [GETLIN /GET AN EDITED LINE.
440 JMP NOCOMD /NOT A COMMAND
441 TAD OLDFLAG /IN OLD MODE ?
443 JMP I [COMMAND/NO, MUST BE A COMMAND
444 JMP MAINLUP /OTHERWISE IGNORE
445 NOCOMD, TAD PTR /OR A LINE WITH A LINE
448 DCA SIZE /SET UP SIZE OF LINE.
449 TAD I [LINE+2 /IS LINE EMPTY ??
451 DCA SIZE /POSSIBLY ZERO.
452 TAD LINENO /IS IT > LAST LINE ?
456 JMP .+4 /HI PART NOT =, FORGET LOW
459 TAD EOFLIN+1 /COMPARE LOW PARTS
461 JMP NOTLAST /NOT > LAST
462 JMS I [GETEOF /GET EOF
463 TAD TEMP /MAKE IT LOOK LIKE
464 DCA PTR /A CALL TO FINDLN
465 TAD LINENO /SAVE NEW LAST LINE
470 NOTLAST,JMS I [FINDLN /GENERAL CASE - SEARCH
471 INSERT, TAD TEMP /THERE ARE (TEMP-PTR) WORDS IN
472 CLL CMA /THE OLD LINE WHICH ARE TO BE
473 TAD PTR /REPLACED BY (-SIZE) WORDS IN
479 DCA PTRFLD /GET FIELD OF START OF OLD LINE
483 TAD SIZE /WHICH WAY ?
485 JMP MOVE /SAME SIZE, MOVE IN NEW LINE
487 JMP I (EXPAND /MAKE MORE ROOM FOR NEW LINE
489 TAD TEMP /SHRINK THE FILE
490 DCA TOWARD /MOVE FILE DOWN TO HERE
493 DCA TMPFLD /GET FIELD OF READ POINTER
500 DCA TWDFLD /GET FIELD OF WRITE POINTER
504 DCA I TOWARD /MOVE DOWN
506 TAD O7701 /END OF FILE ???
508 JMP LWREOF /YES, PUT NEW LINE IN AT END
509 ISZ TEMP /INCREMENT POINTERS
511 TAD TMPFLD /AND FIELDS IF NECESSARY
519 JMP TMPFLD /KEEP SHRINKING
520 LWREOF, TAD TOWARD /SET NEW EOF
524 JMP MAINLUP /IT WAS A DELETE
526 TAD LINENO /PUT IN LINE NUMBER
532 MOVLUP, CDF /MOVE IN NEW LINE
537 ISZ PTR /INCREMENT POINTERS
539 TAD PTRFLD /WHATCH OUT FOR FIELDS
540 TAD O10 /(W.C. OR E.M. ?)
561 \fEXPAND, CIA /EXTRA ROOM NEEDED
563 TAD I TEMP /SAVE THIS PLACE
565 TAD O37 /NOW MARK THIS PLACE
567 JMS I [GETEOF /GET EOF
570 DCA TMP2FLD /GET FIELD OF END OF FILE
572 TAD TEMP /MOVE FILE UP
576 JMS I [FINCR /MIGHT BE ACROSS A FIELD
579 DCA TWD2FLD /SAVE NEW EOF FIELD
580 TAD TOWARD /SAVE NEW EOF
585 DCA I TOWARD /MOVE UP ONE WORD
587 TAD O7741 /IS THE MARK ?
589 JMP LASTWD /YES, PUT IN LAST WORD
591 TAD TOWARD /BACK UP POINTERS
595 TAD TWD2FLD /AND FIELDS (MAYBE)
607 LASTWD, TAD TEMP2 /PUT IN SAVED WORD
609 JMP I [MOVE /GO MOVE IN NEW LINE
610 COREOV, JMS I [TYPE /FILE TOO BIG
613 AND SWPNUM /IS OS8 RES IN PLACE ?
614 SZA CLA /YES IF EVEN NUMBER OF SWAPS
615 BYE, JMS I [SWAP /PUT BACK OS8
616 TSF /WAIT FOR TTY SO OS8 DOESN'T
617 JMP .-1 /TRAMPLE ON MY LINE FEED
618 JMP I (7605 /EXIT TO OS8
619 MSGBIG, 5646;5660;6372;160;6746;6347;5560;7000
620 MSGALT, 0145;4655;4665;4645;0
621 MSGWHAT,7051;4265;4000
622 MSGTOO, 5552;5746;0165;6060;0155;6057;5000
623 SCRATCH,TAD [TXTAREA/SCRATCH FILE
625 DCA EOFLIN /ZERO LAST LINE NUM
628 NORM, 0 /LINE NUMBER NORMALIZER
631 JMP .+3 /IF THERE ARE NO DIGITS IN THE
632 CLA CMA /LINE NUMBER THEN
633 JMP I NORM /RETURN -1.
636 JMP I NORM /IF THE LINENO HAS BEEN FILLED
637 TAD O7774 /OUT TO 6 DIGITS(LEADING 0'S)
638 DCA TEMP /THEN RETURN.
639 TAD LINENO /OTHERWISE, SHIFT RIGHT 1 DIGIT
641 DCA LINENO /AND CHECK AGAIN.
649 SETEOF, 0 /SET NEW EOF
650 DCA EOFADR /SAVE ADDR
659 TAD EOFADR /RETRIEVE EOF INFO
665 \fCOMMAND,TAD COMTBL /COMMAND LIST POINTER
667 COMLUP, ISZ TEMP /GET 2 CHAR COMMAND
671 JMP WHAT /END OF LIST
672 TAD I [LINE+2 /IS THIS IT ?
674 JMP COMLUP /NO, LOOK AGAIN
675 TAD I TEMP /GET COMMAND ADDR
676 DCA TEMP /AND GO TO IT
678 WHAT, JMS I [TYPE /TYPE WHAT?
699 WSSAVE, 0145;6454;3343;4264;5244;1770;6400
700 HEADING,0 /PRINT HEADING
702 TAD [FNAME /SET UP FOR CONVERSION
703 DCA TEMP /POINTER TO FILE NAME
704 TAD XTITLE /WHERE IT GOES
706 JMS CONV /OUTPUT FIRST TWO CHARS
709 ISZ PTR /SKIP FOR EXT
710 JMS CONV /OUTPUT EXTENSION
711 JMS I [TYPE /TYPE HEADING
713 JMS I [CRLF /FOLLOWED BY A CRLF
715 CONV, 0 /CONVERT TO SIX BIT ASCII
716 TAD I TEMP /GET NEXT WORD
718 SNA /SUBSTITUTE BLANKS
720 TAD O7741 /SUBTRACT 37
723 TAD I TEMP /DO UPPER CHAR
728 TAD I PTR /COMBINE THEM
734 TITLE, 0;0;0;0101;0 /FOR THE PROG NAME
735 0101;0101 /SOME BLANKS
736 VERLOC, VERSON^100+2142 /VERSION NUMBER
737 0101;0101 /MORE BLANKS
738 DATE, 0;0;0 /DATE TEMPLATE
739 DASH6, 1627 /"-6" FOR BUILDING DATE
740 EODAT, 0 /END OF DATE TEMPLATE
742 GETNC, 0 /GET A CHAR FOR A FILE NAME
743 TAD NCHARS /GET CHAR POINTER
746 TAD [LINE+2 /ADD BASE
747 DCA TEMP /GIVES ADDR OF WORD
748 TAD I TEMP /GET 2 CHARS
749 SZL /ODD EVEN BIT IS IN LINK
750 JMP TESTCH /GO CHECK THE CHAR
754 TESTCH, AND O77 /ONLY 6 BITS
756 JMP I GETNC /END OF NAME
778 \fLIST, TAD I [LINE+3 /LISTNH ?
780 TAD [-4436 /PSEUDO TEST
782 JMP LISTNH /NO HEADING
783 JMS I [HEADING/GIVE HEADING
784 TAD COFLAG /WAS CTRL/O TYPED ?
786 JMP I [CMDDONE/YES, ABORT LISTING
787 LISTNH, DCA NCHARS /SET POINTER
788 DCA NDIGS /AND DIGIT COUNTER
789 JMS I [GETNC /SKIP UNTIL BLANK
793 JMP .-4 /NO BLANK YET
794 JMS I [GETNC /GET A CHAR
795 JMP NUMDUN /END OF NUMBER
796 TAD O7706 /SUBTRACT 72
797 JMS I [LNDIG /GO SEE IF ITS A DIGIT
798 JMP .-4 /IT WAS, CONTINUE
800 DCA PTR /SET UP POINTER
801 JMS I [NORM /NORMALIZE THE NUM
802 SPA CLA /ANY NUMBER ?
804 JMS I [FINDLN /YES, LOCATE IT
813 LSTLUP, JMS I [CTRLO /CHECK FOR CTRL/O
814 JMP I [CMDDONE/YES, EXIT
815 JMS CTRLS /CHECK FOR XOFF
816 JMS GETFIL /GET CHARACTER TO LIST
818 JMS I [TTYOUT /PRINT IT
820 GETFIL, 0 /GET CHARACTER FROM FILE
826 JMP I .+1 /SEQUENCE OF OPERATIONS
827 PTR2FLD /GET FIRST WORD
828 FRSTDIG /FIRST DIGIT OF LINE NUMBER
831 PTR2FLD /GET NEXT WORD OF LINE NUMBER
834 LASTDIG /SIXTH AND LAST DIGIT
835 PTR2FLD /GET WORD OF TEXT
836 LEFTTXT /LEFT CHARACTER
837 RITETXT /RIGHT CHARACTER
838 LINFTXT /LINE FEED CHARACTER
839 PTR2FLD,HLT /CHECK FOR EOF
844 JMP I GETFIL /YES, RETURN UNSKIPPED
846 DCA TEMP2 /NO, SAVE WORD
847 ISZ PTR /BUMP POINTER
853 LASTDIG,CLA IAC /FORCE LAST DIGIT (EVEN IF 0)
854 FRSTDIG,DCA NDIGS /ZERO DIGIT COUNT
858 DCA TEMP2 /SHIFT LEFT ONE DIGIT
863 JMP NZDIGIT /ITS NOT ZERO
864 TAD NDIGS /IS IT A LEADING ZERO ?
866 JMP GETFIL+1/YES, DON'T PRINT IT
867 NZDIGIT,ISZ NDIGS /NON ZERO OR NON LEADING ZERO
868 TAD O260 /SO PRINT IT
870 LEFTTXT,TAD TEMP2 /GET LEFT CHAR
875 RITETXT,TAD O10 /SETUP FOR LEFT CHAR NEXT
878 AND O77 /SIXBITIZE AC
880 JMP ZEROTXT /0 IS END OF THE LINE
881 TAD O237 /MAKE IT ASCII
884 ZEROTXT,TAD O13 /SETUP FOR LF NEXT
888 LINFTXT,DCA TEMP /CLEAR SEQUENCER AND RETURN LF
898 MSGRDY, 6346;4245;7200
901 \fGETFN, 0 /GET A FILE NAME (ALSO FETCH ITS HANDLER)
902 DCA SAVFLAG /=1 FOR SAVE, 0 FOR OLD OR NEW
903 TAD CHNFLAG /RETURNING FROM RUN ?
905 JMP NOFUSR /YES, DON'T FETCH USR
906 JMS I [SWAP /GET OS8 RESIDENT
907 TAD SAVFLAG /IS IT OLD OR NEW ??
909 IAC /YES, DON'T SWAP 10000-11777
910 DCA I (7746 /DO IF SAVE, SO ALTER JSW
914 NOFUSR, DCA NCHARS /RESET CHAR POINTER
915 BSKIP, JMS I [GETNC /GET A CHAR
916 JMP ASKNAM /ASK FOR FILE NAME
920 NOSKIP, JMS GETNAM /GET A NAME
922 JMP USEDSK /NO DEVICE SPECIFIED, USE DSK:
923 TAD NAME /PUT IN THE DEVICE NAME
924 DCA DEV /AS SPECIFIED
927 JMS GETNAM /FETCH THE FILE NAME
929 JMP I (IOERR /BAD SYNTAX IN FILE DESCRIPTOR
930 JMP GETHAN /GO FETCH THE HANDLER
931 USEDSK, TAD (0423 /SET DEVICE NAME TO DSK:
935 GETHAN, TAD [HANDLR+1
936 DCA DEV+2 /ALSO THE HANDLER ORIGIN
938 JMS I O200 /CALL THE USR
939 1 /FETCH HANDLER BY NAME
941 JMP I (IOERR /BAD DEVICE
942 TAD DEV+1 /SAVE THE DEVICE NUMBER
944 TAD DEV+2 /AND THE HANDLER ENTRY POINT
946 MOVEFN, TAD SAVFLAG /WAS IT A SAVE ?
948 JMP I GETFN /YES, JUST RETURN
949 TAD NAME /NEW OR OLD, ANY NAME GIVEN ?
951 JMP I GETFN /NO, PROBABLY JUST A DEVICE
952 DCA FNAME /YES, SAVE IT
960 ASKNAM, TAD SAVFLAG /WAS THIS A SAVE ?
962 JMP ASKNM /NO, GO ASK FOR A NAME
963 TAD FNAME /IT WAS A SAVE, ANY OLD NAME TO USE ?
965 JMP ASKNM /NO, GO ASK FOR ONE
966 DCA NAME /YES, MOVE INTO NAME
974 ASKNM, CLA IAC /ASK FOR FILE NAME
982 GETNAM, 0 /GET A FILE OR DEVICE NAME
983 DCA NAME /ZERO THE NAME BUFFER
986 TAD O201 /USE DEFAULT EXT .BA
988 TAD [NAME /SETUP POINTER
990 TAD O7774 /SETUP SIZE (MAX 4 WORDS)
992 NAMLUP, JMS I (PATCH3
1000 TAD I TEMP2 /COMBINE THE 2
1003 ISZ SIZE /ANY MORE ?
1006 RENAME, CLL CML RAR /SAVE USR AREA
1007 JMS GETFN /GET FILE NAME
1009 JMS I O200 /REMOVE USR
1010 11 /AND RESTORE 10000-11777
1011 JMS I [SWAP /SWAP OS8 RESIDENT
1013 NEW, TAD [TXTAREA /SCRATCH
1015 DCA EOFLIN /ZERO LAST LINE NUM
1017 JMS GETFN /GET THE FILE NAME
1018 JMS I [SWAP /REMOVE OS8
1022 \fPUTFIL, 0 /WRITE THE FILE
1024 DCA PTR /GET POINTER TO TEXT
1025 TAD O6201 /GET FIELD OF TEXT
1027 DCA TEMP /ZERO LINE SEQUENCER
1028 TAD [DSKBUF /GET ADDR OF DISK BUFFER
1029 DCA SWAPT1 /BUFFER POINTER
1031 DCA SWAPT2 /DOUBLE WORD COUNTER
1032 TAD JMPINS /SET 3 WAY SWITCH
1034 PFLOOP, JMS I [GETFIL /GET A CHAR FROM TEXT AREA
1035 JMP PFCTLZ /END OF FILE
1036 JMS PUTCH /OUTPUT IT
1037 JMP PFLOOP /DO NEXT CHAR
1038 PFCTLZ, TAD O232 /PUT CTRL-Z
1040 TAD O7201 /BUFFER DUMP COUNT
1042 JMS PUTCH /FILL WITH ZEROES
1047 PUTCH, 0 /PUT A CHAR ONTO THE OS8 FILE
1048 DCA SWAPT4 /SAVE THE CHAR
1049 PUTJMP, HLT /JUMP TO CORRECT PLACE
1051 JMP PH2 /SECOND CHAR
1052 PH3, TAD JMPINS /RESTORE SWITCH
1054 TAD SWAPT4 /GET THE CHAR
1055 AND O17 /LOW FOUR BITS
1057 RTR /INTO THE HIGH PART OF WORD TWO
1059 TAD I SWAPT1 /COMBINE WITH CHAR 2
1061 TAD SWAPT4 /GET THE HIGH FOUR BITS
1063 RTL /INTO THE HIGH PART OF WORD ONE
1065 TAD I SWAPT3 /COMBINE WITH WORD ONE
1067 ISZ SWAPT1 /BUMP POINTER
1068 ISZ SWAPT2 /BUMP DOUBLE WORD COUNT
1070 JMS I [SWAP /SWAP IN OS8
1071 JMS I DEVHAN /WRITE THIS BUFFER
1076 ISZ OUSIZE /ANY ROOM LEFT ?
1078 JMP I (OUERR /NO, ERROR
1079 ISZ WRBLOK /BUMP BLOCK NUMBER
1080 ISZ I (OULEN /BUMP ACTUAL SIZE
1081 JMS I [SWAP /SWAP BACK
1082 TAD [DSKBUF /SET UP BUFFER POINTER
1085 DCA SWAPT2 /SET UP COUNT
1087 PH2, TAD SWAPT1 /SAVE POINTER TO FIRST
1089 ISZ SWAPT1 /BUMP POINTER
1090 PH1, TAD SWAPT4 /GET CHAR
1091 DCA I SWAPT1 /INTO BUFFER
1092 ISZ PUTJMP /BUMP SWITCH
1094 JMPINS, JMP PUTJMP+1
1096 SWAP, 0 /SWAP OS8 RESIDENT
1097 ISZ SWPNUM /FLIP BYEBYE SWITCH
1099 JMS SWAP2 /WITH OS8RES THROUGH OS8RES+577
1105 PATCH5, JMS SWAP2 /OVERLAID IF <12K
1136 BADFIL, 4342;4501;4752;5546;0
1137 ASKFN, 4752;5546;0157;4256;4616;1600
1140 \fRUN, TAD I [LINE+3 /RUNNH ?
1144 JMS I [HEADING/GIVE A HEADING
1145 TAD [LINE+2 /SET UP FAKE LINE
1151 TAD I PTR /MOVE FAKE LINE INTO "LINE"
1157 ISZ RUNFLAG /SET RUN FLAG
1159 SAVE, DCA RUNFLAG /CLEAR THE RUN FLAG
1160 TAD DEVNUM /SAVE CURRENT DEVICE NUM
1161 DCA OLDDEV /INCASE WE CHANGE
1162 GFN, CLA IAC /SET SAVFLAG
1163 JMS I [GETFN /GET THE DEV:NAME.EX
1164 TAD XNAME /SET UP ENTER
1165 DCA SAVBLK /POINTER TO FILE NAME
1166 TAD DEVNUM /GET DEVICE NUMBER
1168 JMS I O200 /ENTER FILE
1170 SAVBLK, 0 /STARTING BLOCK GOES HERE
1173 TAD SAVBLK /PUT BLOCK NUMBER
1174 DCA I (WRBLOK /INTO WRITE
1175 TAD SAVBLK+1/PUT SIZE
1176 DCA I (OUSIZE /SOMEWHERE TOO
1177 DCA OULEN /ZERO BLOCK COUNT
1179 JMS I O200 /DUMP USR
1181 JMS I [SWAP /AND NOW OS8
1182 JMS I (PUTFIL /DO THE SAVE
1183 JMS I [SWAP /GET OS8
1184 TAD RUNFLAG /SET NO SWAP BIT IF RUN
1189 TAD DEVNUM /GET DEVICE NUMBER
1191 JMS I O200 /CLOSE THE FILE
1196 TAD RUNFLAG /WAS IT A RUN ?
1199 TAD OLDDEV /IS OLD DEVICE
1201 TAD DEVNUM /THE NEW ONE ??
1203 JMP HNDLOK /YES, THE HANDLER IS OK
1204 TAD OLDDEV /RESTORE DEVICE NUMBER
1207 DCA DEVN /SET UP HANDLER LOAD ADDR
1214 TAD DEVN /RESET THE HANDLER ADDRESS
1216 HNDLOK, CIF 10 /GET RID OF THE USR
1219 JMS I [SWAP /REMOVE OS8 AGAIN
1222 FINDLN, 0 /FIND A LINE
1225 SEARCH, TAD TEMP /COMPARE THE NUMBER OF
1226 DCA PTR /THIS LINE WITH THE SPOT
1227 TAD I TEMP /IN THE TEXT AREA.
1230 JMP I FINDLN /NEW LINE GOES AT EOF
1237 JMP I FINDLN /INSERT NEW LINE
1241 CONTIN, JMS I [PASS /IF ITS GREATER KEEP SEARCHING.
1243 SAME1ST,ISZ TEMP /FIRST HALF OF LINE NUM SAME
1247 CLL CIA /CHECK SECOND HALF
1250 JMP SAME2ND /REPLACE OLD WITH NEW
1256 JMP I FINDLN /INSERT NEW LINE
1261 \fDORUN, TAD (INFO+11/SET UP SOME OF INFO BLOCK
1264 TAD DEVHAN /SAVE DEVICE HANDLER ADDRESS (DSK:)
1266 CLL CML RTL /SAVE DEVICE NUMBER
1269 TAD I (SAVBLK /SAVE STARTING BLOCK
1272 TAD FNAME /SAVE FILE NAME
1281 JMS XMOVE /MOVE THIS PAGE INTO FIELD 1
1286 CDF CIF 10 /GO TO THE FIELD ONE COPY
1287 RUNDO, JMS XMOVE /MOVE THE HANDLER INTO FIELD 1
1292 TAD I (INFO+1 /GET START OF BCOMP.SV
1295 JMS I (7607 /READ IN THE COMPILER
1300 JMS XMOVE /MOVE BACK THE HANDLER
1305 CLA IAC /OPEN THE TEMP FILE
1311 JMS I (200 /RESET SYSTEM TABLES
1312 13 /AND REMOVE TENTATIVE FILES
1313 TAD TMPBLK /SAVE ITS START
1316 DCA I (INFO+11 /AND ITS MAX LENGTH
1317 DCA I (7644 /KILL R SWITCH
1319 JMP I (BCBEGN /GO START THE COMPILER
1320 WHUPS, TAD (123 /PRINT SY ERROR
1331 JMP I (7605 /RETURN TO OS8
1339 RDF /GET CALLING FIELD
1340 TAD (6203 /PLUS CIF CDF 0
1341 DCA MOVRTN /FOR RETURN
1342 JMS GMOVE /GET FROM FIELD
1344 JMS GMOVE /GET ADDRESS
1346 JMS GMOVE /GET TO FIELD
1348 JMS GMOVE /GET COUNT
1351 TAD I MFPTR /MOVE IT
1362 TAD I XMOVE /GET ARG FOR MOVE
1365 TMPFIL, FILENAME BASIC.TM
1373 \fGETCH, 0 /GET A CHARACTER FROM THE TTY
1374 TAD OLDFLAG /INPUT FROM A FILE ?
1382 FILEIN, ISZ COUNT /ANYTHING IN BUFFER ?
1383 JMP NOREAD /YES, NO READ
1384 TAD O7200 /SET BUFFER COUNT
1386 TAD [DSKBUF /SET BUFFER POINTER
1388 TAD RDJMP /RESET JUMP
1390 JMS I [SWAP /GET OS8
1391 TAD RDSIZE /ANY ROOM LEFT ?
1393 JMP INERR /BAD END OF IFILE
1396 JMS I DEVHAN /READ NEXT BLOCK
1400 JMP CHKSOF /CHECK FOR SOFT ERROR
1401 SOFTOK, ISZ RDBLOK /BUMP BLOCK NUMBER
1402 JMS I [SWAP /AWAY WITH OS8
1403 NOREAD, HLT /3W UNPACK JUMP
1406 INCHR3, TAD RDJMP /RESET SWITCH
1408 TAD I RDPTR /GET LOW 4 BITS
1409 ISZ RDPTR /BUMP POINTER
1411 CLL RTR /SHIFT RIGHT 4
1414 TAD I RDTMP /GET HIGH 4 BITS
1416 TAD TEMP /COMBINE THEM
1417 CLL RTR /SHIFT RIGHT 4
1419 JMP AND177 /GO FINISH
1420 INCHR2, TAD RDPTR /SAVE ADDR OF FIRST WORD
1422 ISZ RDPTR /BUMP POINTER
1423 INCHR1, TAD I RDPTR /GET NEXT CHAR
1424 ISZ NOREAD /BUMP SWITCH
1425 AND177, AND O177 /MASK 7 BITS
1426 TAD O7746 /CHECK FOR ^Z
1429 TAD O32 /RESTORE CHAR
1431 ENDOLD, DCA OLDFLAG /KILL OLD FLAG
1432 TAD CHNFLAG /WAS IT A RETURN FROM RUN ?
1434 JMP I [CMDDONE/NO, JUST AN OLD COMMAND
1435 DCA CHNFLAG /KILL FLAG
1437 DCA X10 /PICK UP NAME FROM INFO BLOCK
1438 TAD I X10 /(WHICH IS SWAPPED OUT)
1446 JMP I [CMDDONE/DONE WITH RETURN
1447 OLDBAD, DCA FNAME+3 /TRY WITHOUT EXT
1448 ISZ TEMP /OR HAVE WE ALREADY ?
1449 JMP OLDTRY /NO, NOT YET
1452 JMS I O200 /DISMISS USR
1455 INERR, DCA OLDFLAG /KILL OLD STATUS
1456 JMS I [SWAP /OUT WITH OS8
1457 JMS I [TYPE /PRINT MESSAGE
1460 OLD, TAD [TXTAREA/SCRATCH FILE
1462 DCA EOFLIN /ZERO LAST LINE NUM
1464 JMS I [GETFN /GET FILE NAME
1465 CLL CMA RAL /SET RETRY COUNT
1467 OLDTRY, TAD [FNAME /POINTER TO FILE NAME
1468 DCA SB /INTO LOOKUP CALL
1469 TAD DEVNUM /GET DEVICE NUMBER
1471 JMS I O200 /LOOKUP FILE
1473 SB, 0 /START GOES HERE
1474 RDSIZE, 0 /SIZE GOES HERE
1475 JMP OLDBAD /BAD FILE
1478 ISZ RDSIZE /SET COUNT TO 4095 IF NOT D.A.
1481 DCA OLDFLAG /INPUT COMING FROM FILE
1482 CLA CMA /SET COUNT TO INITIALIZE READ
1484 JMS I [SWAP /MOVE OS8
1485 JMP I [MAINLUP/DO OLD
1488 PATCH2, JMS I [SRCHBK
1498 JMP SOFTOK /SOFT ERROR
1502 \fHEIGHT, -30 /SET TO SCREEN HEIGHT BY SET COMMAND
1503 SDELAY, -200 /SET TO HOLD SCREEN DELAY BY SET COMMAND
1504 IFNZRO HEIGHT-3000 <__FIX SET COMMAND__>
1505 LINCNT, 0 /THIS WORD IS ZERO TO FLAG THE NEW BASIC EDITOR TO "SET"
1509 SCOPFG, 0 /SET NONZERO IF TERMINAL IS A SCOPE
1511 /SKIP IF ^O NOT TYPED AND CLEAR 'COFLG'
1512 /RETURN TO CALL+1 IF ^O WAS TYPED AND SET 'COFLG'
1513 /SET OR CLEAR 'CLFLG' IF ^S OR ^Q TYPED OTHERWISE
1550 /PRINT A CHAR ON TERMINAL
1551 /PAUSE IF LF WAS PRINTED AND DELAY REQUESTED
1552 /SCREENSIZE ALSO SET BY "SET TTY" COMMAND
1557 TLS /NOW PRINT THE CHAR
1559 TAD (-15 /TEST IF LF WILL FOLLOW
1561 JMP I TTYOUT /RETURN IF NO
1562 ISZ LINCNT /TEST LINE COUNTER FOR SCREENFULL
1565 DCA LINCNT /NOW RESET SCREEN COUNTER
1567 SNA /SKIP IF DELAY REQUESTED
1568 JMP I TTYOUT /OTHERWISE JUST RETURN AT ONCE
1569 DCA STIMER /SET HOLD SCREEN TIMER
1570 DLOOP, KSF /FIRST TEST IF KEY STRUCK
1571 JMP NOKST /JMP IF NO
1573 AND A177 /MASK TO 7BIT
1576 JMP I [BYEBYE /JMP IF ^C SEEN
1583 JMP I TTYOUT /RETURN WITH CHAR STILL IN BUFFER IF ANY OF ABOVE SEEN
1585 JMP .-1 /LOOP 4096 TIMES (USUALLY)
1586 ISZ STIMER /TEST DELAY COUNTER
1587 JMP DLOOP /REITERATE IF NOT DONE
1588 JMP I TTYOUT /ELSE RETURN FOR MORE
1597 /IF TERMINAL IS A SCOPE, ECHO BS,SP,BS TO RUBOUT AND REPOSITION
1598 /CURSOR. OTHERWWISE ECHO BACKARROW
1601 TAD SCOPFG /TEST SCOPE BIT
1603 JMP BKARRW /NOT - ECHO BACKARROW
1604 TAD NCHARS /SEE IF AT LEFT MARGIN
1607 JMP I PRTBSP /DO NOTHING IF YES
1608 TAD O10 /ELSE ECHO BS
1614 JUSTSP, TAD (40 /SPACE
1622 \fLINE, /THE TELETYPE LINE BUFFER.
1623 WSNAME, 0;0;0145;6454;3343;4264;5244;1770;6400
1624 START, JMP RBASIC /IT WAS RAN
1625 CDF 10 /IF CHAINED TO CHECK IF CCL PASSED
1626 TAD I (7644 /Q SWITCH IN RESPONSE TO .BASIC COMMAND (OS78)
1628 AND O200 /ISOLATE THE BIT
1630 JMP RBASIC /TREAT AS .R BASIC IF YES
1635 JMS I (7700 /FETCH USR
1638 JMS I (200 /RESET SYSTEM TABLES
1641 JMS GETDAT /SET UP TITLE
1642 ISZ CHNFLAG /TELL ABOUT RETURN FROM RUN
1643 JMP I (OLD /READ IN OLD WORK SPACE
1652 JMS GETDAT /SET UP TITLE
1653 FINDSV, TAD I X11 /LOOK UP SOME SAVE FILES
1655 JMP LUBUF /GO FIND BASIC.UF
1656 DCA XXXXSV /SAVE POINTER TO NAME
1667 DCA I X10 /SAVE BLOCK PLUS 1
1670 LUBUF, CLA IAC /FIND BASIC.UF
1676 JMP .+3 /OK IF MISSING
1682 CLA IAC /TYPE WITH NO CARRIAGE RETURN
1683 JMS I [TYPE /"OLD OR NEW -- "
1687 NG, JMS I [TYPE /PART OF SYSTEM MISSING
1691 /THE FOLLOWING ROUTINE ASSUMES THAT THE YEAR IS ALREADY
1692 /SET UP BY A CALL TO "CORE" - JR
1694 GETDAT, 0 /PUT OS8 DATE INTO THE TITLE
1696 TAD I (MDATE /GET DATE WORD
1701 JMP I GETDAT /NO DATE
1702 AND O7400 /GET MONTH
1708 TAD (DATE-1 /SET UP POINTER TO DATE
1714 JMP DAYGO /CONVER TO TEXT
1715 DAYLP, TAD (100-12 /REDUCE AND TALLY QUOTIENT
1718 TAD TEMP /SEE IF OVERFLOW
1722 JMP DAYLP /REDUCE MOD 10 IF NOT
1724 TAD (2121 /UNPACK TO HANK'S ASCII
1725 DCA I X13 /INTO DATE
1726 TAD I X12 /GET MONTH CHARS
1730 / TAD TEMP2 /GET YEAR
1736 / ISZ X13 /THE WORD WITH -7 IS THERE
1737 / DCA I X13 /STORE LAST DIGIT OF YEAR
1739 /ABOVE JOB DONE BY "CORE" DURING INIT TIME
1744 \fMONTHS, 1653;4257 /-JAN
1764 BASICN, FILENAME BASIC.SV
1765 BCOMPN, FILENAME BCOMP.SV
1766 BLOADN, FILENAME BLOAD.SV
1767 BRTSN, FILENAME BRTS.SV
1768 BAFN, FILENAME BASIC.AF
1769 BSFN, FILENAME BASIC.SF
1770 BFFN, FILENAME BASIC.FF
1771 BUFN, FILENAME BASIC.UF
1772 MISING, 5257;4460;5661;5546;6546;0164;7264;6546;5600
1773 OLDNEW, 5746;7001;6063;0160;5545;1616;0
1776 \f /THIS PAGE GETS WIPED OUT SOON
1778 /ROUTINE TO GET CORESIZE, SETUP DATE IN HEADING
1779 /AND SET SCOPE / TTY FLAG FOR RUBOUT TREATMENT
1782 CORE, 0 /CORE SIZE SUBROUTINE
1783 CDF 10 /GET INTO DATE FIELD
1786 AND (7 /LOOK AT LOW YEAR BITS
1788 TAD I (BIPCCL /NOW GET THE EXTENDED BITS
1789 AND (600 /FROM THE 600 BITS
1791 CLL RTR /SHIFT INTO PLACE
1792 TAD TEMP /ADD TO LOW BITS
1793 ISZ I (DASH6 /BUMP THE YEAR TENS DIGIT
1795 SMA /SKP IF .LT. 10 OFF OF 1970
1796 JMP .-3 /ELSE DECR AGAIN
1797 TAD (12+21 /CONVERT TO "HANKS ASCII"
1800 RTL /SWAP TO LEFT HALF BYTE
1801 DCA I (EODAT /NOW STORE IN DATE TEMPLATE
1803 TAD I (7726 /LOOK AT HLT/CLA HLT SCOPE KLUDGE
1805 AND O200 /GET SCOPE BIT
1806 DCA I (SCOPFG /AND STORE IT
1808 /STANDARD OS/8 CORESIZE ROUTINE