ASMB,R * <800822.0737> * * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * * NAME: EDIT4 * SOURCE: 92074-18011 * RELOC: PART OF 92074-12002 * PGMR: J.D.J. * * NAM EDIT4,5,51 92074-1X011 REV.2034 800818 * ENT EDIT4 ENT ED%SC SCREEN COPY ENT ED%SM SCREEN MODE ENT ED%QP DVR05 Q COMMAND ENT ED%SL SCREEN MODE LIST ENT ED%SE SET CODE ENT ED%SH SHOW CODE ENT ED%.T TABS ENT ED%TI TI TIME COMMAND ENT ED%.J JOIN COMMAND ENT ED%H2 EXT KEY * EXT SHOW EXT EHLP2 EXT ADDSK * EXT FTIME * * * EXT KEYFG EXT SNEXT * EXT PSL1 EXT L1LIN EXT L1FLG EXT L1SAV EXT L2LIN EXT ENDCK EXT ROLLN * EXT SETAB SET LINES SPEC FLAGS TO ABSOLUTE * EXT .LBT,.SBT,.MBT,.MVW,.CMW,.XFER,.ENTR EXT CNUMD EXT $CVT1,$CVT3 * EXT SRTN * EXT ./B1 EXT TRN EXT PRINT EXT PSLN EXT ./R EXT LSTSB EXT TR EXT ECH EXT ECHL EXT ECCNT EXT PBKE EXT ELNG EXT EBUFF EXT RBUFF EXT RLNG EXT RCCNT EXT PATCH EXT CD1ST EXT OUTCR EXT TBUFF EXT OCCNT EXT OUTBK EXT EOFLN EXT LST EXT LSTA EXT LSTSZ EXT WRTLN EXT SWPET EXT SLNG EXT TTYDV EXT TSFLG TIME STAMP FLAG EXT ATLOG EXT LSTLU EXT ERR EXT DISPL EXT NODE1 EXT NODE3 EXT EOFPR EXT L1ERR EXT L2ERR EXT CSTRP EXT NUMIN EXT DOUTP EXT DFL1S MOVE TO LINE SPEC 1 , DEFAULT TO DOT EXT TTYNO EXT CDVR5 EXT LULOG EXT TTYLU EXT MAXOP EXT LINES EXT T#REC EXT TRFLG EXT BKFLG EXT LSTFG EXT MODFG EXT NLFLG EXT UNFLG EXT R1STF FIRST REPLACE BY ./R$ FLAG EXT SPFLG EXT NSAVE EXT PSSAV EXT MLFLG * EXT BYCNT EXT TMSIZ EXT TMDFT EXT ABOVE EXT BELOW EXT OLAP EXT QSFLG EXT DSPFG EXT ^DSPF EXT B^FNM EXT FNSIZ EXT SSTRT EXT SMTSV EXT SMBSV EXT DOWN EXT Q#LST * * * * EXT ./QT EXT ASK EXT SETOK EXT PUNCT EXT GETNM EXT NUMIN EXT LST EXT SWPET EXT ASCII EXT NOLSP * EXT ERR EXT NODE1 * EXT ASKFG ASK FLAG EXT FOLDF CASE FOLDING FLAG EXT FDFLG CASE FOLDING FLAG 100000=> DON'T FOLD 0=> FOLD EXT REFLG REGULAR EXPRESSION FLAG EXT DSPFG DISPLAY FUNCTION FLAG EXT FRTNF FIND RETURN FLAG EXT ANCCH ANCHOR CHAR EXT INDEF INDEFINATE MATCH CHAR EXT ESCCH ESCAPE CAHR EXT BAR COMMAND SEPERATOR EXT DLMTR PROMPT EXT TABCH TAB CHARACTER EXT VWABV VERTCAL WINDOW ABOVE EXT VWBLW " " BELOW EXT ABOVE SCREEN WINDOW ABOVE EXT BELOW SCREEN WINDOW BELOW EXT OLAP SCREEN OVERLAP EXT WIND1 WINDDOW START COLUM EXT WIND2 -WINDOW STOP COLUMN EXT TBUFF POINTER TO OUTPUT BUFFER EXT TAB0 TAB BUFFER EXT MAXOP MAX LINE LENGTH EXT MAXIN EXT MAX EXT / PROMPT EXT LN PROMPT LENGTH EXT OCCNT OUTPUT BUFFER COUNT EXT SPFLG LEADING SPACES FLAG EXT TTYDV EXT TAB0 TAB BUFFER * EXT ./R$ REPLACE PENDING LINE EXT OUTCR PUT CHAR IN T BUFF EXT UNDOD UNDO SET UP EXT I/PSB EXT SCH EXT ENDCK * EXT DISPL EXT ERR * EXT SLNG * A EQU 0 B EQU 1 * ************************ * EDIT4 JMP SRTN JUMP BACK TO MAIN * ED%SH NOP JSB KEYST SET KEY JSB SHOW GO GIVE HELP MESSAGES DEF SHOWR SHOWR EQU * JMP NODE1 RETURN * * SECOND PART OF HELP SEGMENT * * ED%H2 NOP JSB EHLP2 DEF EHL2R EHL2R EQU * JMP ED%H2,I * ******************************************* * M32 DEC -32 M10 DEC -10 M7 DEC -7 M6 DEC -6 M3 DEC -3 M2 DEC -2 M1 DEC -1 .1 DEC 1 I.1 OCT 100001 .2 DEC 2 .3 DEC 3 .4 DEC 4 .5 DEC 5 .6 DEC 6 .10 DEC 10 .12 DEC 12 .15 DEC 15 .39 DEC 39 .40 DEC 40 .25 DEC 25 .77 DEC 77 .100 DEC 100 K32 OCT 77777 * B17 OCT 17 B40 OCT 40 A BLANK B77 OCT 77 * "R" OCT 122 "O" OCT 117 "B" OCT 102 "S" OCT 123 "D" OCT 104 SPSP ASC 1, * MSPSP DEF SPSP * SLASH OCT 57 PLUS OCT 53 "@" OCT 100 "^" OCT 136 ">" OCT 76 "." OCT 56 "C" OCT 103 * TMASK OCT 240 MASK FOR CNTR-L D BITS DVR05 OCT 2400 MASK FOR DRIVER TYPE 5 * * TEMP BSS 1 CAN'T DO A JSB AND EXPECT TEMP TO SAY ELSAV BSS 1 ELNG SAVE HERE DURING A SCREEN READ ESB0B DBL ESBF0 BYTE POINTER TO E SAVE BUFF ESBF0 BSS 75 SAVE AREA FOR EBUFF SRFLG BSS 1 IF -1 THEN DO SCREEN READ * * * ******************************************************* * * ED%SC CCA SNARF MODE STA SNRFG SET SNARF FLAG JSB UNDOD SET UP FOR A POSSIBLE UNDO STA TRFLG SET TRANSFER FLAG CLA CLEAR STA LSTFG LIST FLAG JSB TR TRNASFER PENDING LINE JSB SREAD CLA CLEAR STA SNRFG SNARF FLAG JSB QSEX CLEAN UP KEYBOARD LOCK JMP NODE1 * SNRFG DEC 0 IF -1 THEN DON'T REMOVE FIRST 2 CHAR ON SCREEN READ * * ************************************************** * * SCREEN MODE * ED%SM EQU * * CLA CLEAR STA QSFLG RETURN TO SCREEN MODE FLAG JSB PRINT CLEAR DISPLAY,SET MARGINS + MEMORY LOCK ON DEF ./QS2 DEC -33 OCT 015532 < Z > DISPLAY FUNCTIONS OFF OCT 015543 < c > LOCK KEYBOARD OCT 015530 < X > FORMAT OFF OCT 015555 < m > MEMORY LOCK OFF OCT 015522 < R > INSERT OFF OCT 015446 < & > POSITION CURSOR TO 1ST ROW AND COL ASC 3,a0r00C OCT 015464 < 4 > SET LEFT MARGIN OCT 015502 < B > CURSOR DOWN OCT 015504 < D > CURSOR LEFT ( WILL WRAP) OCT 015465 < 5 > SET RIGHT MARGIN OCT 015510 < H > HOME UP OCT 015512 < J > CLEAR DISPLAY OCT 015554 < l > MEMORY LOCK ON OCT 057400 < _ > * * * ./QS2 CLA CLEAR STA SPFLG LEADING SPACES FLAG STA NLFLG NUMBER LIST FLAG LDA L1LIN STARTING LINE NUMBER LDB ^TOPL GET A POINTER TO SPECIAL START LINE JSB WRTSL GO WRITE OUT START LINE CLA CLEAR STA TRFLG TRANSFER FLAG CCA SET STA MLFLG MEMORY LOCK FLAG STA LSTFG AND LIST FLAG LDA Q#LST GET NUMBER OF LINES TO LIST JSB TRN AND LIST THEM CLA CLEAR STA MLFLG MEMORY LOCK FLAG LDA SSTRT COMPUTE NUMBER OF CMA,INA LINES ADA LINES LISTED STA Q#LST ADA L1LIN AND ALSO ADA M1 COMPUTE THE STOP LINE NUMBER STA L2LIN AND SAVE AS LINE SPEC 2 LDA SSTRT GET START LINE NUMBER JSB PSLN RETURN FILE TO THERE LDA L1SAV IF LINE SPEC GIVEN LDB L1FLG THEN POSITION CURSOR TO IT SSB WITHOUT ANY OFFSET STA DOWN LDA L1LIN COMPUTE CMA,INA LINES TO MOVE ADA DOWN CURSOR DOWN WHEN LIST IS FINISHED SSA TEST FOR NEGITIVE .QSNS CCA YES - SET NEG TO WE WILL CENTER STA DOWN SET CURSOR DOWN MOVEMENT. LDA L2LIN GET LINE 2 NUMBER LDB ^BOTL GET POINTER TO SPECIAL BOTTOM LINE JSB WRTSL WRITE OUT THE LINE LDB DOWN GET NUMBER OF TO MOVE DOWN SSB,RSS IF NEGITIVE THEN CENTER CURSOR JMP .QS12 POSITIVE - USE AS IS LDB Q#LST CENTER CURSOR, GET NUMBER LISTED CLE,ERB DIVIDE BY 2 STB DOWN .QS12 CMB MAKE NEGITIVE AND SUBSTRACT ONE ADB Q#LST TEST FOR AT LEST THAT MANY LISTED CLA SET A REG TO ZERO SSB IF POSITIVE THEN OK STA DOWN NEGITIVE - POSITION AT ROW 0 ISZ DOWN BUMP BECAUSE TOP LINE ADDS ONE LDA DOWN POSITION SCREEN TO TEN ABOVE ADA M10 WHERE CURSOR WILL SSA BE . TEST FOR NEGITIVE. CLA YES - POSITION AT ROW ZERO STA DOWN1 JSB CNUMD CONVERT DOWN1 TO ASCII DEF .QS.1 DEF DOWN1 DEF FDOWN * .QS.1 JSB CNUMD CONVERT DOWN TO ASCII DEF .QS.2 DEF DOWN DEF ADOWN .QS.2 JSB PRINT MOVE SCREEN AND CURSOR DEF .STAB DEC -24 OCT 15446 < & > ASC 1,a EXTRA SPACE FDOWN BSS 3 OCT 051033 < R > ASC 1,&a ADOWN BSS 3 OCT 051033 < R > ASC 1,b_ ESC b - UNLOCK KEYBOARD * DOWN1 BSS 1 * .STAB EQU * *.STAB JSB SETAB SET UP LINE SPEC FLAG FOR ABOLUTE * THE COMMNADS WILL FILL IN THE VALUES LATER ! ./QS3 JSB HONST SET HONSET INPUT MODE * ./QS4 CLA STA ECCNT CCA STA SRFLG SET SCREEN READ FLAG JSB TTYNO READ IN THE LINE - NO PROMPT MODE LDB ELNG INPUT LINE SZB,RSS IF LINE IS ZERO JMP ./QS4 LENGTH THEN CAN'T BE A COMMAND LDA MAXIN IF LINE IS CMA,INA MAX LENGTH CPA ELNG THEN JMP ./QS4 CAN'T BE A COMMAND SO GET NEXT LDA =D1 CPA ELNG JMP .QSRC ONLY ONE CHAR - MUST BE A READ * LDB EBUFF TEST IF LAST TWO BYTES MATCH CLE,ELB MAKE IT A BYTE ADDRESS ADB ELNG ADB =D-2 JSB .LBT GET THE NEXT TO LAST BYTE STA TEMP JSB .LBT GET LAST BYTE XOR TEMP TEST IF THEY ARE THE SAME SZA,RSS STA SRFLG CLEAR SCREEN READ FLAG FOR NO READ. (A REG IS ZERO) * .QSRC JSB NORMA RESTORE TO MODE LDB EBUFF GET CLE,ELB LAST CHAR ADB ELNG ADB =D-1 JSB .LBT CLB CLEAR B REG BECUASE IT IS USED AS A FLAG CPA %P PREV SCREEN ? LDB ^QS%P YES - GET COMMAND HANDLER CPA %S START HERE ON NEXT SCREEN ? JMP .QSSC YES - GO READ CURSOR POSITON CPA %X START HER WITH EXTRA LARGE SCREEN ? JMP .QSXC YES - GO READ CURSOR POSITON CPA %F FOLLOWING SCREEN ? LDB ^QS%F YES - GET COMMAND HANDLER ADDRESS CPA %Q QUIT SCREEN MODE LDB ^QS%Q YES - GET COMMAND HANDLER CPA %C SCREEN COMMAND MODE ? JMP .QSCC YES - GO GET COMMAND CPA %O IS IT A COPY ONE LINE JMP .QS%O YES - GO DO IT SZB,RSS IS B REG STILL ZERO ? JMP ./QS3 YES - NOT A COMMAND - STAY IN SCREEN MODE .QSC1 STB SCCMD NO - SAVE AS ADDRESS OF COMMAND HANDLER LDB SRFLG TEST SCREEN READ FLAG SSB JSB SREAD SET SO READ SCREEN JMP SCCMD,I GO DO COMMAND * SCCMD BSS 1 COMMAND HANDLER ADDRESS SAVE HERE * %C OCT 3 %F OCT 6 %O OCT 17 %P OCT 20 %Q OCT 21 %S OCT 23 %X OCT 30 * ^QS%P DEF .QS%P ^QS%S DEF .QS%S ^QS%F DEF .QS%F ^QS%Q DEF .QS%Q ^QS%C DEF .QS%C * .QSSC JSB CURPS GET CURSOR POSITION LDA ABOVE ADA BELOW GET DEFAULT SCREEN SIZE * INA .QSS1 STA %SSIZ AND SET AS SCREEN SIZE. LDB ^QS%S GET COMMAND HANDLER ADDRESS JMP .QSC1 AND CONTINE PROCESSING * .QSXC JSB CURPS GET CURSOR POSITION LDA K32 GET A LARGE NUMBER JMP .QSS1 AND CONTINUE PROCESSING * .QSCC LDA SRFLG GET SCREEN FLAG LDB "\_" ASSUME NO READ SSA IF SET THEN READ LDB "/_" SET - USE A DIFFERENT PROMPT STB QSCP PATCH IN THE PROMPT JSB PRINT INSET A LINE AND PRINT THE PROMPT DEF .QSCI DEC 7 OCT 015532 < Z > DISPLAY FUNCTIONS OFF OCT 015514 < L > INSERT LINE OCT 015446 < & > CURSOR ABSOLUTE POSITION ASC 2,a00C TO COLUMN ZERO OCT 015464 < 4 > SET LEFT MARGIN QSCP BSS 1 PROMPT PATCH IN HERE * "/_" ASC 1,/_ BACKARROW SUPPERSSES CRLF "\_" ASC 1,\_ BACKARROW SUPPERSSES CRLF * .QSCI JSB TTYNO INPUT LINE WITH NO PROMPT INTO EBUFF JSB CURUP MOVE THE CURSOR UP DO TO CR LF LDA ELNG GET LENGTH OF INPUT BUFFER SZA,RSS TEST FOR ZERO JMP .QSC2 YES - JUST REMOVE LINE AND STAY IN SMODE STA RLNG NO - SET LENGTH IN INPUT BUFFER INA CLE,ERA STA TEMP COPY COMMAND TO IT. CLA STA RCCNT LDA EBUFF LDB RBUFF JSB .MVW DEF TEMP NOP JSB CURPS GET CURSOR POSITION JSB DELLN DELETE THE COMMAND LDB ^QS%C GET A POINTER TO THE AFTER READ COMMAND HANDLE JMP .QSC1 GO DO SCREEN IF NEEDED * .QSC2 JSB DELLN REMOVE THE LINE JMP ./QS3 RETURN TO SCREEN MODE * .QS%C CLA,INA TURN ON COMMAND IN RBUFF FLAG STA PATCH STA CD1ST SET SO COMMAND WILL BE RE-LISTED JSB ADDSK ADD LINE TO COMMAND STACK DEF .Q%C1 DEF RBUFF,I DEF RLNG .Q%C1 EQU * LDA L2LIN GET WHERE SCREEN STOPED STA SMBSV SAVE AS WHERE TO STOP NEXT SCREEN CLA STA LSTFG CCA SET STA TRFLG TRANSFER FLAG AND STA QSFLG RETURN TO SCREEN MODE FLAG LDA L1LIN GET WHERE SCREEN STARTED STA SMTSV SAVE AS WHERE TO START NEXT SCREEN ADA CURRW ADD CURSOR ROW STA DOWN SAVE AS WHERE TO RETURN CURSOR JSB ROLLN ROLL FILE TO THIS POSITION JSB QSEX EXIT SCREEN MODE JMP NODE3 GO DO LINE MODE COMMAND * *** * * .QS%O JSB PRINT DEF .QSO1 DEC -16 ASC 8,&a0C4D5CA_ * ABSOLUTE POSTION TO COLUMN ZERO, SET LEFT MARGIN, CURSOR LEFT * (WILL WRAP), SET RIGHT MARGIN CURSOR RIGHT ( WILL WRAP BACK), CUSOR UP * * .QSO1 JSB SLINE READ ONE LINE CCA ADA ELNG TEST IF IT FITS WITHIN SMAX ADA MSMAX LDB ESCL SSA CLB YES - JUST INSERT ONE LINE STB QSOLN SET NULL OR INSERT LINE JSB PRINT NO - INSERT TO LINES DEF .QSO2 DEC -5 QSOLN BSS 1 ESCL ASC 2,L_ < L > UNDERSCORE * .QSO2 CCA SET SCREEN MODE LIST FLAG STA MLFLG LDA EBUFF LDB ELNG JSB LST CLA STA MLFLG JSB PRINT DEF ./QS3 DEC -17 ASC 9,DDD5CCCA_ RESET RIGHT MARGIN * * .QS%P LDA OLAP DEFAULT TO (SPAN SIZE - OVERLAP) CMA,INA MAKE IT NEGITIVE ADA ABOVE ADA BELOW CMA,INA A REG. HAS THE NUMBER OF LINES TO MOVE UP ADA L1LIN AND MOVE NEXT START LINE UP BY THIS MANY ADA =D-1 JMP .QSM1 GO COMPLETE COMMAND * .QS%S LDA CURRW GET CURSOR ROW NUMBER ADA L1LIN ADD OLD START LINE STA DOWN SET CURSOR DOWN LINE TO NEXT START LINE LDB %SSIZ GET SCREEN SIZE JMP .QSM2 GO COMPLETE COMMAND * .QS%F LDA OLAP GET MINUS OVERLAP CMA,INA MAKE NEGITIVE ADA L2LIN MOVE DOWN N LINES.(SREAD UPDATES L2LIN) INA .QSM1 CCB SET DOWN TO -1 STB DOWN SO WE WILL CENTER LDB ABOVE COMPUTE SCREEN SIZE ADB BELOW .QSM2 SSA TEST IF START IS NEGITIVE CLA,INA YES - USE LINE 1 STA SMTSV SET AS NEXT START LINE ADA B COMPUTE NEXT STOP LINE SSA TEST IF IT WENT NEGITIVE LDA K32 YES - USE A VERY LARGE NUMBER INSTEAD STA SMBSV AND SET. LDA L2LIN GET BOTTOM LINE OF THIS SCREEN LDB SMTSV TEST IF START LINE IS PAST IT CMB,INB ADB A SSB NEGITIVE STA SMTSV YES - GO SET LAST LINE AS START LINE JMP SNEXT GO WRITE NEXT SCREEN * ****************************************** * * WRTSL - BUILD AND WRITE OUT SPECIAL SCREEN LINE * A REG - LINE NUMBER TO BE PATCH IN * B REG - START ADDRESS OF SPECIAL LINE * IF IT IS ^BOTL THEN SPECIAL STUFF PATCH * WRTSL NOP STB WRTTP SAVE START ADDRESS CCE SET FOR DECIMAL JSB $CVT3 CONVER TO ASCII LDB WRTTP GET POINTER TO WERE TO PUT IT ADB =D7 LINE NUMBER IS 14 CHAR IN STB ^NUML SAVE IN CASE IT GET REPACED BY EOF JSB .XFER MOVE 3 WORDS LDA WRTTP GET BACK CENTER OF LINE ADDRESS CPA ^BOTL TEST IF THIS IS THE END OF SCREEN JMP WSL10 YES - GO DO SPECIAL STUFF WSL01 EQU * COPY LDB TBUFF START JSB .MVW OF LINE TO TBUFF DEF .39 NOP LDA MAXOP COMPUTE WHERE TO PUT RIGHT MARGIN ADA MSMAX PICK SMALLER OF SSA,RSS MAX LINE SIZE AND MAX SCREEN SIZE CLA SMAX IS SMALLER, (ADD TO 0 IS A LOAD) ADA SMAX IF MAXOP THEN THIS IS MAXOP (-SMAX+SMAX) ADA M10 BUMP IT BACK TEN SSA TEST IF NOT ENOUGH CHARS LDA =D2 RIGH MARGIN LESS THAN TEN - USE (2+8) INSTEAD ADA =D8 COMPUTE WHERE TO PUT END CHARS -10+8=2 STA OCCNT AND SET OUTPUT COUNT TO THIS LENGTH LDA =D2 GET LENGTH LDB WRTTP GET CENTER LINE ADDRESS CPB ^BOTL TEST IF IT IS THE BOTTOM LINE ADA =D4 YES - ADD 4 FOR SETING RIGHT MARGIN STA WRTTP SET LENGTH FOR .MBT IN THIS TEMP LDB TBUFF GET T BUFFER ADDRESS CLE,ELB CONVERT IT TO A BYTE ADDRESS ADB OCCNT BUMP IT IT END CURRENT TBUFF LINE ADA OCCNT COMPUTE LENGTH OF STA OCCNT TBUFF AFTER THE NEXT .MBT AND SET LDA B^END GET BYTE POINTER TO END LINE JSB .MBT AND MOVE THEM IN. DEF WRTTP NOP LDA TBUFF GET BUFFER ADDRESS LDB OCCNT AND LENGTH JSB LST GO LIST THE LINE JMP WRTSL,I RETURN * * WSL10 JSB EOFLN GET EOF LINE NUMBER CPA L2LIN DOES IT MATCH LAST LINE ? RSS JMP WSL11 NO - GO CONTINUE BUILDING THE LINE LDA ^EOF YES - COVER LINE NUMBER WITH EOF LDB ^NUML JSB .XFER MOVE 3 WORDS WSL11 LDA B^BFL FILL LDB B^BNM IN BOTTON JSB .MBT LINE WITH BLANKS DEF .40 NOP LDA FNSIZ GET FILE NAME SIZE SZA,RSS TEST IF IT IS ZERO JMP WSL12 YES - JUST REUTRN STA TEMP SET AS BYTE COUNT LDA B40 GET A BLANK LDB B^BNM JSB .SBT PUT IT IN BOTTOM LINE LDA B^FNM JSB .MBT DEF TEMP NOP LDA B40 ANOTHER BLANK JSB .SBT WSL12 LDA WRTTP GET BACK LINES ADDRESS JMP WSL01 CONTINUE BUILDING LINE * WRTTP BSS 1 SAVE AREA FOR WHICH LINE POINTER ^NUML BSS 1 ADDRESS OF WHERE TO PUT LINE NUMBERS * * ^EOF DEF EOF EOF ASC 3, EOF * TOPL ASC 7,>>****** line THIS IS \ ASC 8,XXXXXX ********* A TABLE.! ASC 25, cntl Q reads *** cntl Q cntl Q aborts ************* / ^TOPL DEF TOPL * BOTL ASC 7,>>------ line \ THIS IS ASC 8,XXXXXX --------- ! A TABLE. ASC 5,---------- ! BNAME BSS 20 / ^BOTL DEF BOTL BFILL ASC 20,-------------------------------------------------- B^BNM DBL BNAME B^BFL DBL BFILL * ^ENDL DEF ENDL B^END DBL ENDL ENDL ASC 1,<< \ THIS OCT 015504 < D > CURSOR LEFT ! OCT 015465 < 5 > SET RIGHT MARGIN / TABLE * ** %SSIZ BSS 1 NEXT SIZE FROM SCREEN COMMAND * ************************ * * EXIT SCREEN MODE BECAUSE OF LIN1 ONE ERROR * SL1ER JSB QSEX JMP L1ERR * ******************** * EDIT SCREEN MODE BECAUSE OF LINE 2 ERROR * SL2ER JSB QSEX JMP L2ERR * * ********************* * * * .QSER JSB QSEX EXIT SCREEN MODE WITH ERROR JMP ERR * ************************* .QS%Q JSB QSEX EXIT SCREEN MODE; LIST PENDING LINE JMP DISPL * * ***************************************** * * EXIT SCREEN MODE - * * QSEX NOP JSB PRINT THEN CLEAR DISPLAY DEF QSEX,I RETURN DEC -28 OCT 015532 < Z > DISPLAY FUNCTIONS OFF OCT 015555 < m > MEMORY LOCK OFF OCT 015522 < R > INSERT OFF OCT 015446 < & > POSITION CURSOR TO 1ST COL ASC 2,a00C OCT 015464 < 4 > SET LEFT MARGIN OCT 015502 < B > CURSOR DOWN OCT 015504 < D > CURSOR LEFT ( WILL WRAP) OCT 015465 < 5 > SET RIGHT MARGIN OCT 015506 < F > HOME DOWN OCT 015512 < J > CLEAR DISPLAY OCT 015523 < S > ROLL UP OCT 015542 < b > KEYBOARD ENABLE * ************************* * CURPS NOP READ CURSOR POSITION JSB SLSU SET UP TTY LU JSB PRINT DEF CURP0 DEC -6 OCT 15501 < A > CURSOR UP OCT 15532 < Z > DISPLAY FUNCTIONS OFF OCT 15541 < a > CURSOR ABS SENSE CURP0 JSB TTYNO INPUT POSITION JSB SLRS RESTORE TTY LU JSB ECH SRTIP ESC JMP CURP3 NONE SO USE ZERO JSB ECH STRIP & JMP CURP3 JSB ECH STRUP a JMP CURP3 CURP1 JSB DIG3# GET 3 DIGIT NUMBER JSB ECHL JMP CURP3 CPA "R" WAS THIS THE ROW ? JMP CURP2 YES - THEN WE'RE DONE JMP CURP1 GO TRY AGAIN IF THIS IS ROW * CURP2 LDA D3NUM GET ROW NUMBER ADA M1 SUBRATCT ONE BECAUSER OF TOP LINE SSA TEST IF WE WERE ON TOP LINE CURP3 CLA YES - FORCE IT TO LINE ZERO ALSO STA CURRW STA CURAR LDA ELNG THROW AWAY STA ECCNT REST OF INPUT LINE . JMP CURPS,I RETURN * CURRW BSS 1 CURSOR ROW AFTER ADJUSTING FOR CONTINUATION LINES CURAR BSS 1 CURSOR READ FROM TERMINAL * * DIG3# NOP CONVERT 3 DIGITS IN E BUFF TO A NUMBER LDA M3 STA TEMP CLA D3#.1 MPY .10 STA D3NUM JSB ECH GET NEXR CHAR JMP DIG3#,I IF NONE THEN GIVE UP AND B17 CONVERT ASCCII TO BINARY ADA D3NUM ISZ TEMP JMP D3#.1 STA D3NUM SAVE FINAL NYUMBER JMP DIG3#,I RETURN * D3NUM BSS 1 * ************************************************** * DELLN NOP DELETE ONE LINE FROM SCREEN LDA ATLOG GET LAST TRANSMISSION LOG AND TMASK SZA IF ZERO THEN NOT CNTRL D JMP DELN1 IT WAS CNTRL - DON'T MOVE CURSOR UP JSB PRINT DEF DELLN,I RETURN WHEN FINISHED DEC -3 OCT 015515 < M > DELETE LINE ASC 1,_ BACKARROW * DELN1 JSB PRINT DEF DELLN,I DEC -5 OCT 015502 < B > CURSOR DOWN OCT 015515 < M > DELETE LINE ASC 1,_ BACKARROW * ************************************************************* * SREAD NOP READS SCREEN INTO DESTINATION FILE. * TERMINATES WHEN STOP LINE IS FOUND OR * MAX(24,Q#LST) ZERO LENGHT LINES READ. * SR0 JSB PRINT HOME CURSOR,FIX MARGIN, MEM LOCK OFF DEF SR1 DEC -29 OCT 015532 < Z > DISPLAY FUNCTIONS OFF OCT 015543 < c > LOCK KEYBORRD OCT 015522 < R > INSERT OFF OCT 015555 < m > MEMORY LOCK OFF OCT 015530 < X > FORMAT MODE OFF OCT 015446 < & > POSITION CURSOR TO ROW 0 COL 0 ASC 3,a00r0C OCT 015464 < 4 > SET LEFT MARGIN OCT 015502 < B > CURSOR DOWN OCT 015504 < D > CURSOR LEFT ( WILL WRAP ) OCT 015465 < 5 > SET RIGHT MARGIN OCT 015510 < H > CURSOR HOME ASC 1,_ SR1 EQU * * CLA CLEAR THE STA #READ THE NUMBER OF LINES TO DEST FILE COUNTER STA LINE# AND THE ROW NUMBER ON THE SCREEN CCA SET WARN FLAG TO -1 STA WRNFG TO SUPPESS 'SAVE WHAT ?' MESSAGE STA MODFG WE ARE MODIFING THE FILE SO SET THE FLAG LDA SNRFG GET SNARF FLAG SZA SET ? JMP SNRF1 YES - SKIP CHECKING FIRST LINE SR2 JSB SLINE READ FIRST LINE LDA ELNG MAKE SURE THERE ARE AT LEAST 8 BYTES ADA =D-8 SSA JMP SR08 NO START LINE FOUND LDA ^TOPL GET ADDESS OF COMPASION LINE LDB EBUFF AND ADDRESS OF LINE READ JSB .CMW COMPARE THEM DEF .4 FIRST 8 BYTES NOP JMP SR10 STRING ARE EQUAL - NOP NOT EQUAL ( LESS) SR08 JSB PRINT HOME CURSOR SO WE WILL RE-READ THE LINE DEF SR09 DEC -3 OCT 015550 < h > ASC 1,_ SR09 CLA,RSS SR10 CCA SET START OK FLAG STA STROK SET START WARNING * * LOOP UNTIL END OF SCREEN FOUND * SNRF1 EQU * SR20 JSB SLINE SR21 LDA ELNG MAKE SURE THE ARE AT LEAST 10 BYTES SZA,RSS IS IT ZERO ? JMP SRZC1 YES - GO LOOK FOR MORE OF ZERO LEN LINES ADA =D-8 SSA JMP SR22 NO - SO THIS CAN'T BE STOP FLAG LDA SNRFG IS THIS SNARF MODE ? SZA JMP SR22 - YES - SKIP TEST LDA ^BOTL GET POINTER TO COMPARSION LINE LDB EBUFF AND POINTER OF LINE READ JSB .CMW COMPARE DEF .4 10 BYTES NOP JMP SR30 SUCESSFUL FIND - DONE READING SCREEN NOP NOT EQUAL(LESS) SR22 JSB SLOUT NOT EQUAL - OUTPUT LINE TO DEST. FILE JMP SR32 ERROR - STOP READING, SAVE ORIGINAL JMP SR20 * * SRZC1 LDA M24 INITIALIZE ZERO LINE COUNT ADA Q#LST USE MAX(24,NUMBER OF LINES LISTED) SSA IF NEG THEN Q#LST IS < 24 CLA ADA .24 CMA,INA MAKE IT NEGITVE STA MAXZC SAVE AS MAX ZERO LEN LINESN STA ZCNT SAVE A LOOP COUNT * SRZC2 JSB SLINE READ NEXT LINE CLA CHECK FOR CPA ELNG ZERO LEN INPUT JMP SRZC4 YES IT IS ZERO LEN. - GO TRY NEXT ONE LDA ZCNT NOT ZERO LEN. OUTPUT BLANK LINES CMA COMPUTE NEGITVE OF NUMBER ADA MAXZC OF BLANK LINES =(-ZCNT)-1-15 STA ZCNT AND SAVE LDA ELNG FUDGE A ZERO LENGTH LINE STA MAXZC KEEP REAL LENGTH HERE WHILE WE ARE DOING IT CLA STA ELNG AND RESTORE IT. SRZC3 JSB SLOUT OUTPUT THE 'ZERO LENGTH' LINE JMP SR32 ERROR - STOP READING AND DON'T DELETE ORIGINAL ISZ ZCNT ENOUGH BLANK LINES ? JMP SRZC3 NO - LOOP LDA MAXZC YES - GET BACK REAL EBUFF LENGTH STA ELNG AND RESTORE IT. JMP SR21 YES - CONTINUE READING SCREEN * SRZC4 ISZ ZCNT TEST FOR ENOUGH ZERO LINES TO TERMINATE JMP SRZC2 NO - TRY NEXT LINE CLA,RSS YES - CLEAR END OK FLAG SR30 CCA SET END OK FLAG STA ENDOK UPDATE END WARNING FLAG * GET HERE WHEN SCREEN IS READ LDA SNRFG GET SNARF FLAG SZA IS THIS A SNARF READ ? JMP SREAD,I YES - JUST RTRUN NOW LDA ^STRT GET THE POINTER TO 'START' ISZ STROK TEST IF START LINE FOUND JSB WRNMS NO - START OK FLAG NOT SET - GIVE MESSAGE LDA ^STOP GET POINTER TO ' STOP' ISZ ENDOK TEST IF END LINE FOUND JSB WRNMS NO - GIVE MESSAGE ISZ WRNFG SHOULD WE DO NOT FOUND STUFF JMP SR40 YES - GO DO IT SR31 CLA NO -DELETE LINES FROM SOURCE - CLEAR STA TRFLG TRANSFER FLAG STA LSTFG AND LIST FLAG STA BKFLG AND ALLOW BREAK FLAG SR33 LDA Q#LST GET NUMBER OF LINES LISTED JSB TRN AND DELETE THEM CCA RESET STA BKFLG ALLOW BREAK FLAG SR32 LDA T#REC GET WHERE WE STOPED STA L2LIN AND SAVE IT. JMP SREAD,I RETURN * * SR39 JSB PRINT DEF SR40 DEC 68 OCT 6412 CR LF ASC 20,O saves original text written to screen OCT 6412 CR LF ASC 17,S saves text just read from screen OCT 6412 CR LF ASC 7,B saves both ( ASC 21,inserts screen text before original text) * SR40 JSB PRINT GET HERE WHEN START OR STOP LINE NOT FOUND DEF SR41 DEC -26 OCT 015542 < b > KEYBOARD ENABLE ASC 12,What should be saved ?_ SR41 JSB TTYNO GET THE RESPONSE JSB ECHL GET THE CHARACTER CLA IN CASE OF NONE CPA "S" KEEP SCREEN ? JMP SR31 YES - GO HANDLE AS NORMAL COMPLETION CPA "B" KEEP BOTH ? JMP SR32 YES - DON'T DELETE ORIGINAL CPA "O" KEEP ORIGINAL ? JMP SR50 YES - GO DO IT JMP SR39 NOT KNOWN - TRY AGAIN GIVING HELP * SR50 LDA LINES REMOVE LINES READ FROM WORKSPACE STA TEMP CLA STA LSTFG STA BKFLG CCA SET STA TRFLG TRNASFER FLAG JSB ./B1 ROLL TOP TOP LDA TEMP ADA M1 JSB TRN ROLL BACK TO WHERE WE WHERE CLA CLEAR STA TRFLG TRANSFER FLAG LDA #READ GET NUMBER OF LINES READ IN JSB TRN DELETE THEM JMP SREAD,I RETURN * * ZCNT BSS 1 MAXZC BSS 1 M24 DEC -24 .24 DEC 24 STROK BSS 1 WARNING FLAG - -1 IF << IN 1ST LINE ENDOK BSS 1 WARNING FLAG - -1 IF >> LAST LINE WRNFG BSS 1 IF SET THEN WRANING MESSAGE WAS GIVEN. * ***** * PRINT OUT WARNING MESSAGE * A REG HAS POINTER TO FIRST 6 CHARS * WRNMS NOP STA WRNFG SET WARN FLAG TO NOT -1 TO SHOW WE BEEN HERE LDB ^WMES GET ADDRESS OF MESSAE JSB .XFER MOVE THE FIRST SIX CHAR IN JSB PRINT DEF WRNMS,I RETURN WHEN DONE DEC -20 WMES BSS 3 START OR STOP PATCHED IN HERE ASC 7,line not found ^WMES DEF WMES ^STOP DEF STOP STOP ASC 3,Stop ^STRT DEF STRT STRT ASC 3,Start * * ******* * * SLOUT NOP OUTPUT LINE TO DEST FILE ISZ #READ BUMP THE NUMBER OF LINES PUT IN DEST FILE LDA ELNG GET LENGTH SZA,RSS TEST FOR ZERO JMP SLOUZ ZERO SO HANDLE ZERO LENGTH LINE LDB EBUFF NO - SEND OLD LINE OUT ( A IS LENGTH) SLOU2 JSB DOUTP JMP SLOUT,I ERROR RETURN ISZ SLOUT BUMP TO GOOD RETURN JMP SLOUT,I RETURN * * SLOUZ LDA .2 GET LENGTH LDB ^BLKS AND ADDRESS OF A ALL BLANK LINE JMP SLOU2 SET - GO CLEAR FLAG AND RETURN * #READ BSS 1 NUMBER OF LINES READ IN DEST FILE LINE# BSS 1 ROW NUMBER ON THE SCREEN OCNTS BSS 1 STORAGE OF TBUFF LENGTH DURING JOIN READ * ************************************************************** * CURUP NOP CURSOR UP ONE LINE JSB PRINT DEF CURUP,I DEC -5 OCT 015532 < Z > DISPLAY FUNCTIONS OFF OCT 015501 < A > CURSOR UP ONE LINE OCT 057400 < _ > * * HONST NOP SET HONEST MODE BIT ON TTYLU LDA TTYLU GET TTYLU STA HONSS SAVE IT LDA LULOG IOR HMASK STA TTYLU STA LULOG JMP HONST,I * HONSS BSS 1 STORAGE FOR TTYLU WHILE IN HONEST MODE * NORMA NOP RESTORE NO NORMAL MODE PRINT LDA HONSS STA TTYLU LDA LULOG AND =B77 STA LULOG JMP NORMA,I * QSNPS BSS 1 QSTYS BSS 1 * HMASK OCT 2600 * ** CNTFG BSS 1 CONTINUATION LINE PROCESSED FLAG * * ****************************** * * READ LINE OFF SCREEN - JOIN WITH NEXT LINE IF .. IN COLUMNS 79,80 * * SLINE NOP READ LINE OFF SCREEN - CLA CLEAR STA JOINF JOIN FLAG SLIN0 ISZ LINE# BUMP THE LINE NUMBER JSB SLSU SET TTYLU TO BLOCK READ MODE JSB PRINT DEF SLIN1 ELEN DEC -2 OCT 015544 < d > BLOCK TRANSER OCT 057400 < _ > SLIN1 EQU * * * READ LINE WITHOUT PUTING IT IN COMMAND STACK * LDA OCCNT SAVE OUTPUT COUNT STA OCCNS IN CASE WE JOINING LINES JSB TTYNO LDA OCCNS RESTORE STA OCCNT OUTPUT COUNT JSB SLRS RESTORE TTYLU TO NORMAL LDB ELNG CPB .80 CHECK IF LINE IS 80 CHARS JMP SLIN4 YES - MAY NEED TO JOIN LINES SLN10 ISZ JOINF IF FLAG IS -1 THEN JOIN OCCURED JMP SLINE,I NOT -1 - JUST RETURN SLIN2 JSB ECH ELSE MUST COPY TO TBUFF JMP SLIN3 END OF LINE - GO SWAP BUFFERS JSB OUTCR PUT CHAR IN TBUFF JMP SLIN2 LOOP * SLIN3 JSB SWPET SWAP E AND T BUFFERS JMP SLINE,I RETURN * * 80 CHAR LINE - CHECK FOR CONTINUE FLAG * SLIN4 LDA EBUFF GET ADDRESS OF THE BUFF ADA .39 BUMP TO LAST TWO CHARS LDA A,I GET THE CHAR THERE CPA ".." IS IT THE CONTINUE FLAGS JMP SLIN5 YES - GO JOIN LINES JMP SLN10 GO RETURN * SLIN5 LDA ELNG SHORTEN ELNG ADA M2 BY 2 TO REMOVE STA ELNG THE CONTINUE FLAGS. CCA SET JOIN FLAG STA JOINF TO -1 LDA CURAR GET CURSOR ROW NUMBER INA CMA,INA MAKE IT NEGITAVE ADA LINE# TEST IF WE ARE BEFORE CURSOR SSA,RSS ROW JMP SLIN6 YES - DON'T ADJUST CURRW CCA NO - DECREASE CURRW ADA CURRW BY STA CURRW ONE. SLIN6 EQU * * SLIN7 JSB ECH GET CHAR FROM EBUFF JMP SLIN0 NO MORE SO GO READ NEXT LINE JSB OUTCR AND SEND IT TO OUTPUT BUFFER JMP SLIN7 LOOP * JOINF BSS 1 JOIN FLAG - IF -1 THEN LINES WERE JOINED OCCNS BSS 1 SAVE AREA FOR TBUFF SIZE * .80 DEC 80 * * ********************** * * SLSU NOP SETUP FOR BLOCK MODE INPUT LDA TTYLU GET INPUT LU STA TTYSA AND SAVE IT LDA LULOG CLEAR UPPER BITS IOR EMASK STA TTYLU SAVE IT STA LULOG JMP SLSU,I RETURN * SLRS NOP RESTORE TTYLU AFTER SLINE INPUT LDA TTYSA STA TTYLU LDA LULOG AND =B77 STA LULOG JMP SLRS,I * TTYSA BSS 1 EMASK OCT 3000 * * QLEOF BSS 1 IF EOF HIT ON QLIST THEM -1 * ************************************************************** * QPTSA BSS 1 * UNSAV BSS 1 ****************************************************************** * ED%QP LDA TTYDV TEST FOR DRIVER TYPE 05B CPA DVR05 RSS YES, GO ON JMP ERR NO, ERROR LDA SLNG IF SSA AT JMP EOFPR EOF GO PRINT IT. CMA,INA TEST IF IT WILL WRAP ADA SMAX CLB CLEAR B SO WE WILL OUTPUT 2 NULLS SSA,RSS JMP .QP81 JSB PRINT DEF .QP80 DEC 24 ASC 24,Put cursor on first line when edit is complete. * .QP80 LDB ESCA .QP81 STB QPCUP CCA SET MEMORY LOCK STA MLFLG FLAG SO WE WILL GET SCREEN MODE LIST JSB LSTSB LIST THE PENDING LINE CLA CLEAR STA MLFLG MEMORY LOACK FLAG JSB PRINT POSITION CURSOR DEF .QP92 FOR DEC -5 INTRINSIC EDITING. QPCUP BSS 1 THIS WILL BE NULLS OR < A > ESCA OCT 015501 < A > OCT 057433 < _ > * .QP92 JSB TTYNO REQUEST INPUT JSB PRINT DEF .QP93 DEC -5 OCT 015522 < R > INSERT OFF OCT 015501 < A > CURSOR UP OCT 057400 < _ > .QP93 JSB SLINE READ LINE CLA TEST FOR ZERO LENGHT CPA ELNG JMP QPZER ZERO INPUT LENGHT - DON'T REPLACE. .QP94 JSB ECH MOVE CHAR TO TBUFF JMP .QP95 JSB OUTCR JMP .QP94 .QP95 JMP ./R COMPLETE THE REPLACEMENT OPERATION. * QPZER JMP DISPL DISPLAY CURRENT LINE ONLY * * * * ********************************************************* * * SMLST- SCREEN MODE LINES LIST SUBROUTINE - DOES SPECIAL CONTROL * DISPLAY FUNCTION STUFF AND LINE SPLITTING. * * LSTA IS THE ORIGINAL ADDRESS BUT IS CHANGED BY SMLST * LSTSZ IS THE ORIGINAL BYTE COUNT BUT IS CHANGED * * SMLST NOP ED%SL EQU SMLST LDA LSTLU GET LU STA LST.T SAVE IT AND B77 IOR LMASK LIST IN HONEST MODE STA LSTLU LDA LSTA GET STARING ADDRESS CLE,ELA MAKE IT A BYTE ADDRESS STA LSTBP AND SET AS THE BYTE POINTER LDA LSTSZ GET THE SIZE OF THE LINE CMA,INA TAKE NEGITIVE STA LSTCT SET AS LOOP COUNT( ALSO SPLIT LINE FLAG) SCR.1 CLB STB OCCNT CLEAR THE TEMP BUFFER COUNT STB CCFLG AND THE LIST LEADING SPACES FLAG STB LASTC AND THE LAST CHARACTER SO IT NOT A ESC LDB MSMAX INIT MAX LINE LIST SIZE TO -(MAX CHARS) STB SCRSZ SZA,RSS IS LINE LENGTH IS 0 ? (NOTE JUMP TO SCR.1) JMP SCR13 YES - SKIP SCAN FOR CONTROL CHARS * * SCAN LINE FOR CONTROL CHARS AND IF LINE IS TOO LONG. * IF ESC Z ( DISPLAY FUNCION OFF ) THEN INSERT AN ESC Y * TO TURN THEM BACK ON * IF NULL,ENQ,CR,RS,DEL DELETE THEM * SCR06 LDB LSTBP GET SOURCE BYTE ADDRESS JSB .LBT GET BYTE STA THISC SAVE THE CHARACTER STB LSTBP UPDATE SOURCE ADDRESS LDB DSPFG TEST IF WE SHOULD TURN DISP FUNCT ON SZB,RSS FLAG SET ? JMP SCR11 NO - SKIP TEST CPA NULL JMP SCR07 INGORE IT CPA ENQ JMP SCR07 INGORE IT CPA CR JMP SCR07 INGORE IT CPA RS JMP SCR07 INGORE IT CPA DEL JMP SCR07 INGORE IT LDB LASTC GET LAST CHARACTER CPB ESC WAS IT AN ESCAPE JMP LSTES YES- GO TEST FOR ESC Z SCR10 EQU * ISZ SCRSZ TEST IF PRINTING SIZE OF LINE IS TO LONG JMP SCR01 NO - GO CHECK CHECK FOR SPECIAL CHARS JMP SCRWP YES - GO DO LINE WRAP STUFF * SCR01 CPA B40 IS IT A BLANK ? JMP SCMOV YES - GO DO CURSOR POSITION STUFF SCR02 ADA M32 TEST FOR CONTROL CHAR SSA IF NEGITIVE THEN ITS A CONTROL CHAR JSB CCHAR YES - GO DO SPECIAL STUFF LDA THISC RESTORE ORIGINAL CHAR SCR11 JSB OUTCR OUTPUT THIS CHAR SCR07 LDA THISC SAVE FOR NEXT TIME STA LASTC ISZ LSTCT CHECK LOOP COUNT JMP SCR06 TRY NEXT BYTE * SCR12 LDA CCFLG TEST IF SZA THERE WAS A CONTROL CHAR IN THE LINE JMP SCRCC YES - GO DO SPECIAL END LINE STUFF SCR13 LDA .2 ADD LDB ^CRLF CR LF TO SCR20 JSB OUTBK END OF OUTPUT BUFFER. LDA OCCNT SET STA LSTSZ LINE LENGTH LDA TBUFF SET STA LSTA NEW LINE ADDRESS JSB WRTLN WRITE OUT THE LINE LDA LSTCT TEST IF ALL CHARACTER ARE USED SZA JMP SCR.1 NOT ZERO SO THERE ARE MORE - LOOP LDA LST.T NO MORE - RESTORE STA LSTLU LIST LU JMP SMLST,I DONE - RETURN * SCRSZ BSS 1 LINE SIZE ON SCREEN COUNTER( INIT -SMAX) LSTBP BSS 1 CURRENT SOURCE LINE BYTE ADDRESS THISC BSS 1 TEMP STORAGE FOR CURRENT CHARACTER LASTC BSS 1 TEMP STORAGE FOR CONT CHAR SCAN LOOP NULL OCT 0 NULL CHARACTER ENQ OCT 5 ENQUIRE CHARACTER CR OCT 15 RS OCT 36 RECORD SEPERATOR CHARACER DEL OCT 177 DELETE CHARACTER SPC 1 * ************************************************* * BLANK OPTIMIZER - IF MORE THAN 6 SPACES THEN MOVE CURSOR SCMOV LDB CCFLG IS DISPLAY FUNCTION ON ? SZB JMP SCR02 YES - JUST PUT OUT THIS SPACE SZB JMP SCR02 YES - JUST PUT OUT THIS SPACE LDA SCRSZ GET CURRENT SCREEN POSITION COUNTER STA MOVTP SAVE IT ISZ LSTCT CHECK IF THIS IS THE LAST CHAR IN THE LINE JMP SCM.2 NO - GO DO BLANK SCAN JMP SCR12 YES - GO FINSH OFF * * HERE WHEN THERE IS 1 BLANK, MORE CHARS IN LINE AND MORE ROOM SCREEN SCM.2 EQU * CLA,INA INITILIZE STA BKCNT THE BLANK COUNT SCM01 LDB LSTBP GET BYTE ADDRESS OF NEXT CHAR JSB .LBT LOAD NEXT BYTE STB LSTBP SAVE THE NEW ADDRESS * CPA B40 IS IT A BLANK ? JMP SCM02 YES - LOOP FOR NEXT JMP SCM04 NO - OUTPUT THE BLANKS FOUND SO FAR * SCM02 ISZ SCRSZ TEST SCREEN SIZE JMP SCM03 THINGS OR STILL OK - CONTINUE JMP SCM05 JUST GOT TO BIG - OUTPUT THE BLANKS * SCM03 ISZ BKCNT BUMP THE BLANK COUNT ISZ LSTCT TEST IF THIS IS THE LAST CHAR JMP SCM01 NO - LOOP FOR NEXT CHAR ** YES - STRIP BLANKS(HP2621 WILL DO IT ANYWAY) ******JSB MCUSR YES - OUTPUT THE BLANKS AND CLEAN UP JMP SCR12 GO FINISH OFF LINE * *** * SCM04 STA THISC SAVE THIS NON-BLANK CHAR JSB MCUSR MOVE CUSOR TO CURRENT COLUMN LDA B40 STA LASTC LDA THISC GET THE CHAR BACK JMP SCR10 GO CONTINUE SCAN (TEST FOR BLANK WILL FAIL) * SCM05 CCA SET SCREEN SIZE TO MINUS -1 STA SCRSZ * LAST BLANK WILL BE PUT OUT WAY LINE SPLIT CODE JSB MCUSR END OF SCREEN REACHED - MOVE CURSOR LDA B40 GET A BLANK STA THISC SET AS CURRENT CHARACTER JMP SCRWP GO SPLIT LINE * * * ************* * * MCUSR - PUT THE CHARS IN TBUFF TO MOVE THE CURSOR * FROM CURRENT POSITION (MOVTP+SMAX) TO COLUMN(SCRSZ+SMAX) * IF DIFFERENCE IS LESS THAN SIX OUTPUT SPACES * ELSE OUTPUT ESC & a XX C * MOVTP AND SCRSZ ARE NEGITIVE AND START AT -(SMAX) * MCUSR NOP LDA BKCNT TEST BLANK COUNT ADA M6 TEST IF >= 6 BLANKS SSA IF POSITIVE THE USE ESC & .... JMP MCU01 NEGITIVE - OUTPUT THE SPACES LDA SCRSZ POSITIVE - POSITION THE CURSOR ADA SMAX THIS COMPUTE THE COLUMN CCE JSB $CVT1 CONVERT TO ASCII STA MOVTP SAVE IT LDA .3 MOVE IN THE ESC & a LDB ^CMOV INTO JSB OUTBK TBUFF LDA .2 MOVE THE COLUMN LDB ^MVTP INTO JSB OUTBK TBUFF LDA "C" MOVE A 'C' JSB OUTCR INTO TBUFF JMP MCUSR,I RETURN * * MCU01 LDA BKCNT GET THE NUMBER OF BLANK T PUT OUT LDB ^BLKS GET A POINTER TO SOME BLANKS MCU00 JSB OUTBK MOVE THEM TO TBUFF JMP MCUSR,I RETURN * ^CMOV DEF CMOV CMOV OCT 015446 < & > CURSOR ABSOLUTE ASC 1,a POSITION ^MVTP DEF MOVTP MOVTP BSS 1 BKCNT BSS 1 BLANK COUNT ^BLKS DEF BLKS BLKS ASC 3, SIX BLANKS "Z" OCT 132 ASCII "Z" * BLKCT BSS 1 BLANK COUNT * *************************************************** * LINE IS TO LONG - BREAK IT INTO TWO SCRWP ADA M32 TEST FOR CONTROL CHARACTER SSA JSB CCHAR YES - GO DO SPECIAL STUFF LDA THISC GET BACK THIS CHARACTER JSB OUTCR SEND OUT THIS CHAR ISZ LSTCT BUMP COUNT TO SHOW WE USE THIS CHAR JMP SCWP1 NO - GO OUTPUT WRAP FLAG JMP SCR12 THIS IS THE LAST CHAR - THINGS ARE OK SCWP1 JSB CCHAR GO SET CONTROL CHAR FLAG LDA .2 GET A TWO LDB ^DOTS OUTPUT TWO JSB OUTBK DOTS JMP SCRCC GO TURN OFF DISP FUNCT AND LIST * ************************************************** * * ESC WAS THE LAST CHAR - CHECK IF THIS ONE IS A Z * LSTES CPA "Z" IS IT A 'Z' ? JMP LSTEZ YES - GO ADD ESC Y JMP SCR10 NO - GO TEST LOOP COUNT(CCFLG ALREADY SET) * * LSTEZ - SEND THE Z, ADD AND ESC, CHANGE THIS CHAR TO Y * (TURNS DISPLAY FUNCTION OFF THEN BACK ON) LSTEZ LDA .2 MOVE 2 BYTES LDB ^ZESC WHICH ARE Z ESC JSB OUTBK USE THE OUTPUT BLOCK TO T BUFF SUBROTUINE LDA "Y" SET THE CURRENT CHAR STA THISC TO "Y" JMP SCR10 JUMP BACK TO LOOP (CCFLG IS ALREADY SET) * * * * MAKE UP LINE WITH DISPLAY FUNCTIONS ON - TEXT - DISPLAY FUNCTION OFF SCRCC LDA .12 MOVE IN THE 12 CHAR LDB ^DFOF IT TAKES TO TURN JMP SCR20 DISPLAY FUNCTIONS OFF AND CR LF * **************** * * CCHAR - SET CONTROL CHAR FLAG AND PUT ESC Y IN BUFFER IF NEEDED * CCHAR NOP LDA CCFLG TEST CONTROL CHAR FLAG SZA JMP CCHAR,I ALREADY SET - JUST RETURN CCA NOT SET - SO SET IT NOW STA CCFLG LDA .2 PUT ESC Y LDB ^ESCY INTO JSB OUTBK TBUFF JMP CCHAR,I RETURN * ***** * CCFLG BSS 1 IF SET THEN DISPLAY FUNCTIONS IS ON * LSTCT BSS 1 PRESCAN LOOP COUNT, LINE SPLIT FLAG LST.T BSS 1 TTY LU SAVE SORAGE LMASK OCT 2600 HONEST MODE WRITE BITS MSMAX DEC -78 -(MAX SCREEN CHAR WITH DISP. FUN. OFF) SMAX DEC 78 MAX SCREEN CHAR WITH DISP. FUN. OFF ".." ASC 1,.. LINE WRAP FLAG ^DOTS DEF ".." * ^ZESC DEF ZESC ZESC OCT 055033 < Z > CENTER OF DISP F. OFF,DISP F. ON "Y" OCT 131 ASCII Y ^ESCY DEF ESCY ESCY OCT 015531 < Y > DISPLAY FUNCTIONS ON ESC OCT 33 ESC * ^DFOF DEF DFOFF ^CRLF DEF CRLF * *$$$$$$$$$$$$$$ CRLF MUST FOLLOW 'ESC D' OF DFOFF * DFOFF OCT 015532 < Z > DISPLAY FUNCTIONS OFF(MAY WRAP AROUND) OCT 015504 < D > CURSOR LEFT ONE OCT 015504 < D > CURSOR LEFT - (MAY WARP BACK) ASC 1,K < K > CLEAR LINE ( REMOVE ESC Z) OCT 015504 < D > CURSOR LEFT ( UNDER LAST CHAR ) CRLF OCT 006412 < LF> MUST NOT MOVE RELATIVE TO DFOFF * *$$$$$$$$$$$$$$ CRLF MUST FOLLOW 'ESC D' OF DFOFF * *************************************************************** SKP HED SET SET OPTIONS,TABS ED%SE JSB NOLSP MAKE SURE THE ARE NO LINE SPECS JSB CSTRP STRIP ANY COMMAS JMP ERR NOTHING LEFT SO ERROR JSB ECHL GET FIRST CHAR JMP ERR NONE SO ERROR ALF,ALF PUT IT IN HIGH BYTE STA SETKY SAVE IT JSB ECHL GET NEXT CHAR JMP ERR NONE SO ERROR IOR SETKY MAKE IT IN A PACKED KEY STA SETKY CLB USE B AS THE POINTER TO A ON,OFF OPTION CPA "AS" LDB ^ASKF GETR POINTER TO ASKING LFAG CPA "DF" LDB ^DSPF CPA "CF" JMP .FOLD CPA "RT" LDB ^FRTN CPA "RE" LDB ^REFG CPA "BE" JMP .BELL CPA "TS" LDB ^TSFG CPA "CS" JMP .CSEP CPA "EC" JMP .ESCH CPA "AC" JMP .ANCH CPA "IC" JMP .INCH CPA "TC" JMP .TBCH CPA "PC" JMP .PMCH CPA "SD" JMP .SCDF CPA "VW" JMP .VWDF CPA "WC" JMP .WIND CPA "LE" JMP .LENG CPA "SL" JMP .SLNS SZB DID B CHANGE ? JMP .ONOF YES GO SET THE FLAG JMP ERR NOT KNOWN ERROR * * ** .FOLD LDA ^FLDF GET POINTER TO -1/0 FOLD FLAG JSB ONOFF JMP ERR STA FOLDF SET DEFAULT TO OPPISITE LDA FOLDF LDB =B10000 SSA CLB STB FDFLG REAL FLAG MUST BE 100000 => NO FOLD JMP .ONF1 * * .ONOF LDA B GET POINTER IN TO A REG STA CHKNT SAVE THE POINTER IN A TEMP JSB ONOFF JMP ERR ERROR STA CHKNT,I VALUE DEFAULTED, SET COMPLEMENT IN FLAG .ONF1 JSB ENDCK TEST FOR ANYTHING ELSE JMP NODE1 GO GET NEXT COMMAND * * .SLNS JSB NUMIN GET THE NUMBER OF SCREEN LINES STA TEMP JSB ENDCK LDA TEMP SZA,RSS TEST FOR DEFAULT LDA TMDFT ZERO ENTERED SO USE DEFAULT VALUE CMA,INA KEEP AS NEGITIVE VALUE STA TMSIZ JMP NODE1 GET NEXT COMMAND * * .BELL LDA ^BELL JSB ONOFF JMP ERR ERROR - REPORT JMP .BELT TOGGLE LDA BKABL GTURN BELL ON FOR NOW; GET BACKARROW BELL STA /+1 SET INTO PROMPT LDA =D-4 SET LENGTH TO 3 STA LN LDA BELL IF WE ARE TO SET SSA JMP NODE1 THEN WERE DONE .BELT LDA /+1 ELSE TOGGLE ALF,ALF STA /+1 REVERSE ORDER OF _ AND BELL CLA,INA XOR LN TOGGLE LENGTH STA LN JMP NODE1 * BKABL ASC 1,_ BELL BSS 1 ^BELL DEF BELL * .ESCH JSB GTONE LDA "\" DEFAULT SO USE "\" STA ESCCH JMP NODE1 * .CSEP JSB GTONE SE COMMAND SEPERATOR LDA "BAR" STA BAR JMP NODE1 * .ANCH JSB GTONE LDA "^" STA ANCCH JMP NODE1 * .INCH JSB GTONE LDA "@" STA INDEF JMP NODE1 * .TBCH JSB GTONE LDA %TAB STA TABCH JMP NODE1 * .PMCH JSB GTONE LDA SLASH STA DLMTR IOR =B6400 STA / JMP NODE1 * .SCDF JSB NUMIN GET FIRST PARAMETER (ABOVE) SZA,RSS IF ZERO, GET ORIGINAL ABOVE LDA =D10 STA QD.P1 * .QD1 JSB NUMIN GET SECOND PARAMETER (BELOW) SZA,RSS IF ZERO, GET ORIGINAL BELOW LDA =D10 STA QD.P2 * .QD2 JSB NUMIN GET THIRD PARAMETER (OVERLAP) SZA,RSS IF ZERO, GET ORIGINAL OVERLAP LDA =D2 STA QD.P3 * JSB ENDCK CHECK OF END OF LINE LDB QD.P1 CHECK TO SEE IF SPAN IS ADB QD.P2 GREATER THAN OVERLAP CMB,INB ADB QD.P3 SSB,RSS SKIP IF SPAN>OVERLAP JMP ERR * * LDA QD.P1 GET AND STORE ABOVE STA ABOVE * LDA QD.P2 GET AND STORE BELOW STA BELOW * LDA QD.P3 GET AND STORE OVERLAP STA OLAP JMP NODE1 EXIT * QD.P1 BSS 1 QD.P2 BSS 1 QD.P3 BSS 1 ******************************************************************* * .WIND JSB CHKN CHECK PARAMETERS JSB NUMIN FETCH SZA START OF ADA M1 WINDOW STA WIND1 POINTER JSB NUMIN FETCH CMA,INA,SZA,RSS END OF LDA MAXIN WINDOW STA WIND2 POINTER JMP NODE1 GET NEXT COMMAND * .VWDF JSB CHKN CHECK PARAMETERS JSB NUMIN SZA,RSS LDA =D10 DEFAULT IS 10 ABOVE STA VWABV JSB NUMIN SZA,RSS LDA =D10 DEAFULT IS 10 BELOW STA VWBLW JMP NODE1 * ************************************ * .LENG EQU * JSB SETOK STRIP POSSIBLE SLASH JSB NUMIN GET REQUESTED LENGTH STA TEMP JSB ENDCK LDA TEMP SZA,RSS LDA MAX IF ZERO USE MAX ADA MAXIN IF LONGER THAN ALLOWABLE SSA,RSS MAX, USE ALLOWABLE MAX JMP .LMAX ADA MAX STA TEMP LDA MAXOP GET OLD VALUE CMA,INA ADA TEMP SSA IF OLD IS LESS THEN SKIP ASKING JSB ASK LDA TEMP .LEN1 STA MAXOP JMP NODE1 * .LMAX JSB PRINT DEF .LMX1 DEC 9 ASC 9,Length set to 150. .LMX1 LDA MAX JMP .LEN1 * ************************ * * GTONE GET ONE CHAR - MAKE SURE THERE ARE NO MORE CHAR * AND TEST THAT IT IS PUNCUTUON CHAR * IF THERE IS ONE CHAR THEN RETURN AT P+1 * IF NO CHARS RETURN TO P+1 * IF ERR JUMP TO ERROR GTONE NOP JSB CSTRP STRIP BLANKS, COMMA JMP GTONE,I DEFAULT IT JSB ECH JMP GTONE,I STA CHKNT SAVE THE CHAR JSB ENDCK TEST IF ANY MORE CHARS * LDA CHKNT GET CHAR BACK JSB PUNCT IS IT PUNCATION ? JMP ERR NO - GIVE ERROR LDA CHKNT GET IT BACK AGAIN ISZ GTONE BUMP RETURN JMP GTONE,I RETURN * * SPC 1 CHKN NOP LDA ECCNT SAVE CURRENT COUNT STA CHKNT NPARA JSB NUMIN FETCH NEXT PARAM LDA ELNG IF END OF COMMAND CPA ECCNT THEN, ALL PARAMETERS RSS WERE NUMERIC JMP NPARA ELSE, FETCH NEXT PARAM LDA CHKNT GET BACK COUNT STA ECCNT RESET COUNT AND RETURN JMP CHKN,I * CHKNT BSS 1 * ED%.T EQU * JSB ECHL GET SECOND CHAR JMP ERR NONE SO ERROR STA TEMP JSB NOLSP MAKE SURE THER AR NO LINE SPECS LDA TEMP CPA "R" TRANSFER ? JMP ./QT YES - GO DO IT JSB PBKE PUR IT BACK JSB CSTRP REMOVE COMMANS,BLANKS JMP ERR NOTHING SO ERROR JSB ECHL GET NEXT COMMAND CHAR JMP ERR NO SO ERROR ( SHOULD NOT HAPPEN) STA CHKNT SAVE IT JSB ASCII CHECK IF ASCII NUMBER JMP ./TX NO - PICK A TAB SET JSB PBKE YES -PUT IT BACK JSB CHKN CHECK PARAMETERS JMP .TNM OK SO GO SET TABS * * REPLACE LINE WITH CURRENT TIME STATRTING AT N * ED%TI STA TEMP SAVE COLUMN NUMBER LDB SLNG AT EOF ? SSB JSB ./R$ YES - REPLACE IT WITH A ZERO LENGTH LINE LDA TEMP SZA,RSS IF DEFAULT USE COLUMN 1 CLA,INA ADA =D-1 COPY SOURCE CHAR BEFORE NUMBER CMA,INA,SZA,RSS MAKE IT LOOP COMNT JMP .TIM2 STA TEMP .TIM1 JSB SCH GET SOURCE LINE CHAR LDA B40 NONE SO USE A BLANK JSB OUTCR PUT IT IN T BUFF ISZ TEMP ENOUGH ? JMP .TIM1 NO - LOOP .TIM2 JSB FTIME GET FORMATED TIME DEF .TIM3 DEF EBUFF,I .TIM3 EQU * LDA =D30 STA ELNG CLA STA ECCNT .TIM4 JSB ECH COPY TIME TO T BUFF JMP .TIM5 JSB OUTCR JMP .TIM4 * .TIM5 LDA =D-30 REMOVE NEXT 30 CHAR FROM SOURCE LINE STA TEMP .TIM6 JSB SCH JMP .TIM8 NONE SO BREAK LOOP ISZ TEMP JMP .TIM6 * .TIM7 JSB SCH COPY REST OF LINE JMP .TIM8 JSB OUTCR JMP .TIM7 * .TIM8 JSB ./R$ REPLACE LINE JMP DISPL GO DISPL * * ********************************************** * * ./TX JSB ENDCK ANY THING ESLE * .TX1 LDA CHKNT CPA "L" LIST LINE MODE TABSV JMP ./TL YES - GO DO IT CPA "S" LIST SCREEN MODE TABS ? JMP ./TS CLB SET B TO KNOWN VALUE CPA "A" SELECT TAB SET A ? LDB TAB^A YES CPA "F" TAB SET B ? LDB TAB^F YES CPA "M" TAB SET M ? LDB TAB^M YES CPA "P" TAB SET D ? LDB TAB^P YES SZB DID B CHANGE JMP TABSE YES - GO PICK TAB SET JMP ERR NO ERROR * .TNM LDA TBTMP RESET POINTER TO START OF TEMP BUFFER STA TBPNT POINTER LDA M10 SET COUNTER STA CNT1 TO -10 CLA PUT A STA TCNT ZERO IN THE LAST TAB TEMP NXTNM JSB NUMIN GET NEXT NUMBER CPA =D1 TAB IN COLOMN 1 IS ILLEGAL JMP ERR LDB TCNT GET OLD TAB STA TCNT SET THIS ONE AS OLD ONE CMA,INA,SZA,RSS TEST FOR ZERO, MAKE IT NEGITIVE JMP .TNM1 ITS ZERO - LAST TAB ADB A THIS SSB,RSS IS GERATER THAN LAST ? JMP ERR NO - ERROR INA NO, INCREMENT IT .TNM1 STA TBPNT,I STORE TAB NUMBER ISZ TBPNT BUMP POINTER ISZ CNT1 LAST TAB? JMP NXTNM NO,CONTINUE JSB ENDCK MAKE SURE THERE ARE NO MORE CHARS LDB TBTMP DONE GET POINTER TO TAB ARRAY JMP TABSE GO SET * TBTMP DEF TBTP0 TBTP0 BSS 10 * * ./TS CLA WRITE OUT SCREEN MODE TABS - STA SPFLG CLEAR SPACES FLAG ./TL EQU * LDA TABUF GET TAB BUF ADDRESS STA TBPNT AND SET TAB POINTER TO IT CLA CLEAR STA OCCNT TBUFF CHAR COUNT STA TCOL AND COLUMN COUNT TERM2 LDA TBPNT,I GET TAB COLUMN POSITION SZA,RSS END REACHED ? JMP TERM6 YES ADA TCOL NO - COMPUTE NUMBER OF COLS TO FILL SZA,RSS ZERO COLS TO FILL ? JMP TERM4 YES SSA,RSS ALREADY PAST COL ? JMP TERM5 YES STA TCNT SET COLS TO FILL TERM3 LDA B40 GET FILL CHAR JSB OUTCR AND SEND IT TO TBUFF ISZ TCOL INCREASE TAB COL ISZ TCNT CHECK IF ENOUGH FILL CHARS JMP TERM3 NO - DO NEXT TERM4 LDA B377 YES - GET A NON-FILL CHAR JSB OUTCR AND SEND IT TO TBUFF ISZ TCOL INCR TAB COLUMN TERM5 ISZ TBPNT INCR NEXT TAB POSITION POINTER JMP TERM2 AND GO FILL TO NEXT TAB POSITION TERM6 JSB SWPET SWAP TBUFF AND EBUFF LDA "_" SUPPRESS CLRF FOR FIRST HALF JSB TABLN GENERATE AND SEND 1ST HALF OF TABS CLA CLEAR STA SPFLG SPACES FLAG LDA B40 SPACE WILL GIVE CRLF FOR 2ND HALF JSB TABLN GENERATE AND SEND 2ND HALF OF TABS JMP NODE1 GET NEXT COMMAND * TABSE STB TCOL SAVE LOCATION TO GET TABS FROM LDA M10 SET LOOP COUNT TO 10 STA TCNT LDB TABUF GET TAB BUFFER ADDRESS TABS1 LDA TCOL,I GET TAB COLUMN STA B,I AND SET IT INTO TAB BUFFER SZA IF COLUMN WAS NOT ZERO ISZ TCOL BUMP FROM ADDRESS INB BUMP TO ADDRESS ISZ TCNT TEST FORM 10 TABS COPIES JMP TABS1 NO - DO NEXT JMP NODE1 YES - GO EXIT * TCOL BSS 1 TAB COL TEMP AND TAB FROM PTR TEMP * TABLN NOP SEND 39 SET TABS AND CLEAR TABS TO TERMINAL STA TCOL SAVE THE LAST CHAR FOR NOW LDA M39 SET LOOP COUNTER TO STA TCNT 39 TABL1 JSB ECH GET CHAR FROM TABED LINE LDA B377 LINE FINISHED SO FAKE A NON-TAB FILL CHAR CPA B40 IS IT A TAB FILL CHAR ? JMP CLRTB YES- GO CLEAR TAB AT THIS POSITION LDA "ESC" NO - SET TAB HERE JSB OUTCR LDA "1" SET TAB JSB OUTCR LDA "T" MARK COLUMN WITH A "T" JSB OUTCR JMP TABL2 COMLETE LOOP CLRTB LDA "ESC" CLEAR TAB AT CURRENT POSITION JSB OUTCR LDA "2" CLEAR TAB JSB OUTCR LDA B40 SPACE FILL JSB OUTCR TABL2 ISZ TCNT DONE WITH 39 SETS AND CLEARS ? JMP TABL1 NO LDA TCOL GET LAST CAHR JSB OUTCR LDA TBUFF GET BUFFER LOCATION LDB OCCNT AND LENGHT JSB LST AND OUTPUT IT CLA RESET STA OCCNT OCCNT TO ZERO JMP TABLN,I AND RETURN * "ESC" OCT 33 ESCAPE "_" OCT 137 BACKARROW "BAR" OCT 174 "|" "%" OCT 45 %TAB OCT 11 TAB CHAR "!" OCT 41 "\" OCT 134 "A" OCT 101 "F" OCT 106 "I" OCT 111 "L" OCT 114 "M" OCT 115 "P" OCT 120 "T" OCT 124 * CNT1 BSS 1 * CLA DVR07 CCA * M39 DEC -39 B377 OCT 377 "1" OCT 61 ASCII 1 "2" OCT 62 ASCII 2 * TCNT BSS 1 TEMP STORAGE * TABUF DEF TAB0+0 ************************************************************************* * DEFAULT TABS ARE COLUMNS 7 AND 21 * * TAB SET BUFFERS TABP DEC -3,-6,-9,-12,-15,-18,-21,-24,-27,-30,0 TAB^P DEF TABP+0 TABA DEC -6,-20,0 TAB^A DEF TABA+0 TABF DEC -6,-10,-14,-18,-22,-26,-30,-34,-38,-42,0 TAB^F DEF TABF+0 TABM DEC -9,-25,-39,-43,-47,-51,0 TAB^M DEF TABM+0 ************************************************************************** * TBPNT NOP * B54 OCT 54 "," ******************************************************* * SETKY BSS 1 * "AS" ASC 1,AS "DF" ASC 1,DF "CF" ASC 1,CF "RT" ASC 1,RT "BE" ASC 1,BE "EC" ASC 1,EC "AC" ASC 1,AC "IC" ASC 1,IC "TC" ASC 1,TC "PC" ASC 1,PC "CS" ASC 1,CS "VW" ASC 1,VW "SD" ASC 1,SD "WC" ASC 1,WC "LE" ASC 1,LE "RE" ASC 1,RE "TS" ASC 1,TS "SL" ASC 1,SL * ^REFG DEF REFLG+0 ^TSFG DEF TSFLG+0 ^ASKF DEF ASKFG+0 ^FLDF DEF FOLDF+0 ^FRTN DEF FRTNF+0 SKP HED ONOFF TEST FOR ON OR OFF * * ONOFF SETS OR CLEARS FLAG POINTER TO A REG * WHEN AN ON OR OFF OR NOTHING IS ENTERED. * RETURN AT P+1 ERROR - * P+2 PARAMTER DEFAULTED, AREG IS COMPLEMENT OF FLAG * P+3 IF ON/OFF ENTERED, FLAG ALREADY SET * FLAG STATES -1=> ON * 0 => OFF * ONOFF NOP STA ONADR SAVE ADDERSS JSB CSTRP STRIP POSIBLE COMMA JMP ONOF2 DEFAULTED - GO COMPLMENT JSB ECHL GET NEXT CHARS JMP ONOF2 DEFAULTED ALF,ALF STA ONOFT JSB ECHL NOP IOR ONOFT CPA "OF" WAS "OFF" ENTERED ? JMP ONOF5 YES GO - HANDLE CPA "ON" WAS "ON" ENTERED ? CCB,RSS YES - COMPLENT B AND SKIP ERROR RETURN JMP ONOFF,I ERROR RETURN ONOF8 STB ONOFT SAVE FLAG IN TEMP ONOF9 JSB ECH TEST FOR END OF LINE JMP ONOF0 FOUND IT CPA B40 JMP ONOF9 BLANKS ARE OK JMP ONOFF,I NO ERROR RETURN * ONOF0 ISZ ONOFF BUMP RETURN LDB ONOFT GET FLAG STB ONADR,I SET FLAG ONOF1 ISZ ONOFF BUMP TO SET REUTRN JMP ONOFF,I RETURN * ONOF2 LDA ONADR,I GET CURRENT FLAG CMA COMPLEMENT JMP ONOF1 GO RETURN AT P+2 * ONOF5 JSB ECHL JMP ONOF6 NOTHING IS OK CPA "F" JMP ONOF6 F IS OK JSB PBKE NOT F SO PUT IT BACK SO CHECK FOR A BLANK ONOF6 CLB JMP ONOF8 * * ONOFT BSS 1 * ONADR BSS 1 "OF" ASC 1,OF "ON" ASC 1,ON * * *************** SKP HED LINE JOIN * ****************************** * * ED%.J JOIN TWO LINE * ED%.J JSB ENDCK MAKE SURE THERE ARE NO MORE CHARS LDA SLNG AT SSA EOF ? JMP ERR YES - GIVE ERROR CCA SET UNDO FLAG STA UNFLG SO CURRENT LINE WILL BE COPIED JSB UNDOD SET UP FOR UNDO CLA CLEAR STA R1STF FIRST REPLCE FLAG SO WE DON'T MAKE ANOTHER COPY .QJ.1 JSB SCH COPY FIRST TO TBUFF JMP .QJ.2 DONE - BREAK LOOP JSB OUTCR JMP .QJ.1 MORE - LOOP * .QJ.2 JSB I/PSB GET NET LINE SSB TEST FOR EOF JMP .QJ.4 YES - SO SKIP COPYING OF THIS LINE TO T BUFF .QJ.3 JSB SCH NO - COPY LINE TWO JMP .QJ.4 DONE - GO REPALCE JSB OUTCR JMP .QJ.3 * .QJ.4 JSB ./R$ REPLACE SOURCE BLINE BUFFER JMP DISPL AND DISPLY LINE * * KEYST NOP JSB CSTRP STRIP COMMA,BLANK JMP KNONE NONE SO GIVE SUMMARY JSB ECHL JMP KNONE ALF,ALF SHIFT TO UPPER BYTE STA KEY SAVE AS FIRST PART OF KEY JSB ECHL GET NEXT CHAR LDA B40 NONE SO GET A BLANK IOR KEY OR IN HIGH PART KYST1 STA KEY SET KEY JMP KEYST,I RETURN * KNONE LDA "AL JMP KYST1 "AL ASC 1,AL * END EDIT4