/OS8 BASIC EDITOR, V5A / / / / / / / // / / / / /COPYRIGHT (C) 1972, 1973, 1974, 1975 /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 ANT 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 /EQUIPMRNT COROPATION. / /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 AS FOLLOWS: / / .R PAL8 / *BASIC,BASIC 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 SKP NOTLAST,JMS I [FINDLN /GENERAL CASE - SEARCH INSERT, TAD TEMP /THERE ARE (TEMP-PTR) WORDS IN CLL CMA /THE OLD LINE WHICH ARE TO BE TAD PTR /REPLACED BY (-SIZE) WORDS IN CLA /NEW LINE. RDF SZL TAD O7770 TAD O6201 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 O6201 DCA TMPFLD /GET FIELD OF READ POINTER TAD TOWARD CLL CMA TAD TEMP SNL CLA TAD O7770 TAD TMPFLD DCA TWDFLD /GET FIELD OF WRITE POINTER TMPFLD, HLT TAD I TEMP TWDFLD, HLT DCA I TOWARD /MOVE DOWN TAD I TOWARD TAD O7701 /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 O10 DCA TMPFLD ISZ TOWARD JMP TMPFLD TAD TWDFLD TAD O10 DCA TWDFLD JMP TMPFLD /KEEP SHRINKING LWREOF, TAD TOWARD /SET NEW EOF JMS I [SETEOF 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 O10 /(W.C. OR E.M. ?) DCA PTRFLD ISZ SIZE JMP MOVLUP JMP MAINLUP SRCHBK, 0 DCA TEM TAD I SRCHBK ISZ SRCHBK CIA TAD TEM CLL CMA TAD I SRCHBK SNL CLA ISZ SRCHBK ISZ SRCHBK TAD TEM JMP I SRCHBK TEM, 0 PAGE EXPAND, CIA /EXTRA ROOM NEEDED DCA TOWARD TAD I TEMP /SAVE THIS PLACE DCA TEMP2 TAD O37 /NOW MARK THIS PLACE DCA I TEMP JMS I [GETEOF /GET EOF RDF TAD O6201 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 O6201 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 O7741 /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 O7770 DCA TWD2FLD CLA CLL CMA TAD TEMP DCA TEMP SZL JMP TMP2FLD TAD TMP2FLD TAD O7770 DCA TMP2FLD JMP TMP2FLD LASTWD, TAD TEMP2 /PUT IN SAVED WORD DCA I TOWARD JMP I [MOVE /GO MOVE IN NEW LINE COREOV, JMS I [TYPE /FILE TOO BIG MSGBIG BYEBYE, CLA IAC AND SWPNUM /IS OS8 RES IN PLACE ? SZA CLA /YES IF EVEN NUMBER OF SWAPS BYE, JMS I [SWAP /PUT BACK OS8 TSF /WAIT FOR TTY SO OS8 DOESN'T JMP .-1 /TRAMPLE ON MY LINE FEED JMP I (7605 /EXIT TO OS8 MSGBIG, 5646;5660;6372;160;6746;6347;5560;7000 MSGALT, 0145;4655;4665;4645;0 MSGWHAT,7051;4265;4000 MSGTOO, 5552;5746;0165;6060;0155;6057;5000 SCRATCH,TAD [TXTAREA/SCRATCH FILE JMS I [SETEOF DCA EOFLIN /ZERO LAST LINE NUM DCA EOFLIN+1 JMP I [CMDDONE NORM, 0 /LINE NUMBER NORMALIZER TAD NDIGS SZA JMP .+3 /IF THERE ARE NO DIGITS IN THE CLA CMA /LINE NUMBER THEN JMP I NORM /RETURN -1. TAD O7772 SMA CLA JMP I NORM /IF THE LINENO HAS BEEN FILLED TAD O7774 /OUT TO 6 DIGITS(LEADING 0'S) DCA TEMP /THEN RETURN. TAD LINENO /OTHERWISE, SHIFT RIGHT 1 DIGIT CLL RAR DCA LINENO /AND CHECK AGAIN. TAD LINENO+1 RAR DCA LINENO+1 ISZ TEMP JMP .-7 ISZ NDIGS JMP NORM+1 SETEOF, 0 /SET NEW EOF DCA EOFADR /SAVE ADDR RDF /GET FLD TAD O6201 DCA EOFFLD /SAVE IT TAD O77 /STORE EOF DCA I EOFADR JMP I SETEOF / GETEOF, 0 TAD EOFADR /RETRIEVE EOF INFO DCA TEMP /FIRST ADDR EOFFLD, CDF JMP I GETEOF PAGE COMMAND,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 I [LINE+2 /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, JMS I [TYPE /TYPE WHAT? MSGWHAT JMP I [MAINLUP COMTBL, . -5552 LIST -6055 OLD -6442 SAVE -6366 RUN -6444 SCRATCH -4372 BYE -5746 NEW -5742 RENAME 0 WSSAVE, 0145;6454;3343;4264;5244;1770;6400 HEADING,0 /PRINT 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 O77 /CHECK FOR 0 SNA /SUBSTITUTE BLANKS TAD (40 TAD O7741 /SUBTRACT 37 AND O77 /SIX BITS DCA I PTR TAD I TEMP /DO UPPER CHAR AND O7700 SNA CLL CML RAR TAD (-3700 /SAME WAY TAD I PTR /COMBINE THEM DCA I PTR ISZ TEMP ISZ PTR JMP I CONV TITLE, 0;0;0;0101;0 /FOR THE PROG NAME 0101;0101 /SOME BLANKS VERLOC, VERSON^100+2142 /VERSION NUMBER 0101;0101 /MORE BLANKS DATE, 0;0;0 /DATE TEMPLATE DASH6, 1627 /"-6" FOR BUILDING DATE EODAT, 0 /END OF DATE TEMPLATE GETNC, 0 /GET A CHAR FOR A FILE NAME TAD NCHARS /GET CHAR POINTER ISZ NCHARS /BUMP IT CLL RAR /DIVIDE BY 2 TAD [LINE+2 /ADD BASE DCA TEMP /GIVES ADDR OF WORD TAD I TEMP /GET 2 CHARS SZL /ODD EVEN BIT IS IN LINK JMP TESTCH /GO CHECK THE CHAR RTR RTR RTR TESTCH, AND O77 /ONLY 6 BITS SNA JMP I GETNC /END OF NAME TAD O37 ISZ GETNC JMP I GETNC PATCH3, 0 JMS I [GETNC JMP I PATCH3 AND O77 JMS I (SRCHBK 72 1 JMP EXB ISZ PATCH3 JMS I (SRCHBK 60 12 EXA, JMP I PATCH3 JMP I (PATCH2 EXB, CLA IAC JMP I PATCH3 PAGE LIST, TAD I [LINE+3 /LISTNH ? TAD I [LINE+4 TAD [-4436 /PSEUDO TEST SNA CLA JMP LISTNH /NO HEADING JMS I [HEADING/GIVE HEADING TAD COFLAG /WAS CTRL/O TYPED ? SNA CLA JMP I [CMDDONE/YES, ABORT LISTING LISTNH, DCA NCHARS /SET POINTER DCA NDIGS /AND DIGIT COUNTER JMS I [GETNC /SKIP UNTIL BLANK JMP NUMDUN /DONE TAD (-40 SZA CLA JMP .-4 /NO BLANK YET JMS I [GETNC /GET A CHAR JMP NUMDUN /END OF NUMBER TAD O7706 /SUBTRACT 72 JMS I [LNDIG /GO SEE IF ITS A DIGIT JMP .-4 /IT WAS, CONTINUE NUMDUN, TAD [TXTAREA DCA PTR /SET UP POINTER JMS I [NORM /NORMALIZE THE NUM SPA CLA /ANY NUMBER ? JMP .+3 /NO JMS I [FINDLN /YES, LOCATE IT TAD PTR IAC DCA TEMP JMS I [FDECR RDF /GET THE FIELD TAD O6201 DCA PTR2FLD /SAVE IT DCA TEMP LSTLUP, JMS I [CTRLO /CHECK FOR CTRL/O JMP I [CMDDONE/YES, EXIT JMS CTRLS /CHECK FOR XOFF JMS GETFIL /GET CHARACTER TO LIST JMP I [CMDDONE JMS I [TTYOUT /PRINT IT JMP LSTLUP /LOOP GETFIL, 0 /GET CHARACTER FROM FILE TAD TEMP ISZ TEMP TAD .+3 DCA .+1 HLT JMP I .+1 /SEQUENCE OF OPERATIONS PTR2FLD /GET FIRST WORD FRSTDIG /FIRST DIGIT OF LINE NUMBER DIGIT /SECOND DIGIT DIGIT /THIRD DIGIT PTR2FLD /GET NEXT WORD OF LINE NUMBER DIGIT /FOURTH DIGIT DIGIT /FIFTH DIGIT LASTDIG /SIXTH AND LAST DIGIT PTR2FLD /GET WORD OF TEXT LEFTTXT /LEFT CHARACTER RITETXT /RIGHT CHARACTER LINFTXT /LINE FEED CHARACTER PTR2FLD,HLT /CHECK FOR EOF TAD I PTR CDF TAD O7701 SNA JMP I GETFIL /YES, RETURN UNSKIPPED TAD O77 DCA TEMP2 /NO, SAVE WORD ISZ PTR /BUMP POINTER JMP GETFIL+1 TAD PTR2FLD TAD O10 DCA PTR2FLD JMP GETFIL+1 LASTDIG,CLA IAC /FORCE LAST DIGIT (EVEN IF 0) FRSTDIG,DCA NDIGS /ZERO DIGIT COUNT DIGIT, TAD TEMP2 RTL RTL DCA TEMP2 /SHIFT LEFT ONE DIGIT TAD TEMP2 RAL AND O17 /GET DIGIT SZA JMP NZDIGIT /ITS NOT ZERO TAD NDIGS /IS IT A LEADING ZERO ? SNA CLA JMP GETFIL+1/YES, DON'T PRINT IT NZDIGIT,ISZ NDIGS /NON ZERO OR NON LEADING ZERO TAD O260 /SO PRINT IT JMP GFRET LEFTTXT,TAD TEMP2 /GET LEFT CHAR RTR RTR RTR JMP .+4 RITETXT,TAD O10 /SETUP FOR LEFT CHAR NEXT DCA TEMP TAD TEMP2 AND O77 /SIXBITIZE AC SNA JMP ZEROTXT /0 IS END OF THE LINE TAD O237 /MAKE IT ASCII GFRET, ISZ GETFIL JMP I GETFIL ZEROTXT,TAD O13 /SETUP FOR LF NEXT DCA TEMP TAD O215 /RETURN CR JMP GFRET LINFTXT,DCA TEMP /CLEAR SEQUENCER AND RETURN LF TAD O212 JMP GFRET / CTRLS, 0 TAD CSFLG /XON? SNA CLA JMP I CTRLS /NO JMP LSTLUP /YES / MSGRDY, 6346;4245;7200 PAGE GETFN, 0 /GET A FILE NAME (ALSO FETCH ITS HANDLER) 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 (7746 /DO IF SAVE, SO ALTER JSW CIF 10 /GET THE USR JMS I O7700 10 NOFUSR, DCA NCHARS /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 O200 /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 ? SPA SNA CLA JMP ASKNM /NO, GO ASK FOR A NAME 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 (DUMMY DCA [LNDIG JMS I [GETLIN JMP I (PATCH1 SAVFLAG,0 GETNAM, 0 /GET A FILE OR DEVICE NAME DCA NAME /ZERO THE NAME BUFFER DCA NAME+1 DCA NAME+2 TAD O201 /USE DEFAULT EXT .BA DCA NAME+3 TAD [NAME /SETUP POINTER DCA TEMP2 TAD O7774 /SETUP SIZE (MAX 4 WORDS) DCA SIZE NAMLUP, JMS I (PATCH3 JMP I GETNAM CLL RTL RTL RTL DCA I TEMP2 /SAVE IT JMS I (PATCH3 JMP I GETNAM TAD I TEMP2 /COMBINE THE 2 DCA I TEMP2 ISZ TEMP2 ISZ SIZE /ANY MORE ? JMP NAMLUP JMP I GETNAM RENAME, CLL CML RAR /SAVE USR AREA JMS GETFN /GET FILE NAME CIF 10 JMS I O200 /REMOVE USR 11 /AND RESTORE 10000-11777 JMS I [SWAP /SWAP OS8 RESIDENT JMP I [CMDDONE NEW, TAD [TXTAREA /SCRATCH JMS I [SETEOF DCA EOFLIN /ZERO LAST LINE NUM DCA EOFLIN+1 JMS GETFN /GET THE FILE NAME JMS I [SWAP /REMOVE OS8 JMP I [CMDDONE PAGE PUTFIL, 0 /WRITE THE FILE TAD [TXTAREA DCA PTR /GET POINTER TO TEXT TAD O6201 /GET FIELD OF TEXT DCA I [PTR2FLD DCA TEMP /ZERO LINE SEQUENCER TAD [DSKBUF /GET ADDR OF DISK BUFFER DCA SWAPT1 /BUFFER POINTER TAD O7600 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 O232 /PUT CTRL-Z JMS PUTCH TAD O7201 /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 O17 /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 O7400 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 I (OUERR /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 O7600 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 SWAP, 0 /SWAP OS8 RESIDENT ISZ SWPNUM /FLIP BYEBYE SWITCH NOP JMS SWAP2 /WITH OS8RES THROUGH OS8RES+577 OS8RES CDF JMS SWAP2 OS8RES+200 CDF 10 PATCH5, JMS SWAP2 /OVERLAID IF <12K OS8RES+400 CDF 20 JMP I SWAP SWAP2, 0 TAD O7600 DCA SWAPT3 TAD I SWAP2 ISZ SWAP2 DCA SWAPT4 TAD I SWAP2 ISZ SWAP2 DCA SWPFLD JMP .+5 SWPLUP, CDF 00 TAD SWAPT1 DCA I SWAPT4 ISZ SWAPT4 TAD I SWAPT4 DCA SWAPT2 SWPFLD, HLT TAD I SWAPT3 DCA SWAPT1 TAD SWAPT2 DCA I SWAPT3 ISZ SWAPT3 JMP SWPLUP CDF 00 TAD SWAPT1 DCA I SWAPT4 JMP I SWAP2 BADFIL, 4342;4501;4752;5546;0 ASKFN, 4752;5546;0157;4256;4616;1600 PAGE RUN, TAD I [LINE+3 /RUNNH ? TAD I [LINE+4 TAD (-3057 SZA CLA JMS I [HEADING/GIVE A HEADING TAD [LINE+2 /SET UP FAKE LINE DCA TEMP TAD [WSSAVE DCA PTR TAD O7771 DCA TEMP2 TAD I PTR /MOVE FAKE LINE INTO "LINE" ISZ PTR DCA I TEMP ISZ TEMP ISZ TEMP2 JMP .-5 ISZ RUNFLAG /SET RUN FLAG JMP GFN 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 O200 /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 O200 /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 (7746 CIF 10 /GET THE USR JMS I O7700 10 TAD DEVNUM /GET DEVICE NUMBER CIF 10 JMS I O200 /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 O200 1 DEVN, 0 JMP I (IOERR TAD DEVN /RESET THE HANDLER ADDRESS DCA DEVHAN HNDLOK, CIF 10 /GET RID OF THE USR JMS I O200 11 JMS I [SWAP /REMOVE OS8 AGAIN JMP I [CMDDONE OLDDEV, 0 FINDLN, 0 /FIND A LINE TAD [TXTAREA DCA TEMP SEARCH, TAD TEMP /COMPARE THE NUMBER OF DCA PTR /THIS LINE WITH THE SPOT TAD I TEMP /IN THE TEXT AREA. TAD O7701 SNA JMP I FINDLN /NEW LINE GOES AT EOF TAD O77 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 JMS I [FDECR TAD TEMP DCA PTR JMP I FINDLN /INSERT NEW LINE SAME2ND,JMS I [PASS JMP I FINDLN PAGE 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 CDF JMS XMOVE /MOVE THIS PAGE INTO FIELD 1 CDF DORUN CDF 10 -200 CDF CIF 10 /GO TO THE FIELD ONE COPY RUNDO, JMS XMOVE /MOVE THE HANDLER INTO FIELD 1 CDF HANDLR CDF 10 -400 TAD I (INFO+1 /GET START OF BCOMP.SV DCA BCBLOK CIF JMS I (7607 /READ IN THE COMPILER BCSIZE 0 BCBLOK, 0 JMP WHUPS JMS XMOVE /MOVE BACK THE HANDLER CDF 10 HANDLR CDF -400 CLA IAC /OPEN THE TEMP FILE JMS I (200 3 TMPBLK, TMPFIL 0 JMP WHUPS JMS I (200 /RESET SYSTEM TABLES 13 /AND REMOVE TENTATIVE FILES TAD TMPBLK /SAVE ITS START DCA I (INFO+10 TAD TMPBLK+1 DCA I (INFO+11 /AND ITS MAX LENGTH DCA I (7644 /KILL R SWITCH CIF CDF JMP I (BCBEGN /GO START THE COMPILER WHUPS, TAD (123 /PRINT SY ERROR JMS TTYO TAD (131 JMS TTYO TAD (15 JMS TTYO TAD (12 JMS TTYO TSF /WAIT FOR FLAG JMP .-1 CDF CIF JMP I (7605 /RETURN TO OS8 TTYO, 0 TSF JMP .-1 TLS CLA JMP I TTYO XMOVE, 0 RDF /GET CALLING FIELD TAD (6203 /PLUS CIF CDF 0 DCA MOVRTN /FOR RETURN JMS GMOVE /GET FROM FIELD DCA MFFLD JMS GMOVE /GET ADDRESS DCA MFPTR JMS GMOVE /GET TO FIELD DCA MTFLD JMS GMOVE /GET COUNT DCA MCNT MFFLD, HLT TAD I MFPTR /MOVE IT MTFLD, HLT DCA I MFPTR ISZ MFPTR ISZ MCNT JMP MFFLD MOVRTN, HLT JMP I XMOVE MFPTR, 0 MCNT, GMOVE, 0 TAD I XMOVE /GET ARG FOR MOVE ISZ XMOVE JMP I GMOVE TMPFIL, FILENAME BASIC.TM PATCH1, CLA TAD (400 DCA [LNDIG DCA NCHARS JMP I (NOSKIP PAGE GETCH, 0 /GET A CHARACTER FROM THE TTY TAD OLDFLAG /INPUT FROM A FILE ? SZA CLA JMP FILEIN /YES KSF JMP .-1 KRB AND O177 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 IFILE 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 O7400 /MASK IT CLL RTR /SHIFT RIGHT 4 RTR DCA TEMP /SAVE TAD I RDTMP /GET HIGH 4 BITS AND O7400 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 O177 /MASK 7 BITS TAD O7746 /CHECK FOR ^Z SNA JMP ENDOLD /EOF TAD O32 /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-3764 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 OLDBAD, DCA FNAME+3 /TRY WITHOUT EXT ISZ TEMP /OR HAVE WE ALREADY ? JMP OLDTRY /NO, NOT YET IOERR, INERRX, CIF 10 JMS I O200 /DISMISS USR 11 OUERR, INERR, DCA OLDFLAG /KILL OLD STATUS JMS I [SWAP /OUT WITH OS8 JMS I [TYPE /PRINT MESSAGE BADFIL JMP I [MAINLUP OLD, TAD [TXTAREA/SCRATCH FILE JMS I [SETEOF DCA EOFLIN /ZERO LAST LINE NUM DCA EOFLIN+1 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 O200 /LOOKUP FILE 2 SB, 0 /START GOES HERE RDSIZE, 0 /SIZE GOES HERE JMP OLDBAD /BAD FILE 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 PATCH2, JMS I [SRCHBK 01 32 JMP I (EXA TAD (-56 SZA CLA JMP INERRX JMP I (PATCH4 / CHKSOF, SMA CLA JMP SOFTOK /SOFT ERROR JMP INERR 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 /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 ZERO, CTRLO, 0 KSF JMP CTRLOX KRB AND A177 TAD MCC SNA JMP I (BYEBYE TAD MCO SNA JMP CTRLOX+2 TAD MCQ SNA JMP SETFLG+1 TAD MCS SNA JMP SETFLG CTRLOX, ISZ CTRLO CLA IAC DCA COFLAG JMP I CTRLO SETFLG, IAC DCA CSFLG JMP CTRLOX CRLF, 0 TAD O215 JMS I [TTYOUT TAD O212 JMS I [TTYOUT JMP I CRLF /PRINT A CHAR ON TERMINAL /PAUSE IF LF WAS PRINTED AND DELAY REQUESTED /SCREENSIZE ALSO SET BY "SET TTY" COMMAND TTYOUT, 0 TSF /FIRST WAIT JMP .-1 TLS /NOW PRINT THE CHAR AND A177 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 NOKST /JMP IF NO KRS /ELSE READ CHAR AND A177 /MASK TO 7BIT TAD MCC SNA JMP I [BYEBYE /JMP IF ^C SEEN TAD MCO SZA TAD MCQ SZA TAD MCS SNA CLA JMP I TTYOUT /RETURN WITH CHAR STILL IN BUFFER IF ANY OF ABOVE SEEN NOKST, ISZ ZERO JMP .-1 /LOOP 4096 TIMES (USUALLY) ISZ STIMER /TEST DELAY COUNTER JMP DLOOP /REITERATE IF NOT DONE JMP I TTYOUT /ELSE RETURN FOR MORE MCC, -3 MCO, -17+3 MCQ, -21+17 MCS, -23+21 A177, 177 /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 NCHARS /SEE IF AT LEFT MARGIN TAD NDIGS SNA CLA JMP I PRTBSP /DO NOTHING IF YES TAD O10 /ELSE ECHO BS JMS I [TTYOUT TAD (40 JMS I [TTYOUT /SP TAD O10 SKP /BS JUSTSP, TAD (40 /SPACE JMS I [TTYOUT JMP I PRTBSP /DONE BKARRW, TAD ("_ JMS I [TTYOUT JMP I PRTBSP PAGE LINE, /THE TELETYPE LINE BUFFER. WSNAME, 0;0;0145;6454;3343;4264;5244;1770;6400 START, JMP RBASIC /IT WAS RAN CDF 10 /IF CHAINED TO CHECK IF CCL PASSED TAD I (7644 /Q SWITCH IN RESPONSE TO .BASIC COMMAND (OS78) CDF AND O200 /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 GETDAT /SET UP TITLE ISZ YorT+ T\\4frb}Ikz\t\mH\0T ~m9`b {4s+IEKX$?Ax//Kf.4bD4f5.5d A/$44d M@.N/".dk45fO2((zP$$$2 t03&$A/ AMr4bFDn44"4&fNh/7>)&Pov` ng|b@grFnggh. gho(Q0$ mA/ oxg0$}@o~@@`tk 0 (/CD9+ E{FC/f0GiH&&V&bI&J&& L&=9 zK@.-,P-i;k+L '0M+%`ab+t+07'678I4b L'=y7|1D0q#A<9s= u+%`!gfAhxQvz A .hh~L=AN0${|+}b~Ff$ h+@Xu @?b@N@<)#AAoH ~+B AH@.-C("(zj+i+  fD&A@E+9&+0bDFbl Cd6* f=9+3@`}@RbR f{!4b(|{@lb4/|42m@/[4"n@/|o8A}r(;{~(/g. hzo(4<)[htxpb<#;>DAo/o:Kv+@:;"89i?42/5b09i?4219i?4225b$@ A2 LB=y&,Cb,8 ,@/@9F LB=y,) Di8E'9F+shwKu0IApML0Ydb bzsbdt@u(vs(`zw@)@vc(^zxPux9;ky+z{'|"(p@)hJ}{'d|?:$%,Q=aFW l~*&4h4D;+ 4r ?{; 9 ?42@b?{x?4T@bl C=(264bAiBZ6@.CB] c Dr(;zE@)3A)6&K8thQXsp`yf9z`4bj5b{uhb 9i\4" 5r |{SJ(/z!>kydnu"}~:b \;jv&kw&:bP;0uKnM4 z(/ 2k f & @9&A"B")1 C(;!.(/$ &D@Eb)t)2(r(9k7i~2}*~*$=@iA&>&Lf(?$ =)`=b=o+(/&B!=bH%z J`.&= .bt+=)?"+B+)=bn+0Huq Nd+ 9H. u{4v)w>4+) xby+bzb,G,)(b+(+){i|:9nK }Oz}y~@<Khwp@N MnMj`.f9;.(/ 5"<=5">? $&`4b 9i4b()z!f. /", =% CPN@/A).;KB; $`(AyP-iD.H)zu n0QQtM<EJx,/fy@0Y0&0z9y@1f;Y`F?i@@);k+ (/>%!b+i9"lG#J=+% (6z:&&Lt2=)+ >jxoK f Kl C*##. l(?X=)!b(A{!b|; 1664;4661 /-SEP 1660;4465 /-OCT 1657;6067 /-NOV 1645;4644 /-DEC NAMLST, BASICN BCOMPN BLOADN BRTSN BAFN BSFN BFFN 0 BASICN, FILENAME BASIC.SV BCOMPN, FILENAME BCOMP.SV BLOADN, FILENAME BLOAD.SV BRTSN, FILENAME BRTS.SV BAFN, FILENAME BASIC.AF BSFN, FILENAME BASIC.SF BFFN, FILENAME BASIC.FF BUFN, FILENAME BASIC.UF MISING, 5257;4460;5661;5546;6546;0164;7264;6546;5600 OLDNEW, 5746;7001;6063;0160;5545;1616;0 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+21 /CONVERT TO "HANKS 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 O200 /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 (SWAP&177+5600 DCA I (PATCH5 JMP I CORE CORLOC, CORX CORV, 1400 $$ Note: Lines longer than 256 characters were wrapped