ASMB,R,L,B,C ** R/T E D I T O R ** HED *** R/T E D I T O R *** NAM EDIT,3,99,0,0,0,0,0,0 * EXT .OPSY EXT EXEC * SUP * *################### VERSION: AUG 1969 ########################### * * * THE R/T E D I T O R IS DESIGNED TO BE INCORPORATED * INTO THE ENVIRONMENT OF THE REAL-TIME EXECUTIVE * AS A GENERAL-PURPOSE "BACKGROUND DISC-RESIDENT" * PROGRAM. IT IS A MODIFIED VERSION OF THE STANDARD * ABSOLUTE VERSION OF THE "SYMBOLIC EDITOR". * * THE R/T EDITOR PROVIDES THE SOFTWARE FACILITY * FOR EDITING AND UPDATING SYMBOLIC SOURCE FILES * * 'EDIT FILE' - CONTAINS CONTROL STATEMENTS AND * UPDATE STATEMENTS DIRECTING THE * EDITING OF THE SYMBOLIC FILE. * * 'SYMBOLIC FILE' - CONTAINS ASCII RECORDS * (SYMBOLIC SOURCE STATEMENTS) * WHICH ARE TO BE EDITED. * * 'UPDATED FILE' - CONTAINS THE NEW SYMBOLIC * RECORDS RESULTING FROM EDITING * THE SYMBOLIC FILE. * * SELECTED STATEMENTS (RECORDS) AND/OR SELECTED * CHARACTERS WITHIN STATEMENTS IN A SYMBOLIC FILE * MAY BE EDITED BY THE CONTROL STATEMENTS: * * /I,N INSERT RECORD(S) * /D,N1[,N2] DELETE RECORD(S) * /R,N1[,N2] REPLACE RECORD(S) * * /CI,N,C INSERT CHARACTER(S) * /CD,N,C1[,C2] DELETE CHARACTER(S) * /CR,N,C1[,C2] REPLACE CHARACTER(S) * * /E DENOTES END OF 'EDIT FILE' * * /A ABORT EDIT OPERATION ************************ REVISION 1621 ************************** * DATE: 5/20/76 * W. P. BECKER * * THIS REVISION ADDS SREAD AND %WRIS FROM THE 24151 LIBRARY * TO EDIT. WITHOUT THIS MOD, EDIT WOULD NOT WORK IN THE SAME * SYSTEM WITH THE 24998 LIBRARY. * * *** EDIT FILE INPUT SECTION *** * ED02 LDB EDAD (EDAD) = ADDRESS FOR EDIT FILE INB INPUT. SET FOR (EDAD + 1. STB EFBAD SET IN INPUT REQUEST * * JSB EXEC INPUT DEF *+5 1 RECORD DEF C.01 FROM DEF EFLUN EDIT FILE. EFBAD NOP --VARIABLE BUFFER ADDRESS, DEF CM72 MAX 72 CHARACTERS. * SZB IF END-OF-TAPE, CONTINUE. JMP ED04 RECORD IN, PROCESS. * JSB EXEC CALL FOR DEF *+2 PROGRAM DEF C.07 SUSPENSION * JMP ED02 ON 'GO', RE-ISSUE INPUT REQUEST. * * ED04 LDA B # CHARS. INPUT TO A. STA CSAF SET CSAF NON-ZERO FOR INPUT. CMB SET CHAR. CNT NEG AND SAVE FOR STB CHCT THE -GETC- ROUTINE. STA EDAD,I STORE CHAR. CNT IN FIRST WORD RAR CONVERT CHAR. CNT TO WORDS SSA IF SIGN SET, ODD NO. OF CHARS. INA AND ADD 1 TO WORD CNT. AND CHMK REMOVE SIGN BIT IF SET INA ADD 1 FOR FIRST WORD STA FFCT AND SAVE LENGTH TEMPORARILY LDA EDAD SET STARTING ADDRESS INA OF STATEMENT IN CSAD STA CSAD FOR -GETC- ROUTINE LDA M525 ALSO. INITIALIZE UPPER/LOWER STA F525 CHAR. POSITION FLAG. JSB GETC GET FIRST NON-BLANK CHARACTER SZA,RSS IF ALL-BLANKS THEN JMP ED.4 STATEMENT IS FOR UPDATE CPA SLSH CHECK CHAR. FOR A SLASH JMP *+2 YES JMP ED.4 NO JSB GETC CHECK NEXT CHAR. SZA,RSS IF END-OF-STATEMENT, SKIP JMP ED.4 NEXT CHECK CPA SLEN CHECK FOR E (FOR /E) JMP ED05 YES CPA SLAB IF "/A" INPUT, THEN JMP EN08 ABORT EDIT OPERATION * * FOLLOWING SECTION CHECKS CONTROL STATEMENT AND * PARAMETER LEGALITY DURING EDIT FILE INPUT. * STA CSFL SAVE CONTROL IDENTIFIER CPA SLIN JMP ED043 *I* CPA SLDL JMP ED043 *D* CPA SLRP JMP ED043 *R* CPA SLCH RSS *C* JMP ILCS ILLEGAL CONTROL STATEMENT JSB GETC *C*, GET NEXT CHARACTER SZA,RSS -ERROR IF REST JMP ILCS OF STATEMENT BLANK. STA CSFL SAVE NEXT IDENTIFIER. CPA SLIN CHECK FOR LEGALITY JMP ED041 *I* CPA SLDL JMP ED041 *D* CPA SLRP RSS *R* JMP ILCS ILLEGAL CONTROL STATEMENT ED041 JSB GETC GET NEXT CHARACTER SZA,RSS ERROR IF NO NON-BLANK JMP ILCS CHARACTERS PRESENT. CPA COMA ERROR IF RSS CHARACTER JMP ILCS NOT A COMMA. LDB C.04 CONVERT FIELD JSB CONV N - SEQUENCE NUMBER. SZB,RSS ERROR IF END OF JMP ILCS STATEMENT REACHED JSB CKSEQ CHECK VALUE OF -N-. LDB C.02 CONVERT JSB CONV FIELD C1. SZA,RSS ERROR IF JMP NERR C1 = 0. STA CBUF+1 SAVE C1. ADA CM73 IF C1 IS SSA,RSS GT 72, JMP NERR THEN ILLEGAL VALUE. SZB,RSS IF NO C2, JMP ED.4 GO TO GET NEXT STATEMENT LDB C.02 CONVERT JSB CONV FIELD-C2-. SZA,RSS ERROR IF JMP NERR C2 = 0. SZB ERROR IF STATEMENT JMP ILCS IS NOT TERMINATED BY C2. STA 1 ERROR ADB CM73 IF C2 SSB,RSS GT JMP NERR 72. CMA,INA ERROR IF ADA CBUF+1 C2 LT OR SSA,RSS EQUAL TO JMP ILCS C1. ED042 LDA CSFL IF STATEMENT IS AN *I* OR CPA SLIN A *CI*, THEN ERROR BECAUSE JMP ILCS N2 OR C2 IS PRESENT. JMP ED.4 GO TO GET NEXT STATEMENT. * * CHECK LEGALITY OF PARAMETERS FOR RECORD EDITING * ED043 JSB GETC GET NEXT CHARACTER. SZA,RSS -ERROR IF REST OF STATEMENT JMP ILCS IS ALL BLANK. CPA COMA ERROR IF NEXT RSS CHARACTER NOT JMP ILCS A COMMA. LDB C.04 CONVERT JSB CONV FIELD -N1-. JSB CKSEQ CHECK LEGALITY SZB,RSS IF N2 NOT PRESENT, JMP ED.4 GO GET NEXT STATEMENT. LDB C.04 CONVERT JSB CONV FIELD -N2-. JSB CKSEQ CHECK LEGALITY SZB ERROR IF N2 DOES JMP ILCS NOT TERMINATE STATEMENT. JMP ED042 GO TO CHECK FOR INSERT ERROR. * ED.4 LDB EDAD SAVE CURRENT STB SEDA EDIT FILE ADDRESS. ADB FFCT COMPUTE ADDRESS FOR NEXT INPUT STB EDAD AND SAVE IN (EDAD) ADB MLEN ADD 36 (72 CHARACTERS) TO LDA 1777B CHECK FOR MEMORY OVERFLOW, CMA SUBTRACT LAST WORD ADDRESS - 1 ADB 0 FROM (EDAD + 40) SSB,RSS POSITIVE RESULT MEANS JMP OVFL OVERFLOW CONDITION CLA STA SEDA JMP ED02 NO OVERFLOW, GET NEXT RECORD * * SUBROUTINE TO CHECK SEQUENCE NUMBER LEGALITY. * (A) = NUMBER, (B) IS SAVED. CKSEQ NOP SZA,RSS IF VALUE = 0, JMP NERR ERROR STB CBUF+1 SAVE (B) STA 1 SUBTRACT VALUE (SEQUENCE CMB,INB NUMBER) FROM ADB SEQN PREVIOUS NUMBER. SSB,RSS A POSITIVE VALUE MEANS CURRENT IS JMP SEQE NOT GT PREVIOUS -ERROR STA SEQN SAVE NEW VALUE LDB CBUF+1 RESTORE B. JMP CKSEQ,I EXIT. * SKP * * CONTROL TO THIS SECTION AFTER END RECORD * ED05 LDA F.AM RESET EDAD TO POINT TO STA EDAD FIRST RECORD INPUT * LDA ERCT SZA ERRORS IN EDIT FILE ? JMP ESUSP-2 YES, SUSPEND LDA SFLUN CPA C.02 SOURCE FILE FROM DISK? JMP ESUSP+3 LDA EOFEA WRITE DIAGNOSTIC "END OF EDIT JSB DIAG FILE". ESUSP JSB EXEC CALL FOR DEF *+2 PROGRAM DEF C.07 SUSPENSION. * CLA CLEAR CONTROL STATEMENT STA CSAF ACTIVE FLAG STA SYSQ AND SEQUENCE NUMBER. * JSB EXEC SET DEF *+3 EOT DEF C.03 STATUS ON DEF EFCON EDIT FILE INPUT. * JSB LT.G GENERATE LEADER OUTPUT ISZ PSFLG SET PSFLG=1 FOR PASS 2 SKP * SECTION TO EXAMINE EDIT FILE RECORD * CONTROL IS RETURNED TO THIS SECTION * AFTER EACH STATEMENT IS PROCESSED. ED06 CLB STB SEDA LDB EDAD SET (B) = ADDRESS OF FIRST LDA 1,I -(SET ONE-S COMPLEMENT OF CHAR. CMA COUNT IN CHCT STA CHCT FOR -GETC- ROUTINE LDA M525 ALSO, INITIALIZE UPPER/LOWER STA F525 INDICATOR TO UPPER (SIGN = 0) - INB WORD OF CONTROL STATEMENT STB CSAD SET ADDRESS FOR -GETC- JSB GETC GET FIRST CHARACTER SZA,RSS IF ALL-BLANK STATEMENT, GO TO JMP *+3 CHECK CS ACTIVE CPA SLSH IF CHAR. IS A SLASH, JMP ED08 GO TO CS EXAMINATION SECTION LDB CSAF CHECK CONTROL STATEMENT SLB,RSS ACTIVE (LSB OF CSAF) JMP ED07 NO, BYPASS RECORD CPA EXMK YES, CHECK FOR AN !.-- ! SIGNIFIES JMP EXMV A CONTROL STATEMENT IS FOR UPDAT LDA EDAD,I RECORD IS TO BE OUTPUT LDB EDAD TO UPDATED FILE INB B = ADDRESS, A = NO. OF JSB UFOUT CHARS. OUTPUT RECORD. ED07 JSB GETA GET ADDRESS OF NEXT RECORD JMP ED06 AND GO PROCESS IT * * CONTROL TO THIS SECTION FOR CONTROL STATEMENT * ED08 JSB GETC GET NEXT CHARACTER. CPA SLEN TYPE JMP ENDX *END* CPA SLIN JMP INSX *INSERT* CPA SLDL JMP DLTX *DELETE* CPA SLRP JMP REPX *REPLACE* CPA SLCH CHECK FOR CHAR. EDITING JMP *+2 YES JMP ILCS NO, ILLEGAL STATEMENT JSB GETC GET NEXT CHARACTER CPA SLIN JMP CINX * INSERT CHAR. * CPA SLDL JMP CDEL * DELETE CHAR. * CPA SLRP JMP CREP * REPLACE CHAR. * JMP ILCS ILLEGAL STATEMENT SKP * * CONTROL TO THIS SECTION FOR SPECIAL STATEMENT * STARTED BY THE CHARACTER !. CHARS. FOLLOWING * THE ! ARE TO BE OUTPUT AS AN UPDATE STATEMENT. * EXMV LDA EDAD,I SET A = CHAR. LENGTH OF STATEMENT ADA CHCT ADD NEGATIVE CHAR COUNT SO FAR IN INA -GETC- AND ADD ONE MORE FOR NUMBER CPA EDAD,I TO !. IF ! IN LAST CHAR. OF JMP ED07 STATEMENT, IGNORE STATEMENT LDB EDAD SET PARAMETERS FOR -NXAD- TO INB GET ADDRESS OF FIRST CHAR. JSB NXAD FOLLOWING THE !. STA EXM1 STORE THIS ADDRESS AS SOURCE ADD LDA CHCT GET LENGTH OF MOVE - CHARS. CMA REMAINING IN STATEMENT. LDB CBUF SET TO MOVE REST OF STATEMENT JSB MOVE TO CBUF EXM1 NOP -HOLDS SOURCE ADDRESS LDA CHCT GET CHARACTER LENGTH AGAIN CMA AND SET ADDRESS LDB CBUF OF CBUF IN B JSB UFOUT OUTPUT STATEMENT JMP ED07 GO FOR NEXT STATEMENT. * SKP * * * CONTROL TO THIS SECTION FOR /E STATEMENT * EN01 JSB SYMI GET NEXT SYMBOLIC RECORD. SZA,RSS CHECK EOT JMP EN02 YES LDB SBUF NO, SET TO OUTPUT JSB UFOUT JMP EN01 GET NEXT RECORD GFIL2 LDA 1767B SZA SOURCE DEFINED ? JMP GFIL1-2 YES, OK LDA FLUND NO,ERROR JSB DIAG PRINT DIAGNOSTIC JMP EN03 GFILE LDA C.02 STA UFLUN LUN(OUTPUT)= 2 CPA SFLUN INPUT FROM DISK ? JMP GFIL2 LDA F.AM INITIALIZE FWA STA EDAD AVAILABLE MEMORY GFIL1 JSB %WRIN INITIALIXE WRITE JMP DOVF FULL DISK, ABORT EDIT STA WTRK1 SET 1ST WRITE-TRACK STA WTRKC =CURRENT WRITE-TRACK JSB SYMI GET SOURCE RECORD SZA,RSS EOF? JMP EN06 YES,PRINT LIST OF TRACKS,EXIT LDB SBUF JSB UFOUT OUTPUT RECORD JMP GFIL1+4 EN02 JSB LT.G FINISH OUTUT TRAILER * ENDX EQU EN01 * LDA SFLUN CPA C.02 INPUT FROM DISK ? JMP EN05 YES, RELEASE TRACKS IN OLD FILE EN04 LDA UFLUN CPA C.02 EDITED FILE ON DISK ? JMP EN06 YES, OUTPUT LAST SECTOR, AND * PRINT LIST OF TRACKS, ETC * END OF EDITING OPERATION * EN03 LDA ENDED PRINT "END OF EDIT RUN". JSB DIAG JSB EXEC AND DEF *+2 DEF C.06 CALL FOR COMPLETION. LUN BSS 1 LUN (TEMP) TRACK BSS 1 TRACK NO. (TEMP) EN05 LDA RTRK1 JSB SPLIT SPLIT LUN,TRACK NO STB LUN LUN STA TRACK TRACK NO JSB EXEC RELEASE READ-TRACK (OLD FILE) DEF *+5 DEF C.05 CODE=5 DEF C.01 1 TRACK DEF TRACK TRACK NO DEF LUN LUN LDA RTRK1 CPA RTRKC LAST TRACK ? JMP EN04 YES, READY JSB GLINK GET NEXT LINK STA RTRK1 JMP EN05+1 CONTINUE RELEASE OF OLD FILE EN06 JSB %WEOF OUTPUT LAST SECTOR LDA NFILE JSB DIAG PRINT "TRACKS IN NEW FILE:" LDA WTRK1 WRITE-TRACK JSB SPLIT STB LUN SAVE LUN JSB CNVRT CONVERT TRACK NO TO ASCII STA TRAKN+4 AND STORE FOR PRINTOUT STB TRAKN+5 LDA LUN JSB CNVRT CONVERT LUN TO ASCII STB TRAKN+2 LDA TRAKN JSB DIAG PRINT TRACK NO. LDA WTRK1 CPA WTRKC LAST TRACK ? JMP EN03 YES,READY JSB GLINK GET NEXT LINK STA WTRK1 NEXT TRACK JMP EN06+4 CONTINUE *IN CASE OF ABORT, RELEASE THE NEW FILE ON DISK EN08 LDA UFLUN CPA C.02 RSS EDITED FILE TO DISK JMP EN03 LDA WTRK1 JSB SPLIT SPLIT LUN-TRACK NO. STB LUN LUN STA TRACK TRACK NO. JSB EXEC RELEASE WRITE-TRACK (NEW FILE) DEF *+5 DEF C.05 CODE=5 DEF C.01 1 TRACK DEF TRACK TRACK NO. DEF LUN LUN LDA WTRK1 CPA WTRKC LAST TRACK ? JMP EN03 YES, FINISH JSB GLINK GET NEXT LINK STA WTRK1 JMP EN08+5 CONTINUE *SUBROUTINE TO GET NEXT TRACK NO.FROM LINK IN LAST WORD OF *CURRENT TRACK *CALLING SEQUENCE: * LDA LINK LINK= LUN-TRACK NO. * JSB GLINK * RETURN WITH (A)= LINK WORD NEXT TRACK * GLINK NOP LDB =B1757 ASSUME SYSTEMS DISK FIRST ALF,ALF LUN TO LOW A SLA SYSTEMS DISK ? INB NO, B1760 IS LOC OF AUX DISK ALF, ALF RESET A LDB 1,I NO OF SECTRS/TRACK ADB C.M1 -1 FOR LAST SECTOR IN TRACK JSB %RDSC READ LAST SECTOR OF TRACK JMP GLINK,I EXIT SPLIT NOP CLB LSL 8 LUN TO B ALF,ALF TRACK NO.TO A JMP SPLIT,I *CNVRT CONVERTS UP TO 4-DIGIT NUMBERS. * *CALLING SEQUENCE: LDA NUMBR * JSB CNVRT * RETURN WITH (A)-(B)= NUMBER IN ASCII,UPPER * DIGITS IN A CNVRT NOP CLB DIV =D10 STB UNITS SAVE UNITS CLB DIV =D10 STB TENS SAVE TENS CLB DIV =D10 ALF,ALF THOUSANDS TO UPPER A ADA 1 HUNDREDS LDB TENS BLF,BLF ADB UNITS TENS IN UPPER, UNITS IN LOWER ADA =A00 CONVERT ADB =A00 TO ASCII JMP CNVRT,I TENS BSS 1 UNITS BSS 1 SKP * * CONTROL TO THIS SECTION FOR INSERT (RECORD) * INSX JSB GETC GET NEXT CHARACTER LDB C.04 SET B FOR MAX. OF 4 DIGITS JSB CONV CONVERT NUMBER STA N1XX SET SEQUENCE NUMBER CLA FOR N1. SET STA N2XX N2 = ZERO STA CSFL SET INSERT FLAG JSB PSFX AND POSITION SYMBOLIC FILE JSB CKSL CHECK NEXT EDIT FILE STATEMENT JMP INER ERROR, IS A CONTROL STATEMENT JMP ED06 * * CONTROL TO THIS SECTION FOR DELETE (RECORD) * AND REPLACE (RECORD) * DLTX CLA,INA,RSS SET A = 1 AND SKIP REPX LDA C.02 SET A = 2 FOR REPLACE STA CSFL AND SET CONTROL FLAG CLA CLEAR N2XX STA N2XX JSB GETC GET NEXT CHARACTER LDB C.04 SET B FOR MAX. OF 4 DIGITS JSB CONV CONVERT N1 STA N1XX SET N1 SZB,RSS IF B = 0, JMP RE01 THEN NO N2. LDB C.04 B = 4 JSB CONV CONVERT N2 STA N2XX SET N2. N2 SHOULD END WITH RE01 JSB PSFX POSITION SYMBOLIC FILE LDA CSFL IF LSB OF CS FLAG SLA = 1, DELETE STATEMENT JMP ED06 PROCESS NEXT STATEMENT JSB CKSL REPLACE, CHECK FOR UPDATE NEXT JMP RPER NO, ERROR JMP ED06 * * CHARACTER EDITING SECTION * * CINX CLA,RSS SET A = ZERO FOR INSERT CDEL CLA,INA SET A (LSB) = 1 FOR DELETE RSS SKIP CREP LDA CM60 SET A(15) = 1 FOR REPLACE STA C.FL SET CHAR. STATEMENT FLAG JSB GETC GET NEXT CHARACTER CLA SET N2 AND STA N2XX C2 EQUAL STA C2XX TO ZERO LDB C.04 4 DIGITS TO JSB CONV CONVERT N1 STA N1XX SET N1 AND SET TO CONVERT C1 LDB C.02 MAX. OF TWO CHARS. JSB CONV CONVERT C1 STA C1XX SET C1 SZB,RSS IF B = 0 8 THEN NO C2 JMP CH01 LDB C.02 MAX. OF TWO CHARS. JSB CONV CONVERT C2 STA C2XX SET C2 CH01 CLA,INA SET CSFL (LSB) = 1 TO STA CSFL TELL PSFX NOT TO PUNCH JSB PSFX N TH RECORD LDA C1XX SUBTRACT C1 CMA,INA FROM SYM. FILE ADA SYCT RECORD LENGTH SSA IF RESULT IS NEG. C1 JMP C.ER TOO LARGE, CS ERROR LDA C2XX SUBTRACT C2 FROM CMA,INA SYM. FILE RECORD ADA SYCT LENGTH SSA IF RESULT IS NEG., C2 JMP C.ER TOO LARGE, CS ERROR * * THIS SECTION DETERMINES THE ORIGIN AND * DESTINATION ADDRESSES PLUS THE CHARACTER LENGTH * FOR THREE MOVES TO CBUF LDA C1XX IF CONTROL STATEMENT LDB C.FL IS CHAR. INSERT, C1 SZB IS CHAR. COUNT FOR MOVE- ADA C.M1 OTHERWISE, REDUCE CHAR. STA CMV1 CNT. BY 1 AND SET FOR MV1 LDB SBUF SET ORIGIN ADDRESS STB MOV1 FOR FIRST MOVE LDB CBUF SET DESTINATION ADDRESS STB CMV1+1 FOR FIRST MOVE LDA C2XX COMPUTE MOVE 3 ORIGIN SZA,RSS ADDRESS. IF C2 IS LDA C1XX NON-ZERO, USE C2 AS LDB SBUF THE REFERENCE POINT JSB NXAD GET NEXT ADDRESS AND STA MOV3 SET AS MV3 ORIGIN ADDRESS LDA CMV1 GET MOVE 2 DESTINATION LDB CBUF ADDRESS (CHAR CNT FOR MV1 JSB NXAD + CBUF) STA CMV2+1 SET MOVE 2 DESTINATION LDA C.FL IF DELETE, SKIP UPDATE SLA STATEMENT NEXT CHECK JMP CH02 --DELETE SSA SKIP IF INSERT JMP *+4 REPLACE JSB CKSL CHECK FOR UPDATE JMP INER. NO, ERROR JMP CH03 YES, UPDATE NEXT JSB CKSL CHECK FOR UPDATE AFTER REPLACE JMP RPER NO, ERROR JMP CH03 CH02 JSB CKSL CHECK NEXT STATEMENT FOR /. JMP *+2 IF NOT A / THEN TREAT AS JMP CH03 REPLACE CLA DELETE ONLY. SET MV2 STA CMV2 CHAR. CNT = ZERO JMP CH04 CH03 LDA EDAD,I GET CHAR. CNT OF STA CMV2 UPDATE STATEMENT FOR MV2 LDB EDAD SET MOVE 2 ORIGIN INB ADDRESS AS (EDAD+1) STB MOV2 INTO CMV2+1 CH04 LDB CMV2+1 COMPUTE MOVE 3 JSB NXAD DESTINATION ADDRESS STA CMV3+1 AND SET IT LDA C2XX COMPUTE MOVE 3 CHAR. CNT SZA,RSS US C1 AS REFERENCE LDA C1XX IF C2 = ZERO CMA,INA SUBTRACT C1 (C2) FROM ADA SYCT SYM. FILE RECORD LENGTH STA CMV3 TO GET CHAR. CNT * * THIS SECTION DETERMINES RECORD OVERFLOW * LDA CMV1 ADA CMV2 ADD THE CHAR. COUNTS ADA CMV3 FOR THE STA C.FL THREE MOVES, LDB C.72 SUBTRACT 73 FROM CMB THE TOTAL ADA 1 A POSITIVE RESULT MEANS SSA,RSS EXCEEDS 72, ERROR JMP CHOV CHARACTER OVERFLOW LDA CMV1 PERFORM LDB CMV1+1 FIRST JSB MOVE MOVE MOV1 NOP LDA CMV2 LDB CMV2+1 JSB MOVE SECOND MOV2 NOP MOVE LDA CMV3 LDB CMV3+1 JSB MOVE THIRD MOV3 NOP MOVE LDA C.FL CHAR. CNT FOR NEW RECORD LDB CBUF ADDRESS OF NEW RECORD JSB UFOUT PUNCH NEW RECORD CLA CLEAR CS ACTIVE STA CSAF FLAG JMP ED06 GO TO CS PROCESSOR SKP