.SYSID < .TITLE MTDUMP >,< 000> / /COPYRIGHT (C) 1975 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. / /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY /ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH /THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS /SOFTWARE, OR ANY OTHER COPIES THEREOF, MAY NOT BE PRO- /VIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON /EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO /THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE /SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE /WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COM- /MITMENT BY DIGITAL EQUIPMENT CORPORATION. / /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY /OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. .TITLE MTDUMP EDIT'S /PDP-9/15 MAG TAPE MULTIPLE-UTILITY PACKAGE, VERSION III. /COPYRIGHT 1970 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. /EDIT #001; OCT. 23,72 / 002 SK 13-NOV-73 CHANGE B2DPTR+9 FROM LAW -377 TO 376 /PETE WILSON 11-14-69 / 003 J. K. 22-MAY-74 / CHANGE TO GETREC ROUTINE TO SET EOF BIT IN STATUS / WORD WHEN IT CALLS A ONE WORD RECORD AN EOF. / /MODIFIED 8-12-70 DAN MOREHEAD /EDIT #004 EK 14-JUL-74 CHANGE SIGNON NUMBER /#005 8/5/74 (RCHM) ALLOW FILE STRUCTURED DUMP FILE PROCESSING TO / OCCUR PROPERLY /#006 10-10-74 (RCHM) KEEP THE FORMAT COMMAND FROM BOTCHING THE 9 CHANNEL / FOLLOWED BY/PROCEEDED BY A DENSITY COMMAND. /#007 10-15-74 (RCHM) INSTALL THE COMPARE COMMAND. COMPLETE DOCUMENTATION OF / THE USE OF THIS NEW COMMAND WILL BE FOUND IN THE COMMENTS / PRECEEDING THE COMMAND CODE. /#008 10-21-74 (RCHM) GENERAL COMMENTING AND LISTING CLEANUP. /#009 10-21-74 (RCHM) EXIT COMMAND WOULD NOT WORK PROPERLY. THIS WILL FIX IT. /#010 10-21-74 (RCHM) A CTRL P SHOULD NOT CLOSE THE DUMP FILE. THE DUMP FILE / SHOULD RETAIN AN IMAGE OF THE USER'S PROCESSING UP TO A / CLOSE COMMAND. THIS WILL ENABLE THIS. /#011 10-28-74 (RCHM) ADD CONDITIONALIZATION FOR ADSS TO ALLOW ON SOURCE UPDATING. /#012 11-07-74 (RCHM) IF THE RECORD READ FROM THE OLD MASTER EXACTLY FILLS THE / AVAILABLE BUFFER SPACE, THE RECORD READ FROM THE NEW MASTER WILL / WILL OVERLAY MTDUMP. THIS CODE WILL FIX THIS. /#013 2-JAN-75 (JMW) CHANGE HELLO TO V3B000. /#014 01-17-74 (RCHM) FIX MISSING MESSAGE FOR NOT ENOUGH CORE DURING COMPARE. / 015 30-JUL-75 (RCHM) CHAING HELLO TO XVM TYPE. .SYSID < .TITLE MTDUMP >,< 000> /CULL ROUTINE IS NOT IMPLEMENTED IN THIS VERSION. TTICAL=2776 TTOCAL=2775 BUFLEN=46 /IF PDP15 IS DEFINED AS A PARAMETER ASSIGNMENT, THE PDP-15 /PAGE MODE VERSION , AS NEEDED FOR V4E , WILL RESULT. /IF PDP9 IS DEFINED AS A PARAMETER ASSIGNMENT, THE PDP-9 /BANK MODE VERSION , AS NEEDED FOR V4E , WILL RESULT. /OTHERWISE THE PDP-15/20 (BANK/PAGE) VERSION , AS NEEDED FOR /V5A , WILL BE GENERATED. .DAT=135 .SCOM=100 SET=ISZ /(RCHM-006) USET TO SET FLAGS NON-0 IDX=ISZ /(RCHM-007) USED WHEN THE WORD BEING INCREMENTED CANNOT /(RCHM-007) OVERFLOW. (PRODUCE A SKIP). .TITLE MTDUMP ASSEMBLY PARAMETER PROCESSING. /(RCHM-011) / THE FOLLOWING ASSEMBLY PARAMETERS ARE ALLOWED WITH MTDUMP / / 1. PDP9 & PDP15 / DO NOT USE THESE PARAMETERS. THE SYSTEM WILL NOT BE ASSEMBLED / PROPERLY IF THESE ARE DEFINED. / / 2. ADSS / IF THIS IS DEFINED, THE ADSS VERSION OF MTDUMP WILL BE PRODUCED. / THE MAJOR CHANGE IS THE EXPECTED BLOCK SIZES FOR DIRECTORIED DEVICES. / DOS IS 376, ADSS IS 377. DOS=376 /(RCHM-011) SET UP FOR DOS FILE STRUCTURING. .IFDEF ADSS /(RCHM-011) SHOULD WE ASSEMBLE ADSS VERSION? DOS=377 /(RCHM-011) ADSS FILE STRUCTURING BLOCK SIZE. .ENDC /(RCHM-011) .TITLE MTDUMP INITIALIZATION. .IODEV 1,3 INLIST .INIT 3,1,RECOUP /(RCHM-010) INIT THE DUMP FILE DAT SLOT. P03DEV=INLIST+3 LAW -DOS /(RCHM-011) FETCH FILE STRUCTURED DEVICE BUFFER SIZE. TAD P03DEV /(RCHM-010) +DEVICE BUFFER SIZE FROM INIT. SMA!CLA!CMA /(RCHM-010) <0 => NOT FILE STRUCTURED. CLA /(RCHM-010) SET UP TO FLAG FILE STRUCTURED, NOT OPEN. DAC FILOPN /(RCHM-010) SET UP FILE OPEN FLAG. BEGIN TTOCAL /INITIALIZE TELETYPE. ONE 1 /.. RECOUP /RETURN FROM CONTROL P. LOOPCT 0 /TEMPORARY STORAGE. POINTR=LOOPCT /.. NMAPTR=LOOPCT .IFUND PDP9 .IFDEF PDP15 JMP SKPR .ENDC LAC* (.SCOM+23 TAD (1 DAC LODAT TAD (2 DAC DATP03 TAD (-5 DAC DATM02 LAC* (.SCOM+4 AND (100 SZA JMP OVER SKPR LAC (7777 DAC MSKADR LAC (70000 DAC MSKEPC OVER=. .ENDC /INITIALIZE ALL ENTRIES IN MAG TAPE DRIVE STATUS TABLE. DZM UNIT /START WITH UNIT 0. INITLP JMS PUTDAT /INSERT UNIT NUMBER IN DAT SLOT 1. .INIT 1,1,INITLP /INITIALIZE THE DRIVE. LAC (100000 /BUMP UNIT NUMBER. TAD UNIT / BY ONE. DAC UNIT / .. SZA /ALL DONE IF NEW DRIVE .E. 0. JMP INITLP /MOVE UNITS TO INITIALIZE. /ENTER LOOP TO SET DEFAULT FORMATS FOR ALL DRIVES. IDEA HERE IS TO /SET UP A TABLE (ONE ENTRY PER DRIVE) OF FORMAT-SPECIFYING .MTAPE CAL'S. /THESE ENTRIES CAN BE MODIFIED BY "FORMAT" REQUESTS, WHICH ALSO /(AFTER MODIFICATION) CAUSE THE PROPER .MTAPE TO BE ISSUED. LAC (16 /SET UP FIRST DEFAULT (7-TRACK, ODD, 800 BPI). DAC DRVTBL /SAVE IT. LAC* (.SCOM+4 /NOW PICK UP .SCOM+4. AND (004000 /EXTRACT 9-CHANNEL INDICATOR (BIT 6). SZA /SKIP IF 7-CHANNEL. ISZ DRVTBL /9-CHANNEL, LET MTAPE = 17. LAC (DRVTBL /NOW FIX UP A POINTER TO DAC DRVPTR / THE DRIVE FORMAT TABLE. LAW -10 /AND A COUNTER FOR DAC LOOPCT / EIGHT UNITS IN TABLE. LAC DRVTBL /MOVE THE .MTAPE SUBFUNCTION CLL!RAL / INTO BITS 5-8. RTL RTL RTL RTL DAC DEFMT /SAVE DEFAULT FORMAT. DRVLP DAC* DRVPTR /PUT .MTAPE REQUEST INTO DRIVE TABLE. ISZ DRVPTR /BUMP POINTER TO TABLE. ISZ LOOPCT /AND COUNT ENTRIES COMPLETED. JMP DRVLP /MORE TO DO, UPDATE NEXT ENTRY. /PRINT START MESSAGE. LAW BEGMES /"MTDUMP V3B000" JMS TYPOUT /GO TYPE IT OUT. /SET UP BUFFER ADDRESS AND SIZE. LAC* (.SCOM+2 /PICK UP .SCOM+2. DAC BUFADR /THAT WILL BE ORIGIN OF MAGTAPE BUFFER. JMS TWOS /NOW FORM TWO'S COMPLEMENT. TAD* (.SCOM+3 /SUBTRACT FROM .SCOM+3. CMA /AND COMPLEMENT THE RESULT. DAC MAXWDS /SAVE NEGATIVE TOTAL WORDS IN BUFFER AREA. JMS TWOS /NOW MAKE A POSITIVE TOTAL AGAIN. JMS BTOD /AND CONVERT IT FROM BINARY TO DECIMAL. DECNUM+5 /STORE DECIMAL NUMBER IN DECNUM...DECNUM+5. LAW 17762 /TERMINATE THE UNPACKED NUMBER DAC DECNUM+6 / WITH A CARRIAGE RETURN. JMS MIXUP /NOW GO COMBINE TWO MESSAGES: XCT BFSMES / "BUFSIZ:" B2DPTR 0 / POINTS TO THE FIRST CHARACTER OF NUMERIC STRING. LAW TYLINE /THEN PRINT THE WHOLE MESSAGE JMS TYPOUT / .. LAC NOPLIT /ALLOW ACCESS TO DAC OPEN / OPEN-DUMP-FILE SEQUENCE. DZM ECHOSW /TURN ON VERIFY MODE (ECHO COMMAND LINES). LAW -1 /INITIALISE RADIX SW TO OCTAL DAC RADIX DZM MODISP /SET DUMP MODE OCTAL. .TITLE MAIN PROCESSING LOOP (COMMAND INPUT). /ALL FINISHED WITH INITIALIZATION, ENTER MAIN PROCESSING LOOP FOR /KEYBOARD COMMANDS. IDEA HERE IS TO READ KEBOARD REQUEST AND /CHECK FOR LEGALITY (LEGAL CONTROL WORDS APPEAR IN AN ASCII TABLE /CALLED "CWDASC"). IF COMMAND IS NOT RECOGNIZED, PRINT A QUESTION MARK /AND ACCEPT A NEW COMMAND. IF COMMAND IS LEGAL, DISPATCH THROUGH /A TABLE OF COMMAND-SERVICE ADDRESSES ("CWDTOP"). RDLIN LAW RBRACK /PICK UP ADDRESS OF RIGHT ANGLE BRACKET. JMS TYPOUT /AND TYPE IT OUT. DZM QUIT /INDICATE NO FILE PROCESSING GOING ON NOW. LAW TYLINE /PICK UP INPUT-LINE-AREA ADDRESS. JMS TYPEIN /AND READ NEXT REQUEST FROM TELETYPE. JMS UNPACK /UNPACK THE TYPED LINE. TYLINE /FROM TYLINE... OUTADR OUTLIN /...TO OUTLIN. DAC TOCHRS /SAVE FOR LATER TAD OUTADR /CONSTRUCT A POINTER TO TERMINATOR OF TYPED LINE DAC POINTR / AS IT APPEARS IN THE UNPACKED ARRAY (OUTLIN). ALTMOD 175\777777 /PICK UP REPRESENTATION OF ALT MODE SAD* POINTR /DID USER ACTUALLY TYPE AN ALT MODE? JMS TYPRTN /YES, GO PRINT CARRIAGE RETURN. LAC OUTADR /OUTADR POINTS TO OUTLIN (WHERE TYPED LINE IS). DAC NXTPTR /SET INITIAL POINTER IN NXTCHR. JMS GETCOM /GO EXTRACT CONTROL WORD FROM INPUT LINE. LAW CWDTOP-CWDEND /TOTAL ENTRIES IN CWD TABLE (2'S COMPLEMENT). DAC LOOPCT /SET UP COUNT OF CONTROL WORDS TO EXAMINE. LAC CWDASC /GET BEGINNING OF CONTROL WORD TABLE. CWDLP1 DAC SCN1 /SET UP NEXT CALL TO UNPACK. JMS UNPACK /UNPACK NEXT CONTROL WORD. SCN1 0 /MODIFIED EACH TIME TO POINT TO NEW ENTRY. TYLINE /USE TYLINE AS OUTPUT ARRAY. JMS SCAN /COMPARE INPUT COMMAND WITH CURRENT ENTRY. CWDLIT CWD /TYPED COMMAND IS IN CWD...CWD+7. TYLINE /CURRENT TABLE ENTRY HAS JUST BEEN UNPACKED INTO TYLINE. SKPLIT SKP /NO MATCH. SKP /END STRING 1. JMP CWDLP2 /FAILED COMPARE, GET NEXT TABLE ENTRY. LAC* STR2 /POSSIBLE MATCH, GET NEXT WORD FROM TYLINE. SMA!CLL!CML /MATCH IF NEXT WORD IN TYLINE IS NEGATIVE... SKP!CLA!RAL /...OR IF TOTAL CHARS IN CWD .E. 1. JMP CWDISP /FULL CONTROL WORD, GO DISPATCH. SAD NCHARS /CHECK FOR ABBREVIATION (AC .E. 1 NOW). JMP CWDISP /NCHARS .E. 1, GO DISPATCH. CWDLP2 LAW -1 /MATCH FAILED, SET UP NEW ARG TO UNPACK... TAD* C12 /...USING A POINTER INTERNAL TO UNPACK. ISZ LOOPCT /COUNT ENTRIES IN CONTROL WORD TABLE. JMP CWDLP1 /MORE TO DO, CONSIDER NEXT ENTRY. /UNRECOGNIZED CONTROL WORD COMES HERE. TYQUES LAW QUESMK /GET QUESTION MARK. JMS TYPOUT /AND GO TYPE IT OUT. JMP RDLIN /READ NEXT COMMAND. CWDISP LAC CWDEND /GET END OF DISPATCH TABLE. TAD LOOPCT /CALCULATE OUR CURRENT POSITION IN IT. DAC CWDXCT /GIVE TO DISPATCHER. /GO TO SERVICE SECTION FOR THIS CONTROL WORD. CWDXCT XX /RESULTS IN XCT OF PROPER TABLE ENTRY (JMP OR JMS). QUIT=CWDXCT /QUIT .NE. 0, COMMAND PROCESSING IS IN PROGRESS. JMP RDLIN /IN CASE TABLE ENTRY WAS A JMS. .TITLE INITIALIZATION ERROR PROCESSORS. /COME HERE ON REQUEST TO WRITE FILE-STRUCTURED DEVICE WHEN /NO DUMP OUTPUT FILE IS OPEN. NOFILE LAW NOFILM JMS TYPOUT JMP RDLIN NOFILM ENDNFM-.*400+2 0 .ASCII 'NO DUMP FILE OPEN.'<15> ENDNFM=. /COME HERE ON ILLEGAL TERMINATOR FOUND IN COMMAND LINE. ILLTRM LAW ILTMES /PICK UP ADDRESS OF COMPLAINT. JMS ERCOMT /GO PUT IT OUT. JMP RDLIN /AND READ NEXT REQUEST ILTMES ENDILT-.*400+2 0 .ASCII '*ILLEGAL TERMINATOR.'<15> ENDILT=. .TITLE ASCII COMMAND TABLE. /ASCII COMMAND TABLE. THIS IS THE SET OF LEGAL COMMANDS IN .ASCII /FORMAT. COMMANDS ARE TERMINATED WITH A CARRIAGE RETURN TO SATISFY /THE REQUIREMENTS OF SUBROUTINE UNPACK. COMMANDS WHICH MAY BE /ABBREVIATED MUST PRECEDE OTHERS HAVING THE SAME INITIAL CHARACTER /(THUS "COPY" PRECEDES "CLOSE"). CWDASC .-1 /DEFINE TOP OF ASCII TABLE. .ASCII 'REWIND'<15> NCHARS=.-1 .ASCII 'TAPEMARK'<15> .ASCII 'BACKSPACE'<15> .ASCII 'SPACE'<15> .ASCII 'DUMP'<15> .ASCII 'COPY'<15> .ASCII 'COMPARE'<15> .ASCII 'OPEN'<15> .ASCII 'CLOSE'<15> .ASCII 'MODE'<15> .ASCII 'LIST'<15> .ASCII 'LOG'<15> .ASCII 'FORMAT'<15> .ASCII 'VERIFY'<15> .ASCII 'GET'<15> .ASCII 'PUT'<15> .ASCII 'SIZE'<15> .ASCII 'EXAMINE'<15> .ASCII 'NUMBER'<15> .ASCII 'DDUMP'<15> .ASCII 'DLIST'<15> .ASCII 'NEWDIR'<15> .ASCII 'EXIT'<15> .TITLE COMMAND DISPATCH TABLE. /THIS IS A TABLE OF DISPATCHERS TO CONTROL-WORD SERVICERS. ENTRIES /MAY BE EITHER JMP'S OR JMS'S, AND THE ORDER OF THE ENTRIES MUST /CORRESPOND TO THE ORDER OF COMMANDS IN THE ASCII TABLE ABOVE (E.G., /"SPACE" IS THE FOURTH COMMAND IN THE ASCII TABLE AND THE JMP TO /THE SPACE-FORWARD SECTION IS THE FOURTH ENTRY IN THE DISPATCH TABLE. CWDTOP JMP REWIND /REWIND U JMP WRTEOF /TAPEMARK U JMP BKSPCE /BACKSPACE U,N JMP SPCFWD /SPACE U,N JMP DUMP /DUMP U,N JMP COPY /COPY U1,U2,T JMP COMPARE /(RCHM-007) GO PROCESS COMPARE COMMAND. JMP OPEN /OPEN FILNAM EXT JMP CLOSE /CLOSE JMP MODE /MODE XYZ JMP LIST /LIST U,N JMP PRCOMT /LOG JMP FORMAT /FORMAT JMP VERIFY /VERIFY ON; VERIFY OFF JMP GET /GET U JMP PUT /PUT U JMP SIZE /SIZE JMP EXAMNE /EXAMINE JMP NUMBER /NUMBER OCT; NUMBER DEC JMP DDUMP /DDUMP U JMP DLIST /DLIST U JMP NUDIRC /NEWDIR U JMP EXIT /EXIT CWDEND XCT CWDEND .TITLE COMMAND PROCESSORS. .TITLE COMPARE COMMAND PROCESSOR. /(RCHM-007) / THIS COMMAND IS USED TO COMPARE ALL OR ANY PORTION OF TWO TAPES TOGETHER. / COMPARISON WILL PROCEED UNDER ALL BUT THE FOLLOWING CONDITIONS. / / 1. UNEXPECTED EOF DETECTED ON EITHER TAPE. (EOF'S NOT FOUND IN THE / SAME PLACE) / / 2. UNEXPECTED PHYSICAL EOT ENCOUNTERED. / / 3. TERMINAL CONDITION AS SPECIFIED BY THE USER IS MET. / THE INPUT TO TIS COMMAND IS OF THE FORM: / / COMPARE U1,U2,TC / / WHERE U1=ORIGIONAL TAPE (OLD MASTER). / U2=TAPE TO BE COMPARED (NEW MASTER). / TC=TERMINATING CONDITION UNDER WHICH THE COMPARE PROCESS IS TO BE STOPPED. / THE TERMINAL CONDITIONS THE USER MAY SPECIFY ARE: / 1. EOF: ONE EOF ON THE NEW MASTER WILL CAUSE TERMINATION. / 2. EOT: TWO CONSECUTIVE EOF'S ON THE NEW MASTER WILL CAUSE TERMINATION. / 3. NNN: AFTER NNN RECORDS, THE COMPARISON WILL STOP. / / THE INPUTS MUST BE SPECIFIED AS ALL OTHER INPUTS TO MTDUMP ARE SPECIFIED. / ANYTHING ENTERED WHICH DOES NOT MEET THE SPECIFICATIONS WILL BE IGNORED. / FETCH ARGUMENTS OF THE COMPARE COMMAND AND INITIALIZE ALL NECESSARY / FLAGS AND VARIABLES FOR THE OPERATION OF THE COMPARE PROCESS. COMPARE JMS GETDRV /(RCHM-007) FETCH UNIT # OF OLD MASTER TAPE. JMP TYQUES /(RCHM-007) INVALID UNIT # ENTERED. DAC UNIT1 /(RCHM-007) SAVE OLD MASTER UNIT #. JMS GETDRV /(RCHM-007) FETCH UNIT # OF NEW MASTER TAPE. JMP TYQUES /(RCHM-007) INVALID UNIT # ENTERED. DAC UNIT2 /(RCHM-007) SAVE NEW MASTER UNIT #. JMS ECHO /(RCHM-007) PRINT COMMAND ON DUMP FILE. JMS GETARG /(RCHM-007) SET UP TERMINATING CONDITION (TC). / INITIALIZE CONSTANTS AND FLAGS FOR COMPARE. DZM CMBCNT /(RCHM-007) CLEAR BLOCK COUNTER. DZM CMERR /(RCHM-007) CLEAR ERROR FLAG. DZM CMEOT /(RCHM-007) CLEAR EOT FLIP FLOP. DZM CMEOF /(RCHM-007) CLEAR EOF FLIP FLOP. LAC BUFADR /(RCHM-007) SAVE SA OF BUFFER SET UP BY MTDUMP /(RCHM-007) UPON INITIALIZATION. DAC CMBUF1 /(RCHM-007) SAVE BUFFER SA FOR READ OF OLD MASTER. LAC MAXWDS /(RCHM-007) SAVE OLD MAXWORDS FOR RESTORING. DAC CMMXWD /(RCHM-007) GETS ALTERED BY N.M. READ. /(RCHM-007) / AT THIS POINT WE ARE READY TO READ THE OLD MASTER TO FETCH A BLOCK FOR / THE COMPARE AGAINST THE NEW MASTER. CM0010 LAC UNIT1 /(RCHM-007) FETCH OLD MASTER UNIT #. DAC UNIT /(RCHM-007) MAKE OLD MASTER CURRENT UNIT. JMS PUTDAT /(RCHM-007) MAKE .DAT SLOT #1 ACCESS OLD MASTER. LAC CMBUF1 /(RCHM-007) FETCH SA OF BUFFER. DAC BUFADR /(RCHM-007) SET UP .TRAN FOR INPUT OF OLD MASTER BLOCK. LAC CMMXWD /(RCHM-007) MAXIMUN NUMBER OF WORDS FOR READ. DAC MAXWDS /(RCHM-007) STORE IT IN .TRAN TO DETECT LONG RECORD. JMS GETREC /(RCHM-007) FETCH A BLOCK FROM THE OLD MASTER. JMP CMEOF1 /(RCHM-007) EOF ENCOUNTERED ON OLD MASTER. JMP CMEOT1 /(RCHM-007) PHYSICAL EOT ENCOUNTERED ON OLD MASTER. JMP CMNECM /(RCHM-007) RECORD TOO LONG. TELL USER AND EXIT. LAC COUNT /(RCHM-007) FETCH LENGTH OF OLD MASTER BLOCK. DAC CMBUFC /(RCHM-007) SAVE LENGTH FOR COMPARISION AFTER NEW /(RCHM-007) MASTER READ. TAD CMBUF1 /(RCHM-007) CALCULATE SA OF NEW MASTER BUFFER. DAC BUFADR /(RCHM-007) SET UP INPUT .TRAN FROM NEW MASTER. LAC COUNT /(RCHM-007) NUMBER OF WORDS OCCUPIED BY O.M. BLOCK. TAD CMMXWD /(RCHM-007) - NUMBER OF WORDS AVAILABLE IN CORE. DAC MAXWDS /(RCHM-007) STORE NEW COUNT IN .TRAN FOR N.M. SNA /(RCHM-012) DID THE RECORD FROM THE OLD MASTER EXACTLY /(RCHM-012) THE AVAILABLE BUFFER SPACE? JMP CMNECM /(RCHM-012) THERE IS NO SPACE FOR THE BLOCK FROM THE /(RCHM-012) NEW MASTER. /(RCHM-007) / AT THIS POINT WE ARE READY TO READ THE NEW MASTER TAPE TO GET A COMPARISON / RECORD. CMEOT1 AND CMEOF1 RETURN HERE SINCE THE NEXT RECORD READ SHOULD / BE AN END OF FILE OR AN END OF TAPE. CM0020 LAC UNIT2 /(RCHM-007) MAKE THE NEW MASTER UNIT THE CURRENT UNIT. DAC UNIT /(RCHM-007) CURRENT UNIT #. JMS PUTDAT /(RCHM-007) MAKE .DAT SLOT #1 ACCESS NEW MASTER. JMS GETREC /(RCHM-007) FETCH RECORD FROM NEW MASTER. JMP CMEOF2 /(RCHM-007) EOF ENCOUNTERED ON NEW MASTER. JMP CMEOT2 /(RCHM-007) PHYSICAL EOT ENCOUNTERED ON NEW MASTER. JMP CMNEC /(RCHM-007) LONG RECORD, TELL USER. /(RCHM-007) / BEGIN COMPARISON PROCESS, THE ORDER OF CHECKS IS: / 1. CHECK FOR MISSING EOF / 2. CHECK FOR MISSING EOT. / 3. CHECK FOR DIFFERING BLOCK LENGTHS. / 4. MAKE WORD COMPARISON BETWEEN BLOCKS. / / THE FIRST TWO CHECKS ARE FATAL IF DETECTED. THE LAST TWO ALLOW COMPARISON / TO CONTINUE. LAC CMEOF /(RCHM-007) EXPECTED EOF NOT ENCOUNTERED? SZA /(RCHM-007) NO, PROCEED WITH CHECKING. JMP CMUEF1 /(RCHM-007) GO TERMINATE PROCESSING PROPERLY. LAC CMEOT /(RCHM-007) EXPECTED PHYSICAL EOT NOT ENCOUNTERED? SZA /(RCHM-007) NO, PROCEED WITH CHECKING. JMP CMUET1 /(RCHM-007) GO TERMINATE PROCESSING PROPERLY. LAC COUNT /(RCHM-007) FETCH CURRENT (NEW MASTER) BLOCK LENGTH. SAD CMBUFC /(RCHM-007) COMPARE AGAINST OLD MASTER BLOCK LENGTH. SKP /(RCHM-007) THEY ARE OK. JMP CMWCNE /(RCHM-007) BLOCK LENGTH'S NOT EQUAL, TELL USER AND SELECT /(RCHM-007) SHORTEST BLOCK LENGTH FOR COMPARE. /(RCHM-007) / PREPARE FOR COMPARISON LOOP. IF A LENGTH COMPARE ERROR HAS OCCURED, THIS / SECTION WILL BE ENTERED WITH THE SHORTEST BLOCK LENGTH IN THE AC. CM0040 JMS TWOS /(RCHM-007) CONVERT WC TO NEGATIVE NUMBER. DAC CMBUFC /(RCHM-007) SAVE FOR LOOP TERMINATION. LAC CMBUF1 /(RCHM-007) FETCH SA OF BUFFER (OLD MASTER BLOCK). DAC CMBUFP /(RCHM-007) POINTER TO OLD MASTER BUFFER. DZM CMWC /(RCHM-007) RESET WORD ID COUNTER (USED BY ERROR ROUTINES). CM0050 LAC* CMBUFP /(RCHM-007) FETCH WORD FROM OLD MASTER. IDX CMWC /(RCHM-007) BUMP WORD ID NUMBER. SAD* BUFADR /(RCHM-007) COMPARE AGAINST NEW MASTER. SKP /(RCHM-007) EQUAL, SKIP. JMP CMWNE /(RCHM-007) WORDS IN BUFFERS ARN'T THE SAME. CM0060 IDX CMBUFP /(RCHM-007) INCREMENT TO NEXT WORD OF OLD MASTER BUFFER. IDX BUFADR /(RCHM-007) INCREMENT TO NEXT WORD OF NEW MASTER BUFFER. ISZ CMBUFC /(RCHM-007) DONE WITH COMPARISON YET? JMP CM0050 /(RCHM-007) NO. /(RCHM-007) / COMPARISON IS COMPLETE, INCREMENT BLOCK COUNTER FOR THE NEXT BLOCK / AND CHECK TO SEE IF THE COMPARISON OF THE TAPES IS COMPLETE. CM0070 IDX CMBCNT /(RCHM-007) INCREMENT BLOCK NUMBER. JMS CHKTRM /(RCHM-007) ARE WE DONE WITH COMPARE? JMP CM0010 /(RCHM-007) NOT YET, GO PROCESS ANOTHER BLOCK. CMEXTA LAC CMERR /(RCHM-007) DID A NON FATAL ERROR OCCUR DURING /(RCHM-007) THE COMPARE EXECUTING. SNA /(RCHM-007) YES, TELL USER. JMP CMNOER /(RCHM-007) NO, TELL USER TAPES ARE IDENTICAL. LAW MESS1 /(RCHM-007) FETCH ADDRESS OF MESS1 FOR ERCOMT CMEXIT JMS ERCOMT /(RCHM-007) PLACE TERMINATING MESSAGE IN BOTH DUMP FILE /(RCHM-007) AND TELEPRINTER FILE. LAC CMBUF1 /(RCHM-007) RESTORE SA OF BUFFER TO .TRAN. DAC BUFADR /(RCHM-007) RESTORE .TRAN TO INITIAL VALUE. LAC CMMXWD /(RCHM-007) RESTORE MAXIMUM WORD COUNT FOR .TRAN DAC MAXWDS /(RCHM-007) SET UP INPUT TRAN AGAIN. JMP RDLIN /(RCHM-007) GO GET NEXT COMMAND. CMNOER LAW MESS2 /(RCHM-007) TAPES ARE IDENTICAL. JMP CMEXIT /(RCHM-007) GO GET NEXT COMMAND. .TITLE COMPARE ERROR PROCESSORS. /(RCHM-007) / ALL COMPARE ERRORS, RECOVERABLE AND OTHERWISE, ARE PROCESSED HERE. / EOF DETECTED ON OLD MASTER, SET UP FOR COMPARISON AND / GO READ NEW MASTER. CMEOF1 LAC CMEOF /(RCHM-007) PREPARE TO FLIP EOF FLAG. CMA /(RCHM-007) SET TO EOF ENCOUNTERED ON OLD MASTER. DAC CMEOF /(RCHM-007) EOF ENCOUNTERED. JMP CM0020 /(RCHM-007) GO READ NEW MASTER. / PHYSICAL EOT DETECTED ON OLD MASTER, SET UP FOR COMPARISON AND GO READ / NEW MASTER. CMEOT1 LAC CMEOT /(RCHM-007) PREPARE TO FLIP EOT FLAG. CMA /(RCHM-007) FLIP EOT FLAG. DAC CMEOT /(RCHM-007) PHYSICAL EOT ENCOUNTERED ON OLD MASTER. JMP CM0020 /(RCHM-007) GO READ NEW MASTER. / NOT ENOUGH CORE TO CONTAIN THE EXPECTED BUFFERS. THIS CONDITION IS TERMINAL / AND CANNOT BE RECOVERED FROM. / NOT ENOUGH CORE AFTER READING OLD MASTER (O.M.) SPACE NEW MASTER FORWARD ONE BLOCK / AND TERMINATE. CMNECM LAC UNIT2 /(RCHM-007) FETCH N.M. TAPE DRIVE. DAC UNIT /(RCHM-007) MAKE N.M CURRENT UNIT. JMS PUTDAT /(RCHM-007) SET UP .DAT +1 FOR FORWARD SPACE. .MTAPE 1,5 /(RCHM-007) FORWARD SPACE THE NEW MASTER. / NOT ENOUGH CORE AFTER READING NEW MASTER (N.M.) FORWARD SPACE OF N.M NOT / NECESSARY. CMNEC LAC RADIX /(RCHM-007) DETERMINE CURRENT RADIX SZA /(RCHM-007) CONVERT TO DECIMAL IF AC=0. JMP CM0072 /(RCHM-007) OTHERWISE CONVERT TO OCTAL. LAC CMBCNT /(RCHM-007) FETCH CURRENT BLOCK NUMBER. JMS BTOD /(RCHM-007) CONVERT NUMBER TO DECIMAL FORMAT. DECNUM+5 /(RCHM-007) LOW ORDER DIGIT POSITION. DAC CM0076 /(RCHM-007) STORE SA OF CONVERTED NUMBER IN MIXUP ARGUMENT /(RCHM-007) LIST. JMP CM0074 /(RCHM-007) GO PRINT ERROR MESSAGE. CM0072 LAC CMBCNT /(RCHM-007) FETCH BLOCK # FOR CONVERSION. JMS BTOA /(RCHM-007) CONVERT BLOCK # TO OCTAL. DECNUM /(RCHM-007) SA FOR CONVERSION OUTPUT. LAC .-1 /(RCHM-007) FETCH ADDRESS OF CONVERSION OUTPUT BUFFER. DAC CM0076 /(RCHM-007) STORE SA OF CONVERTED NUMBER IN MIXUP ARGUMENT /(RCHM-007) LIST. CM0074 LAW 17602 /(RCHM-007) FETCH -ALTMODE FOR BLOCK NUMBER TERMINATOR. DAC DECNUM+6 /(RCHM-007) STORE TURMINATOR FOR MIXUP. JMS MIXUP /(RCHM-007) COMBINE MESSAGES. XCT MESS8-2 /(RCHM-007) BLOCK #. CM0076 XX /(RCHM-007) ADDRESS OF BLOCK NUMBER BUFFER. XCT MESS3-2 /(RCHM-007) NOT ENOUGH CORE FOR COMPARISON BUFFERS. LAW TYLINE /(RCHM-014) FETCH ADDRESS OF MESSAGE BUFFER. JMS TYPOUT /(RCHM-014) PRINT INSUFFICIENT CORE MESSAGE ALWAYS ON /(RCHM-014) MAIN CONSOLE. JMP CMEXTA /(RCHM-007) GO READ NEXT COMMAND. / EOF DETECTED ON NEW MASTER. MAKE SURE ONE SHOULD EXIST ON IT AND RETURN / TO CCOUNT BLOCKS IF IT SHOULD. CMEOF2 LAC CMEOF /(RCHM-007) EOF FLAG NON-ZERO IF LAST RECORD OF OLD MASTER /(RCHM-007) WAS EOF. SNA /(RCHM-007) EVERYTHING OK, EOF WAS EXPECTED. JMP CMUEF2 /(RCHM-007) UNEXPECTED EOF ENCOUNTERED ON NEW MASTER. CMA /(RCHM-007) FLOP EOF FLAG. DAC CMEOF /(RCHM-007) RESTORE EOF FLAG. JMP CM0070 /(RCHM-007) GO COUNT BLOCKS, EOF IS A BLOCK. / UNEXPECTED EOF ENCOUNTERED ON NEW MASTER. TELL THE USER AND EXIT. CMUEF2 JMS MIXUP /(RCHM-007) MOVE TERMINAL MESSAGE TO DUMP FILE. XCT MESS4-2 /(RCHM-007) UNEXPT. EOF ON N.M. CMERXT JMS WRFILE /(RCHM-007) DUMP ERROR MESSAGE INTO DUMP FILE. CLA!CMA /(RCHM-007) SET UP ERROR FLAG. DAC CMERR /(RCHM-007) FLAG ERROR. JMP CMEXTA /(RCHM-007) TELL THE USER ABOUT THE ERROR. / PHYSICAL EOT ENCOUNTERED ON NEW MASTER. SEE IF IT WAS EXPECTED. IF IT / WAS, CONTINUE PROCESSING. CMEOT2 LAC CMEOT /(RCHM-007) EOT FLAG NON-ZERO IF LAST BLOCK OF NEW MASTER /(RCHM-007) WAS EOT. SNA /(RCHM-007) EVERYTHING OK, EOT WAS EXPECTED. JMP CMUET2 /(RCHM-007) UNEXPECTED EOT ON NEW MASTER. CMA /(RCHM-007) FLOP EOT FLAG. DAC CMEOT /(RCHM-007) RESTORE EOT FLAG. JMP CM0070 /(RCHM-007) GL COUNT BLOCKS, EOT IS A BLOCK. / UNEXPECTED PHYSICAL EOT HAS BEEN ENCOUNTERED ON NEW MASTER. TELL USER CMUET2 JMS MIXUP /(RCHM-007) MOVE MESSAGE TO TYLINE. XCT MESS5-2 /(RCHM-007) UNEX. EOT ON N.M. JMP CMERXT /(RCHM-007) TAKE ERROR EXIT. / EXPECTED EOF ON NEW MASTER NOT ENCOUNTERED. CMUEF1 JMS MIXUP /(RCHM-007) MOVE MESSAGE TO TYLINE. XCT MESS6-2 /(RCHM-007) EXPECT EOF NOT ON N.M. JMP CMERXT /(RCHM-007) TAKE ERROR EXIT. / EXPECTED PHYSICAL EOT ON NEW MSTER NOT ENCOUNTERED. CMUET1 JMS MIXUP /(RCHM-007) MOVE MESSAGE TO TYLINE. XCT MESS7-2 /(RCHM-007) EXPECTED EOT NO ON N.M. JMP CMERXT /(RCHM-007) TAKE ERROR EXIT. / NON FATAL ERROR. BLOCK LENGTHS ARE NOT EQUAL, RETURN TO COMPARISON LOOP / WITH SHORTEST BLOCK LENGTH IN AC. CMWCNE LAW 17602 /(RCHM-007) SET UP ALT MODE IN BUFFER. DAC DECNUM+6 /(RCHM-007) ALTMODE FOR TERMINATOR. LAC RADIX /(RCHM-007) FETCH CURRENT RADIX. SZA /(RCHM-007) CONVERT TO DECIMAL IF AC=0. JMP CM0080 /(RCHM-007) OTHERWISE CONVERT TO OCTAL. LAC CMBCNT /(RCHM-007) FETCH FAILING BLOCK NUMBER. JMS BTOD /(RCHM-007) CONVERT BLOCK # TO DECIMAL. DECNUM+5 /(RCHM-007) LOW ORDER DIGIT ADDRESS. JMP CM0090 /(RCHM-007) GO CREATE COMBINED MESSAGE. CM0080 LAC CMBCNT /(RCHM-007) FETCH BLOCK # FOR OCTAL CONVERSION. JMS BTOA /(RCHM-007) CONVERT TO ASCII. DECNUM /(RCHM-007) CONVERSION OUTPUT BUFFER. LAC .-1 /(RCHM-007) FETCH CONVERSION BUFFER SA FOR MIXUP. CM0090 DAC CM0100 /(RCHM-007) STORE IN MIXUP ARGUMENT LIST. JMS MIXUP /(RCHM-007) PRINT BLOCK # XXXXXX. XCT MESS8-2 /(RCHM-007) CM0100 XX /(RCHM-007) CONVERT BLOCK # SA. XCT MESS13-2 /(RCHM-007) LENGTHS NOT EQUAL. LAW -1 /(RCHM-007) FETCH ERROR FLAG. DAC CMERR /(RCHM-007) SET ERROR OCCURED FLAG. JMS WRFILE /(RCHM-007) PLACE COMBINED LINE IN DUMP FILE. / SORT OUT SHORTEST BLOCK LENGTH FOR RETURN TO COMPARE LOOP. LAC COUNT /(RCHM-007) DECIDE WHICH BLOCK IS SHORTEST. JMS TWOS /(RCHM-007) CONVERT NEW MASTER BLOCK LENGTH TO NEGATIVE /(RCHM-007) NUMBER. TAD CMBUFC /(RCHM-007) ADD OLD MASTER BLOCK LENGTH. RAL /(RCHM-007) CAN'T BE ZERO, SO SAVE SIGN IN LINK. LAC COUNT /(RCHM-007) FETCH LENGTH OF NEW MASTER BLOCK. SZL /(RCHM-007) WAS IT THE SHORTEST? LAC CMBUFC /(RCHM-007) NO, OLD MASTER BLOCK WAS SHORTER. JMP CM0040 /(RCHM-007) GO PERFORM COMPARISON. / WORDS IN BUFFER ARE NOT EQUAL. DESCRIBE BLOCK, WORD NUMBER, AND WORDS / IN THE DUMP FILE AND CONTINUE PROCESSING OF THE BUFFER. CMWNE LAW 17602 /(RCHM-007) ALT MODE TERMINATOR FOR MIXUP DAC DECNUM+6 /(RCHM-006) STORE TERMINATOR FOR BLOCK NUMBER DAC TYLINE+6 /(RCHM-006) STORE TERMINATOR FOR WORD NUMBER DAC TYLINE+16 /(RCHM-006) STORE TERMINATOR FOR WORD FROM OLD MASTER. DAC TYLINE+26 /(RCHM-006) STORE TERMINATOR FOR WORD FROM NEW MASTER. LAC RADIX /(RCHM-007) PREPARE TO CONVERT BLOCK # AND WORD # TO /(RCHM-007) CURRENT RADIX. SZA /(RCHM-007) PERFORM DECIMAL CONVERSION IF AC=0. JMP CM0110 /(RCHM-007) PERFORM OCTAL CONVERSION OTHERWISE. LAC CMBCNT /(RCHM-007) FETCH BLOCK # FOR CONVERSION. JMS BTOD /(RCHM-007) CONVERT BLOCK # TO DECIMAL. DECNUM+5 /(RCHM-007) LOW ORDER DIGIT ADDRESS. DAC CM0130 /(RCHM-007) STORE ADDRESS IN MIXUP ARGUMENT LIST. LAC CMWC /(RCHM-007) FETCH WORD COUNT FOR CONVERSION. JMS BTOD /(RCHM-007) CONVERT WORD # TO DECIMAL. TYLINE+5 /(RCHM-007) LOW ORDER DIGIT ADDRESS. JMP CM0120 /(RCHM-007) PRODUCE COMBINED MESSAGE. CM0110 LAC CMBCNT /(RCHM-007) FETCH BLOCK # FOR CONVERSION. JMS BTOA /(RCHM-007) CONVERT BLOCK # TO IMAGE ASCII. DECNUM /(RCHM-007) CONVERSION OUTPUT AREA. LAC .-1 /(RCHM-007) FETCH CONVERSION BUFFER ADDRESS. DAC CM0130 /(RCHM-007) STORE ADDRESS IN MIXUP ARGUMENT LIST. LAC CMWC /(RCHM-007) FETCH WORD # FOR CONVERSION. JMS BTOA /(RCHM-007) CONVERT WORD # TO IMAGE ASCII. TYLINE /(RCHM-007) CONVERSION OUTPUT AREA. LAC .-1 /(RCHM-007) FRTCH CONVERSION BUFFER ADDRESS. CM0120 DAC CM0140 /(RCHM-007) STORE IN MISUP ARGUMENT LIST. /(RCHM-007) FOR CONVERSION. LAC* CMBUFP /(RCHM-007) FETCH O.M. WORD FOR CONVERSION. JMS BTOA /(RCHM-007) CONVERT WORD1 TO IMAGE ASCII. TYLINE+10 /(RCHM-007) CONVERSION OUTPUT AREA. LAC* BUFADR /(RCHM-007) FETCH WORD FROM NEW MASTER BUFFER /(RCHM-007) FOR CONVERSION. JMS BTOA /(RCHM-007) CONVERT WORD2 TO IMAGE ASCII. TYLINE+20 /(RCHM-007) CONVERSION OUTPUT AREA / COMBINE IOPS AND IMAGE ASCII MESSAGES INTO OUTPUT MESSAGE. JMS MIXUP /(RCHM-007) COMBINE DATA INTO MESSAGE. XCT MESS8-2 /(RCHM-007) BLOCK # CM0130 XX /(RCHM-007) ADDRESS OF CONVERSION BUFFER. XCT MESS10-2 /(RCHM-007) WORD # CM0140 XX /(RCHM-007) ADDRESS OF WORD # CONVERSION BUFFER. XCT MESS11-2 /(RCHM-007) ORIG. WORD CAL TYLINE+10 /(RCHM-007) XXXXXX XCT MESS12-2 /(RCHM-007) COMP. WORD CAL TYLINE+20 /(RCHM-007) XXXXXX LAW -1 /(RCHM-007) FETCH ERROR FLAG (ALSO END OF ARGUMENT LIST) DAC CMERR /(RCHM-007) FLAG NON-FATAL ERROR. JMS WRFILE /(RCHM-007) GO WRITE LINE TO DUMP FILE. JMP CM0060 /(RCHM-007) GO SET UP FOR NEXT WORD. .TITLE COMPARE VARIABLES. CMBCNT 0 /(RCHM-007) BLOCK COUNTER. NUMBER OF BLOCKS READ /(RCHM-007) DURING COMPARISON PROCESS. COUNT /(RCHM-007) PROCEEDS FROM 0. CMBUFC 0 /(RCHM-007) NUMBER OF WORDS IN OLD MASTER BLOCK. /(RCHM-007) ALSO NUMBER OF WORDS TO COMPARE BETWEEN BUFFERS. CMBUFP 0 /(RCHM-007) POINTER TO OLD MASTER BUFFER DURING WORD /(RCHM-007) COMPARE. CMBUF1 0 /(RCHM-007) SA OF COMPARISON BUFFERS, FIRST FREE WORD /(RCHM-007) OF CORE. CMEOF 0 /(RCHM-007) 0 IF EOF'S OK, -1 IF EOF DETECTED /(RCHM-007) ON OLD MASTER BUT NOT ON NEW YET. CMEOT 0 /(RCHM-007) SAME AS ABOVE BUT FOR PHYSICAL END OF /(RCHM-007) TAPE. CMERR 0 /(RCHM-007) ERROR FLAG 0 IF NO ERRORS. CMWC 0 /(RCHM-007) WORD COUNTER. SIMILAR TO CMBCNT BUT /(RCHM-007) DURING WORD COMPARE LOOP. CMMXWD 0 /(RCHM-007) MAXIMUM NUMBER OF WORDS AVAILABLE FOR /(RCHM-007) READ OF OLD MASTER TAPE. .TITLE COMPARE MESSAGES. MESS13 .ASCII " LENGTHS NOT EQUAL"<15> /(RCHM-007) MESS12 .ASCII " N.M. WORD -- "<15> /(RCHM-007) MESS11 .ASCII " O.M. WORD -- "<175> /(RCHM-007) MESS10 .ASCII " WORD # "<175> /(RCHM-007) MESS8 .ASCII "BLOCK # "<175> /(RCHM-007) MESS7 .ASCII "EXPECTED END OF TAPE NOT ENCOUNTERED ON NEW MASTER"<15> /(RCHM-007) MESS6 .ASCII "EXPECTED END OF FILE NOT ENCOUNTERED ON NEW MASTER"<15> /(RCHM-007) MESS5 .ASCII "UNEXPECTED END OF TAPE ENCOUNTERED ON NEW MASTER"<15> /(RCHM-007) MESS4 .ASCII "UNEXPECTED END OF FILE ENCOUNTERED ON NEW MASTER"<15> /(RCHM-007) MESS3 .ASCII " NOT ENOUGH CORE FOR COMPARISON BUFFERS"<15> /(RCHM-007) MESS2 MESS1-MESS2/2*1000 /(RCHM-007) 0 /(RCHM-007) .ASCII "TAPES ARE IDENTICAL"<15> /(RCHM-007) MESS1 MESS0-MESS1/2*1000 /(RCHM-007) 0 /(RCHM-007) .ASCII "ERRORS DETECTED DURING COMPARISON"<15> /(RCHM-007) MESS0=. /(RCHM-007) .TITLE REWIND COMMAND PROCESSOR. REWIND JMS ECHO /PUT COMMAND INTO DUMP OUTPUT FILE. JMS GETDRV /WHAT UNIT SHOULD BE REWOUND? JMP TYQUES /NO UNIT GIVEN. JMS PUTDAT /PUT UNIT NUMBER IN DAT SLOT 1. .MTAPE 1,0 /THEN REQUEST REWIND. JMP RDLIN /AND GET NEXT COMMAND. .TITLE SIZE COMMAND PROCESSOR. /SERVICE SIZE REQUEST,STORE WORD COUNT FOR NEXT PUT REQUEST. /ACCEPT WORD COUNT FROM TTY, DETERMINE IF OCTAL OR DECIMAL, /AND THEN CONVERT TO BINARY AND STORE IN WORD COUNT REGISTER /OF THE "PUT" ROUTINE. SIZE JMS ECHO /ADD REQUEST TO DUMP FILE. JMS GETARG /CONVERT NUMBER TO BINARY. LAC DCOUNT /PICK UP BINARY NUMBER. CMA /CHANGE TO ONES COMPLEMENT;POSITIVE. SNA /WAS IT TERMINATOR? JMP RDLIN /IT WAS GET NEXT COMMAND. TAD ONE /MAKE TWOS COMPLEMENT;POSITIVE. DAC GPCT /STORE WORD COUNT WHERE PUT CAN USE IT. JMP RDLIN /GET NEXT COMMAND. .TITLE TAPEMARK COMMAND PROCESSOR. /SERVICE TAPEMARK REQUEST; WRITE AN EOF MARKER. WRTEOF JMS ECHO /PUT COMMAND LINE INTO DUMP FILE. JMS GETDRV /WHERE SHOULD WE WRITE AN EOF MARKER? JMP TYQUES /USER DOESN'T KNOW EITHER. JMS PUTDAT /PUT UNIT NUMBER IN DAT SLOT 1. .MTAPE 1,4 /THEN WRITE ONE EOF ON THE TAPE. JMP RDLIN /READ NEXT REQUEST. .TITLE BACKSPACE COMMAND PROCESSOR. /SERVICE BACKSPACE REQUEST. BKSPCE JMS ECHO /ADD REQUEST LINE TO DUMP FILE. JMS GETDRV /FIND OUT WHAT UNIT SHOULD BE BACKSPACED AND JMP TYQUES JMS PUTDAT / PUT UNIT NUMBER IN DAT SLOT 1. JMS GETARG /NOW DECIDE HOW TO TERMINATE THE BACKSPACE OPERATION. LAW -2 /MAKE SURE TERMINATOR TYPED WAS NOT "EOT". TAD TERM /TERM MUST BE 0, 1, OR 2. SMA!SZA /SKIP IF LEGAL. JMP ILLTRM /TERMINATOR WAS "EOT", COMPLAIN. BKSLP1 .MTAPE 1,2 /ISSUE ONE BACKSPACE. .WAIT 1 /WAIT FOR COMPLETION AND STATUS REGISTER. DAC STATUS /SAVE MAG TAPE STATUS (HANDLER RETURNS IT IN AC). JMS CHKTRM /NOW GO FIND OUT IF WE'RE DONE YET. JMP BKSLP1 /MORE RECORDS TO BACKSPACE. JMP RDLIN /ALL DONE, GET NEXT COMMAND. .TITLE SPACE COMMAND PROCESSOR. /SERVICE SPACE REQUEST; SPACE FORWARD SOME RECORDS. SPCFWD JMS ECHO /PUT COMMAND LINE IN DUMP FILE. JMS GETDRV /GET UNIT NUMBER TO BE REFERENCED. JMP TYQUES JMS PUTDAT /AND PUT IT IN DAT SLOT 1. JMS GETARG /THEN GO SET UP END OF OPERATION. SPCLP1 .MTAPE 1,5 /SPACE FORWARD ONE RECORD. .WAIT 1 /WAIT FOR COMPLETION. DAC STATUS /SAVE MAG TAPE STATUS (COMES BACK FROM .WAIT IN AC). JMS CHKTRM /FIND OUT IF WE SHOULD SPACE FORWARD SOME MORE. JMP SPCLP1 /YES, SPACE OVER NEXT RECORD. JMP RDLIN /NO, GET NEXT COMMAND. .TITLE LOG COMMAND PROCESSOR. /SERVICE LOG REQUEST; WRITE COMMENTS INTO OUTPUT FILE. PRCOMT LAC ECHOSW /SAVE COMMAND-ECHO-WANTED INDICATOR. DAC PRCSW /.. DZM ECHOSW /THEN SIMULATE "VERIFY ON" REQUEST. PRCOM1 LAC TOCHRS /PICK UP TOTAL TYPED CHARACTERS IN COMMENT LINE. TAD OUTADR /FORM POINTER TO LINE TERMINATOR. DAC POINTR /AND SAVE IT. LAC* POINTR /NOW PICK UP THE TERMINATOR ITSELF. SAD ALTMOD /DID USER TYPE AN ALT MODE? JMP PREND /YES, GO FINISH UP LOG SEQUENCE. LAC TOTCHR /NO. PICK UP TOTAL TYPED CHARACTERS AGAIN. SZA /SKIP IF ONLY A CARRIAGE-RETURN WAS TYPED. JMS ECHO /LINE IS NON-EMPTY, PUT IT IN DUMP FILE. LAW TYLINE /THEN TAKE ANOTHER LINE FROM THE KEYBOARD. JMS TYPEIN /.. JMS UNPACK /UNPACK THE TYPED LINE. TYLINE / FROM TYLINE... OUTLIN / ...TO OUTLIN. JMP PRCOM1 /AND GO CHECK THIS NEW LINE. /COME HERE ON ALT MODE TYPED BY USER. MEANS COMMENTS ALL FINISHED. PREND LAC TOTCHR /WAS THE LINE EMPTY? SNA /SKIP IF NOT. JMP PREND1 /IF LINE WAS EMPTY, GO FINISH UP. JMS TYPRTN /LINE NON-EMPTY, TYPE A CARRIAGE-RETURN. LAW 17762 /THEN SUBSTITUTE A CARRIAGE-RETURN DAC* POINTR / FOR THE ALT MODE IN THE COMMENT LINE. JMS ECHO /GO WRITE THE LINE. PREND1 LAC PRCSW /RESTORE THE ECHO-WANTED SWITCH DAC ECHOSW / TO ITS ORIGINAL STATE. JMP RDLIN /AND GET NEXT COMMAND. .TITLE OPEN COMMAND PROCESSOR. /SERVICE OPEN REQUEST; OPEN DUMP OUTPUT FILE. OPEN NOP /OR "JMP TYQUES" IF A FILE IS ALREADY OPEN. LAW -DOS /(RCHM-011) IS THE DUMP DEVICE FILE-STRUCTURED? TAD P03DEV /CHECK STANDARD BUFFER SIZE TO FIND OUT. SPA /SKIP IF DUMP DEVICE IS FILE-STRUCTURED. JMP RDLIN /NON-FILE-STRUCTURED, IGNORE OPEN REQUEST. JMS GETCOM /GET FILE NAME FROM COMMAND LINE. SNA /SKIP IF A FILE NAME WAS REALLY TYPED. JMP TYQUES /NO NAME GIVEN, COMPLAIN. LAW -2 /PACK A TWO-WORD FILE NAME. JMS PK6BT /IN SIXBIT FORMAT. CWD /FILE NAME IS IN CWD ARRAY. NAMPTR FILNAM /IT WILL BE PACKED INTO FILNAM AND FILNAM+1. LAC DEFNAM /SET UP DEFAULT EXTENSION ("LST") IN CASE DAC FILNAM+2 / NO EXTENSION WAS GIVEN. JMS GETCOM /NOW GO GET THE TYPED EXTENSION, IF PRESENT. SNA /SKIP IF USER TYPED AN EXTENSION. JMP FSTFIL /NO EXTENSION, USE "LST". LAW -1 /USER PROVIDED AN EXTENSION, JMS PK6BT / PACK IT INTO ONE WORD. CWD /TAKE IT FROM CWD. FILNAM+2 /PUT IT IN FILNAM+2. FSTFIL .FSTAT 3,FILNAM /IS A FILE OF THIS NAME ALREADY ON THE DUMP DEVICE? SNA /SKIP IF FILE NAME FOUND IN DIRECTORY. JMP ENTFIL /NAME GIVEN IS UNIQUE, GO ENTER THE FILE. /COME HERE TO COMPLAIN WHEN THE FUMP-FILE NAME SPECIFIED BY THE /USER IS THE SAME AS A NAME ALREADY PRESENT ON THE DUMP OUTPUT /DEVICE (DAT SLOT 3). LAC OUT100 /SET UP ADDRESS OF TEMPORARY FILE-NAME ARRAY. DAC OUTPTR / FOR SUBROUTINE PUTCHR. LAC NAMPTR /PICK UP ADDRESS OF FILE NAME TO PRINT. JMS SETNAM /AND GO UNPACK IT. JMS MIXUP /THEN COMBINE TWO STRINGS: XCT FNDMES / "FILE FOUND ON DUMP DEVICE" OUT100 OUTLIN+100 /FILE NAME AND EXTENSION IN IMAGE FORM. LAW TYLINE /NOW GO PRINT THE WHOLE MESSAGE. JMS TYPOUT /.. LAW DLQUES /THEN ASK IF WE SHOULD DELETE THE OLD FILE. JMS TYPOUT /.. JMS YESNO /WAIT FOR USER'S RESPONSE. /THE FOLLOWING TWO INSTRUCTIONS ARE RETURNS FROM SUBROUTINE YESNO. THE /FIRST RETURN IS TAKEN IF THE USER TYPED ANYTHING BUT "CR", "Y", OR /"YES" (I.E., THE USER'S ANSWER WAS NEGATIVE). THE SECOND RETURN /IS TAKEN IF THE USER ANSWERED IN THE AFFIRMATIVE. JMP RDLIN /ANSWER WAS NO, DON'T DELETE OLD FILE. ENTFIL .ENTER 3,FILNAM /ANSWER WAS YES, ENTER DUMP OUTPUT FILE ON DAT SLOT 3. LAC BADARG /PICK UP "JMP TYQUES". DAC OPEN /AND DISALLOW REENTRY TO OPEN SEQUENCE. DAC FILOPN /INDICATE A DUMP OUTPUT FILE IS NOW OPEN. JMP RDLIN /ALL DONE, GET NEXT COMMAND. FILOPN 0 /(RCHM-009) FILE OPEN FLAG 0=> NOT OPEN /(RCHM-009) NON 0 => OPEN. .TITLE COPY COMMAND PROCESSOR. /SERVICE COPY REQUEST. COPY JMS GETDRV /GET INPUT DRIVE DESIGNATOR. JMP TYQUES /IF NO INPUT DRIVE TYPED. DAC UNIT1 /SAVE AS INPUT UNIT. JMS GETDRV /NOW GET OUTPUT DRIVE. JMP TYQUES DAC UNIT2 /AND SAVE THAT TOO. JMS ECHO /ADD COMMAND LINE TO DUMP FILE. JMS GETARG /NOW GO FIND OUT WHEN TO QUIT COPYING. /ENTER LOOP TO COPY RECORDS FROM UNIT1 TO UNIT2. COPLP1 LAC UNIT1 DAC UNIT JMS PUTDAT JMS GETREC /GET NEXT RECORD FROM INPUT TAPE. JMP COPEOF /ERROR RETURNS: EOF ENCOUNTERED. JMP COPEOT / PHYSICAL EOT ENCOUNTERED. JMP DMOFLO / LONG INPUT RECORD. LAC UNIT2 DAC UNIT JMS PUTDAT LAC COUNT /TAKE TWO'S COMPLEMENT OF COUNT OF JMS TWOS / WORDS IN RECORD JUST READ. JMS PUTREC /THEN GO PUT RECORD ON OUTPUT TAPE. JMP COPEOT /ERROR RETURN: PHYSICAL EOT FOUND. COPLP2 JMS CHKTRM /SUCCESSFUL TRANSFER. ARE WE DONE YET? JMP COPLP1 /NO, GO COPY NEXT RECORD. JMP RDLIN /ALL FINISHED, ACCEPT ANOTHER REQUEST. COPEOF LAC UNIT2 /EOF ON THE INPUT TAPE, DAC UNIT / WRITE ONE ON THE OUTPUT TAPE. JMS PUTDAT /AFTER FIXING UP DAT SLOT 1. .MTAPE 1,4 /WRITE END-OF-FILE. JMP COPLP2 /AND GO SEE IF FINISHED YET. COPEOT JMS FXUNIT /GO MAKE AN ASCII ERROR-UNIT NUMBER. JMS MIXUP /COMBINE TWO ASCII MESSAGES: XCT EOTMES / "PHYSICAL EOT" XCT ENCOUN / "ENCOUNTERED, UNIT" PRUNIT /AND THE UNIT NUMBER ON WHICH EOT WAS FOUND. PRTMES LAW TYLINE /PICK UP ADDRESS OF NEW MESSAGE. JMS ERCOMT /AND GO ADVERTISE THE DIFFICULTY. JMP RDLIN /THEN ACCEPT ANOTHER REQUEST. .TITLE EXAMINE COMMAND PROCESSOR. /SERVICE EXAMINE REQUEST. /ACCEPT RELATIVE BUFFER ADDRESS FROM TTY, DETERMINE IF OCTAL /OR DECIMAL, CONVERT TO BINARY AND MAKE IT ABSOLUTE. /DISPLAY THE CONTENTS OF THAT ADDRESS ON THE TTY IN FORMAT /OF LAST MODE REQUEST. IF A CR IS FIRST CHAR STRUCK DISPLAY /THE NEXT REGISTER; IF AN ALT MODE IS THE FIRST CHAR STRUCK /OUTPUT A CR/LF AND GO GET NEXT COMMAND. /IF A NUMBER IS FIRST CHAR STRUCK REPLACE THE CONTENTS OF THE /OPENED REGISTER WITH THE NUMBER TYPED AND TAKE APPROPREATE /ACTION ON THE TERMINATOR. EXAMNE JMS ECHO /ADD COMMAND LINE TO DUMP FILE JMS GETARG /CONVERT NUMBER TO BINARY LAC BNUM /PICK UP BINARY NUMBER TAD BUFADR /ADD STARTING BUFFER ADDRESS DAC WRDPTR /PUT RELATIVE ADRESS IN POINTER XAM LAC OUTADR /SET POINTER ADDRESS DAC OUTPTR /FOR EXPANSION ROUTINES LAC* WRDPTR /PICK UP WORD WANTED XCT* DCCALL /INTERPET ACCORDING TO LAC* WRDPTR /CURRENT MODE SETTINGS XCT* EXPCAL LAC (40 /INSERT 2 SPACES JMS PUTCHR /JUST TO LOOK PRETTY LAC (40 /ON TYPE OUT JMS PUTCHR LAW -176 /INSERT AN ALTMODE DAC* OUTPTR /SO HE WILL STOP TYPING JMS PACK /GO PACK INTO 5/7 OUTLIN /FROM OUTLIN TYLINE /TO TYLINE LAW TYLINE /PICK UP ADDRESS OF 5/7 BUFFER JMS TYPOUT /AND TYPE IT OUT LAW TYLINE JMS TYPEIN /WAIT ON RESPONSE JMS UNPACK /NOW UNPACK INTO IMAGE ASCII TYLINE /FROM TYLINE OUTLIN /TO OUTLIN TAD OUTADR /UNPACK RETURNS THE NUMBER OF WORDS IN OUTLIN DAC NUMPTR /ADD OUTLIN TO THAT FOR ADDRESS OF LAST WORD IN BUFFER LAC OUTLIN /PICK UP FIRST CHAR TYPED SPA /WAS IT A TERMINATOR; SKIP IF NOT JMP SHUT /TERMINATOR , GO PROCESS IT LAC (SKP /SET UP GETNUM TO CONVERT DAC DECMK1 /OCTAL TO BINARY LAC OUTADR /SET POINTER TO FIRST CHAR DAC NXTPTR /TO BE CONVERTED JMS GETCOM /SET UP CHAR IN PROPER BUFFER AND ORDER JMS GETNUM //CONVERT OCTAL TO BINARY LAC BNUM /PICK UP BINARY NUMBER DAC* WRDPTR /STORE IT AWAY LAC (ADD BNUM /RESET GETNUM FOR DAC DECMK1 /DECIMAL NUMBER SHUT LAC* NUMPTR /PICK UP TERMINATOR XOR (777602 /WAS IT ALT MODE SNA JMP GOHOME /YES CLOSE UP SHOP ISZ WRDPTR /NO, ASSUME CR JMP XAM /AND OPEN NEXT REGISTER GOHOME JMS TYPRTN /OUTPUT A CR/LF, FOR BEAUTY JMP RDLIN /GO GET NEXT COMMAND .TITLE LIST AND DUMP COMMAND PROCESSORS. /SERVICE LIST AND DUMP REQUESTS. LIST CLA /DUMP ON TELEPRINTER DUMP DAC TYDEV / OR ON DUMP DEVICE; SET INDICATOR. JMS ECHO /ADD DUMP COMMAND LINE TO DUMP OUTPUT FILE. JMS GETDRV /WHAT UNIT IS TO BE REFERENCED? JMP TYQUES JMS PUTDAT /PUT DRIVE NUMBER IN DAT SLOT 1. JMS GETARG /FIND OUT WHEN TO STOP TAPE DUMP. /ENTER MAJOR LOOP TO READ AND DUMP NEXT RECORD. DMPLP1 JMS GETREC /GO READ NEXT RECORD. JMP DMEOF /RETURN HERE ON EOF ENCOUNTERED, JMP COPEOT / HERE ON PHYSICAL EOT, JMP DMOFLO / AND HERE ON RECORD TOO LONG. LAC COUNT /PICK UP INPUT RECORD LENGTH. JMS TWOS /AND CONVERT IT TO TWOS COMPLEMENT. DAC COUNT /SAVE NEGATIVE COUNT OF WORDS IN RECORD. LAC BUFADR /SET UP FIRST POINTER TO DAC BUFPTR / NEXT WORD TO DUMP. LAC ONE /AND SET INITIAL WORD SEQUENCE DAC TOTWDS / NUMBER TO ONE. /ENTER INNER LOOP TO SET UP AN OUTPUT LINE OF A WORD SEQUENCE NUMBER /AND A BUNCH OF DATA WORDS. THE NUMBER OF DATA WORDS IN EACH LINE, /AND THE WAY THEY'RE TO BE REPRESENTED (OCTAL, SYMBOLIC, SIXBIT, /OR ASCII), HAVE BEEN SET EITHER AT START TIME OR BY A PREVIOUS /"MODE" REQUEST. DMPLP2 LAC OUTADR /RESET OUTPUT-CHARACTER POINTER TO DAC OUTPTR / BEGINNING OF DECNUM ARRAY. LAW0 LAW 0 DAC DCSW1 /SET UP WORD SEQUENCE NUMBER FOR PRINTING. FIRST, FIND OUT WHETHER /CURRENT GLOBAL RADIX IS OCTAL OR DECIMAL. LAC RADIX /PICK UP CURRENT-RADIX INDICATOR. SNA /SKIP IF GLOBAL RADIX IS OCTAL. JMP CONV10 /RADIX IS DECIMAL, GO CONVERT SEQUENCE NUMBER. LAC TOTWDS /PICK UP CURRENT SEQUENCE NUMBER. JMS EXPND8 /AND MAKE IT PRINTABLE OCTAL. JMP CONVX /JUST TO SKIP DECIMAL REPRESENTATION OF SEQUENCE NUMBER. /COME HERE TO CONVERT SEQUENCE NUMBER TO DECIMAL. CONV10 LAC TOTWDS /PICK UP BINARY SEQUENCE NUMBER. JMS BTOD /GO CONVERT TO DECIMAL, OUTLIN+5 / STORING DIGITS IN OUTLIN ARRAY. CONVX LAW -6 /NOW GO SUPPRESS LEADING ZEROES JMS SUPRES / IN CONVERTED NUMBER. 40 /REPLACE WITH BLANKS. OUTLIN /STRING TO EDIT IS IN OUTLIN ARRAY. LAC (6 TAD OUTADR DAC OUTPTR LAW 40 /ALL SET, PUT OUT JMS PUTCHR / A COUPLE OF BLANKS. LAW 40 /.. JMS PUTCHR /.. /COME HERE WITH SEQUENCE NUMBER IN OUTPUT ARRAY (OUTLIN). FIRST, /SET UP TOTAL DATA WORDS TO DUMP IN THIS LINE BY REFERENCING /APPROPRIATE ENTRY IN PARTBL. DMPDTA XCT* DWORDS /LAW -NWORDS TO DUMP. DAC LINCT /SAVE WORD COUNT FOR CURRENT MODE. DMPLP3 LAC QUIT /DID USER TYPE CONTROL-P? SNA /SKIP IF NOT. JMP RDLIN /IF SO, GET NEXT COMMAND. LAC* BUFPTR /NO, GET NEXT DATA WORD FROM RECORD AREA. XCT* DCCALL /JMS DECODE (ONLY IF MODE IS SYMBOLIC) OR NOP. LAC* BUFPTR /PICK UP DATA WORD AGAIN. XCT* EXPCAL /JMS EXPANSION. LAW40 LAW 40 /GET A BLANK DAC DCSW1 JMS PUTCHR / TO PUT BETWEEN EXPANDED WORDS. ISZ BUFPTR /BUMP POINTER TO NEXT DATA WORD IN BUFFER. ISZ TOTWDS /AND BUMP WORD SEQUENCE NUMBER. ISZ COUNT /NOW SEE IF DATA WORDS IN RECORD ARE ALL DUMPED. SKP /SKIP IF MORE WORDS IN RECORD. JMP ENDBUF /NO MORE DATA WORDS, GO FINISH OFF SHORT OUTPUT LINE. ISZ LINCT /NOW SEE IF OUTPUT LINE IS FULL. JMP DMPLP3 /ROOM FOR MORE WORDS, GET NEXT ONE. 15\777777 /LINE IS COMPLETE, INSERT DAC* OUTPTR / A CARRIAGE RETURN. JMS PACK OUTLIN TYLINE JMS LINOUT JMP DMPLP2 /AND PROCESS ANOTHER LINE. /COME HERE WHEN RECORD IS EXHAUSTED, USUALLY IN THE MIDDLE OF /AN OUTPUT LINE. ENDBUF 15\777777 /TERMINATE THE OUTPUT LINE (PREMATURELY) DAC* OUTPTR / WITH A CARRIAGE RETURN. JMS PACK OUTLIN TYLINE JMS LINOUT INREC JMS BLKLIN /NOW WRITE TWO JMS BLKLIN / BLANK LINES. JMS CHKTRM /AND GO SEE IF DUMP IS COMPLETE. JMP DMPLP1 /MORE RECORDS TO DUMP, READ NEXT ONE. JMP RDLIN /ALL DONE, GET NEXT COMMAND. /COME HERE ON VARIOUS CONDITIONS ENCOUNTERED ON THE INPUT TAPE. DMEOF LAC EOFWRD /EOF ENCOUNTERED, GO JMS PRTEOF / PRINT "EOF". JMP INREC /THEN DO INTER-RECORD PROCESSING. /COME HERE ON LONG RECORD ENCOUNTERED ON INPUT TAPE. DMOFLO JMS FXUNIT /FIRST, MAKE ASCII UNIT NUMBER. JMS MIXUP /THEN COMBINE SOME TEXT STRINGS. XCT OFLMES /"LONG RECORD" XCT ENCOUN /"ENCOUNTERED, UNIT" CAL PRUNIT /UNIT NUMBER. JMP PRTMES /THEN GO ADVERTISE ERROR CONDITION. .TITLE DLIST AND DDUMP COMMAND PROCESSORS. /SECTION TO LIST CONTENTS OF FILE DIRECTORY. DLIST CLA /DIRECTORY GOES TO TELEPRINTER, SET AC ZERO. DDUMP DAC TYDEV /DIRECTORY GOES TO DUMP FILE, AC IS NON-ZERO. JMS GETDRV /WHAT UNIT SHOULD DIRECTORY COME FROM? JMP TYQUES /NO UNIT TYPED, COMPLAIN. JMS ECHO /ADD COMMAND TO DUMP FILE. JMS PUTDAT /PUT UNIT NUMBER IN DAT SLOT 1. .MTAPE 1,0 /REWIND THE INPUT UNIT. DZM EOFSW /INDICATE NO EOF ENCOUNTERED YET. PRDLP1 JMS GETREC /READ A RECORD (SHOULD BE EOF OR DIRECTORY PROPER). JMP PRDEOF /EOF ENCOUNTERED. JMP COPEOT /PHYSICAL EOT ENCOUNTERED. JMP PRDER2 /LONG RECORD. JMP PRDLP2 /RECORD SEEMS OK, SEE IF IT REALLY IS A DIRECTORY. PRDEOF LAC EOFSW /RECORD WAS AN EOF. WAS IT THE FIRST ONE? CMA /COMPLEMENT AND UPDATE DAC EOFSW / EOFSW IN CASE IT WAS THE FIRST. SPA /NOW SKIP IF IT WAS THE SECOND EOF ENCOUNTERED. JMP PRDLP1 /ONLY THE FIRST EOF SO FAR, GET NEXT RECORD. /ERROR, TWO CONSECUTIVE EOF MARKERS. PRDER2 LAW FMTERR /"*DIRECTORY FORMAT ERROR." JMS ERCOMT /GO TYPE IT OUT. JMP RDLIN /AND FIND OUT WHAT TO DO NEXT. /COME HERE WITH RECORD IN CORE. CHECK FOR FORMAT OK. PRDLP2 LAC BUFADR /SET UP POINTER TO FIRST DAC BUFPTR / WORD OF DIRECTORY RECORD. LAC (747377 /FIRST WORD SHOULD BE 747377. XOR* BUFPTR /FIND OUT IF IT IS. SZA /SKIP IF FIRST WORD IS OK. JMP PRDER2 /COMPLAIN IF IT IS NOT. LAW -401 /NOW DECIDE IF RECORD HAS PROPER LENGTH. TAD COUNT /SHOUD BE 401(8) WORDS LONG. SZA /SKIP IF LENGTH IS CORRECT. JMP PRDER2 /BAD RECORD LENGTH, COMMENT. ISZ BUFPTR /BUMP POINTER TO ISZ BUFPTR / FILE-COUNTS ENTRY. LAW777 LAW 17000 /TOTAL-FILE COUNT IS IN BITS 0-8. AND* BUFPTR /TAKE TOTAL COUNT. CLL!RAR /AND MOVE IT TO RIGHT HALF. RTR /.. RTR /.. RTR /.. RTR /.. TAD LAW777 /NOW FIX UP LEFT HALF OF ONE'S COMPLEMENT WORD. CMA /MAKE IT POSITIVE. DAC PRTOTL /AND SAVE TOTAL COUNT FOR PRINTING. LAC* BUFPTR /NOW GET COUNT OF ACTIVE FILES (IN BITS 9-17). AND LAW777 /THROW AWAY TOTAL COUNT IN LEFT HALF. XOR* BUFPTR /.. XOR LAW777 /AND FILL LEFT HALF WITH ONES. DAC ACTVCT /SAVE ONE'S COMPLEMENT COUNT FOR DONE TEST. CMA /THEN MAKE IT POSITIVE DAC PRACTV / AND SAVE IT FOR PRINTING LATER. LAC BUFPTR /NOW FORM A POINTER TO TAD (17 / FIRST DEB IN DAC BUFPTR / FILE-NAME-ENTRY SECTION. JMS FXUNIT /MAKE ASCII UNIT NUMBER. JMS MIXUP /COMBINE TWO STRINGS. XCT DIRMES / "DIRECTORY LISTING, UNIT" CAL PRUNIT / UNIT NUMBER. JMS LINOUT /THEN GO OUTPUT THE HEADING LINE. PRDLP3 ISZ ACTVCT /COUNT ACTIVE FILES (1'S COMPLEMENT). SKP /MORE TO DO. JMP PRDLP4 /ALL FINISHED WITH FILE NAMES. LAC OUT100 DAC OUTPTR LAC BUFPTR /PICK UP ADDRESS OF NEXT DEB. JMS SETNAM /GO OUTPUT THIS DEB. LAC (3 /BUMP DEB POINTER TAD BUFPTR /BY 3. DAC BUFPTR /.. JMS MIXUP /NOW SET UP THE FILE NAME. OUTLIN+100 /IT APPEARS IN RIGHT END OF OUTLIN ARRAY. JMS LINOUT /GO PRINT THE FILE NAME. JMP PRDLP3 /THEN GO FOR MORE. PRDLP4 JMS MIXUP /PUT OUT A BLANK LINE. XCT BLNKS /.. JMS LINOUT /.. LAC PRACTV /PICK UP ACTIVE COUNT. JMS PRDLNM JMS MIXUP DECNUM XCT AFILMS JMS LINOUT LAC PRTOTL JMS PRDLNM JMS MIXUP DECNUM XCT TFILMS JMS LINOUT JMS MIXUP XCT BLNKS JMS LINOUT JMP RDLIN .TITLE DLIST AND DDUMP SEERVICE ROUTINES. / LINOUT: CALLED WHEN A RECORD IS TO BE PLACED IN THE DUMP FILE / OR IN THE TELEPRINTER FILE. / / CALLING SEQUENCE: / / SET TYDEV /OUTPUT TO DUMP FILE. / OR / DZM TYDEV /OUTPUT TO TELEPRINTER. / JMS MIXUP /STORE ARGUMENTS IN OUTLINE. / ARG1 / . / . / . / ARGN / JMS LINOUT /PLACE LINE IN DUMP FILE. LINOUT 0 LAC TYDEV SNA JMP LIN01 JMS WRFILE JMP* LINOUT LIN01 LAW TYLINE JMS TYPOUT JMP* LINOUT PRDLNM 0 JMS BTOD PRDPT1 DECNUM+5 CLA!CMA DAC DECNUM+6 LAC DECPNT DAC PRDNPT PRDLN1 LAC PRDNPT SAD PRDPT1 JMP* PRDLNM LAC* PRDNPT SAD (60 XOR (20 DAC* PRDNPT ISZ PRDNPT JMP PRDLN1 PRTOTL 0 ACTVCT 0 PRACTV 0 PRDNPT 0 EOFSW 0 .TITLE EXIT COMMAND PROCESSOR /SERVICE EXIT REQUEST. EXIT JMS CLSFIL /CLOSE DUMP OUTPUT. .EXIT /(RCHM-009) RETURN TO MONITOR. .TITLE NEWDIR COMMAND PROCESSOR /SECTION TO INITIALIZE FILE DIRECTORY. NUDIRC JMS GETDRV JMP TYQUES JMS PUTDAT .MTAPE 1,0 .MTAPE 1,4 NUDIR1 .MTAPE 1,2 .MTAPE 1,5 LAC BUFADR DAC BUFPTR LAC (747377 DAC* BUFPTR ISZ BUFPTR DZM* BUFPTR ISZ BUFPTR MINUS1 LAW -1 DAC* BUFPTR LAW -401 JMS PUTREC JMP COPEOT .MTAPE 1,4 .MTAPE 1,4 .MTAPE 1,2 JMP RDLIN .TITLE NEWDIR SERVICE ROUTINES. BLKLIN 0 JMS MIXUP XCT BLNKS JMS LINOUT JMP* BLKLIN BLNKS 002002 0 .ASCII <40><15> PRTEOF 0 DAC EOFLIN+6 JMS BLKLIN JMS BLKLIN JMS MIXUP XCT EOFLIN JMS LINOUT JMP* PRTEOF EOFLIN 010002 0 .ASCII ' EO' 0 EOFWRD .ASCII 'F'<15> .LOC .-1 EOTWRD .ASCII 'T'<15> .LOC .-1 TOTWDS 0 DECPTR LINCT SEQCT CONWDS 0 .TITLE CLOSE COMMAND PROCESSOR. /SERVICE CLOSE REQUEST CLOSE LAC FILOPN SNA JMP TYQUES JMS CLSFIL JMP RDLIN /SUBROUTINE CLSFIL CLSFIL 0 .CLOSE 3 LAC NOPLIT DAC OPEN DZM FILOPN JMP* CLSFIL .TITLE MODE COMMAND PROCESSOR. /SET OUTPUT MODE MODE JMS ECHO JMS GETCOM DZM MODISP SNA JMP OCTMOD LAW -1 JMS PK6BT CWD MODNAM LAC MODNAM SAD OCTSW JMP OCTMOD SAD SYMSW JMP SYMOD SAD ASCSW JMP ASCMOD SAD TRMSW JMP TRMOD JMP TYQUES MODNAM 0 OCTSW .SIXBT 'OCT' SYMSW .SIXBT 'SYM' ASCSW .SIXBT 'ASC' TRMSW .SIXBT 'TRI' TRMOD ISZ MODISP ASCMOD ISZ MODISP SYMOD ISZ MODISP OCTMOD LAC MODISP CLL!RAL /MODISP * 2. TAD MODISP /MODISP * 3. TAD PARTBL DAC DWORDS TAD ONE DAC DCCALL TAD ONE DAC EXPCAL JMP RDLIN DWORDS PARTBL+1 DCCALL PARTBL+2 EXPCAL PARTBL+3 MODISP 0 BUFPTR 0 .TITLE FORMAT COMMAND PROCESSOR. /(RCHM-006) / INPUT TO THIS COMMAND IS OF THE FORM: / / F(ORMAT) U,XYZ / / WHERE U=UNIT NUMBER 0<=U<=7 / X=CHANNEL DEFINITION (9 OR 7) / Y=PARITY (O(DD) OR E(VEN)) / Z=DENSITY (2(00) OR 5(56) OR 8(00) BPI) / "D" THE CHARACTER D WHICH INDICATES USE THE DEFAULT FORMAT MAY / BE ENTERED. / / WITH THE EXCEPTION OF THE UNIT NUMBER, WHICH MUST BE THE FIRST ELEMENT OF / THE COMMAND, THE RES MAY FOLLOW IN ANY ORDER. FORMAT JMS ECHO /PUT FORMAT REQUEST INTO DUMP FILE. JMS GETDRV /GET UNIT WHOSE FORMAT IS TO BE CHANGED. JMP TYQUES /RETURN HERE IF UNIT UNRECOGNIZABLE. JMS PUTDAT /PUT UNIT NUMBER IN DAT SLOT 1. LAC UNIT /GET UNIT NUMBER. CLL /USE AS INDEX RTL / TO DRIVE FORMAT TABLE. RTL /.. TAD (DRVTBL /MAKE A POINTER TO APPROPRIATE ENTRY. DAC DRVPTR /AND SAVE IT. JMS GETCOM /NOW GET THE REST OF THE COMMAND. LAC CWDLIT /MAKE A POINTER DAC CWDPTR / TO CWD ARRAY. DZM DNSW /INDICATE NO DENSITY OR DZM PRSW / PARITY SPECIFIERS HAVE BEEN TYPED. FMTNXT LAC* CWDPTR /GET CURRENT CHARACTER FROM COMMAND. ISZ CWDPTR /BUMP POINTER FOR NEXT TIME. SPA!CLL /IS THIS THE TERMINATOR? SKIP IF NOT. JMP FMTDON /FINAL CHARACTER IN COMMAND, ALL DONE. SAD (104 /DATA CHAR. IS IT A "D"? JMP SETSTD /YES, GO SET UP DEFAULT FORMAT. SAD (117 /DID HE TYPE "O"? JMP SETODP /SET ODD PARITY IF SO. SAD (105 /DID HE TYPE "E"? JMP SETEVP /SET EVEN PARITY IF SO. /NOW CHECK FOR DENSITY SPECIFIERS. DZM DBITS /INITIAL DENSITY = 200 BPI. SAD (62 /IS CHARACTER A "2"? JMP SET200 /YES, THEN 200 BPI IS WANTED. SAD (65 /OR A "5"? JMP SET556 /YES, 556 BPI. SAD (70 /OR AN "8"? JMP SET800 /YES, MEANS 800 BPI. SAD (67 JMP SET7CH SAD (71 /OR DID HE TYPE "9"? JMP SET9CH /IF SO, MEANS 9-CHANNEL (ALWAYS 800 BPI). JMP TYQUES /CHARACTER UNRECOGNIZED, GO COMMENT. /(RCHM-006) / 7 CHANNEL TAPE BEING USED, CLEAR THE 9 TRACK 800 BPI (3 IN DENSITY) / IF NECESSARY. SET7CH LAC (3000 /(RCHM-006) FETCH MASK FOR DENSITY BITS. AND* DRVPTR /(RCHM-006) DENSITY BITS IN AC. XOR (3000 /(RCHM-006) IS THIS DRIVE CURRENTLY SPECIFIED AS /(RCHM-006) 9 TRACK? SZA /(RCHM-006) YES. JMP FMTNXT /(RCHM-006) NO, LEAVE 7 TRACK DENSITY ALONE. LAW 16777 /(RCHM-006) MASK TO TURN OFF 9 CHANNEL 800 BPI DENSITY /(RCHM-006) BIT. AND* DRVPTR /(RCHM-006) TURN OFF EXTRA BIT. DAC* DRVPTR /(RCHM-006) UPDATE FORMAT TABLE. JMP FMTNXT /(RCHM-006) GO PROCESS NEXT FORMAT SPECIFICATION. / 9 CHANNEL TAPE BEING USED, MAKE SURE THAT DENSITY BITS ARE SET TO INDICATE / SPECIAL DENSITY (3) SET9CH DZM DBITS /(RCHM-006) CLEAR DENSITY CELL DZM DNSW /(RCHM-006) CLEAR DENSITY LOCKOUT FLAG. ISZ DBITS /(RCHM-006) COUNT ONCE FOR 9 CHANNEL DENSITY. SET800 ISZ DBITS /7-CHANNEL 800 BPI, DBITS = 2. SET556 ISZ DBITS /7-CHANNEL 556 BPI, DBITS = 1. SET200 LAC DNSW /(RCHM-006) HAS THE DENSITY BEEN SET ALREADY? SZA /(RCHM-006) NO, GO SET IT UP. JMP FMTNXT /(RCHM-006) YES, GO PROCESS NEXT FORMAT ITEM. LAC DBITS /(RCHM-006) FETCH DENSITY BITS FOR STORAGE IN TABLE. CLL!RAL /NOW MOVE 2-BIT DENSITY FIELD RTL / TO BITS 7 AND 8. RTL / .. RTL / .. RTL / .. DAC DNSITY /SAVE DENSITY WANTED. ISZ DNSW /INDICATE SOME DENSITY SETTING WAS REQUESTED. JMP FMTNXT /AND GO PROCESS THE NEXT CHARACTER TYPED. /COME HERE TO SET UP PARITY. SETEVP CLA!SKP /EVEN PARITY WANTED, VARIABLE "PARITY" = 0. SETODP LAC (004000 /ODD PARITY WANTED, TURN ON BIT 6. DAC PARITY /SAVE EVEN OR ODD. ISZ PRSW /INDICATE SOME PARITY SETTING WAS REQUESTED. JMP FMTNXT /AND LOOK AT NEXT CHARACTER IN COMMAND. /COME HERE ON ALL COMMAND CHARACTERS PROCESSED. FMTDON LAC PRSW /SEE IF A PARITY SETTING WAS REQUESTED. SNA /SKIP IF ONE WAS. JMP SETDEN /IF NOT, GO CHECK FOR PRESENCE OF DENSITY REQUEST. LAW 13777 /THROW AWAY PARITY FROM AND* DRVPTR / TABLE ENTRY. TAD PARITY /INSERT NEW PARITY. DAC* DRVPTR /AND UPDATE TABLE ENTRY. SETDEN LAC DNSW /WAS A DENSITY SETTING REQUESTED? SNA /SKIP IF SO. JMP SETFMT /IF NOT, GO ISSUE .MTAPE REQUEST. LAW 14777 /NEW DENSITY, THROW AWAY OLD. AND* DRVPTR /.. TAD DNSITY /INSERT NEW DENSITY. UPDFMT DAC* DRVPTR /AND UPDATE TABLE. SETFMT LAC* DRVPTR /PICK UP ENTRY (IN CASE NO CHANGE WAS MADE). DAC MTCALL /SET UP .MTAPE CAL. ISZ MTCALL /MAKE IT REFERENCE DAT SLOT 1. MTCALL 0 DRVPTR=MTCALL /POINTER TO FORMAT TABLE ENTRY. 7 JMP RDLIN /READ NEXT COMMAND. DEFMT 0 /DEFAULT MTAPE, SET UP AT START TIME. SETSTD LAC DEFMT /PICK UP DEFAULT FORMAT. JMP UPDFMT /AND GO UPDATE TABLE. DRVTBL .BLOCK 10 .TITLE GET AND PUT COMMAND PROCESSORS. /GET-PUT PROCESSORS. GET JMS GETDRV JMP TYQUES JMS PUTDAT JMS GETREC JMP GETEOF JMP GETEOT JMP GETOFL DAC GPCT LAC COUNT JMS BTOD DECNUM+5 DAC .+5 LAW -6 DAC DECNUM+6 JMS MIXUP XCT GSMESS 0 XCT GSMES1 LAW TYLINE JMS TYPOUT JMP RDLIN GETEOF LAC .+2 JMP .+4 XCT EOFMES XCT EOTMES GETEOT LAC .-1 DAC .+2 JMS MIXUP 0 XCT ENCOUN LAW TYLINE JMS ERCOMT JMP RDLIN GETOFL LAW OFLMES JMS ERCOMT JMP RDLIN GSMESS ENDGSM-.*400+2 GPCT 0 .ASCII 'RECSIZE: '<175> ENDGSM=. GSMES1 ENDGS1-.*400+2 GETCT 0 .ASCII '(10)'<15> ENDGS1=. PUT JMS GETDRV JMS PUTDAT LAW -1 TAD GPCT CMA JMS PUTREC JMP PUTEOT JMP RDLIN PUTEOT LAW EOTMES JMS ERCOMT JMP RDLIN .TITLE VERIFY COMMAND PROCESSOR. /SET ECHO ON OR OFF. VERIFY JMS GETCOM SNA JMP VRFYON LAW -1 JMS PK6BT CWD VFYWRD LAC VFYWRD SAD VON JMP VRFYON SAD VOFF SKP!CLA!CMA JMP TYQUES SKP VRFYON CLA DAC ECHOSW JMP RDLIN VON .SIXBT 'ON@' VOFF .SIXBT 'OFF' ECHOSW 0 /INITIALLY ON. VFYWRD 0 .TITLE NUMBER COMMAND PROCESSOR. /RADIX CONTROL. NUMBER JMS GETCOM SNA JMP NUM10 LAW -1 JMS PK6BT CWD NUMWRD LAC NUMWRD SAD OCTSW JMP NUM10 SAD TENWRD SKP!CLA JMP TYQUES NUM10 DAC RADIX JMP RDLIN RADIX 0 /GLOBAL RADIX INDICATOR: ZERO = DEC, NON-ZERO = OCT. NUMWRD 0 TENWRD .SIXBT 'DEC' .TITLE GENERAL SERVICE ROUTINES. /SUBROUTINE PUTDAT, INSERT UNIT # IN DAT TABLE ENTRY. /CALLING SEQUENCE: / JMS PUTDAT /UNIT = UNIT # TO INSERT. PUTDAT 0 LAC* LODAT /PICK UP CURRENT CONTENTS OF DAT SLOT 1. AND (77777 /THROW AWAY OLD UNIT. TAD UNIT /INSERT NEW UNIT. DAC* LODAT /RESTORE DAT SLOT. JMP* PUTDAT /AND EXIT TO CALLER. LODAT .DAT+1 /POINTER TO DAT SLOT 1. /SUBROUTINE GETDRV, EXTRACT UNIT # FROM COMMAND STRING. /CALLING SEQUENCE: / JMS GETDRV / RETURN IF NO UNIT TYPED. / RETURN WITH UNIT IN AC AND VARIABLE "UNIT". GETDRV 0 SUPIN1=GETDRV /CURRENT-CHARACTER POINTER FOR SUPRES. JMS GETCOM LAC CWD SPA JMP* GETDRV ISZ GETDRV AND (170 SAD (60 SKP JMP TYQUES LAC CWD+1 SMA!CLL JMP TYQUES LAC CWD AND (7 RTR RTR DAC UNIT JMP* GETDRV UNIT 0 /COME HERE ON CONTROL P STRUCK BY USER. RECOUP DZM QUIT JMP BEGIN / AND RESTART. SCOM16 116 SCOM17 117 QRETN 0 /SCAN, ATTEMPT TO MATCH TWO CHARACTER STRINGS. /CALL: JMS SCAN / ADDRESS OF STRING TO SEARCH FOR. / ADDRESS OF STRING UPON WHICH SEARCH IS TO BE PERFORMED. / RETURN IF STRING NOT FOUND. / RETURN IF END OF STRING1 FOUND. / RETURN IF END OF STRING2 FOUND. SCAN 0 SUPIN2=SCAN /LOOK-AHEAD POINTER FOR SUPRES. LAC* SCAN JMS GETBNK DAC STR1 ISZ SCAN LAC* SCAN JMS GETBNK DAC STR2 ISZ SCAN SLOOP1 LAC* STR1 SPA JMP SLP1 LAC* STR2 SPA JMP SLP2 SAD* STR1 SKP JMP* SCAN ISZ STR1 ISZ STR2 JMP SLOOP1 SLP2 ISZ SCAN SLP1 ISZ SCAN JMP* SCAN STR1 0 STR2 0 /SUBROUTINE GETARG, INTERPRET REQUESTED TERMINATING CONDITION IN COMMAND /LINE. THE CONDITION WANTED IS EITHER A NUMBER (MEANING: TERMINATE WHEN /THIS MANY RECORDS HAVE BEEN TRANSFERRED) OR A CHARACTER STRING DENOTING /SOME TAPE STATUS (MEANING: TERMINATE WHEN THIS CONDITION IS OBSERVED /ON THE UNIT BEING MANIPULATED). THE TYPED STRING IS MAPPED INTO AN /INTEGER (RANGE 0-3) WHICH IS THEN USED AS AN INDEX TO A DISPATCH TABLE. /THAT TABLE IS ACCESSED BY SUBROUTINE CHKTRM TO FIND OUT WHERE TO GO TO /DECIDE WHETHER THE OPERATION REQUESTED IS COMPLETE YET (CHKTRM IS CALLED /AFTER EACH RECORD IS PROCESSED). THE CONTENTS OF THE DISPATCH TABLE /INDEX (VARIABLE "TERM") ARE SET BY GETARG AS FOLLOWS: / TERMINATING / CONDITION TERM / SOME NUMBER 0 / "BOT" 1 / "EOF" 2 / "EOT" 3 GETARG 0 /ENTRY TO FIGURE OUT WHEN OPERATION WILL BE COMPLETE. SUPSIZ=GETARG /STRING LENGTH FOR SUPRES. DZM TERM /ASSUME NUMERIC ARGUMENT TO START OFF. JMS GETCOM /NOW GO EXTRACT TYPED ARGUMENT FROM COMMAND LINE. LAC CWD /PICK UP FIRST CHAR OF ARGUMENT TO SEE IF ONE WAS TYPED. SPA /SKIP IF AN EXPLICIT TERMINATING CONDITION WAS GIVEN. JMP NUM001 /NO ARGUMENT, TAKE UNDERSTOOD TERMINATOR OF NUMERIC "1". AND (160 /ARGUMENT PRESENT, EXTRACT HIGH-ORDER BITS. SAD (60 /IS IT A NUMBER? JMP NUMARG /YES, GO DECIDE WHAT TO DO WITH IT. /ARGUMENT IS NON-NUMBER, MAKE SURE IT'S EXACTLY THREE CHARACTERS LONG. LAC CWD+3 /PICK UP WHAT SHOULD BE ARRAY TERMINATOR. SMA /ALL SET IF IT REALLY IS A TERMINATOR. JMP TYQUES /NOT THREE CHARACTERS, COMPLAIN. LAW -1 /PACK THE THREE CHARACTERS INTO ONE WORD FOR LATER COMPARE. JMS PK6BT /PK6BT WILL DO IT. CWD /CWD...CWD+2 HOLDS UNPACKED ARGUMENT. ENDSW /THREE SIXBIT CHARS WILL BE PACKED INTO ENDSW. LAC ENDSW /PICK UP THE PACKED PARAMETER. SAD EOTEND /IS IT "EOT"? JMP DMPEOT /YES, SET TERM = 3. SAD EOFEND /NO, IS IT "EOF"? JMP DMPEOF /YES, THEN TERM = 2. SAD BOTEND /LAST CHANCE. IS IT "BOT"? JMP DMPBOT /YES, SET TERM = 1. JMP ILLTRM /UNRECOGNIZED ARGUMENT. GO COMPLAIN. /TABLE OF LEGAL NON-NUMERIC TERMINATOR ARGUMENTS. EOTEND .SIXBT 'EOT' EOFEND .SIXBT 'EOF' BOTEND .SIXBT 'BOT' /COME HERE ON RECOGNIZED PARAMETER TO SET UP DISPATCH-TABLE INDEX. DMPEOT ISZ TERM /FINISH ON LOGICAL EOT, TERM = 3. DMPEOF ISZ TERM /FINISH ON EOF MARKER, TERM = 2. DMPBOT ISZ TERM /FINISH ON LOAD-POINT MARKER, TERM = 1. UPDARG LAC TERM /NUMERIC ARGUMENT, TERM = 0 TAD (EDISPT /FORM POINTER TO APPROPRIATE ENTRY IN DISPATCH TABLE. DAC ENDPTR /AND SAVE IT WHERE CHKTRM CAN GET AT IT. DZM EOTSW /TURN OFF EOT-ENCOUNTERED FOR CHKTRM. JMP* GETARG /THEN EXIT TO CALLER. /DISPATCHERS TO ENTRIES IN SUBROUTINE CHKTRM TO SEE IF OPERATION COMPLETE. EDISPT JMP ENDOFL /TERMINATE ON RECORD-COUNT OVERFLOW. JMP ENDBOT /TERMINATE ON PHYSICAL BOT ENCOUNTERED. JMP ENDEOF /TERMINATE ON EOF MARKER ENCOUNTERED. JMP ENDEOT /TERMINATE ON LOGICAL EOT ENCOUNTERED. ENDPTR TYQUES ENDSW 0 DCOUNT 0 /COME HERE WHEN FIRST CHARACTER OF PARAMETER IS A NUMBERIC TO DECIDE /WHETHER THE ARGUMENT IS OCTAL OR DECIMAL REPRESENTATION. IDEA HERE /IS TO SEE IF FINAL TYPED CHARACTER IS "D" (FOR DECIMAL) OR "K" (FOR /OCTAL), DENOTING LOCAL RADIX SPECIFICATION. IF SO, INTERPRET THE NUMBER /APPROPRIATELY. IF NOT, USE CURRENT GLOBAL RADIX. TERM 0 /INDEX TO DISPATCH TABLE ("EDISPT"). NUMARG LAW -1 /FORM A POINTER TO TAD CWDPTR / THE LAST CHARACTER IN THE NUMBER STRING. DAC NMAPTR /SAVE IT. LAC* NMAPTR /PICK UP THE FINAL CHARACTER. AND (160 /TAKE HIGH-ORDER BITS TO FIND OUT SAD (60 / IF CHARACTER IS A NUMBER. JMP OLDRDX /IT IS, SO USE CURRENT GLOBAL RADIX. LAC* NMAPTR /NON-NUMBER, PICK UP CHARACTER AGAIN. XOR (104 /IS IT "D". SNA!CMA /0="D". JMP INTDEC /SET UP FOR DECIMAL RADIX. SAD (-20 /-20="K" FOR OCTAL RADIX SKP!CLA!CMA /IF OCTAL NEED ALL 7S. JMP TYQUES /UNRECONIZED CHAR. JMP INTOCT /SET UP FOR OCTAL RADIX. OLDRDX LAC RADIX /PICK UP GLOBAL RADIX. SZA JMP NUM001 /GLOBAL IS OCTAL. JMP DECRAD /GLOBAL IS DECIMAL. INTDEC DAC* NMAPTR /STORE A NEW TERMINATOR. JMP DECRAD /SET UP FOR DECIMAL RADIX. INTOCT DAC* NMAPTR /STORE NEW TERMINATOR. NUM001 LAC (SKP SKP DECRAD LAC (ADD BNUM DAC DECMK1 /SET SWITCH FOR DECIMAL OR OCTAL RADIX. JMS GETNUM /GO CONVERT TO BINARY. DAC DCOUNT /STORE BINARY NUMBER. XCT DECRAD /RESTORE TO DECIMAL CONVERTER. XCT DECRAD+1 JMP UPDARG /RETURN TO CALLING ROUTINE ORADIX .SIXBT '@AK' /ASCII "K". DRADIX .SIXBT '@AD' /ASCII"D". WRDPTR=DRVPTR SCOM4=DRADIX /POINTER TO .SCOM+4. /SUBROUTINE SUPRES, REPLACE LEADING ZEROES IN AN UNPACKED /(ONE CHAR PER WORD) ASCII ARRAY. TERMINATES ON CHARACTER-COUNT /OVERFLOW (SEE CALLING SEQUENCE) OR ON THE APPEARANCE OF A TERMINATOR /WORD (BIT 0 = 1) IN THE INPUT ARRAY, WHICHEVER OCCURS FIRST. /CALLING SEQUENCE: / LAW -LENGTH /TWO'S COMPLEMENT COUNT OF CHARS IN STRING. / JMS SUPRES /CALL SUPRES. / 40 /ACTUAL CHARACTER (NOT ADDRESS) TO USE. / ARRAY /13- OR 15-BIT ARRAY BEGINNING. SUPRES 0 /ENGTRY TO THROW AWAY LEADING ZEROES. DAC SUPSIZ /SAVE LENGTH OF INPUT ARRAY. LAC* SUPRES /PICK UP REPLACEMENT CHARACTER. DAC SUPCHR /SAVE IT. ISZ SUPRES /BUMP TO ARRAY ORIGIN. LAC* SUPRES /PICK UP START OF ARRAY. ISZ SUPRES /BUMP TO RETURN. JMS GETBNK /GET EPC BITS. DAC SUPIN1 /SAVE AS CURRENT-CHARACTER POINTER. DAC SUPIN2 /AND FORM A SUPR01 ISZ SUPIN2 / LOOK-AHEAD POINTER. LAC* SUPIN2 /PICK UP CURRENT CHARACTER PLUS ONE. ISZ SUPSIZ /AND SKIP IF THE CURRENT CHAR IS THE LAST ONE. SPA /SKIP IF NEXT CHARACTER IS A DATA CHARACTER. JMP* SUPRES /CURRENT CHAR IS FINAL CHAR, EXIT. LAC* SUPIN1 /NOW GET THIS CHARACTER. SAD (60 /IS IT A ZERO? SKP /YES, REPLACE IT. JMP* SUPRES /NO, ALL DONE. LAC SUPCHR /PICK UP PADDING CHARACTER. DAC* SUPIN1 /AND PUT IT PLACE OF ZERO. ISZ SUPIN1 /BUMP CURRENT-CHARACTER POINTER. JMP SUPR01 /AND GO FOR MORE. /SUBROUTINE CHKTRM, SEE IF REQUESTED OPERATION IS COMPLETE. /DISPATCH THROUGH THE TABLE ENTRY (SET UP BY GETARG) TO THE /APPROPRIATE SECTION. CHECK THERE FOR THE PROPER TERMINATING CONDITION. /CHKTRM IS CALLED EACH TIME A RECORD IS PROCESSED. /CALL: JMS CHKTRM / RETURN IF MORE TO DO. / RETURN IF ALL FINISHED. CHKTRM 0 /ENTRY TO CHECK FOR COMPLETION. SUPCHR=CHKTRM /REPLACEMENT CHARACTER FOR SUPRES. JMP* ENDPTR /DISPATCH TO THE PROCESSOR WANTED. /ENTRY TO CHECK RECORD-COUNT OVERFLOW. ENDOFL ISZ DCOUNT /COUNT RECORDS TREATED SO FAR. JMP* CHKTRM /MORE TO DO, EXIT TO CALL+1. ISZ CHKTRM /COUNT OVERFLOW, BUMP RETURN. JMP* CHKTRM /AND EXIT TO CALL;2. /ENTRY TO CHECK IN RESPONSE TO "BOT". ENDBOT LAC STATUS /PICK UP MAG TAPE STATUS FROM LAST TRANSFER. AND (100000 /EXTRACT BOT STATUS BIT. SZA /SKIP IF BOT NOT ENCOUNTERED. ISZ CHKTRM /LOAD POINT, BUMP RETURN. JMP* CHKTRM /END EXIT. /ENTRY TO CHECK IN RESPONSE TO "EOF". ENDEOF LAC STATUS /PICK UP LATEST MAG TAPE STATUS. AND (010000 /EXTRACT EOF-ENCOUNTERED. SZA /SKIP IF NOT EOF. ISZ CHKTRM /EOF, BUMP RETURN. JMP ENDBOT /CHECK FOR BOT /ENTRY TO CHECK IN RESPONSE TO "EOT". ENDEOT LAC STATUS /GET STATUS. AND (010000 /TAKE EOF-ENCOUNTERED. SZA /NO EOF, SKIP. JMP ENDET1 /LAST RECORD WAS EOF, CHECK THE ONE BEFORE THAT. DZM EOTSW /TURN OFF EOF ENCOUNTERED. JMP* CHKTRM /AND RETURN TO CALL+1. ENDET1 SAD EOTSW /HAVE WE SEEN TWO EOF7S IN A ROW? SKIP IF NOT. ISZ CHKTRM /TWO CONSECUTIVE EOF'S, BUMP TO DONE RETURN. DAC EOTSW /INDICATE AT LEAST ONE EOF SEEN. JMP* CHKTRM /AND RETURN. /SUBROUTINE CHKLST, DETERMINE IF DUMP DEVICE (DAT SLOT 3) IS TTY. /CALLING SEQUENCE: / JMS CHKLST / JMP SAMDEV /DUMP DEVICE IS TTY. / XX /DUMP DEVICE IS NOT TTY. CHKLST 0 LAC* DATM02 AND (77777 DAC M02DEV LAC* DATP03 AND (77777 SAD M02DEV SKP ISZ CHKLST JMP* CHKLST DATP03 .DAT+3 /LISTING DEVICE DATM02 .DAT-2 /SUBROUTINE ECHO, WRITE COMMAND LINE INTO OUTPUT FILE. ECHO 0 JMS CHKLST /IF LISTING DEVICE IS TELEPRINTER, JMP* ECHO / RETURN IMMEDIATELY. LAC ECHOSW SNA WRECHO JMS WRFILE JMP* ECHO /PARAMETER TABLES FOR DUMP FORMATS. /WORD 1: WORDS PER LINE (2'S COMPLEMENT) /WORD 2: JMS DECODE OR NOP /WORD 3: JMS EXPANSION SUBROUTINE PARTBL PARTBL+1 /OCTAL DUMP PARAMATERS... LAW -11 /9 WORDS PER LINE NOPLIT NOP /DON'T DECODE OP CODE. JMS EXPND8 /6-DIGIT EXPANSION. /SYMBOLIC DUMP PARAMETERS... LAW -6 /6 WORDS PER LINE. JMS DECODE /INTERPRET OP CODE. JMS EXPND5 /EXPAND 5 OCTAL DIGITS. /5-7 ASCII DUMP PARAMETERS... NEG12 LAW -12 /12 WORD-PAIRS*** NOP JMS EXPN57 /5-7 ASCII EXPANSION /TRIMMED ASCII DUMP PARAMETERS... LAW -20 /16(10) WORDS PER LINE. NOP JMS EXPND6 /SUBROUTINE DECODE, OUTPUT SYMBOLIC REPRESENTATION OF OP CODE AND /INDIRECTION BIT. ENTER WITH WORD TO BE DECODED IN AC. DECODE 0 AND LAW0 /EXTRACT BITS 0-4. SAD LAW0 /IS IT A LAW INSTRUCTION? JMP LAWCOD /YES, TREAT AS SPECIAL CASE. CLL!RAL /NO, MOVE OP CODE BITS RTL / TO LOW-ORDER RTL / PART OF WORD. DAC DCWRD1 /AND SAVE AS INDEX TO TABLE OF SYMBOLICS. CLA!RAR /NOW RETRIEVE THE INDIRECT BIT FROM LINK. DAC INDIR /AND SAVE THAT FOR LATER. LAC (LAC CODTBL TAD DCWRD1 /INDEX TO APPROPRIATE ENTRY. DAC DCWRD1 /SAVE ACCESS TO ENTRY WANTED. DCSW1 LAW 40 /PUT OUT A BLANK. JMS PUTCHR /.. DCWRD1 0 /LAC CODTBL+OPCODE. WRCODE JMS EXPND6 LAC INDIR SZA!CLA LAW 12 XOR LAW40 JMS PUTCHR JMP* DECODE LAWCOD DZM INDIR LAC LAWENT JMP WRCODE CODTBL .SIXBT 'CALDACJMSDZMLACXORADDTADXCTISZANDSADJMPEAEIOTOPR' LAWENT .SIXBT 'LAW' /SUBROUTINE PUTCHR, PUT CHARACTER IN AC 11-17 IN OUTLIN. PUTCHR 0 AND C177 SNA JMP* PUTCHR DAC* OUTPTR ISZ OUTPTR JMP* PUTCHR /SUBROUTINE EXPND6, PRINT 3 6-BIT CHARACTERS. EXPND6 0 EXP8WD=EXPND6 DAC EXP6WD /SAVE WORD TO BE DUMPED. LAW -3 /COUNT 3 CHARACTERS EACH WORD. DAC EXP6CT /SAVE CHARACTER COUNT. EXP6LP LAC EXP6WD /PICK UP WORD WITH THIS CHAR IN BITS 0-6. RTL /MOVE CHARACTER TO LOW-ORDER PART OF WORD. RTL /.. RTL /.. DAC EXP6WD /SAVE WORD FOR NEXT TIME. RAL /RETRIEVE LAST BIT FROM LINK. AND C77 /THROW AWAY JUNK. SNA /***** FUDGE FOR FILE-NAME EXP6SW NOP /***** PRINTING. DAC PUTCHR AND LAW40 SNA!CLA LAW 100 TAD PUTCHR JMS PUTCHR ISZ EXP6CT JMP EXP6LP JMP* EXPND6 /SUBROUTINE EXPND8, EXPAND A WORD (IN AC) TO 6 OCTAL DIGITS. /CALLING SEQUENCE: / LAC WORD /PICK UP WORD TO BE EXPANDED. / JMS EXPND8 EXPND8 0 EXP6WD=EXPND8 DAC EXP8WD LAW -6 EXP5NT DAC EXP8CT EXP8LP LAC EXP8WD RTL RAL DAC EXP8WD RAL AND (7 TAD (60 JMS PUTCHR ISZ EXP8CT JMP EXP8LP JMP* EXPND8 /EXPND5, EXPAND ADDRESS PORTION OF WORD IN AC. EXPND5 0 EXP8CT=EXPND5 EXP6CT=EXPND5 CLL!RAL RTL DAC EXP8WD LAC EXPND5 DAC EXPND8 LAW -5 JMP EXP5NT /SUBROUTINE EXPN57, EXPAND A 5-7 ASCII WORD PAIR. /CALLING SEQUENCE: / LAC* BUFPTR /PICK UP FIRST WORD OF PAIR. / JMS EXPN57 /ON ENTRY, BUFPTR MUST POINT TO FIRST WORD. EXPN57 0 DAC PWRD2 /SAVE FIRST WORD. ISZ BUFPTR /BUMP POINTER TO SECOND WORD OF PAIR. LAC* BUFPTR /AND GET THAT. DAC PWRD3 /SAVE SECOND WORD, TOO. ISZ TOTWDS /BUMP COUNT OF WORDS CONSIDERED IN THIS RECORD. LAW -5 /SET UP COUNTER DAC PK5CHR / OF FIVE CHARACTERS TO EXTRACT. EXP57L JMS PRAL7 /GET NEXT CHARACTR FROM WORD PAIR. LAC PWRD1 /CHARACTER APPEARS IN PWRD1, RIGHT-ADJUSTED. AND C177 /THROW AWAY JUNK. DAC PWRD1 /SAVE SEVEN-BIT CHARACTER. /CHECK FOR PRINTABILITY OF CHARACTER. LAW -40 /IS CHAR .G. 40? TAD PWRD1 /.. SPA /SKIP IF SO. JMP NOPRNT /IF NOT, PRINT A BLANK. LAW -137 /IS IT .LE. 137? TAD PWRD1 /. SPA!SNA /SKIP IF NOT. JMP PRCHR /UPPER CASE CHARACTER, GO PRINT. SAD ONE /IS CHARACTER .E. 140? JMP NOPRNT /YES, PRINT BLANK IN ITS PLACE. LAW -40 /LOWER CASE CHARACTER, CHANGE TAD PWRD1 / TO UPPER CASE. DAC PWRD1 /.. LAW -132 /IS CHAR NOW .LE. Z? TAD PWRD1 /.. SMA!SZA /SKIP IF PRINTABLE. JMP NOPRNT /133-137, DON'T TRY TO PRINT. PRCHR LAC PWRD1 EXPUT JMS PUTCHR ISZ PK5CHR JMP EXP57L FENCE LAW -1 ISZ COUNT SKP DAC COUNT JMP* EXPN57 NOPRNT LAW 40 JMP EXPUT EXP57P 0 /PUTREC. CALL: / LAW -NWORDS / JMS PUTREC / JMP EOT /RETURN IF PHYSICAL EOT FOUND ON OUTPUT TAPE. PUTREC 0 DAC WRTCT LAC BUFADR DAC WRTADR WRTRAN .TRAN 1,1,0,0,0 WRTADR=WRTRAN+3 WRTCT=WRTRAN+4 .WAIT 1 DAC WRSTAT AND (020600 SZA JMP PTRERR LAC WRSTAT AND EOTMSK SZA JMP* PUTREC ISZ PUTREC JMP* PUTREC PTRERR .MTAPE 1,2 JMP WRTRAN WRSTAT 0 /SUBROUTINE ERCOMT, PUT AN ASCII MESSAGE IN THE DUMP OUTPUT FILE /(IF ONE IS OPEN) AND ON THE TELEPRINTER (IF TTY IS NOT THE DUMP /DEVICE). /CALLING SEQUENCE: / LAW MESSAG /13-BIT ADDRESS OF .ASCII MESSAGE. / JMS ERCOMT /GO OUTPUT MESSAGE. ERCOMT 0 /ENTRY TO WRITE ASCII MESSAGE. JMS GETBNK /MAKE A 15-BIT ADDRESS. DAC ERMS01 /SAVE IT IN CAL SEQUENCE. JMS TYPOUT /THEN GO TYPE THE COMMENT. LAC FILOPN /IS A DUMP FILE OPEN? SZA /SKIP IF NOT. JMS CHKLST /IF SO, IS THE TTY THE DUMP DEVICE? JMP* ERCOMT /YES, EXIT NOW. ERDUMP .WRITE 3,2,0,0 /NO, PUT COMMENT IN DUMP FILE. ERMS01=ERDUMP+2 /MESSAGE ADDRESS IN CAL SEQUENCE. JMP* ERCOMT /RETURN TO CALLER. /SUBROUTINE UNPACK, IOPS ASCII TO ONE CHAR PER WORD. ON RETURN, /IOPS LINE IS UNPACKED IN "TO" ARRAY AS 7-BIT CHARACTERS, ONE PER /WORD, RIGHT-ADJUSTED WITH LEADING ZEROES. INITIAL LINE FEED (IF /ANY) AND TERMINATING CARRIAGE RETURN (OR ALT MODE) ARE DELETED. IN PLACE /OF THE TERMINATING CHARACTER IS INSERTED ITS 1'S COMPLEMENT (I.E., /000015 BECOMES 777762). THE ACCUMULATOR AND REGISTER "TOTCHR" HOLD POSITIVE /TOTAL NUMBER OF DATA CHARACTERS UNPACKED, EXCLUSIVE OF THE TERMINATOR. /NOTA BENE: UNPACK USES AUTOINDEX REGISTERS 3 AND 6 (LOCATIONS 12 AND 15) /AS INPUT AND OUTPUT POINTERS. /CALL: JMS UNPACK /GO TO UNPACK. / FROM /15-BIT ADDRESS OF WORD 0 OF LINE BUFFER HEADER. / TO /15-BIT ADDRESS OF FIRST CHAR OF OUTPUT LINE. UNPACK 0 /ENTRY TO UNPACK. PKFROM=UNPACK /PACK, PK6BT: POINTER TO NEXT CHARACTER IN INPUT ARRAY. LAC* UNPACK /GET ADDRESS OF INPUT LINE. DAC* C12 /SAVE AS INPUT POINTER (IN LOC 12). ISZ* C12 /ADJUST TO POINT TO FIRST DATA PAIR. ISZ UNPACK /BUMP TO SECOND ARGUMENT. LAC* UNPACK /ARG 2 IS ADDRESS OF OUTPUT LINE. TAD FENCE /DECREMENT BY ONE. DAC* C15 /SAVE AS POINTER TO OUTPUT ARRAY (IN LOC 15). ISZ UNPACK /BUMP TO RETURN. DZM TOTCHR /ZERO TOTAL CHARACTERS IN LINE. DZM FSTSW /INDICATE NO DATA ENCOUNTERED YET. /ENTER MAJOR LOOP TO GET NEW WORD PAIR FROM INPUT LINE AND /RESET CHARACTER COUNTER (PK5CHR) TO 5. UNPLP1 LAC* 12 /GET NEXT WORD FROM LINE BUFFER. DAC PWRD2 /SAVE AS FIRST WORD OF PAIR. LAC* 12 /PICK UP NEXT WORD. DAC PWRD3 /SECOND WORD OF NEW CURRENT PAIR. LAW -5 /SET UP TO EXTRACT 5 CHARACTERS FROM THIS PAIR. DAC PK5CHR /.. /ENTER INNER LOOP TO GET NEXT CHARACTER FROM CURRENT WORD PAIR, /STORE IT IN OUTPUT ARRAY, AND CHECK FOR COMPLETION. UNPLP2 JMS PRAL7 /GET NEXT CHAR FROM CURRENT PAIR. AND C177 /TAKE ONLY RIGHTMOST SEVEN BITS. SNA /ACCEPT ONLY IF NON-NULL. JMP UNPB5C /NULL CHARACTER, IGNORE. SAD C12 /LINE FEED? JMP UNPLNF /YES, GO IGNORE ONLY IF FIRST CHARACTER IN LINE. SAD C175 /ALT MODE TYPE TERMINATOR? JMP UNPCR /YES, TREAT JUST LIKE CARRIAGE RETURN. SAD C15 /CARRIAGE RETURN? JMP UNPCR /YES, LINE IS COMPLETE. UNPDAC DAC* 15 /REAL ASCII CHAR, DEPOSIT IN OUTPUT ARRAY. DAC FSTSW /INDICATE SOME DATA ENCOUNTERED. ISZ TOTCHR /BUMP TOTAL DATA CHARACTERS SEEN. LAC TOTCHR /GET TOTAL CHARACTERS SEEN. ADD ONE /WILL WE OVERFLOW NEXT TIME? SAD MAXLEN /SKIP IF NOT. JMP UNPOFL /OTHERWISE, STOP NOW. UNPB5C ISZ PK5CHR /COUNT 5 CHARACTERS FROM CURRENT PAIR. JMP UNPLP2 /NOT FINISHED WITH THIS PAIR, GET NEXT CHARACTER. JMP UNPLP1 /CURRENT PAIR EXHAUSTED, GET NEXT ONE. UNPOFL LAC C15 /TOO MANY CHARS, GET CARRIAGE RETURN. UNPCR CMA /LINE FINISHED, GET TERMINATOR. DAC* 15 /INSERT AS LAST WORD OF OUTPUT LINE. LAC TOTCHR /PICK UP TOTAL DATA CHARACTERS PROCESSED. JMP* UNPACK /RETURN TO CALLER. UNPLNF LAC FSTSW /LINE FEED FOUND. HAVE WE SEEN ANY BEFORE? SNA /SKIP IF NOT. JMP UNPB5C /YES, SO TREAT AS NORMAL DATA CHARACTER. LAC C12 /NO, SET TO ACCEPT LATER ONES. JMP UNPDAC /THEN GO IGNORE THIS ONE. C175 175 C15 15 FSTSW 0 MAXLEN 120 /SUBROUTINE PACK, RIGHT-ADJUSTED 7-BIT CHARACTER ARRAY TO HEADERED /IOPS ASCII. TERMINATES ON NEGATIVE WORD IN INPUT ARRAY. /NOTE: USES AUTOINDEX REGISTER 3 (LOCATION 12) AS POINTER TO /OUTPUT LINE. /CALL: JMS PACK /GO TO PACK. / FROM /15-BIT ADDRESS OF FIRST CHAR OF INPUT ARRAY. / TO /15-BIT ADDRESS OF FIRST WORD OF OUTPUT LINE. PACK 0 /ENTRY TO PACK. LAC* PACK /PICK UP START OF INPUT ARRAY. DAC PKFROM /GIVE TO INPUT POINTER. ISZ PACK /BUMP ENTRY TO ARG 2. LAC* PACK /GET ADDRESS OF LINE BUFFER TO FILL. DAC PLBH /SAVE AS ADDRESS OF WORD 0 OF HEADER. DAC* C12 /AND ALSO IN OUTPUT POINTER. ISZ* C12 /SET LOC 12 TO POINT TO CHECKSUM. DZM* PLBH /SET INITIAL VALUE OF HEADER WORD 0. DZM LSTSW /INDICATE TERMINATOR NOT SEEN YET. ISZ PACK /BUMP TO RETURN. /ENTER MAJOR LOOP TO UPDATE WORD-PAIR COUNT IN LINE BUFFER HEADER /(LOCATION POINTED TO BY "PLBH") FOR WORD-PAIR JUST CONSTRUCTED /(OR FOR HEADER PAIR ON FIRST TIME THROUGH) AND TO RESET CHARACTER /COUNTER (PK5CHR) TO -5. PLOOP1 LAC (1000 /TURN ON BIT 8. ADD* PLBH /ADD IN WORD PAIR COUNT DEVELOPED SO FAR. DAC* PLBH /NEW WORD 0. LAW -5 /SET UP TO PUT 5 CHARACTERS IN THE NEW PAIR. DAC PK5CHR /.. /ENTER INNER LOOP TO GET NEXT CHARACTER FROM INPUT LINE, CHECK FOR /COMPLETION, AND INSERT IN CURRENT PAIR. PLOOP2 LAC* PKFROM /GET NEXT CHARACTER FROM INPUT ARRAY. SPA /TERMINATOR? (NEGATIVE IF SO.) JMP PCLOSE /YES, GO TRY TO CLOSE THE OUTPUT LINE. ISZ PKFROM /NO, BUMP POINTER TO NEXT CHARACTER. PLOOP6 RTR /SHIFT THIS CHARACTER TO BITS 0-6. RTR /.. RTR /.. RTR /.. DAC PWRD3 /ADD TO RIGHT-HAND END OF EMERGING PAIR. PLOOP7 JMS PRAL7 /GO ROTATE THIS CHARACTER INTO THE PAIR. ISZ PK5CHR /COUNT 5 CHARACTERS PER PAIR. JMP PLOOP2 /NOT FINISHED WITH THIS PAIR, GET NEXT CHARACTER. LAC PWRD2 /PAIR IS COMPLETE, BUT STILL OFF BY ONE BIT. CLL!RAL /CLEAR PAIR BIT 35. DAC PWRD2 /PAIR BIT 17 IS NOW IN LINK. LAC PWRD1 /GET FIRST WORD OF PAIR... RAL /...AND MOVE PAIR BIT 17 IN. DAC* 12 /PAIR IN PROPER FORMAT; DEPOSIT WORD 1 IN LINE BUFF. LAC PWRD2 /PICK UP WORD 2. DAC* 12 /STORE IT IN LINE BUFFER ALSO. JMP PLOOP1 /GO REINITIALIZE FOR NEXT PAIR. /COME HERE ON TERMINATOR FOUND IN INPUT ARRAY. PCLOSE SAD LSTSW /HAVE WE BEEN HERE BEFORE? (LSTSW = 0 IF NOT.) JMP PKNULL /YES, GO FILL CURRENT PAIR WITH NULLS. DAC LSTSW /NO, SET LSTSW TO ENABLE BYPASS NEXT TIME THROUGH. CMA /INVERT TERMINATOR. SNA /IS IT NOW A NULL CHARACTER? LAC C15 /IF SO, GET CARRIAGE RETURN. JMP PLOOP6 /GO PUT CARRIAGE RETURN OR ALT MODE AWAY. /COME HERE TO PAD WORD-PAIR WITH NULLS AFTER TERMINATING CHARACTER /HAS BEEN INSERTED. PKNULL LAW -5 /FIRST, SEE IF PAIR IS ALREADY FULL. XOR PK5CHR /.. SZA!CLA!CLL!CML /PAIR IS FULL IF PK5CHR .E. -5. JMP PLOOP6 /PAIR IS NON-FULL, INSERT NULL JUST GENERATED. RTL /FULL, SET IOPS ASCII INDICATOR (AC = 2). ADD* PLBH /INSERT MODE IN HEADER. DAC* PLBH /RESTORE HEADER IN LINE BUFFER AREA. JMP* PACK /ALL DONE, EXIT. /SUBROUTINE PRAL7, ROTATE IOPS ASCII WORD PAIR SEVEN BITS TO THE LEFT. /DURING UNPACKING, THE WORD PAIR BEING TREATED MUST BE STORED IN REGISTERS /PWRD2 AND PWRD3; THE NET EFFECT OF PRAL7 IS TO PLACE "THIS" CHARACTER FROM /THE PAIR IN THE RIGHTMOST SEVEN BITS OF REGISTER PWRD1 AND TO LEAVE THE /"NEXT" CHARACTER IN THE LEFTMOST SEVEN BITS OF REGISTER PWRD2. DURING PACKING, /THE CHARACTER TO BE ADDED MUST BE STORED IN THE LEFTMOST SEVEN BITS OF /REGISTER PWRD3; THE CHARACTER IS ADDED TO THE RIGHT-HAND END OF THE WORD /PAIR BEING DEVELOPED. AFTER FIVE CALLS TO PRAL7, THE 5-CHARACTER PAIR, /SHIFTED ONE BIT TO THE RIGHT, APPEARS IN REGISTERS PWRD1 AND PWRD2. PRAL7 0 LAW -7 /SET UP SEVEN-BIT COUNTER. DAC PK7BTS /.. PRALL7 LAC PWRD3 /ROTATE A SINGLE BIT RAL /FROM PWRD3 TO PWRD1. DAC PWRD3 LAC PWRD2 RAL DAC PWRD2 LAC PWRD1 RAL DAC PWRD1 ISZ PK7BTS /COUNT SEVEN BITS TO GET. JMP PRALL7 /NOT FINISHED, ROTATE OUT ONE MORE BIT. JMP* PRAL7 /ALL DONE, RETURN TO CALLER. PLBH LSTSW PK5CHR PWRD1 PWRD2 PWRD3 PK7BTS PK6WDC PK6TO PK6CT1 C77 77 PKCHR /SUBROUTINE PK6BT, RIGHT-ADJUSTED 7-BIT CHARACTERS TO 3-6 TRIMMED /ASCII, ZERO-FILLED. TERMINATES ON END CODE (BIT 0 = 1) IN INPUT ARRAY /OR WORD COUNT OVERFLOW (COUNT -- 2'S COMPLEMENT -- IN AC AT CALL). /CALL: LAW -MAXWDS /2'S COMPLEMENT WORDS TO FILL. / JMS PK6BT /CALL PK6BT. / FROM /START OF INPUT ARRAY. / TO /START OF OUTPUT ARRAY. PK6BT 0 /ENTRY TO PK6BT. TOTCHR=PK6BT /UNPACK: TOTAL CHARS IN OUTPUT LINE. DAC PK6WDC /SAVE COUNT OF TOTAL WORDS TO FILL. LAC* PK6BT /GET START OF INPUT ARRAY. JMS GETBNK /MAKE IT A 15-BIT ADDRESS. DAC PKFROM /GIVE TO INPUT POINTER. ISZ PK6BT /BUMP TO OUTPUT ADDRESS. LAC* PK6BT /GET START OF OUTPUT ARRAY. JMS GETBNK /MAKE IT 15 BITS LONG ALSO. DAC PK6TO /GIVE TO OUTPUT POINTER. ISZ PK6BT /BUMP TO RETURN. PK6LP1 LAW -3 /THREE CHARS PER WORD. DAC PK6CT1 /SET UP 3-CHARACTER COUNTER. DZM* PK6TO /ZERO NEW OUTPUT WORD. PK6LP2 LAC* PKFROM /GET NEXT CHARACTER FROM INPUT ARRAY. SPA!CLL /IS THIS THE ARRAY TERMINATOR? (NEGATIVE IF SO.)? JMP PK6CLS /YES, GO GENERATE A NULL CHARACTER. AND C77 /NO, EXTRACT RIGHTMOST SIX BITS. DAC PK6CHR /THEN SAVE AS CURRENT CHARACTER. ISZ PKFROM /BUMP INPUT POINTER FOR NEXT TIME. PK6LP3 LAC* PK6TO /GET 3-6 WORD GENERATED SO FAR. RTL /SHIFT IT SIX BITS LEFT TO MAKE ROOM FOR CURRENT CHAR. RTL /.. RTL /.. ADD PK6CHR /THEN INSERT CURRENT CHARACTER. DAC* PK6TO /SAVE NEW 3-6 WORD. ISZ PK6CT1 /COUNT 3 CHARACTERS PACKED IN THIS WORD. JMP PK6LP2 /MORE TO DO, GET NEXT CHARACTER. ISZ PK6TO /ALL DONE WITH THIS WORD, BUMP OUTPUT POINTER. ISZ PK6WDC /COUNT MAXIMUM WORDS IN OUTPUT ARRAY. JMP PK6LP1 /MORE ROOM IN OUTPUT ARRAY, SET UP NEW WORD. PK6RET JMP* PK6BT /OUTPUT ARRAY IS FULL, RETURN TO CALLER. /COME HERE ON TERMINATOR FOUND IN INPUT ARRAY. FILL REMAINDER OF OUTPUT /ARRAY WITH NULL (00) CHARACTERS. PK6CLS DZM PK6CHR /MAKE CURRENT CHAR A NULL. JMP PK6LP3 /AND PUT IT AWAY. NEXT INPUT CHAR WILL BE SAME TERMINATOR PK6CHR 0 TOCHRS 0 /SUBROUTINE MIXUP, CONSTRUCT A LINE OF TEXT CONSISTING OF INTERSPERSED /SEGMENTS OF PACKED 5/7 ASCII LINES AND UNPACKED (ONE CHAR PER WORD) /ASCII ARRAYS. THE LINE SO CONSTRUCTED IS UNPACKED, ON EXIT, IN ARRAY /"OUTLIN" AND IS TERMINATED BY A CARRIAGE RETURN IN ONE'S COMPLEMENT /FORM (777762). THE SAME LINE IS PROPERLY PACKED IN TYLINE AND /IS READY TO WRITE IN IOPS ASCII MODE. /CALLING SEQUENCE: / JMS MIXUP /GO TO MIXUP. /FOLLOWED BY AS MANY (13- OR 15-BIT) ADDRESSES AS DESIRED IN THE /FOLLOWING FORMAT: /IF BIT 0 IS A 0 -- / THE ADDRESS POINTS TO THE FIRST CHARACTER OF AN UNPACKED ARRAY. /IF BIT 0 IS A 1 -- / THE ADDRESS POINTS TO HEADER WORD 0 OF AN ASCII LINE. /THE ARGUMENT LIST IS TERMINATED BY A WORD IN WHICH ANY BIT EXCEPT 0 /IS SET TO 1. FOR EXAMPLE: / JMS MIXUP / XCT DECNUM /UNPACKED ARRAY. / CAL TOTFLS /ASCII LINE. / JMS PRINT /TERMINATOR; CONTROL RETURNS HERE. MIXUP 0 /ENTRY TO COMBINE TEXT STRINGS. LAC OUTADR /PICK UP ADDRESS OF OUTPUT AREA DAC OUTPTR /AND SAVE IN OUTPUT POINTER. MIXLP1 LAC* MIXUP /PICK UP NEXT ARGUMENT. AND (300000 /TAKE BITS 1 AND 2. SZA /IF THESE ARE BOTH ZERO, THIS IS AN ARGUMENT. JMP MIXDON /IF EITHER ONE IS ON, THIS IS THE ARGUMENT-STRING TERMINATOR. LAC* MIXUP JMS GETBNK /EXPAND ADDRESS TO 15 BITS. DAC MIXIN /SAVE AS INPUT POINTER. LAC* MIXUP /GET PARAMETER AGAIN. ISZ MIXUP / AND BUMP TO NEXT ARGUMENT IN LIST. SPA /SKIP IF TEXT IS UNPACKED. JMP MIXASC /ASCII LINE, GO PROCESS IT. MIXLP2 LAC* MIXIN /PICK UP A CHARACTER. SMA /SKIP IF A TERMINATOR. JMP MIXDTA /DATA CHARACTER, GO PUT AWAY. DAC* OUTPTR /PUT TERMINATOR IN OUTPUT STRING. JMP MIXLP1 /ALL DONE WITH THIS STRING, TREAT NEXT ONE. MIXDTA JMS PUTCHR /GO PUT CHARACTER AWAY. ISZ MIXIN /BUMP INPUT POINTER TO NEXT CHARACTER. JMP MIXLP2 /AND PROCESS NEXT ONE. MIXASC JMS UNPACK /UNPACK THE ASCII LINE. MIXIN 0 /FROM THE ADDRESS IN ARGUMENT LIST. OUTPTR 0 /TO THE CURRENT POSITION IN OUTLIN. LAC* C15 /NOW TAKE FINAL OUTPUT POINTER FROM UNPACK. DAC OUTPTR /THAT WILL BE OUR NEW OUTPUT POINTER. JMP MIXLP1 /ALL DONE, GET NEXT ARGUMENT. MIXDON 777762 /TEXT ALL FINISHED, GET CARRIAGE RETURN. DAC* OUTPTR /AND PUT IT AT TEXT END. JMS PACK /NOW PACK UP THE WHOLE THING. OUTLIN /ARRAY IS IN OUTLIN. TYLINE /IT WILL BE PACKED INTO TYLINE. JMP* MIXUP /THEN RETURN TO CALLER. /SUBROUTINE WRFILE, DOUBLE-BUFFERED WRITE-OUTPUT-FILE. /CALL: JMS WRFILE / RETURN WRFILE 0 LAC QUIT SNA JMP RECOUP LAW -DOS /(RCHM-011) CHECK FOR FILE STRUCTURED DUMP DEVICE. TAD P03DEV SPA JMP .+4 LAC FILOPN SNA JMP NOFILE LAC WRPAK2 /EXCHANGE BUFFER ADDRESSES. GET BUFFER USED LAST. DAC WRTEMP /SAVE THAT ADDRESS TEMPORARILY. LAC WRALTB /GET START OF ALTERNATE BUFFER. DAC WRPAK2 /USE THAT BUFFER FOR PACKING THIS LINE. DAC WRCAL2 /WRITE FROM THAT BUFFER ALSO. LAC WRTEMP /NOW GET THE FIRST BUFFER AGAIN. DAC WRALTB /AND SAVE AS ALT BUFFER FOR NEXT TIME. JMS PACK /GO PACK THE OUTPUT LINE. OUTLIN /LINE TO BE PACKED IS ALWAYS IN OUTLIN. WRPAK2 WRBUF2 /MODIFIED EACH TIME TO POINT TO "CURRENT" BUFFER. OUTCAL .WRITE 3,2,0,0 WRCAL2=OUTCAL+2 JMP* WRFILE /NO WAIT REQUIRED AFTER WRITING. WRALTB WRBUF1 /MODIFIED EACH TIME TO POINT TO "OTHER" BUFFER. WRTEMP 0 /SUBROUTINE GETREC, READ NEXT RECORD FROM INPUT TAPE. /CALLING SEQUENCE: / JMS GETREC / JMP EOF /RETURN IF EOF ENCOUNTERED. / JMP EOT /RETURN IF PHYSICAL EOT FOUND. / JMP OFLO /RETURN IF RECORD TOO LONG. / XX /RETURN IF ALL OK WITH RECORD LENGTH IN AC (POSITIVE) GETREC 0 LAW -100 /SET UP MAX ERROR-REREAD COUNTER. DAC GTERCT /.. TREAD .TRAN 1,0,0,0,0 BUFADR=TREAD+3 MAXWDS=TREAD+4 .WAIT 1 DAC STATUS /CHECK FOR EOF. AND EOFMSK SZA JMP EOFRTN /CHECK FOR EOT. LAC STATUS AND EOTMSK SZA!CLA!CMA JMP EOTRTN /CHECK FOR EOF AGAIN (ONLY ONE FRAME TRANSFERRED). TAD* (32 / MTF 011 WRITES REAL 9 TRACK EOF INSTEAD OF 7 TRACK. / HARDWARE ONLY DETECTS IT AS A SHORT RECORD SAD MAXWDS JMP SHTREC / CALL IT EOF. SET EOF BIT IN STATUS WORD /CHECK FOR READ ERRORS. LAC STATUS AND (020600 SZA JMP ERRTN LAC STATUS AND RLIMSK SZA!CLA!CMA JMP CHKRLI GETSIZ TAD MAXWDS CMA TAD* (32 DAC COUNT ISZ GETREC OFLRTN ISZ GETREC EOTRTN ISZ GETREC EOFRTN JMP* GETREC /CHECK FOR RECORD TOO LONG. / ONE WORD RECORD IS EOF. SET STATUS BIT SHTREC LAC STATUS TAD EOFMSK /EOF BIT DAC STATUS JMP* GETREC /..AND TAKE EOF EXIT / CHKRLI LAC* (32 SNA!CLA!CMA JMP OFLRTN JMP GETSIZ ERRTN .MTAPE 1,2 ISZ GTERCT JMP TREAD LAW PRMERR JMS TYPOUT JMP RDLIN GTERCT 0 COUNT 0 STATUS 0 EOFMSK 010000 EOTMSK 004000 RLIMSK 001000 /SUBROUTINE YESNO, TYPE A RIGHT ANGLE-BRACKET AND WAIT FOR USER'S /AFFIRMATIVE OR NEGATIVE RESPONSE. IF THE USER TYPES "YES", "Y", OR /JUST A CARRIAGE RETURN, THEN RESPONSE IS TAKEN TO BE AFFIRMATIVE AND /CONTROL GOES TO CALL+2. IF THE USER TYPES ANYTHING ELSE, THEN /RESPONSE IS INTERPRETED AS NEGATIVE AND RETURN IS MADE TO /CALL+1. /CALLING SEQUENCE: /CALL: JMS YESNO /CALL+1: JMP NO /ANSWER WAS NOT YES. /CALL+2: JMP YES /ANSWER WAS YES, Y, OR CR. YESNO 0 /ENTRY TO INTERPRET YES OR NO RESPONSE. LAW 76 /PICK UP A RIGHT ANGLE-BRACKET JMS TYONCH / AND GO TYPE IT OUT. LAW TYLINE /PICK UP ADDRESS OF INPUT-LINE AREA. JMS TYPEIN /AND ACCEPT (AND WAIT FOR) A LINE OF INPUT. LAC TYLINE+2 AND (774000 SAD (064000 SKP SAD (544000 YESRTN ISZ YESNO /IF SO, THAT MEANS YES. JMP* YESNO /TAKE APPROPRIATE RETURN. /BTOD. CALL: / LAC NUM /NUMBER TO BE CONVERTED. / JMS BTOD /CALL BTOD / .DSA LOW-ORDER RESULT / DAC HIORD /RETURN WITH ADDRESS OF LEFT DIGIT. BTOD 0 /ENTRY TO BTOD. DAC B2DNUM /SAVE NUMBER TO CONVERT. LAW -6 /6-DIGIT ARRAY. DAC B2DQUO /COUNT OF WORDS TO ZERO. TAD* BTOD /PICK UP LOW-ORDER ADDRESS. DAC B2DPTR ISZ BTOD /BUMP TO RETURN. B2DLP1 ISZ B2DPTR /BUMP POINTER TO NEXT LOCATION IN ARRAY. LAC (60 /ASCII ZERO DAC* B2DPTR /TO ARRAY. ISZ B2DQUO /COUNT SIX WORDS. JMP B2DLP1 /MORE TO DO. /COME HERE WITH OUTPUT ARRAY FILLED WITH ASCII ZEROES. B2DLP2 DZM B2DQUO /ZERO QUOTIENT REGISTER. B2DLP3 LAC B2DNUM /PICK UP DIVIDEND. TAD NEG12 /REDUCE BY 10. DAC B2DNUM /SAVE PARTIAL RESULT. SPA /SKIP IF MORE TO DO. JMP B2DPRO /ALL FINISHED. ISZ B2DQUO /BUMP QUOTIENT. JMP B2DLP3 /TRY AGAIN. /COME HERE ON DIVIDE COMPLETE. B2DPRO TAD (72 /FORM REMAINDER IN ASCII. DAC* B2DPTR /INSERT IN ARRAY. LAC B2DQUO /GET QUOTIENT. DAC B2DNUM /NEW DIVIDEND. SZA!CLA!CMA /SKIP IF RESULT = 0. JMP B2DMOR /MORE TO DO. LAC B2DPTR /ALL DONE, GET LEFT DIGIT. JMP* BTOD /AND RETURN TO CALLER. B2DMOR TAD B2DPTR /REDUCE OUTPUT POINTER. DAC B2DPTR /BY ONE. JMP B2DLP2 /THEN GO FOR MORE. B2DQUO 0 B2DNUM 0 DECNUM .BLOCK 7 .TITLE BINARY TO IMAGE ASCII CONVERSION. /(RCHM-007) / CALL TO THIS CONVERSION ROUTINE IS OF THE FORM: / / LAC NUMBER /NUMBER TO BE CONVERTED / JMS BTOA / BUFFER /6 WORD OUTPUT BUFFER / BTOA XX /(RCHM-007) BINARY TO DECIMAL CONVERSION ENTRY. DAC BTOATP /(RCHM-007) SAVE NUMBER FOR CONVERSION LATER. LAC* BTOA /(RCHM-007) FETCH OUTPUT BUFFER ADDRESS. IDX BTOA /(RCHM-007) BUMP RETURN ADDRESS. DAC BTOABP /(RCHM-007) SAVE OUTPUT BUFFER POINTER. LAW -6 /(RCHM-007) SET UP TO CONVERT 6 OCTAL DIGITS. DAC BTOALC /(RCHM-007) LOOP COUNTER. LAC BTOATP /(RCHM-007) FETCH NUMBER TO BE CONVERTED. RAL /(RCHM-007) ROTATE ONCE TO ELIMINATE THE LINK. / THIS IS THE CONVERSION LOOP. BT0010 RAL; RTL /(RCHM-007) ROTATE IN NEXT OCTAL DIGIT FOR CONVERSION. DAC BTOATP /(RCHM-007) SAVE FOR NEXT DIGIT. AND (7 /(RCHM-007) EXTRACT OCTAL DIGIT. XOR (60 /(RCHM-007) OR IN DIGIT MASK DAC* BTOABP /(RCHM-007) STORE DIGIT IN OUTPUT BUFFER. IDX BTOABP /(RCHM-007) BUMP OUTPUT POINTER TO NEXT WORD. LAC BTOATP /(RCHM-007) FETCH WORD FOR NEXT OCTAL DIGIT. ISZ BTOALC /(RCHM-007) 6 DIGITS YET? JMP BT0010 /(RCHM-007) NOT YET. JMP* BTOA /(RCHM-007) ALL DONE. / VARIABLES NEEDED FOR CONVERSION. BTOATP 0 /(RCHM-007) TEMPORARY STORAGE FOR NUMBER BEING CONVERTED. BTOABP 0 /(RCHM-007) POINTER TO CURRENT OUTPUT BUFFER WORD. BTOALC -6 /(RCHM-007) DIGIT COUNTER. CONVERT 6 DIGITS AND QUIT. .TITLE TELETYPE I/O ROUTINES. /CLOSED SUBROUTINES FOR TYPEWRITER INPUT AND OUTPUT. /SUBROUTINE TYPOUT, SET UP AND ISSUE CAL FOR IOPS ASCII OUTPUT MESSAGE. /CALL: LAW OUTMSG /START ADDRESS (HEADER WORD 0) OF MESSAGE TO PRINT. / JMS TYPOUT /GO TO TYPOUT. TYPOUT 0 /ENTRY TO TYPOUT. JMS GETBNK /GET SOME EPC BITS. DAC TTOUT /INSERT 15-BIT ADDRESS IN CAL SEQUENCE. TTOCAL /IOPS MODE WRITE TO TTY. TAB 11 /.. TTOUT 0 /START OF LINE BUFFER. SRCNAM .SIXBT 'SRC' /WORD COUNT -- IGNORED BY TELETYPE HANDLER. TTOCAL /WAIT FOR PRINTING TO FINISH. C12 12 /.. JMP* TYPOUT /RETURN TO CALLER. /SUBROUTINE TYPEIN, SET UP AND ISSUE CAL FOR IOPS ASCII INPUT LINE. /CALL: LAW INBUFF /WHERE TO PUT INCOMING LINE. / JMS TYPEIN /GO TO TTY READER. TYPEIN 0 /ENTRY TO TYPEIN. JMS GETBNK /INSERT EXTENDED-MEMORY BITS. DAC TTIN /GIVE TRUE (15-BIT) ADDRESS TO CAL SEQUENCE. TTICAL /ISSUE CAL. 10 /READ. TTIN 0 /ADDRESS OF LINE BUFFER. -BUFLEN /DON'T OVERFLOW BUFFER. TTICAL /WAIT FOR USER TO FINISH. 12 /.. JMP* TYPEIN /RETURN TO CALLER. SETNAM 0 DAC ERNAME LAW 40 /***** DAC EXP6SW /***** LAC* ERNAME JMS EXPND6 ISZ ERNAME LAC* ERNAME JMS EXPND6 LAW 40 JMS PUTCHR ISZ ERNAME LAC* ERNAME JMS EXPND6 LAW -1 DAC* OUTPTR LAC NOPLIT /***** DAC EXP6SW /***** JMP* SETNAM ERNAME ERWORD TYDEV 0 /NAME TO TTY(0) OR DAT 3(NON-0) TYPTR2 0 /ADDRESS OF OUTPUT ARRAY. /SUBROUTINE TYONCH, OUTPUT SINGLE CHARACTER IN AC. /NO WAIT REQUIRED BEFORE STORING C(AC) IN SINGCH. /CALL: LAW CHAR /CHARACTER TO BE TYPED IN AC(11-17). / JMS TYONCH /GO TO TYONCH. TYONCH 0 /ENTRY TO TYONCH. DAC SINGCH /STORE CHAR TO TYPE IN IMAGE ASCII LINE BUFFER. TTOCAL+1000 /IMAGE MODE WRITE TO TTY. 11 /.. ADR000 CHRMS /ADDRESS OF OUTPUT MESSAGE. CHRCT 0 /WORD COUNT -- IGNORED BY TELETYPE HANDLER. JMP* TYONCH /RETURN TO CALLER. CHRMS 002003 /HEADER WORD 0: 2 PAIRS, IMAGE ASCII. C3000 3000 /CHECKSUM -- IGNORED BY TELETYPE HANDLER. SINGCH 0 /CHARACTER TO BE TYPED IN BITS 11-17. C177 177 /RUBOUT WILL TURN OFF TYPING. /SUBROUTINE TYPRTN, PRODUCE CARRIAGE-RETURN AND LINE-FEED ON TELETYPE. /CALL: JMS TYPRTN TYPRTN 0 /ENTRY TO TYPRTN. OCTNUM=TYPRTN /GETOCT: RESULTS REGISTER. TTOCAL /OUTPUT CAL TO TELETYPE HANDLER. C6 6 /.CLOSE WILL GENERATE CR/LF. JMP* TYPRTN /RETURN TO CALLER. .EJECT /SUBROUTINE GETBNK, ADD EXTENDED MEMORY BITS REFERENCING CURRENT /BANK OR PAGE TO 13 OR 12 BIT ADDRESS IN AC. /CALL: LAW ADDR /GET ADDRESS TO BE MODIFIED. / JMS GETBNK /CALL GETBNK. GETBNK 0 /ENTRY TO GETBNK. CWCHRC=GETBNK /GETCOM: MAXIMUM CHARACTERS POSSIBLE IN LEGAL COMMAND WORD. AND MSKADR /EXTRACT ADDRESS FROM AC.(MSKADR=17777 OR 7777 DAC GBADR /SAVE TEMPORARILY. LAC GETBNK /GET ENTRY. AND MSKEPC /EXTRACT EPC BITS.(MSKEPC=60000 OR 70000 XOR GBADR /NOW RETRIEVE ADDRESS. JMP* GETBNK /EXIT WITH 15-BIT ADDRESS IN AC. GBADR 0 MSKADR 17777 MSKEPC 60000 /SUBROUTINE GETCOM, EXTRACT CONTROL WORD FROM TYPED INPUT LINE. /IGNORES LEADING BLANKS IN STRING AND TERMINATES ON FIRST FOLLOWING /BLANK OR END-OF-LINE. IF STRING BEING EXTRACTED EXCEEDS SEVEN CHARACTERS /IN LENGTH, THE RIGHTMOST OVERFLOW CHARACTERS ARE THROWN AWAY. TOTAL /CHARACTERS IN STRING EXTRACTED IS RETURNED TO THE CALLER IN THE AC. GETCOM 0 /ENTRY TO GETCOM. NPAIRS=GETCOM /PUTLIN: TEMPORARY STORAGE. LAC CWDLIT /POINTER TO START OF CONTROL-WORD ARRAY. DAC CWDPTR /SAVE AS CURRENT-CHARACTER POINTER. LAW -12 /LENGTH OF CONTROL-WORD ARRAY (CWD). DAC CWCHRC /SAVE AS MAXIMUM-CHARACTERS COUNTER. DZM NCHARS /ZERO TOTAL CHARACTERS IN CONTROL-WORD STRING. CLL!CML /INDICATE NO CHARACTERS ENCOUNTERED YET. GTNXT JMS NXTCHR /GET NEXT CHARACTER FROM INPUT LINE. JMP GTCLOS /NO MORE CHARACTERS, CLOSE OUT ARRAY. SAD BLANK /SUCCESS. IS CHARACTER A BLANK? JMP BLKFND /YES, MAKE SURE SOME DATA PRECEDED IT. CLL SAD COMMA JMP BLKFND ISZ CWCHRC /BUMP MAXIMUM-CHARACTERS-ALLOWED. JMP GTCPUT /NO OVERFLOW YET, PUT CHARACTER AWAY. CLC /SEVEN CHARACTERS INSERTED, DON'T ALLOW ANY MORE. DAC CWCHRC /RESET CWCHRC TO -1. JMP GTNXT /THEN GO LOOK FOR BLANK OR TERMINATOR. /COME HERE TO INSERT DATA CHARACTER IN CWD ARRAY. GTCPUT DAC* CWDPTR /PUT CHARACTER AWAY. ISZ CWDPTR /BUMP POINTER FOR NEXT TIME. ISZ NCHARS /AND BUMP CHARACTERS PROCESSED. JMP GTNXT /THEN GO FOR NEXT CHARACTER. /COME HERE ON BLANK FOUND IN INPUT LINE. BLKFND SZL!CLA!CMA /SKIP IF THIS S NOT A LEADING BLANK. JMP GTNXT /LEADING BLANK, IGNORE IT. GTCLOS DAC* CWDPTR /NOT LEADING BLANK, THEN TERMINATE STRING (AC = -1 NOW). LAC NCHARS /PICK UP TOTAL CHARACTERS IN STRING. JMP* GETCOM /AND RETURN TO CALLER. CWDPTR 0 CWD .BLOCK 12 /ROOM FOR LONGEST LEGAL CONTROL WORD AND TERMINATOR. /SUBROUTINE NXTCHR, RETURN NEXT 7-BIT CHARACTER FROM UNPACKED INPUT /ARRAY. NXTPTR MUST BE SET TO BEGINNING OF ARRAY BEFORE FIRST CALL. /CALL: JMS NXTCHR /GO TO NXTCHR. / JMP DONE /RETURN HERE IF END-OF-LINE ENCOUNTERED. / DAC CHAR /RETURN HERE WITH CHARACTER IN AC. NXTCHR 0 /ENTRY TO NXTCHR. TNUM=NXTCHR /GETNUM: TEMPORARY STORAGE. LAC* NXTPTR /GET NEXT CHARACTER. SPA /TERMINATOR? JMP* NXTCHR /YES, RETURN IMMEDIATELY. ISZ NXTPTR /OTHERWISE BUMP POINTER FOR NEXT TIME. ISZ NXTCHR /AND BUMP RETURN ADDRESS. JMP* NXTCHR /THEN RETURN TO CALLER WITH CHARACTER IN AC 11-17. BLANK 40 COMMA 54 /SUBROUTINE GETNUM, RETURN BINARY VALUE IN AC OF THE DECIMAL /ARGUMENT IN THE CONTROL WORD STRING. NUMBER IS RETURNED IN NEGATIVE (2'S /COMPLEMENT) FORM. IF NO PARAMETER IS PRESENT, AC = 777777. THE /APPEARANCE OF ANY NON-NUMERIC IN THE PARAMETER STRING CAUSES /TRANSFER OF CONTROL TO ILLCWD AND SUBSEQUENT DISREGARD OF THE /ENTIRE COMMAND. GETNUM 0 /ENTRY TO GETNUM. LAC CWDLIT /SET DIGIT POINTER TO DAC NUMPTR /BEGINNING OF CONTROL-WORD STRING. DZM BNUM /SET INITIAL RESULT TO ZERO. GTNLP LAC* NUMPTR /ENTER MAIN LOOP, GET NEXT DIGIT FROM INPUT STREAM. SPA /TERMINATOR CHARACTER? JMP GTNRTN /YES, GO TO RETURN. AND (17 /NO, MASK OFF NUMERICS. DAC TNUM /SAVE NUMERICS. XOR* NUMPTR /ZERO NUMERICS, REINSERT ZONE BITS. XOR (60 /THEN ZERO ZONE BITS. THIS ONLY SEEMS TEDIOUS. SZA /BITS 2 AND 3 ON, BIT 1 OFF: NUMBER PRESENT. BADARG JMP TYQUES /NON-NUMBER OTHERWISE. GO COMMENT. LAC BNUM /GET VALUE COMPUTED SO FAR, THEN MULTIPLY BY 10. CLL!RAL /FORM BNUM * 2. RTL /BNUM * 8. DECMK1 ADD BNUM /BNUM * 9. ADD BNUM /BNUM * 10. ADD TNUM /BNUM PLUS CURRENT DIGIT. DAC BNUM /NEW VALUE. ISZ NUMPTR /BUMP POINTER TO NEXT DIGIT. JMP GTNLP /LOOP TILL DONE. GTNRTN LAC BNUM /ALL FINISHED, GET FINAL VALUE. SZA!CMA /IF BNUM .E. 0, BNUM = 1. TAD ONE /IF BNUM .G. 0, FORM 2'S COMPLEMENT. JMP* GETNUM /RETURN TO CALLER WITH RESULT IN AC. BNUM 0 NUMPTR 0 /SUBROUTINE TWOS, FORM TWO'S COMPLEMENT OF NUMBER IN THE AC. TWOS 0 TAD FENCE /FENCE = 777777. CMA JMP* TWOS /SUBROUTINE FXUNIT, MAKE UNIT NUMBER LAST REFERENCED (IN VARIABLE /"UNIT") A PRINTABLE ASCII CHARACTER AND PUT IT IN IMAGE ASCII BUFFER. FXUNIT 0 LAC UNIT /PICK UP UNIT NUMBER. RTL /MOVE IT TO BITS 15-17. RTL /.. AND (7 /THROW AWAY JUNK. TAD (60 /INSERT ZONE BITS. DAC PRUNIT /AND SAVE ASCII UNIT NUMBER. JMP* FXUNIT /THEN EXIT TO CALLER. PRUNIT 0 56 777762 /MESSAGES OUT. .IFUND ADSS /(RCHM-011) SHOULD WE GENERATE DOS HELLO MESSAGE? BEGMES ENDBGM-.*400+2 NXTPTR 0 .SYSID < .ASCII 'MTDUMP >,<000'<15>> /(RCHM-114) .ENDC /(RCHM-011) .IFDEF ADSS /(RCHM-011) SHOULD WE GENERATE ADSS HELLO MESSAGE? BEGMES ENDBGM-.*400+2 /(RCHM-011) HWP FOR ADSS HELLO MESSAGE. NXTPTR 0 /(RCHM-011) .ASCII 'MTDUMP V5B000'<15> /(RCHM-012) BEGIN USING DOS HELLO FORMAT. .ENDC /(RCHM-011) ENDBGM=. BFSMES ENDBFS-.*400+2 EOTSW 0 .ASCII 'BUFSIZ: '<175> ENDBFS=. RBRACK 002002 0 .ASCII '>'<175> QUESMK 002002 0 .ASCII '?'<15> OFLMES ENDOFM-.*400+2 UNIT1 0 /INPUT UNIT FOR COPY REQUEST. .ASCII '*LONG INPUT RECORD.'<15> ENDOFM=. EOTMES ENDETM-.*400+2 UNIT2 0 /OUTPUT UNIT FOR COPY REQUEST. .ASCII '*PHYSICAL EOT'<175> ENDETM=. EOFMES ENDEFM-.*400+2 M02DEV 0 .ASCII '*END OF FILE'<175> ENDEFM=. FMTERR ENDFMT-.*400+2 YES .SIXBT 'YES' .ASCII '*DIRECTORY FORMAT ERROR.'<15> ENDFMT=. DIRMES ENDDRM-.*400+2 DEFNAM .SIXBT 'LST' .ASCII 'DIRECTORY LISTING, UNIT '<175> ENDDRM=. TFILMS ENDTFM-.*400+2 0 0 0 .ASCII ' TOTAL FILES.'<12><15> ENDTFM=. AFILMS ENDAFM-.*400+2 FILNAM 0 PRSW 0 /SWITCHES FOR PARITY AND DNSW 0 / DENSITY SETTINGS GIVEN IN FORMAT REQUEST. .ASCII ' ACTIVE FILES.'<15> ENDAFM=. FNDMES ENDFDM-.*400+2 Y .SIXBT 'Y@@' /SINGLE-CHARACTER AFFIRMATIVE RESPONSE. .ASCII 'FOUND ON DUMP DEVICE: '<175> ENDFDM=. DLQUES ENDDLQ-.*400+2 INDIR 0 DBITS=INDIR /DENSITY INDICATOR FOR FORMAT REQUEST. .ASCII 'DO YOU WISH TO DELETE IT?'<15> ENDDLQ=. PRMERR ENDPRM-.*400+2 PARITY 0 /PARITY FOR FORMAT REQUEST. .ASCII 'PERMANENT READ ERROR ENCOUNTERED'<15> ENDPRM=. BOTMES ENDBOM-.*400+2 DCWORD 0 PRCSW=DCWORD DNSITY=DCWORD /DENSITY (IN BITS 7-8) FOR FORMAT .MTAPE. .ASCII '*BOT'<175> ENDBOM=. ENCOUN 0 DECPNT DECNUM .ASCII ' ENCOUNTERED, UNIT '<175> /BUFFERS... WRBUF1 .BLOCK 46 WRBUF2 .BLOCK 46 TYLINE .BLOCK 46 OUTLIN .BLOCK 120 .END INLIST /(RCHM-010)