/ P?S/8 FILE MAINTAINENCE UTILITY / LAST EDIT: 06-OCT-1987 23:00:00 CJL / MUST BE ASSEMBLED WITH '/J' SWITCH SET. / P?S/8 FILE MAINTAINENCE UTILITY FOR FIXED-LENGTH FILES (FILMAN). / SUPPORTED FUNCTIONS: / DEVICE UNIT TO DEVICE UNIT FILE COPYING WITH OPTIONAL SINGLE QUERY MODE. / SINGLE DEVICE UNIT FILE KILLING WITH OPTIONAL SINGLE QUERY MODE. / SINGLE DEVICE UNIT CATALOG EMPTYING. / INVOKED MODE (OPTION(S) INVOKED IN THE COMMAND LINE) AND RESPONSE MODE / (USER IS PROMPTED FOR ALL OPTIONS) OPERATIONS ARE AVAILABLE. THE USE OF / MULTI-CHARACTER OPTIONS UNIQUE TO FILMAN CAUSES INVOKED MODE OPERATION. / RESPONSE MODE OPERATION IS AVAILABLE EITHER ALTERNATIVELY TO OR IN CONJUNCTION / WITH INVOKED MODE OPERATION. / DOCUMENTATION NOTE: / ALL CHARACTERS ENCLOSED IN SQUARE BRACKETS ARE OPTIONAL AND SERVE ONLY TO / EMBELLISH THE COMMAND. / COMMAND LINE DESCRIPTION. / .[R ]FILMAN (SWITCH OPTIONS) (MULTI-CHARACTER OPTIONS) ( OR ) / PROGRAM NAME FIELD DESCRIPTION. / CURRENT P?S/8 KEYBOARD MONITOR CONVENTIONS ALLOW FOR INVOKING A SYSTEM / PROGRAM OR UTILITY BY USE OF THE "R" COMMAND FOLLOWED BY THE PROGRAM NAME. / THIS UTILITY IS ALWAYS CALLED "FILMAN" AND THIS PROGRAM NAME MUST PRECEDE / ALL OTHER OPTIONS. AS OF THE CURRENT IMPLEMENTATION, THERE IS NO ANOMALY / BETWEEN "FILMAN" AND ANY OTHER KEYBOARD MONITOR COMMAND (FIRST TWO LETTERS / WOULD BE "FI") THUS THE "R" COMMAND MAY BE OMITTED. THE USE OF THE "R" COMMAND / TO THE P?S/8 KEYBOARD MONITOR GENERALLY CAUSES SLIGHTLY MORE SYSTEM OVERHEAD / WITH SUPERIOR SYNTAX ERROR MESSAGES (AND OTHER FEATURES IRRELEVANT TO FILMAN) / BUT IN NO WAY AFFECTS THE OPERATION OF THE FILMAN UTILITY. THE STANDARD / IMPLEMENTATION RESTRICTION APPLIES: THE SYSTEM DIRECTORY ENTRY FOR FILMAN / MUST BE IN THE FIRST HALF OF THE SYSTEM DIRECTORY TO ALLOW THE "R" COMMAND / TO BE OMITTED. THIS IS THE INTENDED IMPLEMENTATION; SYSTEMS PROGRAMMERS / ARE ADVISED TO OBEY THIS CONVENTION TO ALLOW CONSISTENCY OF USAGE WITH / DOCUMENTATION! (THE PROGRAM NAME MAY BE CHANGED IF NECESSARY AS THE INTERNAL / CODING OF THE PROGRAM DOES NOT CHECK FOR ANY SPECIFIC PROGRAM NAME DURING / THE COMMAND SCAN) / AS OF THE CURRENT IMPLEMENTATION OF THE KEYBOARD MONITOR, THE "RU" (USUALLY / DESCRIBED AS "RUN") COMMAND IS IDENTICAL TO THE "R" COMMAND AND MAY BE USED / ALTERNATIVELY TO INVOKE FILMAN. / SWITCH OPTION DESCRIPTION. / SWITCH OPTIONS TAKE THE FORM OF ONE OF THE FOLLOWING: / A) A SLASH ("/") CHARACTER FOLLOWED BY A SINGLE OPTION / LETTER/DIGIT FOR EACH OPTION INVOKED. LETTERS ARE IN THE / RANGE "A"-"Z". DIGITS ARE IN THE RANGE "0"-"9". / B) AN OPTION GROUP CONSISTING OF A LEFT PARENTHESIS ("(") / FOLLOWED BY A GROUP OF AT LEAST ONE OPTION LETTER/DIGIT / OPTIONALLY FOLLOWED BY A RIGHT PARENTHESIS (")"). LETTERS / ARE IN THE RANGE "A"-"Z". DIGITS ARE IN THE RANGE "0"-"9". / THE SLASH ("/") CHARACTER MUST BE OMITTED. THE RIGHT / PARENTHESIS (")") MUST BE PRESENT UNLESS THE OPTION GROUP / APPEARS LAST ON THE COMMAND LINE. / MULTI-CHARACTER OPTION DESCRIPTION. / MULTI-CHARACTER OPTIONS TAKE THE FORM OF A SLASH ("/") CHARACTER FOLLOWED / BY A NAME FIELD CONSISTING OF AT LEAST TWO LETTERS FOLLOWED BY A COLON (":") / CHARACTER FOLLOWED BY AN OPTION VALUE (ALSO KNOWN AS A QUALIFIER). WITHIN / THE NAME FIELD, ADDITIONAL LETTERS/DIGITS ARE ALLOWED TO IMMEDIATELY FOLLOW / THE TWO REQUIRED LETTERS FOR EMBELLISHMENT PURPOSES. THE OPTION VALUE WILL / BE REQUIRED TO CONFORM TO ONE OF THE FOLLOWING: / A) ALPHABETIC OPTION VALUES WHICH CONSIST OF ONE LETTER IN / THE RANGE "A"-"Z" OPTIONALLY FOLLOWED BY ADDITIONAL / LETTERS/DIGITS FOR EMBELLISHMENT PURPOSES. ALPHABETIC OPTION / VALUES ARE USED TO DETERMINE OPERATING MODE, AND FILE DATA / TYPE. QUERY AND VERIFY OPTIONS REQUIRE SPECIFIC Y[ES] OR / N[O] VALUES. / B) NUMERIC OPTION VALUES WHICH CONSIST OF A SINGLE DIGIT IN / THE RANGE "0"-"7". NUMERIC OPTION VALUES ARE USED TO SET / THE VARIOUS SYSTEM UNITS 0-7 CORRESPONDING TO THE DEVICES / "SYS0:"-"SYS7:" FOR THE INPUT, OUTPUT AND UNIT OPTIONS. / C) STRING OPTION VALUES CONSIST OF A SERIES OF VALID FILE NAME / CHARACTERS (THE LETTERS FROM "A"-"Z", THE DIGITS "0"-"9", / "[", "\", "]", AND "^") AND/OR THE SPECIAL CHARACTERS "*", / "?" AND ".". IMBEDDED SPACE AND TAB CHARACTERS WILL BE IGNORED. / THE STRING OPTION VALUE IS USED WITH THE NAME OPTION TO / SPECIFY A SEARCH STRING FOR FILE NAME MATCHING. IF ANY / CHARACTER OTHER THAN THE ABOVE IS USED WITHIN THE STRING, / ALL FILE NAMES WILL FAIL TO MATCH. / TERMINATOR DESCRIPTION. / THE NORMAL COMMAND LINE TERMINATOR. THE COMMAND EXECUTES / EITHER INVOKED MODE OR RESPONSE MODE AS REQUIRED. UNLESS / THE /S OPTION IS INVOKED, ADDITIONAL RESPONSE MODE OPERATIONS / OCCUR UNTIL USER EXIT TO THE KEYBOARD MONITOR. / IF THE COMMAND LINE IS TERMINATED WITH AN ACTIVE / CHARACTER, FILMAN WILL AUTOMATICALLY EXIT TO THE KEYBOARD / MONITOR AFTER ONE INVOKED MODE OR RESPONSE MODE OPERATION / AS REQUIRED. SEE THE KEYBOARD MONITOR "SET" COMMAND FOR / THE DEFINITION OF ACTIVE CHARACTERS. / COMMAND LINE RESTRICTIONS. / ALTHOUGH SPACES AND TABS ARE NOT ALLOWED WITHIN THE PROGRAM NAME FIELD / ("FILMAN"), MULTI-CHARACTER OPTIONS (SUCH AS THE EMBELLISHED "VERIFY"), / OR MULTI-CHARACTER OPTION VALUES (SUCH AS THE EMBELLISHED "EVERYTHING"), / THESE CHARACTERS MAY BE USED FREELY BETWEEN ALL COMMAND FIELDS TO SEPARATE / COMPLETE PARAMETERS. SPACES AND TABS ARE ALLOWED BETWEEN SWITCH OPTIONS / USING THE INDIVIDUAL SLASH ("/") FORM, BUT NOT BETWEEN OPTIONS WITHIN AN / OPTION GROUP. SPACES AND TABS ARE ALSO ALLOWED BEFORE AND AFTER THE COLON / (":") CHARACTER OF THE MULTI-CHARACTER OPTIONS, AS WELL AS WITHIN STRING / OPTION VALUES. / 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 TO PREVENT AN / ERROR MESSAGE. 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 / DUE TO P?S/8 MONITOR RESTRICTIONS, ALL SWITCH OPTIONS MUST PRECEDE ANY / MULTI-CHARACTER OPTIONS. SPACES AND TABS ARE NOT ALLOWED AFTER THE SLASH / ("/) IN THE FIRST OF ANY MULTI-CHARACTER OPTIONS. SEE THE DESCRIPTION OF / INVOKED MODE OPERATIONS FOR ANY ADDITIONAL RESTRICTIONS. / SWITCH OPTIONS. / /B USE HARDCOPY-ORIENTED BACKSPACE FOR COMMAND EDITING. DEFAULT / IS SCREEN-ORIENTED BACKSPACE. / /C ATTEMPT TO UTILIZE MORE CORE. IF AVAILABLE, A PARTIAL (3K) / OR FULL (4K) FIELD OF ADDITIONAL MEMORY WILL BE USED TO / ACCELERATE ALL OPERATIONS. THIS OPTION IS ONLY NECESSARY / ON SYSTEMS WHERE THE CURRENT LOGICAL CORE SIZE IS 4K AND / MORE IS ACTUALLY AVAILABLE. / /E EMPTYING OF THE SPECIFIED CATALOG UNIT WILL OCCUR. INVOKING / THIS OPTION OVERRIDES THE DEFAULT OPERATION OF UNIT TO UNIT / COPYING. IF /Y IS NOT INVOKED, THE USER WILL BE PROMPTED / WITH "ARE YOU SURE? " REQUIRING A Y(ES)/N(O) RESPONSE BEFORE / THE CATALOG IS ACTUALLY EMPTIED. EQUIVALENT TO MO[DE]:E[MPTY]. / /I INVOKED MODE OPERATION WILL OCCUR. DEFAULT IS RESPONSE MODE / OPERATION ONLY. SINCE USE OF ANY MULTI-CHARACTER OPTION / IMPLIES INVOKED MODE, /I IS ONLY REQUIRED WHEN ALL PARAMETERS / OF INVOKED MODE OPERATION ARE DEFAULTED. (SEE DEFAULT / PARAMETERS FOR INVOKED MODE OPERATION.) / /K FILES WILL BE KILLED FROM THE SPECIFIED CATALOG UNIT. INVOKING / THIS OPTION OVERRIDES THE DEFAULT OPERATION OF UNIT TO UNIT / COPYING. IF /Y IS NOT INVOKED, THE USER WILL BE PROMPTED / WITH "ARE YOU SURE? " REQUIRING A Y(ES)/N(O) RESPONSE BEFORE / THE FILES ARE ACTUALLY KILLED FROM THE CATALOG. INVOKING / THE QUERY MODE WILL ALLOW ALL ELEGIBLE FILES TO BE KILLED / INDIVIDUALLY. EQUIVALENT TO MO[DE]:K[ILL]. SEE /Q. / /N NO VERIFICATION WILL BE PERFORMED. DEFAULT IS TO VERIFY / ALL WRITE OPERATIONS. EQUIVALENT TO VE[RIFY]:N[O]. / /O OVERRIDE FILE TYPE IDENTIFICATION. THIS ALLOWS ALL FILES / TO BE CONSIDERED (AS IN TY[PE]:E[VERYTHING]), BUT PREVENTS / FILE TYPE IDENTIFICATION. EQUIVALENT TO TY[PE]:O[VERRIDE]. / OPERATIONS ARE GENERALLY FASTER THAN WHEN INVOKING OTHER / FILE TYPES (A[SCII], B[INARY], C[OMBINED], E[VERYTHING]), / AS THE FILES ARE NOT READ FOR CONTENT VALIDATION. / /Q INDIVIDUAL QUERY MODE IS USED. ALL ELEGIBLE FILES WILL BE / COPIED (MO[DE]:C[OPY] WHICH IS DEFAULT) OR KILLED (/K OR / MO[DE]:K[ILL]) SUBJECT TO A Y(ES) OR N(O) RESPONSE TYPED / ON THE SYSTEM CONSOLE. EQUIVALENT TO QU[ERY]:Y[ES]. THE / QUERY MODE CAN BE REVERSED DURING ALL FILMAN OPERATIONS / BY PRESSING <^R> ON THE SYSTEM CONSOLE. / /S SINGLE OPERATION OPTION. FILMAN TERMINATES AFTER THE FIRST / OPERATION (EITHER INVOKED MODE OR RESPONSE MODE). EQUIVALENT / TO TERMINATING THE COMMAND LINE WITH . / /U OUTPUT IN UPPER-CASE ONLY. DEFAULT IS UPPER/LOWER CASE OUTPUT. / /Y USED TO EFFECTIVELY ANSWER "YES" TO THE "ARE YOU SURE? " / QUERY OF /E (MO[DE]:E[MPTY]) OR /K (MO[DE]:K[ILL]). THE / QUERY WILL NOT BE ISSUED. / MULTI-CHARACTER OPTIONS. / IN[PUT]:I I=INPUT UNIT FOR COPY OPERATION. THE INPUT UNIT CAN BE ANY / SYSTEM LOGICAL UNIT FROM 0-7. THIS OPTION CAN BE INVOKED / IN COMBINATION WITH MO[DE]:C[OPY] (DEFAULT) AND MUST NOT / BE COMBINED WITH MO[DE]:K[ILL] OR MO[DE]:E[MPTY]. IT MAY / NOT BE COMBINED WITH U[NIT]:U. ILLEGAL COMBINATIONS WILL / YIELD THE ERROR MESSAGE "UNIT AND MODE CONFLICT!". / MO[DE]:M M=C[OPY] (DEFAULT) OR K[ILL] OR E[MPTY] OR Q[UIT]. FILES / WILL BE COPIED OR KILLED OR ENTIRELY REMOVED AS NECESSARY. / INVOKING /K IS IDENTICAL TO MO[DE]:K[ILL]. INVOKING /E IS / IDENTICAL TO MO[DE]:E[MPTY]. MO[DE]:Q[UIT] CAUSES EXIT TO / THE MONITOR EFFECTIVELY NULLIFYING THE COMMAND. / NA[ME]:STRING OPTIONAL SEARCH STRING TO LIMIT FILES TO BE COPIED (DEFAULT / OPERATION OR MO[DE]:C[OPY]) OR KILLED (/K OR MO[DE]:K[ILL]) / TO THOSE FILES "MATCHING" THE SEARCH STRING. THE SEARCH / STRING CAN CONSIST OF ANY COMBINATION OF VALID P?S/8 / FIXED-LENGTH FILE NAME CHARACTERS ("A"-"Z", "0"-"9", "[", / "\", "]", "^") AND THE "WILD-CARD" CHARACTERS ("*", "?"), / AND AT MOST A SINGLE OCCURRENCE OF THE EXTENSION CHARACTER / ("."). THE "?" MATCHES ANY SINGLE CHARACTER IN A FILE NAME / WHICH MUST BE PRESENT, UNLESS THE "?" (OR A SERIES OF "?" / CHARACTERS) IS RIGHT-MOST IN THE SEARCH STRING IN WHICH / CASE THE CORRESPONDING FILE NAME CHARACTERS MAY BE NON-EXISTANT / IF NECESSARY. THIS ALLOWS THE USE OF EXCESS "?" CHARACTERS / WHEN MATCHING LEADING PORTIONS OF FILE NAMES (THE COMMAND / MAY CONTAIN EXTRA RIGHT-MOST "?" CHARACTERS WHICH ARE / EFFECTIVELY IGNORED). THE "*" MATCHES AN ARBITRARY NUMBER / OF FILE NAME CHARACTERS FROM NONE THROUGH THE ENTIRE NAME / IF NECESSARY. A SINGLE OCCURRENCE OF THE SPECIAL CHARACTER / (".") MAY OPTIONALLY BE GIVEN AT THE END OF THE SEARCH STRING / OPTIONALLY FOLLOWED BY AN ADDITIONAL STRING USING ALL OTHER / VALID SEARCH CHARACTERS (THE "." AND EXTENSION STRING WILL / BE IGNORED). IMBEDDED SPACE AND TAB CHARACTERS ARE IGNORED. / MAXIMUM SEARCH STRING LENGTH IS 36 CHARACTERS. / OU[TPUT]:O O=OUTPUT UNIT. THE OUTPUT UNIT CAN BE ANY SYSTEM LOGICAL / UNIT FROM 0-7. THIS OPTION CAN BE INVOKED IN COMBINATION / WITH MO[DE]:C[OPY] (DEFAULT) AND MUST NOT BE COMBINED WITH / MO[DE]:K[ILL] OR MO[DE]:E[MPTY]. IT MAY NOT BE COMBINED / WITH U[NIT]:U. ILLEGAL COMBINATIONS WILL YIELD THE ERROR / MESSAGE "UNIT AND MODE CONFLICT!". IF THE OUTPUT UNIT IS / IDENTICAL TO THE INPUT UNIT (O=I) THEN IN-PLACE COPYING / WILL OCCUR. THIS IS USEFUL (IN CONJUNCTION WITH THE INDIVIDUAL / QUERY MODE) TO INVESTIGATE THE DATA TYPE OF FILES WITHOUT / NECESSARILY PERFORMING ANY EFFECTIVE COPYING OPERATIONS. / QU[ERY]:Q Q=Y[ES] OR N[O]. IF QU[ERY]:Y[ES] IS INVOKED, THE USER WILL / BE REQUIRED TO RESPOND Y(ES) OR N(O) FOR EACH ELEGIBLE FILE / TO BE COPIED (MO[DE]:C[OPY]) OR KILLED (MO[DE]:K[ILL]). / INVOKING /Q IS EQUIVALENT TO QU[ERY]:Y[ES]. / TY[PE]:T T=DATA TYPE OF FILE (SEE BELOW). / UN[IT]:U U=UNIT FOR FILE KILLING (MO[DE]:K[ILL]) OR CATALOG EMPTYING / (MO[DE]:E[MPTY]). THIS OPTION MUST NOT BE INVOKED IN / COMBINATION WITH IN[PUT]:I OR OU[TPUT]:O OR MO[DE]:C[OPY]. / ILLEGAL COMBINATIONS WILL YIELD THE ERROR MESSAGE "UNIT / AND MODE CONFLICT!". / VE[RIFY]:V V=Y[ES] OR N[O]. ALL WRITE OPERATIONS ARE VERIFIED IF / VE[RIFY]:Y[ES] IS INVOKED (DEFAULT). VE[RIFY]:N[O] IS GENERALLY / FASTER AT THE EXPENSE OF RELIABILITY. INVOKING /N IS EQUIVALENT / TO VE[RIFY]:N[O]. / FILE DATA TYPES. / A[SCII] ONLY VALID ASCII FILES WILL BE CONSIDERED. / B[INARY] ONLY VALID BINARY FILES WILL BE CONSIDERED. / C[OMBINED] COMBINATION OF A AND B. / E[VERYTHING] EVERYTHING WILL BE ALLOWED. / O[VERRIDE] GENERALLY THE SAME AS E[VERYTHING], HOWEVER, NO FILE TYPING / IS PERFORMED. THIS IS GENERALLY FASTER AS THE FILES WILL / NOT BE READ FOR TYPE VALIDATION. / ASSUMING OVERRIDE IS NOT IN EFFECT, ALL EXISTENT FILES ARE READ AND TYPE / VALIDATED. ALL FILES ELEGIBLE UNDER THE PREVAILING FILE DATA TYPE WILL BE / REPORTED ON THE CONSOLE TERMINAL DURING THE PREVAILING OPERATION. THE FILE / IDENTIFICATION WILL CONSIST OF: / FILE IS VALID ASCII TYPE. / FILE IS VALID BINARY TYPE. / FILE IS UNKNOWN TYPE (AVAILABLE ONLY IF FILE TYPE E[VERYTHING] / IS USED). / INVOKED MODE OPERATIONS. / THE USE OF /I OR ANY MULTI-CHARACTER OPTIONS CAUSES INVOKED MODE OPERATIONS. / INVOKED MODE OPERATIONS TAKE ALL PARAMETERS FROM THE COMMAND LINE ONLY AND / CAN BE USED UNATTENDED IF DESIRED. QUERY RESPONSES ARE REQUIRED FROM THE / CONSOLE TERMINAL ONLY IF INVOKED IN THE COMMAND LINE. THIS ALLOWS UNATTENDED / BATCH OPERATIONS IF DESIRED, OR USER QUERY REGARDING FILE DISPOSITION AND / CATALOG EMPTYING FROM THE CONSOLE TERMINAL WHILE RUNNING A BATCH JOB. RESPONSE / MODE OPERATIONS CAN BE ALLOWED OR PREVENTED AS NECESSARY. / INVOKED MODE OPERATION ALLOWS THE USER TO COMPLETELY SPECIFY ALL PARAMETERS / ON THE COMMAND LINE IN A CONCISE FORM. ALL PARAMETERS NOT SPECIFIED ARE / SUBJECT TO THE FOLLOWING DEFAULTS: / MODE:COPY FILES WILL BE COPIED FROM THE SPECIFIED INPUT UNIT TO THE / SPECIFIED OUTPUT UNIT. / INPUT:B THE INPUT FILES ARE LOCATED ON UNIT: . / OUTPUT:U THE OUTPUT FILES ARE TO BE COPIED TO UNIT: . SINCE MOST SYSTEMS SUPPORT A UNIT 1 AND BOOTSTRAP / TO UNIT 0, THIS GENERALLY MEANS THE DEFAULT COPY WILL BE / FROM UNIT 0 TO UNIT 1. / TYPE:EVERYTHING ALL FILE TYPES ARE ELEGIBLE FOR COPYING AND WILL BE IDENTIFIED / AS TO FILE TYPE (, , ). / NAME:* ALL FILE NAMES ARE ELEGIBLE FOR COPYING. / QUERY:NO THE FILES WILL BE COPIED WITHOUT USER QUERY. / VERIFY:YES ALL FILES COPIED WILL BE WRITTEN AND VERIFIED. / UNIT:U ASSUMING MO[DE]:K[ILL] OR MO[DE]:E[MPTY] IS INVOKED, THE / FILES TO BE REMOVED ARE LOCATED ON UNIT: . / INVOKED MODE COMMAND LINE RESTRICTIONS. / IT IS RECOMMENDED THAT THE USER POSITION MO[DE]:M AS THE FIRST MULTI-CHARACTER / OPTION ON THE COMMAND LINE FOR INVOKED MODE OPERATION. ALL OTHER / MULTI-CHARACTER OPTIONS ARE ALLOWED TO BE FIRST ON THE COMMAND LINE SUBJECT / TO THE FOLLOWING: / CERTAIN MULTI-CHARACTER OPTIONS GIVEN FIRST ON THE COMMAND LINE NULLIFY / THE EFFECT OF CERTAIN SWITCH OPTIONS DUE TO ANOMALY WITHIN THE P?S/8 KEYBOARD / MONITOR ROUTINES. THE FOLLOWING COMBINATIONS ARE NOT ALLOWED: / FIRST MULTI-CHARACTER OPTION SWITCH OPTION / /NA[ME]:STRING /N / /OU[TPUT]:O /O / /UN[IT]:U /U / IN ADDITION, /Q WILL BE IGNORED IF QU[ERY]:Q IS USED, AS THE MULTI-CHARACTER / OPTION HAS PRIORITY OVER THE SWITCH OPTION. / ALL OTHER MULTI-CHARACTER OPTIONS CAN BE FIRST ON THE COMMAND LINE; THERE / IS NO ORDERING RESTRICTION REGARDING THE REST OF THE MULTI-CHARACTER OPTIONS / ON THE COMMAND LINE. MULTIPLE USAGE OF PARAMETERS IS ALLOWED; ALL BUT THE / LAST ARE IGNORED. / EXAMPLES OF INVOKED MODE OPERATION. / FILE COPY. / .FILMAN/MODE:COPY/INPUT:4/OUTPUT:6/TYPE:EVERYTHING/VERIFY:YES/QUERY:NO/NAME:*$ / FILES COPIED: / SYS4:FOOBAR => SYS6:FOOBAR [OK] / SYS4:FOO => SYS6:FOO [OK] / SYS4:BAR => SYS6:BAR [OK] / 3 FILES COPIED / THIS COMMAND COPIES ALL FILES FROM UNIT 4 TO UNIT 6 WITH VERIFICATION. ALL / FILE TYPES WERE ELEGIBLE AS WERE ALL FILE NAMES. NO USER QUERY WAS REQUIRED. / THE "$" AT THE END OF THE COMMAND LINE SIGNIFIES USE OF AN ACTIVE / CHARACTER WHICH PREVENTED RESPONSE MODE OPERATIONS AND CAUSED EXIT TO THE / MONITOR. / FILE KILL. / .FILMAN/S/MODE:KILL/UNIT:7/TYPE:COMBINED/QUERY:YES/NAME:F* / FILES KILLED: / SYS7:FEWBAR ? YES! [OK] / SYS7:FOOB ? NO! / SYS7:FBAR ? NO! / ARE YOU SURE? YES! / 1 FILE KILLED / THIS COMMAND KILLS ALL ASCII AND BINARY FILES ON SYSTEM UNIT 7 WHOSE NAMES / START WITH "F" SUBJECT TO USER QUERY. THE CATALOG WILL BE RE-WRITTEN WITH / VERIFICATION BY DEFAULT. SINCE /Y WAS NOT INVOKED, THE USER WAS QUERIED / WHETHER TO ACTUALLY KILL THE FILE(S). SINCE /S WAS INVOKED, RESPONSE MODE / OPERATION WAS PREVENTED AND FILMAN EXITS TO THE MONITOR. / CATALOG EMPTY. / .FILMAN/MODE:EMPTY/UNIT:2 / CATALOG OF SYS2: TO BE EMPTIED (84 FILES CURRENTLY) / ARE YOU SURE? YES! / CATALOG OF SYS2: NOW EMPTY (84 FREE SLOTS) / MODE: ^C / THIS COMMAND EMPTIES THE CATALOG ON UNIT 2. THE CATALOG WILL BE RE-WRITTEN / WITH VERIFICATION BY DEFAULT. SINCE /Y WAS NOT INVOKED, THE USER WAS QUERIED / WHETHER TO ACTUALLY EMPTY THE CATALOG. RESPONSE MODE OPERATION WAS INITIATED / AND THE USER EXITS TO THE MONITOR VIA <^C>. / RESPONSE MODE OPERATIONS. / ASSUMING NO MULTI-CHARACTER OPTIONS OR /I, FILMAN WILL INITIATE RESPONSE / MODE OPERATIONS. IF INVOKED MODE OPERATIONS OCCUR, AND THE COMMAND LINE / WAS NOT TERMINATED BY AN ACTIVE CHARACTER, AND /S WAS NOT INVOKED, / RESPONSE MODE OPERATION WILL COMMENCE AFTER THE INVOKED MODE OPERATION HAS / COMPLETED. IF ANY OPERATION (INVOKED OR RESPONSE) IS TERMINATED PREMATURELY / BY <^P> PRESSED ON THE SYSTEM CONSOLE TERMINAL, RESPONSE MODE OPERATION / WILL BE INITIATED. / RESPONSE MODE OPERATION GIVES THE USER INDIVIDUAL PROMPTS FOR EACH PARAMETER / WHICH AGGREGATE TO THE SAME INFORMATION USED WITH INVOKED MODE OPERATION. / THERE ARE NO DEFAULTS, HENCE ALL QUESTIONS MUST BE ANSWERED. RESPONSE MODE / OPERATION LOOPS INDEFINITELY UNTIL USER EXIT, THUS REPEATED OPERATIONS ARE / POSSIBLE. / RESPONSE MODE OPERATIONS ARE IDENTICAL TO THOSE SUPPORTED BY INVOKED MODE / OPERATION: COPY, KILL, EMPTY, AND QUIT. USING THE QUIT MODE IS AN OPTIONAL / WAY TO EXIT TO THE MONITOR. ALL RESPONSE MODE OPERATIONS ARE SUBJECT TO / THE FOLLOWING SWITCH OPTIONS INVOKED ON THE COMMAND LINE: / /B USE HARDCOPY-ORIENTED BACKSPACE FOR COMMAND EDITING. DEFAULT IS / SCREEN-ORIENTED BACKSPACE. / /C THE CORE SIZE HAS BEEN INCREASED IF POSSIBLE. ALL OPERATIONS EXECUTE / AS QUICKLY AS POSSIBLE. / /N NO VERIFICATION OF WRITE OPERATIONS WILL BE DONE. ALSO OCCURS IF / VE[RIFY]:N[O] WAS USED IN THE OPTIONAL INVOKED MODE OPERATION PRIOR / TO THE RESPONSE MODE OPERATION(S). / /Q USER QUERY GIVEN FOR EACH ELEGIBLE FILE. A Y(ES) OR N(O) RESPONSE / IS REQUIRED FOR EVERY FILE TRANSACTION. ALSO OCCURS IF QU[ERY]:Y[ES] / WAS USED IN THE OPTIONAL INVOKED MODE OPERATION PRIOR TO THE RESPONSE / MODE OPERATION(S). / /S ASSUMING NO INVOKED MODE OPERATION, THERE WILL BE ONLY ONE RESPONSE / MODE OPERATION FOLLOWED BY EXIT TO THE MONITOR. ALSO OCCURS IF THE / COMMAND LINE WAS TERMINATED BY AN ACTIVE CHARACTER. / /U OUTPUT IN UPPER-CASE ONLY. MESSAGES FROM FILMAN WILL BE FORCED TO / UPPER-CASE. / /Y PREVENT THE "ARE YOU SURE? " QUERY ASSOCIATED WITH KILL AND EMPTY / MODES. / ALL OTHER OPTION SWITCHES AND MULTI-CHARACTER OPTIONS ARE IGNORED DURING / RESPONSE MODE OPERATIONS. / THE FIRST USAGE OF RESPONSE MODE CAUSES THE PROGRAM ANNOUNCEMENT MESSAGE / INCLUDING THE VERSION AND REVISION, ETC. (THIS WILL NOT OCCUR IF INVOKED / MODE OPERATION PRECEDES RESPONSE MODE.) / RESPONSE MODE OPERATIONS REQUIRE A SINGLE CHARACTER RESPONSE (EXCEPT THE / "NAME: " OPTION WHICH ALLOWS UP TO 36 CHARACTERS) FOLLOWED BY OR . / IF THE OPTION CHOSEN IS INVALID, AN ERROR MESSAGE WILL BE ISSUED. IF / APPLICABLE, THE OPTION WILL BE EMBELLISHED AUTOMATICALLY TO A FULL WORD / RESPONSE. FOR EXAMPLE: THE "TYPE: " QUERY WOULD PRINT "EVERYTHING" WHEN / THE USER TYPED "E". THE USE OF ESCAPE ON ANY RESPONSE WILL CAUSE FILMAN / TO EXIT AFTER COMPLETING THE LATEST OPERATION. / RESPONSE MODE OPERATION MUST EXIT VIA USER INPUT AND CANNOT BE USED / UNATTENDED. THE USUAL BATCH CONSIDERATIONS APPLY: IF , <^A>, <^B>, / OR <^C> IS PRESSED ON THE SYSTEM CONSOLE TERMINAL, FILMAN WILL EXIT TO THE / MONITOR. IF EXIT WAS VIA <^C>, AND FILMAN WAS RUNNING UNDER BATCH, THE BATCH / JOB WILL TERMINATE AND EXIT TO THE MONITOR. / EXAMPLES OF RESPONSE MODE OPERATION. / FILE COPY. / .FILMAN(QCUNS) / P?S/8 FILE MAINTAINENCE UTILITY VERSION 10A / MODE: COPY / INPUT: 0 / OUTPUT: 1 / TYPE: EVERYTHING / NAME: * / FILES COPIED: / SYS0:FOOBAR ? YES! => SYS1:FOOBAR / SYS0:BARFOO ? YES! => SYS1:BARFOO / SYS0:NOTKOP ? NO! / SYS0:FEWBAR ? YES! => SYS1:FEWBAR / 3 FILES COPIED / THIS COMMAND ATTEMPTS TO ACQUIRE MORE CORE TO RUN IN. FILES ARE COPIED FROM / UNIT 0 TO UNIT 1 WITH USER QUERY WITH ALL PROGRAM OUTPUT IN UPPER-CASE. / ALL FILE TYPES AND ALL FILE NAMES ARE ELEGIBLE TO BE COPIED. NO FILE WRITE / VERIFICATION WILL BE PERFORMED, SO THERE ARE NO "[OK]" MESSAGES TO CONFIRM / THE CORRECT FILE CONTENTS. SINCE /S WAS INVOKED, THE PROGRAM EXITS TO THE / MONITOR AFTER ONE OPERATION. / FILE KILL. / .FILMAN/Q / P?S/8 FILE MAINTAINENCE UTILITY VERSION 10A / MODE: KILL / UNIT: 4 / TYPE: BINARY / NAME: *BA* / FILES KILLED: / SYS4:FOOBAR ? YES! [OK] / SYS4:BAR ? NO! / SYS4:BATCH ? NO! / 1 FILE KILLED / MODE: ^C / THIS COMMAND KILLS ALL BINARY FILES ON UNIT 4 WHOSE NAMES HAVE "BA" IMBEDDED / WITHIN THEM SUBJECT TO USER QUERY. THE CATALOG WILL BE RE-WRITTEN WITH / VERIFICATION BY DEFAULT. EXIT IS VIA <^C> TO THE MONITOR. / CATALOG EMPTY. / .R FILMAN / P?S/8 FILE MAINTAINENCE UTILITY VERSION 10A / MODE: EMPTY / UNIT: 5 / CATALOG OF SYS5: TO BE EMPTIED (1 FILE CURRENTLY) / ARE YOU SURE? YES! / CATALOG OF SYS2: NOW EMPTY (84 FREE SLOTS) / MODE: QUIT / THIS COMMAND EMPTIES THE CATALOG ON UNIT 5. THE CATALOG WILL BE RE-WRITTEN / WITH VERIFICATION BY DEFAULT. SINCE /Y WAS NOT INVOKED, THE USER WAS QUERIED / WHETHER TO ACTUALLY EMPTY THE CATALOG. THE USER EXITS TO THE MONITOR VIA / THE QUIT MODE. / PROGRAM EXIT CONDITIONS. / THE /S OPTION OR COMMAND LINE TERMINATION WITH AN ACTIVE CHARACTER / CAUSES AUTOMATIC EXIT AFTER ONE COMPLETE OPERATION. IF THIS OPERATION IS / TERMINATED PREMATURELY BY THE USER PRESSING <^P> ON THE SYSTEM CONSOLE / TERMINAL, RESPONSE MODE WILL BE (RE)STARTED TO ATTEMPT A COMPLETE OPERATION. / IF THE OPERATION COMPLETES, FILMAN WILL THEN EXIT TO THE MONITOR. / ASSUMING /S OR COMMAND LINE TERMINATION WITH AN ACTIVE CHARACTER ARE / NOT IN EFFECT, THE FOLLOWING WILL APPLY: / A) IF INVOKED MODE IS REQUESTED, THEN RESPONSE MODE WILL FOLLOW THE / COMPLETION OF THE INVOKED MODE OPERATION (UNLESS MO[DE]:Q[UIT] WAS / REQUESTED, WHICH EFFECTIVELY CAUSES NO OPERATION TO BE PERFORMED / AND AUTOMATICALLY EXITS TO THE MONITOR). / B) IF RESPONSE MODE IS REQUESTED, THEN RESPONSE MODE WILL RESTART / AUTOMATICALLY FOLLOWING THE COMPLETION OF THE PREVIOUS RESPONSE / MODE OPERATION. / C) RESPONSE MODE WILL LOOP INDEFINITELY UNTIL USER EXIT. SEE BELOW / FOR METHODS OF TERMINATION BY THE USER. / IMPROPER COMMAND LINES MAY BE REJECTED BY THE KEYBOARD MONITOR FOR REASONS / CONCERNING THE OVERALL COMMAND STRUCTURE BUT NOT RELATED TO THE / MULTI-CHARACTER OPTIONS, IF ANY. FILMAN WILL AUTOMATICALLY EXIT AFTER ISSUING / ERROR MESSAGES CONCERNING EITHER IMPROPERLY FORMATTED MULTI-CHARACTER OPTIONS, / OR IMPROPER CONTENTS OF ANY MULTI-CHARACTER OPTION OR OPTION VALUE, OR OPTION / CONFLICT AS NECESSARY. NO OPERATION WILL BE PERFORMED IF ANY COMMAND ERROR / IS DETECTED. / USER TERMINATION METHODS. / IN THE RESPONSE MODE, THE USER CAN CAUSE FILMAN TO EXIT BY USING THE VALUE: / Q(UIT) TO THE "MODE:" PROMPT AT THE BEGINNING OF EACH RESPONSE MODE CYCLE. / IN ADDITION, ALL FILMAN OPERATING PHASES MAY BE EXIT VIA ONE OF THE FOLLOWING: / A) THE USER MAY PRESS <^P> ON THE SYSTEM CONSOLE TERMINAL. THIS CAUSES / PREMATURE COMPLETION OF THE CURRENT OPERATION INCLUDING CLOSING / ANY OPEN CATALOGS IF NECESSARY. FILMAN THEN RESTARTS IN RESPONSE / MODE (UNLESS AN ACTIVE CHARACTER COMMAND TERMINATION OR /S / IS IN EFFECT, IN WHICH CASE FILMAN EXITS TO THE KEYBOARD MONITOR). / B) THE USER MAY PRESS ON THE SYSTEM CONSOLE TERMINAL. THIS / CAUSES PREMATURE COMPLETION OF THE CURRENT OPERATION. NO CATALOG / UPDATE IS PERFORMED, THUS VARIOUS CATALOG ENTRIES COULD BE MISSING / OR OBSOLETE DEPENDING ON THE ACTIONS OF THE CURRENT COMMAND. THIS / METHOD OF TERMINATION SHOULD BE CONSIDERED A "HASTY" EXIT UNLESS / THE LATEST OPERATION HAS BEEN COMPLETED AND FILMAN IS CURRENTLY / IDLE WAITING FOR USER INPUT. WHEN THE USER PRESSES ON THE / SYSTEM CONSOLE, FILMAN EXITS TO THE KEYBOARD MONITOR. / C) THE USER MAY PRESS <^A> ON THE SYSTEM CONSOLE TERMINAL. RESULTS / ARE IDENTICAL TO PRESSING . / D) THE USER MAY PRESS <^B> ON THE SYSTEM CONSOLE TERMINAL. RESULTS / ARE IDENTICAL TO PRESSING . / E) THE USER MAY PRESS <^C> ON THE SYSTEM CONSOLE TERMINAL. RESULTS / ARE IDENTICAL TO PRESSING WITH THE FOLLOWING ADDITIONAL / CONSIDERATION: IF FILMAN WAS EXECUTING UNDER BATCH CONTROL, THE / BATCH JOB IS ALSO TERMINATED. THE KEYBOARD MONITOR WILL ACKNOWLEDGE / ALL PROGRAM EXITS VIA <^C> BY PRINTING A "^C" MESSAGE ALONG WITH / A BATCH ABORT MESSAGE IF APPLICABLE. / OUTPUT CATALOG CONSIDERATIONS. / BY MULTIPLE USAGES OF THE KEYBOARD MONITOR KI(LL) COMMAND, IT IS POSSIBLE / TO ACCUMULATE A SERIES OF DANGLING "" SLOTS AT THE END OF THE USER / CATALOG. SHOULD ANY COPY OR KILL OPERATION BE INVOKED, THE END OF THE CATALOG / WILL BE COMPRESSED AS NECESSARY TO REMOVE THESE EXTRANEOUS ENTRIES. FILMAN / WILL REWRITE THE OUTPUT CATALOG EVEN IF NO OTHER FILE OPERATION OCCURRED. / OPTIMIZATION OF THIS OPERATION INCLUDES PREVENTING THE OUTPUT CATALOG WRITE / IF EITHER NO CHANGES WERE MADE TO THE CATALOG OR (USING THE COPY OPERATION) / THE SLOTS WERE USED FOR FILES WITH IDENTICAL NAMES PRIOR TO THE COPY. / USER QUERY METHODS. / THE DEFAULT MODE OF OPERATION OF FILE COPYING (MO[DE]:C[OPY]) OR / FILE KILLING (MO[DE]:K[ILL]) IS TO ALLOW ALL ELEGIBLE FILES TO BE / ACTED UPON UNIMPEDED (AND IS EQUIVALENT TO QU[ERY]:N[O]). THIS CAN / BE INITIALLY CHANGED BY INVOKING /Q (OR QU[ERY]:Y[ES]) TO FORCE / USER QUERY (Y(ES)/N(O)) FOR THE DISPOSITION OF EVERY ELEGIBLE FILE. / PRESSING <^R> (ACKNOWLEDGED BY PRINTING: ^R) ON THE SYSTEM CONSOLE / WILL "REVERSE" THE STATE OF USER QUERY FOR SUBSEQUENT FILES (AND / MAY BE CONTINUALLY REVERSED IF DESIRED). / THIS CAN BE USEFUL IN SITUATIONS WHERE THE USER IS UNSURE OF THE / IMPLICATION OF THE LATEST OPERATION (SUCH AS KILLING A GROUP OF / FILES). QUERY MODE IS INVOKED TO ALLOW KILLING FILES CAUTIOUSLY / UNTIL CONFIDENCE IS GAINED IN THE ACCURACY OF THE INTENDED COMMAND. / FOR EXAMPLE: / .FILMAN/S/MODE:KILL/UNIT:0/NAME:TP*/QUERY:YES / FILES KILLED: / SYS0:TPB ? NO! USER QUERY WITH N(O) RESPONSE / SYS0:TP1 ? YES! [OK] USER QUERY WITH Y(ES) RESPONSE / SYS0:TP2 ? YES! [OK] USER QUERY WITH Y(ES) RESPONSE / SYS0:TP3 ? YES! [OK] USER QUERY WITH Y(ES) RESPONSE / SYS0:TP4 ? ^RYES! [OK] USER PRESSED <^R>Y FOR LAST Y(ES) RESPONSE / SYS0:TP5 [OK] NO FURTHER QUERIES / SYS0:TP6 [OK] / SYS0:TP7 [OK] / SYS0:TP8 [OK] / SYS0:TP9 [OK] / 9 FILES KILLED / AT THE FIFTH QUERY THE USER REVERSED THE QUERY MODE THEN RESPONDED / Y(ES) TO THE FIFTH QUERY. ALL SUBSEQUENT FILE KILLING WAS DONE / WITHOUT QUERY. / THE REVERSAL OF QUERY MODE MAY ALSO BE USED TO IMPOSE QUERY MODE / ON ONLY A PORTION OF A LONG FILE KILLING/COPYING OPERATION OR TO / ACTIVATE/DEACTIVATE QUERY MODE AS NECESSARY TO REMEDY AN ALREADY / INITIATED COMMAND NOW KNOWN TO BE INCORRECT REGARDING QUERY MODE. / FOR EXAMPLE: / .R FILMAN /Q WAS OMITTED UNINTENTIONALLY / MODE: ^RCOPY USER PRESSED <^R>C / THE USER ENABLED QUERY MODE BEFORE ACTUALLY COPYING THE FILES TO / REMEDY THE INADVERTENT OMISSION OF /Q. / INVOKED COMMAND ERROR MESSAGES. / ALL INVOKED COMMAND ERRORS ARE FATAL AND ARE ONE OF THE FOLLOWING: / IMPROPER FILE TYPE! / AN ATTEMPT WAS MADE TO INVOKE A TY[PE]: PARAMETER WITH AN IMPROPER / VALUE (OTHER THAN A[SCII], B[INARY], C[OMBINED], E[VERYTHING], OR / O[VERRIDE]). ONLY VALID FILE TYPES ARE ALLOWED. / IMPROPER MODE! / AN ATTEMPT WAS MADE TO INVOKE A MO[DE]: PARAMETER WITH AN IMPROPER / OPERATION VALUE (OTHER THAN C[OPY], K[ILL], E[MPTY], OR Q[UIT]). / ONLY VALID MODE VALUES ARE ALLOWED. / IMPROPER UNIT! / AN ATTEMPT WAS MADE TO INVOKE A UN[IT]:U OR IN[PUT]:I OR OU[TPUT]:O / PARAMETER WITH A VALUE OUTSIDE OF THE RANGE OF 0-7. ONLY VALID UNIT / PARAMETERS ARE ALLOWED. / INVALID PARAMETER! / AN ATTEMPT WAS MADE TO USE A NON-EXISTANT OR IMPROPERLY FORMED / MULTI-CHARACTER OPTION. USE ONLY VALID PARAMETERS WHEN USING INVOKED / MODE OPERATIONS. / 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! / AN ATTEMPT WAS MADE TO USE A SEARCH STRING WHICH WAS TOO MANY / CHARACTERS LONG. MAXIMUM SEARCH STRING LENGTH IS 36 CHARACTERS. / UNIT AND MODE CONFLICT! / AN INVOKED MODE OPERATION WAS ATTEMPTED WHERE THE UN[IT]:U PARAMETER / WAS USED WITH MO[DE]:C[OPY] OR IN[PUT]:I AND OU[TPUT]:O WERE USED / WITH MO[DE]:K[ILL] OR MO[DE]:E[MPTY]. INPUT AND OUTPUT UNITS MUST / BE USED ONLY WITH COPY MODE AND THE UNIT SPECIFICATION MUST ONLY / BE USED WITH KILL OR EMPTY MODES. / YES/NO VALUE REQUIRED! / AN ATTEMPT WAS MADE TO INVOKE EITHER QU[ERY]:Q OR VE[RIFY]:V WITH / AN IMPROPER VALUE. ONLY Y[ES] OR N[O] ARE VALID VALUES FOR THESE / PARAMETERS. / RESPONSE MODE ERROR MESSAGES. / INVALID RESPONSE MODE PARAMETERS MAY LEAD TO THE FOLLOWING ERROR MESSAGES: / INVALID FILE TYPE! / THE USER ATTEMPTED AN INVALID FILE TYPE. ONLY A(SCII), B(INARY), / E(VERYTHING), OR O(VERRIDE) ARE ALLOWED. RESPOND TO THE REPEATED / QUERY WITH A PROPER FILE TYPE. / INVALID MODE! / THE USER ATTEMPTED AN INVALID MODE TYPE. ONLY C(OPY), K(ILL), E(MPTY), / OR Q(UIT) ARE ALLOWED. RESPOND TO THE REPEATED QUERY WITH A PROPER / MODE TYPE. / INVALID UNIT NUMBER! / THE USER ATTEMPTED AN INVALID UNIT NUMBER DURING A UNIT-ORIENTED / QUERY ("INPUT: ", "OUTPUT: ", OR "UNIT: "). ONLY THE DIGITS "0" / THROUGH "7" (CORRESPONDING TO SYS0: THROUGH SYS7:) ARE VALID. RESPOND / TO THE REPEATED QUERY WITH A VALID UNIT NUMBER. / 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. / ERROR MESSAGES COMMON TO INVOKED AND RESPONSE MODES. / INVALID CATALOG! / THE USER ATTEMPTED TO USE AN UNINITIALIZED OR OTHERWISE INVALID / CATALOG ON AN ACCESSIBLE LOGICAL UNIT. TOTAL INITIALIZATION OF A / CATALOG DEVICE IS NECESSARY BEFORE USING FILMAN AND IS BEYOND THE / SCOPE OF THIS UTILITY. SEE P?S/8 SYSTEM DIRECTORY INITIALIZATION / PROCEDURES ELSEWHERE. / VERIFICATION MESSAGES. / THESE MESSAGES CONCERN VERIFICATION ERRORS CAUSED BY I/O FAILURE DURING / WRITE OR SUBSEQUENT VERIFY READ OPERATIONS (ASSUMING /N OR VE[RIFY]:N[O] / IS NOT IN EFFECT): / CATALOG VERIFY ERROR! / THE LATEST CATALOG TO BE WRITTEN WAS READ BACK AND FAILED TO VERIFY / CORRECTLY. THE USER WILL BE QUERIED FOR A POSSIBLE RETRY OF THE / ENTIRE WRITE AND VERIFY OPERATION. IF THE OPERATION DOES NOT FINISH / PROPERLY, AN ERROR MESSAGE WILL BE ISSUED: "CATALOG CORRUPTED!" / INDICATING THE PROBABLE CORRUPTION OF THE SYSTEM UNIT WHERE THE / AFFECTED FILES RESIDE. CORRECTIVE MEASURES MAY INCLUDE HARDWARE / MAINTAINENCE OR MEDIA REFORMATTING, ETC. / FILE VERIFY ERROR! / THE LATEST FILE TO BE WRITTEN WAS READ BACK AND FAILED TO VERIFY / CORRECTLY. THE USER WILL BE QUERIED FOR A POSSIBLE RETRY OF THE / ENTIRE WRITE AND VERIFY OPERATION. IF THE OPERATION DOES NOT FINISH / PROPERLY, THE USER IS ADVISED OF THE POSSIBLE CORRUPTION OF THE / SECTION OF THE SYSTEM UNIT WHERE THE AFFECTED FILE RESIDES. CORRECTIVE / MEASURES MAY INCLUDE HARDWARE MAINTAINENCE OR MEDIA REFORMATTING, ETC. / IMPLEMENTATION NOTES AND CUSTOMIZATION. / IT MAY BE DESIRABLE TO CUSTOMIZE ANY PARTICULAR COPY OF FILMAN TO THE USER'S / OWN PREFERENCE REGARDING CERTAIN SWITCHES. FOR EXAMPLE, A USER MAY PREFER / TO OVERRIDE THE "ARE YOU SURE? " QUERY ASSOCIATED WITH THE KILL AND EMPTY / OPERATIONS. OPTION SWITCHES CONTROLLING THIS AND OTHER ASPECTS OF FILMAN / 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 FILMAN ITSELF WITH A "MASK" (EACH BIT CORRESPONDS TO AN / OPTION SWITCH SERIALLY FROM /A-/Z FOLLOWED BY /0-/9). THIS MASKING VALUE / WILL BE USED TO "REVERSE" THE EFFECT OF THE SPECIFIED SWITCH. FOR EXAMPLE: / SETTING RELATIVE WORD TWO OF THE CORE IMAGE OF FILMAN TO 4000 WILL REVERSE / THE /Y OPTION. THIS WOULD REQUIRE THE USER TO INVOKE /Y IF THE / "ARE YOU SURE? " QUERY WERE DESIRED, OPPOSITE TO NORMAL CONVENTION. ALL / SWITCHES CAN BE "REVERSED" ACCORDINGLY (INCLUDING OPTION SWITCHES IGNORED / BY FILMAN!). THE RESULTANT CUSTOMIZED COPY OF FILMAN OPERATES IN A TOTALLY / CONVENTIONAL MANNER; ONLY THE METHOD OF PASSING SWITCH OPTIONS CHANGES. / CORE LAYOUT FOR THE FILMAN PROGRAM. / 00000-02377 RESIDENT PROGRAM CODE / 02400-02777 OUTPUT CATALOG BUFFER / 03000-06777 FILE READ/WRITE BUFFER FOR COPYING OR IDENTIFICATION / 03000-04177 SWAPPED CODE / 04200-04577 OUTPUT CATALOG VERIFY BUFFER / 05200-05577 ONCE-ONLY STARTUP CODE / 06776-06777 INPUT CATALOG BUFFER SEAM (IF 4K) / 07000-07177 INPUT CATALOG BUFFER (FIRST HALF) / 07200-07377 INPUT CATALOG BUFFER (SECOND HALF IF 6K) / 07200-07377 FILE VERIFY BUFFER (IF 4K) / 07400-07577 STRING BUFFER, STACK / 07000-07577 ONCE-ONLY STARTUP CODE / 07600-07777 P?S/8 MONITOR I/O ROUTINES / 10000-13777 FILE VERIFY BUFFER (IF 6K) / 14000-77777 UNUSED (P?S/8 I/O ROUTINES OR CONSOLE OVERLAY MAY BE PRESENT) / ALL RUNNING CODE IS INTIALLY LOADED 2600 HIGHER THAN ASSEMBLED TO ALLOW / FILMAN TO PROCESS THE KEYBOARD MONITOR COMMAND BUFFER. THE ONCE-ONLY CODE / IS LOADED INTO ABSOLUTE ADDRESS SPACE. THE ONCE-ONLY CODE MODIFIES AND / RELOCATES THE RUNNING CODE AS NECESSARY. IF RESPONSE MODE OPERATIONS ARE / NEEDED SUBSEQUENTLY, A PORTION OF THE PROGRAM WILL BE SWAPPED INTO ABSOLUTE / ADDRESS SPACE AS REQUIRED. / EQUATED SYMBOLS. // SYMBOLS FROM P?S/8. CATADR= 7000 /CATALOG ADDRESS NORMALLY CATCORE=0150 /CONSTANT 7000 COLUMN= 0123 /COLUMN COUNTER DIR= 0015 /DIRECTORY BLOCK FILBEG= 3000 /FILE BUFFER GETHAF= 0104 /GET A HALF-WORD GETNDX= 0026 /GET HALF-WORD INDEX INCON= 0031 /EQUATED FROM CONSOLE! L10= 0174 /CONSTANT 0010 L200= 0105 /CONSTANT 0200 L40= 0046 /CONSTANT 0040 L7600= 0113 /CONSTANT 7600 L77= 0103 /CONSTANT 0077 NAME= 0054 /SCAN A NAME ROUTINE OUTCON= 0033 /EQUATED FROM CONSOLE! PSCRSIZ=0170 /POINTER TO SYSTEM CORE SIZE WORD PUTBASE=0131 /PUT HALF-WORD BASE PUTHAF= 0132 /PUT A HALF-WORD PUTNDX= 0060 /PUT HALF-WORD INDEX SBLOCK= 7635 /LOAD BLOCK IN SYSTEM LOADER SBOOT= 7600 /SYSTEM BOOSTRAP ADDRESS SBTFUN= 7602 /SYSTEM BOOTSTRAP UNIT WORD SCRSIZE=7611 /MONITOR CORE SIZE WORD SFUN= 7634 /SYSTEM LOADER FUNCTION WORD SWAL= 7604 /SWITCHES /A-/L HERE SWMX= 7605 /SWITCHES /M-/X HERE SWY9= 7606 /SWITCHES Y, Z, 0-9 HERE SYSIO= 7640 /SYSTEM I/O ENTRY TEMP1= 0100 /MONITOR TEMPORARY TSPACE= 0110 /TEST FOR A SPACE TTY= 0003 /CONSOLE DEVICE CODE WRITE= 4000 /SYSIO WRITE BIT XR1= 0016 /AUTO-INDEX NUMBER ONE // OTHER DEFINITIONS. FNMLEN= 6 /FILE NAME LENGTH JMPC= JMP . /CURRENT PAGE JMP INSTRUCTION JMSC= JMS . /CURRENT PAGE JMS INSTRUCTION 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 NL3777= CLA CLL CMA RAR /LOAD AC WITH 3777 NL4000= CLA CLL CML RAR /LOAD AC WITH 4000 NL5777= CLA CLL CMA RTR /LOAD AC WITH 5777 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="A&77 /REVISION LETTER STRLEN= 44 /36 CHARACTERS MAXIMUM IN SEARCH STRING VERBUFF=0000 /VERIFY BUFFER IF 6K VERSION=12 /VERSION NUMBER V4KBUFF=CATADR+200 /FILES VERIFIED HERE IF 4K / DEPENDENT DEFINITIONS. JMSSYSI=SYSIO&177+JMSC /CALL TO SYSIO FROM ITS PAGE KEYCODE=TTY^10+6000 /SKELETON KEYBOARD 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 TLSIOT= PRTCODE+6 /LOAD OUTPUT BUFFER, CLEAR FLAG TSFIOT= PRTCODE+1 /SKIP ON OUTPUT FLAG PAGE 13 /OVER THE KEYBOARD MONITOR PZ, RELOC 0 /WHERE THIS LOADS EVENTUALLY *0 /START AT THE BEGINNING XORSWS= . /XOR VALUES FOR OPTION SWITCHES HERE BLKCNT, 0/.-. /BLOCK COUNTER FLAGS, 0/.- /LOADING FLAGS FNM1, 0/.-. /FILE FNM2, .-. /NAMES FNM3, .-. /HERE L7, 7 /CONSTANT 0007; HIGH-ORDER ZERO ENDS THE FILE NAME GRPCNT, .-. /GROUP COUNTER WRDCNT, .-. /WORD COUNTER *10 /DEFINE AUTO-INDEX AREA IFNZRO 10-. L177, 177 /CONSTANT 0177 FRSTSW, .-. /FIRST FILE SWITCH XR2, .-. /OUTPUT AUTO-INDEX XR3, .-. /BINARY AUTO-INDEX ICBLK, STRBF2-1 /LATEST INPUT FILE BLOCK; PRELOADED FOR STARTUP OCBLK, STRBUFFER-1 /LATEST OUTPUT FILE BLOCK; PRELOADED FOR STARTUP XR1, .-. /INPUT AUTO-INDEX P7TEMP, .-. /OUTPUT TEMPORARY *20 /GET PAST AUTO-INDEX AREA BUFPTR, .-. /BUFFER POINTER FOR VERIFYING CHAR, .-. /INPUT BUFFER ESCAPSW,.-. / TERMINATOR SWITCH FCNT, .-. /FILE COUNT FILTYPE,4003!1000 /FILE TYPE: 1, 2, 3, 4003 OR 6003; /1000 INDICATES DEFAULT IN EFFECT GTBASE, .-. /GET HALF-WORD BASE GTINDX, .-. /GET HALF-WORD INDEX ICSW, .-. /INPUT CATALOG OPEN SWITCH INCHAR, .-. /INPUT CHARACTER INUNIT, 4000 /INPUT UNIT FOR COPY FMASK, .-. /LATEST FILE TYPE: 1, 2, 4000 (OR 2000) LATLINE,.-. /LATEST LINE POINTER LATNUM, .-. /LATEST LINE NUMBER LSCRSIZ,SCRSIZE /POINTER TO SCRSIZE NUMPTR, .-. /TEMPORARY FOR ASCII VALIDATION OCSW, .-. /OUTPUT CATALOG OPEN SWITCH OTUNIT, 4000 /OUTPUT UNIT FOR COPY PARLMT, .-. /PAIR LIMIT PSCRIBE,SCRIBE /POINTER TO SCRIBE ROUTINE QUERYSW,0 /QUERY FOR FILES SWITCH; PRELOADED FOR NO QUERY TEMP, .-. /TEMPORARY TEMP2, .-. /TEMPORARY TXTPTR, .-. /TEXT UNPACKING POINTER TYPFIL, .-. /PARTICULAR FILE TYPE UNIT, 4000 /UNIT FOR KILL, EMPTY UPADDR, CHKCLR /<^P> ADDRESS VERARG, 1^100 /VERIFY ARGUMENT WORD **** 6K **** 20^100+10 VERPTR, .-. /POINTER FOR VERIFYING VERSW, -1 /VERIFICATION SWITCH / OUTPUT I/O ROUTINE. P7OUT, .-. /SEVEN BIT I/O ROUTINE P7TSF, TSFIOT /**** CONSOLE **** CIF MCS+10 P7JMP, JMP I P7OUT /**** CONSOLE **** JMS OUTCON P7TLS, TLSIOT /**** CONSOLE **** JMP I P7OUT L7600A, CLA!400 /CLEAN UP ISZ P7OUT /BUMP RETURN ADDRESS JMP I P7OUT /TAKE SKIP RETURN / INPUT I/O ROUTINE. CTLCTST,.-. /CHECK FOR <^C>, ETC. ROUTINE L7700, 7700 /CONSTANT 7700; THIS CLEARS THE AC L7400, NOP!400 /CONSTANT 7400; THIS CAN BE SKIPPED CHKKSF, KSFIOT /**** CONSOLE **** CIF MCS+10 CHKJMP, JMP I CTLCTST /**** CONSOLE **** JMS INCON CHKKRS, KRSIOT/OR KRBIOT /**** CONSOLE **** JMP I CTLCTST L10A, AND L177/[177] /JUST SEVEN-BIT DCA INCHAR /STASH THE CHARACTER NL7775 /-3 TAD INCHAR /COMPARE TO LATEST SNA /SKIP IF NOT <^C> ISZ I LSCRSIZ/[SCRSIZ]/ELSE SET SOFT INDICATOR SPA SNA CLA /SKIP IF <^D> OR GREATER JMP I L7600A/[SBOOT] /ELSE LEAVE CHKKCC, KCCIOT/OR 0000 /**** CONSOLE **** 0000 TAD INCHAR /GET THE CHARACTER JMP I CTLCTST /RETURN PAGE / INVOKED MODE COPY/KILL COMMON CODE STARTS HERE. FILELUP,JMS I [CRLF] /DO A , FILUP2, JMS I [CHKUP] /CHECK FOR <^C>, ETC. JMS I [GNIFILE] /GET NEXT INPUT FILE JMP FILCLOSE /END OF INPUT CATALOG DCA INBLK /STORE BLOCK NUMBER IN-LINE NL2000 /TAD (20^100)/SETUP PAGE BITS TAD INUNIT /ADD ON INPUT UNIT DCA INFUN /STORE FUNCTION WORD IN-LINE JMS I (FILTER) /CHECK IF WE ACCEPT THIS FILE NAME JMP FILUP2 /JUMP IF NOT NL2000 /SET OVERRIDE BIT MASK AND FILTYPE /GET THE OVERRIDE BIT CKZAP1, SKP /**** KILLING **** SZA CLA JMP NOREAD /JUMP IF NOT READING FOR CONTENT JMS I [SYSIO] /CALL I/O ROUTINES FILBEG /FILE BUFFER INFUN, 20^100+.-. /UNIT BITS WILL BE FILLED IN INBLK, .-. /BLOCK NUMBER WILL BE FILLED IN NOREAD, JMS I (VALID8) /GO CLASSIFY FILE AND FILTYPE /AND AGAINST DESIRED TYPES SNA CLA /SKIP IF A DESIRED FILE JMP FILUP2 /JUMP IF NOT ISZ FRSTSW /IT IS THE FIRST FILE? JMP NOT1 /JUMP IF NOT FILE NUMBER ONE JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE FILE MESSAGE CKZAP2, FLCPMSG /**** KILLING **** FLKLMSG NOT1, TAD INUNIT /GET INPUT UNIT JMS I (FNAMPRT) /PRINT OUT THE COMPLETE FILE NAME TAD QUERYSW /GET QUERY SWITCH SMA CLA /SKIP IF SET JMP NOQUERY /JUMP IF NOT JMS I PSCRIBE/[SCRIBE]/GO PRINT THE QUBLMSG /"? " SEPARATOR JMS I [YESORNO] /GET RESPONSE SKP /SKIP IF YES JMP FILELUP /JUMP IF NO NOQUERY,JMS I (GOCHOLE) /FIND AN OUTPUT SLOT JMP OUTFULL /WASN'T ANY MORE ROOM IN OUTPUT CATALOG DCA OUTBLK /STORE BLOCK NUMBER IN-LINE TAD OTUNIT /GET OUTPUT UNIT TAD [20^100+WRITE] /ADD ON WRITE FUNCTION DCA OUTFUN /STORE FUNCTION WORD IN-LINE CKZAP3, JMP COPFILE /**** KILLING **** NL7775 TAD XR2 /BACKUP TO BEGINNING DCA XR2 /OF THE NAME ENTRY NL7777 /GET DELETE VALUE DCA I XR2 /DELETE FILE NAME FIRST PAIR DCA I XR2 /CLEAR FILE NAME SECOND PAIR DCA I XR2 /CLEAR FILE NAME THIRD PAIR ISZ OCSW /INDICATE WE WROTE ON OUTPUT CATALOG JMP KILCOMMON /CONTINUE THERE COPFILE,JMS I PSCRIBE/[SCRIBE]/GO PRINT THE PTRMSG /" =>" SEPARATOR TAD OTUNIT /GET THE OUTPUT UNIT JMS I (FNAMPRT) /PRINT OUT THE COMPLETE FILE NAME OUTAGN, JMS I [CHKUP] /CHECK FOR <^C>, ETC. JMS I [SYSIO] /CALL I/O ROUTINES FILBEG /FILE BUFFER OUTFUN, 20^100+WRITE+.-. /UNIT BITS WILL BE FILLED IN OUTBLK, .-. /BLOCK NUMBER WILL BE FILLED IN TAD VERSW /GET VERIFY SWITCH SMA CLA /SKIP IF VERIFY ON JMP NOVERIFY /JUMP IF VERIFY OFF TAD [FILBEG] /SETUP THE DCA BUFPTR /DATA POINTER TAD OTUNIT /GET OUTPUT UNIT TAD VERARG /ADD ON PAGE AND FIELD BITS DCA VERFUN /STORE IN-LINE TAD OUTBLK /GET OUTPUT BLOCK NUMBER DCA VERBLK /STORE IN-LINE AS VERIFY BLOCK NUMBER V6KZP1, TAD [-20] /**** 6K **** NL7777 DCA TEMP /SETUP VERIFY BLOCK COUNTER VERNEXT,TAD VERCORE /SETUP THE DCA VERPTR /COMPARE POINTER JMS I [SYSIO] /CALL I/O ROUTINES VERCORE,V4KBUFFER /**** 6K **** VERBUFFER (0000) VERFUN, 1^100+.-. /UNIT BITS WILL BE FILLED IN **** 6K **** 20^100+10+.-. VERBLK, .-. /BLOCK NUMBER WILL BE FILLED IN V6KZP2, TAD L7600A/[-1^200] /**** 6K **** NL4000 /TAD (-20^200) DCA TEMP2 /SETUP THE VERIFY WORD COUNTER VERLUP, CDF 00 /**** 6K **** CDF 10 TAD I VERPTR /GET A WORD CIA /INVERT FOR TESTING CDF 00 /BACK TO FIELD ZERO TAD I BUFPTR /COMPARE TO ORIGINAL DATA WORD SZA CLA /SKIP IF IT MATCHES JMP VERBAD /JUMP IF NOT ISZ BUFPTR /BUMP TO NEXT WORD ISZ VERPTR /BUMP TO NEXT WORD ISZ TEMP2 /DONE ALL WORDS? JMP VERLUP /NO, KEEP GOING ISZ VERBLK /BUMP TO NEXT BLOCK ISZ TEMP /DONE ALL BLOCKS? JMP VERNEXT /NO, KEEP GOING KILCOMM,JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE OKMSG /"OK" MESSAGE NOVERIF,ISZ FCNT /BUMP FILE COUNT JMP FILELUP /GO DO NEXT FILE / COMES HERE ON FILE COPY VERIFY ERROR. VERBAD, JMS I (ASKRETRY) /ASK FOR RETRY VFBDMSG /TELL THEM FILE WAS BAD WITH THIS JMP OUTAGN /TRY AGAIN / THEY WILL ACCEPT THE BAD FILE. JMP FILELUP /GO DO NEXT FILE / COMES HERE IF OUTPUT CATALOG IS FULL PREVENTING THE LATEST COPY. OUTFULL,JMS I PSCRIBE/[SCRIBE]/TELL THEM CATFLMSG /OUTPUT CATALOG IS FULL FILCLOS,TAD FRSTSW /GET FIRST TIME SWITCH SMA CLA /SKIP IF NONE WERE DONE CKZAP4, 0000 /**** KILLING **** JMS I [RUSURE] SKP /SKIP IF YES JMP CHKDONE /JUMP IF NO JMS I [OCLOSE] /CLOSE OUTPUT CATALOG TAD FRSTSW /GET FIRST TIME SWITCH SMA CLA /SKIP IF NONE WERE DONE JMS I [CRLF] /DO A , JMS I [FCPRT] /PRINT FILE COUNT JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE FINISH MESSAGE CKZAP5, COPYMSG /**** KILLING **** KILLMSG CHKDONE,JMS I [DONECHK] /CHECK IF WE'RE DONE JMS I [SYSIO] /CALL I/O ROUTINES PFMRES2,FMRES2 /TRANSFER BUFFER RESFUN, RESCNT^100+.-. /FUNCTION WORD; UNIT BITS WILL BE FILLED IN RESBLK, FMRES2%200 /BLOCK NUMBER; ABSOLUTE START OF FILMAN WILL BE ADDED ON JMP I PFMRES2/(FMRES2)/CONTINUE THERE PAGE GETBUFF,.-. /GET A BUFFER ROUTINE SZL /SKIP IF ONE CHARACTER BUFFER TAD (STRLENGTH-1) /ELSE USE FULL BUFFER TAD (STACK+1) /NOW HAVE ADDRESS OF HIGHEST LOCATION ALLOWED CIA /WANT NEGATIVE FORM DCA GTBASE /STORE AS BUFFER LIMIT GRESTAR,JMS PPRINT /PRINT PROMPTING MESSAGE TAD L7400/[STACK] /RESET THE DCA BUFPTR /OUTPUT POINTER GETINPU,JMS I [INPUT] /GET A CHARACTER GOTINPU,JMS CMDSUB /TRY TO FIND CHTBL-1 /SPECIAL CHARACTERS TAD [-40] /COMPARE LATEST TO CONTROL CHARACTER SPA CLA /SKIP IF GREATER JMP GCMBEEP /IGNORE BAD CONTROL CHARACTERS TAD INCHAR /GET THE CHARACTER TAD [-140] /COMPARE TO LOWER-CASE LIMIT GCMZAP, SPA /**** NOT /U **** NOP!400 TAD [40] /RESTORE CASE TAD [100] /RESTORE THE CHARACTER SKP /DON'T DO STUFF! GOTHT, TAD [" &177] / BECOMES DCA GBTEMP /SAVE IT TAD BUFPTR /GET OUTPUT POINTER TAD GTBASE /COMPARE TO BUFFER LIMIT SMA CLA /SKIP IF NOT AT END YET JMP GCMBEEP /JUMP IF IT IS TAD GBTEMP /GET THE CHARACTER DCA I BUFPTR /STORE IN THE BUFFER ISZ BUFPTR /BUMP THE POINTER TAD GBTEMP /GET THE CHARACTER SKP /PRINT IT, DON'T BEEP / COMES HERE ON BAD INPUT OR FULL BUFFER. GCMBEEP,TAD L7/[7] /GET A JMS I [P7CH] /RING IT JMP GETINPUT /KEEP GOING / COMES HERE ON ANY CHARACTER GOTESC, NL4000 /INDICATE SEEN GOTCR, DCA ESCAPSW /STORE THE SWITCH DCA I BUFPTR /DELIMIT THE BUFFER TAD BUFPTR /GET THE POINTER TAD [-STACK] /CHECK IF POINTING AT BEGINNING OF BUFFER SPA SNA CLA /SKIP IF PAST BEGINNING JMP GCMBEEP /ELSE COMPLAIN ISZ GETBUFFER /BUMP PAST ARGUMENT JMP I GETBUFFER /RETURN / COMES HERE ON <^U>. DELETL, TAD ["^&177] /GET AN "^" JMS I [P7CH] /PRINT IT TAD ("U&177) /GET A "U" JMS I [P7CH] /PRINT IT JMP GRESTART /RESTART / COMES HERE ON . LFVIEW, JMS PPRINT /PRINT OUT PROMPTING MESSAGE AGAIN TAD L7400/[STACK] /SETUP THE DCA GBTEMP /POINTER PRBLUP, TAD GBTEMP /GET THE POINTER CIA /INVERT FOR TESTING TAD BUFPTR /COMPARE TO BUFFER POINTER SNA CLA /SKIP IF NOT THERE YET JMP GETINPUT /JUMP IF AT CURRENT END TAD I GBTEMP /GET LATEST CHARACTER JMS I [P7CH] /PRINT IT ISZ GBTEMP /BUMP TO NEXT JMP PRBLUP /KEEP GOING / COMES HERE ON ANY BACKSPACING CHARACTER. BACKSP, JMS RUBCHK /CHECK WHERE WE ARE IN BUFFER JMP GCMBEEP /COMPLAIN IF TOO FAR BACK BZAP, JMP HARDRUBOUT /**** NOT /B **** 0000 TAD L10A/["H&37] /GET JMS I [P7CH] /PRINT IT TAD [" &177] /GET A JMS I [P7CH] /PRINT IT TAD L10A/["H&37] /GET JMS I [P7CH] /PRINT IT JMP GETINPUT /KEEP GOING / COMES HERE IF BACKSPACING ON HARD-COPY TERMINAL. HARDRUB,TAD ("\&177) /GET DELIMITER JMS I [P7CH] /PRINT IT ISZ BUFPTR /COMPENSATE FOR REDUNDANT CHECK RUBAGN, JMS RUBCHK /CHECK WHERE WE ARE IN BUFFER JMP RUBDONE /JUMP IF TOO FAR TAD I BUFPTR /GET THE OLD CHARACTER JMS I [P7CH] /PRINT IT JMS I [INPUT] /GET FURTHER INPUT HERE JMS CMDSUB /CHECK IF A RUBTBL-1 /BACKSPACING CHARACTER RUBDONE,DCA GBTEMP /STORE LATEST OR TAD ("\&177) /GET TRAILING DELIMITER JMS I [P7CH] /PRINT IT TAD GBTEMP /GET THE LATEST (OR ) DCA INCHAR /APPEAR TO HAVE INPUT JMP GOTINPUT /GO USE IT THERE CMDSUB, .-. /COMMAND TABLE SEARCH ROUTINE CLA /CLEAN UP TAD I CMDSUB /GET THE INLINE POINTER DCA GBTEMP /STASH IT ISZ CMDSUB /BUMP PAST POINTER GCMLUP, ISZ GBTEMP /BUMP TO NEXT TAD I GBTEMP /GET AN ENTRY ISZ GBTEMP /BUMP TO NEXT SNA /END OF TABLE? JMP GCMEND /YES, FORGET IT TAD INCHAR /COMPARE TO LATEST SZA CLA /SKIP IF IT MATCHES JMP GCMLUP /JUMP IF NOT TAD I GBTEMP /GET THE ADDRESS DCA GBTEMP /STASH IT JMP I GBTEMP /GO THERE GCMEND, TAD INCHAR /GET THE CHARACTER BACK JMP I CMDSUB /RETURN PPRINT, .-. /PROMPT PRINT ROUTINE TAD I GETBUFFER /GET MESSAGE ADDRESS DCA GBTEMP /STORE IN-LINE JMS I PSCRIBE/[SCRIBE]/CALL MESSAGE PRINT ROUTINE GBTEMP, .-. /WILL BE PASSED MESSAGE ADDRESS JMP I PPRINT /RETURN RUBCHK, .-. /RUBOUT CHECK ROUTINE NL7777 /-1 TAD BUFPTR /BACKUP THE POINTER DCA GBTEMP /SAVE FOR NOW TAD GBTEMP /GET IT BACK TAD [-STACK] /COMPARE TO LOWER LIMIT SPA CLA /SKIP IF OK JMP I RUBCHK /RETURN IMMEDIATE IF NOT TAD GBTEMP /GET UPDATED VALUE DCA BUFPTR /USE IT IN POINTER ISZ RUBCHK /BUMP RETURN ADDRESS JMP I RUBCHK /TAKE SKIP RETURN 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 [FILBEG+3776] /GET FREE TEXT POINTER JMS RNGCHK /VALIDATE VALUE TAD I [FILBEG+3777] /GET FREE LINE NUMBER PAIR POINTER JMS RNGCHK /VALIDATE ITS VALUE ALSO TAD I [FILBEG+3776] /GET TEXT POINTER CIA /INVERT FOR TEST TAD I [FILBEG+3777] /COMPARE TO LINE NUMBER VALUE SPA CLA /SKIP IF POSSIBLE JMP I VALASC /BARF TAD I [FILBEG+3776] /GET TEXT POINTER AGAIN DCA TEMP /STASH IT TAD I TEMP /GET WORD SZA CLA /SKIP IF ACTUALLY JMP I VALASC /BARF TAD I [FILBEG+3777] /GET PAIR POINTER DCA TEMP /STASH IT TAD I TEMP /GET PAIR'S FREE TEXT POINTER CIA /INVERT FOR TEST TAD I [FILBEG+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 [FILBEG+3777] /GET DUMMY PAIR POINTER ADDRESS CIA /INVERT NOW, SAVE TIME LATER DCA PARLMT /SAVE FOR TESTING TAD [FILBEG+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 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 (-FILBEG-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 LATLIN /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 LATNUM /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 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 [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 LATLIN /SAVE FOR NEXT ROUND OF TESTS TAD I TEMP2 /GET OUR LINE NUMBER DCA LATNUM /SAVE IT FOR NEXT TIME ALSO JMP NUMLUP /GO CHECK ANOTHER LINE SPCCHK, TAD I TEMP /GET THE TEXT POINTER TAD (-FILBEG) /IS IT AT THE BEGINNING? SZA CLA /SKIP IF SO JMP I VALASC /BARF TAD [FILBEG] /SETUP THE DCA TXTPTR /UNPACKING POINTER JMP SPECIN /CONTINUE THERE FILOK, ISZ VALASC /BUMP TO GOOD RETURN JMP I VALASC /AND CELEBRATE RNGCHK, .-. /VALID RANGE CHECK ROUTINE TAD (-FILBEG-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 VALID8, .-. /FILE TYPE VALIDATION ROUTINE NL2000 /SETUP OVERRIDE MASK AND FILTYPE /GET THE BIT SZA /SKIP IF NORMAL JMP VALOVERRIDE /JUMP IF OVERRIDE IN EFFECT JMS VALASC /CHECK IF FILE IS ASCII JMP NOTASC /JUMP IF NOT NL0001 /INDICATE ASCII FILE TYPE VALOVER,DCA FMASK /STORE FILE TYPE MASK TAD FMASK /GET IT BACK JMP I VALID8 /RETURN NOTASC, JMS I (VALBIN) /CHECK IF FILE IS BINARY NL4000 /NOT BINARY FILE SNA /SKIP IF NOT BINARY NL0002 /ELSE INDICATE SO JMP VALOVERRIDE /CONTINUE THERE SYSMSG, TEXT "^SYS^" 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 [FILBEG] /COMPARE TO FIRST WORD OF FILE AND [6000] /JUST GOOD BITS SZA CLA /SKIP IF OK JMP I VALBIN /BARF TAD I (FILBEG+1) /GET FIRST ORIGIN TAD L7600A/[-200] /COMPARE TO STANDARD VALUE SZA CLA /SKIP IF VALID JMP I VALBIN /BARF TAD (FILBEG-1) /SETUP THE DCA XR3 /BUFFER POINTER TAD [-20] /SETUP THE DCA BLKCNT /BLOCK COUNT NEWREC, TAD (-22) /SETUP THE DCA GRPCNT /GROUP COINT NEWGRP, TAD [-6] /SETUP THE DCA WRDCNT /WORD COUNT TAD I XR3 /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 XR3 /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 XR3 /YES, THROW AWAY ISZ XR3 /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 XR3 /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 FNAMPRT,.-. /FILE NAME PRINT ROUTINE JMS I [UNITPRT] /PRINT PASSED UNIT TAD [FNM1] /POINT TO DCA GTBASE /FILE NAME DCA GTINDX /CLEAR INDEX FNAMLP, JMS I [GETHALF] /GET A CHARACTER SNA /END OF NAME? JMP IDCHECK /YES TAD [40] /\ AND [77] / >MAKE IT SEVEN-BIT TAD [40] // JMS I [P7CH] /PRINT IT ISZ GTINDX /BUMP TO NEXT JMP FNAMLP /KEEP GOING IDCHECK,NL2000 /SET OVERRIDE BIT MASK AND FMASK /GET THE BIT SZA CLA /SKIP IF FILE TYPE IS KNOWN JMP I FNAMPRT /ELSE RETURN NOW JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE BBRKMSG /" <" MESSAGE NL7776 /SETUP THE MASK AND FMASK /GET THE EVERYTHING AND BINARY BITS SPA /SKIP IF NOT EVERYTHING TYPE JMP PRTUNKNOWN /JUMP IF EVERYTHING ONLY TYPE SNA CLA /SKIP IF BINARY JMP PRTASCII /MUST BE ASCII JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE BNMSG /"BNRY>" MESSAGE JMP I FNAMPRT /RETURN PRTUNKN,JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE QUMSG /"UNKN>" MESSAGE JMP I FNAMPRT /RETURN PRTASCI,JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE ASMSG /"ASCI>" MESSAGE JMP I FNAMPRT /RETURN / INPUT ROUTINE. CHKUP, .-. /INPUT AND CHECK FOR <^C>, ETC. ROUTINE JMS CTLCTST /CHECK FOR <^C>, ETC. SNA /SKIP IF ANYTHING THERE JMP CHKCLR /ELSE FORGET IT TAD [-"P!300] /IS IT <^P>? SNA /SKIP IF NOT JMP DOUP /JUMP IF SO TAD (-"S+"P) /IS IT <^S>? SNA /SKIP IF OTHER JMP QWAIT /JUMP IF IT MATCHES IAC /TAD (-"R+"S)/IS IT <^R>? SZA CLA /SKIP IF SO JMP I CHKUP /RETURN IF NOT NL4000 /SET INVERSION BIT TAD QUERYSW /REVERSE QUERY STATE DCA QUERYSW /STORE BACK TAD ("R&177) /GET AN "R" JMS UPRINT /PRINT "^R" JMP CHKCLR /OBLITERATE THE CHARACTER DOUP, TAD ("P&177) /GET A "P" JMS UPRINT /PRINT "^P" JMP I UPADDR /GO WHERE YOU SHOULD QWAIT, JMS CTLCTST /GET ANOTHER CHARACTER AND CHECK FOR <^C>, ETC. TAD [-"Q!300] /IS IT <^Q>? SZA CLA /SKIP IF SO JMP QWAIT /JUMP IF NOT CHKCLR, DCA INCHAR /OBLITERATE THE CHARACTER JMP I CHKUP /RETURN UPRINT, .-. /"^" CHARACTER PRINT ROUTINE DCA VALBIN /STORE PASSED VALUE TAD ["^&177] /GET AN "^" JMS P7OUT /PRINT IT JMP .-1 /WAIT FOR IT TAD VALBIN /GET PASSED VALUE JMS P7OUT /PRINT IT JMP .-1 /WAIT FOR IT JMP I UPRINT /RETURN PAGE GNIFILE,.-. /GET NEXT INPUT FILE ROUTINE TAD ICSW /IS INPUT CATALOG ALREADY LOADED AND ACTIVE? SMA SZA /SKIP IF NOT JMP ICIN /JUMP IF SO SMA CLA /SKIP IF INPUT CATALOG IS LOADED JMS ICLODE /GO LOAD THE INPUT CATALOG NL0001 /INDICATE THE DCA ICSW /INPUT CATALOG IS ACTIVE TAD [CATADR-1] /SETUP THE DCA XR1 /BUFFER POINTER TAD I (CATADR+377) /GET FIRST BLOCK DCA ICBLK /SETUP FILE BLOCK ICLOOP, TAD XR1 /GET THE POINTER TAD (-CATADR-176+1) /COMPARE TO DANGEROUS VALUE I6KZAP, SZA CLA /**** 6K **** CLA!400 JMP ICOK /JUMP IF NOT AT DANGER POINT TAD VERSW /GET VERIFY SWITCH SMA CLA /SKIP IF WE ARE VERIFYING JMP ICOK /JUMP IF NOT TAD I (CATADR+176) /GET FIRST ENDANGERED WORD DCA I [CATADR+176-200] /MOVE IN FRONT OF BUFFER TAD I (CATADR+177) /GET SECOND ENDANGERED WORD DCA I [CATADR+177-200] /MOVE IN FRONT OF BUFFER TAD INUNIT /GET INPUT UNIT TAD [1^100] /ADD ON READ BITS DCA ICFUN2 /STORE IN-LINE JMS I [SYSIO] /CALL I/O ROUTINES CATADR /CATALOG BUFFER ICFUN2, 1^100+.-. /UNIT BITS WILL BE FILLED IN DIR+1 /SECOND CATALOG BLOCK TAD (CATADR+176-200-1) /RESET THE DCA XR1 /BUFFER POINTER ICOK, TAD I XR1 /GET A WORD SNA /IS IT THE END OF THE CATALOG? JMP I GNIFILE /YES, TAKE IMMEDIATE RETURN CMA /INVERT THE VALUE FOR HOLE TESTING SNA /SKIP IF NOT A HOLE JMP ICHOLE /JUMP IF A HOLE CMA /INVERT BACK DCA FNM1 /USE AS FIRST NAME PAIR TAD I XR1 /GET SECOND WORD DCA FNM2 /USE AS SECOND NAME PAIR TAD I XR1 /GET THIRD WORD DCA FNM3 /USE AS THIRD NAME PAIR TAD ICBLK /GET INPUT FILE BLOCK ISZ GNIFILE /BUMP TO GOOD RETURN JMP I GNIFILE /RETURN TO CALLER / COMES HERE IF A FREE SLOT (HOLE) FOUND IN THE DIRECTORY. ICHOLE, ISZ XR1 /BUMP PAST ISZ XR1 /REST OF ENTRY ICIN, CLA /CLEAN UP TAD ICBLK /\ TAD [20] / >UPDATE TO NEXT FILE BLOCK DCA ICBLK // JMP ICLOOP /KEEP GOING CRLF, .-. /, ROUTINE TAD ("M&37) /GET A JMS I [P7CH] /PRINT IT TAD ("J&37) /GET A JMS I [P7CH] /PRINT IT JMP I CRLF /RETURN DECPRT, .-. /TWO-DIGIT DECIMAL PRINT ROUTINE SNA /ZERO PASSED? JMP DECNO /YES DCA TEMP /SAVE NON-ZERO VALUE DCA TEMP2 /CLEAR QUOTIENT DECLUP, TAD TEMP /GET THE VALUE TAD (-12) /REMOVE TEN SPA /SKIP IF MORE TO DO JMP DECOUT /JUMP IF NOT DCA TEMP /STORE UPDATED VALUE ISZ TEMP2 /BUMP QUOTIENT JMP DECLUP /KEEP GOING DECOUT, TAD (12) /RESTORE REMAINDER DCA TEMP /SAVE FOR NOW TAD TEMP2 /GET QUOTIENT SNA /SKIP IF SIGNIFICENT JMP DEC2 /JUMP IF NOT TAD ["0&177] /MAKE IT ASCII JMS I [P7CH] /PRINT IT DEC2, TAD TEMP /GET LOW-ORDER DIGIT TAD ["0&177] /MAKE IT ASCII JMS I [P7CH] /PRINT IT DECXIT, TAD [" &177] /GET A JMS I [P7CH] /PRINT IT JMP I DECPRT /RETURN DECNO, JMS I PSCRIBE/[SCRIBE]/GIVE THEM NONMSG /THE NO MESSAGE JMP DECXIT /FINISH IT THERE FCPRT, .-. /FILE COUNT PRINT ROUTINE TAD FCNT /GET FILE COUNT JMS I [PRMVAL] /PRINT OUT THE COUNT FILMSG /AND THE FILE(S) MESSAGE TAD [" &177] /GET A JMS I [P7CH] /PRINT IT JMP I FCPRT /RETURN 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 [77] /JUST SIX BITS JMP I GETHALF /RETURN ICLODE, .-. /LOAD INPUT CATALOG ROUTINE TAD INUNIT /GET INPUT UNIT TAD [2^100] /ADD ON READ BITS DCA ICFUN /STORE IN-LINE JMS I [SYSIO] /CALL I/O ROUTINES CATADR /CATALOG BUFFER ICFUN, 2^100+.-. /UNIT BITS WILL BE FILLED IN DIR /CATALOG BLOCK JMP I ICLODE /RETURN NONMSG, TEXT "^NO" PAGE GOCHOLE,.-. /GET OUTPUT CATALOG SLOT (HOLE) ROUTINE TAD OCSW /DO WE HAVE AN OUTPUT CATALOG? SZA CLA /SKIP IF NOT JMP OCIN /JUMP IF SO TAD OTUNIT /GET OUTPUT UNIT TAD [2^100] /ADD ON READ BITS DCA OCFUN /STORE IN-LINE JMS I [SYSIO] /CALL I/O ROUTINES OCBUFFER /OUTPUT CATALOG BUFFER OCFUN, 2^100+.-. /UNIT BITS WILL BE FILLED IN DIR /CATALOG BLOCK NL3777 /INDICATE THAT CATALOG DCA OCSW /HAS BEEN READ IN OCIN, TAD [OCBUFFER-1] /SETUP THE DCA XR2 /SEARCH POINTER TAD I [OCBUFFER+377] /GET FIRST BLOCK OF CATALOG DCA OCBLK /SET IT UP OCSRCH, TAD I XR2 /GET FIRST NAME PAIR SNA /END OF CATALOG? JMP OCEND /YES CIA /NO, INVERT FOR TESTING TAD FNM1 /COMPARE TO FIRST FILE NAME PAIR SZA CLA /SKIP IF IT MATCHES JMP NOMAT1 /JUMP IF NOT TAD I XR2 /GET SECOND NAME PAIR CIA /INVERT FOR TESTING TAD FNM2 /COMPARE TO SECOND FILE NAME PAIR SZA CLA /SKIP IF IT MATCHES JMP NOMAT2 /JUMP IF NOT TAD I XR2 /GET THIRD NAME PAIR CIA /INVERT FOR TESTING TAD FNM3 /COMPARE TO THIRD FILE NAME PAIR SZA CLA /SKIP IF IT MATCHES JMP NOMAT3 /JUMP IF NOT TAD OCBLK /GET FILE BLOCK ISZ GOCHOLE /BUMP TO GOOD RETURN JMP I GOCHOLE /RETURN TO CALLER NOMAT1, ISZ XR2 /BUMP PAST TWO PAIRS NOMAT2, ISZ XR2 /BUMP PAST ONE PAIR NOMAT3, TAD OCBLK /GET OUTPUT FILE BLOCK TAD [20] /UPDATE TO NEXT FILE DCA OCBLK /STORE BACK JMP OCSRCH /GO TRY AGAIN OCEND, TAD [OCBUFFER-1] /SETUP THE DCA XR2 /SEARCH POINTER OCNXTSL,TAD XR2 /GET THE CURRENT POINTER TAD I (OCBUFFER+375) /COMPARE TO LIMIT TAD [CATADR-OCBUFFER+1] /ADJUST FOR OUR BUFFER AND AUTO-INDEX SMA CLA /SKIP IF STILL SOME ROOM JMP I GOCHOLE /TAKE IMMEDIATE RETURN IF NONE TAD I XR2 /GET FIRST NAME PAIR SNA /END OF CATALOG? JMP OCSLOT /YES, USE IT AS A SLOT CMA /INVERT IT SNA CLA /SKIP IF NOT A HOLE JMP OCSLOT /USE HOLE AS A SLOT ISZ XR2 /BUMP TO ISZ XR2 /NEXT ENTRY JMP OCNXTSLOT /KEEP LOOKING OCSLOT, TAD XR2 /GET SEARCH POINTER DCA TEMP2 /STASH IT TAD FNM1 /GET FIRST FILE NAME PAIR DCA I TEMP2 /STASH IN CATALOG TAD FNM2 /GET SECOND FILE NAME PAIR DCA I XR2 /STASH IN CATALOG TAD FNM3 /GET THIRD FILE NAME PAIR DCA I XR2 /STASH IN CATALOG ISZ OCSW /INDICATE WE WROTE ON THE CATALOG JMP OCIN /CONTINUE THERE / OUTPUT CATALOG CLOSE ROUTINE. OCLOSE, .-. /OUTPUT CATALOG CLOSE JMS I (OCFIX) /REMOVE EXTRANEOUS ENDING HOLES TAD OCSW /GET OUTPUT CATALOG SWITCH SMA CLA /SKIP IF WE WROTE SOMETHING JMP I OCLOSE /RETURN IF NOT TAD OTUNIT /GET OUTPUT UNIT TAD [2^100+WRITE] /NOW HAVE WRITE FUNCTION DCA OCFUN2 /STORE IN-LINE OCWRITE,JMS I [SYSIO] /CALL I/O ROUTINES OCBUFPT,OCBUFFER /OUTPUT CATALOG BUFFER OCFUN2, 2^100+WRITE+.-. /UNIT BITS WILL BE FILLED IN DIR /CATALOG BLOCK TAD VERSW /ARE WE VERIFYING? SMA CLA /SKIP IF SO JMP I OCLOSE /RETURN IF NOT TAD OTUNIT /GET OUTPUT UNIT TAD [2^100] /FORM READ FUNCTION DCA OCFUN3 /STORE IN-LINE JMS I [SYSIO] /CALL I/O ROUTINES OCVBFPT,OCVBUFFER /OUTPUT CATALOG VERIFY BUFFER OCFUN3, 2^100+.-. /UNIT BITS WILL BE FILLED IN DIR /CATALOG BLOCK TAD OCBUFPTR/(OCBUFFER) /SETUP THE DCA BUFPTR /BUFFER POINTER TAD OCVBFPTR/(OCVBUFFER) /SETUP THE DCA VERPTR /VERIFY POINTER TAD L7400/[-2^200] /SETUP THE DCA TEMP /VERIFY COUNT VCLOOP, TAD I BUFPTR /GET A WORD CIA /INVERT IT TAD I VERPTR /COMPARE TO VERIFY WORD SZA CLA /SKIP IF OK JMP VCBAD /JUMP IF NOT ISZ BUFPTR /BUMP TO NEXT ISZ VERPTR /BUMP TO NEXT ISZ TEMP /TESTED ALL YET? JMP VCLOOP /NO, KEEP GOING JMP I OCLOSE /RETURN / COMES HERE ON OUTPUT CATALOG VERIFY ERROR. VCBAD, JMS ASKRETRY /ASK FOR A RETRY VCBDMSG /WITH THIS MESSAGE JMP OCWRITE /YES, TRY AGAIN JMS I PSCRIBE/[SCRIBE] /TELL THEM OCBDMSG /CATALOG IS CORRUPTED JMP I OCLOSE /RETURN ASKRETR,.-. /ASK FOR RETRY ROUTINE TAD I ASKRETRY /GET PASSED MESSAGE ARGUMENT DCA ASKRARG /STORE IN-LINE ISZ ASKRETRY /BUMP PAST ARGUMENT JMS I PSCRIBE/[SCRIBE]/PRINT THE ASKRARG,.-. /PASSED MESSAGE JMS I PSCRIBE/[SCRIBE]/ASK FOR RTRYMSG /A RETRY JMS I [YESORNO] /GET REPLY SKP /YES, DON'T ISZ ASKRETRY /BUMP RETURN ADDRESS JMS I [CRLF] /DO A , JMP I ASKRETRY /RETURN EITHER WAY PAGE OCFIX, .-. /OUTPUT CATALOG FIXUP ROUTINE OCFLP1, TAD [OCBUFFER-1] /SETUP THE DCA XR2 /SEARCH POINTER OCFLP2, TAD I XR2 /GET A NAME PAIR SNA /END OF CATALOG? JMP I OCFIX /YES, RETURN OCFLP3, CMA /INVERT FOR TESTING SZA CLA /SKIP IF THIS IS A HOLE JMP OCFNEXT /JUMP IF NOT TAD XR2 /GET THE SEARCH POINTER DCA TEMP2 /SAVE IT ISZ XR2 /BUMP TO ISZ XR2 /NEXT ENTRY TAD I XR2 /GET FIRST PAIR OF NEXT ENTRY SZA /SKIP IF THIS IS END OF CATALOG JMP OCFLP3 /JUMP IF NOT DCA I TEMP2 /MAKE OUR ENTRY THE END OF CATALOG ISZ OCSW /INDICATE WE WROTE ON THE CATALOG JMP OCFLP1 /GO DO IT AGAIN OCFNEXT,ISZ XR2 /BUMP TO ISZ XR2 /NEXT ENTRY JMP OCFLP2 /KEEP GOING YESORNO,.-. /YES OR NO ROUTINE YNAGN, JMS I [INPUT] /GET A CHARACTER AND [137] /MAKE IT CASE-LESS TAD (-"Y!200) /IS IT "Y"? SNA /SKIP IF NOT JMP ISYES /JUMP IF IT MATCHES TAD (-"N+"Y) /IS IT "N"? SNA CLA /SKIP IF NOT JMP ISNO /JUMP IF IT MATCHES TAD L7/["G&37] /GET A JMS I [P7CH] /RING IT JMP YNAGN /TRY AGAIN ISYES, JMS I PSCRIBE/[SCRIBE]/TELL THEM YESMSG /YES JMP I YESORNO /TAKE FIRST RETURN ISNO, JMS I PSCRIBE/[SCRIBE]/TELL THEM NOMSG /NO ISZ YESORNO /BUMP RETURN ADDRESS JMP I YESORNO /TAKE SKIP RETURN INPUT, .-. /INPUT ROUTINE JMS I [CHKUP] /TRY TO GET A CHARACTER TAD INCHAR /GET THE CHARACTER SNA /SKIP IF ANYTHING CAME IN JMP .-3 /WAIT FOR SOMETHING JMP I INPUT /RETURN WITH IT / 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 [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 [40] /DOES CASE MATTER? SNA CLA /SKIP IF NOT TAD SCRCASE /ELSE GET PREVAILING CASE TAD SCRCHAR /GET THE CHARACTER JMS I [P7CH] /PRINT THE CHARACTER JMP I SCRPRNT /RETURN SCRCRLF,JMS I [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 SCRCASE,100 /ALPHABETIC CASE SCRCHAR,.-. /LATEST OUTPUT CHARACTER SCRPTR, .-. /MESSAGE POINTER DONECHK,.-. /CHECK FOR DONE ROUTINE DONEZAP,SKP /**** /S OR TERMINATOR **** 0000 JMP I L7600A/[SBOOT] /GOODBYE! JMP I DONECHK /RETURN / OUTPUT ROUTINE. P7CH, .-. /SEVEN BIT OUTPUT ROUTINE DCA P7TEMP /SAVE PASSED VALUE P7AGN, JMS I [CHKUP] /CHECK FOR <^C>, ETC. TAD P7TEMP /GET THE CHARACTER JMS P7OUT /TRY TO OUTPUT IT JMP P7AGN /TRY INPUT WHILE WAITING JMS I [CHKUP] /CHECK FOR <^C>, ETC. JMP I P7CH /RETURN RUSURE, .-. /ARE YOU SURE ROUTINE YZAP, SKP /**** /Y **** 0000 JMP I RUSURE /RETURN IF /Y JMS I PSCRIBE/[SCRIBE]/ASK THEM RUSMSG /IF THEY ARE SURE JMS I [YESORNO] /GET RESPONSE SKP /YES, DON'T ISZ RUSURE /BUMP RETURN JMS I [CRLF] /DO A , JMP I RUSURE /RETURN EITHER WAY BBRKMSG,TEXT " <^" NOMSG, TEXT "^N^O!" QUBLMSG,TEXT "? ^" PAGE / STRING MATCHING ROUTINE. / TAKES SKIP RETURN IF FNAME MATCHES SEARCH STRING, ELSE TAKES IMMEDIATE RETURN. FILTER, .-. /NAME MATCHING ROUTINE TAD L7400/[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 ISZ FILTER /BUMP TO MATCHING 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 [-FNMLEN] /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 [-FNMLEN] /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 [-FNMLEN] /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 [FNM1] /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 PRMVAL, .-. /PRINT MESSAGE AND VALUE ROUTINE DCA POPA /SAVE PASSED VALUE TAD POPA /GET IT BACK JMS I (DECPRT) /PRINT IT TAD I PRMVAL /GET PASSED MESSAGE ARGUMENT DCA PRMVARGUMENT /STORE IN-LINE ISZ PRMVAL /BUMP PAST ARGUMENT JMS I PSCRIBE/[SCRIBE]/CALL MESSAGE PRINT ROUTINE PRMVARG,.-. /WILL BE PASSED MESSAGE ADDRESS NL7777 /-1 TAD POPA /COMPARE TO PASSED VALUE SNA CLA /SKIP IF OTHER THAN ONE JMP I PRMVAL /RETURN IF ONLY ONE JMS I PSCRIBE/[SCRIBE]/GIVE THEM SMSG /AN "S" JMP I PRMVAL /RETURN UNITPRT,.-. /UNIT PRINT ROUTINE DCA POPA /SAVE PASSED UNIT VALUE JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE SYSMSG /"SYS" MESSAGE TAD POPA /GET THE UNIT TAD ["0&177] /MAKE IT ASCII JMS I [P7CH] /PRINT IT TAD (":&177) /GET A ":" JMS I [P7CH] /PRINT IT JMP I UNITPRT /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 / TEXT MESSAGES. ASMSG, TEXT "ASCI>" /BBRKMS,TEXT " <^" BNMSG, TEXT "BNRY>" CATFLMS,TEXT "%%^C^ATALOG ^F^ULL!%^" COPYMSG,TEXT "^C^OPIED%" FILMSG, TEXT "^F^ILE^" FLCPMSG,TEXT "^F^ILES ^C^OPIED:%%" FLKLMSG,TEXT "^F^ILES ^K^ILLED:%%" KILLMSG,TEXT "^K^ILLED%" /NOMSG, TEXT "^N^O!" /NONMSG,TEXT "^NO" OCBDMSG,TEXT "%^C^ATALOG ^C^ORRUPTED!%^" OKMSG, TEXT "^ [OK]^" PTRMSG, TEXT " => ^" /QUBLMS,TEXT "? ^" QUMSG, TEXT "UNKN>" RTRYMSG,TEXT "%^R^ETRY (^Y/N)? " RUSMSG, TEXT "%^A^RE ^Y^OU ^S^URE? " SMSG, TEXT "S" /SYSMSG,TEXT "^SYS^" VCBDMSG,TEXT "%^C^ATALOG ^V^ERIFY ^E^RROR!%" VFBDMSG,TEXT "%%^F^ILE ^V^ERIFY ^E^RROR!%" YESMSG, TEXT "^Y^ES!^" PAGE /END OF CODE THAT DOESN'T SWAP NOPUNCH /FOOL THE ASSEMBLER OCBUFFE,ZBLOCK 2^200 /OUTPUT CATALOG BUFFER HERE ENPUNCH /UN-FOOL THE ASSEMBLER *. /OUTPUT CURRENT ORIGIN / THE FOLLOWING CODE IS SWAPPED IN TO PERFORM RESPONSE MODE COMMANDS. FMRES2, SKP /DON'T FMRES3, JMS I [CRLF] /DO A , JMS I [DOSETUP] /SETUP FOR MODE QUERY FMRES3 /<^P> ADDRESS CLL /INDICATE ONE CHARACTER BUFFER JMS I [GETBUFFER] /GET BUFFERED COMMAND MODMSG /QUERY MESSAGE JMS I [GETALPHA] /GET COMMAND LETTER JMS I (VALMODE) /VALIDATE MODE SNA /SKIP IF OK JMP MODEBD /JUMP IF NOT SPA /SKIP IF NOT "QUIT" MODE JMP RESQUIT /JUMP IF "QUIT" MODE TAD (JMP I RESTABL)/SETUP TABLE JUMP DCA RESTABLE /STORE IN-LINE RESTABL,JMP I RESTABL+.-. /WILL BE PROPER JUMP RESCOPY /RESPONSE MODE COPY RESKILL /RESPONSE MODE KILL RESEMPTY /RESPONSE MODE EMPTY MODEBD, NL7777 /INDICATE NO CHECKING JMS I (LINFINISH) /FINISH RESPONSE LINE JMS I PSCRIBE/[SCRIBE]/TELL THEM MBADMSG /MODE WAS BAD JMP FMRES2 /GO DO IT AGAIN / RESPONSE MODE QUIT COMMAND. RESQUIT,JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE UITMSG /(Q)UIT MESSAGE JMS I (LINFINISH) /FINISH RESPONSE LINE JMP I L7600A/[SBOOT] /GOODBYE! / RESPONSE MODE COPY COMMAND. RESCOPY,JMS I PSCRIBE/[SCRIBE]/FINISH THE OPYMSG /COMMAND VERB JMS I (LINFINISH) /FINISH RESPONSE LINE JMS I (GTUNIT) /GET UNIT NUMBER INPMSG /WITH INPUT MESSAGE DCA INUNIT /SAVE AS INPUT UNIT JMS I (GTUNIT) /GET UNIT NUMBER OUTPMSG /WITH OUTPUT MESSAGE DCA OTUNIT /SAVE AS OUTPUT UNIT JMS I (GETYPE) /GET FILE TYPE JMS I (GETNAME) /GET FILE NAME MASK / INVOKED MODE COPY COMMAND. DOCOPY, JMS I (CKZAP) /CALL COMMON ZAP ROUTINE COPYZAP /ZAP LIST POINTER CLL /INDICATE CATALOGS INITIALIZE JMP I (DOCENTRY) /CONTINUE THERE / RESPONSE MODE EMPTY COMMAND. RESEMPT,JMS I PSCRIBE/[SCRIBE]/FINISH THE MPTMSG /COMMAND VERB JMS I (LINFINISH) /FINISH RESPONSE LINE JMS I (GTUNIT) /GET UNIT NUMBER UNITMSG /WITH UNIT MESSAGE DCA UNIT /STASH THE VALUE / INVOKED MODE EMPTY COMMAND. DOEMPTY,JMS I [DOSETUP] /SETUP FOR EMPTY OPERATION FMRES3 /<^P> ADDRESS JMS I [CATSETUP] /DO EMPTY, KILL COMMON SETUP DOEMPLP,JMS I [GNIFILE] /GET A FILE JMP MTEOCATALOG /AREN'T ANY MORE CLA /THROW AWAY BLOCK ISZ FCNT /COUNT THIS FILE JMP DOEMPLP /GO GET ANOTHER ONE JMP BADCATALOG /SHOULDN'T GET HERE! MTEOCAT,JMS I (CATMOVE) /MOVE AND CHECK CATALOG JMS I PSCRIBE/[SCRIBE]/TELL THEM CNOWMSG /HOW CATALOG CURRENTLY IS TAD UNIT /GET DESIGNATED UNIT JMS I [UNITPRT] /PRINT UNIT TO BE EMPTIED JMS I PSCRIBE/[SCRIBE]/GIVE THEM TOBEMSG /THE BRIDGING MESSAGE JMS I [FCPRT] /PRINT OUT CURRENT FILE COUNT JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE CURMSG /END BRIDGING MESSAGE JMS I [RUSURE] /FIND OUT IF THEY REALLY MEAN IT SKP /SKIP IF YES JMP EMPDONE /JUMP IF NO JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE CNOWMSG /BRIDGING MESSAGE TAD UNIT /GET DESIGNATED UNIT JMS I [UNITPRT] /PRINT UNIT TO BE EMPTIED JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE MTMSG /NOW EMPTY MESSAGE TAD RESTABLE /GET SLOT COUNT BACK CLL RTR;RTR /CONVERT TO SLOT COUNT JMS I [PRMVAL] /PRINT THE COUNT SLTMSG /WITH THIS MESSAGE JMS I PSCRIBE/[SCRIBE]/GIVE THEM CLSMSG /CLOSING MESSAGE TAD [OCBUFFER-1] /SETUP THE DCA XR1 /BUFFER POINTER TAD (-2^200+3) /SETUP THE DCA TEMP /CLEAR COUNT DCA I XR1 /CLEAR A WORD ISZ TEMP /DONE YET? JMP .-2 /NO, KEEP GOING ISZ OCSW /INDICATE WE WROTE ON THE CATALOG JMS I [OCLOSE] /WRITE IT OUT EMPDONE,JMS I [DONECHK] /CHECK IF WE ARE NOW DONE JMP FMRES2 /CONTINUE THERE / COMES HERE IF CATALOG IS DEFECTIVE. BADCATA,JMS I PSCRIBE/[SCRIBE]/TELL THEM BDCTMSG /CATALOG IS BAD JMP I L7600A/[SBOOT] /GOODBYE! / RESPONSE MODE KILL COMMAND. RESKILL,JMS I PSCRIBE/[SCRIBE]/FINISH THE ILLMSG /COMMAND VERB JMS I (LINFINISH) /FINISH RESPONSE LINE JMS I (GTUNIT) /GET UNIT NUMBER UNITMSG /WITH UNIT MESSAGE DCA UNIT /STASH THE VALUE JMS I (GETYPE) /GET FILE TYPE JMS I (GETNAME) /GET FILE NAME MASK JMP I (DOKILL) /GO DO THE FILE KILL PAGE / INVOKED MODE KILL COMMAND. DOKILL, JMS I [CATSETUP] /DO EMPTY, KILL COMMON SETUP JMS I (ICLODE) /LOAD INPUT CATALOG NL4000 /INDICATE THAT DCA ICSW /INPUT CATALOG IS LOADED BUT INACTIVE JMS CATMOVE /MOVE AND CHECK CATALOG JMS CKZAP /CALL COMMON ZAP ROUTINE KILLZAP /ZAP LIST POINTER STL /INDICATE KILL MODE DOCENTR,JMS I [DOSETUP] /CALL SETUP; L=0 FOR COPY, L=1 FOR KILL FILCLOSE /<^P> ADDRESS JMP I (FILELUP) /GO DO IT THERE CATMOVE,.-. /CATALOG MOVE AND CHECK ROUTINE NL3777 /INDICATE THE DCA OCSW /OUTPUT CATALOG IS LOADED TAD [CATADR-1] /POINT TO DCA XR1 /INPUT CATALOG TAD [OCBUFFER-1] /POINT TO DCA XR2 /OUTPUT CATALOG TAD L7400/[-2^200] /SETUP THE DCA TEMP /MOVE COUNT CATMVLP,TAD I XR1 /GET A WORD DCA I XR2 /PUT A WORD ISZ TEMP /DONE YET? JMP CATMVLP /NO, KEEP GOING TAD I [OCBUFFER+377] /GET FIRST BLOCK OF CATALOG SNA /SKIP IF POSSIBLE JMP I (BADCATALOG) /JUMP IF NOT CIA /INVERT FOR COUNT TAD I (OCBUFFER+376) /NOW HAVE CATALOG BLOCK COUNT DCA I (RESTABLE) /SAVE FOR NOW TAD I (RESTABLE) /GET IT BACK AND (4017) /CHECK FOR BAD BITS SZA CLA /SKIP IF OK JMP I (BADCATALOG) /JUMP IF NOT JMP I CATMOVE /RETURN CATSETU,.-. /EMPTY, KILL CATALOG SETUP ROUTINE TAD UNIT /GET COMMON UNIT DCA INUNIT /USE FOR INPUT TAD UNIT /GET COMMON UNIT DCA OTUNIT /USE FOR OUTPUT JMP I CATSETUP /RETURN CKZAP, .-. /COPY/KILL ZAP ROUTINE TAD I CKZAP /GET LIST POINTER DCA TEMP /STASH IT TAD (CKZADR-1) /POINT TO DCA XR1 /ADDRESS LIST CKZPLUP,TAD I XR1 /GET AN ADDRESS SNA /END OF LIST? JMP I CKZAP /RETURN IF SO DCA TEMP2 /STASH LATEST ADDRESS TAD I TEMP /GET ZAP VALUE DCA I TEMP2 /ZAP IT IN ISZ TEMP /BUMP TO NEXT VALUE JMP CKZPLUP /KEEP GOING DOSETUP,.-. /SETUP ROUTINE FOR COPY, KILL, ETC. SNL /CALLED BY KILL? DCA ICSW /NO, CLEAR INPUT CATALOG SWITCH SNL /CALLED BY KILL? DCA OCSW /NO, CLEAR OUTPUT CATALOG SWITCH NL7777 /SETUP THE DCA FRSTSW /FIRST TIME SWITCH DCA FCNT /CLEAR THE FILE COUNT TAD I DOSETUP /GET THE PASSED ARGUMENT DCA UPADDR /STORE AS <^P> ADDRESS ISZ DOSETUP /BUMP PAST ARGUMENT JMP I DOSETUP /RETURN GETALPH,.-. /GET ALPHABETIC FROM STRING BUFFER TAD I L7400/[STACK] /GET CHARACTER FROM HEAD OF BUFFER AND [137] /MAKE IT CASELESS TAD L7700/[-100] /MAKE IT SIX-BIT JMP I GETALPHA /RETURN / COPY ZAP LIST. COPYZAP,SKP /READ FLCPMSG /COPIED MESSAGE COPFILE&177+JMPC /COPYING 0000 /COPYING DOESN'T CHECK COPYMSG /COPY DONE MESSAGE / COPY/KILL ADDRESS ZAP ADDRESS LIST. CKZADR, CKZAP1 /READ/NOREAD ADDRESS CKZAP2 /KILLED/COPIED MESSAGE ADDRESS CKZAP3 /KILL/COPY BRANCH CKZAP4 /CALL RUSURE/NONE ADDRESS CKZAP5 /COPY/KILL DONE MESSAGE ADDRESS 0 /THIS ENDS THE LIST / KILL ZAP LIST. KILLZAP,SZA CLA /NO READ FLKLMSG /KILLED MESSAGE NL7775 /KILLING JMS I [RUSURE] /KILLING CHECKS KILLMSG /KILL DONE MESSAGE STRBF2, 0 /INITIALIZED HEADER OF PARSING STRING BUFFER XORSW, .-. /OPTION SWITCH XOR ROUTINE 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 JMP I XORSW /YES, RETURN OPTPTR, XORSWS+PZ /OPTION WORD POINTER SWPTR, SWAL /PASSED SWITCHES POINTER XORCNT, -3 /OPTION WORD COUNTER ZBLOCK STRLENGTH%2+1+STRBF2-. /REST OF PARSING STRING BUFFER PAGE GETNAME,.-. /GET NAME ROUTINE NL7776 /SETUP THE DCA GTUNIT /POINT COUNTER / STL /INDICATE 36 CHARACTER BUFFER JMS I [GETBUFFER] /GET BUFFERED RESPONSE NAMMSG /QUERY MESSAGE TAD L7400/[STACK] /SETUP THE DCA VERPTR /BUFFER POINTER DCA GTINDX /CLEAR OUTPUT INDEX GETNMLP,TAD I VERPTR /GET A CHARACTER SNA /SKIP IF NOT JMP GETNMEOLINE /JUMP IF TAD (-".!200) /COMPARE TO "." SNA /SKIP IF OTHER JMP GCHKPNT /JUMP IF IT MATCHES GPOINT, TAD [-" +".] /COMPARE TO (OR CONVERTED ) SNA /SKIP IF OTHER JMP GETADVANCE /JUMP IF IT MATCHES TAD L7700/[-140+" -200] /COMPARE TO LOWER-CASE LIMIT SPA /SKIP IF LOWER-CASE TAD [" &177] /RESTORE UPPER-CASE AND [77] /MAKE IT SIX-BIT SNA /SKIP IF NOT AT-SIGN OR ACCENT JMP GETADVANCE /IGNORE AT-SIGN OR ACCENT GETNMEO,DCA TEMP /SAVE THE CHARACTER TAD GTINDX /GET OUTPUT INDEX CLL RAR /DIVIDE BY TWO TAD [STRBUFFER] /POINT TO CURRENT OUTPUT WORD DCA TEMP2 /STASH THE POINTER TAD I TEMP2 /GET OLD VALUE AND L7700/[7700] /JUST LEFT HALF TAD TEMP /GET NEW HALF SZL /SKIP IF NEW ONE IS LEFT HALF JMP .+4 /JUMP IF NEW ONE IS RIGHT HALF RTL;RTL;RTL /MOVE NEW ONE TO LEFT HALF DCA I TEMP2 /STORE LATEST (PAIR) ISZ GTINDX /BUMP OUTPUT INDEX FOR NEXT TIME TAD TEMP /GET LATEST CHARACTER SNA CLA /SKIP IF NOT JMP GETNEND /JUMP IF GETADVA,ISZ VERPTR /BUMP TO NEXT CHARACTER JMP GETNMLP /KEEP GOING GCHKPNT,ISZ GTUNIT /TOO MANY POINTS? JMP GPOINT /NO, KEEP GOING JMS I [CRLF] /DO A , JMS I PSCRIBE/[SCRIBE] /YES, COMPLAIN OF DPERR /TOO MANY POINTS JMP I GETYPE /TRY AGAIN GETNEND,JMS LINFINISH /FINISH COMMAND LINE JMP I GETNAME /RETURN GETYPE, .-. /GET FILE TYPE ROUTINE TYPAGN, CLL /INDICATE ONE CHARACTER BUFFER JMS I [GETBUFFER] /GET BUFFERED RESPONSE TYPMSG /QUERY MESSAGE JMS I [GETALPHA] /GET COMMAND LETTER JMS I [VALFTYPE] /VALIDATE FILE TYPE SNA /SKIP IF OK JMP BDTYPE /JUMP IF NOT DCA FILTYPE /SAVE FILE TYPE NL2000 /SETUP MASK AND FILTYPE /GET OVERRIDE BIT SZA CLA /SKIP IF OFF JMP PROVERRIDE /JUMP IF ON TAD FILTYPE /GET TYPE WORD AGAIN SMA /SKIP IF EVERYTHING ALLOWED JMP TYAORB /JUMP IF OTHERWISE JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE VERYMSG /(E)VERYTHING MESSAGE JMP TYPFEXT /CONTINUE THERE TYAORB, CLL RAR /MOVE ASCII BIT TO LINK SNA CLA /SKIP IF BINARY OR COMBINED JMP PRSCII /JUMP IF ASCII ONLY SNL /SKIP IF COMBINED JMP PRINARY /JUMP IF BINARY ONLY JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE OMBMSG /(C)OMBINED MESSAGE JMP TYPFEXT /CONTINUE THERE PRSCII, JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE SCIIMSG /(A)SCII MESSAGE JMP TYPFEXT /CONTINUE THERE PRINARY,JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE INARMSG /(B)INARY MESSAGE JMP TYPFEXT /CONTINUE THERE PROVERR,JMS I PSCRIBE/[SCRIBE]/GIVE THEM THE VERRMSG /(O)VERRIDE MESSAGE TYPFEXT,JMS LINFINISH /FINISH THE LINE JMP I GETYPE /RETURN / COMES HERE IF FILE TYPE RESPONSE IS BAD. BDTYPE, NL7777 /INDICATE NO CHECKING JMS LINFINSH /FINISH RESPONSE LINE JMS I PSCRIBE/[SCRIBE]/TELL THEM BDTPMSG /TYPE WAS BAD JMP TYPAGN /GO DO IT AGAIN GTUNIT, .-. /GET UNIT NUMBER ROUTINE TAD I GTUNIT /GET MESSAGE ARGUMENT DCA GTBFARG /STORE IN-LINE ISZ GTUNIT /BUMP PAST ARGUMENT GTUAGN, CLL /INDICATE ONE CHARACTER INPUT BUFFER JMS I [GETBUFFER] /GET BUFFERED RESPONSE GTBFARG,.-. /QUERY MESSAGE PASSED HERE TAD I L7400/[STACK] /GET CHARACTER FROM HEAD OF BUFFER TAD L7710/(-"8!200) /SUBTRACT UPPER LIMIT CLL /CLEAR LINK FOR TEST TAD L10A/["8-"0] /ADD ON RANGE SNL /SKIP IF OK JMP BADIGIT /JUMP IF NOT DCA GTBFARG /SAVE FOR NOW JMS LINFINSH /FINISH COMMAND LINE TAD GTBFARG /GET THE VALUE JMP I GTUNIT /RETURN BADIGIT,JMS LINFINISH /FINISH RESPONSE LINE JMS I PSCRIBE/[SCRIBE]/TELL THEM BDIGMSG /THEY GOOFED JMP GTUAGN /GO DO IT AGAIN LINFINI,.-. /LINE FINISH ROUTINE DCA TEMP /SAVE PASSED VALUE ISZ TEMP /WAS IT -1? TAD ESCAPSW /NO, GET FLAG L7710, SPA CLA /SKIP IF NOT SET DCA I [DONEZAP] /PREVENT RESTART TAD ESCAPSW /GET FLAG SMA CLA /SKIP IF SET JMP CREXIT /JUMP IF NOT TAD ["$&177] /GET A "$" JMS I [P7CH] /PRINT IT CREXIT, JMS I [CRLF] /DO A , JMP I LINFINISH /RETURN PAGE / FILE TYPE AND MODE VALIDATION ROUTINES. USED BY ONCE-ONLY COMMAND PARSING / CODE WITH KEYBOARD MONITOR PRESENT. ALSO USED BY RESPONSE MODE SWAPPED CODE. VALFTYP,.-. /VALIDATE FILE TYPE ROUTINE DCA VALMODE /SAVE PASSED VALUE TAD VALMODE /GET IT BACK TAD (-"O!300) /COMPARE TO "O" SNA /SKIP IF OTHER JMP GOTO /JUMP IF IT MATCHES TAD (-"E+"O) /COMPARE TO "E" SNA /SKIP IF OTHER JMP GOTE /JUMP IF IT MATCHES TAD (-"C+"E) /COMPARE TO "C" SZA /SKIP IF IT MATCHES IAC /TAD (-"B+"C)/COMPARE TO "B" SZA /SKIP IF EITHER IAC /TAD (-"A+"B)/COMPARE TO "A" SNA CLA /SKIP IF NOT "A", "B", OR "C" TAD VALMODE /USE ORIGINAL VALUE IF "A", "B", OR "C" JMP I VALFTYPE /RETURN GOTO, NL2000 /SET OVERRIDE BIT GOTE, TAD (4003) /SET ALL TYPE BITS JMP I VALFTYPE /RETURN VALMODE,.-. /MODE VALIDATION ROUTINE TAD (-"Q!300) /COMPARE TO "Q" SNA /SKIP IF OTHER JMP GOTQ /JUMP IF IT MATCHES TAD (-"C+"Q) /COMPARE TO "C" SNA /SKIP IF OTHER JMP GOTC /JUMP IF IT MATCHES TAD L7770/(-"K+"C) /COMPARE TO "K" SNA /SKIP IF OTHER JMP GOTK /JUMP IF IT MATCHES TAD (-"E+"K) /COMPARE TO "E" SNA /SKIP IF OTHER JMP GOTEMPTY /JUMP IF IT MATCHES NL7775 /SET BAD VALUE SKP /DON'T DO "Q" VALUE GOTQ, NL4000 /SET NEGATIVE VALUE FOR "Q" GOTEMPT,IAC /SET 3 FOR "E" GOTK, IAC /SET 2 FOR "K" GOTC, IAC /SET 1 FOR "C" JMP I VALMODE /RETURN / N.B. VALFTYPE AND VALMODE ARE CALLED WITH PAGE ZERO UNCERTAIN! / SPECIAL CHARACTER TABLE. CHTBL, -177; BACKSP / -176; GOTESC /176 -175; GOTESC /175 -137; BACKSP /UNDERSCORE -33; GOTESC / -"U!300;DELETL /<^U> -"M!300;GOTCR / -"J!300;LFVIEW / -"I!300;GOTHT / L7770, -"H!300;BACKSP / 0 /THIS ENDS THE LIST / SPECIAL RUBOUT CHARACTER TABLE. RUBTBL, -177; RUBAGN / -137; RUBAGN /UNDERSCORE -"H!300;RUBAGN / 0 /THIS ENDS THE LIST / SWAPPED TEXT MESSAGES. BDCTMSG,TEXT "%^I^NVALID ^C^ATALOG!" BDIGMSG,TEXT "%^I^NVALID ^U^NIT ^N^UMBER!%^" BDTPMSG,TEXT "%^I^NVALID ^F^ILE ^T^YPE!%^" CLSMSG, TEXT ")%^" CNOWMSG,TEXT "%^C^ATALOG OF ^" MPTMSG, TEXT "MPTY^" PAGE CURMSG, TEXT "^C^URRENTLY)%" DPERR, TEXT "%^M^ULTIPLE ^P^ERIOD ^C^HARACTERS IN ^S^EARCH ^S^TRING!%^" ILLMSG, TEXT "ILL" INARMSG,TEXT "INARY" INPMSG, TEXT "%^I^NPUT: ^" MBADMSG,TEXT "%^I^NVALID ^M^ODE!%" MODMSG, TEXT "%^M^ODE: " /MPTMSG,TEXT "MPTY^" MTMSG, TEXT " NOW ^E^MPTY (^" NAMMSG, TEXT "%^N^AME: " OMBMSG, TEXT "OMBINED" OPYMSG, TEXT "OPY" OUTPMSG,TEXT "%^O^UTPUT: " SCIIMSG,TEXT "SCII^" SLTMSG, TEXT "^F^REE ^S^LOT" TOBEMSG,TEXT " TO BE ^E^MPTIED (^" TYPMSG, TEXT "%^T^YPE: " UITMSG, TEXT "UIT" UNITMSG,TEXT "%^U^NIT: " VERRMSG,TEXT "VERRIDE" VERYMSG,TEXT "VERYTHING" PAGE RESEND= . /END OF CODE TO BE MOVED RESCNT= RESEND-FMRES2%200 /PAGE COUNT OF SWAPPED SECTION OCVBUFF=. /OUTPUT CATALOG VERIFY BUFFER FIELD 0 /THIS WILL DUMP THE LITERALS *RESEND /RESTORE ORIGIN RELOC /TURN OFF RELOCATION IFNZRO .&177 FILMAN= . /FILMAN SYSTEM STARTS HERE FILMAN, NOP /HERE IN CASE WE'RE CHAINED TO JMS I (XORSW+PZ) /XOR OPTION SWITCHES BEFORE SWITCH SCAN NL0002 /SET /K BIT MASK AND I (SWAL) /GET /K BIT SZA CLA /SKIP IF NOT SET JMP SETKILL /JUMP IF SET TAD I (SWAL) /GET SWITCHES /A-/L AND L200/[200] /JUST /E BIT SNA CLA /SKIP IF /E BIT SET JMP SETCOPY /JUMP IF NOT SET SETEMPT,IAC /SET EMPTY VALUE SETKILL,IAC /SET KILL VALUE SETCOPY,IAC /SET COPY VALUE DCA I (MODE) /SAVE MODE VALUE / IF THE COMMAND BUFFER WAS COMPLETELY PARSED, THEN NO MULTI-CHARACTER OPTIONS / WERE PASSED AND GETNDX POINTS TO . IF GETNDX POINTS TO A NON- / CHARACTER, THEN EITHER GARBAGE WAS GIVEN OR A MULTI-CHARACTER OPTION WAS / ACCIDENTALLY SCANNED AS A SWITCH OPTION. WE MUST NULLIFY THE EFFECT OF THE / SWITCH THUS SET. THERE ARE SEVERAL ANOMALOUS SITUATIONS: / /N SET AND /NAME:STRING IS PASSED AS FIRST MULTI-CHARACTER OPTION. / /O SET AND /OUTPUT:O IS PASSED AS FIRST MULTI-CHARACTER OPTION. / /Q SET AND /QUERY:Q IS PASSED AS FIRST MULTI-CHARACTER OPTION. / /U SET AND /UNIT:U IS PASSED AS FIRST MULTI-CHARACTER OPTION. / IN ALL CASES (EXCEPT /Q) THE SWITCH WILL HAVE TO BE FORCED OFF. THE /Q CASE / IS OBVIATED BY DEMANDING THAT /QUERY:Q TAKES PRECEDENCE OVER /Q. / ALL OTHER SWITCHES ACCIDENTALLY SET BY FIRST MULTI-CHARACTER OPTIONS BEING / PARSED AS OPTION SWITCHES ARE IGNORED BY FILMAN. BADMODE,JMS I GETHAF/[XGETHAF]/GET LAST CHARACTER SCANNED BADNESS,SNA CLA /SKIP IF NOT TYPBAD, JMP I (TSTEIK) /JUMP IF UNIBARF,NL7776 /\ YNOBAD, TAD GETNDX / >BACKUP TO POTENTIAL "/" DCA GETNDX // NXTOPT, ISZ PARSW /BUMP UP POSITION INDICATOR JMS I TSPACE/[XTSPACE]/IGNORE AND PARSW, 0-1 /PARSE POSITION SWITCH; THIS CAN BE SKIPPED JMS I GETHAF/[XGETHAF]/GET A CHARACTER SNA /SKIP IF NOT JMP I (GOTONE) /JUMP IF TAD (-"/!200) /COMPARE TO "/" SZA CLA /SKIP IF IT MATCHES JMP I (BADSPEC) /JUMP IF NOT ISZ GETNDX /BUMP TO NEXT JMS I TSPACE/[XTSPACE]/IGNORE AND JMS I NAME/[XNAME] /PARSE OFF A NAME JMP I (BADSPEC) /WASN'T A NAME / NAME IS GOOD, SO ATTEMPT TO PROCESS IT AS A MULTI-CHARACTER OPTION. JMP I (OPTGO) /CONTINUE THERE / INPUT:I OPTION. INSPEC, JMS I (GETUNIT) /GET THE UNIT NUMBER DCA I (INUNIT+PZ) /STASH IT JMP NXTOPT /GO DO NEXT / MODE:M OPTION. MODSPEC,JMS I (GETSPEC) /GET VALUE JMS I (VALMODE+PZ) /CHECK IF VALID MODE SNA /SKIP IF VALID MODE JMP MODEBAD /JUMP IF BAD MODE DCA I (MODE) /SAVE MODE TYPE JMP NXTOPT /KEEP GOING MODEBAD,DCA BADMODE /INDICATE MODE ERROR JMP I (MEMCHK) /CONTINUE THERE / NAME:STRING OPTION. NAMSPEC,TAD (STRBF2+PZ) /POINT TO DCA PUTBASE /STRING STORAGE DCA PUTNDX /CLEAR OUTPUT INDEX SMVLUP, JMS I TSPACE/[XTSPACE]/IGNORE AND JMS I GETHAF/[XGETHAF]/GET A CHARACTER SZA /SKIP IF TAD (-"/!200) /ELSE COMPARE TO "/" SNA /SKIP IF OTHER JMP STRFINISH /JUMP IF EITHER IAC /TAD (-".+"/)/COMPARE TO "." SNA CLA /SKIP IF OTHER ISZ PNTCNT /ELSE COUNT THIS ONE JMS I GETHAF/[XGETHAF]/GET THE CHARACTER JMS I PUTHAF/[XPUTHAF]/PUT IN STRING BUFFER ISZ GETNDX /BUMP INPUT INDEX ISZ PUTNDX /BUMP OUTPUT INDEX ISZ DANGER /TOO MANY CHARACTERS? JMP SMVLUP /NO, KEEP GOING JMP I (MEMCHK) /YES, FORGET IT STRFINI,JMS I PUTHAF/[XPUTHAF]/ENSURE IN STRING BUFFER JMS I (PARTEST) /TEST IF WE ARE FIRST OPTION NL5777 /SETUP MASK AND I (SWMX) /REMOVE /N BIT OUTSENT,DCA I (SWMX) /STORE BACK OTHERS JMP NXTOPT /GO DO NEXT / OUTPUT:O OPTION. OUTSPEC,JMS I (GETUNIT) /GET THE UNIT NUMBER DCA I (OTUNIT+PZ) /STASH IT JMS I (PARTEST) /TEST IF WE ARE FIRST OPTION TAD I (SWMX) /GET SWITCHES /M-/X AND (6777) /REMOVE /O BIT JMP OUTSENTRY /CONTINUE THERE / QUERY:Q OPTION. QUESPEC,JMS I (GETSPEC) /GET THE VALUE JMS I (YORNO) /CHECK FOR YES/NO DCA I (QUERYSW+PZ) /STORE RESULT FOR LATER DCA I (TESTQ) /PREVENT /Q CHECK LATER JMP NXTOPT /GO DO NEXT / TYPE:T OPTION. TYPSPEC,JMS I (GETSPEC) /GET THE VALUE JMS I (VALFTYPE+PZ) /CHECK FOR VALID FILE TYPE SNA /SKIP IF OK JMP BADTYP /JUMP IF NOT DCA I (FILTYPE+PZ) /STORE FILE TYPE JMP NXTOPT /GO DO NEXT BADTYP, DCA TYPBAD /INDICATE BAD TYPE JMP I (MEMCHK) /CONTINUE THERE / UNIT:U OPTION. UNISPEC,JMS I (GETUNIT) /GET THE UNIT NUMBER DCA I (UNIT+PZ) /STASH IT JMS I (PARTEST) /CHECK IF FIRST OPTION TAD I (SWMX) /GET SWITCHES /M-/X AND (7767) /REMOVE /U BIT JMP OUTSENTRY /CONTINUE THERE / VERIFY:V OPTION. VERSPEC,JMS I (GETSPEC) /GET THE VALUE JMS I (YORNO) /CHECK FOR YES/NO DCA I (VERSW+PZ) /STASH THE VALUE JMP NXTOPT /GO DO NEXT DANGER, -STRLENGTH-1 /DANGER COUNT FOR STRING LENGTH PNTCNT, 4000-2 /DANGER COUNT FOR "." CHARACTERS PAGE / COMES HERE ON ALL COMMAND FORMAT ERRORS. BADSPEC,DCA I (BADNESS) /INDICATE WE WILL EVENTUALLY COMPLAIN TSTEIK, TAD I (SWAL) /GET SWITCHES /A-/L AND (212) /JUST /E, /I, /K BITS SZA CLA /SKIP IF NONE SET GOTONE, NL7777 /SET INVOKED MODE VALUE DCA I (IMSW) /STORE THE INVOKED MODE SWITCH TSTESC, TAD COLUMN /GET MONITOR'S COLUMN COUNTER SZA /SKIP IF AT NEW LINE DCA I (DONEZAP+PZ) /ACTIVE TERMINATOR MEANS ONCE ONLY MEMCHK, TAD I PSCRSIZE/[SCRSIZE] /GET SOFTWARE CORE SIZE WORD AND (70) /JUST LCS BITS SNA CLA /SKIP IF SOME AVAILABLE JMP TESTC /JUMP IF NOT GOT6K, JMS I (ZAP6K) /SETUP FOR 6K OPERATION JMP TESTS /CONTINUE THERE TESTC, TAD I (SWAL) /GET SWITCHES /A-/L RTL /MOVE /C BIT TO AC[0] SMA CLA /SKIP IF /C BIT SET JMP TESTS /JUMP IF NOT TAD I PSCRSIZE/[SCRSIZE] /GET SOFTWARE CORE SIZE WORD AGAIN AND (700) /JUST MCS BITS SZA CLA /SKIP IF NO MORE MEMORY THERE JMP GOT6K /JUMP IF ANY MORE NL0002 /SETUP THE "C" BIT MASK AND I PSCRSIZE/[SCRSIZE] /GET THE BIT SZA CLA /SKIP IF CONSOLE NOT PRESENT JMP TESTS /JUMP IF CONSOLE PRESENT TAD I PSCRSIZE/[SCRSIZE] /GET THE SOFTWARE CORE SIZE WORD AGAIN AND CATCORE/[7000] /JUST PCS BITS SZA CLA /SKIP IF 4K MACHINE JMP GOT6K /JUMP IF SOME MEMORY AVAILABLE TESTS, TAD I (SWMX) /GET SWITCHES /M-/X AND L40/[40] /JUST /S BIT SZA CLA /SKIP IF NOT SET DCA I (DONEZAP+PZ) /CAUSE SINGLE RUN TESTQ, TAD I (SWMX) /**** /QUERY:Q FOUND **** 0000 AND L200/[200] /JUST /Q BIT SNA CLA /SKIP IF SET JMP TESTN /JUMP IF NOT NL7777 /SETUP QUERY VALUE DCA I (QUERYSW+PZ) /STASH IT FOR LATER TESTN, NL2000 /SETUP /N BIT MASK AND I (SWMX) /GET /N BIT SNA CLA /SKIP IF SET JMP MOVMAN /JUMP IF NOT NL0001 /GET NO-VERIFY VALUE DCA I (VERSW+PZ) /STASH IT FOR LATER MOVMAN, TAD I FROMPTR /GET A WORD DCA I TOPTR /PUT A WORD ISZ FROMPTR /BUMP TO NEXT ISZ TOPTR /BUMP TO NEXT ISZ MOVCNT /DONE YET? JMP MOVMAN /NO, KEEP GOING TESTU, TAD I (SWMX) /GET SWITCHES /M-/X AND L10A/[10] /JUST /U BIT SNA CLA /SKIP IF SET JMP UNOT /JUMP IF NOT SET TAD L7600A/[CLA!400]/GET CLA INSTRUCTION DCA I (CASZP1) /PREVENT LOWER-CASE TAD L7600A/[CLA!400]/GET CLA INSTRUCTION DCA I (CASZP2) /PREVENT LOWER-CASE JMP TESTB /CONTINUE THERE UNOT, TAD L7400/[NOP!400] /GET NOP INSTRUCTION DCA I (GCMZAP) /ALLOW LOWER-CASE TESTB, NL2000 /SET /B BIT MASK AND I (SWAL) /GET /B BIT SNA CLA /SKIP IF SET DCA I (BZAP) /ELSE USE SCREEN RUBOUT TESTY, TAD I (SWY9) /GET SWITCHES /Y-/9 SPA CLA /SKIP IF /Y NOT SET DCA I (YZAP) /PREVENT "ARE YOU SURE? " SEQUENCE TAD I L7600A/[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 LSCRSIZ/[SCRSIZ]/GET THE "C" BIT SNA CLA /SKIP IF SET JMP I (CHKERRORS) /JUMP IF NOT TAD I LSCRSIZ/[SCRSIZ]/GET CORE SIZE WORD AGAIN RTR;RAR /MOVE OVER AND AND (70) /ISOLATE MCS BITS TAD (CIF 10) /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 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" JMP I (CHKERRORS) /CONTINUE THERE FROMPTR,PZ /WHERE FILMAN IS NOW MOVCNT, -RESEND /COUNT OF WORDS TO MOVE TOPTR, 0000 /WHERE FILMAN GOES PAGE CHKERRO,TAD I (BADNESS) /GET BADNESS INDICATOR SZA CLA /SKIP IF BAD JMP CHKUNIT /JUMP IF NOT JMS I (CSCRIBE) /GO COMPLAIN OF IPMSG /INVALID PARAMETERS CHKUNIT,NL7776 /-2 UNITEMP,TAD MODE /COMPARE TO MODE SPA CLA /SKIP IF KILL OR EMPTY JMP COPCHK /JUMP IF MIGHT BE COPY TAD INUNIT /GET INPUT UNIT TAD OTUNIT /GET OUTPUT UNIT SNL CLA /SKIP IF BOTH ARE DEFAULTED JMP UNICONFLICT /JUMP IF AT LEAST ONE WAS SPECIFIED UNITOK, TAD I (SBTFUN) /GET BOOTSTRAP UNIT WORD AND L7/[7] /JUST UNIT BITS TAD (4000) /ADD ON INVERSION BIT DCA UNITEMP /STASH IT FOR NOW TAD INUNIT /GET INPUT UNIT TAD UNITEMP /ADD ON SYSTEM UNIT SMA /SKIP IF UNIT WAS SPECIFIED DCA INUNIT /ELSE STORE DEFAULT INPUT UNIT CLA /CLEAN UP TAD UNITEMP /GET SYSTEM UNIT CLL RAR /MOVE OVER CML RAL /INVERT AND MOVE BACK DCA UNITEMP /SAVE FOR LATER TAD OTUNIT /GET OUTPUT UNIT TAD UNITEMP /ADD ON XOR-ED SYSTEM UNIT SMA /SKIP IF UNIT WAS SPECIFIED DCA OTUNIT /ELSE STORE DEFAULT OUTPUT UNIT CLA /CLEAN UP TAD UNIT /GET KILL/EMPTY UNIT TAD UNITEMP /ADD ON XOR-ED SYSTEM UNIT SMA /SKIP IF UNIT WAS SPECIFIED DCA UNIT /ELSE STORE DEFAULT KILL/EMPTY UNIT CLA /CLEAN UP TAD I (BADMODE) /GET BAD MODE INDICATOR SZA CLA /SKIP IF BAD JMP CHKTYP /JUMP IF OK JMS I (CSCRIBE) /GO COMPLAIN OF BDMDMSG /BAD MODE CHKTYP, TAD I (TYPBAD) /GET BAD TYPE INDICATOR SZA CLA /SKIP IF BAD JMP CHKUNT /JUMP IF OK JMS I (CSCRIBE) /GO COMPLAIN OF TYBDMSG /BAD TYPE CHKUNT, TAD I (UNIBARF) /GET BAD UNIT INDICATOR SZA CLA /SKIP IF BAD JMP CHKYNO /JUMP IF OK JMS I (CSCRIBE) /GO COMPLAIN OF BDUNMSG /BAD UNIT VALUE CHKYNO, TAD I (YNOBAD) /GET BAD YES/NO INDICATOR SZA CLA /SKIP IF BAD JMP CHKDANGER /JUMP IF OK JMS I (CSCRIBE) /GO COMPLAIN OF BDYNMSG /BAD YES/NO VALUE CHKDANG,TAD I (DANGER) /GET DANGER INDICATOR SPA CLA /SKIP IF TOO BIG JMP CHKPNTS /JUMP IF OK JMS I (CSCRIBE) /GO COMPLAIN OF STLMSG /STRING LENGTH ERROR CHKPNTS,TAD I (PNTCNT) /GET "." COUNTER SMA CLA /SKIP IF TOO MANY OF THEM JMP TESTO /JUMP IF OK JMS I (CSCRIBE) /GO COMPLAIN OF DPERR /TOO MANY POINTS TESTO, TAD FILTYPE /GET FILE TYPE AND (1000) /JUST INITIAL CONDITION BIT SNA /SKIP IF SET JMP CHKSTART /JUMP IF NOT AND I (SWMX) /GET /O BIT SNA CLA /SKIP IF /O BIT SET JMP CHKSTART /JUMP IF NOT TAD (6003) /SET OVERRIDE VALUE DCA FILTYPE /STORE AS NEW FILE TYPE CHKSTAR,TAD I (SFUN) /GET OUR LOAD FUNCTION WORD AND L7/[7] /JUST UNIT BITS TAD I (RESFUN) /ADD ON FUNCTION BITS DCA I (RESFUN) /STORE COMPOSITE TAD I (SBLOCK) /GET OUR LOAD BLOCK TAD I (RESBLK) /ADD ON OVERLAY OFFSET DCA I (RESBLK) /STORE COMPOSITE JMP I (STARTIT) /CONTINUE THERE / COMES HERE IF CHECKING FOR COPY MODE CONFLICTS, ETC. COPCHK, TAD MODE /GET THE OPERATION MODE SPA CLA /SKIP IF COPY JMP UNITOK /JUMP IF QUIT "MODE" TAD UNIT /GET KILL/EMPTY UNIT SPA CLA /SKIP IF NOT DEFAULTED JMP UNITOK /JUMP IF STILL UNTOUCHED UNICONF,JMS I (CSCRIBE) /GO COMPLAIN OF UCONMSG /MODE/UNIT CONFLICT / MULTI-CHARACTER OPTION DISPATCH TABLE. SPECS, -"I^100-"N+300; INSPEC /INPUT -"M^100-"O+300; MODSPEC /MODE -"N^100-"A+300; NAMSPEC /NAME -"O^100-"U+300; OUTSPEC /OUTPUT -"Q^100-"U+300; QUESPEC /QUERY -"T^100-"Y+300; TYPSPEC /TYPE -"U^100-"N+300; UNISPEC /UNIT -"V^100-"E+300; VERSPEC /VERIFY 0 /THIS ENDS THE LIST MODE, .-. /PROGRAM MODE PAGE *OCBUFFER+PZ /OVER UNUSED SPACE / ONCE-ONLY TEXT MESSAGES. / ANNOUNCEMENT MESSAGE. BLURB, TEXT "%^P?S/8 F^ILE ^M^AINTAINENCE" /ANNOUNCEMENT MESSAGE TEXT " ^U^TILITY ^V^ERSION" /CONTINUATION OF MESSAGE VERSION%12+4060 / VERSION%12^12^7777+VERSION+"0^100+REVISION / TEXT "%" /THIS ENDS THE MESSAGE / FATAL ERROR MESSAGES. BDMDMSG,TEXT "%^I^MPROPER ^M^ODE!%^" /IMPROPER MODE MESSAGE BDUNMSG,TEXT "%^I^MPROPER ^U^NIT!%^" BDYNMSG,TEXT "%^Y^ES/^N^O ^V^ALUE ^R^EQUIRED!%^" IPMSG, TEXT "%^I^NVALID ^P^ARAMETER!%^" STLMSG, TEXT "%^S^EARCH ^S^TRING ^T^OO ^L^ONG!%" TYBDMSG,TEXT "%^I^MPROPER ^F^ILE ^T^YPE!%" UCONMSG,TEXT "%^U^NIT AND ^M^ODE ^C^ONFLICT!%" PAGE / COMES HERE TO FINISH ONCE-ONLY CODE. STARTIT,ISZ IMSW /INVOKED MODE? JMP RESMODE /NO, USE RESPONSE MODE TAD I (MODE) /GET THE MODE SPA /SKIP IF NOT "QUIT" JMP I L7600A/[SBOOT] /LEAVE IF "QUIT" MODE TAD COMTABLE/(JMP I COMTABL)/TURN INTO TABLE JUMP DCA COMTABLE /STORE IN-LINE SMOVLUP,TAD I ICBLK /GET A WORD FROM TEMPORARY BUFFER DCA I OCBLK /STORE IN STRING BUFFER ISZ STMCNT /DONE ALL YET? JMP SMOVLUP /NO, KEEP GOING COMTABL,JMP I COMTABLE+.-. /WILL BE PROPER JUMP DOCOPY /POINTER TO INVOKED COPY ROUTINE DOKILL /POINTER TO INVOKED KILL ROUTINE DOEMPTY /POINTER TO INVOKED EMPTY ROUTINE RESMODE,JMS I PSCRIBE/[SCRIBE] /GIVE THEM BLURB /ANNOUNCEMENT MESSAGE JMP I (FMRES2) /CONTINUE THERE / ONCE-ONLY SUPPORT ROUTINES. USED WITH KEYBOARD MONITOR PRESENT. / MULTI-CHARACTER OPTION DISPATCH ROUTINE. OPTGO, TAD (SPECS-2) /POINT TO PARAMETER LIST DCA XR1 /STASH THE POINTER CMDLUP, ISZ XR1 /BUMP PAST ROUTINE ADDRESS TAD I XR1 /GET A TRIAL VALUE SNA /SKIP IF NOT END OF LIST JMP I (BADSPEC) /JUMP IF END OF LIST TAD TEMP1 /COMPARE TO OPTION SZA CLA /SKIP IF IT MATCHES JMP CMDLUP /JUMP IF NOT TAD I XR1 /GET THE ADDRESS DCA PARTEST /SET IT UP JMS I GETHAF/[XGETHAF] /GET THE DELIMITER TAD (-":!200) /COMPARE TO ":" SZA CLA /SKIP IF IT MATCHES JMP I (BADSPEC) /JUMP IF NOT ISZ GETNDX /BUMP PAST ":" JMP I PARTEST /GO PROCESS LATEST OPTION CSCRIBE,.-. /CONSOLE-ORIENTED PRINT 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 GETSPEC,.-. /GET AN OPTION VALUE ROUTINE JMS I TSPACE/[XTSPACE]/IGNORE AND JMS I NAME/[XNAME] /PARSE OFF ENTIRE NAME JMP I (BADSPEC) /WASN'T A NAME TAD TEMP1 /GET FIRST PAIR RTR;RTR;RTR /WANT LEFT HALF AND L77/[77] /JUST ONE CHARACTER JMP I GETSPEC /RETURN GETUNIT,.-. /GET UNIT NUMBER ROUTINE JMS I TSPACE/[XTSPACE]/IGNORE AND JMS I GETHAF/[XGETHAF]/GET A CHARACTER ISZ GETNDX /BUMP TO NEXT TAD (-"8!200) /ADD ON UPPER LIMIT CLL /CLEAR LINK FOR TEST TAD L10/("8-"0) /ADD ON RANGE SZL /SKIP IF BAD JMP I GETUNIT /RETURN WITH GOOD VALUE CLA /CLEAN UP DCA I (UNIBARF) /INDICATE UNIT PROBLEM JMP I (MEMCHK) /CONTINUE THERE PARTEST,.-. /PARSE POSITION TEST TAD I (PARSW) /GET CURRENT VALUE SZA CLA /SKIP IF FIRST JMP I (NXTOPT) /GO DO NEXT OPTION IF NOT FIRST JMP I PARTEST /RETURN IF FIRST YORNO, .-. /TEST FOR YES/NO ROUTINE TAD (-"Y!300) /COMPARE TO "Y" SZA /SKIP IF IT MATCHES JMP TESTNO /JUMP IF NOT LNL7777,NL7777 /INDICATE "YES" JMP I YORNO /RETURN TESTNO, TAD (-"N+"Y) /COMPARE TO "N" SZA CLA /SKIP IF IT MATCHES JMP BADYN /JUMP IF NOT NL0001 /INDICATE "NO" JMP I YORNO /RETURN BADYN, DCA I (YNOBAD) /INDICATE PROBLEM JMP I (MEMCHK) /CONTINUE THERE ZAP6K, .-. /6K OPERATION ROUTINE TAD L7600/[CLA!400] /SETUP THE 6K DCA I (I6KZAP+PZ) /INPUT FILE ROUTINE TAD (20^100+10) /SETUP THE DCA I (VERARG+PZ) /VERIFY ARGUMENT WORD TAD LNL7777/(NL7777)/SETUP THE DCA I (V6KZP1+PZ) /BLOCK COUNTER / TAD (VERBUFFER) /SETUP THE VERIFY DCA I (VERCORE+PZ) /BUFFER ARGUMENT TAD (NL4000) /SETUP THE DCA I (V6KZP2+PZ) /COMPARE COUNTER TAD (CDF 10) /SETUP THE DCA I (VERLUP+PZ) /COMPARE LOOP JMP I ZAP6K /RETURN IMSW, .-. /INVOKED MODE SWITCH; -1=INVOKED MODE OPERATION STMCNT, -STRLENGTH%2!4000-1 /STRING MOVE COUNT PAGE *7400 /WHERE THIS GOES IFNZRO 7400-. STACK, *STRLENGTH^3+. /PUSHDOWN STACK STRBUFF,*STRLENGTH%2+1+. /SEARCH STRING BUFFER STREND= . /END OF SEARCH STRING BUFFER $ /THAT'S ALL FOLK!