LDB IBUFD * RBL * STB IBUFP * ADD CR TO ADB A * LDA .15 * END OF BUFFER JSB A2BUF * JMP GIFO,I RETURN TO CALLER * * * * * * * * * * SKP * GET A CHARACTER FROM INPUT BUFFER * GETC NOP LDB IBUFP JSB BUF2A CPA .15 IF CR RETURN P+1 JMP GETC,I YES ISZ IBUFP MOVE POINTER TO NEXT CHARACTER ISZ GETC ADJUS GOOD RETURN P+2 JMP GETC,I RETURN * * BUF2A NOP CLE,ERB E _ UPPER LOWER FLAG LDA B,I 2CHR TO AREG SEZ,RSS UPPER OR LOWER? ALF,ALF UPPER AND .177 MASK UNWANTED CHARACTER JMP BUF2A,I RETURN. * * A2BUF NOP STA GETC SAVE CHARACTER SLB,INB OPPSITE ADB .M2 CHARACTER JSB BUF2A ALF,ALF IOR GETC ADD NEW CHARACTER SEZ SHOULD IT BE SWAPPED? ALF,ALF YES STA B,I STORE IT JMP A2BUF,I * * PUTC NOP AND .177 MASK UPPER BITS SZA,RSS IF IT'S ZERO JMP PUTC,I DON'T PUT IN BUFFER LDB IBUFP GET ADDRESS JSB A2BUF PUT CHATACTER IN BUFFER ISZ IBUFP MOVE TO NEXT CHARACTER JMP PUTC,I RETURN TO CALLER * * * * * SKP * GET INPUT BLOCK FROM INPUT BUFFER * GETB NOP CLA CLEAR PARAMETERS STA AIN STB BIN JSB GETC GET A CHARACTER JMP GETB,I NO DATA CPA SPC CHECK IF IT'S A SPACE JMP GETB,I YES SKIP IT ISZ GETB ADJUST RETURN CPA MINUS IF IT'S NEG SIGN JMP NUMIN+1 THEN PROCESS AS A NUMBER JSB DGCK IF IT'S A NUMBER JMP NUMIN THEN PROCESS AS A NUMBER CLB STB SVA JSB GETA CONVERT 2 CHARACTERS STA AIN SAVE IT LDA SVA CHECK IF SPACE HAS BEEN SZA,RSS ? JSB GETC NO GET NEXT CHARACTER LDA SPC NO DATA USE SPACE CPA SPC IS IT A SPACE? STA SVA YES SET FLAG JSB GETA CONVERT NEXT 2 CHARACTERS STA BIN SAVE IT LDA SVA CHECK FOR SAPC SZA ? JMP *+6 JSB GETC MOVE TO NEXT SPACE LDA SPC NO DATA USE SPACE CPA SPC SPACE? RSS YES JMP *-4 NO GET NEXT CHARACTER CLE INDICATE ASCII LDA AIN RETRIEVE CHR LDB BIN JMP GETB,I RETURN * * GETA NOP STA BIN LDA SVA SZA,RSS JSB GETC LDA SPC CPA SPC STA SVA ALF,ALF IOR BIN ALF,ALF JMP GETA,I SKP NUMIN CCB,RSS INDICATE POSITIVE CLB INDICATE NEGATIVE STB NFLG SAVE FLAG ADB IBUFP MOVE POINTER BACK IF NECESSARY CLE,ERB SET UPPER LOWER FLAG CLA CALL FOR INTEGER JSB AS2N,I CONVERT IT STA AIN SAVE IT LDB NFLG ADB IBUFP CLE,ERB CCA CALL FOR OCTAL JSB AS2N,I CONVERT IT STA BIN SAVE IT LDA AIN RETRIEVE LDB BIN NUMBERS ISZ NFLG WAS A NEG ENTERED? RSS JMP *+3 NO CMA,INA YES CMB,INB STA AIN SAVE NUMBER STB BIN JSB GETC GET NEXT CHARACTER LDA SPC NO DATA USE SPACE CPA SPC READ TO NEXT SPACE RSS JMP *-4 NO MOVE TO NEXT ONE CCE INDICATE IT'S A NUMBER LDA AIN RETRIEVE PRAMETERS LDB BIN JMP GETB,I RETURN AIN NOP BIN NOP NFLG NOP * * CHECK IF AREG = DIGIT * DGCK NOP STA BUF2A SAVE CHARACTER ADA .M60 ADD -60 OCTAL SSA SHOULD STILL BE POS.? ISZ DGCK NO - NOT A DIGIT ADA .M10 ADD -10 SSA,RSS SHOULD GO NEG? ISZ DGCK NO - ADJUST RETURN LDA BUF2A RETRIEVE CHARACTER JMP DGCK,I RETURN SKP * SELECT FAST OR SLOW OUTPUT DEVICE * PDVC NOP LDA JSBSD CPB AP CHECK IF LINE PRINTER? INA YES LDB 113B CHECK IF THERE IS A FAST DEVICE SZB,RSS ? LDA JSBSD NO STA FDF JMP PDVC,I RETURN * * * * OUTPUT TO FORMATTER * .FMT NOP LDB .FMT,I GET ADDRESS ISZ .FMT ADJUST RETURN CLA,CLE INDICATE STARTING FORMAT JSB FMTR,I GO TO FORMATTER JMP .FMT,I RETURN * * * * * SKP * PROGRAM COMMAND * PCMD CPA ABY EXIT OPDSN? JMP OPDSN,I EXIT CPA ALF LIST SOURCE FILE JMP PLF YES CPA ACF CLEAR SOURCE FILE? JMP PCF YES CPA ADB DEFINE BUFFER? JMP PDB YES CPA ALB LIST BUFFER? JMP PLB YES CPA ACB CLEAR BUFFER? JMP PCB YES CPA AGO START EXECUTION? JMP PGO YES * CMDL NOP (MAY BE OVERLAYED BY A JSB) RSS JMP IRQ * INER JSB .FMT INPUT ERROR DEF MSG2 JMP IRQ TRY AGAIN MSG1 ASC 3,OPDSN/ .MSG1 ASC 1,@_ *THIS "*" PREVENTS LF SUPPRESSION MSG2 ASC 6,INPUT ERROR/ SKP * LIST PROGRAM * PLF JSB PDVC CHECK FOR FAST DEVICE LIST LDA SUPA SET STARTING OF LIST STA PRPTR POINTER PLFL LDA PRPTR,I CHECK TO PRINT STATEMNET SZA,RSS IS IT THE END OF LIST JMP IRQ YES LDB SW9 CHECK TO JSB SWRT,I ABORT LIST JMP IRQ YES CCB CONVERT AND ADB IBUFD PACK CLE STATEMENT JSB I2AS,I NUMBER LDB IBUFD ADD NUMBER TO POINTER ADB .2 RBL STB IBUFP LDA SPC PUT SPACE IN BUFFER JSB PUTC ISZ PRPTR LDA PRPTR,I * ISZ PRPTR * ADA .M1 * LDB A,I * GET PRAM TYPES STB SVB * SAVE PRAM TYPES ADA .M1 * LDB A,I * STB TMP+3 * ADA .M1 * LDA A,I * AND STATEMENT STA TMP+2 * SAVE STATEMENT ALF,ALF * JSB PUTX * PUT STATEMENT TYPE LDA TMP+2 * IN JSB PUTX * BUFFER LDA TMP+3 * AND SECOND CHATACTERS ALF,ALF JSB PUTX * LDA TMP+3 * JSB PUTX * JMP *+7 * PUTX NOP AND .177 CPA SPC IF IT'S A SPACE JMP *+3 SKIP IT JSB PUTC PUT IT IN BUFFER JMP PUTX,I TRY NEXT CHARACTER LDA SPC ADD SPACE TO BUFFER JSB PUTC SKP LDA SVB RETRIEVE PRMS TYPES ALF,ALF MOVE TO FIRST PARAMETER PLFP LDB PRPTR,I CHECK IF NO PARAMETER SZB,RSS ? JMP PLFC NO SO DON'T PROCESS IT AND .177 CPA AA IS IT ASCII? JMP PAA YES CPA AI IS IT INTEGER? JMP PAI YES CPA AK IS IT OCTAL? JMP PAK YES JMP PLFC TYPE NOT FOUND SO SKIP IT * PAA LDA PRPTR,I GET CHARACTERS ALF,ALF JSB PUTC FIRST ONE TO BUFFER LDA PRPTR,I AND .177 SKIP IF SPACE CPA SPC RSS JSB PUTC SECOND ONE TO BUFFER JMP PLFC * PAI LDA PRPTR,I CLB SSA,RSS IF POS CCB MOVE BUFFER POINTER BACK ONE ADB IBUFP STB IBUFP CLE,ERB JSB I2AS,I * PAE LDA IBUFP ADA .6 STA IBUFP JMP PLFC * PAK LDA PRPTR,I LDB IBUFP CLE,ERB JSB O2AS,I JMP PAE SKP PLFC ISZ PRPTR MOVE TO NEXT PARAMETER LDA SPC ADD SPACE TO BUFFER JSB PUTC LDA SVB SZA,RSS JMP *+4 CLB STB SVB JMP PLFP LDA IBUFP DETERMINE BUFFER COUNT LDB IBUFD * RBL * CMB,INB * ADA B * LDB IBUFD JSB DVIC OUTPUT BUFFER JMP PLFL DO NEXT INSTRUCTION SKP * DELETE A LINE * DLL JSB FNDLN FIND IT JMP IRQ NOT FOUND ADB .4 PDLL LDA .M4 SET COUNT FOR COMPARE STA TMP PDLL0 LDA B,I MOVE NEXT LINE UP STA PRPTR,I ISZ PRPTR INB ISZ TMP TIME FOR A COMPARE JMP PDLL0 NO LDA B,I YES CHECK FOR END OF LIST SZA ? JMP PDLL NO STA PRPTR,I CLEAR LAST STATEMENT SVLA LDA PRPTR SAVE LAST STATEMENT ADDRESS STA PRPLA JMP IRQ * * * CLEAR SOURCE FILE * PCF CLA STA SUPA,I LDA SUPA JMP SVLA+1 SKP * PROCESS GO * PGO NOP (MAY BE OVERLAYED BY A JSB) LDA GSPTS CLEAR GO SUB TABLE STA GSPTR LDB SUPA START AT BEGINNING STB PRPTR LDA PRPTR,I STA TMP PGOL1 ISZ PRPTR LDA PRPTR,I LDA A,I STA TMP+1 POINTER TO ROUTINE ISZ PRPTR LDA PRPTR,I STA TMP+2 PARAM A ISZ PRPTR LDA PRPTR,I STA TMP+3 PARAM B ISZ PRPTR LDA TMP STA CULN SAVE CURRENT LINE NUMBER SZA,RSS JMP IRQ CLA ALTER JSB INST STA CRJSB IN CHECK FOR READY JSB CFR GO WAIT UNTIL READY LDA JSBFF RESTORE INSTR TO STA CRJSB DO FORM FEED WHEN READY LDA PRPTR,I STA TMP NEXT LINE NUMBER LDA TMP+2 GET PARAM A LDB TMP+3 GET PARAM B JSB TMP+1,I GO TO ROUTINE CLA NO LINE CHANGE LDB SW9 CHECK FOR ABORT JSB SWRT,I JMP IRQ SZA,RSS CHECK FOR LINE CHANGE JMP PGOL1 NO STA TMP JSB FNDLN JMP OPLNE LINE NUMBER NOT FOUND JMP PGOL1 FOUND * * OPLNE JSB .FMT OUTPUT NO LINE NO. DEF OPLMD OPLNN JSB .FMT OUTPUT LINE # DEF OPLND LDB CULN CURRENT LINE NUMBER OPLN. CLA,INA JSB FMTR,I JMP IRQ RETURN TO OPERATOR OPLMD ASC 3,LINE?_ *THIS "*" PREVENTS LF SUPPRESSION OPLND ASC 5, (LINE #)/ SKP * DEFINE BUFFER * PDB STB TMP SAVE TYPE LDA B CPA AIK INSERT? JMP DBI YES CPA AIA JMP DBI YES CPA ARK REPLACE? JMP DBR YES CPA ARA JMP DBR YES JMP DBBC GIVE OPERATOR BUFFER COUNT * * DBIN NOP JSB DBN GET FIRST NUMBER STA TMP+1 SAVE IT JSB DBN GET SECOND NUMBER STA TMP+2 SAVE IT SZA,RSS IF IT'S NOT ZERO JMP DBIN,I CMA,INA CHECK FRST < SEC ADA TMP+1 SSA,RSS JMP INER JSB GETB EMPTY BUFFER JMP DBIN,I JMP *-2 * * DBN NOP JSB GETB GET A BLOCK OF DATA CLA,CCE NO INPUT SO FAKE IT SEZ,RSS IF IT'S ASCII JMP INER THEN ERROR SSA IF IT'S NEGATIVE JMP INER THEN ERROR SZA,RSS IF ZERO JMP DBN,I RETURN LDB DBC CHECK AGAINST BUFFER COUNT CMB ADB A SSB IF LESS THAN COUNT JMP DBN,I OK JMP INER NO THEN ERROR SKP * CLEAR BUFFER * PCB JSB DBIN GET ANY PARAMETERS LDA TMP+1 CHECK IF DELETE ALL SZA ? JMP *+3 STA DBC YES CLEAR COUNT JMP DBBC JSB CLSE NO CLOSE UP AREA JMP DBBC * * * REPLACE * DBR JSB DBIN GET ANY PARAMETERS LDA TMP+1 CHECK, IF SZA,RSS ZERO? JMP INER IF SO THEN ERROR JSB CLSE CLOSE AREA THATS REPLACED JMP DBI. GOTO INSERT SECTION * * * OUTPUT BUFFER COUNT * DBBC JSB .FMT OUTPUT BUFFER COUNT DEF DBBCM LDB DBC JMP OPLN. DBBCM ASC 4,BF CT #/ SKP * CLOSE UP BUFFER * CLSE NOP ADA .M1 BACK UP ONE STA TMP+1 FOR INSERT LDB TMP+2 CHECK FOR SECOND SZB NUMBER JMP *+4 YES LDB A NO- THEN USE FIRST+1 INB STB TMP+2 SAVE IT CMB,INB * ADB A * CORRECT BUFFER ADB DBC * COUNT STB DBC * LDB TMP+2 SET ADDRESSES ADB DBD ADA DBD STA TMP+3 CLSE1 JSB DBENC LAST ADDRESS? JMP CLSE2 YES LDA B,I MOVE DATA STA TMP+3,I ISZ TMP+3 INB LDA B JMP CLSE1 NO MOVE NEXT WORD CLSE2 LDA TMP+3 JSB DBENC LAST ADDRESS? JMP CLSE,I CLA STA TMP+3,I ISZ TMP+3 MOVE TO NEXT ADDRESS JMP CLSE2 * DBENC NOP CMA IS A> ADA DBE END OF BUFFER SSA,RSS ? ISZ DBENC YES JMP DBENC,I SKP DBI JSB DBIN GET ANY PARAMETERS LDA TMP+1 CHECK IF INSERT SZA,RSS AFTER END OF BUFFER LDA DBC YES STA TMP+1 DBI. LDA TMP+1 IF NO LINE ADA DBD ADD ADDRESS STA TMP+1 SAVE IT JSB DBENC IS BUFFER FULL JMP DBBF YES JSB GIFO CALL FOR INPUT DBI0 LDA TMP+1 STA TMP+2 LDA TMP+1,I SAVE CURRENT CONTENTS STA TMP+3 JSB GTI GET INPUT LDB A LDA DBC ADA DBD JSB DBENC IS BUFFER FULL? JMP DBBF STB TMP+1,I STORE IT ISZ TMP+1 MOVE UP ADDRESSES DBI1 ISZ TMP+2 LDA TMP+2 JSB DBENC LAST ADDRESS? JMP DBI2 YES LDB TMP+3 MOVE REST OF BUFFER LDA TMP+2,I DOWN STB TMP+2,I STA TMP+3 JMP DBI1 NO MOVE MORE DBI2 ISZ DBC ADD ONE TO COUNT JMP DBI0 NO DBBF JSB .FMT YES TELL OPERATOR DEF DBFLM JMP DBBC EXIT DBFLM ASC 6,BUFFER FULL/ SKP * GET INPUT * GTI NOP LDA TMP DOES HE WANT AND .177 CPA AA ASCII? JMP GTI0 YES JSB GETB GET A BLOCK JMP DBDNE ASK IF DONE SEZ IF IT'S ASCII DONT SWAP A&B LDA B JMP GTI,I GTI0 JSB GETC GET A CHARACTER JMP DBDNE ASK IF DONE JMP GTI,I DBDNE JSB .FMT OUTPUT DONE? DEF DNEM JSB GIFO CALL FOR INPUT JSB GETB GET ANSWER JMP DBDNE NO INPUT CPA AYE YES JMP DBBC