/BASIC.PA FOR OS78 V4 /ORIGINALLY: /16 OS/8 COMMERCIAL BASIC EDITOR, V7A / / / / / / / / / / / / /COPYRIGHT (C) 1972, 1973, 1974, 1975, 1978, 1979, 1981 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. / / / /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A /SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU- /SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANY OTHER /COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE /TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO /AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE /SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. / / /THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT /NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL /EQUIPMENT CORPORATION. / /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS /SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. / / / / / / /DEC-S8-LBASA-B-LA / /COPYRIGHT C 1972, 1973, 1974 / /DIGITAL EQUIPMENT CORPORATION /MAYNARD,MASSACHUSETTS 01754 / /AUGUST 19, 1972 / /HANK MAURER, 1972 /LEN ELEKMAN, 1972 /SHAWN SPILMAN, 1973 / / / ASSEMBLE AND LOAD INSTRUCTIONS / / .PAL BASIC / .LOAD BASIC / .SA SYS BASIC=2000 / / VERSON= "A /VERSION LOCATED IN CORE AT TAG "VERLOC" PATCH= 0 /LEFT 6BIT HALF = VERSION NUMBER /RIGHT 6BIT HALF = PATCH LEVEL / /FIXES FOR V4 J.K. 1975 / /.LINE TOO LONG ERROR MESSAGE /.CLEAR CD OPTION TABLE AT START UP /.LIST FROM ACROSS FLD BOUNDRIES /.MEMORY OVERFLOW /.INPUT FROM TTY /JR 5-APR-77 ADDED EXTENDED DATE PRINTOUT /JR 13-APR-77 ADDED SCROLLING, SCOPE SUPPORT AND .BASIC COMMAND INTERFACE /JR 30-APR-77 FIX JSW FIELD BUG /JR 1-MAR-78 ADD LINKAGE TO BCOMP V6 /JR 27-MAR-78 BUTCHERED FOR 7 BIT ASCII SUPPORT /JR 5-MAR-79 ADD SOURCE FIX FOR CD SWITCH CLEARING BUG /JP 17-FEB-81 MAKE MODIFICATIONS OS78 V4 BCSIZ1= 1000 /SIZE WORD FOR FIELD 1 OF BCOMP DORUN1= 3200 /ENTRY ADDR FOR BCOMP FROM EDITOR BCLOC1= 2000 /STARTING ADDR OF BCOMP FIELD 1 LOAD REGION INFO= 7604 / INFORMATION AREA (FIELD 1) JSW= 7746 /JOB STATUS WORD IN FIELD 0 CDOPT2= 7642 /HIGH ORDER CD = OPTION AND ALTMODE FLAG CDOPT3= 7643 /CD SWITCHES [ABC DEF GHI JKL] CDOPT4= 7644 /CD SWITCHES [MNO PQR STU VWX] CDOPT5= 7645 /CD SWITCHES [YZ0 123 456 789] CDOPT6= 7646 /LOW ORDER CD = OPTION DCWTBL= 7760 /DEVICE CONTROL WORD TABLE IN FIELD 1 OS8RES= 4400 / SWAP AREA FOR OS8 DSKBUF= OS8RES+600 / FILE BUFFER HANDLR= DSKBUF+400 / INPUT OUTPUT HANDLER ADDRESS TXTAREA=HANDLR+400 / START OF TEXT AREA MDATE= 7666 /ADDR OF OS8 DATE IN FIELD 1 BIPCCL= 7777 /ADDR OF DATE EXTENSION IN FIELD 0 AC7775= CLL STA RTL AC7776= CLL STA RAL *1 CIF 30 /SYMBIOSIS INTERRUPT LINKAGE JMP .-1 *3 SWAPT1, 0 SWAPT2, 0 SWAPT3, 0 SWAPT4, 0 SWAPT5, 0 X10, INFO-1 X11, NAMLST-1 X12, 0 X13, 0 X14, 0 X15, 0 X16, 0 X17, 0 *20 RDTMP, 0 /USED BY INPUT ROUTINE RDPTR, 0 SIZE, 0 /USED BY LINE EDITOR STUFF TEMP, 0 TEMP2, 0 TOWARD, 0 PTR, 0 PAKPTR, 0 WSPTR, 0 COFLAG, 0 /=0 IF CTRL/O CHNFLAG,0 /=1 IF BACK FROM RUN, 0 IF OLD RUNFLAG,0 /=1 IF RUN, 0 IF SAVE OLDFLAG,0 /=1 IF INPUT COMING FROM FILE SEQFLAG,0 /=1 IF AUTO SEQ MODE EOFADR, TXTAREA CORSIZ, 1 SAVCHR, 0 /CHARACTER SAVE POSITION LINENO, 0;0 /HOLDS MOST RECENT LINE NUM EOFLIN, 0;0 /LAST LINE NUMBER NAME, 0;0;0;0 /NAME BUFFER FNAME, FILENAME NONAME.BA /CURRENT FILE NAME DEVHAN, 7607 /ADDRESS OF DEVICE HANDLER, INITIALLY SYS: TO PROTECT /AGAINST BAD RESPONSE TO "NEW OR OLD--" DEVNUM, 1 /CURRENT DEVICE NUMBER SWPNUM, 0 /SWAPPER FLAG (FOR ^C) CSFLG, 0 TEMPDF, 0 0 JMP I TEMPDF PAGE /MAIN EDITOR ENTRY POINTS JMP I TABCVT /JMP TO ONCE ONLY CODE IN LINE BUFFER IF R COMMAND /GET A LINE OF INPUT FROM TTY /STORES ONE 7 BIT CHAR/WORD IN LINE BUFFER GETLIN, JMP I FILMSG /JMP IF CHAINED TO DCA TABCVT /SAVE TAB CONVERSION SWITCH STA /KLUDGE FOR TEXT PROMPTS TAD I [TYPE /GET ADDR OF PREV MESSAGE DCA FILMSG TAD I FILMSG DCA FILMSG /STORE INLINE IN ALTMODE CODE GETLUP, TAD I (HEIGHT /RESET SCREEN HEIGHT ON USER INPUT DCA I (LINCNT DCA CSFLG /ZERO OUT ^S FLAG WHENEVER WE GET INPUT TAD [LINE+2 /INIT LINE POINTER DCA PTR DCA I (LINE+6 /CLEAR ANY LISTNH OR RUNNH CHARS TAD SEQFLAG /SEE IF AUTO SEQ MODE SZA CLA JMS I (SEQFUD /GENERATE LINE NUMBER IF YES IGNORE, JMS I [GETCH DCA TEMP2 /SAVE CHAR KCC //ENABLE THE KEYBOARD BUFFER FOR VT278 TAD TEMP2 /GET THE CHARACTER BACK SZA /IGNORE NULLS TAD (-32 /IGNORE ^Z SZA TAD (32-12 /IGNORE LF, VT AND FF CLL TAD (-3 SNL CLA JMP IGNORE /JMP BACK IF ANY OF ABOVE TAD TEMP2 /CONVERT TABS TO SPACES IF FLAG SET TAD TABCVT SNA CLA TAD [40 SZA DCA TEMP2 /STORE A SPACE INSTEAD CLL CMA RTL /CHECK FOR CONTROL C TAD TEMP2 SNA JMP I (BYEBYE /ITS ^C EXIT TO OS8 TAD (-12 /CHECK FOR CARRIAGE RETURN SNA JMP CARRET /JUMP IF 015 - CARRET. TAD [15-25 /CHECK FOR ^U SZA TAD (25-33 /OR ESC SZA JMP NOTALT /JMP IF NONE OF ABOVE ALT, JMS I [TYPE MSGALT DCA SEQFLAG /CLEAR SEQUENCE MODE ON ALTMODE GETLN2, TAD TABCVT /IS IT A TEXT PROMPT? SNA CLA JMP GETLUP /NO IAC /YES, ECHO THE PROMPT JMS I [TYPE FILMSG, START+1 JMP GETLUP NOTALT, TAD (33-177 /CHECK FOR RUBOUT SZA TAD (177-10 /OR BACKSPACE SNA CLA JMP ARROW /JUMP IF RUBOUT OR BS TAD OLDFLAG /INPUT FROM FILE ? SZA CLA JMP .+3 /YES, DON'T ECHO TAD TEMP2 JMS I [TTYOUT /PRINT ON TTY TAD PTR /SEE IF LINE IS ALREADY FULL TAD (-LINEND SPA CLA /SKP IF PTR GE LIMIT JMP .+5 JMS I [CRLF /LINE IS TOO LONG JMS I [TYPE MSGTOO JMP GETLUP /IGNORE THE LINE TAD TEMP2 DCA I PTR /STORE THE CHAR ISZ PTR JMP IGNORE ARROW, TAD PTR /SEE IF AT LEFT MARGIN TAD (-LINE-2 SNA CLA JMP IGNORE /IGNORE IF YES STA /ELSE BACK UP THE POINTER TAD PTR DCA PTR TAD OLDFLAG /INPUT FROM FILE ? SNA CLA JMS I (PRTBSP /NO, GO PRINT BACKSPACE OR BACKARROW JMP IGNORE /BACK TO LISTEN LOOP CARRET, TAD OLDFLAG /INPUT FROM FILE ? SNA CLA JMS I [CRLF /NO, PRINT CR-LF TAD PTR TAD (-LINE-2 SNA CLA JMP GETLN2 /IGNORE EMPTY LINES DCA I PTR /STORE NULL TO DELIMIT END OF LINE TAD [LINE+2 /LEAVE SCAN POINTER AT START OF LINE DCA PAKPTR JMP I GETLIN TABCVT, RBASIC PAGE /GET A BCD LINE NUMBER FROM CONSOLE INPUT BUFFER /SKIP RETURN IF NUMBER GOTTEN GETNUM, 0 STA DCA SHCNT /CLEAR DIGIT FLAG DCA LINENO /CLEAR REGISTER GETDIG, DCA LINENO+1 TAD I PAKPTR TAD (-72 /RANGE CHECK CHAR CLL TAD [12 DCA TEMP /TENTATIVELY SAVE DIGIT SNL JMP EONUM /END OF NUMBER IF NOT DIGIT (OR EOL) ISZ PAKPTR /BUMP PTR UP TAD [7774 /SET SHIFT COUNTER DCA SHCNT SHFTLP, TAD LINENO+1 CLL RAL DCA LINENO+1 /SHIFT A PLACE TAD LINENO RAL DCA LINENO SZL /SKP IF NUMBER NOT TOO BIG JMP TOOHI /WRONG, WRONG. GIVE ERROR ISZ SHCNT JMP SHFTLP TAD TEMP /NOW ADD NEW ONE IN TAD LINENO+1 JMP GETDIG /REITERATE EONUM, ISZ SHCNT /SEE IF ANY DIGITS SEEN ISZ GETNUM /TAKE SKIP RETURN IF YES JMP I GETNUM SHCNT, 0 TOOHI, TAD OLDFLAG /SUPPRESS MESSAGE IF OLD MODE SZA CLA JMP I [MAINLUP JMS I [TYPE MSGNER /LINE NUMBER ERROR JMP I [MAINLUP /BREAK OUT TO MAIN INPUT LOOP /TYPE A MESSAGE TYPE, 0 DCA CRSWIT /SAVE CARRIAGE RETURN SWITCH TAD I TYPE /GET ADDR OF MESSAGE ISZ TYPE DCA PASS TLOOP, JMS I [CTRLO /CHECK FOR CTRL/O JMP TCRLF /YES, STOP PRINTING TAD I PASS /GET HIGH CHAR CLL RTR /SHIFT RIGHT RTR RTR JMS T6CH /TYPE A 6BIT CHAR TAD I PASS /GET LOWER CHAR ISZ PASS JMS T6CH /TYPE ANOTHER 6BIT CHAR JMP TLOOP T6CH, 0 AND [77 SNA JMP TCRLF /RETURN IF AT DELIMITER TAD [40 /EXPAND TO 7BIT AND [77 TAD [40 JMS I [TTYOUT /PRINT IT ON CONSOLE JMP I T6CH TCRLF, TAD CRSWIT /RETURN THE CARRIAGE ? SNA CLA JMS I [CRLF /YES JMP I TYPE /DONE CRSWIT, 0 /SKIP OVER A LINE IN MEMORY /RETURN WITH TEMP AND DF POINTING AT NEXT LINE (OR EOF) PASS, 0 ISZ TEMP SKP JMS FINCR TAD I TEMP /LINES TERMINATED BY 7 BIT NULL IN LOW 7 BITS AND [177 SZA CLA JMP PASS+1 ISZ TEMP JMP I PASS JMS FINCR JMP I PASS /INCREMENT CURRENT DATA FIELD FINCR, 0 RDF TAD [6211 DCA .+1 HLT JMP I FINCR /SET NEW WORKSPACE EOF MARKER /AC = NEW ADDR, DF = FIELD SETEOF, 0 DCA EOFADR /SAVE ADDR RDF /GET FLD TAD [6201 DCA EOFFLD /SAVE IT TAD [377 /STORE EOF DCA I EOFADR JMP I SETEOF GETEOF, 0 TAD EOFADR /RETRIEVE EOF INFO DCA TEMP /FIRST ADDR EOFFLD, CDF JMP I GETEOF /CHECK IF FILE EXPANSION WILL FIT CHKFIT, 0 CLL TAD EOFADR /AC = NUMBER OF WORDS TO EXPAND BY SZL CLA TAD [10 /PROPAGATE CARRY INTO CDF TAD EOFFLD RTR /SHIFT FIELD BITS TO AC8-11 RAR AND [17 TAD CORSIZ /COMPARE TO LIMIT SPA CLA /SKP IF GT MACHINE SIZE JMP I CHKFIT /OK, RETURN CDF /GIVE ERROR JMS I [TYPE MSGBIG /MEMORY OVERFLOW DCA OLDFLAG /KILL OLD STATUS JMP I [MAINLUP /RETURN TO COMMAND LOOP PAGE /MAIN EDITOR COMMAND PROCESSING LOOP CMDDONE,CDF JMS I [CRLF /TYPE READY MESSAGE JMS I [TYPE MSGRDY DCA SEQFLAG /CLEAR AUTO SEQ MODE MAINLUP,CDF JMS I [GETLIN /GET AN EDITED LINE. PROCLN, JMS I (GETNUM /TRY TO GET A LINE NUMBER SKP /SKP IF NO NUMBER SEEN JMP NOCOMD /NOT A COMMAND TAD OLDFLAG /IN OLD MODE ? SNA CLA JMP I (COMMAND/NO, MUST BE A COMMAND JMP MAINLUP /OTHERWISE IGNORE NOCOMD, JMS I (PACK7 /PACK INTO OS/8 FORMAT TAD PTR /OR A LINE WITH A LINE CIA /NUMBER ON IT. TAD [LINE DCA SIZE /SET UP SIZE OF LINE. TAD I [LINE+2 /IS LINE EMPTY ?? SNA CLA DCA SIZE /POSSIBLY ZERO. TAD LINENO /IS IT > LAST LINE ? CIA CLL TAD EOFLIN SZA CLA JMP .+4 /HI PART NOT =, FORGET LOW TAD LINENO+1 CIA CLL TAD EOFLIN+1 /COMPARE LOW PARTS SZL CLA JMP NOTLAST /NOT > LAST JMS I [GETEOF /GET EOF TAD TEMP /MAKE IT LOOK LIKE DCA PTR /A CALL TO FINDLN TAD LINENO /SAVE NEW LAST LINE DCA EOFLIN TAD LINENO+1 DCA EOFLIN+1 RDF TAD [6201 DCA TEMPDF+1 SKP NOTLAST,JMS I [FINDLN /GENERAL CASE - SEARCH INSERT, TAD TEMPDF+1 DCA PTRFLD /GET FIELD OF START OF OLD LINE TAD PTR CLL CIA TAD TEMP TAD SIZE /WHICH WAY ? SNA JMP MOVE /SAME SIZE, MOVE IN NEW LINE SPA JMP I (EXPAND /MAKE MORE ROOM FOR NEW LINE CIA TAD TEMP /SHRINK THE FILE DCA TOWARD /MOVE FILE DOWN TO HERE RDF TAD [6201 DCA TMPFLD /GET FIELD OF READ POINTER TAD TOWARD CLL CMA TAD TEMP SNL CLA TAD [7770 TAD TMPFLD DCA TWDFLD /GET FIELD OF WRITE POINTER JMS SHRINK /NOW SHRINK WORKSPACE MOVE, TAD SIZE SNA CLA JMP MAINLUP /IT WAS A DELETE CDF 00 TAD LINENO /PUT IN LINE NUMBER DCA I [LINE TAD LINENO+1 DCA I (LINE+1 MOVENTR,TAD [LINE DCA TEMP MOVLUP, CDF /MOVE IN NEW LINE TAD I TEMP ISZ TEMP PTRFLD, HLT DCA I PTR ISZ PTR /INCREMENT POINTERS JMP .+4 TAD PTRFLD /WHATCH OUT FOR FIELDS TAD [10 /(W.C. OR E.M. ?) DCA PTRFLD ISZ SIZE JMP MOVLUP JMP MAINLUP /ROUTINE TO SHRINK WORKSPACE SHRINK, 0 TMPFLD, HLT TAD I TEMP TWDFLD, HLT DCA I TOWARD /MOVE DOWN TAD I TOWARD TAD [-377 /END OF FILE ??? SNA CLA JMP LWREOF /YES, PUT NEW LINE IN AT END ISZ TEMP /INCREMENT POINTERS JMP .+4 TAD TMPFLD /AND FIELDS IF NECESSARY TAD [10 DCA TMPFLD ISZ TOWARD JMP TMPFLD TAD TWDFLD TAD [10 DCA TWDFLD JMP TMPFLD /KEEP SHRINKING LWREOF, TAD TOWARD /SET NEW EOF JMS I [SETEOF JMP I SHRINK /SCRATCH COMMAND SCRATCH,JMS CLEARWS JMP I [CMDDONE /CLEAR INCORE WORKSPACE CLEARWS,0 TAD [TXTAREA/SCRATCH FILE JMS I [SETEOF DCA EOFLIN /ZERO LAST LINE NUM DCA EOFLIN+1 JMP I CLEARWS PAGE EXPAND, CIA /EXTRA ROOM NEEDED DCA TOWARD TAD TOWARD /SEE IF WILL FIT JMS I (CHKFIT TAD I TEMP /SAVE THIS PLACE DCA TEMP2 TAD [177 /NOW MARK THIS PLACE DCA I TEMP JMS I [GETEOF /GET EOF RDF TAD [6201 DCA TMP2FLD /GET FIELD OF END OF FILE CLL TAD TEMP /MOVE FILE UP TAD TOWARD /TO DCA TOWARD /HERE SZL JMS I [FINCR /MIGHT BE ACROSS A FIELD RDF TAD [6201 DCA TWD2FLD /SAVE NEW EOF FIELD TAD TOWARD /SAVE NEW EOF JMS I [SETEOF TMP2FLD,HLT TAD I TEMP TWD2FLD,HLT DCA I TOWARD /MOVE UP ONE WORD TAD I TOWARD TAD (-177 /IS THE MARK ? SNA CLA JMP LASTWD /YES, PUT IN LAST WORD CLA CLL CMA TAD TOWARD /BACK UP POINTERS DCA TOWARD SZL JMP .+4 TAD TWD2FLD /AND FIELDS (MAYBE) TAD [7770 DCA TWD2FLD CLA CLL CMA TAD TEMP DCA TEMP SZL JMP TMP2FLD TAD TMP2FLD TAD [7770 DCA TMP2FLD JMP TMP2FLD LASTWD, TAD TEMP2 /PUT IN SAVED WORD DCA I TOWARD JMP I (MOVE /GO MOVE IN NEW LINE BYEBYE, KCC //ENABLE THE KEYBOARD BUFFER FOR VT278 CLA IAC AND SWPNUM /IS OS8 RES IN PLACE ? SZA CLA /YES IF EVEN NUMBER OF SWAPS BYE, JMS I [SWAP /PUT BACK OS8 GOODBY, NOP //NOP'D FOR VT278 MODIFICATION NOP //NOP'D FOR VT278 MODIFICATION JMP I [7605 /EXIT TO OS8 MSGBIG, TEXT /MEMORY OVERFLOW/ MSGALT, TEXT / DELETED/ MSGWHAT,TEXT /WHAT?/ MSGTOO, TEXT /LINE TOO LONG/ /ROUTINE TO PROCESS CHARACTERS FOR FILENAMES NAMGCH, 0 JMS I (GETNC /GET A NAME CHAR JMP I NAMGCH /RETURN TO CALL+1 IF EOL DCA NCHAR /SAVE CHAR TAD NCHAR /SEE IF . TAD (-56 SNA CLA JMP GOTDOT /JMP IF YES, HANDLE FILENAME EXTENSION TAD NCHAR /RANGE CHECK CHAR FOR ALPHANUMERIC CLL TAD (-60 /TOGGLE LINK ON EACH NEG CONSTANT SMA TAD (60-72 SNA JMP GOTCOL /JMP OUT IF : SEEN, DO DEVICE SMA TAD (72-101 SMA TAD (101-133 SNL CLA /SKP IF 0-9 OR A-Z JMP I (INERRX /BAD FILE IF OUT OF RANGE ISZ NAMGCH /SKP RETURN IF OK GOTCOL, TAD NCHAR /REGET CHAR AND [77 /RETURN 6 BITS JMP I NAMGCH GOTDOT, TAD (NAME+3 /MOVE UP TO EXTENSION FIELD DCA TEMP2 STA DCA SIZE /JUST ONE WORD JMP I (NAMLUP /JMP OUT TO NAME GETTER LOOP NCHAR, 0 PAGE /COMMAND LOOKUP AND DISPATCH COMMAND,DCA SEQFLAG /ALWAYS CLEAR SEQ FLAG ON COMMAND JMS GETNC /GET CHAR FOR COMMAND JMP I [WHAT CLL RTL RTL RTL DCA TEMPDF /SAVE IN TEMP JMS GETNC JMP I [WHAT AND [77 /MASK TO 6BIT TAD TEMPDF /MAKE PACKED 6BIT WORD DCA TEMPDF TAD COMTBL /COMMAND LIST POINTER DCA TEMP COMLUP, ISZ TEMP /GET 2 CHAR COMMAND TAD I TEMP ISZ TEMP SNA JMP WHAT /END OF LIST TAD TEMPDF /IS THIS IT? SZA CLA JMP COMLUP /NO, LOOK AGAIN TAD I TEMP /GET COMMAND ADDR DCA TEMP /AND GO TO IT JMP I TEMP WHAT, DCA SEQFLAG JMS I [TYPE /TYPE WHAT? MSGWHAT JMP I [MAINLUP COMTBL, . -1411 LIST -1714 OLD -2301 SAVE -2225 RUN -2223 RUNSP -2303 SCRATCH -0231 BYE -1605 NEW -2205 RENAME -0504 EDIT -1601 RENAME -0405 DELETE -2305 SEQUENCE -2705 WEAVE 0 /PRINT HEADING HEADING,0 TAD (LINE+5 /POINT AT LOCATION OF "NH" IN BUFFER DCA X17 TAD I X17 /ROUGH TEST CLL RTL TAD I X17 TAD (-116^4-110 SNA CLA JMP I HEADING JMS I [CRLF /LATER TAD [FNAME /SET UP FOR CONVERSION DCA TEMP /POINTER TO FILE NAME TAD XTITLE /WHERE IT GOES DCA PTR JMS CONV /OUTPUT FIRST TWO CHARS JMS CONV /NEXT TWO JMS CONV /THIRD TWO ISZ PTR /SKIP FOR EXT JMS CONV /OUTPUT EXTENSION JMS I [TYPE /TYPE HEADING XTITLE, TITLE JMS I [CRLF /FOLLOWED BY A CRLF JMP I HEADING CONV, 0 /CONVERT TO SIX BIT ASCII TAD I TEMP /GET NEXT WORD AND [77 /CHECK FOR 0 SNA /SUBSTITUTE BLANKS TAD [40 DCA I PTR TAD I TEMP /DO UPPER CHAR AND [7700 SNA CLL CML RAR TAD I PTR /COMBINE THEM DCA I PTR ISZ TEMP ISZ PTR JMP I CONV TITLE, 0;0;0;4040;0 /FOR THE PROG NAME 4040;4040 /SOME BLANKS VERLOC, VERSON&77^100+PATCH+60 /VERSION NUMBER + PATCH LEVEL 4040;4040 /MORE BLANKS DATE, 0;0;0 /DATE TEMPLATE DASH6, 5566 /"-6" FOR BUILDING DATE EODAT, 0 /END OF DATE TEMPLATE /GET A CHAR FOR A FILE NAME GETNC, 0 TAD I PAKPTR /GET 7BIT CHAR SZA ISZ PAKPTR /BUMP IF NOT AT EOL TAD [7605 /CONVERT LOWER CASE TO UPPER CASE CLL TAD [32 SZL TAD [-40 /MAKE UPPER TAD (141 /RESTORE CHAR SZA ISZ GETNC JMP I GETNC /RETURN WITH CHAR PAGE /GET CHAR FROM WORKSPACE FILE /INITIALIZED WITH PTR2FLD AND WSPTR ADDRESSING NEXT WORD /TEMP = STATE VARIABLE GETFIL, 0 TAD TEMP ISZ TEMP TAD .+3 DCA .+1 HLT JMP I .+1 /SEQUENCE OF OPERATIONS PTR2FLD /GET FIRST WORD FRSTDIG /FIRST DIGIT DIGIT /SECOND DIGIT DIGIT /THIRD DIGIT PTR2FLD /SECOND LINE NO WORD DIGIT /FOURTH DIGIT DIGIT /FIFTH DIGIT LASTDIG /LAST DIGIT CHAR1 /SPACE FOLLOWING LINE NUMBER PTR2FLD /GET WORD OF TEXT FRSTCH /FIRST 3 FOR 2 CHAR PTR2FLD /GET WORD OF TEXT SCNDCH /SECOND 3 FOR 2 CHAR THRDCH /THIRD 3 FOR 2 CHAR LINFTXT /LINE FEED CHARACTER PTR2FLD,HLT /CHECK FOR EOF TAD I WSPTR CDF TAD [-377 SNA JMP I GETFIL /YES, RETURN UNSKIPPED TAD [377 DCA TEMP2 /NO, SAVE WORD ISZ WSPTR /BUMP POINTER JMP GETFIL+1 TAD PTR2FLD TAD [10 DCA PTR2FLD JMP GETFIL+1 CHAR1, TAD [40 /GENERATE BLANK FOLLOWING LINE NUMBER JMP GFRET LASTDIG,CLA IAC /FORCE LAST DIGIT (EVEN IF 0) FRSTDIG,DCA SAV3RD /ZERO DIGIT COUNT DIGIT, TAD TEMP2 RTL RTL DCA TEMP2 /SHIFT LEFT ONE DIGIT TAD TEMP2 RAL AND [17 /GET DIGIT SZA JMP NZDIGIT /ITS NOT ZERO TAD SAV3RD /IS IT A LEADING ZERO ? SNA CLA JMP GETFIL+1/YES, DON'T PRINT IT NZDIGIT,ISZ SAV3RD /NON ZERO OR NON LEADING ZERO TAD (60 /SO PRINT IT JMP GFRET FRSTCH, TAD TEMP2 /GET CHAR AND [7400 /ISOLATE HIGH 4 BITS FOR LATER CLL RTR RTR JMP FSCOMN /DO COMMON STUFF (ANYTHING FOR A WORD OF CORE) SCNDCH, TAD TEMP2 /GET WORD AND [7400 /AS ABOVE, ISOLATE HI 4 BITS CLL RTL RTL RAL TAD SAV3RD /ADD TO OTHER BITS FSCOMN, DCA SAV3RD /SAVE AWAY TAD TEMP2 /GET CHAR BACK JMP DOCHAR /DO COMMON LOW CHAR STUFF THRDCH, TAD (11 /RESET STATE TABLE DCA TEMP TAD SAV3RD /LOOK AT THIRD CHAR SNA JMP GETFIL+1 /IGNORE IF ITS NULL DOCHAR, AND [177 /MASK TO 7 BITS SNA /SKP IF NOT END OF LINE JMP ZEROTXT /ELSE GENERATE CR/LF GFRET, ISZ GETFIL JMP I GETFIL ZEROTXT,TAD (16 /SETUP FOR LF NEXT DCA TEMP TAD [15 /RETURN CR JMP GFRET LINFTXT,DCA TEMP /CLEAR SEQUENCER AND RETURN LF TAD [12 JMP GFRET SAV3RD, 0 MSGNER, TEXT /LINE NUMBER > 999999/ MSGEDT, TEXT /EDIT COMMAND ERROR/ WSSAVE, 40;104;123;113;72;102;101;123;111;103;56;127;123;0 /"DSK:BASIC.WS" WSSIZE= .-WSSAVE PAGE /GET A FILE NAME AND FETCH ITS HANDLER GETFN, 0 DCA SAVFLAG /=1 FOR SAVE, 0 FOR OLD OR NEW TAD CHNFLAG /RETURNING FROM RUN ? SZA CLA JMP NOFUSR /YES, DON'T FETCH USR JMS I [SWAP /GET OS8 RESIDENT TAD SAVFLAG /IS IT OLD OR NEW ?? SNA CLA IAC /YES, DON'T SWAP 10000-11777 DCA I (JSW /DO IF SAVE, SO ALTER JSW CIF 10 /GET THE USR JMS I [7700 10 NOFUSR, TAD [LINE+2 DCA PAKPTR /RESET CHAR POINTER BSKIP, JMS I (GETNC /GET A CHAR JMP ASKNAM /ASK FOR FILE NAME TAD M40 /BLANK ? SZA CLA JMP BSKIP /NO, LOOP NOSKIP, JMS GETNAM /GET A NAME SNA CLA JMP USEDSK /NO DEVICE SPECIFIED, USE DSK: TAD NAME /PUT IN THE DEVICE NAME DCA DEV /AS SPECIFIED TAD NAME+1 DCA DEV+1 JMS GETNAM /FETCH THE FILE NAME SZA CLA JMP I (IOERR /BAD SYNTAX IN FILE DESCRIPTOR JMP GETHAN /GO FETCH THE HANDLER USEDSK, TAD (0423 /SET DEVICE NAME TO DSK: DCA DEV TAD (1300 DCA DEV+1 GETHAN, TAD [HANDLR+1 DCA DEV+2 /ALSO THE HANDLER ORIGIN CIF 10 JMS I [200 /CALL THE USR 1 /FETCH HANDLER BY NAME DEV, 0;0;0 JMP I (IOERR /BAD DEVICE TAD DEV+1 /SAVE THE DEVICE NUMBER DCA DEVNUM TAD DEV+2 /AND THE HANDLER ENTRY POINT DCA DEVHAN MOVEFN, TAD SAVFLAG /WAS IT A SAVE ? M40, SMA SZA CLA JMP I GETFN /YES, JUST RETURN TAD NAME /NEW OR OLD, ANY NAME GIVEN ? SNA JMP I GETFN /NO, PROBABLY JUST A DEVICE DCA FNAME /YES, SAVE IT TAD NAME+1 DCA FNAME+1 TAD NAME+2 DCA FNAME+2 TAD NAME+3 DCA FNAME+3 JMP I GETFN ASKNAM, TAD SAVFLAG /WAS THIS A SAVE ? SMA SZA CLA /SKP IF NO TAD FNAME /IT WAS A SAVE, ANY OLD NAME TO USE ? SNA JMP ASKNM /NO, GO ASK FOR ONE DCA NAME /YES, MOVE INTO NAME TAD FNAME+1 DCA NAME+1 TAD FNAME+2 DCA NAME+2 TAD FNAME+3 DCA NAME+3 JMP I GETFN ASKNM, CLA IAC /ASK FOR FILE NAME JMS I [TYPE ASKFN TAD (-11 /SET TAB CONVERSION FLAG JMS I [GETLIN JMP NOSKIP SAVFLAG,0 GETNAM, 0 /GET A FILE OR DEVICE NAME DCA NAME /ZERO THE NAME BUFFER DCA NAME+1 DCA NAME+2 TAD (201 /USE DEFAULT EXT .BA DCA NAME+3 TAD (NAME /SETUP POINTER DCA TEMP2 TAD [7774 /SET SIZE TO 4 WORDS MAX DCA SIZE NAMLUP, JMS I (NAMGCH JMP I GETNAM CLL RTL RTL RTL DCA I TEMP2 /SAVE IT JMS I (NAMGCH JMP I GETNAM TAD I TEMP2 /COMBINE THE 2 DCA I TEMP2 ISZ TEMP2 ISZ SIZE /ANY MORE ? JMP NAMLUP JMP I GETNAM /RENAME COMMAND RENAME, CLL CML RAR /SAVE USR AREA JMS GETFN /GET FILE NAME CIF 10 JMS I [200 /REMOVE USR 11 /AND RESTORE 10000-11777 JMP RENWFN /NEW COMMAND NEW, JMS I (CLEARWS /CLEAR THE WORKSPACE FIRST JMS GETFN /GET THE FILE NAME RENWFN, JMS I [SWAP /REMOVE OS8 JMP I [CMDDONE PAGE /WRITE THE CURRENT WORKSPACE PUTFIL, 0 TAD [TXTAREA DCA WSPTR /GET POINTER TO TEXT TAD [6201 /GET FIELD OF TEXT DCA I (PTR2FLD DCA TEMP /ZERO LINE SEQUENCER TAD [DSKBUF /GET ADDR OF DISK BUFFER DCA SWAPT1 /BUFFER POINTER TAD S7600 DCA SWAPT2 /DOUBLE WORD COUNTER TAD JMPINS /SET 3 WAY SWITCH DCA PUTJMP PFLOOP, JMS I [GETFIL /GET A CHAR FROM TEXT AREA JMP PFCTLZ /END OF FILE JMS PUTCH /OUTPUT IT JMP PFLOOP /DO NEXT CHAR PFCTLZ, TAD [32 /PUT CTRL-Z JMS PUTCH TAD (7201 /BUFFER DUMP COUNT DCA PFTEMP JMS PUTCH /FILL WITH ZEROES ISZ PFTEMP JMP .-2 JMP I PUTFIL /DONE PFTEMP, 0 PUTCH, 0 /PUT A CHAR ONTO THE OS8 FILE DCA SWAPT4 /SAVE THE CHAR PUTJMP, HLT /JUMP TO CORRECT PLACE JMP PH1 /FIRST CHAR JMP PH2 /SECOND CHAR PH3, TAD JMPINS /RESTORE SWITCH DCA PUTJMP TAD SWAPT4 /GET THE CHAR AND [17 /LOW FOUR BITS CLL RAR RTR /INTO THE HIGH PART OF WORD TWO RTR TAD I SWAPT1 /COMBINE WITH CHAR 2 DCA I SWAPT1 TAD SWAPT4 /GET THE HIGH FOUR BITS RTL RTL /INTO THE HIGH PART OF WORD ONE AND [7400 TAD I SWAPT3 /COMBINE WITH WORD ONE DCA I SWAPT3 ISZ SWAPT1 /BUMP POINTER ISZ SWAPT2 /BUMP DOUBLE WORD COUNT JMP I PUTCH /RETURN JMS I [SWAP /SWAP IN OS8 JMS I DEVHAN /WRITE THIS BUFFER 4200 DSKBUF WRBLOK, 0 JMP I (OUERR ISZ OUSIZE /ANY ROOM LEFT ? SKP JMP NOROOM /NO, ERROR ISZ WRBLOK /BUMP BLOCK NUMBER ISZ I (OULEN /BUMP ACTUAL SIZE JMS I [SWAP /SWAP BACK TAD [DSKBUF /SET UP BUFFER POINTER DCA SWAPT1 TAD S7600 DCA SWAPT2 /SET UP COUNT JMP I PUTCH PH2, TAD SWAPT1 /SAVE POINTER TO FIRST DCA SWAPT3 ISZ SWAPT1 /BUMP POINTER PH1, TAD SWAPT4 /GET CHAR DCA I SWAPT1 /INTO BUFFER ISZ PUTJMP /BUMP SWITCH JMP I PUTCH JMPINS, JMP PUTJMP+1 OUSIZE, 0 NOROOM, JMS I [TYPE /TYPE FILE TOO BIG MESSAGE MSGRM JMP I (IORETN /TAKE ERROR ABORT MSGRM, TEXT /FILE TOO BIG/ /SWAP OS/8 RESIDENT SWAP, 0 ISZ SWPNUM /TOGGLE RESIDENCY BIT S7600, 7600 TAD (OS8RES /SET POINTER TO SAVE AREA DCA SWAPT1 PATCH5, AC7775 /AC7776 IF ONLY 8K CORE DCA SWAPT2 TAD S6201 /INIT FIELD DCA SWPFLD SWPLUP, TAD S7600 /SET POINTER TO PAGE 7600 IN NEXT FIELD DCA SWAPT3 SWPLP, TAD I SWAPT1 /SAVE WORD IN SAVE AREA DCA SWAPT4 SWPFLD, HLT /GET OVER INTO OS/8 FIELD TAD I SWAPT3 /SAVE A WORD FROM N7600 DCA SWAPT5 TAD SWAPT4 /PUT SAVE AREA WORD IN PLACE DCA I SWAPT3 S6201, CDF TAD SWAPT5 DCA I SWAPT1 /NOW PUT IN SAVE AREA ISZ SWAPT1 ISZ SWAPT3 JMP SWPLP /LOOP FOR THE PAGE TAD [10 /BUMP CDF TAD SWPFLD DCA SWPFLD ISZ SWAPT2 /BUMP PASS COUNTER JMP SWPLUP /REITERATE JMP I SWAP /--RETURN-- ASKFN, TEXT /FILE NAME--/ PAGE /RUN AND RSPACE COMMANDS RUNSP, TAD [40 /SET /S SWITCH FOR BRTS TO EXHIBIT FREE SPACE RUN, DCA I (OS8RES+200+CDOPT4-7600 /IN CD SWITCHES M-X WORD STA JMS I [HEADING/GIVE A HEADING TAD [LINE+1 /SET UP FAKE LINE DCA X15 TAD [WSSAVE-1 DCA X16 TAD I X16 /TO SAVE BASIC.WS SNA JMP .+3 DCA I X15 JMP .-4 DCA I X15 TAD [LINE+2 /RESET SCAN POINTER DCA PAKPTR ISZ RUNFLAG /SET RUN FLAG JMP GFN /SAVE COMMAND SAVE, DCA RUNFLAG /CLEAR THE RUN FLAG TAD DEVNUM /SAVE CURRENT DEVICE NUM DCA OLDDEV /INCASE WE CHANGE GFN, CLA IAC /SET SAVFLAG JMS I [GETFN /GET THE DEV:NAME.EX TAD XNAME /SET UP ENTER DCA SAVBLK /POINTER TO FILE NAME TAD DEVNUM /GET DEVICE NUMBER CIF 10 JMS I [200 /ENTER FILE 3 SAVBLK, 0 /STARTING BLOCK GOES HERE 0 /SIZE GOES HERE JMP I (IOERR TAD SAVBLK /PUT BLOCK NUMBER DCA I (WRBLOK /INTO WRITE TAD SAVBLK+1/PUT SIZE DCA I (OUSIZE /SOMEWHERE TOO DCA OULEN /ZERO BLOCK COUNT CIF 10 JMS I [200 /DUMP USR 11 JMS I [SWAP /AND NOW OS8 JMS I (PUTFIL /DO THE SAVE JMS I [SWAP /GET OS8 TAD RUNFLAG /SET NO SWAP BIT IF RUN DCA I (JSW CIF 10 /GET THE USR JMS I [7700 10 TAD DEVNUM /GET DEVICE NUMBER CIF 10 JMS I [200 /CLOSE THE FILE 4 XNAME, NAME OULEN, 0 /SIZE JMP I (IOERR TAD RUNFLAG /WAS IT A RUN ? SZA CLA JMP I (DORUN /YES TAD OLDDEV /IS OLD DEVICE CIA /THE SAME AS TAD DEVNUM /THE NEW ONE ?? SNA CLA JMP HNDLOK /YES, THE HANDLER IS OK TAD OLDDEV /RESTORE DEVICE NUMBER DCA DEVNUM TAD [HANDLR+1 DCA DEVN /SET UP HANDLER LOAD ADDR TAD DEVNUM CIF 10 JMS I [200 1 DEVN, 0 JMP I (IOERR TAD DEVN /RESET THE HANDLER ADDRESS DCA DEVHAN HNDLOK, CIF 10 /GET RID OF THE USR JMS I [200 11 JMS I [SWAP /REMOVE OS8 AGAIN JMP I [CMDDONE OLDDEV, 0 /FIND A LINE IN THE WORKSPACE /RETURN WITH DF AND TEMP ADDRESSING NEXT LINE OR EOF /TEMPDF AND PTR ADDRESS BEGINNING OF LINE IF MATCHING LINE NUMBER FINDLN, 0 TAD [TXTAREA DCA TEMP /INIT START OF FIRST LINE SEARCH, TAD TEMP /COMPARE THE NUMBER OF DCA PTR /THIS LINE WITH THE SPOT RDF /SAVE DF OF START OF THIS LINE TAD [6201 DCA TEMPDF+1 TAD I TEMP /IN THE TEXT AREA. TAD [-377 SNA JMP I FINDLN /NEW LINE GOES AT EOF TAD [377 CLL CIA TAD LINENO SNA JMP SAME1ST SNL CLA JMP I FINDLN /INSERT NEW LINE ISZ TEMP SKP JMS I [FINCR CONTIN, JMS I [PASS /IF ITS GREATER KEEP SEARCHING. JMP SEARCH SAME1ST,ISZ TEMP /FIRST HALF OF LINE NUM SAME SKP JMS I [FINCR TAD I TEMP CLL CIA /CHECK SECOND HALF TAD LINENO+1 SNA JMP SAME2ND /REPLACE OLD WITH NEW SZL CLA JMP CONTIN TAD PTR /RESTORE POINTER TO START OF LINE DCA TEMP JMS TEMPDF /RESTORE DF ALSO JMP I FINDLN /INSERT NEW LINE SAME2ND,JMS I [PASS JMP I FINDLN PAGE /LIST COMMAND LIST, JMS I (GET2LN /GET LINE NUMBERS JMP DOALL /JMP IF NONE SPECD JMP DOONE /JMP IF ONLY ONE TAD TEMP /GENERAL CASE, GET LINE GT END DCA SAVEND JMP LSTCNT /CONTINUE ON DOALL, TAD EOFADR /LIST TO END OF FILE DCA SAVEND TAD I (EOFFLD DCA I (TMPFLD JMP LSTCNT DOONE, TAD WSPTR /JUST ONE LINE IF SINGLE DCA SAVEND STA /DISABLE HEADING IF ONE LINE LSTCNT, DCA I [HEADING TAD TOWARD /GET START OF REGION TO LIST DCA WSPTR TAD I (TWDFLD /GET FIELD TOO DCA I (PTR2FLD ISZ I [HEADING JMS I [HEADING /PRINT THE HEADING DCA TEMP /CLEAR WORKSPACE GETTER STATE TAD COFLAG SNA CLA JMP I [CMDDONE LSTLUP, TAD SAVEND /SEE IF NEXT WORD PAST LIMIT CLL CIA TAD WSPTR CLA CML RAL TAD I (TMPFLD CIA TAD I (PTR2FLD SNL CLA /SKP OUT IF PAST LIMIT XONWT, JMS I [CTRLO /STOP IF ^O HIT JMP I [CMDDONE TAD CSFLG /SEE IF ^S HIT SZA CLA /SKP IF NO JMP XONWT /IDLE IF YES TO HOLD SCREEN JMS I (GETFIL JMP I [CMDDONE JMS I [TTYOUT JMP LSTLUP SAVEND, 0 /SEARCH FOR SPACE OR TAB SRCHSP, 0 TAD I PAKPTR /LOOK AT CHAR SZA ISZ PAKPTR /BUMP ONLY IF NOT EOL SZA TAD [-40 /IS IT SPACE SZA TAD (40-11 /OR TAB SZA CLA JMP SRCHSP+1 /LOOK AGAIN IF NO JMP I SRCHSP /RETURN POINTING AT NEXT CHAR OR EOL /SKIP PAST LEADING SPACES SKIPSP, 0 TAD I PAKPTR SNA JMP I SKIPSP /RETURN IF AT EOL TAD [-40 SZA TAD (40-11 SZA CLA JMP I SKIPSP ISZ PAKPTR JMP SKIPSP+1 EDTBUF, ZBLOCK 60 EBEND, 0 CRLF, 0 TAD [15 /SEND CR JMS I [TTYOUT TAD [12 /SEND LF JMS I [TTYOUT JMP I CRLF PAGE /EDIT NNNNNN /OLDSTRING/NEWSTRING(CR) COMMAND EDIT, JMS I (SRCHSP /LOOK FOR SPACE JMS I (GETNUM /TRY TO GET LINE NUMBER JMP EDTERR /ERROR IF NO NUMBER JMS I [FINDLN /LOOK FOR THE LINE CDF TAD TEMPDF+1 /INIT CHAR GETTER FOR START OF LINE DCA I (PTR2FLD TAD PTR DCA WSPTR TAD PTR /SEE IF NULL LINE (NOT FOUND) CIA TAD TEMP SNA CLA JMP EDTERR /ERROR IF LINE NOT LOCATED JMS I (SKIPSP /IGNORE TRAILING BLANKS TAD I PAKPTR /ERROR IF NO EDIT STRING SNA JMP EDTERR CIA DCA DELIM /STORE AS DELIMITER DCA EDTSIZ /CLEAR SIZE OF STRING TAD (EDTBUF /INIT PTR TO EDIT BUFFER DCA EDTPTR GETST1, ISZ PAKPTR /GET NEXT PATTERN CHAR TAD I PAKPTR SNA JMP EDTERR /ERROR IF NO END TO PATTERN TAD DELIM /SEE IF AT DELIMITER SNA CLA JMP GETST2 /END OF PATTERN, GET REPLACEMENT ISZ EDTSIZ /TALLY SIZE OF PATTERN TAD I PAKPTR JMS EDTSAV /SAVE CHAR AWAY JMP GETST1 /GET NEXT ONE GETST2, ISZ PAKPTR /NOW STORE THE REPLACEMENT PATTERN TAD I PAKPTR SNA JMP GOTST2 /END OF REPLACEMENT JMS EDTSAV /SAVE NEXT CHAR JMP GETST2 GOTST2, JMS EDTSAV /MARK END OF REPLACEMENT DCA TEMP /CLEAR FILE GETTER STATE TAD [LINE+2 /SET POINTER TO RESULT LINE DCA PAKPTR TAD EDTSIZ /MOVE AN INITIAL STRING IN CMA DCA EDTCNT JMP GETLGO GETLN, JMS I (EDTGCH /GET A CHAR FROM FILE JMP EDTERR /ERROR IF UNEXPECTED EOL JMS I (EDTPUT /PUT IN RESULT STRING GETLGO, ISZ EDTCNT JMP GETLN TAD [LINE+2 /INIT POINTER TO SUBSTRING START DCA BEGPTR COMPLP, TAD BEGPTR DCA PTR TAD (EDTBUF DCA EDTPTR TAD EDTSIZ /COMPARE TO ORIGIONAL STRING CMA DCA EDTCNT JMP COMPGO COMPAR, TAD I EDTPTR /GET A PATTERN CHAR CIA TAD I PTR SZA CLA JMP MISMAT /GET ANOTHER FILE CHAR IF MISMATCH ISZ EDTPTR ISZ PTR COMPGO, ISZ EDTCNT JMP COMPAR /TRY NEXT ONE TAD BEGPTR /REPLACE WITH NEW STRING NOW DCA PAKPTR MOVREP, TAD I EDTPTR SNA JMP EOREP /END OF REPLACEMENT JMS I (EDTPUT /PUT IN LINE ISZ EDTPTR JMP MOVREP EOREP, JMS I (EDTGCH /GET REMAINDER OF LINE JMP EDTFIN JMS I (EDTPUT JMP EOREP EDTFIN, DCA I PAKPTR /MARK EOL TAD [LINE+2 /EXHIBIT THE NEW LINE FOR USER DCA PAKPTR VIEWLP, TAD I PAKPTR SNA JMP VIEWOK JMS I [TTYOUT ISZ PAKPTR JMP VIEWLP VIEWOK, JMS I [CRLF /RETURN CARRAIGE TAD [LINE+2 DCA PAKPTR JMP I (PROCLN /JMP TO PROCESS LINE AS IF TYPED IN MISMAT, JMS I (EDTGCH /GET ANOTHER CHAR JMP EDTERR /ERROR IF UNEXPEDTED EOL JMS I (EDTPUT /PUT IN LINE ISZ BEGPTR /MOVE UP START OF SEARCH JMP COMPLP /GO AGAIN EDTERR, JMS I [TYPE MSGEDT /EDIT COMMAND ERROR JMP I [CMDDONE /GO BACK TO EDITOR LOOP /SAVE EDIT STRING AND SEE IF FITS EDTSAV, 0 DCA I EDTPTR ISZ EDTPTR TAD EDTPTR TAD (-EBEND /AT END? SNA CLA JMP EDTERR /GIVE ERROR JMP I EDTSAV /ALL RIGHT EDTPTR, 0 BEGPTR, 0 EDTSIZ, 0 EDTCNT, 0 DELIM, 0 PAGE HEIGHT, -30 /SET TO SCREEN HEIGHT BY SET COMMAND SDELAY, -200 /SET TO HOLD SCREEN DELAY BY SET COMMAND IFNZRO HEIGHT-3000 <__FIX SET COMMAND__> LINCNT, 0 /THIS WORD IS ZERO TO FLAG THE NEW BASIC EDITOR TO "SET" CURPOS, 0 STIMER, 0 SCOPFG, 0 /SET NONZERO IF TERMINAL IS A SCOPE ZERO, 0 /PRINT A CHAR ON TERMINAL /PAUSE IF LF WAS PRINTED AND DELAY REQUESTED /SCREENSIZE ALSO SET BY "SET TTY" COMMAND TTYOUT, 0 AND [177 DCA TCHAR TAD TCHAR CLL TAD [7770 /SEE IF CONTROL CODE SMA TAD (10-16 SMA TAD (16-40 SZL CLA JMP NOTCTL /JMP IF NO TAD (136 /ECHO ^ JMS I (TTYO TAD TCHAR TAD (-7 /SEE IF BELL SZA CLA JMP .+3 TAD TCHAR /YES, SOUND IT JMS I (TTYO TAD (100 /MAKE CHAR VISIBLE NOTCTL, TAD TCHAR JMS I (TTYO /ECHO IT TAD TCHAR TAD (-15 /TEST IF LF WILL FOLLOW SZA CLA JMP I TTYOUT /RETURN IF NO ISZ LINCNT /TEST LINE COUNTER FOR SCREENFULL JMP I TTYOUT TAD HEIGHT DCA LINCNT /NOW RESET SCREEN COUNTER TAD SDELAY SNA /SKIP IF DELAY REQUESTED JMP I TTYOUT /OTHERWISE JUST RETURN AT ONCE DCA STIMER /SET HOLD SCREEN TIMER DLOOP, KSF /FIRST TEST IF KEY STRUCK JMP I TTYOUT /JMP IF NO KRB /ELSE READ CHAR AND [177 /MASK TO 7BIT TAD (-3 SNA JMP I (BYEBYE /JMP IF ^C SEEN TAD (3-17 SZA TAD (17-21 /TEST IF ^Q OR ^S HIT CLL RTR SNA CLA JMP I TTYOUT /RETURN WITH CHAR STILL IN BUFFER IF ANY OF ABOVE SEEN /PRINT A BACKSPACE /IF TERMINAL IS A SCOPE, ECHO BS,SP,BS TO RUBOUT AND REPOSITION /CURSOR. OTHERWWISE ECHO BACKARROW PRTBSP, 0 TAD SCOPFG /TEST SCOPE BIT SNA CLA JMP BKARRW /NOT - ECHO BACKARROW TAD I PTR /SEE IF CHAR TO BE ZAPPED IS A TAB CLL TAD (-11 SNA JMP ECHOLN /SPECIAL TREATMENT IF YES SMA TAD (11-16 SMA TAD (16-40 /TEST IF CONTROL CODE BEING DELETED SNL CLA /SKP IF NO JMS BKSP /ELSE ECHO EXTRA BKSP JMS BKSP JMP I PRTBSP /DONE BKARRW, TAD ("_ JMS I [TTYOUT JMP I PRTBSP TCHAR, BKSP, 0 TAD [10 /ECHO BS JMS I (TTYO TAD [40 JMS I (TTYO TAD [10 /BS JMS I (TTYO JMP I BKSP ECHOLN, TAD [15 /RESET CURSOR JMS I [TTYOUT TAD [LINE+2 /POINT AT BEGINNING OF LINE DCA SWAPT5 ECHOLP, TAD PTR /FIRST SEE IF AT CHAR TO DELETE CIA TAD SWAPT5 SNA CLA JMP I PRTBSP /JMP OUT IF YES TAD I SWAPT5 /ELSE ECHO IT JMS I [TTYOUT ISZ SWAPT5 /BUMP PTR JMP ECHOLP /DO NEXT MSGRDY, TEXT /READY/ PAGE /RANDOM NON FITTING ROUTINES FOR EDIT COMMAND /GET CHAR FROM WORKSPACE FOR EDIT STATEMENT /RETURN TO CALL+1 IF EOL /RETURN TO CALL+2 IF CHAR IN AC EDTGCH, 0 JMS I (GETFIL /GET A CHAR HLT /UNREACHABLE TAD (-15 /SEE IF CR YET SNA JMP I EDTGCH /TAKE EOL RETURN IF YES TAD [15 /RESTORE CHAR ISZ EDTGCH JMP I EDTGCH /SKIP RETURN /PUT A CHAR IN LINE FOR EDIT COMMAND EDTPUT, 0 DCA I PAKPTR /STORE THE CHAR ISZ PAKPTR TAD PAKPTR /SEE IF AT LIMIT TAD (-LINEND SZA CLA JMP I EDTPUT /OK, FITS JMP I (EDTERR /GIVE ERROR MESSAGE, LINE TOO LONG /CONTINUATION OF RUN COMMAND DORUN, TAD (INFO+11/SET UP SOME OF INFO BLOCK DCA X10 CDF 10 TAD DEVHAN /SAVE DEVICE HANDLER ADDRESS (DSK:) DCA I X10 CLL CML RTL /SAVE DEVICE NUMBER DCA I X10 CDF TAD I (SAVBLK /SAVE STARTING BLOCK CDF 10 DCA I X10 TAD FNAME /SAVE FILE NAME DCA I X10 TAD FNAME+1 DCA I X10 TAD FNAME+2 DCA I X10 TAD FNAME+3 DCA I X10 TAD I (INFO+1 /PICK UP START OF BCOMP FIELD 1 STUFF DCA BCBLOK /STORE IN LINE CDF /RESET DF JMS I (7607 /CALL SYS: BCSIZ1+10 /READ THIS MUCH TO FIELD 1 BCLOC1 /STARTING HERE BCBLOK, 0 /FROM HERE JMP WHUPS /ERROR ON SYS! CIF CDF 10 JMP I (DORUN1 /JMP INTO CONTINUATION OF RUN COMMAND WHUPS, JMS I [TYPE /TYPE ERROR MESSAGE MSGSY JMP I (GOODBY /RETURN TO OS/8 /RECOVERY FROM GENERAL FILE I/O ERRORS IORETN, DCA OLDFLAG /KILL OLD STATUS JMS I [SWAP /GET OS/8 OUT TAD DEVNUM /FORGET TENTATIVE FILE ON CURRENT DEVICE TAD (OS8RES+200+DCWTBL-7600-1 /(SWAPPED OUT) DCA TTYO TAD I TTYO AND [7770 DCA I TTYO JMP I [MAINLUP /RETURN TO COMMAND LOOP TTYO, 0 TLS TSF JMP .-1 CLA JMP I TTYO MSGSY, TEXT /SYSTEM ERROR/ /PACK COMMAND LINE IN OS/8 FORMAT PACK7, 0 TAD [LINE+2 /SETUP PACKING POINTERS DCA PTR TAD PTR DCA PTR3 TAD I PAKPTR /DONT STORE LEADING BLANK IN FILE TO SAVE SPACE TAD [-40 SNA CLA ISZ PAKPTR PACKLP, JMS G7BITS /GET CHAR DCA I PTR /STORE IN BUFFER ISZ PTR JMS G7BITS /GET ANOTHER DCA I PTR ISZ PTR /STORE ALSO JMS G7BITS /GET THIRD OF GROUP RTL RTL DCA TMPWD /SAVE FOR LATER TAD TMPWD AND [7400 /ISOLATE 4 BITS TAD I PTR3 /PUT IN HI 4 BITS DCA I PTR3 ISZ PTR3 TAD TMPWD /REGET PREV CHAR RTL RTL AND [7400 /4 BITS TAD I PTR3 DCA I PTR3 /STORE THEM ISZ PTR3 JMP PACKLP /ITERATE G7BITS, 0 TAD I PAKPTR /GET CHAR ISZ PAKPTR SZA /NULL IS END OF LINE MARKER JMP I G7BITS /RETURN WITH IT OTHERWISE PAKEOL, DCA I PTR /MARK THE END OF LINE WITH A NULL IN THE LOW 7 BITS ISZ PTR /TALLY THE NULL JMP I PACK7 /--RETURN-- TMPWD, 0 PTR3, 0 PAGE /GET A CHARACTER FROM THE TTY GETCH, 0 TAD OLDFLAG /INPUT FROM A FILE ? SZA CLA JMP FILEIN /YES KSF JMP .-1 KRB AND [177 JMP I GETCH FILEIN, ISZ COUNT /ANYTHING IN BUFFER ? JMP NOREAD /YES, NO READ TAD O7200 /SET BUFFER COUNT DCA COUNT TAD [DSKBUF /SET BUFFER POINTER DCA RDPTR TAD RDJMP /RESET JUMP DCA NOREAD JMS I [SWAP /GET OS8 TAD RDSIZE /ANY ROOM LEFT ? SNA JMP INERR /BAD END OF FILE, TREAT AS I/O ERROR IAC DCA RDSIZE JMS I DEVHAN /READ NEXT BLOCK 200 DSKBUF RDBLOK, 0 JMP CHKSOF /CHECK FOR SOFT ERROR SOFTOK, ISZ RDBLOK /BUMP BLOCK NUMBER JMS I [SWAP /AWAY WITH OS8 NOREAD, HLT /3W UNPACK JUMP JMP INCHR1 JMP INCHR2 INCHR3, TAD RDJMP /RESET SWITCH DCA NOREAD TAD I RDPTR /GET LOW 4 BITS ISZ RDPTR /BUMP POINTER AND [7400 /MASK IT CLL RTR /SHIFT RIGHT 4 RTR DCA TEMP /SAVE TAD I RDTMP /GET HIGH 4 BITS AND [7400 TAD TEMP /COMBINE THEM CLL RTR /SHIFT RIGHT 4 RTR JMP AND177 /GO FINISH INCHR2, TAD RDPTR /SAVE ADDR OF FIRST WORD DCA RDTMP ISZ RDPTR /BUMP POINTER INCHR1, TAD I RDPTR /GET NEXT CHAR ISZ NOREAD /BUMP SWITCH AND177, AND [177 /MASK 7 BITS TAD (-32 /CHECK FOR ^Z SNA JMP ENDOLD /EOF TAD [32 /RESTORE CHAR JMP I GETCH ENDOLD, DCA OLDFLAG /KILL OLD FLAG TAD CHNFLAG /WAS IT A RETURN FROM RUN ? SNA CLA JMP I [CMDDONE/NO, JUST AN OLD COMMAND DCA CHNFLAG /KILL FLAG TAD (INFO-7600+OS8RES+214 DCA X10 /PICK UP NAME FROM INFO BLOCK TAD I X10 /(WHICH IS SWAPPED OUT) DCA FNAME TAD I X10 DCA FNAME+1 TAD I X10 DCA FNAME+2 TAD I X10 DCA FNAME+3 JMP I [CMDDONE/DONE WITH RETURN CHKSOF, SMA CLA /SKP IF HARD ERROR JMP SOFTOK INERR, OUERR, O7200, CLA /AC NONZERO IF OUTPUT ERROR JMS I [TYPE /REPORT THE I/O ERROR MSGIO JMP I (IORETN /OLD AND WEAVE COMMANDS OLD, JMS I (CLEARWS /CLEAR HIS WORKSPACE NOW! SKP WEAVE, CLA STL RAR /PRESERVE HIS WORKSPACE, INCLUDING USR AREA JMS I [GETFN /GET FILE NAME CLL CMA RAL /SET RETRY COUNT DCA TEMP OLDTRY, TAD [FNAME /POINTER TO FILE NAME DCA SB /INTO LOOKUP CALL TAD DEVNUM /GET DEVICE NUMBER CIF 10 JMS I [200 /LOOKUP FILE 2 SB, 0 /START GOES HERE RDSIZE, 0 /SIZE GOES HERE JMP OLDBAD /BAD FILE CIF 10 /REMOVE USR JMS I [200 11 TAD SB /MOVE BLOCK SNA ISZ RDSIZE /SET COUNT TO 4095 IF NOT D.A. DCA RDBLOK CLA IAC /SET SWITCH DCA OLDFLAG /INPUT COMING FROM FILE CLA CMA /SET COUNT TO INITIALIZE READ DCA COUNT JMS I [SWAP /MOVE OS8 JMP I [MAINLUP/DO OLD RDJMP, JMP NOREAD+1 COUNT, 0 OLDBAD, DCA FNAME+3 /TRY WITHOUT EXT ISZ TEMP /OR HAVE WE ALREADY ? JMP OLDTRY /NO, NOT YET JMS I [TYPE /REPORT FILE NOT FOUND MSGNF JMP ERRDIS INERRX, IOERR, JMS I [TYPE /REPORT CATCHALL "BAD FILE" MESSAGE BADFIL ERRDIS, CIF 10 JMS I [200 /DISMISS USR 11 JMP I (IORETN /TAKE ERROR RETURN PAGE /DELETE BEGIN-END COMMAND DELETE, JMS GET2LN /GET A PAIR OF LINE NUMBERS JMP I [WHAT /ERROR IF NONE NOP /HANDLE SINGLE DELETE NORMALLY TAD TOWARD /NOW SEE IF SRC GE TARGET CLL CIA TAD TEMP CLA CML RAL TAD I (TWDFLD CIA TAD I (TMPFLD SNL CLA JMP I [WHAT /ERROR IF END LT BEGIN JMS I (SHRINK /DELETE THE LINES JMP I [CMDDONE /DONE, PRINT "READY" /GET 2 LINE NUMBERS OF THE FORM NNNN-NNNN GET2LN, 0 TAD [TXTAREA /ASSUME BEGINNING OF FILE DCA TOWARD TAD [6201 DCA I (TWDFLD JMS I (SRCHSP /SKP TO DELIMITER TAD I PAKPTR /SEE IF "DELETE -NNNN" CONSTRUCTION TAD (-55 SNA CLA JMP FRMSOF /YES, DO FROM START OF FILE JMS I (GETNUM /TRY TO GET LINE NUMBER JMP I GET2LN /GIVE ERROR JMS I [FINDLN /LOOK UP LINE RDF /RETURN DF = START OF NEXT LINE CDF TAD [6201 /SAVE IN CASE SINGLE DELETE DCA I (TMPFLD TAD TEMP /SAVE ADDR TOO DCA WSPTR /IN A SAVE PLACE TAD PTR /NOW SET POINTER TO START OF DELETION AREA DCA TOWARD /TARGET PTR FOR MOVE TAD TEMPDF+1 DCA I (TWDFLD TAD I PAKPTR /SEE IF ANY MORE SNA CLA JMP ONEDEL /DELETE ONE LINE (WHAT A WASTE) FRMSOF, ISZ PAKPTR /SKIP PAST DELIMITER JMS I (GETNUM /GET LINE NUMBER JMP TOEOF /DELETE TO END OF FILE IF "DEL NNN-" JMS I [FINDLN /LOOKUP LINE RDF CDF TAD [6201 /GET SOURCE TO START SHRINK WITH DCA I (TMPFLD ISZ GET2LN ISZ GET2LN JMP I GET2LN /RETURN TOEOF, TAD I (EOFFLD /USE EOF DCA I (TMPFLD TAD EOFADR JMP DELGO ONEDEL, TAD WSPTR /USE BEGIN OF NEXT LINE IF ONE ONLY SKP DELGO, ISZ GET2LN ISZ GET2LN DCA TEMP /SET SOURCE PTR JMP I GET2LN /SEQUENCE COMMAND SEQUEN, DCA I (NUM1 /ASSUME START WITH 100 TAD (400 DCA I (NUM1+1 JMS I (SRCHSP /SKIP TO DELIMITER JMS I (GETNUM /GET START NUMBER JMP DEFLT /USE DEFAULT IF NONE TAD LINENO /OK, SAVE START POINT DCA I (NUM1 TAD LINENO+1 DCA I (NUM1+1 DEFLT, JMS I (SAVNXT /SAVE LINE NUMBER FOLLOWING START OF SEQ DCA I (NUM2 /ASSUME STEP OF 10 TAD (20 DCA I (NUM2+1 TAD I PAKPTR /SEE IF ANY MORE TO COMMAND SZA CLA ISZ PAKPTR /DISCARD DELIMITER IF YES JMS I (GETNUM JMP SEQRDY /READY IF NO STEP SPECD TAD LINENO /COPY STEP DCA I (NUM2 TAD LINENO+1 DCA I (NUM2+1 SEQRDY, ISZ SEQFLAG /SET FLAG NOW! JMP I [MAINLUP /GO TO LOOP /SKIP IF ^O NOT TYPED AND CLEAR 'COFLG' /RETURN TO CALL+1 IF ^O WAS TYPED AND SET 'COFLG' /SET OR CLEAR 'CLFLG' IF ^S OR ^Q TYPED OTHERWISE CTRLO, 0 KSF JMP CTRLOX /TAKE SKIP RETURN IF NO CHAR HIT KRS DCA SAVCHR //SAVE THE CHARACTER KCC //ENABLE THE KEYBOARD BUFFER FOR VT278 TAD SAVCHR //GET THE CHARACTER BACK AND [177 TAD (-3 /TEST IF ^C ABORT SNA JMP I (BYEBYE /JMP IF YES TAD (3-17 SNA JMP GOTCO /JMP IF ^O HIT TAD (17-21 CLL RTR SZA /SKP IF ^S OR ^Q HIT JMP CTRLOX /ELSE EXIT RAL /LINK ON IF ^S DCA CSFLG /SAVE FLAG AS APPROPRIATE CTRLOX, ISZ CTRLO /SKP RETURN IF ^O NOT HIT CLA IAC GOTCO, DCA COFLAG /ZERO SAYS NO ECHO JMP I CTRLO PAGE /ROUTINE TO GENERATE AUTO SEQUENCED LINE NUMBERS SEQFUD, 0 TAD SAVNO+1 /TEST IF INTERLEAVING OF LINES CLL CIA TAD NUM1+1 CLA CML RAL TAD SAVNO CIA TAD NUM1 SNL CLA /SKP IF YES JMP .+3 TAD (7 /WARN HIM BY SOUNDING BELL JMS I (TTYO DCA CARRY /CLEAR LZ SUPPRESSION FLAG TAD NUM1 /PRINT FIRST DIGITS JMS PRTBCD TAD NUM1+1 /PRINT SECOND DIGITS JMS PRTBCD TAD [40 /PRINT A SPACE JMS I [TTYOUT TAD [40 DCA I PTR /STORE IN BUFFER TOO ISZ PTR TAD (-6 /NOW INCREMENT BCD LINENO (WHAT A PAIN) DCA DIGCTR /DO 6 DIGITS DIGLUP, DCA OVFL1 DCA OVFL2 /CLEAR OVERFLOW WORDS TAD [7774 DCA CARRY /SET STEP COUNTER SHIFT4, TAD (-6 /DO 6 WORDS DCA TEMPDF TAD (NUM1 DCA TOWARD /USE A FEW TEMPS CLL SHIFT6, TAD I TOWARD RAR DCA I TOWARD /SHIFT RIGHT ONE BIT ISZ TOWARD ISZ TEMPDF JMP SHIFT6 ISZ CARRY JMP SHIFT4 TAD OVFL2 /RECIRCULATE STEPSIZE DIGITS TAD NUM2 DCA NUM2 CLL /ADD THE NEXT DIGIT TAD OVFL1 TAD OVFL2 RAR TAD (-2400 /MOD 10 SZL ISZ CARRY /BUMP CARRY SNL TAD (2400 /RESTORE CLL RAL TAD NUM1 /STORE NEW DIGIT DCA NUM1 TAD CARRY /ADD CARRY IN TAD NUM1+1 DCA NUM1+1 ISZ DIGCTR JMP DIGLUP /DO ALL 6 DIGITS TAD CARRY /SEE IF EXCEEDED 999999 SZA CLA JMP I [WHAT /YES JMP I SEQFUD /ALL SET, RETURN /STORE AND PRINT BCD DIGITS FOR SEQ MODE PRTBCD, 0 DCA OVFL1 /SAVE DIGIT CLL STA RTL DCA OVFL2 /3 DIGITS CVTBCD, TAD OVFL1 RTL RTL DCA OVFL1 TAD OVFL1 RAL AND [17 /ISOLATE DIGIT SZA JMP .+4 TAD CARRY /SEE IF LEADING ZERO SNA CLA JMP SKIP0 /YES, IGNORE IT ISZ CARRY /COUNT DIGIT TAD (60 /MAKE ASCII DCA I PTR /STORE IN BUFFER TAD I PTR ISZ PTR JMS I [TTYOUT /PRINT IT SKIP0, ISZ OVFL2 JMP CVTBCD JMP I PRTBCD /SAVE LOC OF NUMBER OF FOLLOWING LINE SAVNXT, 0 JMS I [FINDLN /FIND THE LINE JMS TEMPDF /SET THE DF TO ITS START TAD I PTR /GET LINENO TAD [-377 /SEE IF EOF SNA TAD [7400 /SET TO INFINITY IF YES TAD [377 /RESTORE NUMBER DCA SAVNO ISZ PTR /BUMP PTR SKP JMS I [FINCR /AND DF IF NEEDED TAD I PTR /GET THE NEXT WORD DCA SAVNO+1 /STORE IT CDF JMP I SAVNXT /RETURN CARRY, 0 NUM1, 0;0 /ADJACENCY ASSUMED OVFL1, 0 NUM2, 0;0 OVFL2, 0 /ADJACENCY ASSUMED SAVNO, 0;0 DIGCTR, 0 PAGE /A FEW NON FITTING ERROR MESSAGES MSGNF, TEXT /FILE NOT FOUND/ MSGIO, TEXT "I/O ERROR" OLDNEW, TEXT /NEW OR OLD--/ BADFIL, TEXT /BAD FILE/ LINE, /THE TELETYPE LINE BUFFER. WSNAME, 0;0;40;104;123;113;72;102;101;123;111;103;56;127;123;0 /" DSK:BASIC.WS" START, JMP RBASIC /IT WAS RAN CDF 10 /IF CHAINED TO CHECK IF CCL PASSED TAD I (CDOPT4 /Q SWITCH IN RESPONSE TO .BASIC COMMAND (OS78) CDF AND [200 /ISOLATE THE BIT SZA CLA JMP RBASIC /TREAT AS .R BASIC IF YES JMS I (CORE CLA IAC DCA I (JSW /NO SWAP CIF 10 JMS I (7700 /FETCH USR 10 CIF 10 JMS I (200 /RESET SYSTEM TABLES 13 TLS /SET TTY FLAG JMS I (GETDAT /SET UP TITLE ISZ CHNFLAG /TELL ABOUT RETURN FROM RUN JMP I (OLD /READ IN OLD WORK SPACE RBASIC, CDF 10 DCA I (CDOPT3 DCA I (CDOPT4 DCA I (CDOPT5 DCA I (CDOPT6 CDF 0 TLS JMS I (CORE TAD [77 DCA I [TXTAREA JMS I (GETDAT /SET UP TITLE FINDSV, TAD I X11 /LOOK UP SOME SAVE FILES SNA JMP LUBUF /GO FIND BASIC.UF DCA XXXXSV /SAVE POINTER TO NAME CLA IAC CIF 10 JMS I (200 2 XXXXSV, 0 0 JMP NG IAC CDF 10 TAD XXXXSV DCA I X10 /SAVE BLOCK PLUS 1 CDF /IN INFO AREA JMP FINDSV LUBUF, CLA IAC /FIND BASIC.UF CIF 10 JMS I (200 2 BUFN 0 JMP .+3 /OK IF MISSING TAD .-3 IAC /SAVE BLOCK +1 CDF 10 DCA I X10 CDF CLA IAC /TYPE WITH NO CARRIAGE RETURN JMS I [TYPE /"OLD OR NEW -- " OLDNEW JMS I [SWAP JMS I (CLEARWS /CLEAR THE WORKSPACE IN CASE OF NO RESPONSE TAD (-11 /SET TAB TO SPACE CONVERSION FLAG HERE JMP I (MAINLUP NG, JMS I [TYPE /PART OF SYSTEM MISSING MISING JMP I (7605 PAGE LINEND= .-1 /DEFINE THE END OF THE LINE BUFFER /THE FOLLOWING ROUTINE ASSUMES THAT THE YEAR IS ALREADY /SET UP BY A CALL TO "CORE" - JR GETDAT, 0 /PUT OS8 DATE INTO THE TITLE CDF 10 TAD I (MDATE /GET DATE WORD CDF DCA TEMP2 /SAVE IT TAD TEMP2 SNA JMP I GETDAT /NO DATE AND [7400 /GET MONTH CLL RTL /SHIFT SOME RTL RTL TAD (MONTHS-3 DCA X12 TAD (DATE-1 /SET UP POINTER TO DATE DCA X13 TAD TEMP2 /GET DAY RTR RAR AND (37 JMP DAYGO /CONVER TO TEXT DAYLP, TAD (100-12 /REDUCE AND TALLY QUOTIENT TAD TEMP DAYGO, DCA TEMP TAD TEMP /SEE IF OVERFLOW AND [77 TAD (7766 SMA CLA JMP DAYLP /REDUCE MOD 10 IF NOT TAD TEMP TAD (6060 /UNPACK TO 6 BIT ASCII DCA I X13 /INTO DATE TAD I X12 /GET MONTH CHARS DCA I X13 TAD I X12 DCA I X13 / TAD TEMP2 /GET YEAR / AND (7 / TAD (21 / CLL RTL / RTL / RTL / ISZ X13 /THE WORD WITH -7 IS THERE / DCA I X13 /STORE LAST DIGIT OF YEAR /ABOVE JOB DONE BY "CORE" DURING INIT TIME JMP I GETDAT MONTHS, TEXT /-JAN-FEB-MAR-APR-MAY-JUN-JUL-AUG-SEP-OCT-NOV-DEC/ NAMLST, BASICN BCOMPN BLOADN BRTSN BOVN 0 BASICN, FILENAME BASIC.SV BCOMPN, FILENAME BCOMP.SV BLOADN, FILENAME BLOAD.SV BRTSN, FILENAME BRTS.SV BOVN, FILENAME BASIC.OV BUFN, FILENAME BASIC.UF MISING, TEXT /INCOMPLETE SYSTEM/ PAGE /THIS PAGE GETS WIPED OUT SOON /ROUTINE TO GET CORESIZE, SETUP DATE IN HEADING /AND SET SCOPE / TTY FLAG FOR RUBOUT TREATMENT CORE, 0 /CORE SIZE SUBROUTINE CDF 10 /GET INTO DATE FIELD TAD I (MDATE CDF /RESET FIELD AND (7 /LOOK AT LOW YEAR BITS DCA TEMP /HOLD TAD I (BIPCCL /NOW GET THE EXTENDED BITS AND (600 /FROM THE 600 BITS CLL RTR CLL RTR /SHIFT INTO PLACE TAD TEMP /ADD TO LOW BITS ISZ I (DASH6 /BUMP THE YEAR TENS DIGIT TAD (-12 SMA /SKP IF .LT. 10 OFF OF 1970 JMP .-3 /ELSE DECR AGAIN TAD (12+60 /CONVERT TO 6 BIT ASCII CLL RTL RTL RTL /SWAP TO LEFT HALF BYTE DCA I (EODAT /NOW STORE IN DATE TEMPLATE CDF 10 TAD I (7726 /LOOK AT HLT/CLA HLT SCOPE KLUDGE CDF AND [200 /GET SCOPE BIT DCA I (SCOPFG /AND STORE IT /STANDARD OS/8 CORESIZE ROUTINE TAD I (7777 AND COR70 CLL RAR RTR SNA JMP COR0 IAC DCA CORSIZ JMP COREX COR0, CDF TAD CORSIZ RTL RAL AND COR70 TAD COREX DCA .+1 COR1, CDF TAD I CORLOC COR2, NOP DCA COR1 TAD COR2 DCA I CORLOC COR70, 70 TAD I CORLOC CORX, 7400 TAD CORX TAD CORV SZA CLA JMP COREX TAD COR1 DCA I CORLOC ISZ CORSIZ JMP COR0 COREX, CDF TAD CORSIZ CIA DCA CORSIZ CLL CML CLA RTL /2 TAD CORSIZ SZA CLA JMP I CORE TAD (AC7776 /SAVE ONLY FIELDS 0 AND 1 IF 8K SYSTEM DCA I (PATCH5 JMP I CORE CORLOC, CORX CORV, 1400 $$