/ DIRECTORY UTILITY FOR P?S/8 / LAST EDIT: 03-SEP-1987 16:00:00 CJL / MUST BE ASSEMBLED WITH '/J' SWITCH SET. / DIRECTORY LISTING UTILITY FOR P?S/8 FIXED FILES CATALOG, EXTENDED FILES / DIRECTORY, AND SYSTEM PROGRAMS DIRECTORY. / USAGE: / .[R ]DIRECT (SWITCH OPTIONS) (OPTIONAL SEARCH STRING) / SWITCH OPTIONS: / /A REPORT ONLY ASCII TYPE FILES. DEFAULT IS ALL FILE TYPES AND EMPTY / SLOTS. SEE /B, /E, /I, /Q. THESE FILES WILL PRINT IF /I IS / NOT INVOKED. / /B REPORT ONLY BINARY TYPE FILES. DEFAULT IS ALL FILE TYPES AND EMPTY / SLOTS. SEE /A, /E, /I, /Q. THESE FILES WILL PRINT IF /I IS / NOT INVOKED. / /D REPORT FILE (OR EMPTY SLOT) STARTING BLOCK IN DECIMAL. DEFAULT / IS NO BLOCK INFORMATION. / /E REPORT ONLY EMPTY SLOTS. DEFAULT IS ALL FILE TYPES AND EMPTY SLOTS. / SEE /A, /B, /D, /I, /O, /Q. / /F OUTPUT CHARACTER AS PAGE DELIMITER. DEFAULT IF OUTPUT IS TO / THE SYSTEM LINE-PRINTER. IF NOT INVOKED AND OUTPUT IS TO THE CONSOLE / TERMINAL, USE HASH LINE AS PAGE DELIMITER. / /H NO HEADERS ON OUTPUT. ONLY THE CURRENT DATE WILL BE OUTPUT BEFORE / THE FILE LINES, ETC. DEFAULT IS A DESCRIPTIVE HEADER ON EACH PAGE. / /I DON'T IDENTIFY FILE TYPE. DEFAULT IS TO INDICATE WHETHER FILE (OR / EMPTY SLOT) IS ASCII , BINARY , OR UNKNOWN . SEE / /A, /B, /E, /Q. / /L FILE NAMES (AND EMPTY SLOTS) ARE REPORTED IN LINEAR ORDER (ACCORDING / TO ASCENDING STARTING BLOCK NUMBER). DEFAULT IS AN ASCENDING SORT / BY FILE NAME (EMPTY SLOTS REPORTED LAST SORTED BY BLOCK NUMBER). / /N NO PAGINATION ON OUTPUT. / /O REPORT FILE (OR EMPTY SLOT) STARTING BLOCK IN OCTAL. DEFAULT IS / NO BLOCK INFORMATION. / /P PAUSE BETWEEN OUTPUT PAGES. THREE CHARACTERS WILL BE SENT / TO THE CONSOLE TERMINAL TO INDICATE THE PAUSE. HITTING ON THE / CONSOLE KEYBOARD WILL RESUME THE OUTPUT. / /Q REPORT ONLY FILE TYPES OTHER THAN ASCII, BINARY. DEFAULT IS ALL / FILE TYPES AND EMPTY SLOTS. SEE /A, /B, /E, /I. THESE FILES WILL / PRINT IF /I IS NOT INVOKED. / /R DON'T REPORT AVAILABLE AND TOTAL SLOT RESOURCES. DEFAULT IS TO / REPORT AVAILABLE AND TOTAL SLOT INFORMATION. / /S OUTPUT SYSTEM DIRECTORY INFORMATION. DEFAULT IS FILES DIRECTORY / INFORMATION. IF /S IS INVOKED, THE FOLLOWING SWITCHES WILL BE IGNORED: / /A, /B, /D, /E, /H, /I, /L, /O, /Q, /R, /V, /X. THE =NNNN PARAMETER / WILL BE VALIDATED BUT NOT USED. THE SEARCH STRING WILL BE VALIDATED / BUT NOT USED. SEE SYSTEM DIRECTORY DESCRIPTION FOR MORE INFORMATION. / /T OUTPUT TO CONSOLE TERMINAL. DEFAULT IS TO USE THE LINE-PRINTER IF / AVAILABLE ELSE ALL OUTPUT IS ROUTED TO THE CONSOLE TERMINAL. ERROR / MESSAGE PRINTOUT IS ALWAYS SENT TO THE CONSOLE TERMINAL. / /U OUTPUT IN UPPER CASE ONLY. DEFAULT IS UPPER/LOWER CASE OUTPUT. / /V DON'T OUTPUT FILE NAMES WITH VERTICAL ORIENTATION. IF /V IS INVOKED / WITH /L, THE FILE NAMES WILL APPEAR HORIZONTALLY IN THE ORDER OF / OCCURRENCE ON THE SPECIFIED DEVICE. IF /V IS NOT INVOKED, ALL OUTPUT / CHANGES TO BALANCED-LENGTH VERTICAL COLUMNS. / /X OUTPUT EXTENDED DIRECTORY INSTEAD OF CATALOG. THE FOLLOWING SWITCHES / WILL BE IGNORED: /A, /B, /I, /Q, /R. OTHER SWITCHES MAY HAVE ALTERNATE / MEANING. NOT IMPLEMENTED AT THIS TIME. / /0-/7 LOGICAL UNIT FOR DIRECTORY LISTING. DEFAULT VALUE IS THE SYSTEM / BOOTSTRAP UNIT. / =NNNN USE NNNN COLUMNS PER PAGE. DEFAULT IS 3. MAXIMUM IS 74 (112 OCTAL). / FILE EXCLUSION SWITCHES (ASSUMING /S, /X ARE NOT INVOKED). / THE DEFAULT ACTION IS TO ALLOW ALL FILE TYPES AND EMPTY SLOTS TO BE ELEGIBLE / FOR PRINTOUT. USE OF ANY OF THESE SWITCHES: / /A FOR ASCII FILES / /B FOR BINARY FILES / /E FOR EMPTY SLOTS / /Q FOR FILES OTHER THAN ASCII OR BINARY (UNKNOWN) / WILL EXCLUDE ALL FILE TYPES (OR EMPTY SLOTS) WHOSE OPTION SWITCHES ARE NOT / EXPLICITLY GIVEN. / INVOKING /A/B/E/Q IS EQUIVALENT TO INVOKING NONE OF THESE OPTION SWITCHES. / OPTIONAL SEARCH STRING. / AN OPTIONAL SEARCH STRING CAN BE GIVEN (IF PRESENT, IT MUST BE LAST ON THE / COMMAND LINE PAST ALL OPTION SWITCHES) TO LIMIT PRINTOUT TO THOSE FILES / "MATCHING" THE SEARCH STRING. THE STRING CAN CONSIST OF ANY COMBINATION / OF VALID P?S/8 FILE NAME CHARACTERS ("A", "B", "C", "D", "E", "F", "G", / "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", / "V", "W", "X", "Y", "Z", "[", "\", "]", "^", "0", "1", "2", "3", "4", "5", / "6", "7", "8", "9"), AND THE SPECIAL CHARACTERS: "*", "?", AND AT MOST A / SINGLE OCCURRENCE OF THE SPECIAL CHARACTER: ".". ALL IMBEDDED SPACE CHARACTERS / AND HORIZONTAL TABS ARE IGNORED. / TO QUALIFY FOR PRINTOUT, A FILE NAME MUST MATCH THE SEARCH STRING EXACTLY. / TO ALLOW FOR "WILD CARD" CAPABILITY, THE SPECIAL CHARACTERS "?" AND "*" / CAN BE USED. THE "?" CHARACTER MATCHES ANY ONE CHARACTER IN A FILE NAME. / THE CHARACTER MUST BE PRESENT, UNLESS THE "?" IS PART OF A SERIES OF "?" / CHARACTERS RIGHT-MOST IN THE SEARCH STRING. FOR EXAMPLE: / .DIRECT FOO??? / THIS WOULD MATCH FILE NAMES: "FOO", "FOOD", "FOOLS", AND "FOOBAR". / THE "*" CHARACTER IS USED TO MATCH AN ARBITRARY NUMBER OF FILE NAME CHARACTERS / FROM NONE THROUGH THE ENTIRE NAME IF NECESSARY. FOR EXAMPLE: / .DIRECT * / THIS WOULD MATCH ANY FILE NAME (AS IF THE SEARCH STRING WERE NOT INVOKED / AT ALL!). / .DIRECT F* / THIS WOULD MATCH FILE NAMES: "F", "FOO", AND "FOOBAR". / .DIRECT F*R / THIS WOULD MATCH FILE NAMES: "FR", "FAR", AND "FOOBAR". / THE SPECIAL CHARACTER "." MAY BE GIVEN AT THE END OF THE SEARCH STRING / OPTIONALLY FOLLOWED BY AN ADDITIONAL STRING USING ALL OTHER VALID SEARCH / CHARACTERS; THE "." CHARACTER ITSELF MUST NOT BE REPEATED. THE "." CHARACTER / IS USED TO INDICATE AN "EXTENSION" (ALSO KNOWN AS A "QUALIFIED NAME"), / WHICH IS NOT IMPLEMENTED AT THIS TIME. DUE TO CURRENT IMPLEMENTATION / RESTRICTIONS, THE P?S/8 FILE NAME STRUCTURE IS LIMITED TO AT MOST SIX / CHARACTERS WITHOUT EXTENSION, SO THE SCOPE OF USEFUL COMMANDS MUST BE / LIMITED TO THIS AMOUNT. THE EXTENSION STRING (IF GIVEN) WILL BE IGNORED, / OTHER THAN VALIDATION OF ITS SYNTAX. FUTURE IMPLEMENTATION PLANS FOR P?S/8 / INCLUDE UPGRADING THE FILE NAMES TO A FORM: / LONGASSEMBLYFILE.MAC8 16 CHARACTER FILE NAMES WITH 4 CHARACTER EXTENSIONS / PROGRAM OUTPUT. / CATALOG-ORIENTED PRINTOUT. / RUNNING DIRECT (WITHOUT /S, /X) PRODUCES THE FOLLOWING OUTPUT: / DIRECTORY OF SYSN: DIRECT V10B FRIDAY 03-JUL-87 PAGE 1 REQUESTED UNIT / [0-7], VERSION, / REVISION, / DAY, DATE, / PAGE NUMBER / FOOBAR 1000 FILE NAME, ID, / STARTING BLOCK / 1020 FREE SLOT, ID, / STARTING BLOCK / 1040 FREE SLOT, ID, / STARTING BLOCK / BARFOO 1060 FILE NAME, ID, / STARTING BLOCK / 2 FILES FILE COUNT / 2 FREE FILE SLOTS IMBEDDED FREE / SLOT COUNT / 80 AVAILABLE FILE SLOTS TOTAL FREE / SLOT COUNT / 84 TOTAL FILE SLOTS TOTAL SLOTS / SYSTEM DIRECTORY-ORIENTED OUTPUT. / RUNNING DIRECT WITH /S PRODUCES THE FOLLOWING OUTPUT: / P?S/8 SYSTEM DIRECTORY DIRECT V10B FRIDAY 03-JUL-87 PAGE 1 VERSION, / REVISION, / DAY, DATE, / PAGE NUMBER / SYSTEM: TC08:0 DEVICE, UNIT / IMAGE INFORMATION: HEADER / NAME BLOCK SIZE LOAD LENGTH OUT IN R S O START HEADER / ODT 0163 016 0000 16 GENO GENI 0 0 0 03000 ODT ENTRY / BATCH 0201 002 7400 01 BAT 0 0 0 07400 BATCH ENTRY / BIN 0203 027 0000 13 BIN BIN 0 0 0 00200 BIN ENTRY / [OTHER SPECIFIC SYSTEMS INFORMATION AS NECESSARY] / BBBB NNN FIRST FREE / BLOCK, SIZE / FREE SLOTS: NNN FREE / DIRECTORY / SLOTS / EXPLANATION OF SYSTEM DIRECTORY PARTICULARS. / NAME SYSTEM PROGRAM NAME / BLOCK FIRST LOADING BLOCK OF SYSTEM PROGRAM / SIZE OVERALL SIZE OF SYSTEM PROGRAM INCLUDING OVERLAYS, ETC. / LOAD SIZE OF INITIALLY LOADED PROGRAM SEGMENT / OUT DEFAULT OUTPUT EXTENSION FOR EXTENDED DIRECTORY FILES / IN DEFAULT INPUT EXTENSION FOR EXTENDED DIRECTORY FILES / R EQUALS PARAMETER RADIX DISPOSITION: 0=USE OCTAL, 1=USE CURRENT RADIX / S SCAN FILES DISPOSITION: 0=ALLOW FILE SCAN, 1=PREVENT FILE SCAN / O SCAN OUTPUT FILES DISPOSITION: 0=NORMAL, 1=ALLOW OUTPUT FILES ONLY / IF SIZE AND LOAD DIFFER, THE SYSTEM PROGRAM CONTAINS OVERLAYS OR IMBEDDED / BUFFER AREAS. SEE SPECIFIC SYSTEM PROGRAM DOCUMENTATION FOR MORE DETAILS. / DEFAULT EXTENSIONS ARE PROVIDED WHERE APPLICABLE ONLY. NULL ENTRIES GENERALLY / IMPLY THE LACK OF (INPUT OR OUTPUT) FILES WHEN NORMALLY INVOKING THE SPECIFIED / SYSTEM PROGRAM. / THE "O" ENTRY IS IGNORED IF THE "S" ENTRY IS SET. / AVAILABLE DEFAULT FILE EXTENSION TYPES. / THE CURRENTLY IMPLEMENTED DEFAULT FILE EXTENSION TYPES ARE: / (NULL) (00) NO DEFAULT FILE TYPE / ASC (01) ASCII FILE / BAT (02) BATCH FILE / BIN (03) BINARY FILE / DUMP (04) DUMP FILE / FOC (05) FOCAL FILE / GENI (06) GENERAL INPUT FILE / GENO (07) GENERAL OUTPUT FILE / PAL (10) PAL FILE / ONE FILE TYPE FOR INPUT MAY BE COMBINED WITH ONE FILE TYPE FOR OUTPUT. / INPUT AND OUTPUT FILE TYPES MAY BE DIFFERENT; CERTAIN COMBINATIONS ARE / NOT IMPLEMENTED. / **** GENERAL IMPLEMENTATION NOTE **** / SINCE EXTENDED FILES ARE NOT IMPLEMENTED AT THIS TIME, ALL EXTENSIONS, BOTH / DEFAULT AND EXPLICIT ARE NOT AVAILABLE. SYSTEM PROGRAM COMMANDS DO NOT / ACCEPT FILE EXTENSIONS AT THIS TIME. / EXTENDED DIRECTORY-ORIENTED OUTPUT. / **** GENERAL IMPLEMENTATION NOTE **** / SINCE EXTENDED FILES ARE NOT IMPLEMENTED AT THIS TIME, THE /X OPTION WILL / BE IGNORED. FUTURE IMPLEMENTATIONS WILL HONOR THE /X SWITCH TO PRODUCE / EXTENDED DIRECTORY FILE PRINTOUT. / ERROR MESSAGES. / THERE ARE SEVERAL FATAL ERRORS. ALL ERRORS EXIT TO THE MONITOR AFTER PRINTING / ONE OF THE FOLLOWING MESSAGES: / MULTIPLE PERIOD CHARACTERS IN SEARCH STRING! / MORE THAN ONE PERIOD CHARACTER WAS PASSED IN THE SEARCH STRING. / ONLY ONE PERIOD CHARACTER IS ALLOWED IN THE SEARCH STRING TO / SEPARATE THE FILE NAME STRING FROM THE EXTENSION STRING. / SEARCH STRING TOO LONG! / THE SEARCH STRING EXCEEDED THE BUFFER PROVIDED FOR IT. THE MAXIMUM / SEARCH STRING LENGTH IS 36 CHARACTERS. THIS MESSAGE INDICATES THE / EXCESSIVE USE OF SEARCH STRING CHARACTERS WHICH ARE EXTRANEOUS TO / EFFECTIVE SEARCH FUNCTION. DUE TO THE LIMITED LENGTH OF FILE NAMES, / ALL EFFECTIVE SEARCH STRING COMBINATIONS CAN BE ACHIEVED WITHIN / THE CONFINES OF THIS MINOR LIMITATION. / TOO MANY COLUMNS! / THE COLUMN COUNT REQUESTED IS BEYOND THE MAXIMUM ALLOWED. USE SMALLER / COLUMN COUNT (VIA THE EQUALS PARAMETER, DEFAULT IS 4). THE MAXIMUM / COLUMN COUNT ALLOWED IS 74 (112 OCTAL). / IMPLEMENTATION NOTES AND CUSTOMIZATION. / IT MAY BE DESIRABLE TO CUSTOMIZE ANY PARTICULAR COPY OF DIRECT TO THE USER'S / OWN PREFERENCE REGARDING CERTAIN SWITCHES. FOR EXAMPLE, A USER MAY PREFER / A HORIZONTAL DIRECTORY PRINTOUT, RATHER THAN THE DEFAULT VERTICAL PRINTOUT. / OPTION SWITCHES CONTROLLING THIS AND OTHER ASPECTS OF DIRECT ARE AVAILABLE / TO CUSTOMIZE THE OPERATIONS OF THE PROGRAM, BUT THESE REQUIRE THE USER TO / INVOKE FAVORED OPTIONS REPEATEDLY. / SEVERAL KNOWN OPERATING SYSTEMS SUPPORT "PATCHED" VERSIONS OF SYSTEM PROGRAMS / WHICH EFFECTIVELY FORCE THE EFFECT OF OPTION SWITCHES WHETHER EXPLICITLY / GIVEN OR NOT. THIS PREVENTS THE POSSIBILITY OF USING THE PROGRAM IN THE / ORIGINAL WAY AS THERE IS NO METHOD TO REVERT THE ENFORCED OPTION. / TO OVERCOME THIS LIMITATION, THE USER CAN PATCH THE FIRST THREE WORDS OF / THE CORE IMAGE OF DIRECT ITSELF WITH A "MASK" (EACH BIT CORRESPONDS TO AN / OPTION SWITCH SERIALLY FROM /A-/Z FOLLOWED BY /0-/9). (IMPLEMENTATION NOTE: / THE CORE IMAGE OF DIRECT ACTUALLY STARTS WITH SEVERAL PAGES OF ONCE-ONLY / CODE. THE FIRST PAGE OF THE RUNNING DIRECT PROGRAM CAN BE OBTAINED BY / CALCULATING THE VALUE OF THE SYMBOL "PZ" (WHICH STANDS FOR PAGE ZERO) AND / SUBTRACTING 2600 (THE ACTUAL LOADING ADDRESS OF DIRECT) FROM IT, THEN / DIVIDING BY 200 TO OBTAIN THE NUMBER OF PAGES. THIS PAGE COUNT SHOULD BE / ADDED TO THE BLOCK, INDICATED BY DIRECT (USING /S) AS THE STARTING BLOCK / OF DIRECT, TO OBTAIN THE ACTUAL BLOCK TO PATCH.) THIS MASKING VALUE WILL / BE USED TO "REVERSE" THE EFFECT OF THE SPECIFIED SWITCH. FOR EXAMPLE: SETTING / RELATIVE WORD ONE OF THE CORE IMAGE OF DIRECT TO 0004 WILL REVERSE THE /V / OPTION. THIS WOULD REQUIRE THE USER TO INVOKE /V IF THE VERTICAL PRINTOUT / WERE DESIRED, OPPOSITE TO NORMAL CONVENTION. ALL SWITCHES CAN BE "REVERSED" / ACCORDINGLY (INCLUDING OPTION SWITCHES IGNORED BY DIRECT!). THE RESULTANT / CUSTOMIZED COPY OF DIRECT OPERATES IN A TOTALLY CONVENTIONAL MANNER; ONLY / THE METHOD OF PASSING SWITCH OPTIONS CHANGES. / EQUATED SYMBOLS. // DEFINITIONS FROM P?S/8. BSGRP= 0003 /BASE GROUP NUMBER FOR SYSTEM DATE WORD CATADR= 7000 /CATALOG ADDRESS DIR= 0015 /USER DIRECTORY BLOCK FILBEG= 3000 /FILE BUFFER GETHAF= 0104 /GET A HALF-WORD GETNDX= 0026 /GET HALF-WORD INDEX HIDWRD= 7600 /SYSTEM HANDLER ID NUMBER WORD INCON= 0031 /EQUATED FROM CONSOLE! KEPRADX=0040 /KEEP CURRENT RADIX BIT VALUE LPMODE= 0004 /LPT: BUFFERING MODE NOSCAN= 0100 /DON'T SCAN FILES BIT VALUE OUTCON= 0033 /EQUATED FROM CONSOLE! OUTLPT= 0035 /EQUATED FROM CONSOLE! PUTBASE=0131 /PUT HALF-WORD BASE PUTHAF= 0132 /PUT HALF-WORD ROUTINE PUTNDX= 0060 /PUT HALF-WORD INDEX SBOOT= 7600 /SYSTEM BOOTSTRAP ADDRESS SBTFUN= 7602 /SYSTEM BOOTSTRAP FUNCTION SCRSIZE=7611 /MONITOR CORE SIZE WORD SDATE= 7610 /SYSTEM DATE WORD SPARM= 7756 /SYSTEM EQUALS PARAMETER SWAL= 7604 /SWITCHES /A-/L HERE SWMX= 7605 /SWITCHES /M-/X HERE SWY9= 7606 /SWITCHES /Y-/9 HERE SYSCAT= 0063 /SYSTEM CATALOG BLOCK SYSLEN= 0004 /SYSTEM CATALOG LENGTH SYSIO= 7640 /SYSTEM I/O ENTRY TRPBLK= 0113 /I/O TRAP BLOCKS TTY= 0003 /CONSOLE DEVICE CODE // OTHER DEFINITIONS. DEFCOLS=3 /DEFAULT NUMBER OF COLUMNS DEFSIZE=40 /DIRECTORY EXTENSION TABLE SIZE JMSC= JMS . /CURRENT PAGE JMS INSTRUCTION LPT= 66 /LPT: DEVICE CODE MAXCOLS=112 /MAXIMUM WIDTH IN COLUMNS MAXEN= 124 /MAXIMUM CATALOG ENTRIES NL0001= CLA IAC /LOAD AC WITH 0001 NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 NL2000= CLA CLL CML RTR /LOAD AC WITH 2000 NL4000= CLA CLL CML RAR /LOAD AC WITH 4000 NL7775= CLA CLL CMA RTL /LOAD AC WITH 7775 NL7776= CLA CLL CMA RAL /LOAD AC WITH 7776 NL7777= CLA CMA /LOAD AC WITH 7777 REVISIO="B&77 /REVISION LETTER STRLEN= 44 /36 CHARACTERS MAXIMUM IN SEARCH STRING VERSION=12 /VERSION NUMBER / DEPENDENT DEFINITIONS. FILBUFF=FILBEG /FILE I/O BUFFER FILCORE=FILBUFFER /FILE I/O BUFFER JMSSYSI=SYSIO&177+JMSC /CALL TO SYSIO FROM ITS PAGE KEYCODE=TTY^10+6000 /SKELETON KEYBOARD CODE LPTCODE=LPT^10+6000 /SKELETON LINEPRINTER CODE PRTCODE=TTY+1^10+6000 /SKELETON TELEPRINTER CODE KCCIOT= KEYCODE+2 /CLEAR KEYBOARD FLAG, AC, SET READER RUN KRBIOT= KEYCODE+6 /CLEAR KEYBOARD FLAG, LOAD CHARACTER INTO AC, /SET READER RUN KRSIOT= KEYCODE+4 /OR CHARACTER INTO AC, DON'T CLEAR KEYBOARD FLAG KSFIOT= KEYCODE+1 /SKIP ON KEYBOARD FLAG LLSIOT= LPTCODE+6 /LOAD PRINTER FROM AC, CLEAR FLAG LSFIOT= LPTCODE+1 /SKIP ON PRINTER FLAG TLSIOT= PRTCODE+6 /LOAD OUTPUT BUFFER, CLEAR FLAG TSFIOT= PRTCODE+1 /SKIP ON OUTPUT FLAG / EXTENSION DEFINITIONS. NUL= 0 /NO FILE TYPE PRESENT ASC= 1 /ASCII FILE TYPE BAT= 2 /BATCH FILE TYPE BIN= 3 /BINARY FILE TYPE DUMP= 4 /DUMP FILE TYPE FOC= 5 /FOCAL FILE TYPE GENI= 6 /GENERAL INPUT FILE TYPE GENO= 7 /GENERAL OUTPUT FILE TYPE PAL= 10 /PAL FILE TYPE PAGE 13 /OVER MONITOR AND FILE AREA / COMES HERE TO CONTINUE THE ONCE-ONLY CODE INITIATED AT DIRECT. DIRLOAD=. /DIRECT STARTS LOADING HERE NOCONSO,TAD I PSWMX/[SWMX] /GET SWITCHES /M-/X AND L10/[10] /JUST /U BIT LPTMOUT,SNA CLA /SKIP IF SET JMP TESTN /JUMP IF NOT TAD L7600/[CLA!400] /GET CLA INSTRUCTION DCA I (CASZP1) /PREVENT LOWER-CASE TAD L7600/[CLA!400] /GET CLA INSTRUCTION DCA I (CASZP2) /PREVENT LOWER-CASE TESTN, NL2000 /SETUP /N MASK AND I PSWMX/[SWMX] /GET /N BIT SNA CLA /SKIP IF SET JMP TESTMPERIODS /JUMP IF NOT DCA I (NPZAP1) /PREVENT LAST PAGINATION DCA I (NPZAP2) /PREVENT EVERY OTHER PAGINATION TAD L7600/[CLA!400] /PREVENT OPENING DCA NPZAP3 / ON LPT: BUFZP1, SKP /**** CONSOLE: AND LOG-LPT: BUFFERING **** 0000 DCA BUFZP2 /ENABLE LOG-LPT: ZAP TESTMPE,TAD XR3 /GET PERIOD SWITCH SMA CLA /SKIP IF TOO MANY PERIODS JMP TESTDANGER /JUMP IF NOT JMS CSCRIBE /COMPLAIN OF DPERR /MULTIPLE PERIODS TESTDAN,TAD TOTSLTS /GET DANGER SWITCH SPA CLA /SKIP IF BAD JMP TSTPARM /JUMP IF NOT JMS CSCRIBE /COMPLAIN OF SLERR /STRING LENGTH ERROR TSTPARM,JMS I (EQUACHK) /CHECK EQUALS PARAMETER TAD I PSWMX/[SWMX] /GET SWITCHES /M-/X AND L20/[20] /JUST /T SZA CLA /SKIP IF NOT SET JMP LPFAIL /DON'T TEST FOR LPT: LNL7777,NL7777 /SET SPECIAL VALUE OUTINIT,LLSIOT /**** CONSOLE: **** JMS LPWAIT CLA /CLEAN UP TAD L40/[" &177] /GET A LPTJMSL,JMS LPWAIT /TRY TO PRINT IT TAD L40/[" &177] /GET A JMS LPWAIT /TRY TO PRINT IT TAD L15/["M&37] /GET A JMS LPWAIT /TRY TO PRINT IT DCA LPTMZAP /WAIT FROM NOW ON TAD L40/[" &177] /GET A JMS LPWAIT /PRINT IT TAD L15/["M&37] /GET A JMS LPWAIT /PRINT IT TAD L12/["J&37] /GET A JMS LPWAIT /PRINT IT TAD L14/["L&37] /GET A NPZAP3, JMS LPWAIT /**** /N **** CLA!400 JMS ZAPFF /DO ZAPS LOGZAP, SKP /**** CONSOLE: **** 0000 JMP LLZAPS /DO LOGICAL LPT: ZAPS TAD LPCHK/(LSFIOT) /GET "LSFIOT" DCA P7TSF /STORE OVER "TSFIOT" TAD LPRNT/(LLSIOT) /GET "LLSIOT" DCA P7TLS /STORE OVER "TLSIOT" LPFAIL, TAD I PSWAL/[SWAL] /GET SWITCHES /A-/L AND L100/[100] /JUST /F BIT SZA CLA /SKIP IF OFF JMS ZAPFF /DO ZAPS EVEN IF CONSOLE OUTPUT GETDATE,TAD I (SDATE) /GET SYSTEM DATE WORD JMS I PDIVIDE/[DIVIDE]/DIVIDE 564 /BY 372 JMP I (YEAR) /CONTINUE THERE LLZAPS, TAD (JMS OUTLPT) /GET LPT: OUTPUT CALL DCA P7JMP /STORE OVER "JMS OUTCON" BUFZP2, SKP /**** LOG-LPT: AND BUFFERING AND /N **** 0000 DCA I (BUFZP3) /ENABLE OUTPUT AT END OF PRINTOUT JMP LPFAIL /CONTINUE THERE CSCRIBE,.-. /CONSOLE-ORIENTED PRINT ROUTINE TAD (CPRINT) /POINT TO THE DCA OUTPUT /CONSOLE OUTPUT ROUTINE TAD I CSCRIBE /GET OUR PASSED ARGUMENT DCA I (SBOOT-1) /STORE IN CURIOUS PLACE TAD (SBOOT-1) /POINT TO CURIOUS PLACE DCA I PSCRIBE/[SCRIBE]/SO IT WILL USE IT JMP I (SCRIBE+1) /CONTINUE THERE LPWAIT, .-. /LPT: TIME-OUT ROUTINE DCA ZAPFF /SAVE PASSED VALUE LPAGN, TAD ZAPFF /GET IT BACK LPCHK, LSFIOT /**** CONSOLE: **** CIF MCS+10 LPJMP, JMP LPTIME /**** CONSOLE: **** JMS OUTLPT LPRNT, LLSIOT /**** CONSOLE: **** JMP LPTIME TAD L7700/[7700] /RESET THE DCA LPTMOUT /TIME-OUT COUNTER JMP I LPWAIT /RETURN LPTIME, ISZ I PDIVIDE/[DIVIDE]/WASTE JMP LPTIME /SOME TIME CLA /CLEAN UP LPTMZAP,ISZ LPTMOUT /**** ZAPPED **** 0000 JMP LPAGN /TRY AGAIN JMP LPFAIL /GIVE UP AND USE CONSOLE ZAPFF, .-. /-ORIENTED ZAP ROUTINE DCA I (DOFF) /PREVENT 'S AT TRAILING END OF PAGE TAD LNL7777/(NL7777)/SETUP FOR DCA I (LPZAP1) /ONE SEPARATOR DCA I (LPZAP2) /NO EXTRA CHARACTERS AFTER LAST DCA I (LPZAP4) /PREVENT EXTRA 'S AFTER DCA I (FFWAT1) /ENABLE PAGE WAIT DCA I (FFWAT2) /PREVENT NORMAL PAGE WAIT TAD L14/["L&37] /GET A DCA LSEP /USE INSTEAD OF "-" AS PAGE SEPARATOR JMP I ZAPFF /RETURN PAGE /GETDAT,TAD I (SDATE) /GET SYSTEM DATE WORD / JMS I PDIVIDE/[DIVIDE]/DIVIDE / 564 /BY 372 YEAR, DCA YEAR /SAVE QUOTIENT AS YEAR TAD REM /GET DAYS LEFT IN YEAR JMS I PDIVIDE/[DIVIDE]/DIVIDE 37 /BY 31 MONTH, DCA MONTH /SAVE MONTH (ORIGIN ZERO) NL0001 /MAKE ORIGIN ONE TAD REM /GET DAY OF THE MONTH DAY, DCA DAY /SAVE IT TAD YEAR /GET THE YEAR TAD L3/[3] /ROUND UP FOR LEAP YEARS CLL RAR /DIVIDE CLL RAR /BY FOUR LPYRCT, DCA LPYRCT /SAVE AS EXTRA LEAP DAYS COUNT TAD YEAR /GET THE YEAR AGAIN AND L3/[3] /JUST LEAP BITS SNA CLA /SKIP IF NOT A LEAP YEAR ISZ FEBENT /BUMP FEBRUARY IF IT IS TAD MONTH /GET THE MONTH CMA /INVERT FOR COUNTING MONCNT, DCA MONCNT /SAVE IT JMP .+3 /JUMP INTO IT TAD I ENTPTR /GET A PREVIOUS MONTH'S COUNT ISZ ENTPTR /BUMP TO NEXT ISZ MONCNT /DONE ENOUGH MONTHS? JMP .-3 /NO, GO DO ANOTHER ONE TAD DAY /ADD ON DAY TAD YEAR /ADD ON YEAR TAD LPYRCT /ADD ON EXTRA LEAP DAYS TAD BSGROUP /\ TAD BSGROUP / >ADD ON BASE INFLUENCE TAD BSGROUP // JMS I PDIVIDE/[DIVIDE]/DIVIDE BY 7 TO GET 7 /THE DAY OF THE WEEK CLA /THROW QUOTIENT AWAY TAD REM /GET THE REMAINDER CLL RAL /*2 TAD REM /*3 RAL /*6 TAD (DAYS-1) /POINT TO PROPER DAY BLURB DCA XR1 /STASH THE POINTER TAD (DBLURB-1) /POINT TO DCA XR2 /DAY STORAGE TAD L7772/[-6] /SETUP THE CNT, DCA CNT /MOVE COUNTER TAD I XR1 /GET A WORD DCA I XR2 /PUT A WORD ISZ CNT /DONE YET? JMP .-3 /NO, GO BACK TAD (DATMSG-1) /POINT TO DCA XR2 /DAY NUMBER STORAGE TAD DAY /GET DAY OF THE MONTH JMS I PDIVIDE/[DIVIDE]/DIVIDE BY TEN TO 12 /GET TEN'S DIGIT TAD L60/["0&77] /MAKE IT ASCII CLL RTL;RTL;RTL /MOVE UP TAD REM /ADD ON UNIT'S DIGIT TAD L60/["0&77] /MAKE IT ASCII ALSO DCA I XR2 /STORE INTO THE MESSAGE ISZ XR2 /BUMP PAST FIXED PORTION TAD MONTH /GET THE MONTH CLL RAL /*2 FOR DOUBLE-WORDS TAD (MONLST-1) /ADD ON LIST POINTER DCA XR1 /STASH IT TAD I XR1 /GET A MONTH PAIR DCA I XR2 /STORE INTO MESSAGE TAD I XR1 /GET THE OTHER PAIR DCA I XR2 /STORE INTO MESSAGE TAD BSGROUP /GET GROUP CLL RTL;RAL /*8 TAD YEAR /ADD ON RELATIVE YEAR TAD (74) /ADD ON (19)60 JMS I PDIVIDE/[DIVIDE]/DIVIDE 144 /BY 100 CLA /THROW AWAY QUOTIENT TAD REM /GET THE REMAINDER 60-99 OR 00-59 JMS I PDIVIDE/[DIVIDE]/DIVIDE BY 10 TO 12 /GET TEN'S DIGIT TAD ("-^100+"0-200) /GET "-" AND MAKE IT ASCII DCA I XR2 /STORE INTO MESSAGE TAD REM /GET THE UNIT'S DIGIT TAD L60/["0&77] /MAKE IT ASCII CLL RTL;RTL;RTL /MOVE UP DCA I XR2 /STORE INTO MESSAGE TAD I PSWAL/[SWAL] /GET SWITCHES /A-/L AND L20/[20] /JUST /H BIT SNA CLA /SKIP IF SET JMP TESTI /JUMP IF NOT DCA I (NHDZP1) /PREVENT MAIN BLURB DCA I (NHDZP2) /PREVENT PAGE BLURB TESTI, TAD I PSWAL/[SWAL] /GET SWITCHES /A-/L AND L10/[10] /JUST /I BIT SNA CLA /SKIP IF SET JMP TESTP /JUMP IF NOT DCA I (IZAP) /PREVENT FILE TYPE ID PRINTOUT DCA VALSW /PREVENT FILE VALIDATION TESTP, TAD I PSWMX/[SWMX] /GET SWITCHES /A-/L AND L400/[400] /JUST /P BIT SNA CLA /SKIP IF SET DCA I (PZAP) /PREVENT PAUSES IF NOT SET JMP I (TESTA) /CONTINUE THERE ENTPTR, JANENT /POINTER TO MONTH LENGTH TABLES DECIMAL /MAKE IT EASIER JANENT, 31 /31 DAYS IN JANUARY FEBENT, 28 /29 IN LEAP YEAR! 31 /31 DAYS IN MARCH 30 /30 DAYS IN APRIL 31 /31 DAYS IN MAY 30 /30 DAYS IN JUNE 31 /31 DAYS IN JULY 31 /31 DAYS IN AUGUST 30 /30 DAYS IN SEPTEMBER 31 /31 DAYS IN OCTOBER 30 /30 DAYS IN NOVEMBER / 31 /31 DAYS IN DECEMBER OCTAL /BACK TO NORMAL PAGE TESTA, TAD I PSWAL/[SWAL] /GET SWITCHES /A-/L SPA CLA /SKIP IF /A NOT SET NL0001 /ELSE SET ASCII TYPE BIT DCA FMASK /STORE IN FILE MASK NL2000 /SET /B MASK AND I PSWAL/[SWAL] /GET /B BIT SZA CLA /SKIP IF /B NOT SET NL0002 /ELSE SET BINARY TYPE BIT TAD FMASK /ADD ON TO OTHER BIT DCA FMASK /STORE COMPOSITE TAD I PSWAL/[SWAL] /GET SWITCHES /A-/L AND CATFUN/(200) /JUST /E BIT SZA CLA /SKIP IF /E NOT SET NL4000 /ELSE SET EMPTY TYPE BIT TAD FMASK /ADD ON TO OTHER BITS DCA FMASK /STORE COMPOSITE TAD I PSWMX/[SWMX] /GET SWITCHES /M-/X AND CATFUN/(200) /JUST /Q BIT SZA CLA /SKIP IF /Q NOT SET NL2000 /ELSE SET OTHER TYPE BIT TAD FMASK /ADD ON TO OTHER BITS SZA /SKIP IF NO EXPLICIT BITS SET ISZ VALSW /ELSE FORCE FILE VALIDATION SNA /SKIP IF ANY WERE EXPLICITLY ASKED FOR TAD (6003) /ELSE FORCE ALL BITS DCA FMASK /STORE FILE MASK TAD FMASK /GET THE MASK VALUE BACK SMA CLA /SKIP IF EMPTY SLOTS ALLOWED DCA I (EZAP) /PREVENT EMPTY PRINTOUT TSTUNIT,TAD I (SWY9) /GET SWITCHES /Y-/9 RAL /DO INITIAL ADJUST UNITLP, RAL /MOVE UP TO NEXT BIT AND L7760/[7760] /REMOVE UNWANTED BITS SPA /SKIP IF LATEST NOT SET JMP GOTUNIT /JUMP IF IT IS SET ISZ SYMNUM /DONE ALL UNIT BITS? JMP UNITLP /NO, GO BACK CLA /YES, CLEAN UP TAD I (SBTFUN) /USE BOOTSTRAP UNIT INSTEAD GOTUNIT,TAD SYMNUM /GET DISCOVERED UNIT (0 IF NOT FOUND) AND L7/[7] /JUST UNIT BITS DCA UNIT /STORE AS DESIRED UNIT TAD UNIT /GET IT BACK TAD ("S^100+"0-200) /ADD ON "S" AND MAKE IT PRINTABLE DCA I (UBLURB) /STORE IN UNIT BLURB TAD UNIT /GET UNIT BITS TAD CATFUN/(2^100) /ADD ON PAGE BITS DCA CATFUN /STORE IN-LINE JMS I PSYSIO/[SYSIO] /CALL I/O ROUTINES DIRLOAD /BUFFER CATFUN, 2^100+.-. /UNIT BITS WILL BE FILLED IN DIR /BLOCK TAD (DIRLOAD-1) /POINT TO CURRENT DCA XR1 /DIRECTORY BUFFER TAD PCATADR/[CATADR-1] /POINT TO FINAL DCA XR2 /DIRECTORY BUFFER CMVLUP, TAD I XR1 /\ DCA I XR2 / \ TAD I XR1 / \MOVE DOWN DCA I XR2 / /FILE NAME TAD I XR1 / / DCA I XR2 // DCA I XR2 /CLEAR FILE TYPE WORD ISZ ENTCNT /DONE ALL ENTRIES? JMP CMVLUP /NO, KEEP GOING DCA I XR2 /STORE END OF DIRECTORY ISZ XR1 /BUMP PAST END OF DIRECTORY ISZ XR1 /BUMP PAST LIMIT WORD TAD I XR1 /GET HIGHEST BLOCK WORD DCA ENTCNT /SAVE FOR NOW TAD I XR1 /GET STARTING BLOCK WORD DCA BBLOCK /SAVE AS BASE BLOCK OF DIRECTORY TAD BBLOCK /GET IT BACK CIA /INVERT TAD ENTCNT /NOW HAVE DIRECTORY LENGTH IN BLOCKS CLL RTR;RTR /REDUCE TO ENTRY COUNT DCA TOTSLTS /SAVE AS TOTAL SLOT COUNT TAD PCATADR/[CATADR-1] /SETUP THE DCA XR1 /CATALOG POINTER TAD BBLOCK /GET CATALOG BASE BLOCK DCA FBLOCK /STORE IN FIRST READ BLOCK TAD I PSWMX/[SWMX] /GET SWITCHES /M-/X AND (1000) /JUST /O BIT SZA CLA /SKIP IF NOT SET DCA I (ODZAP) /CAUSE OCTAL BLOCK PRINTOUT TAD I PSWAL/[SWAL] /GET SWITCHES /A-/L AND L400/[400] /JUST /D BIT SNA CLA /SKIP IF SET JMP TESTR /JUMP IF NOT DCA I (ODZAP) /CAUSE BLOCK PRINTOUT DCA I (DZAP) /USE DECIMAL RADIX TESTR, TAD I PSWMX/[SWMX] /GET SWITCHES /M-/X AND L100/[100] /JUST /R BIT SZA CLA /SKIP IF OFF DCA I (NOEMPTY) /PREVENT RESOURCE PRINTOUT TAD I (EZAP) /GET POSSIBLY ZAPPED WORD SZA CLA /SKIP IF EMPTY SLOTS NOT ALLOWED NL0002 /ELSE ACCOUNT FOR THEM IN LAST PAGE TAD SCRPTR /GET CURRENT EXTRA COUNT (2) DCA SCRPTR /UPDATE IT TAD I (NOEMPTY) /GET POSSIBLY ZAPPED WORD SZA CLA /SKIP IF RESOURCES NOT ALLOWED TAD L4/[4] /ELSE ACCOUNT FOR THEM IN LAST PAGE TAD SCRPTR /GET CURRENT EXTRA COUNT (2 OR 4) DCA SCRPTR /UPDATE IT TAD NCOLS /GET DESIRED NUMBER OF PRINTOUT COLUMNS CIA /INVERT FOR COUNTING DCA TEMP /STORE THE COUNTER JMP I (MLOOP) /CONTINUE THERE ENTCNT, -MAXEN /MAXIMUM ENTRY COUNT IN CATALOG PAGE / CALCULATE SYMBOLS ON A FULL (TYPICAL AND LAST) PAGE. MLOOP, TAD (67) /GET MAXIMUM ROWS/PAGE (55) TAD FULSYMS /UPDATE COUNT DCA FULSYMS /STORE BACK TAD SCRPTR /GET EXTRA COUNT CIA /INVERT IT TAD (67) /NOW HAVE MAXIMUM ROWS ON LAST PAGE TAD LSTSYMS /UPDATE COUNT DCA LSTSYMS /STORE BACK ISZ TEMP /DONE YET? JMP MLOOP /NO, KEEP GOING TAD I PSWMX/[SWMX] /GET SWITCHES /M-/X AND L4/[4] /JUST /V BIT SNA CLA /SKIP IF SET JMP NOTV /JUMP IF NOT SET TAD L7600/[CLA!400] /GET CLA INSTRUCTION DCA I (VZAP) /PREVENT WASTE BEING NON-ZERO SKP /PREVENT ZAP TO IWASTE UPDATE NOTV, DCA I (DONEXT) /DON'T COUNT EVERY SYMBOL, JUST EVERY LINE TAD I PSWAL/[SWAL] /GET SWITCHES /A-/L RAR /L BIT TO LINK SNL CLA /SKIP IF /L BIT SET JMP TESTS /JUMP IF NOT SET TAD (LINEXT) /SETUP THE DCA I (NXTONE) /LINEAR SEARCH TESTS, TAD I PSWMX/[SWMX] /GET SWITCHES /M-/X AND L40/[40] /JUST /S BIT SNA CLA /SKIP IF SET JMP I (DIRSTART) /JUMP IF NOT TAD (SBLURB) /POINT TO THE DCA I (SZAP) /SYSTEM-ORIENTED BLURB JMS I PDEJECT/[DEJECT] /DO AN EJECT JMS I PSCRIBE/[SCRIBE] /GIVE THEM THE SYSMSG /SYSTEM MESSAGE TAD UNIT /GET THE UNIT TAD L100/[1^100] /ADD ON PAGE BITS DCA RFUN /STORE IN-LINE JMS I PSYSIO/[SYSIO] /CALL I/O ROUTINES DIRLOAD /BUFFER RFUN, 1^100+.-. /UNIT BITS WILL BE FILLED IN TRPBLK /FIRST TRAP BLOCK TAD I (HIDWRD+1&177+DIRLOAD) /GET FIRST PAIR DCA DVNMSG+1 /STORE IN MESSAGE TAD I (HIDWRD+2&177+DIRLOAD) /GET SECOND PAIR DCA DVNMSG+2 /STORE IN MESSAGE JMS I PSCRIBE/[SCRIBE] /GIVE THEM THE DVNMSG /AUGMENTED MESSAGE TAD (":&177) /GET A ":" JMS I OUTPUT /PRINT IT TAD UNIT /GET THE UNIT JMS I (P1OCT) /PRINT IT JMS I PSCRIBE/[SCRIBE] /GIVE THEM THE HEDMSG /HEADER MESSAGE TAD UNIT /GET THE UNIT TAD L400/[SYSLEN^100] /ADD ON PAGE BITS JMP I (SYSMORE) /CONTINUE THERE / DEVICE NAME MESSAGE; NAME WILL BE FILLED IN BEFORE PRINTING. DVNMSG, TEXT " ^XXXX^" /DEVICE NAME MESSAGE / MONTHS TEXT LIST. MONLST, TEXT "J^AN" /JANUARY TEXT "F^EB" /FEBRUARY TEXT "M^AR" /MARCH TEXT "A^PR" /APRIL TEXT "M^AY" /MAY TEXT "J^UN" /JUNE TEXT "J^UL" /JULY TEXT "A^UG" /AUGUST TEXT "S^EP" /SEPTEMBER TEXT "O^CT" /OCTOBER TEXT "N^OV" /NOVEMBER TEXT "D^EC" /DECEMBER / SYSTEM TYPE MESSAGE. SYSMSG, TEXT "^S^YSTEM:" /SYSTEM TYPE MESSAGE PAGE / DAYS TEXT LIST. DAYS, TEXT "^T^HURSDAY " /THURSDAY TEXT "^F^RIDAY ";0 /FRIDAY TEXT "^S^ATURDAY " /SATURDAY TEXT "^S^UNDAY ";0 /SUNDAY TEXT "^M^ONDAY ";0 /MONDAY TEXT "^T^UESDAY ";0 /TUESDAY TEXT "^W^EDNESDAY " /WEDNESDAY / SYSTEM DIRECTORY HEADER MESSAGE. HEDMSG, TEXT "%%^I^MAGE ^I^NFORMATION:%%" /SYSTEM DIRECTORY TEXT " ^N^AME ^B^LOCK ^S^IZE ^L^OAD " /HEADER TEXT " ^L^ENGTH ^O^UT ^I^N ^R S O S^TART%%^" /MESSAGE PAGE / COMES HERE TO CONTINUE THE SYSTEM DIRECTORY CODE. THE SYSLEN (4) PAGES USED / FOR ONCE-ONLY CODE STARTING FROM DIRLOAD (02600-03577) ARE USED AS A BUFFER / FOR THE SYSTEM DIRECTORY. SYSEND= SYSLEN^200+DIRLOAD /END OF SYSTEM DIRECTORY BUFFER IFNZRO .-SYSEND&4000 SYSMORE,/TAD UNIT /GET UNIT BITS / TAD L400/[SYSLEN^100] /ADD ON PAGE BITS DCA RFUN2 /STORE IN-LINE JMS I PSYSIO/[SYSIO] /CALL I/O ROUTINES DIRLOAD /BUFFER RFUN2, SYSLEN^100+.-. /UNIT BITS WILL BE FILLED IN SYSCAT /SYSTEM DIRECTORY BLOCK SYSLUP, NL7775 /SETUP THE DCA TEMP /NAME WORD COUNTER TAD I PTR /GET A WORD SNA CLA /SKIP IF NOT END OF SYSTEM CATALOG JMP EOSYS /JUMP IF END OF SYSTEM CATALOG PNMLUP, TAD I PTR /GET FIRST NAME PAIR JMS I PP2CH/[P2CH] /PRINT THEM ISZ PTR /BUMP TO NEXT ISZ TEMP /DONE ALL THREE PAIRS? JMP PNMLUP /NO, KEEP GOING TAD PTR /GET CURRENT VALUE SKP /DON'T USE OLD ONE USAGN, TAD TEMP /USE PREVIOUS VALUE TAD L3/[3] /POINT TO NEXT NAME ENTRY DCA TEMP /STASH THE POINTER TAD I TEMP /GET THE FIRST NAME PAIR SNA CLA /SKIP IF NOT END OF DIRECTORY JMP USEND /JUMP IF END OF DIRECTORY TAD TEMP /GET THE POINTER TAD L3/[3] /BUMP TO BLOCK ENTRY OF NEXT ITEM SKP /DON'T USE END USEND, TAD (SYSEND-1) /USE THE END BLOCK DCA TEMP /STASH THE POINTER TAD I PTR /GET OUR BLOCK CIA /INVERT IT TAD I TEMP /COMPARE TO THEIR BLOCK SNA /SKIP IF NON-REDUNDANT ENTRY JMP USAGN /JUMP IF MULTIPLE ENTRY DCA TEMP2 /SAVE CURRENT ENTRY SIZE JMS I PP2CH/[P2CH] /PRINT TWO CHARACTERS TAD I PTR /GET THE BLOCK NUMBER JMS I (PRTOCT) /PRINT IT JMS P3BLNKS /PRINT THREE CHARACTERS TAD TEMP2 /GET THE SIZE JMS I (P3OCT) /PRINT IT JMS P3BLNKS /PRINT THREE CHARACTERS ISZ PTR /BUMP TO LOAD/LENGTH WORD TAD I PTR /GET THE LOAD/LENGTH WORD AND L7600/[7600] /JUST LOADING ADDRESS BITS JMS I (PRTOCT) /PRINT IT JMS I (P4BLNKS) /PRINT FOUR CHARACTERS TAD I PTR /GET THE LOAD/LENGTH WORD AGAIN AND (37) /JUST LENGTH BITS JMS I (P2OCT) /PRINT TWO DIGIT LENGTH JMS P3BLNKS /PRINT FOUR CHARACTERS TAD I PTR /GET THE LOAD/LENGTH WORD AGAIN DCA TEMP2 /STASH IT ISZ PTR /BUMP TO START WORD TAD I PTR /GET THE START WORD AND (37) /JUST EXTENSION BITS TAD (DEFTABLE) /POINT AT TABLE ENTRY DCA TEMP /STASH THE POINTER TAD I TEMP /GET THE ENTRY RTR;RTR;RTR /MOVE DOWN JMS I (PRTYPE) /PRINT OUTPUT TYPE TAD I TEMP /GET THE ENTRY AGAIN JMS I (PRTYPE) /PRINT INPUT TYPE JMS DOBIT /PRINT OUT THE KEPRADX /RADIX BIT INFORMATION JMS DOBIT /PRINT OUT THE NOSCAN /SCAN BIT INFORMATION TAD I PTR /GET THE START WORD DCA TEMP2 /STASH IT JMS DOBIT /PRINT OUT THE NOSCAN /OUTPUT SCAN ONLY BIT INFORMATION JMS I (P1OCT) /PRINT A LEADING ZERO TAD I PTR /GET THE START WORD AND L7600/[7600] /STARTING PAGE BITS ONLY JMS I (PRTOCT) /PRINT IT JMS I PCRLF/[CRLF] /DO A , ISZ PTR /BUMP TO NEXT ENTRY TAD PTR /GET CURRENT POINTER TAD (-57^6-DIRLOAD) /COMPARE TO FIRST PAGE LIMIT SNA CLA /SKIP IF OTHER JMS I PDEJECT/[DEJECT] /ELSE DO AN EJECT JMP SYSLUP /GO BACK FOR MORE / COMES HERE AT END OF DIRECTORY. EOSYS, JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE FREMSG /FREE MESSAGE JMS I PP2CH/[P2CH] /PRINT TWO CHARACTERS TAD I (SYSEND-1) /GET FIRST FREE BLOCK JMS I (PRTOCT) /PRINT IT JMS P3BLNKS /PRINT THREE CHARACTERS TAD I (SYSEND-1) /GET FIRST FREE BLOCK CIA /INVERT IT TAD BBLOCK /ADD ON BASE CATALOG BLOCK JMS I (P3OCT) /PRINT FREE SPACE JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE SLOTMSG /FREE SLOTS MESSAGE TAD PTR /GET THE POINTER CMA /INVERT IT TAD (SYSEND-1) /SUBTRACT FROM UPPER LIMIT JMS I PDIVIDE/[DIVIDE]/DIVIDE 6 /BY SIX JMS I (P3OCT) /PRINT NUMBER OF ENTRIES LEFT JMS I PCRLF/[CRLF] /DO A , JMP I (LPZAP2) /CONTINUE THERE DOBIT, .-. /DO A BIT-ORIENTED PRINTOUT ROUTINE TAD TEMP2 /GET THE WORD AND I DOBIT /ISOLATE THE BIT SZA CLA /SKIP IF OFF IAC /ELSE SET IT JMS I (P1OCT) /PRINT THE DIGIT JMS I PP2CH/[P2CH] /PRINT TWO CHARACTERS JMP I DOBIT /RETURN P3BLNKS,.-. /PRINT THREE CHARACTERS JMS I PP2CH/[P2CH] /PRINT TWO CHARACTERS JMS I PP6CH/[P6CH] /PRINT ONE CHARACTER JMP I P3BLNKS /RETURN PAGE PRTYPE, .-. /PRINT EXTENSION TYPE ROUTINE AND L77/[77] /JUST SIX BITS DCA P2TEMP /SAVE PASSED VALUE TAD P2TEMP /GET IT BACK CLL RAL /*2 TAD P2TEMP /*3 TAD (NAMTBLE) /POINT TO TABLE ENTRY DCA P2TEMP /STORE IN-LINE JMS I PSCRIBE/[SCRIBE]/CALL MESSAGE PRINT ROUTINE P2TEMP, .-. /WILL BE MESSAGE ADDRESS JMS I PP2CH/[P2CH] /PRINT TWO CHARACTERS JMP I PRTYPE /RETURN P1OCT, .-. /PRINT ONE OCTAL DIGIT AND L7/[7] /JUST ONE DIGIT TAD L60/["0&177] /MAKE IT ASCII JMS I OUTPUT /PRINT IT JMP I P1OCT /RETURN P2OCT, .-. /PRINT TWO OCTAL DIGITS DCA P2TEMP /SAVE PASSED VALUE TAD P2TEMP /GET IT BACK RTR;RAR /MOVE DOWN JMS P1OCT /PRINT HIGH-ORDER TAD P2TEMP /GET IT AGAIN JMS P1OCT /PRINT LOW-ORDER JMP I P2OCT /RETURN P3OCT, .-. /PRINT THREE OCTAL DIGITS DCA P2TEMP /SAVE PASSED VALUE TAD P2TEMP /GET IT BACK RTR;RTR;RTR /MOVE DOWN JMS P1OCT /PRINT FIRST DIGIT TAD P2TEMP /GET IT BACK JMS P2OCT /PRINT LAST TWO JMP I P3OCT /RETURN / DEFAULT EXTENSION TYPE TABLE. DEFTABL,NUL^100+NUL /0=NO OUTPUT, NO INPUT GENO^100+GENI /1=GENERAL OUTPUT, GENERAL INPUT NUL^100+BIN /2=NO OUTPUT, BINARY INPUT BIN^100+BIN /3=BINARY OUTPUT, BINARY INPUT BIN^100+NUL /4=BINARY OUTPUT, NO INPUT ASC^100+ASC /5=ASCII OUTPUT, ASCII INPUT ASC^100+NUL /6=ASCII OUTPUT, NO INPUT BIN^100+PAL /7=BINARY OUTPUT, PAL INPUT PAL^100+PAL /10=PAL OUTPUT, PAL INPUT NUL^100+BAT /11=NO OUTPUT, BATCH INPUT NUL^100+DUMP /12=NO OUTPUT, DUMP INPUT NUL^100+FOC /13=NO OUTPUT, FOCAL INPUT PAL^100+NUL /14=PAL OUTPUT, NO INPUT NUL^100+PAL /15=NO OUTPUT, PAL INPUT ZBLOCK DEFSIZE+DEFTABLE-. /DEFINE REST OF TABLE / DEFAULT FILE EXTENSION TYPE NAME TABLE. NAMTBL, TEXT "^ " /0=NULL ENTRY TEXT "^ASC " /1=ASCII TEXT "^BAT " /2=BATCH TEXT "^BIN " /3=BIN TEXT "^DUMP" /4=DUMP TEXT "^FOC " /5=FOCAL TEXT "^GENI" /6=GENERAL INPUT TEXT "^GENO" /7=GENERAL OUTPUT TEXT "^PAL " /10=PAL / SYSTEM HEADER TEXT. SBLURB, TEXT "^P?S/8 S^YSTEM ^D^IRECTORY " /SYSTEM HEADER TEXT / FREE SLOTS MESSAGE. SLOTMSG,TEXT "%%^F^REE ^S^LOTS: " /FREE SLOTS MESSAGE PAGE PZ, RELOC 0 /WHERE THIS LOADS EVENTUALLY *0 /START AT THE BEGINNING XORSWS= . /XOR VALUES FOR OPTION SWITCHES HERE GTBASE, 0/.-. /GET HALF-WORD BASE GTINDX, 0/.-. /GET HALF-WORD INDEX INCHAR, 0/.-. /INPUT BUFFER QUO, .-. /QUOTIENT FROM DIVIDE ROUTINE REM, .-. /REMAINDER FOR DIVIDE ROUTINE SCRCASE,100 /ALPHABETIC CASE SCRCHAR,.-. /LATEST OUTPUT CHARACTER SCRPTR, 2/.-. /MESSAGE POINTER; INITIALIZED FOR ONCE-ONLY CODE *10 /DEFINE AUTO-INDEX AREA XR1, .-. /AUTO-INDEX NUMBER ONE XR2, .-. /AUTO-INDEX NUMBER TWO XR3, 3776 /AUTO-INDEX NUMBER THREE; INITIALIZED AS "." COUNTER COLUMN, 10 /COLUMN COUNTER ECHOSW, 0 /ECHO SWITCH LINCNT, -4+5 /LINE COUNTER; INITIALIZED FOR OPENING FORM FEED LSEP, "-&77 /**** **** PAGNUMB,0 /PRINTED PAGE NUMBER *20 /GET PAST AUTO-INDEX AREA BBLOCK, .-. /BASE BLOCK OF DIRECTORY REMSYMS= . /SYMBOLS REMAINING TO BE PRINTED COUNTER BSGROUP,BSGRP /BASE GROUP VALUE FOR DATE WORD DECCONV,0 /LEADING ZERO CONVERTER DECOFFS,0 /DECIMAL-OCTAL OFFSET DECPTR, .-. /POINTER TO CURRENTLY USED POWER OF TEN DECQUO, .-. /DIGIT QUOTIENT FMASK, .-. /VALID FILE-TYPE MASK; BIT[0]=EMPTY, BIT[1]=[??], /BIT[10]=[BN], BIT[11]=[AS] FNAME, ZBLOCK 4 /LATEST FILE NAME, BLOCK FTYPE, 6003 /LATEST FILE TYPE FULSYMS,0 /MAXIMUM PRINTABLE SYMBOLS ON ONE PAGE (55*NCOLS) LPSW, 0 /LAST PAGE SWITCH LSTSYMS,0 /MAXIMUM PRINTABLE SYMBOLS ON LAST PAGE L10, 10 /CONSTANT 0010 L100, 100 /CONSTANT 0100 L12, "J&37 /CONSTANT 0012 L14, "L&37 /CONSTANT 0014 L15, "M&37 /CONSTANT 0015 L20, 20 /CONSTANT 0020 L4, 4 /CONSTANT 0004 L40, " &177 /CONSTANT 0040 L400, 400 /CONSTANT 0400 L60, "0&177 /CONSTANT 0060 L77, 77 /CONSTANT 0077 L7760, -20 /CONSTANT 7760 L7772, -6 /CONSTANT 7772 NCOLS, DEFCOLS /NUMBER OF PRINTED COLUMNS (VIA EQUALS) NSYMS, .-. /NUMBER OF SYMBOLS TO PRINT ON LATEST PAGE OUTPUT, P7CH /OUTPUT ROUTINE POINTER PCATADR,CATADR-1 /POINTER TO CATALOG BUFFER (AUTO-INDEX) PCRLF, CRLF /POINTER TO , ROUTINE PDEJECT,DEJECT /POINTER TO DO AN EJECT ROUTINE PDIVIDE,DIVIDE /POINTER TO DIVIDE ROUTINE PP2CH, P2CH /POINTER TO P2CH ROUTINE PP6CH, P6CH /POINTER TO P6CH ROUTINE PRTFILS,0 /TOTAL FILES TO BE PRINTED PSCRIBE,SCRIBE /POINTER TO MESSAGE PRINTING ROUTINE PSCRSIZ,SCRSIZE /POINTER TO SYSTEM CORE SIZE WORD PSWAL, SWAL /POINTER TO SWITCHES /A-/L PSWMX, SWMX /POINTER TO SWITCHES /M-/X PTR, DIRLOAD /SYSTEM DIRECTORY POINTER P7TEMP, .-. /OUTPUT ROUTINE TEMPORARY SYMCNT, 0 /SYMBOLS PRINTED ALREADY COUNTER SYMNUM, -10 /LASTEST SYMBOL NUMBER FOR SYMBOL PROBE ROUTINE; /PRELOADED FOR UNIT SWITCH TEST ROUTINE TEMP, .-. /TEMPORARY TEMP2, .-. /TEMPORARY TOTEMPS,0 /TOTAL EMPTY COUNT TOTFILS,0 /TOTAL FILE COUNT TOTSLTS,-STRLENGTH-1 /TOTAL SLOT COUNT IN CATALOG; /INITIALIZED AS STRING BUFFER LIMIT COUNT TOTSYMS,0 /TOTAL SYMBOLS TO PRINT COUNTER UNIT, 0 /FILE UNIT VALSW, 1 /FILE-TYPE VALIDATION SWITCH CONOUT, .-. /CONSOLE-ONLY OUTPUT ROUTINE CONTSF, TSFIOT /**** CONSOLE: **** CIF MCS+10 CONJMP, JMP I CONOUT /**** CONSOLE: **** JMS OUTCON CONTLS, TLSIOT /**** CONSOLE: **** JMP I CONOUT PSYSIO, SZA CLA /CLEAN UP (MIGHT SKIP) L3, 3 /CONSTANT 0003; THIS CAN BE SKIPPED ISZ CONOUT /BUMP RETURN ADDRESS JMP I CONOUT /TAKE SKIP RETURN TO CALLER CTLCTST,.-. /<^C> TEST, ETC. ROUTINE L7600, CLA!400 /CLEAN UP CHKKSF, KSFIOT /**** CONSOLE: **** CIF MCS+10 CHKJMP, JMP I CTLCTST /**** CONSOLE: **** JMS INCON CHKKRS, KRSIOT/OR KRBIOT /**** CONSOLE: **** JMP I CTLCTST AND [177] /JUST SEVEN BITS DCA INCHAR /SAVE IT NL7775 /-3 TAD INCHAR /COMPARE TO LATEST CHARACTER SNA /SKIP IF NOT <^C> ISZ I PSCRSIZ/[SCRSIZ]/ELSE SET SOFT INDICATOR SPA SNA CLA /SKIP IF <^D> OR GREATER JMP I L7600/[SBOOT] /ELSE GO BACK TO THE MONITOR CHKKCC, KCCIOT/OR 0000 /**** CONSOLE: **** 0000 TAD INCHAR /GET THE INPUT CHARACTER JMP I CTLCTST /RETURN TO CALLER P7OUT, .-. /BEST DEVICE AVAILABLE OUTPUT ROUTINE P7TSF, TSFIOT /**** LPT: **** LSFIOT /**** CONSOLE: **** CIF MCS+10 /**** LOG-LPT: **** CIF MCS+10 P7JMP, JMP I P7OUT /**** LPT: **** JMP I P7OUT /**** CONSOLE: **** JMS OUTCON /**** LOG-LPT: **** JMS OUTLPT P7TLS, TLSIOT /**** LPT: **** LLSIOT /**** CONSOLE: **** JMP I P7OUT /**** LOG-LPT: **** JMP I P7OUT L7700, SMA CLA /CLEAN UP (MIGHT SKIP) L7, 7 /CONSTANT 0007; THIS CAN BE SKIPPED ISZ P7OUT /BUMP RETURN ADDRESS JMP I P7OUT /TAKE SKIP RETURN TO CALLER READ, .-. /FILE READ ROUTINE NL2000 /TAD (20^100)/GET READ FUNCTION BITS TAD UNIT /ADD ON UNIT BITS DCA READFUN /STORE IN I/O CALL JMS I PSYSIO/[SYSIO] /CALL I/O ROUTINES FILBUFFER /FILE BUFFER READFUN,20^100+.-. /UNIT BITS WILL BE FILLED IN FBLOCK, .-. /FILE BLOCK NUMBER WILL BE STORED HERE JMP I READ /RETURN PAGE / DIRECTORY PROGRAM ULTIMATELY STARTS HERE. DIRSTAR,JMS I PDEJECT/[DEJECT] /DO AN OPENING EJECT / TAD PCATADR/[CATADR-1] /POINT TO / DCA XR1 /CATALOG BUFFER / TAD BBLOCK /GET CATALOG BASE BLOCK / DCA FBLOCK /USE AS FIRST READ BLOCK CALCLP, TAD I XR1 /GET FIRST NAME WORD SNA /END OF DIRECTORY? JMP DIRLOOP /YES, GO START THE PRINTOUT DCA FNAME /STORE AS FIRST NAME PAIR TAD I XR1 /GET SECOND NAME WORD DCA FNAME+1 /STORE AS SECOND NAME PAIR TAD I XR1 /GET THIRD NAME WORD DCA FNAME+2 /STORE AS THIRD NAME PAIR TAD FNAME /GET FIRST NAME WORD CMA /INVERT IT SNA CLA /SKIP IF NOT EMPTY JMP CALCEMPTY /JUMP IF AN EMPTY ENTRY ISZ TOTFILS /COUNT THIS FILE JMS VALID8 /VALIDATE FILE TYPE JMS I [FILTER] /FIND OUT IF WE WANT IT TAD FTYPE /GET THE FILE TYPE AND FMASK /CHECK IF WANTED SNA CLA /SKIP IF A WANTED TYPE JMP NOTOURS /JUMP IF NOT ISZ PRTFILS /INDICATE ANOTHER FILE TO PRINT ISZ TOTSYMS /INDICATE ANOTHER SYMBOL TO PRINT NOTOURS,TAD FTYPE /GET THE FILE TYPE DCA I XR1 /STORE FILE TYPE TAD FBLOCK /GET FILE BLOCK TAD L20/[20] /UPDATE TO NEXT FILE DCA FBLOCK /STORE BACK JMP CALCLP /KEEP GOING / COMES HERE IF ENTRY IS AN EMPTY SLOT. CALCEMP,ISZ TOTEMPS /INDICATE ANOTHER EMPTY TAD FMASK /GET FILE TYPE MASK SPA CLA /SKIP IF EMPTIES NOT WANTED ISZ TOTSYMS /INDICATE ANOTHER SYMBOL TO PRINT JMS VALID8 /VALIDATE THE EMPTY'S FILE TYPE JMP NOTOURS /CONTINUE THERE DIRLOOP,TAD SYMCNT /GET SYMBOLS PRINTED SO FAR STL CIA /NEGATE IT TAD TOTSYMS /SUBTRACT FROM TOTAL SYMBOL COUNT SNA SZL /SKIP IF ANY LEFT TO DO JMP DIRDONE /JUMP IF NOT DCA REMSYMS /SAVE REMAINING UNPRINTED SYMBOL COUNT ISZ FIRST /FIRST PAGE? JMS I PDEJECT/[DEJECT]/NO, DO AN EJECT TAD FULSYMS /GET FULL PAGE PRINTED SYMBOL COUNT (55*NCOLS) STL CIA /NEGATE IT TAD REMSYMS /COMPARE TO REMAINING SYMBOL COUNT SNL CLA /SKIP IF LESS REMAINING THAN FULL PAGE JMP FULPAGE /JUMP IF FULL PAGE PRINT WANTED TAD REMSYMS /GET REMAINING SYMBOL COUNT STL CIA /NEGATE IT TAD LSTSYMS /COMPARE TO MAXIMUM LAST PAGE SYMBOL COUNT SNL CLA /SKIP IF REMAINING, EXTRA CAN'T COEXIST ON LAST PAGE ISZ LPSW /INDICATE THIS WILL BE THE LAST PAGE PRINTED TAD REMSYMS /GET REMAINING SYMBOL COUNT SKP /DON'T FULPAGE,TAD FULSYMS /USE FULL PAGE PRINTED SYMBOL COUNT DCA NSYMS /STORE LATEST PAGE SYMBOL COUNT JMS I (PDPAGE) /PRINT LATEST PAGE OF DIRECTORY TAD LPSW /GET LAST PAGE SWITCH SZA CLA /SKIP IF OFF JMS I (PRTINFO) /PRINT EXTRA INFORMATION AT BOTTOM OF THIS PAGE TAD SYMCNT /GET PRINTED SYMBOL COUNT TAD NSYMS /ACCOUNT FOR THOSE WE PRINTED NOW DCA SYMCNT /STORE BACK JMP DIRLOOP /KEEP GOING / COMES HERE WHEN DONE. DIRDONE,CLA /CLEAN UP TAD LPSW /GET LAST PAGE SWITCH SNA CLA /SKIP IF INFORMATION WAS PRINTED ON PREVIOUS PAGE JMS I (PRTINFO) /PRINT THE INFORMATION ALONE ON THIS LAST PAGE LPZAP2, SKP /**** **** 0000 DCA I (LPZAP3) /PREVENT ADDITIONAL CHARACTERS AFTER LAST NPZAP1, JMS I [NEWPAGE] /**** /N **** 0000 BUFZP3, SKP /**** LOG-LPT: AND BUFFERING AND /N **** 0000 JMS I OUTPUT /OUTPUT A ISZ NULCNT /DONE YET? JMP BUFZP3 /NO, KEEP GOING JMP I L7600/[SBOOT] /GOODBYE! DECPRT, .-. /DECIMAL PRINTOUT ROUTINE DCA TEMP /SAVE THE NON-ZERO NUMBER TAD DECOFFSET /GET POSSIBLE OFFSET TAD (TENS) /POINT AT POWER TABLE DCA DECPTR /STASH THE POINTER DECLUP, DCA DECQUO /CLEAR THE QUOTIENT JMP .+3 /START THE DIVIDE OPERATION NOW DECLOP, DCA TEMP /RESTORE UPDATED QUOTIENT ISZ DECQUO /BUMP DIGIT QUOTIENT TAD I DECPTR /GET NEXT POWER OF TEN SNA /END OF LIST? JMP I DECPRT /YES, WE'RE DONE CLL /CLEAR LINK NEEDED FOR TESTING TAD TEMP /GET QUOTIENT SZL /SKIP IF WE DIDN'T UNDERFLOW JMP DECLOP /BUMP UP QUOTIENT CLA /ALL DONE WITH THIS ONE ISZ DECPTR /BUMP POINTER TO NEXT POWER OF TEN TAD DECQUO /GET DIGIT SNA /IS IT ZERO? TAD DECCONVERT /YES, MIGHT CONVERT IT TO SNA /IS IT ZERO? JMP DECLUP /YES, DON'T PRINT IT TAD L60/["0&77] /MAKE INTO ASCII DIGIT JMS I OUTPUT /PRINT IT TAD DECQUO /GET DIGIT AGAIN SZA CLA /SKIP IF ZERO NL4000 /FORCE SIGNIFICENCE OF REMAINING DIGITS JMP DECLUP /DO IT AGAIN VALID8, .-. /FILE TYPE VALIDATION ROUTINE TAD VALSW /SHOULD WE VALIDATE THIS FILE? SNA CLA /SKIP IF SO JMP I VALID8 /RETURN IF NOT JMS READ /GO READ IN THE FILE JMS I (VALASC) /CHECK IF FILE IS ASCII JMP NOTASC /WASN'T NL0001 /INDICATE ASCII FILE TYPE BNENTRY,DCA FTYPE /STORE FILE TYPE JMP I VALID8 /RETURN / COMES HERE IF FILE IS NOT ASCII TYPE. NOTASC, JMS I (VALBIN) /CHECK IF FILE IS BINARY TYPE NL2000 /NOT BINARY SNA /SKIP IF NOT BINARY NL0002 /ELSE INDICATE SO JMP BNENTRY /CONTINUE THERE FIRST, -1 /FIRST PAGE SWITCH NULCNT, 0 / OUTPUT COUNTER PAGE / MESSAGE PRINTING ROUTINE. SCRIBE, .-. /MESSAGE PRINT ROUTINE CLA /JUST IN CASE TAD I SCRIBE /GET MESSAGE POINTER DCA SCRPTR /STASH IT ISZ SCRIBE /BUMP PAST ARGUMENT TAD (140) /INITIALIZE TO LOWER-CASE CASZP1, DCA SCRCASE /**** /U **** CLA!400 SCRLUP, TAD I SCRPTR /GET LEFT HALF-WORD RTR;RTR;RTR /MOVE OVER JMS SCRPRNT /PRINT IT TAD I SCRPTR /GET RIGHT HALF-WORD JMS SCRPRNT /PRINT IT ISZ SCRPTR /BUMP TO NEXT PAIR JMP SCRLUP /KEEP GOING SCRPRNT,.-. /CHARACTER PRINT ROUTINE AND L77/[77] /JUST SIX-BIT SNA /END OF MESSAGE? JMP I SCRIBE /YES, RETURN TO ORIGINAL CALLER DCA SCRCHAR /NO, SAVE FOR NOW TAD SCRCHAR /GET IT BACK TAD (-"%!200) /IS IT "%"? SNA /SKIP IF NOT JMP SCRCRLF /JUMP IF IT MATCHES TAD L7/[-"^+100+"%] /IS IT "^" SNA CLA /SKIP IF NOT JMP SCRFLIP /JUMP IF IT MATCHES TAD SCRCHAR /GET THE CHARACTER AND L40/[40] /DOES CASE MATTER? SNA CLA /SKIP IF NOT TAD SCRCASE /ELSE GET PREVAILING CASE TAD SCRCHAR /GET THE CHARACTER JMS I OUTPUT /PRINT THE CHARACTER JMP I SCRPRNT /RETURN SCRCRLF,JMS I PCRLF/[CRLF] /DO A , JMP I SCRPRNT /RETURN SCRFLIP,TAD SCRCASE /GET CURRENT CASE CIA /INVERT IT TAD (140+100) /ADD SUM OF POSSIBLE VALUES CASZP2, DCA SCRCASE /**** /U **** CLA!400 JMP I SCRPRNT /RETURN NEWPAGE,.-. /PRINT ROUTINE TAD LINCNT /GET CURRENT COUNT TAD (-5) /ADD ON EXTRA COUNT DCA LINCNT /STORE BACK DOFF, JMS I (PRNLFS) /**** **** 0000 LPZAP1, TAD L7772/[-6] /**** **** NL7777 DCA LINCNT /STASH THE COUNT TAD LSEP /GET "-" OR JMS I OUTPUT /PRINT IT ISZ LINCNT /DONE ENOUGH? JMP .-3 /NO, GO DO ANOTHER ONE LPZAP3, SKP /**** LAST **** 0000 JMP I NEWPAGE /RETURN NOW IF LAST FFWAT1, SKP /**** 0000 JMS PWAIT /WAIT FOR NEXT PAGE NOW IF USING JMS I PCRLF/[CRLF] /DO A , FFWAT2, JMS PWAIT /**** **** 0000 NL7775 /SETUP FOR DCA LINCNT /3 'S LPZAP4, JMS I (PRNLFS) /**** **** 0000 JMP I NEWPAGE /RETURN PWAIT, .-. /PAGE WAIT SUBROUTINE PZAP, SKP /**** NOT /P **** 0000 JMP I PWAIT /RETURN IF NOT /P NL7775 /SETUP THE DCA QUO /BEEP COUNT PWATLUP,TAD (-42) /SETUP THE DCA TEMP2 /WASTE COUNTER ISZ TEMP /WASTE JMP .-1 /SOME TIME ISZ TEMP2 /DONE ENOUGH? JMP .-3 /NO, GO BACK TAD L7/["G&37] /GET A JMS CONOUT /RING IT JMP .-1 /'TIL IT CHIMES ISZ QUO /DONE ENOUGH? JMP PWATLUP /NO, GO BACK AND DO IT ALL AGAIN INWAIT, JMS CTLCTST /GET A CHARACTER SNA /SKIP IF WE GOT SOMETHING JMP INWAIT /ELSE KEEP WAITING TAD (-"M!300) /COMPARE TO SNA CLA /SKIP IF DIFFERENT JMP I PWAIT /RETURN IF IT MATCHES TAD L7/["G&37] /GET A JMS CONOUT /RING IT JMP .-1 /'TIL IT CHIMES JMP INWAIT /TRY AGAIN CHKUP, .-. /CHECK FOR <^C>, ETC. ROUTINE JMS CTLCTST /CHECK FOR <^C> TAD (-"O!300) /IS IT <^O>? SNA /SKIP IF NOT JMP DOUO /JUMP IF IT MATCHES TAD [-"S+"O] /COMPARE TO <^S> SZA CLA /SKIP IF IT MATCHES JMP I CHKUP /ELSE JUST RETURN JMS CTLCTST /CHECK FOR <^C> TAD [-"Q!300] /IS IT <^Q>? SZA CLA /SKIP IF IT MATCHES JMP .-3 /JUMP BACK IF NOT JMP I CHKUP /RETURN DOUO, TAD ("^&177) /GET AN "^" JMS CONOUT /PRINT IT JMP .-1 /WAIT FOR IT TAD ("O&177) /GET AN "O" JMS CONOUT /PRINT IT JMP .-1 /WAIT FOR IT NL4000 /SET INVERSION BIT TAD ECHOSW /INVERT ECHO STATUS DCA ECHOSW /STORE BACK JMP I CHKUP /RETURN PAGE FPRINT, .-. /FILE NAME PRINT ROUTINE TAD FNAME /GET FIRST NAME PAIR CMA /INVERT FOR TESTING SNA CLA /SKIP IF NOT AN EMPTY JMP FREPRNT /JUMP IF AN EMPTY TAD FNAME /GET FIRST NAME PAIR JMS I PP2CH/[P2CH] /PRINT THEM TAD FNAME+1 /GET SECOND NAME PAIR JMS I PP2CH/[P2CH] /PRINT THEM TAD FNAME+2 /GET THIRD NAME PAIR JMS I PP2CH/[P2CH] /PRINT THEM IZAP, SKP /**** /I **** 0000 JMP ODZAP /DON'T PRINT FILE TYPE INFORMATION NL2000 /SET SHIFTING BIT TAD FTYPE /GET FILE TYPE SMA SZA /SKIP IF OTHER TYPE JMP PRNTAB /JUMP IF ASCII OR BINARY JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE UNKNMSG / MESSAGE ODZAP, JMP I FPRINT /**** /D OR /O **** 0000 TAD L40/[" &177] /GET A JMS I OUTPUT /PRINT IT TAD L40/[" &177] /GET A JMS I OUTPUT /PRINT IT NL2000 /ENFORCE DCA DECCONVERT /LEADING ZEROES DZAP, TAD [EIGHTS-TENS] /**** /D **** 0000 DCA DECOFFSET /STORE INTER-TABLE OFFSET TAD FBLOCK /GET THE BLOCK NUMBER JMS I [DECPRT] /PRINT IT JMP I FPRINT /RETURN / COMES HERE IF ENTRY IS AN EMPTY SLOT. FREPRNT,JMS I PSCRIBE/[SCRIBE]/CALL MESSAGE PRINT ROUTINE FREMSG /WITH MESSAGE JMP IZAP /CONTINUE THERE / COMES HERE IF FILE TYPE IS ASCII OR BINARY. PRNTAB, NL0001 /SET ASCII TYPE MASK AND FTYPE /CHECK FILE TYPE SNA CLA /SKIP IF ASCII JMP PRNTBN /JUMP IF BINARY JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE ASCIMSG / MESSAGE JMP ODZAP /CONTINUE THERE PRNTBN, JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE BNRYMSG / MESSAGE JMP ODZAP /CONTINUE THERE PRTINFO,.-. /ENDING INFORMATION PRINT ROUTINE TAD PRTFILS /GET TOTAL FILES PRINTED JMS IPRINT /PRINT IT FILMSG /ALONG WITH THIS MESSAGE EZAP, SKP /**** NOT /E **** 0000 JMP NOEMPTY /DON'T PRINT EMPTY SLOT INFORMATION TAD TOTEMPS /GET TOTAL EMPTY SLOTS ENCOUNTERRED JMS IPRINT /PRINT IT EMPMSG /ALONG WITH THIS MESSAGE NOEMPTY,SKP /**** /R **** 0000 JMP I PRTINFO /RETURN WITHOUT PRINTING RESOURCES TAD TOTFILS /GET TOTAL FILE COUNT CIA /INVERT IT TAD TOTSLTS /NOW HAVE TOTAL FREE COUNT JMS IPRINT /PRINT IT FSMSG /ALONG WITH THIS MESSAGE TAD TOTSLTS /GET TOTAL SLOT COUNT JMS IPRINT /PRINT IT TSMSG /ALONG WITH THIS MESSAGE JMP I PRTINFO /RETURN IPRINT, .-. /INFORMATION PRINT ROUTINE DCA ITEMP /SAVE PASSED VALUE JMS I PCRLF/[CRLF] /DO A , TAD ITEMP /GET PASSED VALUE SNA /SKIP IF SOME JMP PRTNO /JUMP IF NONE JMS I PDIVIDE/[DIVIDE]/DIVIDE 12 /BY TEN SNA /HIGH DIGIT SIGNIFICANT? TAD L7760/[" -"0] /NO, MAKE IT A TAD L60/["0&177] /MAKE IT ASCII JMS I OUTPUT /PRINT IT TAD REM /GET LOW DIGIT TAD L60/["0&177] /MAKE IT ASCII JMS I OUTPUT /PRINT IT TAD L40/[" &177] /GET A JMS I OUTPUT /PRINT IT IPRTCOM,TAD I IPRINT /GET PASSED ARGUMENT DCA INLINE /STORE IN-LINE ISZ IPRINT /BUMP PAST ARGUMENT JMS I PSCRIBE/[SCRIBE]/CALL MESSAGE PRINT INLINE, .-. /WILL BE PASSED ARGUMENT NL7777 /-1 TAD ITEMP /COMPARE TO PASSED VALUE SNA CLA /SKIP IF NOT ONE JMP IPRTONE /JUMP IF ONE JMS I PSCRIBE/[SCRIBE]/CALL MESSAGE PRINT ROUTINE SMSG /"S" MESSAGE IPRTONE,JMS I PCRLF/[CRLF] /DO A , JMP I IPRINT /RETURN PRTNO, JMS I PSCRIBE/[SCRIBE]/PRINT THE NOMSG /"NO " MESSAGE JMP IPRTCOMMON /CONTINUE THERE CRLF, .-. /, ROUTINE TAD COLUMN /GET CURRENT COLUMN SNA CLA /SKIP IF NEEDED JMP NOCR /ELSE FORGET IT TAD L15/["M&37] /GET A JMS I OUTPUT /GO PRINT IT NOCR, TAD L12/["J&37] /GET A JMS I OUTPUT /GO PRINT IT ISZ LINCNT /BUMP LINE COUNTER NOP /IN CASE IT SKIPS DCA COLUMN /CLEAR COLUMN COUNT JMP I CRLF /RETURN ITEMP, .-. /TEMPORARY PAGE / P?S/8 ASCII FILE VALIDATOR. / CHECKS FOR VALID POINTERS. / CHECKS FOR VALID LINE NUMBERS. / CHECKS FOR AND DUMMY POINTERS. / CHECKS FOR VALID SEQUENCES. / TAKES SKIP RETURN IF AND ONLY IF FILE IS VALID SIX-BIT ASCII. VALASC, .-. /VALIDATE ASCII TAD I (FILBUFFER+3776)/GET FREE TEXT POINTER JMS RNGCHK /VALIDATE VALUE TAD I (FILBUFFER+3777)/GET FREE LINE NUMBER PAIR POINTER JMS RNGCHK /VALIDATE ITS VALUE ALSO TAD I (FILBUFFER+3776)/GET TEXT POINTER CIA /INVERT FOR TEST TAD I (FILBUFFER+3777)/COMPARE TO LINE NUMBER VALUE SPA CLA /SKIP IF POSSIBLE JMP I VALASC /BARF TAD I (FILBUFFER+3776)/GET TEXT POINTER AGAIN / TAD (FILBUF-FILCORE)/ADJUST FOR LOADING OFFSET DCA TEMP /STASH IT TAD I TEMP /GET WORD SZA CLA /SKIP IF ACTUALLY JMP I VALASC /BARF TAD I (FILBUFFER+3777)/GET PAIR POINTER / TAD (FILBUF-FILCORE)/ADJUST FOR LOADING OFFSET DCA TEMP /STASH IT TAD I TEMP /GET PAIR'S FREE TEXT POINTER CIA /INVERT FOR TEST TAD I (FILBUFFER+3776)/COMPARE TO ALREADY VERIFIED VALUE SZA CLA /SKIP IF THEY MATCH JMP I VALASC /BARF IF THEY DON'T ISZ TEMP /BUMP TO LINE NUMBER TAD I TEMP /GET THE DUMMY LINE NUMBER CLL IAC /SEE IF 7777 SNL CLA /SKIP IF SO JMP I VALASC /BARF IF NOT TAD I (FILBUFFER+3777)/GET DUMMY PAIR POINTER ADDRESS CIA /INVERT NOW, SAVE TIME LATER DCA PARLMT /SAVE FOR TESTING TAD (FILCORE+3774+2)/SETUP THE DCA NUMPTR /INITIAL REVERSE POINTER NUMLUP, NL7776 /\ TAD NUMPTR / >BACKUP TO PREVIOUS PAIR DCA NUMPTR // TAD NUMPTR /GET THE POINTER VALUE JMS RNGCHK /PREVENT DEVIOUS PROBLEMS! TAD NUMPTR /GET IT AGAIN TAD PARLMT /COMPARE TO LIMIT SNA /SKIP IF NOT AT END OF FILE JMP FILOK /JUMP IF SO SPA CLA /SKIP IF POSSIBLE VALUE JMP I VALASC /IMPOSSIBLE VALUE OF POINTER IN THIS FILE TAD NUMPTR /GET LATEST PAIR POINTER / TAD (FILBUFFER-FILCORE) /ADJUST FOR LOADING OFFSET DCA TEMP /SAVE ADJUSTED POINTER TAD I TEMP /GET THE TEXT POINTER JMS RNGCHK /VALIDATE IT TAD TEMP /GET THE POINTER TO TEXT POINTER IAC /BUMP TO LINE NUMBER POINTER DCA TEMP2 /SAVE FOR LATER TAD NUMPTR /GET THE POINTER AGAIN TAD (-FILCORE-3774) /IS IT THE FIRST PAIR? SNA CLA /SKIP IF NOT JMP SPCCHK /JUMP IF SO TAD I TEMP /GET THE TEXT POINTER CLL CIA /INVERT FOR TEST TAD LATLINE /COMPARE TO PREVIOUS TEXT POINTER SZL CLA /SKIP IF HIGHER JMP I VALASC /COMPLAIN OF NON-SEQUENCED TEXT TAD I TEMP2 /GET OUR LINE NUMBER CLL CIA /INVERT FOR TEST TAD LATNUMB /COMPARE TO PREVIOUS LINE NUMBER SZL CLA /SKIP IF OURS IS LARGER JMP I VALASC /BARF ON OUT OF SEQUENCE NUMBERS SPECIN, TAD I TEMP /GET OUR TEXT POINTER CIA /INVERT IT FOR TEST TAD TXTPTR /COMPARE TO UNPACKING POINTER / TAD L7600/[FILCORE-FILBUFF] /ADJUST FOR LOADING OFFSET SZA CLA /SKIP IF THEY MATCH JMP I VALASC /BARF IF EXTRA LINES IN FILE! SRCHZER,TAD I TXTPTR /GET A PAIR FROM OUR TEXT LINE SNA /? JMP I VALASC /YES, BUT IN THE WRONG PLACE! AND L7700/[7700] /JUST LEFT HALF SNA CLA /? JMP FNDZERO /YES TAD I TXTPTR /NO, GET IT AGAIN AND L77/[77] /JUST RIGHT HALF SNA CLA /? JMP FNDZERO /YES ISZ TXTPTR /NO, BUMP TO NEXT PAIR JMP SRCHZERO /TRY AGAIN FNDZERO,ISZ TXTPTR /BUMP TO BEGINNING OF NEXT LINE TAD I TEMP /GET OUR TEXT POINTER DCA LATLINE /SAVE FOR NEXT ROUND OF TESTS TAD I TEMP2 /GET OUR LINE NUMBER DCA LATNUMB /SAVE IT FOR NEXT TIME ALSO JMP NUMLUP /GO CHECK ANOTHER LINE SPCCHK, TAD I TEMP /GET THE TEXT POINTER TAD (-FILCORE) /IS IT AT THE BEGINNING? SZA CLA /SKIP IF SO JMP I VALASC /BARF TAD [FILBUFFER] /SETUP THE DCA TXTPTR /UNPACKING POINTER JMP SPECIN /CONTINUE THERE FILOK, ISZ VALASC /BUMP TO GOOD RETURN JMP I VALASC /AND CELEBRATE GETHALF,.-. /GET A HALF-WORD ROUTINE TAD GTINDX /GET HALF-WORD INDEX CLL RAR /SHIFT WHICH HALF BIT INTO LINK TAD GTBASE /ADD BASE TO INDEX/2 DCA TEMP /SAVE POINTER TAD I TEMP /GET BOTH HALVES SZL /SKIP IF EVEN HALF WANTED JMP .+4 /ELSE LEAVE IT ALONE RTR;RTR;RTR /GET EVEN HALF AND L77/[77] /JUST SIX BITS JMP I GETHALF /RETURN RNGCHK, .-. /VALID RANGE CHECK ROUTINE TAD (-FILCORE-3775) /SUBTRACT BASE CLL /CLEAR LINK FOR TEST TAD (3775) /ADD ON VALID RANGE SNL CLA /SKIP IF IN RANGE JMP I VALASC /COMPLAIN IF NOT JMP I RNGCHK /OK TO GO ON LATLINE,.-. /LATEST LINE POINTER LATNUM, .-. /LATEST LINE NUMBER NUMPTR, .-. /TEMPORARY FOR ASCII VALIDATION PARLMT, .-. /PAIR LIMIT TXTPTR, .-. /TEXT UNPACKING POINTER PAGE / BINARY FILE VALIDATOR. / CHECKS FOR *200 AND ITS FLAG BITS. / CHECKS FOR WITHIN 20 BLOCKS. / CHECKS ANY FIELD SETTINGS FOR 6201 FORM. / TAKES SKIP RETURN ONLY IF FILE IN CORE IS VALID P?S/8 BINARY. VALBIN, .-. /VALIDATE BINARY NL4000 /GET GOOD BITS VALUE TAD I [FILBUFFER] /COMPARE TO FIRST WORD OF FILE AND [6000] /JUST GOOD BITS SZA CLA /SKIP IF OK JMP I VALBIN /BARF TAD I (FILBUFFER+1) /GET FIRST ORIGIN TAD L7600/[-200] /COMPARE TO STANDARD VALUE SZA CLA /SKIP IF VALID JMP I VALBIN /BARF TAD (FILBUFFER-1) /SETUP THE DCA XR2 /BUFFER POINTER TAD L7760/[-20] /SETUP THE DCA BLKCNT /BLOCK COUNT NEWREC, TAD (-22) /SETUP THE DCA GRPCNT /GROUP COINT NEWGRP, TAD L7772/(-6) /SETUP THE DCA WRDCNT /WORD COUNT TAD I XR2 /GET A FLAG WORD CLL RAR /DO INITIAL ADJUSTMENT SKP /NOT THIS TIME! GRPLUP, TAD FLAGS /GET FLAG WORD RTL /SHIFT IT DCA FLAGS /SAVE IT BACK TAD FLAGS /GET IT BACK AGAIN SPA CLA /LOAD WORD OR ORIGIN? JMP EOFCHK /NO, TRY FOR AND FIELD ISZ XR2 /YES, THROW IT AWAY NXTWRD, ISZ WRDCNT /DONE WITH THIS GROUP? JMP GRPLUP /NO, GO BACK FOR MORE ISZ GRPCNT /DONE WITH THIS BLOCK? JMP NEWGRP /NO, KEEP GOING ISZ XR2 /YES, THROW AWAY ISZ XR2 /THE DUMMY WORDS ISZ BLKCNT /DONE WITH THE FILE? JMP NEWREC /NO, GO DO ANOTHER BLOCK JMP I VALBIN /YES, FILE HAS NO ! EOFCHK, SZL CLA /? JMP FLDCHK /NO, CHECK OUT FIELD SETTING ISZ VALBIN /YES, BUMP TO GOOD RETURN JMP I VALBIN /TELL THEM THE GOOD NEWS FLDCHK, TAD I XR2 /GET THE FIELD SETTING AND (7603) /REMOVE FIELD AND BANK BITS TAD (-CDF) /COMPARE TO CDF BASE VALUE SNA CLA /SKIP IF DIFFERENT JMP NXTWRD /JUMP IF OK JMP I VALBIN /TAKE BAD RETURN DEJECT, .-. /DO AN EJECT ROUTINE NPZAP2, JMS I [NEWPAGE] /**** /N **** 0000 NHDZP1, SKP /**** /H **** 0000 JMP NOHED1 /DON'T PRINT HEADER JMS I PSCRIBE/[SCRIBE]/GIVE THE MAIN BLURB SZAP, BLURB /**** /S **** SBLURB JMS I PSCRIBE/[SCRIBE]/GIVE THE CBLURB /COMMON BLURB NOHED1, JMS I PSCRIBE/[SCRIBE]/GIVE THE DATMSG /DATE BLURB NHDZP2, SKP /**** /H **** 0000 JMP NOHED2 /DON'T PRINT HEADER JMS I PSCRIBE/[SCRIBE]/GET THE PAGMSG /PAGE MESSAGE DCA DECOFFSET /PREVENT OCTAL MESSAGES DCA DECCONVERT /PREVENT LEADING CHARACTERS ISZ PAGNUMBER /BUMP TO NEXT PAGE TAD PAGNUMBER /GET THE PAGE NUMBER JMS I [DECPRT] /PRINT IT NOHED2, JMS I PCRLF/[CRLF] /DO A , JMS I PCRLF/[CRLF] /DO EXTRA , TAD (-67) /RESET THE DCA LINCNT /LINES PER PAGE COUNTER JMP I DEJECT /RETURN PRNLFS, .-. /PRINT 'S ROUTINE JMS I PCRLF/[CRLF] /DO A (POSSIBLE) , TAD LINCNT /GET LINE COUNTER SZA CLA /SKIP IF IT OVERFLOWED JMP .-3 /JUMP IF NOT JMP I PRNLFS /RETURN P6CH, .-. /SIX-BIT PRINT ROUTINE AND L77/[77] /JUST SIX-BIT SNA /ANYTHING PASSED? TAD L40/[" &77] /NO, USE A INSTEAD TAD L40/[" &77] /INVERT IT AND L77/[77] /REMOVE EXCESS TAD L40/[" &77] /INVERT IT AGAIN JMS I OUTPUT /PRINT IT JMP I P6CH /RETURN / LINEAR SYMBOL ACCESS ROUTINE. LINEXT, .-. /GET NEXT LINEAR SYMBOL TAD SYMNUM /GET LATEST SYMBOL NUMBER CLL RTL /*4 TAD PCATADR/[CATADR-1] /POINT AT SYMBOL DCA XR2 /STASH THE POINTER TAD I XR2 /GET FIRST PAIR SNA /END OF CATALOG? JMP SETHIGHNAME /YES DCA FNAME /NO, STORE AS FIRST NAME PAIR TAD I XR2 /GET SECOND PAIR DCA FNAME+1 /STORE AS SECOND NAME PAIR TAD I XR2 /GET THIRD PAIR DCA FNAME+2 /STORE AS THIRD NAME PAIR TAD I XR2 /GET FILE TYPE WORD DCA FTYPE /STASH IT TAD SYMNUM /GET SYMBOL NUMBER CLL RTL;RTL /*20 FOR BLOCKS TAD BBLOCK /ADD ON BASE BLOCK OF CATALOG DCA FBLOCK /STASH THE FILE (OR EMPTY) BLOCK TAD FBLOCK /GET IT BACK SKP /DON'T SET IT HIGH SETHIGH,NL7777 /SET HIGH VALUE DCA FNAME+3 /STORE BLOCK WORD JMP I LINEXT /RETURN BLKCNT, .-. /BLOCK COUNTER FLAGS, .-. /LOADING FLAGS GRPCNT, .-. /GROUP COUNTER WRDCNT, .-. /WORD COUNTER PAGE / STRING MATCHING ROUTINE. / TAKES IMMEDIATE RETURN IF FNAME MATCHES SEARCH STRING, ELSE TAKES SKIP RETURN. FILTER, .-. /NAME MATCHING ROUTINE TAD (STACK) /SETUP THE DCA STKPTR /STACK POINTER DCA FINDEX /CLEAR NAME INDEX DCA SINDEX /CLEAR SEARCH STRING INDEX JMS SEARCH /SEARCH THE STRING FOR A MATCH SKP /IT DID MATCH, DON'T ISZ FILTER /BUMP TO UNMATCHING RETURN JMP I FILTER /RETURN EITHER WAY SEARCH, .-. /SEARCH STRING ROUTINE SRCHNXT,TAD (STRBUFFER) /POINT TO DCA GTBASE /SEARCH STRING TAD SINDEX /GET LATEST SEARCH STRING INDEX DCA GTINDX /SET IT UP JMS I [GETHALF] /GET A SEARCH STRING CHARACTER SZA /SKIP IF TAD (-".!200) /ELSE TEST IF EXTENSION DELIMITER SNA /SKIP IF NEITHER JMP CHKNAME /JUMP IF EITHER TAD (-"?+".) /COMPARE TO "?" SNA /SKIP IF OTHER JMP QMATCH /JUMP IF IT MATCHES TAD (-"*+"?) /COMPARE TO "*" SNA /SKIP IF OTHER JMP DOSTAR /JUMP IF IT MATCHES TAD ("*&77) /GET RESTORING VALUE DCA SCHAR /SAVE FOR NOW / CHECK IF CURRENTLY AT END OF NAME STRING. IF THERE ARE NO MORE NAME CHARACTERS / TO MATCH THIS LATEST SEARCH STRING CHARACTER, THEN A MATCH IS IMPOSSIBLE. TAD FINDEX /GET CURRENT NAME INDEX TAD L7772/[-6] /COMPARE TO UPPER LIMIT SMA CLA /SKIP IF LESS JMP NOMATCH /JUMP IF TOO FAR JMS GETNMCH /GET LATEST FILE NAME CHARACTER CIA /INVERT FOR TESTING TAD SCHAR /COMPARE TO SEARCH STRING CHARACTER SZA CLA /SKIP IF IT MATCHES JMP NOMATCH /JUMP IF IT DIDN'T ISZ FINDEX /BUMP TO NEXT NAME CHARACTER MATQENT,ISZ SINDEX /BUMP TO NEXT SEARCH STRING CHARACTER JMP SRCHNXT /KEEP GOING / COMES HERE IF AT END OF SEARCH STRING. THERE MUST NOT BE ANY FILE NAME / CHARACTERS LEFT (UNLESS THERE WAS NO STRING AT ALL!). CHKNAME,TAD SINDEX /GET SEARCH STRING INDEX SZA CLA /SKIP IF NO SEARCH STRING JMS GETNMCH /ELSE GET LATEST FILE NAME CHARACTER SNA CLA /SKIP IF STILL MORE NAME CHARACTERS JMP I SEARCH /RETURN IF AT FILE NAME END / SINCE THERE ARE MORE CHARACTERS IN THE FILE NAME, IT DIDN'T MATCH. JMP NOMATCH /CONTINUE THERE / COMES HERE IF LATEST SEARCH STRING CHARACTER IS "?"; THE CHARACTER / AUTOMATICALLY MATCHES. HOWEVER, SINCE WE ALLOW EXTRA "?" CHARACTERS ON THE / RIGHT, WE MUST NOT ADVANCE THE SEARCH PAST ACTUAL CHARACTERS IN THE FILE / NAME STRING. QMATCH, TAD FINDEX /GET CURRENT INDEX TAD L7772/[-6] /COMPARE TO UPPER LIMIT SPA CLA /SKIP IF TOO FAR ISZ FINDEX /BUMP PAST THIS NOW MATCHED CHARACTER JMP MATQENTRY /CONTINUE THERE / COMES HERE IF LATEST SEARCH STRING CHARACTER IS "*". AN INDEFINITE NUMBER / OF CHARACTERS (INCLUDING ZERO) MATCHES THIS POSITION. WE ASSUME A NULL LENGTH / AT FIRST. SHOULD THIS FAIL TO MATCH, WE BUMP PAST A SINGLE CHARACTER AT / A TIME UNTIL A MATCH OCCURS. SHOULD THE FILE NAME STRING RUN OUT OF CHARACTERS / BEFORE THE REST OF THE SEARCH STRING IS SATISFIED, THE FILE NAME DOESN'T / MATCH. IF FURTHER (POSSIBLY RECURSIVE) CHARACTER MATCHES OCCUR TO THE END / OF THE SEARCH STRING, THE FILE NAME MATCHES. DOSTAR, ISZ SINDEX /BUMP PAST "*" STARAGN,TAD SINDEX /GET SEARCH STRING INDEX PUSH /SAVE ON STACK TAD FINDEX /GET FILE NAME INDEX PUSH /SAVE ON STACK TAD SEARCH /GET CALLING ADDRESS PUSH /SAVE ON STACK JMS SEARCH /TRY TO MATCH THE REST OF THE NAME STRING NL7777 /DID MATCH, SET OR DCA MATSW /CLEAR MATCH FLAG POP /GET OUR CALLER DCA SEARCH /RESTORE IT POP /GET FORMER NAME INDEX DCA FINDEX /RESTORE IT POP /GET FORMER STRING INDEX DCA SINDEX /RESTORE IT ISZ MATSW /DID WE MATCH? SKP /SKIP IF NOT JMP I SEARCH /RETURN IF SO ISZ FINDEX /BUMP TO NEXT CHARACTER TAD FINDEX /GET NEW INDEX VALUE TAD L7772/[-6] /COMPARE TO UPPER LIMIT SPA SNA CLA /SKIP IF TOO FAR JMP STARAGN /TRY TO MATCH IT AGAIN NOMATCH,ISZ SEARCH /BUMP TO BAD RETURN JMP I SEARCH /TAKE FAILURE RETURN TO CURRENT CALLER GETNMCH,.-. /GET LATEST FILE NAME CHARACTER TAD (FNAME) /POINT TO DCA GTBASE /FILE NAME TAD FINDEX /GET CURRENT NAME INDEX DCA GTINDX /SET IT UP JMS I [GETHALF] /GET LATEST NAME CHARACTER JMP I GETNMCH /RETURN PUSHA, .-. /STACK PUSH ROUTINE DCA I STKPTR /STORE ON STACK ISZ STKPTR /BUMP FOR NEXT TIME JMP I PUSHA /RETURN POPA, .-. /STACK POP ROUTINE NL7777 /\ TAD STKPTR / >BACKUP THE STACK POINTER DCA STKPTR // TAD I STKPTR /GET THE VALUE OFF THE STACK JMP I POPA /RETURN PRTOCT, .-. /OCTAL PRINT ROUTINE DCA SCHAR /SAVE PASSED VALUE NL2000 /ENFORCE DCA DECCONVERT /LEADING ZEROES TAD [EIGHTS-TENS] /SETUP THE DCA DECOFFSET /INTER-TABLE OFFSET TAD SCHAR /GET PASSED VALUE JMS I [DECPRT] /GO PRINT IT JMP I PRTOCT /RETURN P2CH, .-. /PRINT TWO CHARACTERS ROUTINE DCA SCHAR /SAVE PASSED PAIR TAD SCHAR /GET IT BACK RTR;RTR;RTR /HIGH-ORDER FIRST JMS I PP6CH/[P6CH] /PRINT IT TAD SCHAR /GET LOW-ORDER JMS I PP6CH/[P6CH] /PRINT IT JMP I P2CH /RETURN FINDEX, .-. /FILE NAME INDEX MATSW, .-. /LATEST TERM MATCHED SWITCH SCHAR, .-. /LATEST SEARCH STRING CHARACTER FOR EXACT MATCH SINDEX, .-. /SEARCH STRING INDEX STKPTR, .-. /STACK POINTER / NEW INSTRUCTION DEFINITIONS. POP= JMS POPA /POP VALUE FROM STACK PUSH= JMS PUSHA /PUSH VALUE ONTO STACK PAGE STACK, *STRLENGTH^3+. /PUSHDOWN STACK STRBUFF,*STRLENGTH%2+1+. /SEARCH STRING BUFFER STREND= . /END OF SEARCH STRING BUFFER *STACK /OVER STACK AREA AND STRING BUFFER, ETC. CPRINT, .-. /CONSOLE-ORIENTED OUTPUT ROUTINE DCA EQUACHK /SAVE PASSED VALUE CPRAGN, JMS I [CHKUP] /CHECK FOR <^C>, ETC. TAD EQUACHK /GET THE VALUE JMS CONOUT /TRY TO OUTPUT IT JMP CPRAGN /DIDN'T, GO CHECK INPUT WHILE WAITING JMS I [CHKUP] /CHECK FOR <^C> AND CLEAN UP JMP I CPRINT /RETURN EQUACHK,.-. /CHECK EQUALS PARAMETER ROUTINE TAD I (SPARM) /GET EQUALS PARAMETER SNA /SKIP IF =0 NOT PASSED IAC /ELSE MAKE IT =1 DCA I (SPARM) /STORE BACK FOR OTHERS TAD I (SPARM) /GET IT BACK CMA /INVERT FOR TEST SNA /SKIP IF NOT =7777 (NOT PASSED AT ALL) JMP I EQUACHK /RETURN IF NONE PASSED CLL IAC /NOW HAVE -EQUALS PARAMETER TAD (MAXCOLS) /COMPARE TO MAXIMUM ALLOWED SNL CLA /SKIP IF OK JMP BADEQUALS /JUMP IF TOO LARGE TAD I (SPARM) /GET OK VALUE DCA NCOLS /STASH IT TAD I (SPARM) /GET IT AGAIN DCA I (DIVARG) /STORE WHERE NEEDED JMP I EQUACHK /RETURN BADEQUA,JMS I (CSCRIBE) /GO COMPLAIN OF BDERR /BAD EQUALS PARAMETER / EXCESSIVE COLUMNS ERROR MESSAGE. BDERR, TEXT "%^T^OO ^M^ANY ^C^OLUMNS!%" /EXCESSIVE COLUMNS MESSAGE / MULTIPLE PERIODS ERROR MESSAGE. DPERR, TEXT "%^M^ULTIPLE ^P^ERIOD ^C^HARACTERS IN ^S^EARCH ^S^TRING!%^" / STRING LENGTH ERROR MESSAGE. SLERR, TEXT "%^S^EARCH ^S^TRING ^T^OO ^L^ONG!%" /STRING TOO LONG MESSAGE PAGE / DIRECTORY PRINT ROUTINE. / PRINTS HORIZONTAL OR VERTICAL LATEST PAGE OF DIRECTORY IN BALANCED SIZE / COLUMNS. DEFAULT IS VERTICAL PRINTOUT; /V PATCHES CAUSE HORIZONTAL OUTPUT. / NCOLS= NUMBER OF DESIRED COLUMNS IN PRINTOUT / NSYMS= TOTAL NUMBER OF SYMBOLS TO BE PRINTED ON THIS PAGE / TO MAXIMIZE WIDTH AND TO SPEED PRINTING, RIGHT-MOST SEPARATIONS ARE PREVENTED. / THE SYMBOL TABLE IS PROBED BETWEEN PRINTED SYMBOLS TO ARRIVE AT THE NEXT / PRINTABLE SYMBOL (IF ANY). IF THERE IS ANOTHER PRINTABLE SYMBOL ON THE SAME / LINE, THEN AN INTER-SYMBOL SEPARATION IS PRINTED FOLLOWED BY THE NEXT SYMBOL. / IF THERE IS NO NEXT SYMBOL ON THE LINE, , IS PRINTED AND THE TABLE / IS PROBED AGAIN FROM THE BEGINNING ADJUSTED FOR THE LATEST LINE. IF NO MORE / INITIAL SYMBOLS EXIST, THE ENTIRE TABLE HAS BEEN PRINTED. / THE NUMBER OF ROWS PRINTED (HEIGHT OF AT LEAST THE LEFT-MOST COLUMN) IS / CALCULATED THUS: / ROWCNT= INT(NSYMS/NCOLS)+U(REM(NSYMS/NCOLS)-[COLUMN NUMBER]) / WHERE U(X)=0 IF X IS NEGATIVE OR ZERO, U(X)=1 IF X IS POSITIVE. / THIS FACTOR IS USED TO LIMIT THE PRINTOUT TO ONE PAGE AT A TIME WITHIN LARGER / PRINTOUTS. THIS VALUE WILL BE FORCED TO 55 BY SETTING NSYMS= 55*NCOLS / BEFORE ENTRY INTO THIS ROUTINE. IF THIS IS A SPECIAL LAST PRINTED PAGE, / THIS VALUE WILL BE FORCED TO A VALUE FROM 47-53 BY SETTING NSYMS= / (55-EXTRA)*NCOLS WHERE EXTRA IS EITHER 2, 4, 6, OR 8 DEPENDING ON THE / VARIOUS PRINTING OPTIONS IN EFFECT (/E, /R, ETC.). IF THIS A SPECIAL / NEXT-TO-LAST PAGE (WHERE THE STATISTICS ARE ON A SEPARATE PAGE), THE VALUE / WILL BE SET TO 48-55 AS NECESSARY (THE STATISTICS AND ALL SYMBOLS WOULD NOT / FIT ON A SINGLE PAGE). / THE WASTE FACTOR TO ARRIVE AT THE NEXT SYMBOL TO PRINT HORIZONTALLY ON THE / SAME LINE WHEN PRINTING VERTICALLY IS CALCULATED THUS: / WASTE= INT(NSYMS/NCOLS)+U(REM(NSYMS/NCOLS)-[COLUMN NUMBER])-1 / FOR EACH ADDITIONAL LINE OF VERTICAL PRINTOUT, AN INCREMENTAL WASTE FACTOR: / IWASTE IS ADDED ON TO THE MASTER POSITION (CONTENTS OF SYMNUM, THE NUMBER / OF SYMBOLS ALREADY PRINTED BEFORE THIS PAGE). / HORIZONTAL PRINTOUT MODIFICATIONS. / TO PRINT HORIZONTALLY, THE WASTE FACTOR IS SET TO ZERO, AS THE NEXT SYMBOL / TO BE PRINTED FOLLOWS THE PREVIOUS SYMBOL PRINTED. TO ARRIVE AT THE NEXT / SYMBOL EACH TIME, THE IWASTE FACTOR WILL BE INCREMENTED ON EVERY SYMBOL, / INSTEAD OF EVERY LINE. PDPAGE, .-. /PRINT DIRECTORY PAGE ROUTINE TAD NSYMS /GET NUMBER OF SYMBOLS TO PRINT JMS I PDIVIDE/[DIVIDE]/DIVIDE IT DIVARG, DEFCOLS /WILL BE NUMBER OF COLUMNS CLA /CLEAN UP NL7777 /-1 TAD QUO /GET NUMBER OF ROWS DCA WASTE /STORE WASTE FACTOR DCA IWASTE /CLEAR INITIAL PROBE WASTE FOR FIRST SYMBOL TAD REM /GET REMAINDER DCA EXTRCNT /SAVE FOR CALCULATING EXTRA INCREMENTS TAD QUO /GET ROW COUNT CIA /INVERT IT DCA ROWCNT /STORE COUNTER PRLOOP, TAD EXTRCNT /GET EXTRA COUNT CMA /INVERT IT FOR COUNTING DCA EXTCNT /SET UP EXTRA COUNTER TAD ROWCNT /GET ROW COUNTER SNA CLA /SKIP IF NOT ZERO DCA EXTRCNT /PREVENT EXTRAS IF ZERO TAD NCOLS /GET NUMBER OF COLUMNS PEXTRA, CIA /INVERT FOR COUNTING DCA COLCNT /STORE AS COLUMN COUNTER DCA SYMNUM /RESET SYMBOL PROBE ROUTINE TAD IWASTE /GET INITIAL WASTE VALUE TAD SYMCNT /ADD ON MASTER POSITION FACTOR JMS WASTESYMBOLS /ADJUST TO FIRST PRINTED SYMBOL ON THIS LINE JMS NXTSYMBOL /GET FIRST SYMBOL ON THIS LINE JMP EOLINE /WASN'T ANY JMS I (FPRINT) /PRINT FILE NAME (OR EMPTY) JMP SEPCHK /CONTINUE THERE DONEXT, ISZ IWASTE /**** NOT /V **** 0000 NOP /JUST IN CASE TAD EXTCNT /GET EXTRA COUNT SZA CLA /SKIP IF ALREADY GONE ISZ EXTCNT /ELSE BUMP IT TAD EXTCNT /GET EXTRA COUNT SZA CLA /SKIP IF TOO FAR IAC /THIS COLUMN IS TALLER BY ONE TAD WASTE /GET WASTE FACTOR VZAP, JMS WASTESYMBOLS /**** /V **** CLA!400 JMS NXTSYMBOL /GET LATEST SYMBOL ON THIS LINE JMP EOLINE /WASN'T ANY, WE'RE DONE WITH THIS LINE JMS P4BLNKS /PRINT SEPARATOR JMS I (FPRINT) /PRINT FILE NAME (OR EMPTY) SEPCHK, ISZ COLCNT /MORE SYMBOLS ON THIS LINE? JMP DONEXT /YES, KEEP GOING EOLINE, JMS I PCRLF/[CRLF] /NO, DO A , ISZ IWASTE /INCREMENT ADJUSTMENT FACTOR FOR NEXT TIME NOP /JUST IN CASE TAD ROWCNT /GET CURRENT ROW COUNTER SZA CLA /SKIP IF ALREADY ZERO ISZ ROWCNT /ELSE BUMP IT TAD ROWCNT /GET NEW ROW COUNT SZA CLA /DONE ALL ROWS? JMP PRLOOP /NO, KEEP GOING TAD EXTRCNT /GET EXTRA COUNT SNA /SKIP IF ANY TO DO JMP I PDPAGE /RETURN NOW IF NONE EXTRA CMA /INVERT IT FOR COUNTING DCA EXTCNT /SETUP COUNTER FOR THE LAST TIME DCA EXTRCNT /CLEAR EXTRA COUNT FOR EXIT NEXT TIME TAD EXTCNT /GET EXTRA COUNT CMA /NEED POSITIVE FORM JMP PEXTRA /CONTINUE THERE / GET NEXT SYMBOL ROUTINE. NXTSYMB,.-. /GET NEXT SYMBOL ROUTINE NXTAGN, JMS I NXTONE /GET NEXT SYMBOL VIA CURRENT METHOD TAD FNAME+3 /GET BLOCK WORD CMA /INVERT FOR TESTING SNA CLA /SKIP IF OTHER THAN HIGH VALUE JMP I NXTSYMBOL /TAKE IMMEDIATE RETURN IF NO SYMBOL DCA FNAME+3 /CLEAR BLOCK WORD TO FORM FILE NAME DELIMITER ISZ SYMNUM /BUMP TO NEXT SYMBOL NOP /JUST IN CASE TAD FNAME /GET FIRST NAME PAIR CMA /INVERT FOR TESTING SNA CLA /SKIP IF NOT AN EMPTY SLOT JMP CHKEMPTY /JUMP IF EMPTY SLOT JMS I [FILTER] /CHECK IF WE WANT THIS ONE TAD FTYPE /GET FILE TYPE VALUE SKP /DON'T CHECK WITH EMPTY VALUE CHKEMPT,NL4000 /SET EMPTY VALUE AND FMASK /CHECK IF DESIRED SNA CLA /SKIP IF WE WANT IT JMP NXTAGN /JUMP IF NOT ISZ NXTSYMBOL /BUMP TO GOOD RETURN JMP I NXTSYMBOL /RETURN TO CALLER P4BLNKS,.-. /PRINT FOUR CHARACTERS ROUTINE TAD [-4] /-4 DCA TEMP2 /TO COUNTER TAD L40/[" &177] /GET A JMS I OUTPUT /PRINT IT ISZ TEMP2 /DONE YET? JMP .-3 /NO, KEEP GOING JMP I P4BLNKS /YES, RETURN P7CH, .-. /BEST DEVICE OUTPUT ROUTINE DCA P7TEMP /SAVE PASSED VALUE ISZ COLUMN /BUMP TO NEXT COLUMN P7AGN, JMS I [CHKUP] /CHECK FOR <^C>, ETC. TAD ECHOSW /GET ECHO SWITCH SPA CLA /SKIP IF ECHO ON JMP P7OFF /JUMP IF ECHO OFF TAD P7TEMP /GET THE PASSED VALUE JMS P7OUT /TRY TO OUTPUT IT JMP P7AGN /TRY INPUT WHILE WAITING P7OFF, JMS I [CHKUP] /CHECK FOR <^C>, ETC. JMP I P7CH /RETURN WASTESY,.-. /WASTE SYMBOL POSITIONS ROUTINE SNA /ANY TO DO JMP I WASTESYMBOLS /NO, JUST RETURN CIA /YES, INVERT IT DCA WASTCNT /STORE AS WASTE COUNTER WASTLUP,JMS NXTSYMBOL /GET NEXT SYMBOL JMP I WASTESYMBOLS /WASN'T ANY, SO RETURN ISZ WASTCNT /DONE ENOUGH? JMP WASTLUP /NO, KEEP GOING JMP I WASTESYMBOLS /YES, RETURN COLCNT, .-. /COLUMN COUNTER EXTCNT, .-. /EXTRA ROW COUNTER EXTRCNT,.-. /EXTRA ROW COUNT IWASTE, .-. /INCREMENTAL WASTE COUNTER NXTONE, SRTNEXT /**** /L **** LINEXT ROWCNT, .-. /ROW COUNTER WASTCNT,.-. /WASTE ROUTINE COUNTER WASTE, .-. /WASTE COUNTER PAGE / COMPARE TWO SYMBOLS ROUTINE. CMPARE, .-. /COMPARE ROUTINE NL7777 /BACKUP TAD I CMPARE /GET FIRST ARGUMENT DCA XR1 /STASH IT ISZ CMPARE /BUMP TO NEXT NL7777 /BACKUP TAD I CMPARE /GET SECOND ARGUMENT DCA XR2 /STASH IT ISZ CMPARE /BUMP PAST ARGUMENT TAD [-4] /SETUP THE DCA TEMP /COMPARE COUNTER CMPLUP, TAD I XR2 /GET A WORD STL CIA /NEGATE FOR TEST TAD I XR1 /COMPARE TO OTHER WORD SNA /SKIP IF UNEQUAL JMP EQUCHK /JUMP IF EQUAL SZL CLA /SKIP IF FIRST GREATER THAN SECOND JMP I CMPARE /TAKE FIRST RETURN IF FIRST LESS THAN SECOND JMP FGTS /FIRST IS GREATER THAN SECOND EQUCHK, ISZ TEMP /CHECKED ALL? JMP CMPLUP /NO, KEEP GOING ISZ CMPARE /YES, BUMP TWICE FOR EQUAL RETURN FGTS, ISZ CMPARE /TAKE SKIP RETURN FOR FIRST GREATER THAN SECOND JMP I CMPARE /RETURN AS NECESSARY / SORTED SYMBOL ACCESS ROUTINE. SRTNEXT,.-. /SORTED SYMBOL ACCESS ROUTINE TAD SYMNUM /GET SYMBOL NUMBER SZA CLA /SKIP IF FIRST SYMBOL WANTED JMP SRTSETUP /JUMP IF OTHER MOVE; ZERO; LOWLIMIT /ZERO LOWER LIMIT SRTSETU,MOVE; HIGH; FNAME /SET FILE NAME TO UPPER LIMIT TAD PCATADR/[CATADR-1] /POINT TO DCA XR3 /CATALOG BUFFER FNDLOOP,TAD I XR3 /GET AN ENTRY SNA /END OF CATALOG? JMP SRTEOT /YES DCA LATEST /NO, STASH IT AS LATEST FIRST NAME PAIR TAD LATEST /GET IT BACK CMA /INVERT FOR TESTING SNA CLA /SKIP IF NOT EMPTY JMP LATEMPTY /JUMP IF AN EMPTY ENTRY TAD I XR3 /GET SECOND WORD DCA LATEST+1 /STORE AS LATEST SECOND NAME PAIR TAD I XR3 /GET THIRD WORD EMPTCOM,DCA LATEST+2 /STORE AS LATEST THIRD NAME PAIR TAD I XR3 /GET FILE TYPE WORD DCA LTYPE /STORE AS LATEST FILE TYPE WORD TAD XR3 /GET THE POINTER TAD (-CATADR-3) /MAKE RELATIVE CLL RTL /*4 FOR BLOCKS TAD BBLOCK /ADD ON BASE BLOCK DCA LATEST+3 /STORE AS LATEST BLOCK COMPARE;LATEST; LOWLIMIT/COMPARE LATEST TO LOWER LIMIT SKP /LATEST < LOWLIMIT SKP /LATEST > LOWLIMIT JMP FNDLOOP /LATEST = LOWLIMIT COMPARE;LATEST; FNAME /COMPARE LATEST TO CURRENT BEST JMP SRTMINIMUM /LATEST < FNAME NOP /LATEST > FNAME JMP FNDLOOP /LATEST = FNAME / COMES HERE IF LATEST ENTRY IS AN EMPTY SLOT. LATEMPT,ISZ XR3 /BUMP PAST ISZ XR3 /REST OF ENTRY NL7777 /SETUP EMPTY VALUE DCA LATEST+1 /STORE IN SECOND NAME PAIR NL7777 /SETUP EMPTY VALUE JMP EMPTCOMMON /CONTINUE THERE / COMES HERE TO STORE LATEST BEST SYMBOL. SRTMINI,MOVE; LATEST; FNAME /USE LATEST AS BEST TAD LATEST+3 /GET LATEST BLOCK DCA FBLOCK /SETUP READ BLOCK TAD LTYPE /GET LATEST FILE TYPE DCA FTYPE /SETUP BEST FILE TYPE JMP FNDLOOP /KEEP GOING / COMES HERE AT END OF CATALOG. SRTEOT, MOVE; FNAME; LOWLIMIT/SETUP LOWER LIMIT FOR NEXT TIME JMP I SRTNEXT /RETURN DIVIDE, .-. /DIVIDE ROUTINE DCA REM /SAVE IN REMAINDER DCA QUO /CLEAR QUOTIENT TAD REM /GET IT BACK STL CIA /INVERT SKP /DON'T FIRST TIME DVLOOP, ISZ QUO /BUMP UP QUOTIENT TAD I DIVIDE /ADD ON ARGUMENT SNA SZL /UNDERFLOW? JMP DVLOOP /NO, KEEP GOING CIA /YES, INVERT IT BACK TAD I DIVIDE /RESTORE LOST VALUE DCA REM /SAVE AS REMAINDER TAD QUO /GET THE QUOTIENT ISZ DIVIDE /BUMP PAST ARGUMENT JMP I DIVIDE /RETURN / MOVE SYMBOL ROUTINE. XMOVE, .-. /MOVE ROUTINE NL7777 /BACKUP TAD I XMOVE /GET FIRST ARGUMENT DCA XR1 /STASH IT ISZ XMOVE /BUMP TO NEXT NL7777 /BACKUP TAD I XMOVE /GET SECOND ARGUMENT DCA XR2 /STASH IT TAD [-4] /SETUP THE DCA TEMP /MOVE COUNT MOVLUP, TAD I XR1 /GET A WORD DCA I XR2 /PUT A WORD ISZ TEMP /DONE YET? JMP MOVLUP /NO, KEEP GOING ISZ XMOVE /YES, BUMP PAST ARGUMENT JMP I XMOVE /RETURN TO CALLER LATEST, ZBLOCK 4 /LATEST SYMBOL LOWLIMI,ZBLOCK 4 /LOWER SYMBOL LIMIT LTYPE, .-. /LATEST FILE TYPE / NEW INSTRUCTION DEFINITIONS. COMPARE=JMS CMPARE /COMPARE TWO SYMBOLS MOVE= JMS XMOVE /MOVE ONE SYMBOL TO ANOTHER SYMBOL PAGE / TEXT MESSAGES. / FILE TYPE MESSAGE. ASCIMSG,TEXT " " /ASCII TYPE MESSAGE / MAIN HEADER TEXT. BLURB, TEXT "^D^IRECTORY OF ^SYSU: ^" /START OF HEADER TEXT UBLURB= .-3 /UNIT GOES HERE / FILE TYPE MESSAGE. BNRYMSG,TEXT " " /BINARY TYPE MESSAGE / COMMON HEADER TEXT. CBLURB, TEXT " ^DIRECT V" /REST OF HEADER TEXT VERSION%12^66+VERSION+6060 /VERSION NUMBER "^^100+REVISION /REVISION TEXT " " /FILLER DBLURB, TEXT "^W^HATDAY? " /DAY TEXT GOES HERE 0 /THIS DEFINITELY ENDS THE TEXT / DATE TEXT. DATMSG, TEXT "DD-^M^MM-YY" /DATE GOES HERE / EMPTY MESSAGE. EMPMSG, TEXT "^F^REE ^F^ILE ^S^LOT^" /FREE FILE SLOT(S) MESSAGE / FILE MESSAGE. FILMSG, TEXT "^F^ILE^" /FILE(S) MESSAGE / FREE SLOT MESSAGE. FREMSG, TEXT "^" /FREE MESSAGE / AVAILABLE FILE SLOTS MESSAGE. FSMSG, TEXT "^A^VAILABLE ^F^ILE ^S^LOT" /AVAILABLE FILE SLOT(S) MESSAGE / NO MESSAGE. NOMSG, TEXT "^N^O " /NO (WHATEVER) MESSAGE / PAGE TEXT. PAGMSG, TEXT " ^P^AGE " /PAGE TEXT / "S" MESSAGE. SMSG, TEXT "S" /"S" MESSAGE / TOTAL SLOTS MESSAGE. TSMSG, TEXT "^T^OTAL ^F^ILE ^S^LOT" /TOTAL FILE SLOT(S) MESSAGE / FILE TYPE MESSAGE. UNKNMSG,TEXT " " /UNKNOWN TYPE MESSAGE / POWERS OF EIGHT FOR OCTAL PRINT. EIGHTS, -1000 /-1000 -100 /-100 -10 /-10 -1 /-1 0 /THIS ENDS THE LIST DECIMAL /FOR POWERS OF TEN / POWERS OF TEN FOR DECIMAL PRINT TENS, -1000 /-1750 -100 /-144 -10 /-12 -1 /-1 0 /THIS ENDS THE LIST OCTAL /BACK TO NORMAL / MULTIPLE WORD DATA. HIGH, 7777; 7777; 7777; 7777 /HIGHEST SYMBOL VALUE ZERO, ZBLOCK 4 /ZEROED OUT AREA PAGE DIREND= . /END OF CODE TO BE MOVED FIELD 0 /THIS WILL DUMP THE LITERALS *DIREND /RESET ORIGIN RELOC /TURN OFF RELOCATION IFNZRO .&177 DIRECT= . /DIRECT SYSTEM STARTS HERE DIRECT, 70/NOP /HERE IN CASE WE'RE CHAINED TO / THE COMMAND BUFFER CONTAINS THE TENTATIVE STRING ARGUMENT STARTING AT THE / CHARACTER POINTED TO BY GETNDX OF THE KEYBOARD MONITOR. MOVE THE ENTIRE / STRING ARGUMENT TO STRBUFFER BEFORE MOVING THE DIRECT CODE OVER 0000-2577. / ONLY THE FIRST 36 CHARACTERS OF THE STRING ARE ALLOWED DUE TO PUSHDOWN / CONSIDERATIONS LATER. TAD (STRBUFFER+PZ) /POINT TO DCA PUTBASE /STRING BUFFER DCA PUTNDX /CLEAR OUTPUT INDEX SKP /DON'T BUMP YET! SMVLUP, ISZ GETNDX /BUMP TO NEXT JMS I GETHAF/[XGETHAF] /GET A CHARACTER FROM COMMAND BUFFER TAD (-" !200) /COMPARE TO SZA /SKIP IF IT MATCHES IAC /TAD (-237+" ) /COMPARE TO SNA CLA /SKIP IF NOT OR JMP SMVLUP /JUMP IF EITHER OR JMS I GETHAF/[XGETHAF] /GET THE CHARACTER AGAIN JMS I PUTHAF/[XPUTHAF] /STORE IN OUR BUFFER ISZ PUTNDX /BUMP TO NEXT JMS I GETHAF /GET THE CHARACTER AGAIN SNA /SKIP IF NOT JMP MVLOOP /JUMP IF TAD (-".!200) /COMPARE TO "." SNA CLA /SKIP IF OTHER ISZ I (XR3+PZ) /ELSE COUNT THIS ONE ISZ I (TOTSLTS+PZ) /TOO MANY CHARACTERS? JMP SMVLUP /NO, KEEP GOING / THE (TRUNCATED) SEARCH STRING IS NOW IN THE SEARCH STRING BUFFER, SO MOVE / OUR CODE TO PAGE ZERO, ETC. MVLOOP, TAD I FROPTR /GET A WORD DCA I TOPTR /PUT A WORD ISZ FROPTR /BUMP THE ISZ TOPTR /POINTERS ISZ MOVCNT /DONE YET? JMP MVLOOP /NO, KEEP GOING XORLUP, TAD I SWPTR /GET A SWITCH WORD AND I OPTPTR /AND AGAINST OPTION WORD CIA /INVERT CLL RAL /*2 TAD I SWPTR /ADD ON SWITCH WORD TAD I OPTPTR /ADD ON OPTION WORD DCA I SWPTR /STORE XOR-ED VALUE ISZ SWPTR /BUMP TO NEXT ISZ OPTPTR /BUMP TO NEXT ISZ XORCNT /DONE ALL YET? JMP XORLUP /NO, KEEP GOING / CHECK FOR CONSOLE OVERLAY. TAD I L7600/[SBOOT] /GET BOOTSTRAP INSTRUCTION TAD (-JMSSYSIO) /COMPARE TO POSSIBLE VALUE SNA CLA /SKIP IF DIFFERENT JMP CHKCOVRLAY /JUMP IF IT MATCHES ISZ CHKKRS /TURN "KRSIOT" ISZ CHKKRS /INTO "KRBIOT" DCA CHKKCC /DESTROY "KCCIOT" CHKCOVR,NL0002 /SET "C" BIT MASK AND I PSCRSIZE/[SCRSIZE] /GET THE "C" BIT SNA CLA /SKIP IF SET JMP I (NOCONSOLE) /JUMP IF NOT TAD I PSCRSIZE/[SCRSIZE] /GET CORE SIZE WORD AGAIN RTR;RAR /MOVE OVER AND AND DIRECT/(70) /ISOLATE MCS BITS TAD (CDF 10) /FORM "CDF MCS+10" DCA TOPTR /STORE IN-LINE TAD TOPTR /GET IT BACK IAC /TAD (CIF-CDF) /FORM "CIF MCS+10" DCA P7TSF /STORE OVER "TSFIOT" TAD P7JMP /GET "JMP I P7OUT" DCA P7TLS /STORE OVER "TLSIOT" TAD (JMS OUTCON) /GET OUTPUT CALL DCA P7JMP /STORE OVER "JMP I P7OUT" TAD P7TSF /GET "CIF MCS+10" DCA CONTSF /STORE OVER "TSFIOT" TAD CONJMP /GET "JMP I CONOUT" DCA CONTLS /STORE OVER "TLSIOT" TAD (JMS OUTCON) /GET OUTPUT CALL DCA CONJMP /STORE OVER "JMP I CONOUT" TAD P7TSF /GET "CIF MCS+10" DCA CHKKSF /STORE OVER "KSFIOT" TAD CHKJMP /GET "JMP I CTLCTST" DCA CHKKRS /STORE OVER "KRSIOT" OR "KRBIOT" TAD (JMS INCON) /GET INPUT CALL DCA CHKJMP /STORE OVER "JMP I CTLCTST" DCA CHKKCC /DESTROY "KCCIOT" TOPTR, 0000 /WILL BE CDF MCS+10 TAD I L4/[LPMODE] /GET BUFFERING MODE CDF 00 /BACK TO OUR FIELD SPA SNA CLA /SKIP IF NO BUFFERING DCA I (BUFZP1) /ENABLE BUFFERING CHECK IN /N CODE TAD P7TSF /GET "CIF MCS+10" DCA I (LPCHK) /STORE OVER "LSFIOT" TAD I (LPJMP) /GET "JMP LPTIME" DCA I (LPRNT) /STORE OVER "LLSIOT" TAD (JMS OUTLPT) /GET LPT: OUTPUT CALL DCA I (LPJMP) /STORE OVER "JMP LPTIME" TAD I (LPTJMSLPWAIT) /GET LPT: TEST CALL DCA I (OUTINIT) /MAKE IT TEST FOR LOGICAL LPT: CORRECTLY DCA I (LOGZAP) /ENABLE LOGICAL LPT: ZAPS JMP I (NOCONSOLE) /CONTINUE THERE FROPTR, PZ /WHERE DIRECT CODE IS NOW MOVCNT, -DIREND /DIRECT CODE MOVE COUNTER OPTPTR, XORSWS /OPTION WORD POINTER SWPTR, SWAL /PASSED SWITCHES POINTER XORCNT, -3 /OPTION WORD COUNTER PAGE $ /THAT'S ALL FOLK!