ARK 14 .IOERR006 .PCK@@002 .SIXPK001 ARCHIV002 ARK@@@JOB DEARCH007 DRK@@@JOB GNAMES006 NOFPP@PRM ORDER@007 SAVE@@011 TF1@@@SRC TF2@@@SRC UN.PCK002 [\]. .IOERR006 .TITLE .IOERR / / 1 AUG 78 (006; PDH) MUST USE SIGNED SHIFT / 1 AUG 78 (005; PDH) REVAMP TO USE '.PCK' AND TO ANNOUNCE 6-DIGIT / VALUE WHEN EV .GT. 777 / 25 OCT 77 (004; PDH) CHANGE FROM 'MCR=3' TO 'TTY=4' FOR MULTIACCESS / 14 JUL 77 (003; PDH) ANNOUNCE CALLING ADDRESS ALSO / 21 APR 77 - PAUL HENDERSON / / THIS ROUTINE, CALLABLE ONLY FROM ASSEMBLY LANGUAGE PROGRAMS, IS / USED TO OUTPUT THE NAME OF THE TASK AND THE OCTAL VALUE OF AN / I/O ERROR, AND THE ADDRESS FROM WHICH IT IS CALLED. THIS IS A / FATAL ERROR ANNOUNCEMENT, AS THE ROUTINE EXITS AFTER THE ERROR / ANNOUNCEMENT. / / CALLING SEQUENCE: / / LAC EV / JMS* .IOERR / NECESSARY TO ESTABLISH CALLING ADDRESS / ECLA=641000 / EAE CLEAR AC INSTRUCTION .DEC TTY=4 / LUN ON WHICH ERROR MESSAGE IS ISSUED .OCT / .GLOBL .IOERR .GLOBL PCK.IN,.PCK /(005) / .IOERR NOP DAC VALUE / SAVE BAD EVENT VARIABLE /(005) CAL TSKNAM / GET NAME OF CALLING TASK /(005) LAW -6 /(005) DAC COUNT / ASSUME NON-STANDARD VALUE /(005) LAC (ERRB /(005) JMS* PCK.IN / SET UP PACKING ROUTINE /(005) LAC VALUE / RETRIEVE EVENT VARIABLE /(005) SMA!TCA / PROBABLY NEGATIVE ON ENTRY, TCA / BUT MAY NOT BE. MAKE POSITIVE. CLQ!LRSS 11 / SHIFT BAD EV TO UPPER HALF OF CLEARED MQ /(006) SZA /(005) JMP STRANGE / EV .GT. 777 - STRANGE THINGS /(005) LAW -3 / NORMALLY, BAD EV'S ARE 3 DIGITS /(005) DAC COUNT /(005) LACQ / GET 3-DIGIT VALUE FROM MQ /(005) DAC VALUE / AND PLACE IT IN CORRECT PLACE /(005) .EJECT STRANGE JMS OCT2AS / CONVERT OCTAL 'VALUE' TO ASCII /(005) LAW 40 JMS* .PCK / FOLLOW EV WITH SPACE /(005) LAC .IOERR / GET CALLING ADDRESS SAD (NOP / IF ENTERED BY 'JMS', JMP ENDADR / CALLING ADDRESS IS UNAVAILABLE /(005) ALS 3 /(005) DAC VALUE / SAVE 15-BIT ADDRESS /(005) LAW -5 /(005) DAC COUNT / 5 DIGITS /(005) JMS OCT2AS / PACK THEM UP /(005) ENDADR LAW 15 / FINISH WITH CARRIAGE RETURN /(005) JMS* .PCK /(005) .EJECT / WE HAVE NOW PACKED UP THE EVENT VARIABLE AND CALLING ADDRESS. GET / THE TASK NAME AND PREPARE IT FOR OUTPUT. LAC (TASKNM /(005) JMS* PCK.IN / SET UP PACKING ROUTINE AGAIN /(005) LAC TSKNAM+2 /(005) LMQ / PUT 1ST CHARACTER IN MQ /(005) JMS SIXTO7 / CONVERT TO 7-BITS AND STORE /(005) LAC TSKNAM+2 /(005) LRS 14 / 2ND CHARACTER /(005) JMS SIXTO7 /(005) LAC TSKNAM+2 /(005) LRS 6 / 3RD CHARACTER /(005) JMS SIXTO7 /(005) LAC TSKNAM+3 /(005) LMQ / 4TH CHARACTER /(005) JMS SIXTO7 /(005) LAC TSKNAM+3 /(005) LRS 14 / 5TH CHARACTER /(005) JMS SIXTO7 /(005) LAC TSKNAM+3 /(005) LRS 6 / 6TH CHARACTER /(005) JMS SIXTO7 /(005) / MESSAGE BUFFER HAS BEEN PREPARED. ANNOUNCE IT ON TTY. ENDNAME CAL WRERR / ANNOUNCE ERROR /(005) CAL WAITFR / WAIT FOR IT CAL (10 / THEN EXIT .EJECT / SUBROUTINE TO CONVERT 'COUNT' DIGITS FROM 'VALUE' TO ASCII AND / PACK THEM, USING ROUTINE '.PCK'. / BEFORE CALLING, THE NUMBER OF DIGITS MUST BE SPECIFIED (2'S COMP) / IN 'COUNT', AND THE '.PCK' ROUTINE MUST HAVE BEEN SET UP. OCT2AS XX /(005) OCT2.1 LAC VALUE /(005) LMQ / PUT NEW VALUE IN MQ /(005) ECLA!LLS 3 / SHIFT IN NEXT OCTAL DIGIT /(005) DAC EV / SAVE TEMPORARILY /(005) LACQ /(005) DAC VALUE / SAVE NEW VALUE /(005) LAC EV / RETRIEVE DIGIT /(005) XOR (60 /(005) JMS* .PCK / PACK ASCII CHARACTER /(005) ISZ COUNT /(005) JMP OCT2.1 / PACK ANOTHER IF NOT DONE /(005) JMP* OCT2AS /(005) / SUBROUTINE TO EXTRACT A 6-BIT CHARACTER FROM THE MQ AND CONVERT IT / TO A 7-BIT IMAGE ASCII CHARACTER IN THE AC. SIXTO7 XX ECLA!LLS 1 / SHIFT IN HIGH-ORDER BIT OF CHARACTER SNA XOR (2 / CONVERT FROM 6- TO 7-BIT, AS APPROPRIATE LLS 5 / SHIFT IN REST OF CHARACTER SAD (100 / '@' MEANS END OF TASK NAME JMP ENDNAME JMS* .PCK / PACK THE CHARACTER /(005) JMP* SIXTO7 .EJECT ERRL EL-.*400+2;EV .ASCII '***' TASKNM 0; 0 .ASCII <0><0><0>': I/O ERROR ' ERRB .BLOCK 6;EL=.;VALUE /(006) TSKNAM 25;COUNT 0; .BLOCK 2 WRERR 2700; EV; TTY; 2; ERRL WAITFR 20; EV .END [\]. .PCK@@002 .TITLE .PCK / / 26 JUN 78 (002; PDH) DEBUG / 26 JUN 78 - PAUL HENDERSON / / ROUTINE TO PACK CHARACTERS, AS THEY ARE SUPPLIED, INTO 5/7 / ASCII. IF A LINE TERMINATOR (CR OR ALT MODE) IS ENCOUNTERED / THIS FACT IS NOTED IN THE INFORMATION RETURNED. / / *** NOTE *** THE ROUTINE MUST BE SET UP BY THE APPROPRIATE / CALL TO 'PCK.IN', OR DISASTER MAY BE PERPETRATED! / / CALLING SEQUENCES: / / 1) TO INITIALIZE - / / LAC (ADDRESS OF BUFFER TO RECEIVE PACKED CHARACTERS / JMS* PCK.IN / (RETURN) / / 2) TO PACK A CHARACTER - / / LAC CHARACTER / JMS* .PCK / (RETURN) / LINK = 1 IF TERMINATOR SINCE LAST SETUP / / AC = NUMBER OF WORDS PACKED / / MQ = NUMBER OF CHARACTERS PACKED INC=ISZ / INCREMENT A POSITIVE COUNTER IDX=ISZ / INDEX A POINTER SET=ISZ / SET A FLAG NON-ZERO .GLOBL PCK.IN PCK.IN XX DAC WPNT / SAVE LINE BUFFER ADDRESS IN WORKING POINTER LAC (..1 DAC SWING / SET UP PACKING ROUTINE DZM TERMIN / CLEAR 'LINE TERMINATOR PACKED' FLAG DZM CCOUNT / ZERO CHARACTER COUNTER DZM WCOUNT / AND WORD COUNTER JMP* PCK.IN WPNT;TERMIN;CCOUNT;WCOUNT .EJECT .GLOBL .PCK .PCK XX AND (177 / ENSURE 7 BITS ONLY SAD (15 SKP SAD (175 SET TERMIN / SET FLAG IF CR OR ALT MODE JMP* SWING / PACK THE CHARACTER SWING ..1 INC CCOUNT / INCREMENT CHARACTER COUNTER LAC TERMIN / IF WE HAVE PACKED A LINE TERMINATOR SZA!CLL / SET LINK STL LAC CCOUNT / EXIT WITH CHARACTER COUNT IN MQ LMQ LAC WCOUNT / WORD COUNT IN AC, AND JMP* .PCK / LINE TERMINATOR FLAG IN LINK. ..1 INC WCOUNT / INCREMENT WORD COUNTER ALSS 13 DAC* WPNT JMS SWING ..2 ALSS 4 XOR* WPNT DAC* WPNT JMS SWING ..3 CLQ!LRSS 3 XOR* WPNT DAC* WPNT IDX WPNT / INDEXTO NEXT WORD INC WCOUNT / COUNT THE WORD LACQ / RETRIEVE FINAL 3 BITS OF 3RD CHARACTER DAC* WPNT JMS SWING ..4 ALSS 10 XOR* WPNT DAC* WPNT JMS SWING ..5 CLL!RAL XOR* WPNT DAC* WPNT IDX WPNT / INDEX POINTER FOR NEXT PAIR, BUT JMS SWING / WORD COUNTER WILL BE INCREMENTED ONLY JMP ..1 / IF ANOTHER CHARACTER IS PACKED. .END [\]. .SIXPK001 .TITLE .SIXPK / / 23 JUN 78 - PAUL HENDERSON / / THIS ROUTINE CONSTRUCTS A .SIXBT FILE NAME AND EXTENSION AS / CHARACTERS ARE SUPPLIED, ONE CHARACTER PER CALL. THE CONVENTION / USED IS THAT CHARACTERS ARE PACKED, THREE PER WORD, IN THE / FILE NAME AND EXTENSION. ALL NON-SPACE CHARACTERS AFTER A / SPACE GO IN THE EXTENSION, EVEN IF THE FILE NAME IS NOT / COMPLETELY FILLED, OR IF THERE HAVE BEEN MORE THAN SIX / CHARACTERS. ALL CHARACTERS AFTER THE NINTH (IF NO SPACE) / OR AFTER THE THIRD EXTENSION CHARACTER ARE IGNORED, AS ARE / ALL CHARACTERS INCLUDING AND AFTER A LINE TERMINATOR. / THE ROUTINE MUST BE INITIALIZED BY A CALL TO 'SIX.IN', / WHICH ALSO ZEROS THE 3-WORD FILE NAME BUFFER. / / CALLING SEQUENCES: / / 1) TO INITIALIZE - / / LAC (ADDRESS OF 3-WORD FILE NAME BUFFER / JMS* SIX.IN / (RETURN) / / 2) TO PACK CHARACTERS - / / LAC CHARACTER / JMS* .SIXPK / (RETURN) / X10=10 SET=ISZ / SET A FLAG NON-ZERO .GLOBL SIX.IN / SIX.IN XX DAC KPNT / KEEP ORIGINAL POINTER DAC WPNT / WORKING POINTER GETS ALTERED DAC* (X10 DZM* WPNT DZM* X10 / ZERO THE 3-WORD BLOCK DZM* X10 LAC (FIRSTC DAC SWING / SET UP THE BRANCH ADDRESSES LAC (FNAME2 DAC SELECT DZM TERMIN / CLEAR 'LINE TERMINATOR FOUND' JMP* SIX.IN / KPNT;WPNT;TERMIN 1 .EJECT .GLOBL .SIXPK / .SIXPK XX AND (177 / ENSURE WE HAVE ONLY 7 BITS SAD (15 / IF (CARRIAGE RETURN SKP SAD (175 / OR ALT MODE) JMP CRALT / IGNORE ALL CHARACTERS UNTIL / AFTER NEXT 'SIX.IN'; SAD (40 / ELSEIF (SPACE) JMP EXT / CHARACTERS GO IN EXTENSION AAC -140 SMA / IF (LOWER CASE) AAC -40 / CONVERT TO UPPER CASE AAC 140 AND (77 / CHOP TO 6 BITS JMP* SWING / THEN PROCESS CHARACTERS IN TURN /\ SWING OVRFLOW / IGNORE CHARACTERS UNLESS SET UP JMP* .SIXPK / CRALT SET TERMIN / SET 'LINE TERMINATOR FOUND' FLAG JMP OVRFLOW / THEN IGNORE CHARACTERS / NXT JMS SWING / ESTABLISH CORRECT BRANCH ADDRESS / FIRSTC ALSS 14 DAC* WPNT / STORE FIRST CHARACTER JMS SWING / ALSS 6 XOR* WPNT / INCLUDE WITH 1ST CHAR DAC* WPNT / AND STORE FIRST 2 CHARACTERS JMS SWING / XOR* WPNT DAC* WPNT / WORD NOW FULL. JMP* SELECT / SELECT NEXT STAGE IN PROCESSING / .EJECT SELECT OVRFLOW / IGNORE IF NOT SET UP JMP NXT / SET UP WORD PACKER FOR / ANOTHER 3 CHARACTERS FNAME2 LAC KPNT IAC / POINT TO SECOND WORD OF BLOCK DAC WPNT JMS SELECT / EXT LAC TERMIN / MUST CHECK BECAUSE A SPACE AFTER SZA / A LINE TERMINATOR COULD WREAK HAVOC JMP OVRFLOW LAC KPNT AAC 2 DAC WPNT / SELECT 3RD WORD (EXTENSION) JMS SELECT / OVRFLOW JMS SWING / RETURN WITHOUT PROCESSING JMP OVRFLOW / OVERFLOW CHARACTERS .END [\]. ARCHIV002 .TITLE ARCHIVE / / 8 SEP 78 (002; PDH) ADD SOME INSTRUCTIONS FOR ASSEMBLY PARAMETERS / 15 AUG 77 - PAUL HENDERSON / / MAINLINE TO INVOKE THE PROGRAM SEGMENTS TO PERFORM THE ARCHIVING OF / ALL OF THE ASCII FILES (150 MAX) IN A PARTICULAR UFD, THEN DELETE / THESE FILES FROM THE UFD. / / DEFAULT ASSEMBLY (NO PARAMETERS) PRODUCES PROGRAM SEGMENTS FOR A / TASK TO RUN UNDER MULTIACCESS (XVM/RSX V1B), USING THE FP15 / FLOATING POINT PROCESSOR. TO ASSEMBLE FOR XVM/RSX V1A, THE SYMBOL /NOMAC=1 MUST BE DEFINED. TO ASSEMBLE FOR USE WITHOUT FP15, /NOFPP=1 MUST BE DEFINED. / .GLOBL GNAMES,ORDER,SAVE / ARCHIVE JMS* GNAMES / GET NAMES OF ASCII FILES JMS* ORDER / ARRANGE THEM IN ALPHABETIC ORDER JMS* SAVE / SAVE THEM IN THE 'ARCHIVE' FILE, / THEN DELETE THEM. CAL (10 / THEN EXIT .END ARCHIVE [\]. ARK@@@JOB $JOB 73 T=5 UFD=RK1 $MSG 'ARK' JOB TO ASSEMBLE AND TASK BUILD 'ARK...' $MAC ERB_.IOERR 006,.PCK 002 $MAC ERB_ARCHIV 002 $MAC ERB_GNAMES 006 $MAC BERP_NOFPP PRM,ORDER 007 $MAC BERP_NOFPP PRM,SAVE 011 $TKB NRM } ARK... } 350 } TDV(10000) } ARCHIV,.IOERR,.PCK } GNAMES:ORDER:SAVE } } $END [\]. DEARCH007 .TITLE DEARCH / / 12 SEP 78 (007; PDH) OOPS! WE FORGOT 1ST CHARACTER OF NAME. / 12 SEP 78 (006; PDH) CONVERT TO NEW SYSTEM ROUTINES 'UN.PCK' & '.SIXPK' / 20 OCT 77 (005; PDH) CONVERT TO TDV FUNCION FOR MULTIACCESS / 1 SEP 77 (004; PDH) CREATE 'NAMES ...' FILE ON INPUT / 26 AUG 77 - PAUL HENDERSON / / PROGRAM TO DE-ARCHIVE AN ARCHIVED FILE -- IE. READ IT AND PRODUCE / SEPARATE DISK FILES. IT WILL ALSO PRODUCE FILE 'NAMES ...' WHICH IS / A LIST OF ALL FILES DE-ARCHIVED. .DEC TTO=13 / ERROR MESSAGE OUTPUT DK=15 / DISK LUN (OUTPUT FILES) DT=19 / DECTAPE INPUT ARCHIVED FILE .OCT X10=10 IDX=ISZ .GLOBL .IOERR .GLOBL UNP.IN,UN.PCK,SIX.IN,.SIXPK /(006) DEARCH CAL XFRCMD / GET TDV COMMAND LINE JMS WTFOR LAC (LINE+2 JMS* UNP.IN / INITIALIZE THE UNPACK /(006) LAC (DTNAME /(006) JMS* SIX.IN / AND FILE NAME PACK ROUTINES /(006) LAC (IMAGE+1 /(006) DAC* (X10 / POINTER FOR START OF FILE NAME LAC EOFCODE+1 DAC LINE+21 / ENSURE THAT THERE IS A CARRIAGE RETURN CK4SP JMS* UN.PCK / UNPACK A CHARACTER /(006) JMP ERR1 / LINE TERMINATOR; NO FILE NAME /(006) SAD (40 / IS IT A SPACE? JMP SPFND JMP CK4SP SPFND JMS* UN.PCK /(006) JMP ERR1 / LINE TERMINATOR TOO EARLY /(006) SAD (40 JMP SPFND / FLUSH OUT ALL SPACES JMP SVCHR / 1ST NON-SPACE CHAR IN AC /(007) .EJECT GETCHR JMS* UN.PCK / UNPACK FILE NAME CHARACTER /(006) JMP OPENIF / STOP AT END OF LINE /(006) SVCHR DAC* X10 / SAVE IN CASE NEEDED LATER /(007) JMS* .SIXPK / PACK UP IN .SIXBT /(006) JMP GETCHR /(006) OPENIF CAL SEEK / OPEN INPUT FILE ON DECTAPE /(006) CAL WAITFR LAC EV SMA JMP FOUND / FILE FOUND. PROCEED HAPPILY SAD (-13 JMP ERR2 / FILE NOT FOUND ERROR JMS* .IOERR / OTHER FATAL ERROR ERR1 CAL WRER1 / 'NO INPUT FILE NAME SUPPLIED' JMP EXIT ERR2 DZM* X10 / ENSURE EVEN COUNT & NO GARBAGE /(006) LAC (IMAGE-1 /(006) TCA /(006) TAD* (X10 / CALCULATE CORRECT HEADER /(006) ALSS 10 /(006) XOR (3 / IMAGE ASCII MODE /(006) DAC IMAGE / STORE HEADER /(006) CAL WRER2A / 'FILE ' /(006) CAL WRER2B / (FILE NAME AND EXTENSION) CAL WRER2C / ' NOT FOUND' EXIT JMS WTFOR / WAIT FOR MESSAGE TO BE PRINTED CAL (10 / THEN EXIT .EJECT FOUND CAL ENTERN / OPEN OUTPUT FILE 'NAMES ...' JMS WTFOR JMP RDLOOP / THEN DUMP FIRST PART OF INPUT INTO IT GETNAM JMS READ / READ FILE NAME JMP .-1 / IGNORE '[\].' IF FOUND HERE! LAC (LINE+2 /(006) JMS* UNP.IN / INITIALIZE UNPACK /(006) LAC (NAME / AND FILE NAME ROUTINES /(006) JMS* SIX.IN /(006) PCKNAM JMS* UN.PCK / UNPACK A CHARACTER /(006) JMP OPENOF / OPEN OUTPUT FILE WHEN READY /(006) JMS* .SIXPK / PACK THE CHARACTER /(006) JMP PCKNAM OPENOF CAL ENTER / OPEN OUTPUT FILE ON DISK /(006) JMS WTFOR RDLOOP JMS READ / READ LINE OF INPUT FILE JMP ENDFIL / '[\].' SIGNIFIES INTERNAL END-OF-FILE CAL WRITE JMS WTFOR JMP RDLOOP ENDFIL CAL CLOSDK / CLOSE DISK FILE JMS WTFOR JMP GETNAM / GO PROCESS NEXT NAME (OR EOF) .EJECT / SUBROUTINE TO READ A RECORD FROM THE DECTAPE INPUT FILE, CHECKING / FOR END OF FILE DATA MODE AND INTERNAL END-OF-FILE '[\].' / CALLING SEQUENCE: / JMS READ / READ RECORD INTO 'LINE' / (RETURN IF '[\].') / (NORMAL RETURN) / WHEN PHYSICAL END OF FILE IS DETECTED, THE PROGRAM ANNOUNCES / ITS COMPLETION AND EXITS. READ XX CAL RDTAPE / READ RECORD FROM DECTAPE LUN JMS WTFOR LAC LINE AND (7 SAD (5 / CHECK FOR PHYSICAL END-OF-FILE JMP FINIS LAC LINE+2 SAD EOFCODE / CHECK FOR '[\].', THE INTERNAL SKP / END-OF-FILE CODE JMP NOTEOF LAC LINE+3 SAD EOFCODE+1 SKP / '[\].' FOUND. DON'T INDEX RETURN POINTER NOTEOF IDX READ / NOT EOF. INDEX TO NORMAL RETURN. JMP* READ / PHYSICAL END-OF-FILE HAS BEEN DETECTED ON DECTAPE. FINIS CAL CLOSDT / CLOSE DECTAPE FILE JUST TO BE TIDY JMS WTFOR CAL WRFINI / 'DE-ARCHIVING COMPLETE' JMS WTFOR CAL (10 / SUBROUTINE TO WAIT FOR EVENT VARIABLE WTFOR XX LAC EV / PERFORM QUICK CHECK SO WE SNA CAL WAITFR / ONLY WAIT WHEN NECESSARY LAC EV SPA JMS* .IOERR / COMPLAIN ABOUT BAD EV JMP* WTFOR .EJECT / CAL PARAMETER BLOCKS , CONSTANTS, AND VARIABLES WAITFR 20; EV XFRCMD 37; EV; LINE; 22 WRER1 2700; EV; TTO; 2; E1MSG WRER2A 2700; 0; TTO; 2; E2AMSG WRER2B 2700; 0; TTO; 3; IMAGE WRER2C 2700; EV; TTO; 2; E2CMSG SEEK 3200; EV; DT;DTNAME .BLOCK 3 ENTERN 3300; EV; DK; .SIXBT 'NAMES@...' ENTER 3300; EV; DK;NAME .BLOCK 3 WRITE 2700; EV; DK; 2; LINE .EJECT CLOSDK 3400; EV; DK CLOSDT 3400; EV; DT RDTAPE 2600; EV; DT; 2; LINE; 100 WRFINI 2700; EV; TTO; 2; FINI E1MSG E1-.*400+2;EV; .ASCII 'NO FILE NAME SUPPLIED'<15> ;E1=. E2AMSG E2A-.*400+2; 0; .ASCII 'FILE '<175> ;E2A=. TENS=DT/12 / GAME TO ALLOW ASSEMBLER GENERATION OF DT LUN UNITS=TENS*12*777777+DT E2CMSG E2C-.*400+2; 0; .ASCII ' NOT FOUND ON L' .ASCII 'UN ' ; .LOC .-1 60+TENS*200+60+UNITS*2 .ASCII <15> ;E2C=. FINI FI-.*400+2; 0; .ASCII 'DE-ARCHIVING COMPLETE'<15> ;FI=. EOFCODE .ASCII '[\].'<15> LINE .BLOCK 100 IMAGE=LINE+22 .END DEARCH [\]. DRK@@@JOB $JOB 73 T=5 UFD=RK1 $MSG 'DRK' JOB TO ASSEMBLE AND TASK BUILD 'DRK...' $MAC ERB_.IOERR 006,.PCK 002,UN.PCK 002,.SIXPK 001 $MAC ERB_DEARCH 007 $TKB NRM } DRK... } 350 } TDV(10000) } DEARCH,.PCK,.IOERR,UN.PCK,.SIXPK } } $END [\]. GNAMES006 .TITLE GNAMES / / 20 OCT 77 (005; PDH) CONVERT TO MULTIACCESS TDV FUNCTION / 1 SEP 77 (004; PDH) DELETE 'NAMES ...' BEFORE WE START / 15 AUG 77 - PAUL HENDERSON / / PROGRAM SEGMENT TO GET THE NAMES OF ALL ASCII FILES IN THE UFD / ASSOCIATED WITH LUN 15, AND STORE THE NAMES IN 5/7 ASCII IN / FILE 'NAMES ...' ON LUN 17. THIS FILE WILL BE PROCESSED BY / LATER STEPS IN THE TASK. / / IF THE TASK IS TO RUN ON A NON-MULTIACCESS SYSTEM, THE PARAMETER /NOMAC=1 / MUST BE DEFINED. / .DEC TTY=13 ILUN=15 OLUN=17 .OCT MA.LOF=222 / .SCOM LOCATION CONTAINING CURRENT MULTIACCESS LUN OFFSET LUFD1=304 / .SCOM LOCATION CONTAINING POINTER TO LUN-UFD TABLE ECLA=641000 / .GLOBL GNAMES,.IOERR / .EJECT GNAMES XX CAL XFRCMD / NEEDED ONLY TO MAKE SYSTEM HAPPY CAL WAITFR .IFUND NOMAC LAC (MA.LOF DAC SPYADR CAL SPY LAC SPYCON / ADDING CURRENT MULTIACCESS LUN OFFSET TAD (ILUN / TO VIRTUAL LUN DAC ABSLUN / GIVES ABSOLUTE (REAL) LUN VALUE .ENDC LAC (LUFD1 DAC SPYADR CAL SPY / GET POINTER TO LUN-UFD TABLE LAW -1 TAD SPYCON TAD ABSLUN / CALCULATE POINTER TO CORRECT UFD ENTRY DAC SPYADR CAL SPY / GET UIC ASSOCIATED WITH LUN 'ILUN' / CKOLUN LAC (OLUN / MAKE SURE WE HAVE FILE-ORIENTED DAC HINF+2 / SECONDARY DEVICE CAL HINF JMS WTFOR AND (040000 / SELECT 'DIRECTORY-ORIENTED' BIT SZA JMP CKILUN CAL WRNODR / 'LUN "OLUN" NOT FILE-ORIENTED' ABEND JMS WTFOR / WAIT UNTIL MESSAGE IS FINISHED CAL (10 / THEN EXIT / .EJECT CKILUN LAC (ILUN DAC HINF+2 / MUST HINF CORRECT LUN CAL HINF JMS WTFOR LAC EV ALSS 11 / FROM THE INFORMATION RETURNED BY HINF, AND (700000 / EXTRACT THE PHYSICAL UNIT NUMBER DAC UNIT LAC EV AND (77 / EXTRACT DEVICE TYPE DAC DKTYPE / PUT IT IN 'GET' CPB SAD (2 JMP RK / RF SAD (3 JMP RP / RP SAD (24 JMP RK / RK / CAL WRNODK / 'DEVICE ON LUN "ILUN" IS NOT A DISK' JMP ABEND / RP LAC (47040 / START BLOCK OF MFD ON RP DISK SKP RK LAC (1777 / START BLOCK ON RF & RK GETMFD JMS BLK2PL / CONVERT BLOCK NUMBERS TO PLATTER, ETC LAC (374 / AND FETCH IT INTO CORE PAL / DON'T SEARCH PAST END OF BLOCK CLX MFD1 LAC BUFFER,X / SEARCH MFD FOR DESIRED UFD ENTRY SAD UIC JMP UICFND AXS 4 / INDEX TO NEXT MFD ENTRY JMP MFD1 LAC ENDBLK / END OF MFD BLOCK - UIC NOT FOUND SMA / IS THERE ANOTHER MFD BLOCK? JMP GETMFD / YES. FETCH IT AND CONTINUE SEARCH / NOUFD LAW -33 / ILLEGAL UIC JMS* .IOERR / .EJECT UICFND LAC BUFFER+1,X / POINT TO UFD START BLOCK SPA JMP NOUFD / NO UFD, ALTHOUGH ENTRY IS IN MFD DAC UFD CAL DELETE / DELETE 'NAMES ...' BEFORE WE START CAL WAITFR / DON'T BE UPSET IF IT IS ABSENT. CAL ENTER / OPEN OUTPUT FILE 'NAMES ...' JMS WTFOR / LAC UIC / BEGIN THE 'NAMES ...' FILE WITH THE UIC JMS THREEC XOR (15*2 / END WITH CARRIAGE RETURN DAC OLINE+3 CAL WRNAME JMS WTFOR / LAC UFD / GETUFD JMS BLK2PL / FETCH FIRST BLOCK OF UFD LAC (400 PAL CLX MOVE LAC BUFFER,X / BECAUSE WE NEED TO USE SUBROUTINE 'BLK2PL' DAC UFD,X / LATER, WE MUST EMPTY 'BUFFER' AXS 1 JMP MOVE DZM XR / BEGIN WITH ZERO INDEX REGISTER CLX / .EJECT UFD1 LAC UFD,X / IS THERE A FILE NAME? SNA JMP NXTFIL LAC UFD+4,X / IS IT SEQUENTIAL OR RANDOM ACCESS? SPA JMP NXTFIL / RANDOM ACCESS NOT PROCESSED LAC UFD+3,X / GET NUMBER OF FIRST BLOCK OF FILE SPA JMP NXTFIL / TRUNCATED FILES ARE NOT PROCESSED JMS BLK2PL / GET FIRST BLOCK LAC BUFFER SPA JMP NXTFIL / ILLEGAL WORD PAIR COUNT!! AND (777 / INCLUDE DATA VALIDITY BITS WITH MODE SAD (2 SKP JMP NXTFIL / NOT PURE ASCII LAC XR / RESTORE XR LOST DURING 'GET' PAX LAC UFD,X / GET FIRST 3 CHARACTERS OF FILE NAME JMS THREEC / PACK INTO ASCII IN OUTPUT BUFFER LAC UFD+1,X / GET CHARACTERS 4-6 OF FILE NAME LMQ JMS SIXTO7 ALSS 10 XOR OLINE+3 DAC OLINE+3 / 4TH CHARACTER JMS SIXTO7 RCL XOR OLINE+3 DAC OLINE+3 / 5TH CHARACTER JMS SIXTO7 ALSS 13 DAC OLINE+4 / 6TH CHARACTER / .EJECT LAC UFD+2,X / GET EXTENSION (CHARACTERS 7-9) LMQ JMS SIXTO7 ALSS 4 XOR OLINE+4 DAC OLINE+4 / 7TH CHARACTER JMS SIXTO7 LRSS 3 / 8TH CHARACTER STRADDLES 2 WORDS XOR OLINE+4 DAC OLINE+4 ECLA!LLSS 3 ALSS 17 DAC OLINE+5 / SECOND HALF OF 8TH CHARACTER JMS SIXTO7 ALSS 10 XOR OLINE+5 / 9TH CHARACTER XOR (15*2 / CARRIAGE RETURN IS 10TH CHARACTER DAC OLINE+5 CAL WRNAME / WRITE OUT THE FILE NAME JMS WTFOR / NXTFIL LAC (370 PAL LAC XR PAX / RESTORE XR LOST DURING I/O AAC 10 DAC XR / UPDATE VALUE FOR NEXT TIME AXS 10 JMP UFD1 / PROCESS NEXT NAME IN THIS UFD BLOCK LAC UFD+377 SMA / END OF CURRENT UFD BLOCK. IS THERE ANOTHER? JMP GETUFD / YES. FETCH AND PROCESS IT. / CAL CLOSE / CLOSE SECONDARY OUTPUT FILE JMS WTFOR JMP* GNAMES / THEN RETURN TO MAINLINE. / .EJECT THREEC XX LMQ / PREPARE TO PACK 3 CHARACTERS JMS SIXTO7 / FETCH A CHARACTER CONVERTED TO 7-BITS ALSS 13 DAC OLINE+2 / STORE FIRST CHARACTER JMS SIXTO7 ALSS 4 XOR OLINE+2 / BLEND IN 2ND CHARACTER DAC OLINE+2 JMS SIXTO7 CLQ!LRSS 3 / 3RD CHARACTER STRADDLES 2 WORDS XOR OLINE+2 DAC OLINE+2 LACQ DAC OLINE+3 JMP* THREEC / / SUBROUTINE TO EXTRACT A 6-BIT CHARACTER FROM THE MQ AND / CONVERT IT TO A 7-BIT CHARACTER IN THE AC. / SIXTO7 XX ECLA!LLS 1 / SHIFT IN HIGH-ORDER BIT OF CHARACTER SNA XOR (2 / CONVERT FROM 6- TO 7-BIT, AS APPROPRIATE LLS 5 / SHIFT IN REST OF CHARACTER JMP* SIXTO7 / RETURN WITH CHARACTER IN AC / / SUBROUTINE TO CONVERT BLOCK NUMBERS TO PLATTER NUMBERS AND / READ THE BLOCK INTO CORE / BLK2PL XX LMQ ECLA!LLSS 10 XOR UNIT / MUST INCLUDE PHYSICAL UNIT NUMBER DAC CTRLTB / PUT UNIT & PLATTER # IN CONTROL TABLE LACQ DAC DKADDR / PUT DISK ADDRESS IN CONTROL TABLE CAL GETDK / FETCH THE BLOCK JMS WTFOR JMP* BLK2PL / WTFOR XX CAL WAITFR LAC EV SPA JMS* .IOERR JMP* WTFOR / .EJECT ABSLUN ILUN / CHANGED TO REAL LUN FOR LUN MAPPING XR;SPY 31; 0;SPYADR;SPYCON;UIC=SPYCON XFRCMD 37; EV; BUFFER; 100 WAITFR 20; EV BUFFER .BLOCK 377;ENDBLK UFD .BLOCK 400 HINF 3600; EV; XX GETDK 13000; EV; 1; CTRLTB;DKTYPE CTRLTB;DKADDR; BUFFER; 400 DELETE 3500; EV; ILUN; .SIXBT 'NAMES@...' ENTER 3300; EV; OLUN; .SIXBT 'NAMES@...' WRNAME 2700; EV; OLUN; 2; OLINE CLOSE 3400; EV; OLUN OLINE 3002; 0; .BLOCK 4 WRNODK 2700; EV; TTY; 2; MSG6 WRNODR 2700; EV; TTY; 2; MSG3 TENS=OLUN/12 UNITS=TENS*12*777777+OLUN / MSG3 M3-.*400+2;EV; .ASCII 'LUN ' 60+TENS*200+60+UNITS*20; 0 .ASCII ' NOT FILE-ORIENTED'<15> ;M3=. TENS=ILUN/12 UNITS=TENS*12*777777+ILUN / MSG6 M6-.*400+2;UNIT; .ASCII 'DEVICE ON LUN ' 60+TENS*200+60+UNITS*20; 0 .ASCII ' IS NOT A DISK'<15> ;M6=. .END [\]. NOFPP@PRM .TITLE NOFPP / / 11 SEP 78 - PAUL HENDERSON / / PARAMETER FILE FOR ASSEMBLY OF THE 'ARK' PROGRAM MODULES WHEN / ASSEMBLING FOR NO FLOATING POINT PROCESSOR. / NOFPP=1 .EOT [\]. ORDER@007 .TITLE ORDER / / 8 SEP 78 (007; PDH) CONDITIONALIZE FOR NON-FP15 USE / 20 OCT 77 (006; PDH) CHANGE TTY TO LUN 13 / 22 AUG 77 (005; PDH) CHANGE TO 150 FILES / 17 AUG 77 (004; PDH) FIX BIG IN SORTING ALGORITHM (COMPARE) / 17 AUG 77 (003; PDH) TRY TO PROGRAM AROUND FPP INVALID REMAINDER PROBLEM / 16 AUG 77 - PAUL HENDERSON / / PROGRAM SEGMENT TO READ THE 'NAMES ...' FILE, RE-ORDER IT IN / ALPHABETIC ORDER, AND RE-WRITE IT, PRECEEDED BY THE UIC AND / COUNT OF THE NUMBER OF FILES. / / TO ASSEMBLE FOR NON-FLOATING POINT USE, THE SYMBOL /(007) /NOFPP=1 MUST BE DEFINED. /(007) .IFUND NOFPP /(007) FPP=1; .ENDC /(007) .DEC TTY=13 DK=17 NFILES=150 / NUMBER OF FILES WE CAN PROCESS. .OCT I=400000 / FPP INDIRECT ADDRESSING ESB=710500 IRS=711000 IMP=711400 IDV=712000 ILD=713000 ELD=713100 IST=713600 UNSWQ=715270 BZA=716601 BMA=716602 BPA=716604 IDX=ISZ INC=ISZ .EJECT .GLOBL ORDER,.IOERR / ORDER XX CAL SEEK / OPEN FILE 'NAMES ...' FOR INPUT JMS WTFOR CAL READ / READ THE 'UIC' RECORD JMS WTFOR LAC LINE+2 DAC UIC / SAVE IT FOR LATER OUTPUT LAC LINE+3 DAC UIC+1 DZM INDEX / INITIALIZE FILE COUNTER, LAC (BUF DAC BUFPT / BUFFER POINTER, LAW -NFILES DAC COUNT / AND BUFFER OVERFLOW COUNTER / .EJECT RDNAME CAL READ / READ A FILE NAME RECORD JMS WTFOR LAC LINE AND (7 SAD (5 JMP SORT / SORT THE NAMES WHEN ALL HAVE BEEN READ / LAC (4 / EACH FILE NAME IS STORED IN ASCII (4 WDS) PAL CLX / MOVE LAC LINE+2,X / MOVE THE ASCII LINE FROM THE INPUT BUFFER DAC* BUFPT / TO THE SORTING BUFFER IDX BUFPT AXS 1 JMP MOVE INC INDEX / COUNT THE FILE NAME ISZ COUNT / MAKE SURE THE BUFFER DOES NOT OVERFLOW JMP RDNAME / .EJECT SORT CAL CLOSE / CLOSE INPUT FILE JMS WTFOR LAC INDEX SNA JMP NOFILES / THERE MUST BE AT LEAST ONE FILE / AGN LAC INDEX TCA DAC COUNT DAC SORTED / SET SORTED = .TRUE. CLX ISZ COUNT SKP JMP DONE / A SINGLE ITEM CANNOT BE SORTED / LOOP JMS COMPARE / COMPARE FIRST WORDS OF ASCII FILE NAME LAC BUF+0,X LAC BUF+4,X / JMS COMPARE / COMPARE SECOND WORDS LAC BUF+1,X LAC BUF+5,X / JMS COMPARE / COMPARE THIRD WORDS LAC BUF+2,X LAC BUF+6,X / JMS COMPARE / COMPARE FOURTH WORDS LAC BUF+3,X LAC BUF+7,X JMP NEXT / THESE FILE NAMES ARE IN ORDER. CHECK NEXT ONES / .EJECT / SUBROUTINE TO COMPARE THE VALUES INDICATED BY THE ARGUMENTS. IF THE / SECOND ARGUMENT IS LOWER IN ALPHABETIC SEQUENCE THAN THE FIRST ONE, / THE TWO SETS OF VALUES WILL BE SWAPPED. IF THE SECOND IS HIGHER, / THEN THE NEXT TWO SETS WILL BE COMPARED. THE SUBROUTINE RETURNS / ONLY IF THE TWO VALUES ARE EQUAL. / / CALLING SEQUENCE: / / JMS COMPARE / LAC FIRST ARG / LAC SECOND ARG / (RETURNS HERE IF EQUAL) / COMPARE XX XCT* COMPARE / GET FIRST ARGUMENT IDX COMPARE .IFDEF NOFPP /(007) CLL!RAR / TO SIMPLIFY THE COMPARISON, /(007) DAC F1 / ENSURE THAT BOTH QUANTITIES /(007) CLA!RAL / ARE POSITIVE. SAVE OVERFLOW /(007) .ENDC / BIT IN NEXT LOCATION /(007) DAC F1+1 / AND STORE IT FOR FPP USE XCT* COMPARE / GET SECOND ONE .IFDEF NOFPP /(007) CLL!RAR / SAME PROCESS HERE AS ABOVE /(007) DAC F2 /(007) CLA!RAL /(007) .ENDC /(007) DAC F2+1 .IFDEF FPP /(007) ELD; F1 ESB; F2 BZA; RETURN BPA; SWAP / IF 2ND 'LESS' THAN FIRST, SWAP THEM. JMP NEXT / 2ND 'GREATER' THAN FIRST. OK. .ENDC /(007) .EJECT .IFDEF NOFPP /(007) LAC F2 /(007) TCA /(007) TAD F1 / 'F1 - F2' /(007) SNA /(007) JMP CBIT17 / EQUAL. CHECK BIT 17 /(007) SMA /(007) JMP SWAP / F2 .LT. F1; SWAP THEM /(007) JMP NEXT / F2 .GT. F1; ORDER IS OK /(007) CBIT17 LAC F2+1 / CHECK BIT 17 OF ARGUMENTS /(007) TCA /(007) TAD F1+1 /(007) SPA / SAME CHECKS, DIFFERENT ORDER /(007) JMP NEXT / F2 .GT. F1; ORDER IS OK /(007) SZA /(007) JMP SWAP / F2 .LT. F1; SWAP THEM /(007) .ENDC /(007) RETURN JMP* COMPARE / RETURN IF EQUAL / F1 0; 0 F2 0; 0 TEMP=COMPARE / .EJECT SWAP DZM SORTED / INDICATE BUFFER NOT SORTED / LAC BUF,X DAC TEMP LAC BUF+4,X / THE FILE NAME IN THE NTH BUFFER POSITION DAC BUF,X / HAS A HIGHER ALPHABETIC SEQUENCE THAN LAC TEMP / THAN THE NAME IN THE (N+1)TH BUFFER DAC BUF+4,X / POSITION. EXCHANGE THEM. / LAC BUF+1,X / THIS IS KNOWN AS A BUBBLE SORT. DAC TEMP LAC BUF+5,X DAC BUF+1,X LAC TEMP DAC BUF+5,X / LAC BUF+2,X DAC TEMP LAC BUF+6,X DAC BUF+2,X LAC TEMP DAC BUF+6,X / LAC BUF+3,X DAC TEMP LAC BUF+7,X DAC BUF+3,X LAC TEMP DAC BUF+7,X / NEXT AXR 4 ISZ COUNT JMP LOOP LAC SORTED / END OF LOOP. ARE THE NAMES SORTED? SNA JMP AGN / NO. DO THE LOOP AGAIN. / .EJECT / FILE NAMES HAVE BEEN ARRANGED IN ALPHABETIC ORDER. CONVERT THE VALUE / IN 'INDEX' TO DECIMAL, AND WRITE OUT THE ORDERED FILE NAMES, PRECEEDED / BY THE UIC AND FILE NAME COUNT. / DONE CAL ENTER / OPEN OUTPUT FILE LAC UIC DAC LINE+2 / MOVE SAVED UIC TO OUTPUT LINE BUFFER LAC UIC+1 DAC LINE+3 LAC (2002 / HEADER FOR UIC AND FILE COUNT DAC LINE JMS WTFOR CAL WRITE JMS WTFOR / LAW -4 DAC COUNT / CONVERT 4 DIGITS TO DECIMAL LAC (20 DAC LEAD0 / SET LEADING ZERO FLAG LAC (DIVISR DAC FPADR1 LAC (ANS / INITIALIZE ADDRESSES FOR FPP DAC FPADR2 .IFDEF FPP /(007) ILD; INDEX / BEGIN WITH THE 'INDEX' VALUE IST; TEMP /*** SAVE FOR LATER COMPARISON / CONVRT IDV;FPADR1 IST;FPADR2 / QUOTIENT IS NEXT CONVERTED DIGIT /*** UNSWQ; 0 / REMAINDER IS NEXT DIVIDEND IMP; I+FPADR1 /*** PROGRAM AROUND INVALID REMAINDER IRS; TEMP IST; TEMP /*** END OF THIS FUDGE .ENDC /(007) .EJECT .IFDEF NOFPP /(007) LAC INDEX / MOVE VALUE TO /(007) DAC TEMP / TEMPORARY LOCATION /(007) CONVRT LAC* FPADR1 / GET NEXT DIVISOR /(007) DAC DVISOR /(007) LAC TEMP / DO A DIVISION /(007) CLL /(007) IDIV /(007) DVISOR XX /(007) DAC TEMP / SAVE REMAINDER /(007) LACQ /(007) DAC* FPADR2 / STORE ANOTHER ANSWER DIGIT /(007) .ENDC /(007) IDX FPADR1 / POINT TO NEXT DIVISOR IDX FPADR2 ISZ COUNT JMP CONVRT / .EJECT LAC ANS / NOW PACK UP THE CONVERTED ASCII JMS CVRT CLQ!LRSS 7 LAC ANS+1 JMS CVRT ALSS 4 EAE 2000 / MQ <= AC!MQ LAC ANS+2 JMS CVRT RCR; RCR; RCR / SHIFT OUT NUMERICAL PART OMQ DAC LINE+2 / STORE 2-1/2 CHARACTERS IN LINE BUFFER LAC ANS+2 CLQ!LRSS 3 / PLACE NUMERICAL PART IN MQ LAC ANS+3 XOR (60 / LAST DIGIT NEVER LEADING ZERO ALSS 10 OMQ XOR (15*2 / END WITH CARRIAGE RETURN DAC LINE+3 CAL WRITE / WRITE OUT FILES COUNT JMS WTFOR / .EJECT LAC (3002 / CORRECT HEADER FOR FILE NAMES DAC LINE LAC INDEX TCA DAC COUNT LAC (BUF DAC BUFPT / NEXTL LAC (4 / 4 ASCII WORDS PER FILE NAME PAL CLX MOVE2 LAC* BUFPT / MOVE 4 WORDS FROM SORTING BUFFER IDX BUFPT DAC LINE+2,X / TO LINE BUFFER AXS 1 JMP MOVE2 CAL WRITE / THEN OUTPUT THE FILE NAME JMS WTFOR ISZ COUNT JMP NEXTL CAL CLOSE / CLOSE OUTPUT FILE WHEN COMPLETE JMS WTFOR JMP* ORDER / / SUBROUTINE TO CONVERT A BINARY VALUE TO A SINGLE IMAGE ASCII / CHARACTER, CONVERTING LEADING ZEROS TO SPACES. / CVRT XX SZA DZM LEAD0 / CLEAR LEADING ZERO FLAG IF NON-ZERO VALUE SNA XOR LEAD0 / THIS WILL CONVERT '0' TO ' ' XOR (60 / CONVERT TO ASCII JMP* CVRT / NOFILES CAL WRNOFL / 'NO FILE NAMES TO PROCESS' JMS WTFOR CAL (10 / / SUBROUTINE TO WAIT FOR AN EVENT VARIABLE / WTFOR XX LAC EV SNA CAL WAITFR / WAIT ONLY IF EV=0 LAC EV SPA JMS* .IOERR / COMPLAIN ABOUT BAD EVENT VARIABLE JMP* WTFOR / .EJECT / CAL PARAMETER BLOCKS AND VARIABLES / WAITFR 20; EV SEEK 3200; EV; DK; .SIXBT 'NAMES@...' READ 2600; EV; DK; 2; LINE; 6 CLOSE 3400; EV; DK ENTER 3300; EV; DK; .SIXBT 'NAMES@...' WRITE 2700; EV; DK; 2; LINE WRNOFL 2700; EV; TTY; 2; NFLNMS NFLNMS NF-.*400+2;EV; .ASCII 'NO FILE NAMES TO PROCESS'<15> ;NF=. .EJECT UIC .BLOCK 2 LINE .BLOCK 6 BUF .BLOCK NFILES*4 BUFPT;INDEX;COUNT;SORTED;LEAD0 .IFDEF NOFPP /(007) FPADR1;FPADR2; .ENDC /(007) .DEC DIVISR 1000; 100; 10; 1; .OCT ANS .BLOCK 4 .END [\]. SAVE@@011 .TITLE SAVE / / 11 SEP 78 (011; PDH) CONDITIONALIZE FOR NON-FP15 USE / 2 AUG 78 (010; PDH) WAIT 5 SECONDS IF NODE COUNT IS LOW (<8) / 2 AUG 78 (009; PDH) IT RUNS OUT OF NODES ANYWAY. FIND OUT WHY. / 1 AUG 78 (008; PDH) TRY TO PREVENT POOL OF EMPTY NODES FROM EXHAUSTING / 20 OCT 77 (007; PDH) DON'T DELETE FILES IF 'DT' DEVICE NOT FILE-ORIENTED / 8 SEP 77 (006; PDH) GENERATE CORRECT 8'S & 9'S IN 'OCTDEC' / 1 SEP 77 (005; PDH) IGNORE 'FILE ALREADY OPEN' ERRORS / 22 AUG 77 (004; PDH) DELETE THE SPECIFIED FILES AFTER ARCHIVING / 22 AUG 77 (003; PDH) CONVERT OCTAL DATE TO DECIMAL; INCLUDE FILE NAME / WITH INDIVIDUAL FILES / 22 AUG 77 (002; PDH) EXORCISE SOME BUGS / 17 AUG 77 - PAUL HENDERSON / / PROGRAM SEGMENT TO READ THE 'NAMES ...' FILE, PRODUCE THE / ARCHIVE FILE ON DECTAPE, THEN DELETE THE FILES FROM DISK. / TO ASSEMBLE FOR NON-FLOATING POINT USE, THE SYMBOL /(011) /NOFPP=1 / MUST BE DEFINED. /(011) .IFUND NOFPP /(011) FPP=1; .ENDC /(011) .DEC TTY=13 DKF=15 / DISK LUN CONTAINING FILES DKN=17 / DISK LUN CONTAINING 'NAMES ...' FILE DT=19 / DECTAPE LUN RECEIVES ARCHIVE FILE .OCT POOL=240 / LISTHEAD OF POOL OF EMPTY NODES /(008) I=400000 IDX=ISZ ECLA=641000 IRS=711000 IMP=711400 IDV=712000 ILD=713000 IST=713600 UNSWQ=715270 .EJECT .GLOBL SAVE,.IOERR SAVE XX LAC (SKP / 'SKP' WHEN SAVING FILES DAC SVTEST / 'NOP' WHEN DELETING LAC (3200 DAC SEEKFL / ENSURE 'SEEK' CPB CAL SEEKNM / OPEN 'NAMES ...' FILE FOR INPUT LAC (DKN DAC READFL+2 / READ 'NAMES' FILE VIA 'FILES' CPB JMS WTFOR CAL READFL / READ UIC JMS WTFOR LAC FLINE+2 DAC NLINE+2 / MOVE UIC TO PLACE EXPECTED BY 'SEVTO6' LAC FLINE+3 DAC NLINE+3 JMS SEVTO6 / CONVERT FROM 5/7 ASCII IN 'NLINE' LAC NAME.1 / TO 6-BIT IN 'NAME.1' DAC DT.EXT / HAVE EXTENSION FOR ARCHIVED FILE / .EJECT CAL DATE LAC DATE+3 / GET DAY OF MONTH JMS OCTDEC / CONVERT TO .SIXBT DECIMAL LLSS 11 / SHIFT TO CORRECT PLACE DAC DT.NM1 / LAC DATE+4 / GET YEAR JMS OCTDEC / CONVERT TO .SIXBT DECIMAL LRSS 11 / YEAR NOW LEFT JUSTIFIED IN MQ / LAC DATE+2 / GET MONTH PAX LAC MONTHS-1,X / GET 2-CHARACTER MONTH DESIGNATOR LRSS 6 / INCLUDE 1 CHARACTER WITH OTHERS IN MQ XOR DT.NM1 / AND OTHER WITH PREVIOUS EFFORT DAC DT.NM1 LACQ DAC DT.NM2 / OUTPUT FILE NAME NOW COMPLETELY READY / CAL ENTER / OPEN OUTPUT FILE ON DECTAPE JMS WTFOR CAL WRITE / WRITE OUT THE 'UIC' LINE JMS WTFOR / JMS TRANSF / MOVE THE REST OF THE 'NAMES' FILE CAL CLOSEN / THEN CLOSE THE 'NAMES' FILE JMS WTFOR / LAC (DKF / NOW POINT CPB AT 'FILES' LUN DAC READFL+2 DLE1 CAL SEEKNM / OPEN 'NAMES' FILE AGAIN JMS WTFOR CAL READNM / READ 'UIC' TO BYPASS IT JMS WTFOR CAL READNM / BYPASS FILE COUNT JMS WTFOR / .EJECT TLOOP CAL READNM / READ NEXT FILE NAME JMS WTFOR LAC NLINE AND (7 SAD (5 JMP FINISH XCT SVTEST SKP CAL WRNAME / INCLUDE FILE NAME IN ARCHIVE FILE JMS SEVTO6 / CONVERT FROM .ASCII TO .SIXBT / NOW WE MUST ENSURE THAT THE SYSTEM HAS ENOUGH SMALL NODES TO / CARRY ON, IN CASE 'DELETE' TENDS TO EXHAUST THE SUPPLY. WE / MAKE THE ASSUMPTION THAT 8 NODES ARE ENOUGH. THIS ROUTINE / REMAINS IN A LOOP UNTIL THERE ARE MORE THAN 8 NODES IN THE POOL. JMP LM8 / REQUEST 'NODCNT' IF /(008) NONODE CAL RQNDCT / NOT ENOUGH SMALL NODES /(009) WT5SEC CAL MK5S / THEN DELAY FOR 5 SECONDS /(010) CAL WAITFR /(010) LAC EV / MUST HAVE GOOD EV BEFORE /(010) SPA / WE ATTEMPT TO PROCEED /(010) JMP WT5SEC /(010) LM8 LAW -10 / MUST BE AT LEAST 8 NODES IN /(009) DAC COUNT / POOL OF EMPTY NODES /(008) LAC (POOL / BEFORE WE PROCEED /(008) CNTNODE DAC SPYADR /(008) CAL SPY / FOLLOW LISTHEADS, COUNTING NODES /(008) LAC SPYCON / GET FORWARD POINTER /(008) SAD (POOL / END OF POOL ALREADY? /(008) JMP NONODE / YES. ATTEMPT TO COMPLAIN /(008) ISZ COUNT /(008) JMP CNTNODE /(008) CAL SEEKFL / OPEN THE FILE TO BE TRANSFERRED JMS WTFOR / (OR DELETE IT) XCT SVTEST JMP TLOOP / NO TRANSFER OR CLOSE WHEN DELETING JMS TRANSF / MOVE IT CAL CLOSEF / CLOSE THE INPUT FILE JMS WTFOR JMP TLOOP / PROCESS THE NEXT FILE .EJECT FINISH CAL CLOSEN / CLOSE 'NAMES' FILE JMS WTFOR XCT SVTEST JMP EXIT / DELETION OF FILES COMPLETE CAL CLOSDT / CLOSE DECTAPE FILE JMS WTFOR CAL WRMSG1 / ANNOUNCE ARCHIVING COMPLETE CAL HINF JMS WTFOR / DON'T DELETE FILES AND (040000 / IF OUTPUT (DT) DEVICE IS SNA JMP NODLET / NOT FILE-ORIENTED / DZM NOT / ERASE 'NOT' PART OF DZM NOT+1 / 'FILES NOT DELETED' MESSAGE LAC (NOP DAC SVTEST / CLEAR 'SAVE' TEST LAC (3500 / CHANGE THE 'SEEK' TO 'DELETE' DAC SEEKFL JMP DLE1 / THEN DELETE ALL OF THE SPECIFIED FILES / NODLET CAL WRNODR / 'DEVICE ON LUN "DT" IS NOT FILE-ORIENTED' / EXIT CAL DLENAM / DELETE THE 'NAMES ...' FILE JMS WTFOR CAL WRMSG2 / 'FILES (NOT) DELETED' JMS WTFOR JMP* SAVE / THEN RETURN TO CALLING PROGRAM / .EJECT / SUBROUTINE TO CONVERT FROM .ASCII IN 'NLINE' TO .SIXBT IN THE / CPB USED FOR SEEKING THE FILE TO BE ARCHIVED / SEVTO6 XX LAC NLINE+2 / GET FIRST WORD OF .ASCII LMQ ECLA!LLSS 10 / SHIFT IN FIRST CHARACTER + 1 BIT OF 2ND RAR / THROW 7TH BIT AWAY LLSS 7 / 2ND + 1 BIT OF 3RD RAR / THROW AWAY THE BIT LLSS 3 / MSB OF 1ST CHAR NOW LOST; 1/2 OF 3RD FETCHED DAC NAME.1 / LAC NLINE+3 LMQ LAC NAME.1 LLSS 3 / OTHER 1/2 OF 3RD DAC NAME.1 / FIRST 3 CHARACTERS NOW READY LLSS 10 / 4TH CHARACTER RAR LLSS 6 / 5TH DAC NAME.2 LAC NLINE+4 LMQ ECLA!LLSS 1 LAC NAME.2 LLSS 6 / 6TH DAC NAME.2 / ECLA!LLSS 10 / 7TH RAR LLSS 3 / 1/2 OF 8TH DAC EXT LAC NLINE+5 LMQ LAC EXT LLSS 4 / 2ND 1/2 OF 8TH RAR LLSS 6 / 9TH DAC EXT / EXTENSION NOW READY JMP* SEVTO6 / .EJECT / SUBROUTINE TO CONVERT AN OCTAL (BINARY) NUMBER TO DECIMAL, SELECT THE / TWO LEAST SIGNIFICANT DIGITS, AND PLACE THEM IN THE AC & MQ / SO THAT SHIFTING LEFT BY 3 PLACES THEM IN THE AC (.SIXBT CODE). / / CALLING SEQUENCE: / / LAC BINVAL / JMS OCTDEC / (RETURN) / .SIXBT VALUES IN AC, MQ / OCTDEC XX DAC TRANSF LAW -4 DAC WTFOR / CONVERT 4 DIGITS LAC (DIVISR DAC FPADR1 LAC (ANS DAC FPADR2 .IFDEF FPP /(011) ILD; TRANSF CONVRT IDV;FPADR1 IST;FPADR2 / QUOTIENT IS NEXT CONVERTED DIGIT /*** UNSWQ; 0 / REMAINDER IS NEXT DIVIDEND IMP; I+FPADR1 /*** PROGRAM AROUND HARDWARE FAULT IRS; TRANSF /*** IST; TRANSF /*** END OF FUDGE .ENDC /(011) .IFDEF NOFPP /(011) CONVRT LAC* FPADR1 /(011) DAC DVISOR / GET NEXT DIVISOR /(011) LAC TRANSF /(011) CLL /(011) IDIV /(011) DVISOR XX /(011) DAC TRANSF / SAVE REMAINDER /(011) LACQ /(011) DAC* FPADR2 / SAVE PRODUCT (ANSWER DIGIT) /(011) .ENDC /(011) IDX FPADR1 / POINT TO NEXT DIVISOR IDX FPADR2 ISZ WTFOR JMP CONVRT .EJECT LAC ANS+3 / GET LEAST SIGNIFICANT ANSWER DIGIT XOR (60 / CONVERT TO .SIXBT ASCII CLQ!LRSS 6 / SHIFT INTO MQ LAC ANS+2 / GET OTHER DESIRED DIGIT XOR (60 / CONVERT IT TO .SIXBT ASCII LLSS 3 JMP* OCTDEC / LEAVE WITH ANSWER IN AC, MQ .IFDEF NOFPP /(011) FPADR1;FPADR2; .ENDC /(011) .DEC DIVISR 1000; 100; 10; 1 ANS .BLOCK 4; .OCT .EJECT / SUBROUTINE TO TRANSFER A FILE FROM 'DKF' TO 'DT' / TRANSF XX TR1 CAL READFL / READ A RECORD JMS WTFOR LAC FLINE AND (7 SAD (5 / CHECK FOR END OF FILE JMP ENDFILE CAL WRITE / WRITE IT TO DECTAPE JMS WTFOR JMP TR1 / ENDFILE CAL WREOF / '[\].' JMS WTFOR JMP* TRANSF / / SUBROUTINE TO WAIT FOR EVENT VARIABLE, AND COMPLAIN IF NOT OK. / WTFOR XX LAC EV / PERFORM QUICK CHECK SNA CAL WAITFR / ONLY WAIT WHEN NECESSARY LAC EV SPA SAD (-54 / OPEN FILE IS PROBABLY A BATCH JOB JMP* WTFOR SAD (-6 JMP* WTFOR / IGNORE UNIMPLEMENTED FUNCTIONS JMS* .IOERR / COMPLAIN ABOUT BAD EV / .EJECT / CAL PARAMETER BLOCKS AND BUFFER SPACE / SPY 31; 0;SPYADR;SPYCON /(008) RQNDCT 01; 0; .SIXBT 'NODCNT' ; 0 /(008) MK5S 13; EV; 5; 2 / MARK TIME FOR 5 SECONDS /(010) WAITFR 20; EV DATE 24; 0; .BLOCK 6 HINF 3600; EV; DT SEEKNM 3200; EV; DKN; .SIXBT 'NAMES@...' SEEKFL 3200; EV; DKF;NAME.1;NAME.2;EXT READNM 2600; EV; DKN; 2; NLINE; 6 READFL 2600; EV; DKF; 2; FLINE; 70 CLOSEN 3400; EV; DKN CLOSEF 3400; EV; DKF CLOSDT 3400; EV; DT ENTER 3300; EV; DT;DT.NM1;DT.NM2;DT.EXT WRNAME 2700; 0; DT; 2; NLINE WRITE 2700; EV; DT; 2; FLINE WREOF 2700; EV; DT; 2; EOF WRMSG1 2700; 0; TTY; 2; MSG1 WRMSG2 2700; EV; TTY; 2; MSG2 WRNODR 2700; 0; TTY; 2; NODIR DLENAM 3500; EV; DKN; .SIXBT 'NAMES@...' EOF 2002; 0; .ASCII '[\].'<15> MSG1 M1-.*400+2;EV; .ASCII '*** ARCHIVING FINISHED ***'<15> ;M1=. MSG2 M2-.*400+2;RQFLAG .ASCII '*** FILES ' NOT .ASCII 'NOT' / THIS IS USUALLY ZEROED BEFORE OUTPUT .ASCII ' DELETED ***'<15> ;M2=. TENS=DT/12 UNITS=TENS*12*777777+DT / NODIR ND-.*400+2;COUNT /(008) .ASCII 'LUN ' 60+TENS*200+60+UNITS*20; 0 .ASCII ' NOT FILE-ORIENTED'<15> ;ND=. SVTEST NOP NLINE .BLOCK 6 FLINE .BLOCK 70 MONTHS .SIXBT '@JA' .SIXBT '@FE' .SIXBT '@MR' .SIXBT '@AP' .SIXBT '@MY' .SIXBT '@JN' .SIXBT '@JL' .SIXBT '@AU' .SIXBT '@SE' .SIXBT '@OC' .SIXBT '@NV' .SIXBT '@DC' / .END [\]. TF1@@@SRC C .TITLE TF1 C C 1 AUG 78 - PAUL HENDERSON, UNIVERSITY OF WATERLOO C C WATRAN PROGRAM TO CREATE 150 SOURCE FILES TO DEBUG THE 'ARK' C TASK WHEN IT IS SUPPOSED TO BE COUNTING SMALL NODES. C INTEGER DK/27/,TT/4/ INTEGER INDEX/1/ CHARACTER*9 FNAME C 1 WRITE (TT,*) ' *** TDV>ASS 27 RK1' PAUSE 1 WRITE (TT,*) ' PROGRAM IS NOW EXECUTING' C DO 3 INDEX=1,150 WRITE (FNAME,99) INDEX CALL OPEN (DK,FNAME) DO 2 K=1,40 WRITE (DK,98) 2 CONTINUE CALL CLOSE (DK) 3 CONTINUE STOP 1 99 FORMAT ('A000 DAT',T1,I4) 98 FORMAT (' 1',T80,'XX') END [\]. TF2@@@SRC C .TITLE TF2 C C 12 SEP 78 (002; PDH) CONVERT FROM WATRAN TO DEC FORTRAN C 1 AUG 78 - PAUL HENDERSON, UNIVERSITY OF WATERLOO C C FORTRAN PROGRAM TO CREATE 150 SOURCE FILES TO DEBUG THE 'ARK' C TASK WHEN IT IS SUPPOSED TO BE COUNTING SMALL NODES. C INTEGER DK,TT INTEGER INDEX INTEGER HUNDS, TENS, ONES REAL FNAME(1) DATA DK/27/,TT/4/ C 1 WRITE (TT,299) PAUSE 1 WRITE (TT,298) C DO 3 INDEX=1,150 HUNDS = INDEX/100 TENS = (INDEX - HUNDS*100)/10 ONES = INDEX - HUNDS*100 - TENS*10 ENCODE (5,FNAME,99) HUNDS, TENS, ONES CALL ENTER (DK,FNAME(1),'DAT') DO 2 K=1,40 WRITE (DK,98) 2 CONTINUE CALL CLOSE (DK) 3 CONTINUE STOP 1 99 FORMAT ('A',3I1,' ') 98 FORMAT (' 1',T80,'XX') 299 FORMAT (' *** TDV>ASS 27 RK1') 298 FORMAT (' PROGRAM IS NOW EXECUTING') END [\]. UN.PCK002 .TITLE UN.PCK / / 4 JUL 78 (002; PDH) ADD ENTRIES 'UNP.SV' & 'UNP.RS' / 23 JUN 78 - PAUL HENDERSON / / ROUTINE TO UNPACK CHARACTERS, ONE AT A TIME. NO CHECK IS MADE / TO DETERMINE IF A LINE TERMINATOR HAS ALREADY BEEN PROCESSED / SINCE THE LAST INITIALIZATION CALL. / / CALLING SEQUENCES: / / 1) TO INITIALIZE - / / LAC (ADDRESS OF CHARACTERS TO BE UNPACKED / JMS* UNP.IN / (RETURN) / / 2) TO UNPACK A CHARACTER - / / JMS* UN.PCK / RETURNS WITH CHARACTER IN AC / (RETURN IF LINE TERMINATOR) / (NORMAL RETURN) / / 3) TO SAVE CURRENT STATUS - / / JMS* UNP.SV / ADDRESS OF 2-WORD SAVE-RESTORE BUFFER / (RETURN) / / 4) TO RESTORE A PREVIOUS STATUS - / / JMS* UNP.RS / ADDRESS OF 2-WORD SAVE-RESTORE BUFFER / (RETURN) IDX=ISZ / INDEX A POINTER (NEVER SKIPS) .EJECT .GLOBL UNP.IN UNP.IN XX DAC BUFADR / SAVE POINTER TO INPUT BUFFER ADDRESS LAC (FIRSTC DAC SWING / SET UP BRANCH ADDRESS JMP* UNP.IN BUFADR .GLOBL UNP.SV /(002) UNP.SV XX /(002) LAC* UNP.SV / FETCH SAVE AREA ADDRESS /(002) IDX UNP.SV / INDEX TO RETURN ADDRESS /(002) DAC UNP.IN / HANDY LOCATION FOR POINTER /(002) LAC BUFADR /(002) DAC* UNP.IN / SAVE LINE BUFFER ADDRESS /(002) IDX UNP.IN /(002) LAC SWING /(002) DAC* UNP.IN / SAVE 'SWING' ADDRESS /(002) JMP* UNP.SV /(002) .GLOBL UNP.RS /(002) UNP.RS XX /(002) LAC* UNP.RS / GET SAVE AREA ADDRESS /(002) IDX UNP.RS /(002) DAC UNP.IN / HANDY LOCATION FOR POINTER /(002) LAC* UNP.IN /(002) IDX UNP.IN /(002) DAC BUFADR / RESTORE LINE BUFFER ADDRESS /(002) LAC* UNP.IN /(002) DAC SWING /(002) JMP* UNP.RS /(002) .EJECT .GLOBL UN.PCK UN.PCK XX LAC* BUFADR / GET WORD TO BE PROCESSED JMP* SWING / GO PROCESS IT SWING FIRSTC AND (177 / CHOP TO 7 BIT CHARACTER SAD (15 / CHECK FOR CARRIAGE RETURN SKP SAD (175 / AND FOR ALT MODE JMP* UN.PCK / LINE TERMINATOR EXIT IDX UN.PCK / INDEX TO NORMAL EXIT JMP* UN.PCK FIRSTC LRS 13 JMS SWING ..2 LRS 4 JMS SWING ..3 DAC SWING / HANDY PLACE FOR TEMPORARY STORAGE IDX BUFADR / INDEX TO 2ND WORD OF PAIR LAC* BUFADR LMQ LAC SWING / RETRIEVE FRONT OF SPLIT CHARACTER LLS 3 / UNSPLIT IT JMS SWING ..4 LRS 10 JMS SWING ..5 IDX BUFADR / INDEX TO NEXT WORD PAIR RAR JMS SWING JMP FIRSTC .END [\].