File: OCOM50.PA of Disk: V50/Source/Source-Listing-PAL-2
(Source file text)
/ OCTAL COMPARE V50 / / / / / /WVDM, ZUERICH, OCT-1980 / / OCOMP.PA 78.04.03 OCTAL COMPARE AND DUMP / / BY: / DENNIS MCGHIE / DEPT. OF CARDIOVASCULAR SURGERY / STANFORD MEDICAL CENTER / STANFORD, CALIF. 94305 / 1978 APRIL 3 MODIFIED FOR OS/8 V3D (FIXED CCB MASK) / 2ND INPUT DEVICE WITH NO FILENAME NOW USES 1ST FILENAME / TIM CLARKE MENLO COMPUTER ASSOCIATES / BOX 298 / MENLO PARK, CALIFORNIA 94025 / / WVDMARK GERMAN MESSAGES / / GERMAN=1 NOT ANYMORE / / OCOMP IS AN OS/8 UTILITY PROGRAM USED TO / COMPARE OR DUMP OS/8 FILES. BOTH MASKING AND / SEARCHING ARE ALLOWED. THE MASK IS ENTERED BY / THE "=" OPTION (ONLY THE LEAST SIGNIFICANT 12 / BITS ARE USED) AND FOR CONVENIENCE, A MASK OF 0000 / IS CHANGED TO 7777 UNLESS /S IS SPECIFIED. / THE SEARCH FEATURE IS SPECIFIED BY THE "/S" OPTION. / ALL OUTPUT IS IN OCTAL. / A. THE THREE MODES OF OPERATION ARE: / / 1. COMPARE: TWO INPUT FILES SPECIFIED ARE / COMPARED WORD-FOR-WORD UNDER THE MASK, / ANY DIFFERENCES CAUSE THE OCTAL VALUE / OF THE UNMATCHED WORDS TO BE PUT IN THE / OUTPUT FILE. / / 2. DUMP: ONLY ONE INPUT FILE IS SPECIFIED AND / IT IS DUMPED (IN OCTAL) TO THE OUTPUT FILE. / IF A MASK IS SPECIFIED, ONLY THOSE WORDS / WITH ALL MASKED BITS IN THE 1 STATE ARE / OUTPUT. / / 3. SEARCH: ONLY ONE INPUT FILE IS SPECIFIED, / ALONG WITH "/S". ONLY THOSE WORDS EQUAL TO / THE MASK ARE DUMPED TO THE OUTPUT FILE. / / / B. IN ADDITION, IF /I IS SPECIFIED, THE ABOVE / MODES ARE AVAILABLE, BUT THE INPUT FILES ARE / ASSUMED TO BE "SAVE" FILES. THE CCB IS DECODED / AND COMPARISONS ARE BY MEMORY ADDRESS, RATHER / THAN RELATIVE BLOCK NUMBER. / / / C. IF /C IS SPECIFIED IN ADDITION TO /I, THE / DECODED CCB WILL BE PRINTED AS PART OF THE TITLE. / / / D. DIFFERENCES: A SPECIAL MODE IS AVAILABLE WHEN /D / IS SPECIFIED. IN THIS CASE, TWO FILES ARE / CHECKED FOR DIFFERENCES ONLY. / / OUTPUT WILL BE EITHER / "FILES SAME" / OR "FILES DIFFERENT" / / / E. IF /F IS SPECIFIED, ANY BLOCK WHICH PRODUCES / OUTPUT WILL HAVE A FORM FEED CHARACTER PRECEEDING / ITS HEADER LINE. THIS MODE IS USEFUL WHEN THE / OUTPUT IS TO A SCOPE. / / / F. IF /T IS SPECIFIED, THE OUTPUT FORMAT IS CHANGED / SO THAT IT WILL FIT ON THE 72 CHARACTER LINE OF / A TELETYPE. / / / G. A HEADER LINE IS NORMALLY PRINTED IN THE OUTPUT FILE / UNLESS THE OUTPUT IS TO TTY:. /H WILL CAUSE THE / HEADER TO BE PRINTED EVEN IF OUTPUT IS TO TTY: / / OTHER PROGRAM ACTIONS: / A. SPECIFYING NO INPUT FILE WILL CAUSE A RETURN / TO THE COMMAND DECODER. IF A SECOND INPUT / DEVICE IS SPECIFIED WITHOUT A FILENAME, THE / FILENAME FROM THE FIRST INPUT SPECIFICATION / IS USED. / B. "USER ERROR ..." MESSAGES WILL BE OUTPUT / UNDER THE FOLLOWING CONDITIONS: / ERROR CONDITION / 1 MORE THAN TWO INPUT FILES. / 2 OUTPUT FILE TOO SMALL. / 3 OUTPUT HANDLER FETCH OR ENTER FAILED. / 4 INPUT HANDLER FETCH OR LOOKUP FAILED. / 5 INPUT FILE #1 ERROR. / 6 INPUT FILE #2 ERROR. / 7 OUTPUT FILE ERROR. / 8 OUTPUT FILE CLOSE FAILED. / 9 INVALID CCB IN /I INPUT FILE. / C. "NO OUTPUT" OR "NO DIFFERENCES" WILL BE PUT / IN THE OUTPUT FILE IF NOTHING ELSE IS OUTPUT. / D. THE DEFAULT INPUT EXTENSION IS ".SV" IF /I / OTHERWISE NO DEFAULT IS APPLIED. / E. THE DEFAULT OUTPUT DEVICE IS TTY: / F. THE DEFAULT OUTPUT EXTENSION IS ".LS". / COMMAND DECODER USAGE: / .R OCOMP / *OFILE < IFILE1 [,IFILE2] [(OPTIONS)] [=NNNN] / ITEMS IN [...] ARE OPTIONAL. / ASSEMBLY INFORMATION: / .R PAL8 / *OCOMP<OCOMP/L$ / .SAVE ... OCOMP;12000=6403 / / PAGE 0 DEFINITIONS: IWD1= 0 / INPUT 1 BUFFER PTR IWD2= 1 / INPUT 2 BUFFER PTR DUMPSW= 2 / = 0 IF COMPARE MODE, = 1 IF DUMP MODE DUMP2S= 3 / = 1 IF FILE 2 IS LONGER THAN FILE 1 RELBLK= 4 / RELATIVE BLOCK NUMBER RELBK2= 5 / RELATIVE BLOCK NUMBER (FILE 2), IF /I INH1= 6 / INPUT HANDLER 1 ENTRY XR10= 10 XR11= 11 XR12= 12 XR13= 13 XR14= 14 INH2= 20 / INPUT HANDLER 2 ENTRY SLASHD= 21 / = 400 IF /D, = 0 OTHERWISE SLASHI= 22 / = 10 IF /I, = 0 OTHERWISE OUTH= 23 / OUTPUT HANDLER ENTRY OCNT= 24 / OUTPUT BUFFER TRIPLET COUNTER TMP= 25 IBLEN= 26 / INPUT BUFFER LENGTH IN BLKS EBCNT= 27 / EMPTY BUFFER CTR LPBLK= 30 / LINES PER BLOCK (100 OR 40) NGRPS= 31 / # GROUPS PER LINE COUNTER SEGSIZ= 32 / SEGMENT SIZE = # CHARS IN NGRPS PGPTR1= 33 / PAGE TABLE POINTER FILE 1 PGPTR2= 34 / PAGE TABLE POINTER FILE 2 ANYOUT= 35 / = 0 IF NOTHING OUTPUT, OTHERWISE = 1 CHAIN= 36 / CHAIN SWITCH / 00000-01777 (COMMAND DECODER) / 01200- (CD LINE BUFFER) IBUF1= 2000 / 02000-03777 (INPUT BUFFER, FILE 1) IBUF2= 4000 / 04000-05777 (INPUT BUFFER, FILE 2) / 06000-06177 (UNUSED) OHAND= 6201 / 06200-06577 (OUTPUT HANDLER PAGES) IHAND1= 6601 / 06600-07177 (INPUT 1 HANDLER PAGES) IHAND2= 7201 / 07200-07577 (INPUT 2 HANDLER PAGES) / 10000-11777 (USR & SCRATCH STORAGE) LBUF1= 1400 / 11400-11577 (LINE BUFFER 1) LBUF2= 1600 / 11600-11777 (LINE BUFFER 2) / 12000-15377 (PROGRAM) OBUF= 5400 / 15400-16377 (OUTPUT BUFFER) PGTAB1= 6400 / 16400-16777 (/I PAGE TABLE 1) PGTAB2= 7000 / 17000-17377 (/I PAGE TABLE 2) / 17400-17577 (PROGRAM) USR= 200 M1C= STA M2C= STA CLL RAL M3C= STA CLL RTL P1C= CLA IAC P2C= STL CLA RTL P2000C= STL CLA RTR FIELD 1 *2000 OCSTA, TAD (200 / RUN ENTRY (OFFSET FOR CD BUFFER) DCA CHAIN / CHAIN ENTRY TAD CHAIN SNA CLA JMP NODEC / FROM CCL, NO DECODE JMS I (USR / CALL USR 5 / DECODE 5200 / SPECIAL MODE NODEC, TAD I A7605 SNA CLA JMP ALT / NO INPUT FILE, CHECK FOR ALT MODE TAD I (7617 SZA CLA / A 3RD INPUT SPECIFIED? JMS ERROR1 / YES-BAD NEWS JMS PAGSET / SET PAGE SIZE PARAMS (USE /T AS SWITCH) / ALSO INIT OUTPUT BUFFER PARAMS TAD I (7643 AND (10 / MASK FOR /I DCA SLASHI / 0=NOT SET, 10=SET JMS DEFALT / GO SET FILE DEFAULTS TAD I (7643 AND (400 / MASK FOR /D DCA SLASHD / 0=NOT SET, 400=SET / INITIALIZE THE SEARCH/COMPARE MASK TAD I (7646 / GET LOW 12 BITS OF "=" SNA / USE AS IS IF NON-ZERO PCMA, CMA / OTHERWISE USE ALL 1'S DCA MASK / SET UP THE MASK TAD I (7646 DCA DMASK / ALSO SET UP THE DUMP AND SEARCH MASK TAD PCMA DCA CHP1 TAD (DMASK&177!200 / "AND DMASK" DCA CHP3 TAD (4410 DCA OFUNWD / OUTPUT FUNCTION WORD IN WRITE P2C DCA WBLN / OUTPUT BUFFER LENGTH TAD (OHAND DCA OHANA / RESET FETCH HANDLER WORD TAD I (7600 / GET OUTPUT DEVICE NUMBER JMS I (USR 1 / FETCH OHANA, OHAND / BECOMES ENTRY POINT JMS ERROR3 / FETCH FAILED TAD OHANA DCA OUTH / OUTPUT HANDLER ENTRY ADDRES ON PAGE 0 TAD (7601 DCA STBLK / RESET NAME PTR TAD I (7600 / REGET DEVICE NUMBER JMS I (USR 3 / ENTER STBLK, 7601 / NAME POINTER (BECOMES START BLOCK) MLEN, 0 / BECOMES -LENGTH OF FILE JMS ERROR3 / ENTER FAILED TAD STBLK DCA OBLK / CURRENT OUTPUT BLOCK # DCA FULLSW / CLEAR OUTPUT FILE FULL SWITCH M1C DCA EBCNT / FORCE READ TO START DCA ANYOUT DCA RELBLK DCA DUMPSW DCA DUMP2S JMS FLGET / OPEN INPUT 1 IHAND1 INH1 A7605, 7605 BLEFT1 INBLK1 EBLK1 DCA ISTB1 TAD I (7612 / GET 2ND INPUT DEVICE NUMBER SZA CLA / SPECIFIED? JMP TWOIN / YES / ONLY ONE INPUT FILE WAS SPECIFIED ISZ DUMPSW / SET DUMP SWITCH TAD NGRPS CLL RAL / TWICE AS MANY IF DUMP MODE DCA NGRPS TAD (10 DCA IBLEN / DOUBLE LENGTH OF INPUT BUFFER P2000C DCA IFNWD1 / NEW FUNCTION WORD FOR READ (20 PGS, NOT 10) TAD LPBLK STL RAR / NEG DIV BY 2 DCA LPBLK / HALF AS MANY LINES PER BLOCK TAD I (7644 / CHECK FOR /S AND (40 SNA CLA JMP DOIT ISZ CHP1 / /S CHANGES THE CMA TO A CIA TAD (DMASK&177!1200 / "TAD DMASK" DCA CHP3 / ALSO CHANGES THE AND TO A TAD JMP DOIT PAGE / SECOND INPUT SPECIFIED TWOIN, TAD (1000 DCA IFNWD1 TAD (4 DCA IBLEN / INPUT BUFFER LENGTH (4 BLOCKS) JMS FLGET / OPEN INPUT 2 IHAND2 INH2 A7612, 7612 BLEFT2 INBLK2 EBLK2 DCA ISTB2 DOIT, TAD SLASHI / /I SWITCH SNA CLA / SET? JMP DOLOOP-1 / NO-INITIALIZATION FINISHED JMS CCBZER / ZERO THE PAGE TABLES JMS READ1 / FILL 1ST BUFFER JMS MOVEBL / MOVE A BLOCK IBUF1-1 / FROM HERE OBUF-1 / TO HERE JMS CCBDEC / DECODE FILE 1 CCB CCBG1-1 / POINT TO FILE 1 PARAMETER TABLE TAD DUMPSW / ONLY ONE FILE SWITCH SZA CLA / SET? JMP DOLI / YES-ONLY ONE FILE JMS READ2 JMS MOVEBL IBUF2-1 OBUF+400-1 JMS CCBDEC / DECODE 2ND CCB CCBG2-1 / POINT TO FILE 2 PARAMETER TABLE DOLI, JMS TITLE / PRINT RUN TITLE TAD I (7643 AND (1000 / MASK FOR /C SZA CLA / SET? JMS CCBOUT / YES-PRINT CCB(S) TAD (PGTAB1 DCA PGPTR1 / PAGE TABLE POINTER (FILE 1) TAD (PGTAB2 DCA PGPTR2 / PAGE TABLE POINTER (FILE 2) TAD (-200 DCA PGCTR / 400 PAGES IN MAX MACHINE DOLIL, JMS SETSW / SET DUMPSW & DUMP2S ACCORDING TO PGPTRS JMS READIN / SETUP BUFFER PTR(S) IF PAGES USED JMS SETSW / CALL AGAIN TO SAVE A WORD JMS DOUT / SEND A "PAGE" ISZ PGPTR1 / BUMP FOR 2ND PAGE OF PAIR ISZ PGPTR2 JMS SETSW / CHECK SWITCHES AGAIN JMS DOUT / IT IS USED, OUTPUT A "CORE PAGE" ISZ PGPTR1 / BUMP PTRS AGAIN ISZ PGPTR2 ISZ PGCTR / SCANNED ALL PAGES? JMP DOLIL / NO JMP FINISH / YES PGCTR, 0 / PAGE TABLE PAIR COUNTER BLEFT1, 0 / BLOCKS LEFT IN INPUT 1 BLEFT2, 0 / BLOCKS LEFT IN INPUT 2 JMS TITLE / PRINT RUN TITLE DOLOOP, JMS READIN / COPE WITH BUFFER FILLING JMS DOUT / OUTPUT THE BLOCK ISZ RELBLK / BUMP RELATIVE BLK # ISZ BLEFT2 / BUMP INPUT 2 LENGTH CTR JMP DO3 / NOT EMPTY YET TAD DUMP2S / 2ND FILE EMPTY, CHECK IF DUMPING SZA CLA / 2ND DUMP MODE? JMP FINISH / YES-THRU ISZ DUMPSW / NO-GO TO 1ST DUMP MODE DO3, ISZ BLEFT1 / BUMP INPUT 1 LENGTH CTR JMP DOLOOP / GO BACK & DO MORE ISZ DUMP2S / SET 2ND DUMP SWITCH TAD DUMPSW / 1ST FILE EMPTY SNA CLA / DUMP MODE ALREADY? JMP DOLOOP / NO-KEEP GOING / YES-FINISH OUTPUT & CLOSE FINISH, TAD SLASHD / GET /D SWITCH SNA CLA / SET? JMP FINI / NO-NORMAL TAD ANYOUT / YES-SHORTENED OUTPUT SZA CLA / ANY DIFFERENCES? TAD (MESNC-MESND/ "DIFFERENT" TAD (MESND-1 / "SAME" JMP FINC FINI, TAD ANYOUT / NOT 0 IF ANYTHING OUTPUT SZA CLA / ANYTHING? JMP DONE / YES-DONE TAD I A7612 / 2ND INPUT DEVICE # SNA CLA TAD (MESNA-MESNB/ "NO OUTPUT" TAD (MESNB-1 / "NO DIFFERENCES" FINC, JMS PUTSTR JMS CRLF JMP DONE PAGE IF1, ZBLOCK 12 / INPUT FILE NAMES IF2= IF1+5 / FOR .SV DEFAULT EMULATION DONE, TAD (232 / "^Z (EOF) JMS PACK / TO OUTPUT FILE BUFFER TAD OCNT / BUFFER CHAR COUNTER TAD (1400 / RESET VALUE IS -1400 SNA / AT START? JMP DONE2 / YES-GO CLOSE NOW TAD (-600 / NO-WRITE LAST BUFFER SMA SZA CLA IAC IAC DCA WBLN TAD WBLN CLL RTR;RTR;RTR TAD (4010 DCA OFUNWD / NEW FUNCTION WORD FOR CALL TO OUTPUT HANDLER DONE1, JMS PACK / KEEP PACKING 0'S UNTIL BUFFER IS DUMPED TAD OCNT TAD (1400 / RESET VALUE IS -1400 SZA CLA / DUMPED BUFFER YET? JMP DONE1 / NO-FILL WITH 0'S DONE2, TAD STBLK CIA TAD OBLK DCA NOUT / # BLOCKS IN OUTPUT FILE DCA 7 / FORCE USR TO REREAD DIRECTORY TAD I (7600 / GET OUTPUT DEVICE # JMS I (USR 4 / CLOSE 7601 / NAME PTR NOUT, 0 / # BLKS IN OUTPUT JMS ERROR8 / CLOSE FAILED!! ALT, TAD I (7642 / GET ALT MODE BIT SMA CLA / ALT MODE IS BIT 0 JMP OCSTA / NOT SET, CALL CD AGAIN GIVEUP, CDF CIF 0 JMP I (7600 / RETURN TO OS/8 / SET IMAGE FILE SWITCHES / RETURN TO CALL+1 IF EITHER SWITCH SET SETSW, 0000 DCA DUMPSW / CLEAR SWITCHES FOR CHECK DCA DUMP2S TAD I PGPTR1 / CHECK FOR FILE 1 PAGE SNA CLA / USED? ISZ DUMP2S / NO-BUMP 2 ONLY SWITCH TAD I PGPTR2 / CHECK FOR FILE 2 PAGE SNA CLA / USED? ISZ DUMPSW / NO-BUMP 1 ONLY SWITCH M2C TAD DUMPSW TAD DUMP2S SNA CLA / EITHER PAGE SWITCH SET? ISZ SETSW / NEITHER PAGE USED, SKIP CALL+1 JMP I SETSW / INITIALIZE INPUT BUFFER PARAMETERS IINIT, 0000 TAD (IBUF1 DCA IWD1 / INPUT 1 WORD PTR TAD (IBUF2 DCA IWD2 / INPUT 2 WORD PTR TAD SLASHI SNA CLA JMP .+3 M1C JMP .+3 TAD IBLEN CIA DCA EBCNT / INPUT BUFFER BLOCK COUNTER JMP I IINIT / CHECK DUMPSW / GO TO ADDR THAT IS ARG1 IF IT IS SET DCHK, 0000 TAD I DCHK / GET SET ADDRESS DCA TMP / SAVE IT ISZ DCHK / POINT TO OK RETURN TAD DUMPSW / GET SWITCH SZA CLA / CLEAR? JMP I TMP / NO-GO TO ARG ADDR JMP I DCHK / YES-RETURN / MOVE A BLOCK FROM FIELD 0 TO FIELD 1 / ARGS ARE SOURCE & DESTINATION ADDRESSES-1 MOVEBL, 0000 TAD I MOVEBL DCA XR10 ISZ MOVEBL TAD I MOVEBL DCA XR11 ISZ MOVEBL TAD (-400 DCA TMP CDF 0 TAD I XR10 CDF 10 DCA I XR11 ISZ TMP JMP .-5 JMP I MOVEBL PAGE / THIS ROUTINE DECIDES WHAT TO SEND OUT / & PUTS IT IN THE LINE BUFFER(S) COMPAR, 0000 CDF 0 TAD DUMPSW SZA CLA JMP CDMP1 / ONLY FILE 1 TAD DUMP2S SZA CLA JMP CDMP2 / ONLY FILE 2 LEFT TAD I IWD1 AND MASK DCA TMP TAD I IWD2 AND MASK CIA TAD TMP SZA CLA JMP COMB / DIDN'T MATCH, DUMP THEM COMC, CDF 10 / MATCHED, PACK 4 BLANKS JMS BLOUT JMS BLOUT JMS BLOUT JMS BLOUT COMA, ISZ IWD1 ISZ IWD2 JMP I COMPAR CDMP1, TAD I IWD1 / IN DUMP, MASK BITS MUST BE ON IN DATA JMS CHMSK / COMPARE VALUE TO MASK VALUE TAD I IWD1 / REGET WORD & SEND IT OUT CDF 10 JMS OCTOUT LPACK1 JMP COMN CDMP2, TAD I IWD2 JMS CHMSK / CHECK AGAINST MASK TAD I IWD2 CDF 10 JMP COME COMB, TAD I IWD2 DCA TMP TAD I IWD1 CDF 10 JMS OCTOUT LPACK1 TAD TMP COME, JMS OCTOUT LPACK2 COMN, ISZ NONBL / NOT 0 IF NON-BLANK OUTPUT ON THIS LINE JMP COMA MASK, 0 DMASK, 0 / IN SEARCH ("/S" SPECIFIED), THE "CMA" IS CHANGED / TO "CIA", THE "AND" IS CHANGED TO A "TAD", AND / THE WORD MUST BE EQUAL TO THE MASK TO MATCH. CHMSK, 0000 CHP1, CMA / CIA IF /S CHP3, AND DMASK / TAD IF /S SZA CLA / REQUIRED BITS ON? JMP COMC / NO-OUTPUT BLANKS JMP I CHMSK / RETURN TO PRINT IT IFNDEF GERMAN < MESB, TEXT "RELATIVE BLOCK " MESL, TEXT " ( ABSOLUTE BLOCK " MESR, TEXT " )" MESC1, TEXT "S.A.= " MESC2, TEXT "JSW= " MESC3, TEXT "CORE=" MESNA, TEXT "NO OUTPUT" MESNB, TEXT "NO DIFFERENCES" MESNC, TEXT "DIFFERENT" MESND, TEXT "SAME" TXFL, TEXT "FILES " > IFDEF GERMAN < MESB, TEXT \RELATIVES BLOCK \ MESL, TEXT \ ( ABSOLUTES BLOCK \ MESR, TEXT \ )\ MESC1, TEXT \START=\ MESC2, TEXT \JSW = \ MESC3, TEXT \SPEICHER:\ MESNA, TEXT \NICHTS GEFUNDEN\ MESNB, TEXT \KEIN UNTERSCHIED\ MESNC, TEXT \VERSCHIEDEN\ MESND, TEXT \IDENTISCH\ TXFL, TEXT \DATEIEN \ > PAGE / PUT OUT LPBLK LINES / INITIALIZATION ALREADY COMPLETE DOUT, 0000 TAD LPBLK DCA LNCNT / # OF LINES COUNTER / OUTPUT TO THE LINE BUFFER DOUL, TAD (LBUF1-1 DCA XR13 / LINE BUFFER PTR TAD XR13 DCA MAX1 TAD (LBUF2-1 DCA XR14 / 2ND LINE BUFFER PTR TAD XR14 DCA MAX2 TAD NGRPS DCA BUNCH TAD IWD1 AND (377 / STRIP TO OFFSET DCA LINWD / SAVE IN CASE ANYTHING ON THIS LINE DCA NONBL / CLEAR BLANK LINE SWITCH LIN5, TAD (-4 DCA GROUP / 4 WORDS PER GROUP JMS BLOUT / EXTRA BLANK BETWEEN GROUPS LIN6, JMS BLOUT / BLANK BETWEEN NUMBERS JMS COMPAR ISZ GROUP / GROUP DONE? JMP LIN6 / NO ISZ BUNCH / ALL GROUPS DONE? JMP LIN5 / NO / IF CURRENT LINE IS NON-BLANK (NONBL NOT 0), / PACK CURRENT LINE BUFFER INTO OUTPUT BUFFER TAD NONBL SNA CLA JMP CR5 / BLANK LINE (JUST RESET BUFFER PARAMS) TAD SLASHD / /D SWITCH SZA CLA / DIFFERENCES ONLY? JMP CR9 / YES-SETUP FINISH TAD HOUT / HEADER OUTPUT SWITCH SNA CLA / ALREADY OUTPUT FOR THIS BLOCK? JMS HEADER / NO-SEND NOW TAD MAX1 CMA TAD (LBUF1-1 DCA CHCNT / # CHARS CTR TAD (LBUF1-1 DCA XR13 / BUFFER 1 PTR / SETS UP LINE LABEL IN LINWD IF /I / PACKS FIELD DIGIT IF /I / PACKS SPACE IF NOT /I TAD SLASHI / /I SWITCH SZA CLA / CLEAR? JMP .+3 / NO-GO DO REAL WORK JMS PBL / YES-PACK A BLANK JMP CR0 TAD PGPTR1 / PAGE TABLE POINTER TAD (-PGTAB1 / -TABLE BASE ADDR RTR;RTR;RAR DCA TMP TAD TMP RAR AND (7400 TAD LINWD DCA LINWD / NOW AN ADDRESS, NOT JUST OFFSET TAD TMP JMS PDIG / PACK FIELD DIGIT CR0, TAD LINWD / LABEL NUMBER (OFFSET OR ADDRESS) JMS OCTOUT / = WORD OR ADDR OFFSET APACK, PACK JMS PBL / EXTRA BLANK BETWEEN LABEL & VALUES JMP CR1E / IN CASE NO CHARS FOR FILE 1 CR1, TAD I XR13 JMS I APACK / SEND OUT EACH CHAR CR1E, ISZ CHCNT JMP CR1 TAD DUMPSW SZA CLA / DUMP MODE? JMP CR4 / YES-ONLY ONE OUTPUT SECTION TAD SEGSIZ TAD (-LBUF1-1 TAD XR13 JMS PMBL / # BLANKS TO START 2ND FILE TAD MAX2 CMA TAD (LBUF2-1 DCA CHCNT TAD (LBUF2-1 DCA XR14 JMP CR2E / IN CASE NONE CR2, TAD I XR14 JMS I APACK CR2E, ISZ CHCNT JMP CR2 CR4, JMS CRLF CR5, ISZ LNCNT JMP DOUL JMP I DOUT CR9, ISZ ANYOUT / NONZERO FOR DIFFERENCE JMP FINISH / ALL THRU BECAUSE /D ONLY CHECKS FOR 1ST DIFF NONBL, 0 / NON-BLANK LINE SW CHCNT, 0 BUNCH, 0 GROUP, 0 LINWD, 0 LNCNT, 0 / PUT A CHAR INTO THE LINE BUFFER 1 LPACK1, 0000 DCA I XR13 TAD XR13 DCA MAX1 JMP I LPACK1 MAX1, 0 / PUT ONE IN BUF 2 LPACK2, 0000 DCA I XR14 TAD XR14 DCA MAX2 JMP I LPACK2 MAX2, 0 PAGE / READ FILE 1 INTO BUFFER READ1, 0000 TAD IFNWD1 DCA IFNSV1 / SAVE FUNCTION WORD TAD EBLK1 / -(LAST BLOCK+1) TAD INBLK1 / ADD CURRENT BLOCK STL / (FOR 13 BIT ARITH) TAD IBLEN / ADD BUFFER LENGTH SNA SZL / OK? JMP RD11 / YES-GO READ IT JMS ROR6 / NO-ADJUST FUNCTION WORD CIA TAD IFNSV1 / SUBTRACT SHORTAGE DCA IFNWD1 RD11, CLA CIF 0 JMS I INH1 / CALL HANDLER IFNWD1, 1000 / FUNCTION (INPUT, 10 (OR 20) PAGES, DF=0) IBUF1 INBLK1, 0 JMS ERROR5 / INPUT #1 ERROR TAD IFNSV1 DCA IFNWD1 / RESTORE FUNCTION WORD JMP I READ1 EBLK1, 0 / READ FILE 2 INTO BUFFER READ2, 0000 TAD IFNWD2 DCA IFNSV2 / SAVE FUNCTION WORD TAD EBLK2 / -(LAST BLOCK+1) TAD INBLK2 / ADD CURRENT BLOCK STL / (FOR 13 BIT ARITH) TAD IBLEN / ADD BUFFER LENGTH SNA SZL / OK? JMP RD21 / YES-GO READ IT JMS ROR6 / NO-ADJUST FUNCTION WORD CIA TAD IFNSV2 / SUBTRACT SHORTAGE DCA IFNWD2 RD21, CLA CIF 0 JMS I INH2 IFNWD2, 1000 IBUF2 INBLK2, 0 JMS ERROR6 / INPUT #2 ERROR TAD IFNSV2 DCA IFNWD2 / RESTORE FUNCTION WORD JMP I READ2 IFNSV1= READ2 IFNSV2= READ1 EBLK2, 0 / COPE WITH DIFFERENT TYPES OF BUFFER FILLING READIN, 0000 DCA HOUT / HEADER NOT OUT SWITCH ISZ EBCNT / INPUT BUFFER EMPTY? JMP I READIN / NO JMS CTRLC / CHECK FOR ^C STRUCK JMS IINIT / SETUP INPUT POINTERS & COUNTER TAD SLASHI / /I SWITCH SZA CLA / WHICH KIND IF FILE? JMP READII / /I (.SV) TAD DUMP2S / 2ND ONLY SWITCH SNA CLA / SET? JMS READ1 / NO-READ 1ST FILE TAD IBLEN / EITHER 4 OR 10 TAD INBLK1 DCA INBLK1 / BUMP FOR NEXT TIME TAD DUMPSW / 1ST ONLY SWITCH SNA CLA / SET? JMS READ2 / NO-READ 2ND FILE TAD IBLEN TAD INBLK2 DCA INBLK2 / BUMP FOR NEXT TIME JMP I READIN / /I SECTION READII, TAD I PGPTR1 / GET FILE 1 RELATIVE PAGE CLL RAR / CHANGE PAGE TO BLOCK OFFSET DCA RELBLK / SAVE FILE 1 RELATIVE BLOCK # TAD RELBLK SNA / FILE ONE NEEDED? JMP READI2 / NO-DO FILE 2 TAD ISTB1 DCA TMP / ABSOLUTE BLOCK # IN FILE 1 TAD INBLK1 / 1ST BLOCK IN BUFFER 1 NOW JMS READIC / CALC WORD OFFSET FOR DESIRED BLOCK JMP NEED1 / RETURN TO CALL+1 IF NEED TO READ BLOCK TAD IWD1 DCA IWD1 / BUMP WORD POINTER JMP READI2 / TRY 2ND FILE NOW NEED1, CLA CLL / NEED TO READ FILE 1 TAD TMP / DESIRED BLOCK DCA INBLK1 / WILL BE 1ST BLOCK IN BUFFER JMS READ1 READI2, TAD I PGPTR2 / GET FILE 2 RELATIVE PAGE CLL RAR / CHANGE PAGE TO BLOCK DCA RELBK2 / SAVE FILE 2 RELATIVE BLOCK # TAD RELBK2 SNA / NEEDED? JMP I READIN / NO-THRU TAD ISTB2 DCA TMP TAD INBLK2 JMS READIC JMP NEED2 TAD IWD2 DCA IWD2 JMP I READIN NEED2, CLA CLL TAD TMP DCA INBLK2 JMS READ2 JMP I READIN ISTB1, 0 ISTB2, 0 READIC, 0000 TAD IBLEN / ONE PAST END CIA TAD TMP / COMPARE TO DESIRED BLOCK SMA JMP I READIC / PAST END OF BUFFER. NEED TO READ FILE TAD IBLEN SPA JMP I READIC / BEFORE START OF BUFFER. N.T.R.F. JMS ROR6 RAL / (AC) IS WORD OFFSET FOR DESIRED BLOCK ISZ READIC / SKIP N.T.R.F. RETURN JMP I READIC PAGE / PRINTS THE BLOCK HEADER INFORMATION HEADER, 0000 JMS FCHK / CHECK FOR /F JMS PUTSTR MESB-1 / "RELATIVE BLOCK " TAD SLASHI / /I SWITCH SZA CLA / SET? JMP HE1 / YES TAD RELBLK / NO-JUST SEND RELBLK JMS OCTOUT PACK JMP HE3 / GO DO ABSOLUTE PART HE1, TAD RELBLK DCA .+4 TAD RELBK2 DCA .+3 JMS COMHED / RELATIVE BLOCKS AS NEEDED 0 0 HE3, JMS PUTSTR MESL-1 / " ( ABSOLUTE BLOCK " TAD SLASHI / /I SWITCH SZA CLA / SET? JMP HE4 / YES TAD RELBLK / NO SKP HE4, TAD RELBK2 / 2ND RELATIVE BLOCK TAD ISTB2 / + 2ND START BLOCK DCA HA2 / IS 2ND ABSOLUTE BLOCK TAD RELBLK / 1ST RELATIVE BLOCK TAD ISTB1 / + 1ST START BLOCK DCA HA1 / IS 1ST ABSOLUTE BLOCK JMS COMHED / SEND THE BLOCK NUMBER(S) OUT HA1, 0 HA2, 0 JMS PUTSTR MESR-1 / " )" JMS CRLF JMS PUTSTR / 2ND LINE OF HEADER HMES-1 / " ADDR" TAD DUMP2S SZA CLA JMP HE2 JMS HEAD2 / SEND IT OUT TAD DUMPSW SZA CLA / DUMP MODE? JMP HE9 / YES-FINISHED HE8, TAD (-2 DCA TMP JMS PBL / SEND BLANKS UNTIL LINED UP WITH 2ND PART ISZ TMP JMP .-2 JMS HEAD2 / NOW SEND REST OF LABEL HE9, JMS CRLF / END OF LINE ISZ HOUT / NOT 0, HEADER OUTPUT P1C / NOT 0 DCA ANYOUT / = 1 IF ANYTHING OUTPUT JMP I HEADER HE2, TAD SEGSIZ / =-25 OR -52 JMP HE8 HOUT, 0 / HEADER OUTPUT SWITCH / ROUTINE TO LABEL THE COLUMNS HEAD2, 0000 TAD NGRPS / -# GROUPS PER LINE DCA HGP / GROUPS PER LINE DCA OFFV / OFFSET VALUE HL5, TAD (-4 DCA HWD / 4 WORDS PER GROUP JMS PBL / EXTRA BLANK BETWEEN GROUPS HL6, M3C JMS PMBL / 3 LEADING BLANKS TAD OFFV / GET VALUE (2 DIGIT NUMBER) CLL RTR;RAR / ROTATE 1ST DIGIT TO BITS 9-11 AND (7 / STRIP TO DIGIT SNA / NOT 0? JMP HL6B / NO-DON'T PRINT IT JMS PDIG / PACK ASCII DIGIT HL7, TAD OFFV / NOW 2ND DIGIT JMS PDIG / PRINT THE DIGIT IN OUTPUT FILE ISZ OFFV / BUMP FOR NEXT ONE ISZ HWD / WORDS DONE? JMP HL6 / NO ISZ HGP / GROUPS DONE? JMP HL5 / NO JMP I HEAD2 / YES HL6B, JMS PBL / PRINT BLANK INSTEAD OF LEADING 0 JMP HL7 HWD, 0 HGP, 0 OFFV, 0 IFNDEF GERMAN < HMES, TEXT " ADDR " > IFDEF GERMAN < HMES, TEXT \ ZELLE\ > / COMMON HEADER INFO OUTPUT / JMS COMHED / ARG1= # IF NOT DUMP2S / ARG2= # IF NOT DUMPSW / #S SEPARATED BY " AND " IF BOTH OUTPUT COMHED, 0000 TAD DUMP2S / FILE 2 ONLY SWITCH SZA CLA / SET? JMP CH1B / YES TAD I COMHED / NO-OUTPUT 1ST # JMS OCTOUT PACK TAD DUMPSW / FILE 1 ONLY SWITCH SZA CLA / SET? JMP CH1 / YES-THRU JMS PUTSTR / NO-SEND SEPARATOR MESSAGE MESS-1 / " AND " CH1B, ISZ COMHED / POINT TO 2ND ARG TAD I COMHED / OUTPUT 2ND # JMS OCTOUT PACK CH1C, ISZ COMHED / POINT TO RETURN JMP I COMHED CH1, ISZ COMHED / POINT TO 2ND ARG JMP CH1C / RETURN IFNDEF GERMAN < MESS, TEXT " AND " > IFDEF GERMAN < MESS, TEXT \ UND \ > PAGE / PACK ONE ASCII DIGIT (OCTAL) IN OUTPUT BUFFER PDIG, 0000 AND (7 TAD (260 JMS PACK JMP I PDIG / SEND A BLANK TO THE OUTPUT ROUTINE PBL, 0000 TAD (240 JMS PACK JMP I PBL / PRINT MULTIPLE BLANKS IN OUTPUT BUFFER / CAN BE CALLED TWO WAYS LIKE PUTSTR PMBL, 0000 SZA / METHOD SELECT JMP .+3 / # BLANKS IN AC TAD I PMBL / # BLANKS IN ARG1 ISZ PMBL / POINT TO RETURN DCA PCNT / BLANK COUNT JMS PBL / SEND A BLANK ISZ PCNT / THRU? JMP .-2 / NO-DO ANOTHER JMP I PMBL PCNT= PDIG / PACK CR,LF TO OUTPUT BUFFER / INSERT FORM FEED AFTER PROPER NUMBER OF LINES CRLF, 0000 TAD (215 / "CR JMS PACK TAD (212 / "LF JMS PACK ISZ LINES / PAGE FULL? JMP I CRLF / NO-RETURN TAD (214 / YES-OUTPUT FORM FEED JMS PACK TAD NLNES DCA LINES / RESET COUNTER JMP I CRLF LINES, -100 / LINES PER PAGE COUNTER NLNES, -100 / LINES PER PAGE RESET VALUE / PUT 6 BIT TEXT TO OUTPUT ROUTINE / TWO CALLING METHODS / 1) TEXT ADDR-1 IN AC; RETURN TO CALL+1 / 2) TEXT ADDR-1 IN ARG1; AC=0!; RETURN TO CALL+2 PUTSTR, 0000 SZA / METHOD 1? JMP .+3 / YES-ARG IS IN AC TAD I PUTSTR / NO-ARG IS IN CALL+1 ISZ PUTSTR / BUMP MODE 2 RETURN PTR DCA PUTADR / SAVE TEXT PTR PUT1, ISZ PUTADR / BUMP PTR TO NEXT WORD TAD I PUTADR / GET NEXT PAIR OF CHARS RTR;RTR;RTR / ROTATE 1ST HALF TO RIGHT 6 BITS JMS TTO6 / TRANSLATE & OUTPUT TAD I PUTADR / REGET WORD FOR RIGHT HALF JMS TTO6 / TRANSLATE & SEND IT OUT ALSO JMP PUT1 / KEEP GOING (RETURN IS THRU TTO6) PUTADR= PDIG / STRING PTR FOR PUTSTR / TRANSLATE & OUTPUT 6 BIT ASCII / CHAR IS IN RIGHT HALF OF AC / LEFT HALF IS GARBAGE / (THIS IS PART OF PUTSTR!) TTO6, 0000 AND (77 / STRIP OFF GARBAGE SNA / 6 BIT 00 IS TERMINATOR JMP I PUTSTR / EOT-RETURN TAD (240 AND (77 TAD (240 JMS PACK / SEND 8 BIT ASCII JMP I TTO6 / AC=0 / PACK 8 BIT BYTES INTO OUTPUT BUFFER / USES OS/8 TEXT FORMAT PACK, 0000 / OS/8 OUTPUT PACKING ROUTINE JMP I PSW PSW, PA1 ISZ OCNT JMP I PACK JMS WRITE JMP I PACK PA1, DCA I OWD / 1ST OF TRIP JMS PSW DCA PSAV / 2ND OF TRIP JMS PSW CLL RTL;RTL / 3RD OF TRIP DCA PSW TAD PSW AND (7400 TAD I OWD DCA I OWD / PACK 1ST HALF OF PAIR ISZ OWD TAD PSW CLL RTL;RTL AND (7400 TAD PSAV DCA I OWD / PACK 2ND HALF ISZ OWD JMS PSW JMP PA1 PSAV, 0 OWD, 0 / OUTPUT BUFFER PTR / OUTPUT AC AS 4 OCTAL DIGITS / ARG1 IS THE ADDRESS OF THE OUTPUT ROUTINE OCTOUT, 0000 DCA OCTMP / SAVE VALUE TAD I OCTOUT / GET OUTPUT ROUTINE PTR DCA WPAK TAD (-4 DCA DIGCNT / DIGIT CTR OCL, TAD OCTMP RTL;RAL DCA OCTMP TAD OCTMP RAL AND (7 / STRIP TO DIGIT TAD (260 / MAKE ASCII JMS I WPAK / GO TO OUTPUT ROUTINE ISZ DIGCNT / DONE? JMP OCL / NO-DO NEXT DIGIT ISZ OCTOUT / YES-POINT TO RETN JMP I OCTOUT WPAK= PBL / POINTS TO OUTPUT ROUTINE OCTMP= PMBL DIGCNT= PDIG / PLACE A BLANK IN BOTH LINE BUFFERS BLOUT, 0000 TAD (240 DCA I XR13 TAD (240 DCA I XR14 JMP I BLOUT / ROTATE AC RIGHT 6 BITS / SAVES SPACE THIS WAY / WOULD BE FASTER "IN LINE" ROR6, 0000 CLL RTR;RTR;RTR JMP I ROR6 PAGE / PRINT CORE ADDRESS RANGE COROUT, 0000 DCA CORBL / LEADING BLANK COUNT TAD I COROUT DCA LIM / TABLE LIMIT ISZ COROUT TAD I COROUT / CURRENT PTR VALUE DCA XR10 TAD I XR10 / SCAN UNTIL NON-ZERO SNA CLA / NOW? JMP .-2 / NO-KEEP LOOKING TAD XR10 / COMPARE POINTER TAD LIM / TO LIMIT VALUE SMA SZA / PAST END? JMP PGEOT / YES-ABORT TAD (377 / CHANGE TO PAGE OFFSET DCA CORL TAD CORBL / REGET LEADING BLANK COUNT SZA / ANY? JMS PMBL / YES-GO PRINT THEM DCA CORBL / RESET IF PRINTED STA / AC=-1 FOR 1ST OF PAIR JMS PAGOUT / PRINT 1ST PAGE ADDRESS CORL, 0 TAD ("- JMS PACK / PRINT SEPARATOR TAD I XR10 / SCAN UNTIL ZERO SZA CLA / NOW? JMP .-2 / NO-KEEP LOOKING STA / AC=-1 TAD XR10 / COMPARE PTR TAD LIM / TO LIMIT SMA / PAST END? CLA / YES-FORCE BACK TAD (377 / CHANGE TO OFFSET DCA CORH JMS PAGOUT / AC=0 FOR 2ND OF PAIR CORH, 0 TAD LIM TAD (377 CIA TAD CORH DCA I COROUT / UPDATE CURRENT POINTER ISZ COROUT PGEOT, ISZ COROUT P7600, 7600 / CLA JMP I COROUT LIM= PGPTR2 / TWO NON-CONFLICTING USES FOR THE SAME LOCATION CORBL, 0 / LEADING BLANK COUNT / DUMP CCB(S) CCBOUT, 0000 JMS CRLF JMS SAOUT / PRINT 5 DIGIT START ADDRESS SF1, 0 SA1, 0 JMS DCHK / CHECK DUMP SWITCH CO2 / GO HERE IF SET TAD DELTAC JMS PMBL / SPACE OVER TO 2ND START JMS SAOUT / PRINT S.A. SF2, 0 SA2, 0 CO2, JMS CRLF / NEW LINE JMS JSWOUT / PRINT JSW JSW1, 0 JMS DCHK / ONE ONLY CHECK AGAIN CO4 TAD DELTAC JMS PMBL JMS JSWOUT JSW2, 0 CO4, JMS CRLF JMS PUTSTR MESC3-1 / "CORE=" JMS DCHK CO6 TAD (-6 TAD DELTAC JMS PMBL JMS PUTSTR MESC3-1 / "CORE=" TAD (PGTAB1-1 DCA PGP1 TAD (PGTAB2-1 DCA PGP2 CO6, JMS CRLF M2C TAD DUMPSW TAD DUMP2S SNA CLA / BOTH SET NOW? JMP I CCBOUT / YES-BYE DCA DUMPSW / CLEAR FILE SWITCHES DCA DUMP2S TAD (-6 / INDENT ADDRESSES JMS COROUT / PRINT FILE ONE PAGE RANGE -PGTAB1-377 / TABLE LIMIT VALUE PGP1, PGTAB1-1 / CURRENT POINTER VALUE (FILE 1) ISZ DUMP2S / FILE ONE TABLE EMPTIED TAD DUMP2S SZA CLA / SET NOW? TAD (-13 / YES-EXTRA BLANKS INSTEAD OF ADDRESSES TAD DELTAC TAD CORBL / ADD IN UNUSED PREVIOUS BLANKS JMS COROUT / PRINT FILE TWO PAGE RANGE -PGTAB2-377 / TABLE LIMIT VALUE PGP2, PGTAB2-1 / CURRENT POINTER VALUE (FILE 2) ISZ DUMPSW / FILE TWO TABLE EMPTIED JMP CO6 / KEEP GOING DELTAC, -52 / CCB DELTA FROM FILE1 TO FILE 2 PAGE / WRITE THE OUTPUT BUFFER WRITE, 0000 JMS CTRLC TAD FULLSW SZA CLA / IS FILE FULL? JMS ERROR2 / YES CLA STL / 13 BIT ARITH TAD WBLN / BUFFER LENGTH IN BLOCKS TAD MLEN / -BLOCKS LEFT SNA / EXACT FIT? ISZ FULLSW / YES-SET SWITCH FOR NEXT CALL DCA MLEN SZA SNL / WON'T FIT? JMS ERROR2 / YES-NO MORE ROOM CIF 0 JMS I OUTH OFUNWD, 4410 / FUNCT. (OUTPUT,4 PAGES,FIELD 1) OBUF / BUFFER ADDRESS OBLK, 0 JMS ERROR7 / OUTPUT ERROR TAD WBLN TAD OBLK DCA OBLK / BUMP FOR NEXT TIME JMS OINIT / RESET BUFFER POINTERS JMS CTRLC / SAFE JMP I WRITE WBLN, 2 / BUFFER LENGTH IN BLOCKS (SHORTEN FOR LAST WRITE) FULLSW, 0 / SET TO NONZERO IF LAST WRITE FILLED OUTPUT FILE / INITIALIZE OUTPUT BUFFER PARAMETERS OINIT, 0000 TAD (OBUF DCA OWD / OUTPUT POINTER TAD (-1400 DCA OCNT / OUTPUT CHAR COUNTER JMP I OINIT / OPEN INPUT FILE FLGET, 0000 TAD I FLGET / GET HANDLER WORD (ARG1) DCA FLHAND / BECOMES ARG TO FETCH ISZ FLGET TAD I FLGET / GET ENTRY WORD ADDRESS (ARG2) DCA FDEVNT ISZ FLGET TAD I FLGET / GET FILE WORDS ADDR (ARG3) DCA FDEVWD / POINTS TO DEVICE WORD ISZ FLGET TAD I FLGET / (ARG4) DCA FLENPT / POINTS TO LENGTH WORD ISZ FLGET TAD I FLGET / (ARG5) DCA FSTBWD / POINTS TO START BLOCK WORD ISZ FLGET TAD I FLGET / (ARG6) DCA FEBWD / POINT TO END BLOCK WORD ISZ FLGET / POINT TO RETN TAD I FDEVWD / GET DEVICE # JMS I (USR 1 / FETCH HANDLER FLHAND, 0 / BECOMES ENTRY ADDR JMS ERROR4 / FETCH FAILED TAD FLHAND DCA I FDEVNT / PUT ENTRY ADDR IN PG 0 WORD TAD FDEVWD IAC DCA FLSTB / POINTS TO NAME WORDS TAD I FLSTB // GET THE 1ST FILENAME WORD SZA CLA // IS A FILENAME SPECIFIED? JMP .+3 // YES, USE IT TAD (7606) // NO, USE 1ST INPUT FILENAME DCA FLSTB // SET UP POINTER TO IT TAD I FDEVWD / GET DEVICE # JMS I (USR 2 / LOOKUP FLSTB, 0 / POINTS TO NAME. BECOMES ST BLK FLEN, 0 / BECOMES -FILE LENGTH JMS FLGER / LOOKUP ERROR TAD FLEN DCA I FLENPT / SAVE FILE LENGTH TAD FLSTB DCA I FSTBWD / SAVE FILE START BLOCK TAD FLEN CIA TAD FLSTB CIA DCA I FEBWD / -(LAST BLOCK+1) TAD FLSTB / RETURN WITH START BLOCK IN AC JMP I FLGET / LOOKUP ERROR, TRY AGAIN WITHOUT DEFAULT EXTENSION FLGER, 0000 F7600, 7600 / (AC) MAY NOT BE 0 TAD FDEVWD / FILE PTR TAD (-7605 / 1ST FILE IS AT 7605 SNA CLA / WHICH ONE IS THIS? TAD (IF1-IF2 / 1ST TAD (IF2+1 / 2ND DCA FLSTB2 / POINT TO PROPER NAME TAD I FDEVWD / DO ANOTHER LOOKUP JMS I (USR 2 FLSTB2, 0 0 JMS ERROR4 / REAL ERROR THIS TIME TAD FLSTB2 / COPY RESULTS TO OTHER CALL DCA FLSTB TAD FLSTB2+1 DCA FLEN JMP I FLGER FDEVNT, 0 / POINT TO DEVICE ENTRY ADDR WORD FDEVWD, 0 / POINT TO DEVICE WORD FLENPT, 0 / POINT TO LENGTH WORD FSTBWD, 0 / POINT TO START BLOCK WORD FEBWD, 0 / POINT TO END BLOCK WORD PAGE / SET INPUT AND OUTPUT FILE DEFAULTS HERE DEFALT, 0000 / INQUIRE ABOUT TTY: FOR DEFAULT AND /H INFORMATION DCA .+4 JMS I (USR 12 / INQUIRE 5524 / TTY: ENCODED TTDVNO, 0 / BECOMES DEVICE # 0 / BECOMES ENTRY ADDR (IGNORED) D7600, 7600 / ERROR (IGNORE HERE, FETCH WILL FIND IT) TAD I D7600 / OUTPUT DEVICE # SNA / SPECIFIED? TAD TTDVNO / NO-DEFAULT TO TTY: DCA I D7600 / IN EITHER CASE, PUT IT IN PROPER PLACE / DEFAULT OUTPUT EXTENSION TO ".LS" TAD I (7601 / 1ST WORD OF OUTPUT FILE NAME SNA CLA / SPECIFIED? JMP DS1 / NO-DON'T CHANGE EXTENSION TAD I (7604 / YES-CHECK FOR SPECIFIED EXTENSION SNA / SPECIFIED? TAD (1423 / NO-FORCE ".LS" DCA I (7604 / & PUT BACK DS1, TAD SLASHI / /I SWITCH SNA CLA / SET? JMP I DEFALT / NO-DON'T APPLY DEFAULT INPUT EXTENSIONS / COPY INPUT FILE SPECS TO SAVE AREA / IN CASE "DEFAULT" EMULATION REQUIRED TAD (7604 / INPUT AREA-1 DCA XR10 TAD (IF1-1 / SAVE AREA-1 DCA XR11 TAD (-12 / 12 WORDS IN TWO SPECS DCA TMP TAD I XR10 / COPY DCA I XR11 ISZ TMP JMP .-3 / NOW SET INPUT DEFAULTS IF REQUIRED (/I & NO EXTENSION) TAD I (7606 / YES-FORCE ".SV" IF NONE SNA CLA / NAME THERE? JMP DS3 / NO-NO EXTENSION TAD I (7611 / YES-GET EXTENSION SNA / THERE? TAD (2326 / NO-FORCE ".SV" DCA I (7611 DS3, TAD I (7613 / SAME STUFF FOR INPUT 2 SNA CLA JMP DS3B / NO NAME TAD I (7616 / GET EXTENSION SNA TAD (2326 / .SV IF NONE DCA I (7616 DS3B, TAD LPBLK STL RAR DCA LPBLK / HALF AS MANY LINES PER "CORE PAGE" JMP I DEFALT / TITLE: / PRINT RUN TITLE FROM CD LINE BUFFER TITLE, 0000 JMS CRLF / PRINT CRLF TO FORCE TITLE TO LEFT MARGIN TAD I D7600 / GET OUTPUT DEVICE # CIA TAD TTDVNO / COMPARED TO TTY: SNA CLA / SAME? JMP HCHK / YES-ONLY PRINT HEADER IF /H / NO-PRINT HEADER TITL0, TAD (777 TAD CHAIN DCA XR10 / CD OR KM LINE BUFFER PTR TITL, CDF 0 / BUFFER FIELD TAD I XR10 / GET NEXT CHAR CDF 10 / THIS FIELD SNA / EOL? JMP TITE / YES JMS PACK / NO-PACK AC INTO BUFFER JMP TITL TITE, TAD SLASHD / GET /D SWTCH SZA CLA / SET? JMP TITD / YES JMS CRLF / NO-END LINE JMP I TITLE TITD, TAD CHAIN CIA TAD XR10 TAD (-1057 / CTR TO COL 60 SMA / PAST 60? M1C / YES-PRINT ONE BLANK JMS PMBL / SPACE OVER TO COLUMN 60 JMS PUTSTR TXFL-1 / "FILES " JMP I TITLE HCHK, TAD (20 / MASK FOR /H AND I (7643 / 1ST OPTION WORD SZA CLA / SET? JMP TITL0 / YES-GO PRINT HEADER TAD CHAIN TAD (1047 / NO-JUST INDENT RESULT LINE DCA XR10 JMP TITE / FCHK: / CHECK FOR /F / IF PRESENT, OUTPUT A FORM FEED / (ALSO RESET CRLF LINE COUNT) / ALSO PUT A COUPLE OF CRLFS FCHK, 0000 CLA IAC BSW / MASK FOR /F = 100 AND I (7643 / 1ST OPTION WORD SZA CLA / SET? JMP F5 / YES FE, JMS CRLF / SKIP A COUPLE OF LINES JMS CRLF JMP I FCHK F5, TAD (214 / FF JMS PACK / TO OUTPUT BUFFER TAD NLNES DCA LINES / RESET CTR IN CRLF JMP FE PAGE / THIS ROUTINE TOTALLY DECODES THE CCB OF A FILE / IT HAS 6 ARGUMENTS. ALL ARE ADDRESSES / ARG1= ADDR OF BUFFER CONTAINING CCB / ARG2= ADDR OF PAGE TABLE (400 WORDS) / ARG3= ADDR OF S.F. SAVE WORD / ARG4= ADDR OF S.A. SAVE WORD / ARG5= ADDR OF JSW SAVE WORD / ARG6= ADDR OF WORD CONTAINING MINUS THE FILE LENGTH / THESE ARGS ARE POINTED TO BY ONE ARG TO CCBDEC CCBDEC, 0000 TAD I CCBDEC / GET ARG PTR DCA XR11 / SAVE ARG POINTER ISZ CCBDEC / POINT TO RETURN TAD I XR11 / GET ARG 1 DCA XR10 TAD I XR11 / GET ARG 2 DCA PGBAS TAD I XR11 / GET S.F. SAVE ADDRESS DCA PI / SAVE IN POINTER TAD I XR10 / GET 1ST CCB WORD DCA NSEGS / LOCAL SAVE TAD NSEGS SMA JMS ERROR9 / COUNTER MUST BE NEGATIVE TAD (40 SPA CLA JMS ERROR9 / TOO MANY TAD I XR10 / GET 2ND CCB WORD DCA I PI / START FIELD TAD I PI AND (7603 / MASK OFF THE FIELD BITS TAD (-6203 / -(CDF CIF SZA CLA / PROPER INSTRUCTION? JMS ERROR9 / NO TAD I XR11 / GET S.A. SAVE ADDRESS DCA PI / SAVE IN POINTER TAD I XR10 / GET 3RD CCB WORD DCA I PI / START ADDRESS TAD I XR11 / GET JSW SAVE ADDRESS DCA PI / SAVE IN POINTER TAD I XR10 / GET 4TH CCB WRD DCA I PI / JSW TAD I PI AND (74 / STRIP TO BITS 6-9 (OS8 V3D) SZA CLA / ALL CLEAR? JMS ERROR9 / NO- P2C DCA CBL / FILE PAGES 0 & 1 ARE CCB CCL1, TAD I XR10 / GET 1ST OF DOUBLE-WORD DCA TMP TAD TMP AND (377 SZA CLA JMS ERROR9 / ADDR MUST BE MULTIPLE OF 400 TAD TMP CLL RTL;RTL DCA PI / LINK IS STILL IMPORTANT TAD I XR10 / GET 2ND HALF DCA TMP TAD TMP AND (70 TAD PI RTL TAD PGBAS DCA XR13 / PAGE TABLE ADDR FOR THESE PAGES TAD TMP AND (4007 SZA CLA JMS ERROR9 / UNUSED BITS MUST BE 0 TAD TMP AND (3700 SNA STL RAR / 0 MEANS 40 PAGES CLL RTR;RTR;RTR CIA DCA PCTR / # PAGES COUNTER FOR THIS GROUP TAD CBL DCA I XR13 / PUT FILE PAGE # IN CORE PAGE WORD ISZ CBL / BUMP CURRENT PAGE ISZ PCTR / THRU WITH THIS GROUP? JMP .-4 / NO ISZ CBL / YES-ROUND UP TO NEXT WHOLE BLOCK CLL STA RAL / AC=7776 AND CBL DCA CBL / DOUBLE WORDS ALWAYS START ON BLOCK BOUNDARY ISZ NSEGS / THRU WITH DOUBLE WORDS? JMP CCL1 / NO TAD I XR11 DCA PI TAD CBL CLL RAR TAD I PI SMA SZA CLA JMS ERROR9 / OFF END OF FILE JMP I CCBDEC NSEGS, 0 PGBAS, 0 PI, 0 PCTR= PI / SAME LOCATION. SHOULDN'T CONFLICT CBL, 0 CCBG1, OBUF-1 PGTAB1-1 SF1 SA1 JSW1 BLEFT1 CCBG2, OBUF+400-1 PGTAB2-1 SF2 SA2 JSW2 BLEFT2 / ROUTINE TO ZERO THE PAGE TABLES BEFORE CCB DECODE CCBZER, 0000 TAD CCBG1+1 / PAGE TABLE ADDRESS (FILE 1) DCA XR11 TAD CCBG2+1 / PAGE TABLE ADDRESS (FILE 2) DCA XR12 TAD (-400 DCA PCTR / 32K WOULD BE 256 PAGES DCA I XR11 DCA I XR12 ISZ PCTR JMP .-3 JMP I CCBZER PAGE / PRINT 5 DIGIT PAGE ADDRESS PAGOUT, 0000 DCA PGSW / AC=0 OR -1 TAD I PAGOUT / GET PAGE VALUE CLL RTR;RTR;RTR DCA TMP / SAVE 12 BIT ADDRESS TAD TMP RAL JMS PDIG / PRINT FIELD DIGIT TAD TMP AND P7600 / CLEAR NON PAGE BITS ISZ PGSW / END PAGE? TAD (177 / YES-SET LOW BITS JMS OCTOUT / PRINT 4 DIGITS PACK ISZ PAGOUT JMP I PAGOUT PGSW= PGPTR1 / 2ND USE FOR PGPTR1. SHOULDN'T CONFLICT / PRINT START ADDRESS SAOUT, 0000 JMS PUTSTR MESC1-1 / "S.A.= " TAD I SAOUT / START "CDF CIF" IS ARG1 RTR;RAR / MOVE FIELD TO BITS 9-11 JMS PDIG / PACK FIELD DIGIT ISZ SAOUT TAD I SAOUT / START ADDRESS IS ARG2 JMS OCTOUT / PRINT LOW 4 DIGITS PACK ISZ SAOUT / POINT TO RETURN JMP I SAOUT / PRINT JSW JSWOUT, 0000 JMS PUTSTR MESC2-1 / "JSW= " TAD I JSWOUT / JSW IS ARG1 JMS OCTOUT / PACK 4 DIGITS PACK ISZ JSWOUT JMP I JSWOUT / INITIALIZE PAGE ORGANIZATION / USED TO SET GROUPS PER LINE & LINES PER BLOCK / /T REDUCES THE PAGE SIZE FOR TTY OPERATION PAGSET, 0000 JMS OINIT / INIT OUTPUT BUFFER PARAMS TAD I (7644 / 2ND OPTION WORD AND (20 / MASK FOR /T SZA CLA / /T? JMP PAGS5 / YES-SMALL PAGES TAD (-52 DCA DELTAC / CCB OUTPUT DELTA IF /C/I M2C / NO-"NORMAL" SIZE PAGES DCA NGRPS / 2 GROUPS PER LINE TAD (-40 DCA LPBLK / 40 LINES PER BLOCK TAD (-52 DCA SEGSIZ / 52 CHARS PER SEGMENT TAD (-100 / 100 LINES PER PAGE ON OUTPUT JMP PAGS9 PAGS5, TAD (-25 DCA DELTAC M1C DCA NGRPS / 1 GROUP PER LINE TAD (-100 DCA LPBLK / 100 LINES PER BLOCK TAD (-25 DCA SEGSIZ / 25 CHARS PER SEGMENT TAD (-70 / 70 LINES PER PAGE ON OUTPUT PAGS9, DCA LINES TAD LINES DCA NLNES JMP I PAGSET / CHECK FOR ^C ON KBD CTRLC, 0000 CLA CLL / SAFE KSF / KEY STRUCK? JMP I CTRLC / NO KRS / YES-READ AND (177 / STRIP PARITY BIT TAD (-3 / COMPARE TO 7 BIT ^C SNA CLA / =^C? JMP GIVEUP / YES-RETURN TO OS/8 KCC / NO-CLEAR KBD FLAG JMP I CTRLC / & RETURN TO CALLER ERROR9, 0 ERROR8, ISZ ERROR ERROR7, ISZ ERROR ERROR6, ISZ ERROR ERROR5, ISZ ERROR ERROR4, ISZ ERROR ERROR3, ISZ ERROR ERROR2, ISZ ERROR ERROR1, ISZ ERROR JMS I (USR 7 / ERROR ERROR, 1 / ERROR NUMBER PAGE FIELD 1 *OCSTA $$$