*IF DEF,IAF$ IDENT IAFEX,/IAFINI/FWA *ELSE IDENT RDFEX,/IAFINI/FWA *ENDIF ABS SST JCTT *IF DEF,IAF$ ENTRY IAFEX *ELSE ENTRY RDFEX *ENDIF ENTRY RFL= ENTRY SSJ= SYSCOM B1 BASE DECIMAL IAFEX TITLE IAFEX - IAF EXECUTIVE INITIALIZATION. *COMMENT IAFEX - EXECUTIVE INITIALIZATION. COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992. IAFEX SPACE 4,10 *** IAFEX - IAF EXECUTIVE INITIALIZATION. * * R.E. TATE 70/12/20. * M.H. DILATUSH. 73/01/20. * P.D. FARRELL. 77/03/17. SPACE 4,10 *** THE IAFEX INITIALIZATION OVERLAY PERFORMS THE * FOLLOWING FUNCTIONS: * * (1) LOADS THE EXECUTIVE OVERLAY. * (2) LOADS THE NETWORK INTERFACE OVERLAY AND LOADS * AND LINKS THE NETWORK AIP IF NETWORK TERMINALS * ARE DEFINED IN THE NETWORK DESCRIPTION FILE. * (3) INITIALIZES TABLES AND POINTERS. * (4) STARTS THE EXECUTIVE PROCESSOR. SPACE 4,10 *** THE COMMAND FORMAT. * * IAFEX,OP=XX. * * THE POSSIBLE MNEMONICS FOR *OP* ARE AS FOLLOWS. * * OP DESCRIPTION * -- ----------- * T AIP TRACE PARAMETER. * THE *T* PARAMETER IS USED FOR SELECTION OF THE AIP * TRACE. THE VALUE OF THE MESSAGE COUNT * ASSIGNED TO THE *T* PARAMETER INDICATES IF THE * TRACE IS SELECTED OR NOT. IF THE TRACE IS * SELECTED, THEN THE MESSAGE COUNT INDICATES HOW * MANY MESSAGES WILL BE LOGGED BEFORE THE * TRACE FILE IS PROCESSED FOR OUTPUT. * T OMITTED TRACE IS NOT SELECTED * T USE DEFAULT MESSAGE COUNT OF 16200 * T=0 TRACE IS NOT SELECTED * T=NNNNNNN USE NNNNNNN AS MESSAGE COUNT * VALID RANGE IS 5000 TO 9999999 * T=* PROCESS TRACE FILE ONLY AT IAF TERMINATION IAFEX SPACE 4 *** OPERATOR MESSAGES. * * NONE. SPACE 4,10 *** ERROR MESSAGES. * * * IAFEX INITIALIZATION ABORT.* * AN ERROR CONDITION HAS BEEN ENCOUNTERED WHICH MAKES * INITIALIZATION IMPOSSIBLE. THE ERROR CONDITION IS * GIVEN BY ONE OF THE MESSAGES LISTED BELOW: * * * AIP LOAD ERROR.* * A LOADER ERROR WAS RETURNED WHILE ATTEMPTING * TO LOAD THE NETWORK AIP RELOCATABLE SUBROUTINES. * * * DRIVER STACK OVERFLOW.* * SEE * POT LINK TABLE OVERFLOW.* * * * ERROR IN IAFEX ARGUMENTS.* * AN ERROR WAS ENCOUNTERED WHEN PROCESSING THE *IAFEX* * COMMAND. CORRECT THE ERROR AND RETRY. * * * ERROR IN IAFEX PARAMETER - T.* * THE VALUE ASSIGNED TO THE *T* PARAMETER WAS NOT VALID. * CORRECT THE ERROR AND RETRY. * * * MESSAGE STATUS TABLE OVERFLOW.* * SEE * POT LINK TABLE OVERFLOW.* * * * MUX TABLE OVERFLOW.* * A TOTAL OF MORE THAN EIGHT MULTIPLEXORS AND * NETWORK INTERFACES WAS DEFINED. * * * NETWORK ACTIVITY TABLE OVERFLOW.* * SEE * POT LINK TABLE OVERFLOW.* * * * NO TERMINALS DEFINED.* * NO TERMINALS, EITHER MULTIPLEXOR OR NETWORK, * ARE PRESENT IN THE EST OR NETWORK FILE. * * * MISSING AIP ENTRY POINT.* * NO ENTRY POINT WAS RETURNED BY THE LOADER * FOR A REQUIRED AIP RELOCATABLE SUBROUTINE. * * * NO ACTIVE DRIVERS REMAINING. * * ALL AVAILABLE DRIVERS, NETWORK AND MULTIPLEXOR, HAVE * DROPPED. THIS CAN BE BECAUSE OF A HARDWARE FAILURE * OR BECAUSE A DRIVER NEVER BECOMES ACTIVE AFTER * INITIALIZATION AND THE OTHER DRIVERS DO NOT HAVE * TERMINALS DEFINED (NONEXISTENT OR OFF EST ENTRY). * * * POT LINK TABLE OVERFLOW.* * THE POT LINK TABLE OVERFLOWED AVAILABLE MEMORY. * THIS INDICATES THAT THE ORIGIN ADDRESS OF THE * INITIALIZER DOES NOT PROVIDE SUFFICIENT ROOM * FOR IAFEX TABLES AND THAT THE INITIALIZER MUST * BE ORIGINED HIGHER IN CORE. THIS WILL REQUIRE * A CORRESPONDING CHANGE TO *1TD* TO REQUEST * SUFFICIENT FIELD LENGTH FOR THE INITIALIZER. * * * REENTRY TABLE OVERFLOW.* * SEE * POT LINK TABLE OVERFLOW.* * * * TERMINAL TABLE OVERFLOW.* * SEE * POT LINK TABLE OVERFLOW.* * * * TOO MANY TERMINALS.* * THE TOTAL NUMBER OF TERMINALS DEFINED IN THE * EST AND ON THE NETWORK DESCRIPTION FILE EXCEEDS * THE MAXIMUM DEFINED BY THE ASSEMBLY VARIABLE *MAXTT*. * * * **** LOST OUTPUT MESSAGE.* * IAF RECEIVED MORE THAN 77B OUTPUT POTS FROM *1MI*, * SO THE LAST MESSAGE WAS THROWN AWAY. **** IS THE * JSN OF THE JOB THAT LOST THE OUTPUT MESSAGE. SPACE 4 *** SENSE SWITCH OPTIONS. * * THE FOLLOWING OPTIONS ARE SELECTED IF THE CORRES- * PONDING SENSE SWITCH IS SET *ON*. * * SSW1 RETAIN USERS IN EJT (DETACHED) IF IAFEX IS DROP- * PED OR ABORTS. THIS WILL RETAIN USERS ACROSS * A RECOVERY DEADSTART. * * SSW2 DO NOT RELOAD AFTER AN ABORT. RELEASE OUTPUT FILE * TO OUTPUT QUEUE. * * SSW3 ABORT ON ABNORMAL CONDITIONS. THIS WILL * FORCE AN INTERNALLY GENERATED ABORT WHEN AN * INTERNAL ERROR SITUATION OCCURRS. A DAYFILE * MESSAGE WILL BE ISSUED GIVING THE NAME OF THE * SUBROUTINE BY WHICH THE ERROR WAS DETECTED. * THIS SWITCH IS SET AUTOMATICALLY DURING INI- * TIALIZATION AND SHOULD BE CLEARED IF ABORT * IS NOT DESIRED. * * SSW4 DUMP FIELD LENGTH TO THE OUTPUT FILE AFTER * OPERATOR DROP. * * SSW5 DUMP FIELD LENGTH TO THE OUTPUT FILE AFTER AN * INTERNAL ABORT ON ABNORMAL CONDITIONS. THE * OUTPUT FILE WILL NOT BE RELEASED TO THE OUT- * PUT QUEUE UNTIL AFTER IAFEX TERMINATION UN- * LESS SENSE SWITCH 6 IS SET. * * SSW6 RELEASE THE DUMP OUTPUT FILE TO THE OUT- * PUT QUEUE IMMEDIATELY AFTER A DROP OR AN ABORT. IAFEX SPACE 4 ** PROGRAMS CALLED BY INITIALIZER: * * CIO - CIRCULAR INPUT/OUTPUT. * CPM - CONTROL POINT MANAGER. * LDR - LOAD OVERLAY. * 1MA - ISSUE DAYFILE MESSAGE. * 1TM AND 1TN - MUX TERMINAL DRIVERS. TITLE INTERNAL DOCUMENTATION. QUAL SPACE 4,10 ** IAFEX INTERNAL DOCUMENTATION. * * QUAL SPACE 4,10 ** DEFINE IAFEX QUALIFICATION SEQUENCE. QUAL QUAL IAFINI QUAL IAFEX2 QUAL IAFEX3 QUAL IAFEX4 QUAL SPACE 4 ** TABLES. * * IN GENERAL ALL TABLES IN *IAFEX* WILL BE DYNAMIC IN LENGTH * AT INITIALIZATION TIME. THE LENGTHS OF THE VARIOUS TABLES * WILL BE DETERMINED BY THE MAXIMUM NUMBER OF TERMINALS * TO BE SERVICED. THUS, IT WILL BE NECESARY FOR ALL ROUTINES * AT INITIALIZATION TIME TO DETERMINE THE VALUES OF TABLE * POINTERS ETC. ONCE *IAFEX* IS INITIALIZED, THE LENGTHS OF * TABLES WILL NOT CHANGE. THUS, POINTERS SUCH AS FIRST AND * LIMIT COULD BE READ AND SAVED BY PROGRAMS THAT ARE TIME * CRITICAL. THESE POINTERS COULD ALSO BE SAVED AS ABSOLUTE * ADDRESSES BECAUSE IAFEX WILL NEVER PAUSE FOR * STORAGE MOVE. IT WILL NOT BE POSSIBLE TO INCREASE THE * LENGTH OF *CMR* WHILE IAFEX IS IN OPERATION IAFEX SPACE 4 ** TERMINAL TABLE. * * THE *TERMINAL TABLE* CONTAINS A GROUP OF WORDS FOR EACH * POSSIBLE ACTIVE USER. THESE WORDS CONTAIN ALL OF THE VITAL * INFORMATION ABOUT THE PARTICULAR USER THAT IS CURRENTLY * LOGGED IN ON A GIVEN CONNECTION. THE ENTRIES ARE FORMATTED * SUCH A WAY THAT THE AMOUNT OF INTERLOCKS NEEDED BETWEEN THE * VARIOUS ROUTINES IS KEPT AT A MINIMUM. THE ENTRIES ARE ALSO * FORMATTED IN SUCH A WAY THAT THE VARIOUS ROUTINES WHO HAVE * TO READ AND WRITE THIS TABLE ARE ABLE TO ACCESS A MINIMUM * NUMBER OF CM WORDS. * * * THE FORMAT OF AN ENTRY IN THE TERMINAL TABLE AND THE * RELATED INFORMATION CAN BE FOUND IN COMSREM. IAFEX SPACE 4 ** CIRCULAR COMMAND STACKS. * * THE TTY DRIVER(S) WILL INTERFACE THROUGH * THE USE OF CIRCULAR COMMAND STACK(S). THE PARAMETERS FOR * THESE STACKS WILL BE SIMILAR TO THOSE IN A FET (I.E. THE * POINTER FOR A CIRCULAR STACK WILL POINT TO AN AREA AS * FOLLOWS) * * WORD 1 HEADER WORD (CONTAINS NAME OF CIRCULAR STACK AND * A POINTER TO THE NEXT STACK. THE LAST STACK IN THE CHAIN * HAS A ZERO POINTER.) * WORD 2 FIRST * WORD 3 IN * WORD 4 OUT * WORD 5 LIMIT * * THE FORMAT OF A STACK ENTRY IS * *T 12/ 20XX,24/ X7,12/ B3,12/ B2 * XX = REQUEST CODE (QUAL TLX). * X7 = (X7). * B3 = POT POINTER, (B3). * B2 = TERMINAL NUMBER, (B2). * * THESE STACKS WILL BE PROCESSED FULL CIRCULAR BY *IAFEX*. * THE UTILIZATION OF COMMAND STACKS LESSENS THE AMOUNT OF * TIME THAT *IAFEX* HAS TO SPEND DETERMINING WHAT OPERATIONS * ARE TO BE PERFORMED. VDRL SPACE 4,10 ** VDRL - DRIVER STATUS WORD TABLE. * * THE DRIVER STATUS WORDS BEGIN AT LOCATION *VDRL* (DE- * FINED IN COMMON DECK *COMSREM*). EACH DRIVER, INCLUD- * ING THE NETWORK INTERFACE, HAS AN ENTRY IN THIS TABLE. * THE TABLE IS TERMINATED BY A NEGATIVE WORD. THE WORDS * ARE USED DURING INITIALIZATION TO PASS INFORMATION BACK * AND FORTH BETWEEN THE EXECUTIVE AND THE PPU DRIVER(S) * AND TO SIGNAL DRIVER FAILURE AFTER INITIALIZATION. * * 1. INITIAL CONDITIONS. PPU DRIVER SETS INTERLOCK PRIOR TO * STARTUP OF CPU CONTROL CARD PROCESSING: * * 12/ IL, 48/ 0. * IL = POSITIVE NONZERO. * * 2. EXECUTIVE INDICATES STARTUP BY CLEARING INTERLOCK AND * SETTING THE DRIVER NAME IN EACH DRIVER STATUS WORD. * * 12/ 0, 24/ DN, 24/ 0. * DN = DRIVER NAME. * * 3. DRIVER(S) REPLY WITH TERMINAL COUNT, CM CONVERSION AND * ID TABLE LENGTH: * * 12/ IL, 24/ DN, 12/ TC, 12/ CL. * IL = POSITIVE NONZERO. * DN = DRIVER NAME. * TC = TERMINAL COUNT. * CL = CM CONVERSION AND ID TABLE LENGTH. * * NOTE - IF THERE ARE NO TERMINALS DEFINED FOR THIS MUX * DRIVER, BOTH *TC* AND *CL* ARE SET TO ZERO AND THE * DRIVER WILL DROP AT THIS POINT. * * 4. EXECUTIVE REPLIES WITH DRIVER POINTERS TO START DRIVER: * * 12/0, 24/ SA, 12/ TC, 12/ FT. * SA = DRIVER CIRCULAR STACK ADDRESS. * TC = TERMINAL COUNT. * FT = FIRST TERMINAL NUMBER. * * NOTE - IF THE DRIVER HAS NO TERMINALS DEFINED (AS IN * NOTE 3) THIS WORD IS SIMPLY CLEARED. * * 5. IF DRIVER SUBSEQUENTLY DROPS, DRIVER INDICATES * FAILURE BY SETTING THE INTERLOCK PRIOR TO DROPPING: * * 11/ 0, 1/ 1, 48/ (AS ABOVE). * * 6. ALL USERS ACTIVE ON THE FAILED DRIVER WILL BE LOGGED * OFF IN A RECOVERABLE STATE. WHEN ALL USERS ARE LOG- * GED OFF, BIT 49 WILL BE SET TO INDICATE THAT THE * DRIVER IS LOGICALLY *OFF*: * * 12/ 3, 48/ (AS ABOVE). * * 7. IF THE DRIVER SHOULD RECOVER, THE DRIVER INDICATES * ITS RESURRECTION BY CLEARING BYTE ZERO AFTER BIT 49 * HAS BEEN SET: * * 12/ 0, 48/ (AS ABOVE). * SA = DRIVER CIRCULAR STACK ADDRESS. * TC = TERMINAL COUNT. * FT = FIRST TERMINAL NUMBER. SPACE 4,20 * EXECUTIVE - DRIVER INTERLOCKS. * * IN ORDER FOR THE IAF EXECUTIVE AND THE MUX DRIVERS TO STAY IN * SYNC, THE FOLLOWING STEPS ARE FOLLOWED WHEN A COMMAND LINE IS * ENTERED. * * * 1) DRIVER ISSUES *CLI* REQUEST TO EXECUTIVE. * * 2) DRIVER WILL NOW IGNORE INPUT UNTIL A POT * IS GIVEN BACK BY IAFEX. * * 3) THUS, THE DRIVER CANNOT GIVE DATA TO THE EXECUTIVE * UNTIL IAFEX IS READY FOR IT. * * 4) THIS ALLOWS IAFEX TO MAKE ANY MODE CHANGES SUCH AS * DATA AND COMMAND MODE BEFORE GIVING THE DRIVER A POT SO THAT * ADDITIONAL COMMANDS SUCH AS *STOP* MAY BE ENTERED. * * * THIS INTERLOCK AS WELL AS THE ONE DESCRIBED IN THE * DESCRIPTION OF THE *VDCT* WORD ARE THE PRIME METHODS OF * INTERLOCKING. SPACE 4,10 ** OUTPUT MESSAGES. * * PPUS MAY ASSIGN OUTPUT MESSAGE POTS BY MEANS OF * MONITOR *TSEM/VASO* FUNCTION REQUESTS. REFER TO * THE *TSEM* DOCUMENTATION IN *COMSREM* FOR A DESCRIPTION * OF THIS REQUEST. * * * *NOS* FORMAT MESSAGES. * * *NOS* FORMAT MESSAGES ARE MESSAGES EMPLOYING NOS * TIME SHARING 6-BIT, 6/12-BIT, OR 12-BIT TERMINAL * BINARY FORMATS. REFER TO THE NOS TIME SHARING US- * ERS REFERENCE MANUAL FOR A DESCRIPTION OF NOS FOR- * MAT MESSAGES. * * * *NAM* FORMAT MESSAGES. * * *NAM* FORMAT MESSAGES ARE MESSAGES CONSTRUCTED AS * NETWORK FORMAT MESSAGE BLOCKS. REFER TO THE NETWORK * R4 EXTERNAL REFERENCE SPECIFICATIONS FOR A DESCRIP- * TION OF NAM FORMAT MESSAGES. * * PROGRAMS USING NETWORK FORMAT MESSAGES SHOULD ALWAYS * SET THE *ADR* FIELD OF THE HEADER TO ZERO UNLESS IT * IS DESIRED TO TAKE ADVANTAGE OF THE IMBEDDED REQUEST * CAPABILITIES ALLOWED BY THE NETWORK INTERACTIVE EXEC- * UTIVE. THE PROPER ADR FIELD WILL BE SET BY THE EXEC- * UTIVE PRIOR TO TRANSMISSION TO THE NETWORK. AS LONG * AS THE ADR FIELD IS ZERO, THE ABN WILL BE TRANSMITTED * AS-IS, ALLOWING THE USER TO PRESET THE ABN FIELD. * * IF THE UPPER 6 BITS OF THE STANDARD ADR FIELD ARE NON- * ZERO, IT INDICATES THAT THE COMBINED ADR AND ABN * FIELDS OF THE HEADER CONTAIN AN IMBEDDED FUNCTION * REQUEST. USING THIS FORMAT, THE HEADER IS FORMATTED * AS FOLLOWS: * *T, 6/ABT, 6/FC, 12/P1, 12/P2, 4/ACT, 8/BITS, 12/TLC. * * FC = IMBEDDED FUNCTION REQUEST IF NONZERO- * = 4 - LOGOFF USER. * = 5 - REQUEST TRANSPARENT INPUT. * = 6 - REQUEST BINARY INPUT. * = 16 - SEND DOWNLINE TERMINAL DEFINITIONS. * P1 = BINARY INPUT CHARACTER COUNT. * P2 = BINARY INPUT TERMINATION CHARACTER. * ABT = APPLICATION BLOCK TYPE. * ACT = APPLICATION CHARACTER TYPE. * BITS = REFER TO NAM ERS. * TLC = TEXT LENGTH IN UNITS SPECIFIED BY *ACT*. IAFEX SPACE 4 ** *IAFEX* REENTRY TABLE. * THE *IAFEX* REENTRY TABLE ALLOWS ROUTINES TO BE ABLE * TO GET CONTROL RETURNED TO THEM OR FUNCTIONS PERFORMED * FOR THEM WHEN A SET OF CONDITIONS HAVE BEEN MET. * * THE REENTRY TABLE CONSISTS OF ONE WORD FOR EACH TERMINAL * WHICH MAY CONTAIN ONE OF THE FOLLOWING * * 1.) 0000 0000 0000 0000 0000 - NO REENTRY CONDITIONS. * * 2.) 2YYY XXXX XXXX PPPP NNNN - WHERE * YYY = INDEX TO TRRT (TABLE OF REENTRY PROCESSORS). * XXXX XXXX = ANYTHING. * PPPP = POT POINTER. * NNNN = LINK TO NEXT ENTRY OF THIS TYPE IN THE QUEUE. * SEE TSR. * * 3.) 0000 0000 00PP PPNN NNNN - WHERE * NNNNNN = POT ADDRESS OF STACKED ENTRIES * PPPP = POT POINTER TO STACKED ENTRIES. TITLE ERROR MESSAGES. SPACE 4 *** DAYFILE MESSAGES. * * *IAFEX ABNORMAL - XXX NNN.* * AN ERROR CONDITION HAS BEEN DETECTED BY ROUTINE * *XXX* DURING THE PROCESSING OF TERMINAL *NNN*. * *NNN* IS THE POT LINK TABLE ADDRESS FOR *SPR*. * REFER TO THE DESCRIPTIONS OF THE VARIOUS ERROR * CODES *XXX* FOR THE DESCRIPTIONS OF THESE * ERROR CONDITONS. * * * PLT INCREASE NOT POSSIBLE.* * THE POT LINK TABLE IS AT ITS MAXIMUM POSSIBLE LENGTH * WHEN MORE ENTRIES WERE REQUESTED DUE TO CURRENT * ACTIVITY. A TEMPORARY SLOWDOWN IN RESPONSE TIME * MAY BE NOTICED BY TERMINAL USERS. IF THIS MESSAGE * IS SEEN OFTEN, INFORM SITE ANALYST. * * *BLOCK LOST - NNNN* * *IAFEX* HAS RECEIVED A *NAK* SUPERVISORY MESSAGE * FOR ACN *NNNN* INDICATING THAT A DOWNSTREAM DATA * BLOCK HAS BEEN LOST. * * *LOGICAL ERROR XX.* * LOGICAL ERROR XX HAS OCCURRED. FOR INSTANCE, * A MESSAGE IS SENT TO A NON CONNECTED TERMINAL. * THIS CAN HAPPEN LEGALLY IF A MESSAGE IS OUTPUT * AND THE USER HANGS UP THE PHONE AT THE SAME * TIME. * * *INCORRECTLY FORMATTED DATA - NNN.* * *NAM* HAS SENT *IAFEX* A *BREAK* CONDITION MESSAGE * ON ACN *NNN* INDICATING THAT AN INCORRECTLY FORMATTED * MESSAGE HAS BEEN SENT BY *IAFEX* TO THAT ACN. * * *SMP INCORRECT SM = AABB, ACN = NNNN.* * AN INCORRECT OR UNRECOGNIZABLE SUPERVISORY MESSAGE, * PRIMARY FUNCTION CODE *AA* AND SECONDARY FUNCTION * *BB*, HAS BEEN RECEIVED FOR ACN *NNNN*. THE FUNCTION * CODE VALUES GIVEN ARE IN HEXADECIMAL. SPACE 4,7 ** ACCOUNT FILE MESSAGES. * * *SBSB, IAF.* *IAFEX* INITIATED. * *SESB, IAF.* *IAFEX* TERMINATION IN PROGRESS. * *SESC, IAF.* *IAFEX* TERMINATION COMPLETE. * *SRSC, IAF.* *IAFEX* RECOVERY COMPLETE. * *SRSA, IAF.* *IAFEX* RECOVERY ABORTED. SPACE 4,20 ** ABNORMAL CONDITION ERROR CODES. * * THE FOLLOWING IS A LIST OF THE ABNORMAL ERROR CODES * THAT MAY BE ISSUED BY *IAFEX* AND SOME INSIGHT INTO WHAT * MAY CAUSE THEM. THE THREE CHARACTER ERROR CODES CORRESPOND * TO THE NAME OF THE SUBROUTINE THAT DETECTED THE ERROR. * * CODE DESCRIPTION. * * ADQ THE SCREEN MANAGEMENT INTERFACE ENCOUNTERED * A FULL DRIVER STACK, OR WAS UNABLE TO LOCATE THE * CORRECT DRIVER REQUEST WORD STARTING AT VDRL. * * ADR THE SCREEN MANAGEMENT INTERFACE ENCOUNTERED * A DRIVER REQUEST EVENT WHICH WAS UNEXPECTED FOR THE * TERMINAL*S CURRENT SCREEN MANAGEMENT CONNECT STATE. * * ASO THIS DOCUMENTS AN ATTEMPT TO ASSIGN OUTPUT (WHICH * MEANS A SYSTEM STEP COMPLETION) TO A TERMINAL TABLE * WHICH IS ALREADY SET COMPLETE (VROT BIT ZERO = 1). * IT USUALLY MEANS A BUG IN THE COMMUNICATION BETWEEN * IAF AND THE SYSTEM. * * ASM IT IS ONLY POSSIBLE TO STACK TWO MESSAGES OR ONE * DRIVER REQUEST AND ONE MESSAGE FOR THE DRIVER AT ONE * TIME. IF THIS MESSAGE IS ISSUED, THEN ONE OF THESE * CONDITIONS WAS ENCOUNTERED WHEN *ASM* ATTEMPTED TO * ASSIGN A NEW MESSAGE TO THE TERMINAL. THIS CONDITION * SHOULD NOT NORMALLY OCCUR, BUT THE ONLY HARM DONE IS * THAT THE PARTICULAR USER LOSES SOME OUTPUT. IF THIS * DOES OCCUR, DURING NORMAL OPERATION, AND THERE HAVE * BEEN NO *DIAL* COMMANDS TO THE TERMINAL THERE IS * PROBABLY AN INTERLOCK PROBLEM. * * ASR THE SCREEN MANAGEMENT INTERFACE RECEIVED A * FUNCTION CODE FROM SMFEX WHICH WAS UNEXPECTED * FOR THE TERMINAL*S CURRENT CONNECT STATE. * * ATL A *TLX* PP ISSUED A *VCSM* TSEM CODE WHEN THE * TERMINALS *SMFEX* CONNECTION CODE DOES NOT ALLOW * THAT FUNCTION CODE. * * BJB AN ATTEMPT WAS MADE TO ENABLE A USER JOB WHILE * ITS TERMINAL TABLE INTERLOCK (*VROT* BIT 0=0) * WAS OUTSTANDING. * * DLP AN ATTEMPT WAS MADE TO DELINK POT ZERO. THIS SHOULD * NEVER HAPPEN. * * DPT THIS INDICATES A POT OR POTS WERE DROPPED THAT WERE * NOT RESERVED. THIS IS IN GENERAL INDICATIVE OF IAFEX * AND FRIENDS TRYING TO USE ONE POT FOR TWO THINGS AT THE * SAME TIME. NEEDLESS TO SAY THIS DOES NOT WORK TOO WELL * AND IN FACT CAN CAUSE A WIDE VARITY OF PROBLEMS. THIS * ERROR MOST OFTEN RESULTS FROM *1TD* OR IAFEX RELEASING * A POT OR POTS, BUT FAILING TO NOTE IT AND THEN * USING THE SAME POT AGAIN LATER IN THE CODE. * * DRI A DRIVER REQUEST TO IAFEX CONTAINED AN INCORRECT * REQUEST CODE. THIS SHOULD NEVER OCCUR. * * EDR A DRIVER REQUEST WAS ENTERED AND THE *VDCT* INTERLOCK * WAS NOT CLEARED. * * ESE THE SCREEN MANAGEMENT INTERFACE ENCOUNTERED * A COMBINATION OF TERMINAL CONNECT STATE AND * EVENT (FROM DRI OR SMFEX) WHICH IS UNDEFINED. * * GPL A POT LINK WAS ATTEMPTED FOR POT ZERO. * * GQE THIS INDICATES THAT IAFEX FOUND A BAD ENTRY IN THE * REENTRY TABLE. THIS IS A FATAL ERROR ON WHICH IAFEX * WILL ABORT BECAUSE THERE IS NO WAY TO REBUILD THE * REENTRY QUEUE AS IT IS A LINKED QUEUE. THE ENTRIES * VALIDITY IS CHECKED AS THEY ARE PUT IN THE TABLE BY * *MQE* SO THIS ERROR WOULD USUALLY INDICATE THE TABLE * WAS BASHED AFTER THE THE ENTRY WAS MADE OR PERHAPS A * POT CONTAINING MULTIPLE ENTRIES WAS BASHED. * * IAM INDICATES THAT EITHER AN INCORRECT ACCOUNTING MESSAGE * WAS REQUESTED BY THE DRIVER, WHICH SHOULD NEVER HAPPEN, * OR THAT SUBROUTINE *IAM* WAS UNABLE TO TO GET * TO GET A POT FOR STACKING MESSAGES. * * ITM THE DRIVER GAVE *IAFEX* AN INCORRECT MESSAGE CODE. * THIS SHOULD NEVER OCCUR. * * LEP AN ATTEMPT WAS MADE TO LINK TWO POT CHAINS AND THE * FIRST POT POINTER WAS ZERO. * * MQE THIS INDICATES EITHER A BAD QUEUE ENTRY WAS ATTEMPTED * OR ELSE AN ENTIRE POT FULL OF QUEUE ENTRIES WAS STACKED * UP. NEITHER OF THESE SHOULD EVER OCCUR. IF THEY DO * THEY CAN USUALLY EASILY BE DEBUGGED IF ONE LETS * *IAFEX* ABORT ON THIS ERROR AND THEN WORKS FROM THE * DUMP. * * RPL AN ATTEMPT WAS MADE TO DROP POTS AFTER POT ZERO. * * RPT THERE WERE NOT ENOUGH POTS AVAILABLE TO SATISIFY A * REQUEST. THIS WOULD PROBABLY INDICATE THAT THE VALUES * OF *VSPL* AND *VMPL* SHOULD BE INCREASED SO AS TO * MAINTAIN MORE SPARE POTS. PROBLEMS IN THIS AREA WILL * ALSO BE INDICATED BY THE STATISTIC IAFEX MAINTAINS ON * THE NUMBER OF TIMES ONLY A FEW POTS ARE LEFT. THIS * ALSO COULD OCCUR BECAUSE OF A SOME SYSTEM HANG * WHICH PREVENTED *IAFEX* FROM OBTAINING MORE STORAGE. * * RMS THE SCREEN MANAGEMENT INTERFACE RECEIVED * A FUNCTION CODE FROM SMFEX WHICH IS OUT OF RANGE. * * SBS A REQUEST WAS MADE TO SET AN INCORRECT SUBSYSTEM * BY MEANS OF A MONITOR *TSEM* REQUEST. * * SDT A PPU REQUESTED A BIT TO BE SET IN AN INCORRECT * TERMINAL TABLE WORD OR ELSE THE BIT VALUE WAS GREATER * THAN 59. THIS SHOULD NEVER OCCUR. * * SFC IAF HAS RECEIVED AN ERROR RETURN FROM CPUMTR ON * AN *SFCALL*. THIS MAY MEAN THAT THERE IS AN ERROR IN * THE SCP/UCP INTERFACE BETWEEN IAF AND SMF. * * STR A PPU REQUEST RECEIVED VIA A *TSEM* MONITOR * FUNCTION CONTAINED AN INCORRECT REQUEST CODE. * THIS SHOULD NEVER OCCUR. * * TSR THIS IS A FATAL ERROR WHICH INDICATES *IAFEX,S* REENTRY * QUEUE HAS BEEN SCREWED UP. THE PLACE TO START TO DEBUG * THIS IS TO LOOK AT THE CONTENTS OF *SSPA* WHICH * CONTAINS THE QUEUE ENTRY THAT WAS BEING PROCESSED AT * THE TIME OF THE ERROR. * * UEC UNEXPECTED ERROR CODE WAS RECEIVED FROM AN EJT MONITOR * REQUEST. * * UNQ LINKAGE IN TYPEAHEAD POT CHAIN IS INCORRECT. THE * POINTER TO THE LAST POT IN THE CHAIN IS ZERO. * * * * IAFEX NETWORK INTERFACE ABNORMAL CONDITIONS. * * THE FOLLOWING ERROR MESSAGES ARE ISSUED ONLY BY THE * NETWORK INTERFACE OVERLAY: * * CODE DESCRIPTION * * ACK A BLOCK ACKNOWLEDGED MESSAGE WAS RECEIVED * FROM THE NETWORK WHEN THE MESSAGE STATUS * TABLE SHOWED NO UNACKNOWLEDGED DOWNSTREAM * MESSAGES OUTSTANDING. * * ERQ SUBROUTINE *ERQ* WAS CALLED TO ENTER A * DRIVER CIRCULAR REQUEST STACK REQUEST TO THE * EXECUTIVE WHEN THE STACK WAS FULL. * * NAK A BLOCK-NOT-DELIVERED SUPERVISORY MESSAGE HAS * BEEN RECEIVED FROM NAM AND EITHER (1) THE TER- * MINAL OUTSTANDING BLOCK COUNT WAS ZERO, OR (2) * THE REASON CODE FOR THE BLOCK-NOT-DELIVERED * CONDITION WAS INCORRECT. * * NWC THIS INDICATES THAT THE NETWORK REQUESTED A CONNECTION * FOR WHICH IAF DOES NOT HAVE A TERMINAL TABLE, OR * ON WHICH IAF HAS NOT FINISHED LOGOFF FOR THE * PREVIOUS USER. * * RDM A MESSAGE WITH AN UNIDENTIFIABLE BLOCK TYPE * OR INCORRECT ACN HAS BEEN RECEIVED FROM NAM. * * SRE A DRIVER REENTRY HAS BEEN OVERWRITTEN. * * TFR THE MAIN IAFEX EXECUTIVE HAS PASSED AN UN- * IDENTIFIABLE DRIVER REQUEST TO THE NETWORK * DRIVER IN BYTE 4 OF TERMINAL TABLE WORD * *VDCT*. TITLE DEFINITION COMMON DECKS. SPACE 4,10 *CALL COMCMAC *CALL COMCCMD *CALL COMSACC QUAL CPS *CALL COMSCPS QUAL * *CALL COMSNET *CALL COMSPRD *CALL COMSRPV *CALL COMSSCP *CALL COMSSFM *CALL COMSSSD *CALL COMSSSJ LIST F,X *CALL COMSEJT *CALL COMSTDR VXJT SET 1 ENABLE CEJ/MEJ ERROR CHECK *CALL COMSREM *CALL COMSTCM LIST * REVERSE *LIST X,F* TITLE ASSEMBLY CONSTANTS. **** ASSEMBLY CONSTANTS. QUAL$ EQU 0 SET TO INDICATE PROGRAM WILL HANDLE QUAL MAXTT EQU 1024D MAXIMUM NUMBER OF TERMINALS WCQT EQU 100 WAIT COMPLETION QUEUE DELAY TIME (MSEC.) MWQT EQU 100 MONITOR WAIT QUEUE DELAY TIME(MSEC) LIAA EQU 4 LOG IN ATTEMPTS ALLOWED MINDL EQU 60D MINIMUM FL CHANGE DELAY TIME MAXDL EQU 360D MAXIMUM FL CHANGE DELAY TIME INCTO EQU 1 FL CHANGE INCREMENT TIME RESTO EQU 60D*15D FL CHANGE RESET TIME INTERVAL SECONDS RTYDL EQU 30D *REER* DELAY COUNTER ** NETWORK INTERFACE ASSEMBLY CONSTANTS. NFCL EQU 20D NETWORK FUNCTION LIMIT PER CYCLE NMCT EQU 300 NETWORK MANAGER CYCLE TIME (MSECS) NODT EQU 10D NETON DELAY TIME (SECONDS) NSCT EQU 128D NETWORK SCAN CYCLE TIME (MSECS) SDTO EQU 60D*3 SHUTDOWN TIME-OUT (SECONDS) AIPL EQU 511D AIP UPLINE DATA BUFFER LENGTH SNDL EQU VXPL*VCPC*4/3+1 SEND BUFFER LENGTH NTODL EQU 30D NETWORK TERMINAL TIMEOUT DELAY (SECONDS) SPACE 4,10 ** AIP TRACE ASSEMBLY CONSTANTS. DMCT EQU 16200 DEFAULT MESSAGE COUNT TO TRACE MNCT EQU 5000 MINIMUM MESSAGE COUNT TO TRACE MXML EQU 10 MAXIMUM MESSAGE LENGTH TO TRACE ** AIP TRACE JOB FILE NAME DEFINITION. * THE TRACE OUTPUT FILE CAN BE PROCESSED THROUGH THE USE * OF AN INPUT JOB. THIS REQUIRES AN INDIRECT ACCESS FILE * UNDER THE SYSTEM USER INDEX 377777 WHICH CONTAINS THE * COMMANDS NECESSARY TO PROCESS THE TRACE OUTPUT FILE * VIA AN INPUT JOB. * THIS MICRO DEFINES THE NAME OF THAT FILE. TJOB MICRO 1,,*TRACIAF* TITLE FETS AND DATA STORAGE. QUAL IAFINI ORG 55000B SET ORIGIN FWA BSS 0 DEFINE FWA OF OVERLAY. FETS SPACE 4,10 ** FETS. CON NMSG ERROR MESSAGE BUFFER ADDRESS NMSG BSS 4 ERROR MESSAGE BUFFER L BSS 0 LOADER PARAMETER FILE ZZZZZ17 FILEB FBUF,FBUFL SPACE 4,10 ** DATA STORAGE. ATAS CON 0 AIP TRACE PARAMETER ASSUMED VALUE ATPV CON 1R+ COMMAND TRACE PARAMETER VALUE LWAA CON 0 LWA+1 ALLOCATED CORE NDRO CON 0 NETWORK DRIVER ORDINAL VHMP CON 0 HIGHEST MUX PORT NUMBER TITLE MAIN ROUTINE. INI SPACE 4,10 ** INI - IAFEX INITIALIZATION. * * ENTRY (R1) = 1 IF IAF RECOVERY. * WHERE R1 IS THE JOB CONTROL REGISTER 1. INI BSS 0 ENTRY SB1 1 SET CONSTANT B1=1 GETSSID INID GET SUBSYSTEM IDENTIFICATION SA1 INID SX0 X1-IFSI ZR X0,INI1 IF IAF SUBSYSTEM SX0 X1-RDSI NZ X0,INI6 IF NOT RDF SUBSYSTEM INI1 GETJO INID GET JOB ORIGIN CODE SA1 INID MX2 -6 BX1 -X2*X1 NZ X1,INI6 IF NOT SYSTEM ORIGIN TYPE SETUI 377777B SET SYSTEM USER INDEX OVERLAY (=6LIAFEX1),100B,S LOAD EXECUTIVE GETSSM //LISF GET SYSTEM SECURITY MODE GETJCR INIC SA1 INIC LX1 59-0 NG X1,INI1.1 IF RELOAD - KEEP PREVIOUS SWITCH SETTINGS ONSW 20B SELECT DUMP OPTION INI1.1 MOVE //TINSTL,//TINST,TINS RJ CIC CRACK *IAFEX* COMMAND RJ CPA CLEAR POINTER AREAS * CHECK IF *IAF* RECOVERY (R1=1 IF RECOVERY) SA1 INIC SX7 B1 BX7 X7*X1 ZR X7,INI2 IF NOT IAF RECOVERY BX7 X1-X7 CLEAR THE RECOVERY FLAG SA7 A1 SETJCR INIC SET JOB CONTROL REGISTERS RTIME VRLL SET RECOVERY TIME IN SECONDS SA1 VRLL LX1 -36 MX7 -24 BX7 -X7*X1 SA7 A1+ *IF DEF,IAF$ * CALL DRIVERS. INI2 SA1 INIH SB6 VDRL+VDRM RJ CDR CALL *1TM* DRIVER SA6 VITM SAVE *1TM* DRIVER REQUEST WORD SA1 INIB SB6 VDRL+VDRN RJ CDR CALL *1TN* DRIVER *ELSE * CALL TWO PORT MUX DRIVER. INI2 SA1 INIH SB6 VDRL+VDRM RJ CDR CALL *1TM* DRIVER SA6 VITM SAVE *1TM* DRIVER REQUEST WORD *ENDIF RJ WDP WAIT DRIVER PRESET COMPLETE * DETERMINE MAXIMUM NUMBER OF USERS. SA1 B0 SET TIMEOUT ACCORDING TO SSW1 SX6 B1 LX6 6-0 BX6 X6*X1 SA2 INIE SET INTO REQUEST LX6 25-6 BX6 X6+X2 SA6 A2 REWRITE REQUEST SYSTEM EJT,R,INIE UPDATE TIME IN EJT SX7 TINST SA7 LWAA FWA OF ALLOCATABLE MEMORY SA1 VMNL NUMBER OF MUX PORTS SA3 VNTP NUMBER OF NETWORK TERMINALS SX2 =C* NO TERMINALS DEFINED.* IX6 X3+X1 TOTAL MUX AND NETWORK TERMINALS SA6 A1 STORE TOTAL TERMINAL COUNT ZR X6,ABT IF NO TERMINALS DEFINED SX6 X6-MAXTT-1 CHECK TOTAL TERMINAL COUNT SX2 =C* TOO MANY TERMINALS.* PL X6,ABT IF TOO MANY TERMINALS *IF DEF,IAF$ ZR X3,INI3 IF NO NETWORK TERMINALS RJ LNI LOAD NETWORK INTERFACE *ENDIF * SET UP REPRIEVE PROCESSING. INI3 REPRIEVE RPVB,SETUP,77B SET REPRIEVE PROCESSING * ALLOCATE MEMORY AND TABLES. RJ CAM CLEAR ALLOCATABLE MEMORY RJ ADS ALLOCATE DRIVER STACKS RJ ATT ALLOCATE TERMINAL TABLES RJ ATN ALLOCATE TERMINAL NAME TABLE RJ ART ALLOCATE REENTRY TABLES RJ AMS ALLOCATE MESSAGE STATUS TABLE RJ ANA ALLOCATE NETWORK ACTIVITY TABLE RJ ABM ALLOCATE BUFFER MEMORY RJ PMP PRESET MISCELLANEOUS POINTERS * SET TABLE REFERENCE ADDRESSES IN INSTRUCTIONS. SB5 TINS EXECUTIVE INSTRUCTION TABLE ADDRESS SB7 //TINSTL RJ SAD SET INSTRUCTION ADDRESSES SA1 VNTP CHECK IF NETWORK DEFINED ZR X1,INI4 IF NETWORK INTERFACE NOT LOADED SB5 TINS2 IAFEX4 INSTRUCTION TABLE ADDRESS SB7 /IAFEX4/TINSTL RJ SAD SET INSTRUCTION ADDRESSES * ENTER IAFEX EXECUTIVE. INI4 RJ SPC SET SUBSYSTEM PROCESSOR CALLS RJ STD START DRIVER(S) SB5 FBUF SET POINTERS TO CLEAR VERSION AREA SB6 FBUF+8 SX6 B0+ + SA6 B5 CLEAR WORD SB5 B5+B1 LT B5,B6,* IF NOT COMPLETE VERSION INIA GET SYSTEM NAME MESSAGE FBUF,,R ISSUE DAYFILE MESSAGE DATE //DATE CLOCK //TIME TIME //CPTIME RTIME //START SX6 -1 SA6 HEDR+4 SYSTEM RSB,R,INIG GET BANNER MESSAGE SB6 HEDR+4 SB7 HEDR+7 INI4.1 SA1 B6 CONVERT ZEROS TO BLANKS IN HEADER SB6 B6+B1 RJ ZTB SA6 A1+ LE B6,B7,INI4.1 IF MORE WORDS TO CONVERT SA2 //START SA3 //SPRD AX2 36 REAL TIME IN SECONDS IX7 X2+X3 INCREMENT REAL TIME SA7 //SPRC SA7 //SPRD SA1 VNTP CHECK NETWORK TERMINALS BX7 X2 AX1 24 SX2 X1-VPST COMPARE TO FIRST LIVE TERMINAL NUMBER ZR X1,INI5 IF NO NETWORK TERMINALS DEFINED SA7 /IAFEX4/NFRT SET INITIAL *NETON* DELAY INI5 MESSAGE (=C*SBSB, IAF.*),5 TIMESHARING EXECUTIVE INITIATED EQ //IAF ENTER EXECUTIVE INI6 MESSAGE (=C* USER ACCESS NOT VALID.*) ABORT INIA VFD 12/11B,12/0,12/0,24/FBUF INIB VFD 18/3L1TN,42/0 INIC CON 0 JOB CONTROL REGISTERS INID CON 0 QUEUE PRIORITY/JOB ORIGIN TYPE INIE VFD 24/0,12/1,23/RTEJ,1/0 VFD 60/0 VFD 6/0,6/TXOT,48/0 BSSZ EJPB-*+INIE INIG VFD 12/0,12/6,18/SYTL,18/HEDR+4 INIH VFD 18/3L1TM,30/0,12/0 *1TM* CALL TITLE SUBROUTINES. ABM SPACE 4,25 ** ABM - ALLOCATE BUFFER MEMORY (POTS). * * ENTRY (LWAA) = LWA+1 OF MEMORY ALLOCATED. * (VMNL) = TERMINAL COUNT. * * EXIT (LWAA) = LWA+1 OF POT LINK TABLE. * (VCPL) = FL CHANGE IN PROGRESS. * (VPAL) = POTS ALLOCATED. * (VPLP) = 12/LENGTH, 24/ FWA, 24/ LWA+1 OF * POT LINK TABLE. * (VBMP) = 36/, 24/ FWA OF BUFFER MEMORY. * (VPUL) = 1. * POT 0 IS RESERVED. * * TO *ABT* IF POT LINK TABLE OVERFLOW. * * USES X - 0, 1, 2, 3, 4, 5, 6, 7. * A - 1, 2, 3, 4, 5, 6, 7. * B - 2, 6, 7. * * CALLS ABT. * * MACROS MEMORY. ABM SUBR ENTRY/EXIT * FIND PLT SIZE BASED ON TERMINALS IN SYSTEM. SA1 VMNL DETERMINE NUMBER OF USERS SX2 VPLM IX1 X1*X2 CALCULATE PERCENTAGE OF PLT TO ALLOCATE SX2 VMXU IX1 X1/X2 SX3 VMIL*VSCL+VLCL*VMIL INCREASE PLT DUE TO QUEUES AX3 2 CALCULATE PLT WORDS IX1 X3+X1 ADD TO PLT SIZE ABM0 SX4 VFLI/VCPC/4 INCREASE TO NEXT PLT INCREMENT SX2 X4 IX1 X4+X1 IX1 X1/X4 IX1 X1*X2 SX2 X1-VPLI PL X2,ABM1 IF PLT ABOVE MINIMUM SIZE SX1 VPLI USE MINIMUM SIZE EQ ABM4 ALLOCATE PLT ABM1 SX2 X1-VPLM NG X2,ABM4 IF PLT BELOW MAXIMUM SX1 VPLM * ALLOCATE POT LINK TABLE. ABM4 SA2 LWAA GET FWA FOR PLT SX6 X1 SET POTS AVAILABLE LX6 2 SA6 VPAL SB6 X2 SET PLT FWA IX7 X2+X1 SET LWA+1 LX1 5 CALCULATE MAXIMUM FL IX3 X1+X7 SX5 3777B-MNFL LX5 6 IX5 X3-X5 NG X5,ABM4.1 IF END OF FL OKAY SX5 X5+VFLI+1 INCREASE THE DIFFERENCE IX1 X1-X5 DECREASE MAXIMUM PLT SIZE AX1 5 CALCULATE PLT WORDS EQ ABM0 DECREASE TO NEXT PLT INCREMENT ABM4.1 AX1 5 RESTORE PLT SIZE SA7 A2 REWRITE LWAA SB7 X7 LX2 24 FORMAT PLT POINTER WORD LX1 48 BX6 X7+X2 BX6 X1+X6 SA6 VPLP STORE PLT POINTER WORD SX1 X6-FWA CHECK FOR OVERFLOW SX2 =C* POT LINK TABLE OVERFLOW.* PL X1,ABT IF OVERFLOW SX7 X7+1 SA7 VBMP * VERIFY THAT PLT LENGTH IS WITHIN IAF FL. * IF IT IS NOT REDUCE PLT UNTIL FL IS REACHED. MEMORY CM,ABMA SEE AMOUNT OF FL CURRENTLY ALLOCATED SA2 VPLP SA3 ABMA COMPARE MEMORY ALLOCATION SX4 X2 SAVE LWA+1 OF PLT LX2 -24 MX0 -12 LX3 59-29 SX2 X2 SAVE FWA OF PLT SX3 X3 SAVE CURRENT FL BX7 X3 IX2 X4-X2 LENGTH OF PLT LX2 5 PLT LENGTH*32 SA4 VBMP IX5 X4+X2 IX0 X5-X3 NG X0,ABM5 IF ENOUGH FIELD LENGTH AVAILABLE IX0 X3-X4 LENGTH OF POTS BX6 X0 AX0 5 (FL-VBMP)/32 = LENGTH OF PLT AX6 3 SB2 24 SHIFT COUNT SA2 A2 SA6 VPAL SET POTS AVAILABLE AX3 X2,B2 SX3 X3 FWA OF PLT MX5 36 IX3 X3+X0 LWA+1 OF PLT BX2 X5*X2 SAVE FWA OF PLT BX6 X3+X2 SA6 A2 SAVE NEW POINTERS * RESERVE POT ZERO AND SET CURRENT FL IN *FLCW*. ABM5 SA1 =77770000000000000010B SA4 ABMD CREATE *1TA* FIELD LENGTH REQUEST SA3 VPAL BX6 X4+X7 BX7 X3 SA6 PMSG SA7 VCPL SET FL INCREASE IN PROGRESS SX6 B1 BX7 X1 SA5 VPLP GET POT LINK TABLE ADDRESS SA6 VPUL AX5 24 SA7 X5 EQ ABMX RETURN ABMA DATA 0 ABMD VFD 18/3R1TA,6/0,12/4001B,24/0 ABT SPACE 4,10 ** ABT - INITIALIZATION ABORT. * * ENTRY (X2) = ADDRESS OF ERROR MESSAGE. * * EXIT (VRLL) = BITS 59 AND 58 SET. * DAYFILE MESSAGE(S) ISSUED. * * CALLS MSG=, SYS=. ABT BSS 0 ENTRY * SET INITIALIZATION ABORT AND NO-RELOAD STATUS. SA1 VRLL SET STATUS BITS MX6 2 BX6 X6+X1 SA6 A1 ZR X2,ABT1 IF NO MESSAGE MESSAGE X2,,R ISSUE ERROR MESSAGE ABT1 MESSAGE (=C* IAFEX INITIALIZATION ABORT.*),,R OFFSW 20B DESELECT DUMP OPTION ABORT ADS SPACE 4,30 ** ADS - ALLOCATE DRIVER STACKS. * * UPDATE THE *MUXP* AND *VDRL* TABLE ENTRIES * AND ALLOCATE DRIVER CIRCULAR REQUEST STACKS. * IF A DRIVER HAS NO PORTS DEFINED, ITS DRIVER WORD * IS CLEARED TO ALLOW THE DRIVER TO COMPLETE INITIAL- * IZATION AND DROP. * * ENTRY (LWAA) = LWA+1 OF ALLOCATED CORE. * (MUXP - MUXP+MXMX) = MUX TABLE ENTRIES. * 6/CH, 6/EQ, 12/, 12/UAL, 12/NT, 12/0 * NT = NUMBER OF TERMINALS. * (VDRL - VDRL+4) = DRIVER INITIALIZATION WORDS. * 12/IL, 6/0, 18/DN, 12/TC, 12/CL. * IL = DRIVER INTERLOCK. * DN = DRIVER NAME. * TC = TERMINAL COUNT. * CL = CONVERSION TABLE LENGTH. * * EXIT (LWAA) = LWA+1 OF DRIVER STACKS. * (MUXP - MUXP+MXMX) = MUX TABLE ENTRIES. * 6/CH, 6/EQ, 12/, 12/UAL, 12/NT, 12/FT * FT = FIRST TERMINAL. * (VDRL - VDRL+4) = DRIVER INITIALIZATION WORDS. * 12/IL, 24/SA, 12/TC, 12/FT. * IL = DRIVER INTERLOCK. * SA = DRIVER STACK ADDRESS. * TC = TERMINAL COUNT. * FT = FIRST TERMINAL NUMBER. * * TO *ABT* IF DRIVER STACK OVERFLOW. * * USES A - 1, 2, 6, 7. * X - 1, 2, 3, 4, 5, 6, 7. * B - 4, 5, 6, 7. ADS SUBR ENTRY/EXIT SB4 VPST (B4) = FIRST TERMINAL NUMBER SB6 MUXP (B6) = MUX TABLE ADDRESS SB7 B0 (B7) = MUX TABLE INDEX MX5 -12 * UPDATE MUX TABLE ENTRIES. ADS0 SA1 B6+B7 READ MUX TABLE ENTRY SB7 B7+B1 ZR X1,ADS0.1 IF END OF TABLE BX3 X1 LX3 -12 BX6 -X5*X3 TERMINAL COUNT SX7 B4 SET FIRST TERMINAL NUMBER BX7 X1+X7 SB4 B4+X6 UPDATE FIRST TERMINAL NUMBER SA7 A1 REWRITE TABLE ENTRY EQ ADS0 PROCESS NEXT ENTRY ADS0.1 SA1 LWAA GET LWA+1 OF PHYSICAL ALLOCATED CORE SB4 VPST (B4) = FIRST TERMINAL NUMBER SB5 X1 (B5) = DRIVER STACK ADDRESS SB6 VDRL (B6) = DRIVER STATUS TABLE ADDRESS SB7 B0 (B7) = DRIVER STATUS TABLE INDEX * READ DRIVER STATUS TABLE ENTRY PARAMETERS. ADS1 SA1 B6+B7 READ TABLE ENTRY MX5 -12 SB7 B7+1 ADVANCE POINTER NG X1,ADS3 IF END OF TABLE BX2 -X5*X1 (X2) = CONVERSION AND ID TABLE LENGTH BX3 X1 LX3 18 MX4 18 BX3 X4*X3 (X3)=DRIVER NAME, RIGHT JUSTIFIED AX1 12 BX6 -X5*X1 (X6) = TERMINAL COUNT NZ X6,ADS2 IF TERMINALS DEFINED SA6 A1 CLEAR TABLE ENTRY EQ ADS1 CONTINUE * SET STACK ADDRESS AND FIRST TERMINAL IN TABLE ENTRY. ADS2 SX1 B5 SET STACK ADDRESS LX1 12 BX1 X1+X6 INSERT TERMINAL COUNT SX7 B4 INSERT FIRST TERMINAL LX1 12 BX1 X1+X7 SX7 B1 SET INTERLOCK LX7 48-0 BX7 X7+X1 SA7 A1+ REWRITE TABLE ENTRY SB4 B4+X6 UPDATE FIRST TERMINAL NUMBER * SET UP DRIVER CIRCULAR STACK. SX6 B5+5 SET *FIRST* SA6 B5+B1 SA6 A6+B1 SET *IN* SA6 A6+B1 SET *OUT* SX6 X6+VDSL SET *LIMIT* SA6 A6+B1 IX6 X6+X2 CALCULATE FWA OF NEXT STACK BX7 X3+X6 FORMAT STACK HEADER SA7 B5 WRITE STACK HEADER SB5 X6+ UPDATE STACK ADDRESS SX1 X6-FWA CHECK FOR OVERFLOW NG X1,ADS1 IF NO OVERFLOW, LOOP SX2 =C* DRIVER STACK OVERFLOW.* EQ ABT ABORT INITIALIZATION * CLEAR POINTER TO NEXT STACK FROM LAST ENTRY. ADS3 ZR B7,ADS5 IF BACK AT START OF TABLE SB7 B7-B1 READ PREVIOUS ENTRY SA1 B6+B7 ZR X1,ADS3 IF NULL ENTRY NG X1,ADS3 IF END OF TABLE AX1 24 SET HEADER ADDRESS SA2 X1 MX6 42 BX6 X6*X2 CLEAR POINTER SA6 X1+ REWRITE HEADER * UPDATE LWA+1 OF ALLOCATED CORE. ADS5 SX6 B5+ SET LWA+1 ALLOCATED SA6 LWAA EQ ADSX RETURN AMS SPACE 4,10 ** AMS - ALLOCATE NETWORK MESSAGE STATUS TABLE. * * THE START OF THE MESSAGE STATUS TABLE IS BIASED BACK- * WARDS IN ORDER THAT NON-NETWORK TERMINAL ENTRIES NEED * NOT BE ALLOCATED. * * ENTRY (LWAA) = LWA+1 OF MEMORY ALLOCATED. * (VNTP) = 36/FIRST, 24/LAST NETWORK TERMINAL NUMBERS. * * EXIT (VMST) = 36/FWA, 24/LWA+1 OF MESSAGE STATUS TABLE. * (LWAA) = LWA+1 OF MESSAGE STATUS TABLE. * * TO *ABT* IF MESSAGE STATUS TABLE OVERFLOW. * * USES A - 1, 2, 6. * X - 1, 2, 6. AMS SUBR ENTRY/EXIT SA1 VNTP GET NETWORK TERMINAL POINTER SX6 X1+ LAST TERMINAL NUMBER AX1 24 SHIFT FIRST TERMINAL NUMBER ZR X6,AMS1 IF NO NETWORK TERMINALS IX6 X6-X1 NETWORK TERMINAL COUNT -1 SA2 LWAA GET LWA+1 ALLOCATED CORE SX6 X6+B1 TERMINAL COUNT IX6 X2+X6 SET LWA+1 IX2 X2-X1 SUBTRACT NON-NETWORK TERMINALS SA6 A2 STORE (LWAA) = LWA+1 LX2 24 MERGE FWA AND LWA+1 BX6 X6+X2 AMS1 SA6 VMST STORE (VMST) SX1 X6-FWA CHECK FOR OVERFLOW SX2 =C* MESSAGE STATUS TABLE OVERFLOW.* PL X1,ABT IF OVERFLOW EQ AMSX RETURN ANA SPACE 4,10 ** ANA - ALLOCATE NETWORK ACTIVITY TABLE. * * ALLOCATES ONE TABLE WORD PER EACH 32 NETWORK TERMINALS * DEFINED. * * ENTRY (VNTP) = 36/FIRST, 24/LAST NETWORK TERMINAL NO. * (LWAA) = LWA+1 OF MEMORY ALLOCATED. * * EXIT (LWAA) = LWA+1 OF NETWORK ACTIVITY TABLE. * (VNAT) = 36/FWA, 24/LWA+1 OF NETWORK ACTIVITY TABLE. * * TO *ABT* IF TABLE OVERFLOW. * * USES A - 1, 2, 6. * X - 1, 2, 3, 6. ANA SUBR ENTRY/EXIT SA1 VNTP GET NETWORK TERMINAL POINTER SX6 B0+ ZR X1,ANA1 IF NO NETWORK TERMINALS SX3 X1+33 LAST TERMINAL NUMBER + 33 AX1 24 FIRST TERMINAL NUMBER IX1 X3-X1 TERMINAL COUNT + 32 SA2 LWAA AX1 5 LENGTH = (TERMINAL COUNT+32)/32 IX6 X2+X1 SET LWA+1 SA6 A2+ STORE (LWAA) LX2 24 SET FWA BX6 X2+X6 ANA1 SA6 VNAT STORE (VNAT) SX1 X6-FWA CHECK FOR OVERFLOW SX2 =C* NETWORK ACTIVITY TABLE OVERFLOW.* PL X1,ABT IF OVERFLOW EQ ANAX RETURN ART SPACE 4,10 ** ART - ALLOCATE REENTRY TABLE. * * ENTRY (LWAA) = LWA+1 OF ALLOCATED CORE. * (VMNL) = TERMINAL COUNT. * * EXIT (LWAA) = LWA+1 OF REENTRY TABLE. * (VRAP) = 36/ FWA, 24/ LWA+1 OF REENTRY TABLE. * * TO *ABT* IF REENTRY TABLE OVERFLOW. * * USES A - 1, 2, 6. * X - 1, 2, 6. ART SUBR ENTRY/EXIT SA1 VMNL GET TERMINAL COUNT SA2 LWAA GET LWA+1 ALLOCATED CORE SX6 X1+VPST ADD PSEUDO-TERMINALS IX6 X6+X2 SET LWA+1 SA6 A2 UPDATE (LWAA) LX2 24 MERGE FWA AND LWA+1 BX6 X6+X2 SA6 VRAP STORE (VRAP) SX1 X6-FWA CHECK FOR OVERFLOW SX2 =C* REENTRY TABLE OVERFLOW.* PL X1,ABT IF OVERFLOW EQ ARTX RETURN ATN SPACE 4,5 ** ATN - ALLOCATE TERMINAL NAME TABLE. * * ENTRY (LWAA) = LWA+1 OF ALLOCATED CORE. * (VMNL) = TERMINAL COUNT. * * EXIT (VTNP) = 36/ FWA, 24/ LWA+1 OF NAMES TABLE. * (LWAA) = LWA+1 OF NAMES TABLE. * * TO *ABT* IF OVERFLOW. * * USES X - 1, 2, 6. * A - 1, 2, 6. ATN SUBR ENTRY/EXIT SA1 VMNL GET TERMINAL COUNT SA2 LWAA LWA+1 OF ALLOCATED CORE IX6 X2+X1 SA6 A2 UPDATE LWA+1 LX2 24 BX6 X6+X2 SA6 VTNP STORE POINTER TO TABLE SX6 X6-FWA SX2 =C* TERMINAL NAME TABLE OVERFLOW.* PL X6,ABT IF OVERFLOW EQ ATNX RETURN ATT SPACE 4,10 ** ATT - ALLOCATE TERMINAL TABLES. * * ENTRY (VMNL) = TERMINAL COUNT. * (LWAA) = LWA+1 OF ALLOCATED CORE. * * EXIT (VTTP) = 36/ FWA, 24/ LWA+1 OF TERMINAL TABLES. * (LWAA) = LWA+1 OF TERMINAL TABLES. * TERMINAL TABLE STATUSES SET COMPLETE. * * TO *ABT* IF TERMINAL TABLE OVERFLOW. * * USES A - 1, 2, 6. * X - 1, 2, 3, 6. * B - 6, 7. * * CALLS ABT. ATT SUBR ENTRY/EXIT SA1 VMNL GET TERMINAL COUNT SX3 VTTL SET TERMINAL TABLE LENGTH SX1 X1+VPST TERMINAL COUNT + PSEUDO TERMINALS SA2 LWAA GET LWA+1 OF ALLOCATED CORE IX6 X3*X1 LENGTH OF TABLES SB6 X2 SET FWA IX6 X6+X2 SET LWA+1 SA6 A2 UPDATE (LWAA) SB7 X6+ LX2 24 MERGE FWA AND LWA+1 BX6 X6+X2 SA6 VTTP STORE (VTTP) SX6 X6-FWA CHECK FOR OVERFLOW SX2 =C* TERMINAL TABLE OVERFLOW.* PL X6,ABT IF OVERFLOW * SET ALL TERMINAL TABLE STATUSES COMPLETE. SX1 VROT SX6 1 ATT1 SA6 B6+X1 STORE VROT SB6 B6+X3 LT B6,B7,ATT1 IF NOT COMPLETE EQ ATTX RETURN CAM SPACE 4,10 ** CAM - CLEAR ALLOCATABLE MEMORY. * * CLEAR THE ALLOCATABLE IAFEX TABLE AREA FROM THE LWA+1 * OF LOADED EXECUTIVE OVERLAY(S) TO THE FWA OF THE * INITIALIZATION OVERLAY. * * ENTRY (LWAA) = FWA OF ALLOCATABLE MEMORY. * * USES A - 1, 6. * X - 1, 6. * B - 6, 7. CAM1 SA6 B6 STORE ZERO WORD SB6 B6+B1 LT B6,B7,CAM1 IF NOT COMPLETE * EQ CAMX RETURN * CAM - ENTRY/EXIT. CAM SUBR ENTRY/EXIT SA1 LWAA GET FWA OF ALLOCATABLE MEMORY SB7 FWA SET INTIALIZER FWA BX6 X6-X6 SB6 X1 (B6) = LWA+1 OF LOADS EQ CAM1 CDR SPACE 4,25 ** CDR - CALL DRIVER. * * THE DRIVER NAME IS SET INTO THE SPECIFIED *VDRL* * ENTRY, AND THE *VDRL* ADDRESS FOR THIS DRIVER IS SET * INTO THE DRIVER REQUEST WORD. THIS DRIVER REQUEST * WORD IS THEN USED TO CALL THE APPROPRIATE DRIVER. * * ENTRY (X1) = DRIVER NAME, LEFT JUSTIFIED. * (B6) = ADDRESS OF *VDRL* ENTRY FOR THIS DRIVER. * * EXIT APPROPRIATE PPU DRIVER HAS BEEN LOADED. * (X6) = FORMATTED DRIVER REQUEST WORD. * = 18/DN, 24/0, 18/VA. * DN = DRIVER NAME. * VA = *VDRL* ADDRESS. * (VDRL) = 18/0, 18/DN, 24/0. * DN = DRIVER NAME. * * USES A - 2, 6. * X - 1, 2, 3, 6. * B - 6. * * MACROS SYSTEM. CDR SUBR ENTRY/EXIT BX6 X1 GET DRIVER NAME LX6 42 SA6 B6 MX3 42 BX1 X3*X1 CLEAR BYTE 4 OF DRIVER REQUEST WORD SX2 B6 BX6 X1+X2 SET ADDRESS IN DRIVER REQUEST WORD SA6 CDRA REWRITE DRIVER REQUEST WORD SA6 CDRB SAVE FORMATTED REQUEST WORD CDR2 SYSTEM SPC,,CDRA CALL APPROPRIATE DRIVER + SA2 B1+ NZ X2,* IF RA+1 NOT CLEAR SA2 CDRA NZ X2,CDR2 IF PPU NOT AVAILABLE SA2 CDRB BX6 X2 RETURN DRIVER REQUEST WORD EQ CDRX EXIT CDRA CON 0 DRIVER SCRATCH WORD CDRB CON 0 FORMATTED DRIVER REQUEST WORD CIC SPACE 4,10 ** CIC - CRACK *IAFEX* COMMAND. * * EXIT TO *ABT* IF ERROR IN ARGUMENTS. * (X2) = ERROR MESSAGE. * * USES X - 1, 2, 4. * A - 1, 4. * B - 4, 5. * * CALLS ARG. CIC SUBR ENTRY/EXIT SA1 ACTR GET ARGUMENT COUNT SA4 ARGR GET FIRST ARGUMENT SB4 X1+ ZR B4,CICX IF NO ARGUMENTS SB5 TICP ARGUMENT TABLE RJ ARG PROCESS ARGUMENTS SX2 =C* ERROR IN IAFEX ARGUMENTS.* NZ X1,ABT IF ERROR IN ARGUMENTS EQ CICX RETURN CPA SPACE 4,10 ** CPA - CLEAR POINTER AREAS. * * CLEAR LOW CORE POINTER WORDS AND DRIVER MULTIPLEXER * TABLE. * * EXIT AREAS CLEARED. * * USES A - 6. * X - 6. * B - 6, 7. CPA SUBR ENTRY/EXIT SB6 PGNR-1 LWA OF POINTER AREA SX6 B0+ * CLEAR LOW CORE POINTERS. CPA1 SA6 B6 CLEAR CORE SB6 B6-B1 GT B6,B1,CPA1 IF NOT COMPLETE * CLEAR MULTIPLEXER TABLE. SB6 MUXP FWA OF MUX TABLE SB7 TXORG LWA+1 OF MUX POINTERS CPA2 SA6 B6 CLEAR CORE SB6 B6+B1 LT B6,B7,CPA2 IF NOT COMPLETE MX6 12 SB6 VDRL FWA OF *VDRL* ENTRIES SB7 B6+4 LWA+1 OF *VDRL* ENTRIES CPA3 SA6 B6 INITIALIZE ENTRIES TO NEGATIVE NUMBER SB6 B6+B1 LT B6,B7,CPA3 IF NOT COMPLETE * CLEAR *TGPM* AND *TSEM* QUEUES SX6 B0+ SB6 VTRP SB5 VTEQ CPA4 SA6 B6 CLEAR QUEUE ENTRY SB6 B6+B1 LT B6,B5,CPA4 IF MORE ENTRIES TO CLEAR EQ CPAX RETURN PMP SPACE 4,10 ** PMP - PRESET MISCELLANEOUS POINTERS. * * SETS THE FOLLOWING: * COMMAND TABLE POINTER. * HEADER MESSAGE ADDRESS. * WORDS 50 AND 51 FOR SCP/UCP INTERFACE. * IAF ACTIVE AS AN SCP. * NETWORK DRIVER STACK ADDRESS. * *TGPM* QUEUE STATUS WORDS. * * USES A - 1, 6, 7. * X - 1, 6, 7. * * MACROS CALLSS. PMP SUBR ENTRY/EXIT SX6 TCOM SET COMMAND TABLE POINTER SX7 TCOM+TCOML LX6 24 BX7 X6+X7 SA7 VCTP SX6 HEDR+3 SET HEADER MESSAGE ADDRESS SA6 VWMP * SET UP SYSTEM CONTROL POINT WORDS AND REQUEST SCP STATUS. BX6 X6-X6 CLEAR SCP SHUTDOWN FLAG SA6 VSHD SA1 PMPB GET PARAMETER WORDS SA2 A1+1 BX6 X1 STORE IN SCP AREA LX7 X2 SA6 SSIW SA7 A6+B1 CALLSS 0,PMPC,R SET SCP ACTIVE * INITIALIZE *TGPM* QUEUE STATUS WORDS. SA1 PMPA INITIALIZE QUEUE STATUS WORDS BX6 X1 SA6 VGPL SA1 A1+B1 BX6 X1 SA6 A6+B1 * ZERO *TGPM* AND *TSEM* QUEUES. SA1 VTRP SET BEGINNING OF QUEUES PMP1 SX6 A1-VTEQ ZR X6,PMP2 IF END OF QUEUES BX6 X6-X6 SA6 A1 ZERO QUEUE ENTRY SA1 A1+1 EQ PMP1 CLEAR NEXT ENTRY * INITIALIZE NETWORK DRIVER STACK ADDRESS. PMP2 SA1 VNTP CHECK NETWORK TERMINAL POINTER ZR X1,PMPX IF NO NAM INTERFACE - RETURN SA1 NDRO GET DRIVER ORDINAL SA1 VDRL+X1 READ STACK POINTER AX1 24 SHIFT STACK ADDRESS SX6 X1+ SX7 A1 SET STACK POINTER ADDRESS SA6 /IAFEX4/NDSA STORE STACK ADDRESS SA7 /IAFEX4/NSPA STORE STACK POINTER ADDRESS EQ PMPX RETURN PMPA VFD 6/VSCL,6/VMIL,12/VTSP,12/VTSP,12/VTSP,12/VTLP VFD 6/VLCL,6/VMIL,12/VTLP,12/VTLP,12/VTLP,12/VTEQ PMPB VFD 42/5LIAFEX,18/IFSI VFD 1/0,1/1,22/0,18/MAXB,18//SMFIF/BSMF PMPC CON 0 SAD SPACE 4,10 ** SAD - SET INSTRUCTION ADDRESSES. * * SETS ADDRESS FIELDS IN TABLE REFERENCE INSTRUCTIONS. * * ENTRY (TINST) = TABLE PRESET. * 12/POS, 1/LWAF, 11/0, 12/PTRA, 12/ADDR * POS = POSITION COUNTER + 2000B. * LWAF = USE TABLE LWA IF SET. * PTRA = POINTER ADDRESS. * ADDR = INSTRUCTION ADDRESS. * (B5) = ADDRESS OF *TINST* TABLE. * (B7) = TABLE LENGTH. * * EXIT INSTRUCTION ADDRESS FIELD SET. * * USES A - 1, 2, 6. * X - 1, 2, 3, 4, 6. * B - 2, 3, 4, 5, 6, 7. SAD SUBR ENTRY/EXIT SAD1 SB7 B7-B1 DECREMENT TABLE INDEX NG B7,SADX IF END OF TABLE - RETURN SA1 B5+B7 READ NEXT TABLE ENTRY UX4,B6 X1 (B6) = POSITION COUNTER SA2 X1 AX1 18 SET TABLE POINTER SX1 X1 SX3 X1 PL X1,SAD3 IF POSITIVE VALUE WANTED BX1 -X1 * GET POINTER TABLE ENTRY. SAD3 SA1 X1 READ TABLE POINTER PL X3,SAD4 IF POSITIVE VALUE WANTED BX1 -X1 COMPLEMENT POINTER SAD4 MX7 -18 SET MASK FOR ADDRESS FIELD SB4 B6-60 SET ADDRESS FIELD SHIFT COUNT LX4 59-47 CHECK LWAF BIT NG X4,SAD5 IF LWA WANTED SX6 A1-VBMP CHECK POINTER ZR X6,SAD5 IF BUFFER MEMORY POINTER AX1 24 SET TABLE FWA * INSERT TABLE ADDRESS IN INSTRUCTION. SAD5 BX1 -X7*X1 MASK TABLE ADDRESS AX2 X2,B4 POSITION INSTRUCTION BX3 -X7*X2 MASK ADDRESS FIELD BX2 X7*X2 CLEAR ADDRESS FIELD SX3 X3 EXTEND SIGN IX3 X3+X1 ADD (SUBTRACT) TABLE ADDRESS BX3 -X7*X3 BX2 X2+X3 MERGE ADDRESS FIELD AND INSTRUCTION LX6 X2,B6 REPOSITION INSTRUCTION SA6 A2 REWRITE INSTRUCTION EQ SAD1 LOOP FOR NEXT ENTRY SPC SPACE 4,10 ** SPC - SET PROCESSOR CALLS. * * SET IAFEX MAIN CONTROL LOOP TO CALL OR BYPASS NETWORK * INTERFACE CODE. * * ENTRY (VNTP) = NETWORK TERMINAL POINTER. * * EXIT MAIN LOOP *RJ* INSTRUCTIONS PRESET. * * USES A - 1, 2, 6. * X - 1, 2, 6. SPC SUBR ENTRY/EXIT SA1 SPCA ASSUME NO CALLS SA2 VNTP ZR X2,SPC1 IF NO NETWORK SA1 SPCB SPC1 BX6 X1 SA6 //IAFA EQ SPCX EXIT SPCA SB0 0 (NO-OP) SB0 0 FILL WORD SPCB RJ /IAFEX4/NDR (EXECUTE NETWORK DRIVER) STD SPACE 4,10 ** STD - START DRIVERS. * * CLEAR DRIVER INTERLOCKS TO ALLOW DRIVERS TO PICK * UP THEIR STACK ADDRESSES AND COMPLETE LOADING. * * ENTRY (VDRL - VDRL+4) = DRIVER INITIALIZATION WORDS. * 12/IL, 24/SA, 12/TC, 12/FT. * IL = DRIVER INTERLOCK. * SA = STACK ADDRESS. * TC = TERMINAL COUNT. * FT = FIRST TERMINAL NUMBER. * * EXIT DRIVER INTERLOCK BITS CLEARED. * * USES A - 1, 7. * X - 1, 6, 7. * B - 5, 7. STD SUBR ENTRY/EXIT SB7 B0 SET DRIVER WORD INDEX MX6 12 SET MASK SB5 VDRL DRIVER WORD POINTER STD1 SA1 B5+B7 READ DRIVER WORD SB7 B7+B1 ADVANCE INDEX NG X1,STDX IF END OF DRIVER WORD TABLE, RETURN BX7 -X6*X1 CLEAR INTERLOCK SA7 A1 EQ STD1 LOOP FOR NEXT DRIVER WDP SPACE 4,10 ** WDP - WAIT DRIVER PRESET COMPLETE. * * WAIT FOR DRIVER(S) TO SIGNAL COMPLETION OF FIRST PHASE * OF INITIALIZATION BY SETTING *VDRL* WORD(S). * * ENTRY (VDRL - VDRL+4) = DRIVER INITIALIZATION WORDS. * 11/0, 1/IL, 24/DN, 12/TC, 12/CL. * IL = INTERLOCK (DRIVER RESPONSE) BIT. * DN = DRIVER NAME. * TC = TERMINAL (PORT) COUNT. * CL = ID AND CONVERSION TABLE LENGTH. * * EXIT (VMNL) = NUMBER OF DRIVER PORTS. * (VHMP) = 36/HIGHEST MUX PORT, 24/0. * (VNTP) = NUMBER OF NETWORK TERMINALS. * * USES A - 1, 6. * X - 0, 1, 2, 4, 5, 6. * * CALLS RCL=. WDP SUBR ENTRY/EXIT SX0 B0+ INITIALIZE PORT COUNT SX5 VDRL WDP1 RECALL WAIT SA1 X5 READ DRIVER RESPONSE MX4 -12 MX2 12 BX2 X2*X1 ZR X2,WDP1 IF DRIVER PRESET NOT COMPLETE NG X1,WDP2 IF ALL DRIVERS COMPLETE AX1 12 MASK PORT COUNT BX1 -X4*X1 SX5 X5+B1 ADVANCE DRIVER POINTER IX0 X1+X0 UPDATE PORT COUNT EQ WDP1 LOOP FOR NEXT DRIVER * STORE DRIVER PORT COUNT AND RETURN. WDP2 AX1 12 BX6 -X4*X1 SA6 VNTP SET TERMINAL COUNT SX6 X0+ STORE PORT COUNT SA6 VMNL ZR X6,WDPX IF NO MUX PORTS SX6 X6+VPST-1 SET HIGHEST MUX PORT NUMBER LX6 24 SA6 VHMP EQ WDPX RETURN TITLE COMMON DECKS. SPACE 4 *CALL COMCARG *CALL COMCCIO *CALL COMCCPM *CALL COMCLFM *CALL COMCOVL *CALL COMCSYS *CALL COMCPFM *CALL COMCDXB *CALL COMCMVE *IF DEF,IAF$ *CALL COMCZTB LIST X *CALL COMCLNI LIST * *CALL COMCLOD *ENDIF TITLE INITIALIZATION TABLES AND BUFFERS. SPACE 4,5 ** TICP - TABLE OF *IAFEX* COMMAND PARAMETERS. TICP BSS 0 T ARG ATAS,ATPV,400B ARG FBUF SPACE 4,10 USE BUFFERS ** FBUF - ALL-PURPOSE CIO CIRCULAR BUFFER. FBUF BSSZ 1001B ALL-PURPOSE CIO BUFFER FBUFL EQU *-FBUF TINS SPACE 4,10 ** TINS - EXECUTIVE OVERLAY INSTRUCTION MODIFICATION TABLE. TINS BSSZ 300B TINSL EQU *-TINS ERRMI TINSL-//TINSTL TINS2 SPACE 4,10 ** TINS2 - IAFEX4 INSTRUCTION MODIFICATION TABLE. TINS2 BSSZ 300B TINS2L EQU *-TINS2 ERRMI TINS2L-/IAFEX4/TINSTL QUAL SPACE 4,10 ** GLOBAL SYMBOL DEFINITIONS. *IF DEF,IAF$ IAFEX EQU /IAFINI/INI *ELSE RDFEX EQU /IAFINI/INI *ENDIF SSJ= EQU 0 RFL= EQU * EJECT TTL IAFEX1 - TTY EXECUTIVE PROCESSOR. IDENT IAFEX1,TRQT,PRS,1,0 *COMMENT IAFEX - EXECUTIVE PROCESSOR. COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992. BASE DECIMAL SPACE 4 *** IAF - INTERACTIVE FACILITY. * R. E. TATE 70/03/17. * P. D. FARRELL 75/02/07. * P. D. FARRELL 77/03/17. * L. K. TUTTLE, K. F. REHM 81/10/21. SPACE 4 *** IAF PERFORMS INTERACTIVE PROCESSING FOR NOS. IT CRACKS * COMMANDS FROM INTERACTIVE USERS AND CALLS THE APPROPRIATE * ROUTINE TO PROCESS THE COMMAND. IT MAKES THE REQUESTS * TO DUMP SOURCE INPUT TO DISK AND TO REFILL OUTPUT BUFFERS * FROM DISK. IT ALSO HANDLES BUFFER MEMORY ALLOCATION. * THE AMOUNT OF MEMORY REQUIRED BY *IAFEX* WILL BE INCREASED * AS MORE TERMINALS BECOME ACTIVE. SPACE 4 *** PROGRAMS CALLED. * * 1TA - IAFEX AUXILIARY. * 1TO - TERMINAL INPUT/OUTPUT. * 1MA - ISSUE DAYFILE MESSAGE. EJECT MACROS TITLE MACROS. SPACE 4 COMMND SPACE 4 ** COMMND - THIS MACRO GENERATES THE ENTRY ADDRESSES AND A TAG * WITH THE VALUE OF THE COMMAND BITS (59 - 47) FOR THE *IAFEX* * REENTRY QUEUE. * * DEFINITIONS. * * PROC = ENTRY POINT OF ROUTINE TO PROCESS THIS COMMAND. * SYSR = QUEUE REQUEST TO BE PLACED IN. * NPRO = ADDRESS TO RETURN TO WHEN THIS ENTRY COMPETE. * ERRA = ADDRESS TO RETURN TO IF ERROR ON COMPLETION. * FUNC = FUNCTION CODE TO BE PASSED TO THE CALLED PROGRAM. * (ALSO SEE TSR FOR ADDITIONAL DOCUMENTATION.) COMMND MACRO PROC,SYSR,NPRO,ERRA,FUNC PROC$ EQU * VFD 1/0 IFC NE,*SYSR** VFD 5/SYSR-TRQT ELSE 1 VFD 5/0 IFC NE,*FUNC** VFD 6/FUNC ELSE 1 VFD 6/0 VFD 12/PROC-TSRPROC IFC NE,*ERRA** VFD 18/ERRA ELSE 1 VFD 18/TSA SET ABORT IFC NE,*NPRO** VFD 18/NPRO ELSE 1 VFD 18/TSA SET ABORT ENDM INDEX SPACE 4 *** INDEX - INDEXED TABLE ENTRY GENERATION. * * * INDEX GENERATES TABLES WHICH ARE TO BE INDEXED BY VALUES * WHICH MAY CHANGE DUE TO ASSEMBLY MODES OR OPTIONS. * * * FIRST CALL - SET START OF TABLE AND GENERATE DEFAULT ENTRIES. * *NAME INDEX MACRO,LENGTH,ADDRESS * ENTRY *NAME* = NAME OF TABLE. * *LENGTH* = TABLE LENGTH. * * *MACRO* = NAME OF MACRO WHICH GENERATES TABLE ENTRY. * CON ADDRESS * * *ADDRESS* = ADDRESS FIELD OF ENTRY GENERATION * INSTRUCTION. ADDRESS MUST BE EXPRESSED * AS A DELIMITED CHARACTER STRING. THIS * TO ALLOW ALMOST ANYTHING IN AN ADDRESS * FIELD. * * EXIT *.1* = MICRO OF *MACRO* * *NAME* = *.1* = BASE ADDRESS OF TABLE. * *NAMEL* = LENGTH OF TABLE. * *TBLLGH* = LENGTH OF TABLE FOR LOCAL USE. * * USES MICRO *.2*. * * * TABLE ENTRY GENERATION - * *NAME INDEX ,IND,ADDRESS * ENTRY *NAME* = NAME OF TABLE ENTRY. * *IND* = INDEX AT WHICH ENTRY IS TO BE PLACED. * *ADDRESS* = ADDRESS FIELD OF ENTRY GENERATION * INSTRUCTION. * * EXIT *NAME* = ADDRESS OF ENTRY. * * USES MICRO *.2*. MACRO INDEX,NAME,MAC,IND,ADD IFC NE,*MAC** .1 MICRO 1,, MAC .2 MICRO 1,,ADD NAME ".1" ".2" .1 SET NAME TBLLGH SET IND NAME_L EQU IND DUP IND-1,1 ".1" ".2" ORG .1+TBLLGH ELSE .2 MICRO 1,,ADD ORG .1+IND LOC IND ".1" ".2" ORG .1+IND NAME BSS 0 ORG .1+TBLLGH ENDIF ENDM INMOD SPACE 4 ** INMOD - THIS MACRO IN CONJUNCTION WITH THE FOLLOWING OPDEF,S * MAKES IT POSSIBLE TO SPECIFY A MODIFIER ON ALL 30 BIT * INCREMENT INSTRUCTIONS. THIS MODIFER MUST BE IN THE FORM * OF A POINTER TO ONE OF THE TABLE POINTERS THAT IS SET * DYNAMICALLY AT INITILIZATION TIME. THE INSTRUCTION WILL * BE MODIFIED DURING INITILIZATION. * THIS IS USEFUL FOR ACCESSING THE POINTERS THAT ARE * DYNAMICALLY SET AT INITILIZATION TIME SUCH AS THE FIRST * WORD ADDRESS OF THE TERMINAL TABLE. * * DEFINITIONS. * * PTRA = POINTER DESIRED. * LWAF = IF DEFINED TAKE LWA INSTEAD OF FWA. * * EXAMPLE- * TA1 B5,VTTP * THIS WILL GENERATE A 30 BIT INSTRUCTION OF THE FOLLOWING FORM * SA1 B5+K * WHERE K = THE FIRST WORD ADDRESS OF THE TERMINAL TABLE. INMOD MACRO PTRA,LWAF LOCAL INM1,INM2 QUAL * GENERATE REFERENCE TO SYMBOL. INM1 SET PTRA * GENERATE TABLE ENTRY. INM1 SET *P INM2 SET * IFEQ INM1,60,2 INM1 SET 0 INM2 SET *-1 TINST RMT VFD 12/2000B+INM1 IFC EQ,*LWAF** VFD 12/0 ELSE 1 VFD 12/4000B VFD 18/PTRA VFD 18/INM2 TINST RMT QUAL * ENDM OPDEFS SPACE 4 ** OPDEF,S USED WITH INMOD. TAAQ,Q OPDEF P1,P2,P3,P4 SA.P1 A.P2+P3 INMOD P4 ENDM TAA,Q OPDEF P1,P2,P4 SA.P1 A.P2+0 INMOD P4 ENDM TAAQ,Q,Q OPDEF P1,P2,P3,P4,P5 SA.P1 A.P2+P3 INMOD P4,P5 ENDM TAA,Q,Q OPDEF P1,P2,P4,P5 SA.P1 A.P2+0 INMOD P4,P5 ENDM TABQ,Q OPDEF P1,P2,P3,P4 SA.P1 B.P2+P3 INMOD P4 ENDM TAB,Q OPDEF P1,P2,P4 SA.P1 B.P2+0 INMOD P4 ENDM TABQ,Q,Q OPDEF P1,P2,P3,P4,P5 SA.P1 B.P2+P3 INMOD P4,P5 ENDM TAB,Q,Q OPDEF P1,P2,P4,P5 SA.P1 B.P2+0 INMOD P4,P5 ENDM TAXQ,Q OPDEF P1,P2,P3,P4 SA.P1 X.P2+P3 INMOD P4 ENDM TAX,Q OPDEF P1,P2,P4 SA.P1 X.P2+0 INMOD P4 ENDM TAXQ,Q,Q OPDEF P1,P2,P3,P4,P5 SA.P1 X.P2+P3 INMOD P4,P5 ENDM TAX,Q,Q OPDEF P1,P2,P4,P5 SA.P1 X.P2+0 INMOD P4,P5 ENDM TAQ,Q OPDEF P1,P3,P4 SA.P1 B0+P3 INMOD P4 ENDM TAQ,Q,Q OPDEF P1,P3,P4,P5 SA.P1 B0+P3 INMOD P4,P5 ENDM TBAQ,Q OPDEF P1,P2,P3,P4 SB.P1 A.P2+P3 INMOD P4 ENDM TBA,Q OPDEF P1,P2,P4 SB.P1 A.P2+0 INMOD P4 ENDM TBAQ,Q,Q OPDEF P1,P2,P3,P4,P5 SB.P1 A.P2+P3 INMOD P4,P5 ENDM TBA,Q,Q OPDEF P1,P2,P4,P5 SB.P1 A.P2+0 INMOD P4,P5 ENDM TBBQ,Q OPDEF P1,P2,P3,P4 SB.P1 B.P2+P3 INMOD P4 ENDM TBB,Q OPDEF P1,P2,P4 SB.P1 B.P2+0 INMOD P4 ENDM TBBQ,Q,Q OPDEF P1,P2,P3,P4,P5 SB.P1 B.P2+P3 INMOD P4,P5 ENDM TBB,Q,Q OPDEF P1,P2,P4,P5 SB.P1 B.P2+0 INMOD P4,P5 ENDM TBXQ,Q OPDEF P1,P2,P3,P4 SB.P1 X.P2+P3 INMOD P4 ENDM TBX,Q OPDEF P1,P2,P4 SB.P1 X.P2+0 INMOD P4 ENDM TBXQ,Q,Q OPDEF P1,P2,P3,P4,P5 SB.P1 X.P2+P3 INMOD P4,P5 ENDM TBX,Q,Q OPDEF P1,P2,P4,P5 SB.P1 X.P2+0 INMOD P4,P5 ENDM TBQ,Q OPDEF P1,P3,P4 SB.P1 B0+P3 INMOD P4 ENDM TBQ,Q,Q OPDEF P1,P3,P4,P5 SB.P1 B0+P3 INMOD P4,P5 ENDM TXAQ,Q OPDEF P1,P2,P3,P4 SX.P1 A.P2+P3 INMOD P4 ENDM TXA,Q OPDEF P1,P2,P4 SX.P1 A.P2+0 INMOD P4 ENDM TXAQ,Q,Q OPDEF P1,P2,P3,P4,P5 SX.P1 A.P2+P3 INMOD P4,P5 ENDM TXA,Q,Q OPDEF P1,P2,P4,P5 SX.P1 A.P2+0 INMOD P4,P5 ENDM TXBQ,Q OPDEF P1,P2,P3,P4 SX.P1 B.P2+P3 INMOD P4 ENDM TXB,Q OPDEF P1,P2,P4 SX.P1 B.P2+0 INMOD P4 ENDM TXBQ,Q,Q OPDEF P1,P2,P3,P4,P5 SX.P1 B.P2+P3 INMOD P4,P5 ENDM TXB,Q,Q OPDEF P1,P2,P4,P5 SX.P1 B.P2+0 INMOD P4,P5 ENDM TXXQ,Q OPDEF P1,P2,P3,P4 SX.P1 X.P2+P3 INMOD P4 ENDM TXX,Q OPDEF P1,P2,P4 SX.P1 X.P2+0 INMOD P4 ENDM TXXQ,Q,Q OPDEF P1,P2,P3,P4,P5 SX.P1 X.P2+P3 INMOD P4,P5 ENDM TXX,Q,Q OPDEF P1,P2,P4,P5 SX.P1 X.P2+0 INMOD P4,P5 ENDM TXQ,Q OPDEF P1,P3,P4 SX.P1 B0+P3 INMOD P4 ENDM TXQ,Q,Q OPDEF P1,P3,P4,P5 SX.P1 B0+P3 INMOD P4,P5 ENDM USECMN SPACE 4 ** USECMN - THIS MACRO GENERATES THE TABLE ENTRIES AND THE * INDEX WORDS FOR PROCESSING USER COMMANDS. * * EACH CALL GENERATES A WORD WHICH CONTAINS THE NAME * OF THE COMMAND LEFT JUSTIFIED IN DISPLAY CODE AND * THE ADDRESS OF THE COMMAND PROCESSOR. A SECOND WORD * IS ALSO GENERATED WHICH INDICATES WHETHER THE COMMAND IS A * VALID SECONDARY COMMAND, THE NUMBER OF LEGAL PARAMETERS, * AND THE NUMBER OF TIMES THE COMMAND HAS BEEN PROCESSED. * EACH CALL FOR A COMMAND STARTING WITH A DIFFERENT CHARACTER * THAN THE PREVIOUS CALL SETS A VALUE WHICH IS USED * TO BUILD INDEX WORDS TO THE COMMAND TABLE TO REDUCE * SEARCH TIME. (SEE TCOM TABLE) * * * TCOM TABLE FORMAT. * * WORD - 1. * VFD 42/0LCOMMAND,18/PROCESSOR ADDRESS. * WORD - 2. * VFD 6/BITS USED FOR COMMAND FLAGS * VFD 6/NUMBER OF PARAMETERS * VFD 12/ FIELD LENGTH * VFD 18/SUB-SYSTEMS VALID * VFD 18/OCCURENCE COUNT * USECMN NAME,ROUT,COUN,BITS,,P * * DEFINITIONS. * * NAME = NAME OF COMMAND. * ROUT = ENTRY ADDRESS OF PROCESSING ROUTINE. * COUN = MAXIMUM NUMBER OF PARAMETERS LEGAL IN A COMMAND. * IF IT IS NOT DEFINED, ONE IS ASSUMED. IF IT IS DEFINED AS * ZERO, IT WILL BE ASSUMED ANY NUMBER ARE LEGAL. * BITS = NON NULL HAVE FOLLOWING BIT MEANINGS * BIT MEANING * 59 SECONDARY COMMAND. * 58 LEGAL COMMAND WHEN CHARGE NUMBER REQUIRED. * 57 INCORRECT FOR NETWORK TERMINAL. * P1, P2, ETC. = SUB-SYSTEMS COMMAND IS VALID IN. IF THESE * ARE NEGATIVE THEN THEY ARE THE SUBSYSTEMS * NOT VALID IN. ALL ENTRIES IN P FIELDS MUST * BE POSITIVE OR ALL NEGATIVE. IF THE P FIELD IS * NULL, THEN THE DEFAULT IS TAKEN WHICH IS ALL SYSTEMS * EXCEPT ACCESS. SCOM EQU 40B CHGR EQU 20B INVN EQU 10B INCORRECT FOR NETWORK TERMINALS USECMN MACRO NAME,ROUT,COUN,BITS,FL,P U1 MICRO 1,7,*NAME* TRUNCATE NAME TO SEVEN CHARACTERS U2 MICRO 1,1,*NAME* GET FIRST CHARACTER OF NAME IFC NE,*"U2"*"U3"*,2 IF NEW BEGINNING CHARACTER US"U2" SET * U3 MICRO 1,1,*"U2"* VFD 42/0L"U1",18/ROUT IFC EQ,*BITS** VFD 6/0 ELSE 1 VFD 6/BITS IFC EQ,*COUN**,1 VFD 6/1 IFC EQ,*COUN*0* VFD 6/77B ELSE 2 IFC NE,*COUN**,1 VFD 6/_COUN IFC EQ,*FL** VFD 12/0 ELSE 1 ERR FL OPTION NO LONGER AVAIALABLE U4 DECMIC ACCS U5 SET 0 UA IFC EQ,*P*ALL* U5 SET 777777B UA ELSE UB IFC EQ,*P** IF NULL ALL SYSTEMS VALID EXCEPT ACCESS U5 SET 777777B-1S"U4" UB ELSE U7 MICRO 1,1,*P* UC IFC EQ,*"U7"*-* U5 SET 777777B IRP P IFC NE,*P**,5 U7 SET P U7 SET -U7 ERRMI U7 U4 DECMIC _U7 U5 SET U5-1S"U4" IRP UC ELSE U5 SET 0 IRP P IFC NE,*P**,3 ERRMI P U4 DECMIC _P U5 SET U5+1S"U4" IRP UC ENDIF UB ENDIF UA ENDIF VFD 18/U5 VFD 18/0 OCCURENCE COUNT ENDM NOREF U1,U2,U3,U4,U5,U6,U7 GTM SPACE 4,15 ** GTM - GENERATE IAFEX MESSAGE. * * GENERATES MESSAGE IN IAFEX FORMAT. AN *EM* (EXTENDED * MODE) CONTROL BYTE IS INSERTED AT THE BEGINNING OF * THE MESSAGE. * THIS MACRO IS USED BY OTHER IAFEX MACROS TO DEFINE * TERMINAL MESSAGES. * * LOC GTM STR,TB * * DEFINITIONS. * * LOC = LOCATION SYMBOL. IF NOT PRESENT, A LITERAL * IS GENERATED. THE ADDRESS OF THE LITERAL * MAY THEN BE REFERENCED BY THE SYMBOL *.2*. * * STR = CHARACTER STRING. MAY CONTAIN CARRIAGE CONTROL * MICROS AND MAY NOT CONTAIN THE CHARACTER *+* * (*PLUS* SIGN). * * TB = TERMINATOR BYTE MICRO. IF OMITTED, *CEB* * (0002) IS ASSUMED. PURGMAC GTM MACRO GTM,N,STR,TB NOREF .1,.2,.L * DEFINE STRING MICRO. .1 MICRO 1,,+STR+ * SET STRING LENGTH TO MULTIPLE OF TWO CHARACTERS. .1 MICRO 1,,+"EM"".1"+ .L MICCNT .1 IFNE .L,.L/2*2,1 .1 MICRO 1,,+".1"_'+ * SET TERMINATOR. IFC EQ,$TB$$ .2 MICRO 1,, "CB" ELSE .2 MICRO 1,, "TB" ENDIF * GENERATE STRING OR LITERAL AND SET LENGTH OF MESSAGE. .2 MICRO 1,,+".1"".2"+ IFC NE,$N$$ N DATA C+".2"+ ELSE .2 SET =C+".2"+ ENDIF .L MICCNT .2 .L SET .L/10+1 ENDM IFMUX SPACE 4,10 ** IFMUX - MULTIPLEXER TERMINAL CONDITIONAL JUMP. * * IFMUX ADR * * ENTRY (B2) = TERMINAL NUMBER. * ADR = ADDRESS. * * EXIT TO ADR IF MULTIPLEXER TERMINAL. * * USES B - 6. PURGMAC IFMUX IFMUX MACRO ADR TB6 B0,/IAFINI/VHMP LE B2,B6,ADR ENDM IFNET SPACE 4,10 ** IFNET - NETWORK TERMINAL CONDITIONAL JUMP. * * IFNET ADR * * ENTRY (B2) = TERMINAL NUMBER. * ADR = ADDRESS. * * EXIT TO ADR IF NETWORK TERMINAL. * * USES B - 6. PURGMAC IFNET IFNET MACRO ADR TB6 B0,/IAFINI/VHMP GT B2,B6,ADR ENDM MSG SPACE 4,10 ** MSG - GENERATE IAFEX MESSAGE. * * MSG (STR),TB * * STR = MESSAGE STRING. * TB = TERMINATOR BYTE. *0002* ASSUMED. PURGMAC MSG MACRO MSG,L,STR,TB LOCAL A IFC NE,*L** L GTM (STR),TB ELSE A GTM (STR),TB ENDIF ENDM SMA SPACE 4,10 ** SMA - SET IAFEX MESSAGE ADDRESS. * * SMA R,(STR),TB * * R = REGISTER TO BE SET WITH ADDRESS OF * GENERATED MESSAGE LITERAL. * STR = MESSAGE STRING. * TB = TERMINATOR BYTE. *0002* ASSUMED. SMA MACRO R,STR,TB GTM (STR),TB S_R .2 ENDM TTADD SPACE 4 ** TTADD - THIS MACRO IS USER FOR GENERATING TERMINAL * TABLE ADDRESSES. * * DEFINITIONS. * * RTN = REGISTER CONTAINING TERMINAL NUMBER * RER = RESULT REGISTER WHICH WILL BE SET TO TERMINAL TABLE * ADDRESS. * XA, XB = TWO X REGISTERS TO BE USED IN CALCULATION. * TTW = TERMINAL TABLE WORD. TTADD MACRO RTN,RER,XA,XB,TTW R= XA,RTN IFEQ VTTL,8,2 L_XA 3 TTA SKIP IFEQ VTTL,16,2 L_XA 4 TTA SKIP R= XB,VTTL I_XA XA*XB TTA ENDIF T_RER XA+TTW,VTTP ENDM PARAM SPACE 4,55 ** PARAM - CONSTRUCT PARAMETER BLOCK FOR EJT SYSTEM REQUEST. * * CALL FORMATS ARE AS FOLLOWS. * * PARAM DTEJ,RC * * DTEJ - DETACH JOB. * RC - REASON CODE. * * PARAM ENEJ,PPI,EPN * * ENEJ - ENABLE JOB. * PPI - PREPROCESSOR INDEX. * EPN - ADDRESS OF ENTRY POINT NAME, * - LEFT JUSTIFIED AND ZERO FILLED. * * PARAM FJEJ * * FJEJ - FREEZE JOB. * * PARAM RCEJ,JSN,MSG * * RCEJ - RECOVER JOB. * JSN - ADDRESS OF JSN TO RECOVER. * MSG - ADDRESS OF BUFFER FOR MSW1. * * PARAM RSEJ * * RSEJ - RESTART JOB. * * PARAM RTEJ,OT,FG * * RTEJ - RESET SYSTEM TIMEOUT ON SUSPENDED JOBS. * OT - ORIGIN TYPE OF JOBS TO RESET. * FG - PRESET FLAGS FIELD. * * PARAM SAEJ,ERF * * SAEJ - SET ABORT FLAG ON JOB. * ERF - ERROR FLAG TO SET. * * PARAM TJEJ * * TJEJ - TERMINATE INTERACTIVE JOB. * * * THE FORMAT OF THE PARAMETER BLOCK IS AS FOLLOWS (NOTE THAT * ANY CHANGE SHOULD ALSO BE DOCUMENTED IN *CPUMTR* AND *1MA*). * *(B4) 24/ JSN,12/ FLAGS,6/ PPI,8/ ERR,9/ FCN,1/C * 42/ NAME,6/ ERF,12/ EJTO * 3/RES,3/JAL,6/ OT,6/ RC,18/ MSG BUF,24/RES * 60/ REC WD 1 * 60/ REC WD 2 * 12/ INST,12/ TN,36/ CDC RES * 42/ TNAME, 18/ RESERVED * * JSN = JOB SEQUENCE NUMBER. * FLAGS = RTEJ - BIT 0 = SELECT EJT ENTRIES BY ORIGIN TYPE. * BIT 1 = DEFAULT TIMEOUT (CLEAR = 0 TIMEOUT). * PPI = PREPROCESSOR INDEX. * ERR = ERROR RETURN (0 ON CALL). * FCN = FUNCTION CODE. * C = COMPLETE BIT (0 ON CALL). * NAME = ENEJ - ENTRY POINT NAME. * DTEJ, RCEJ, RSEJ - USER NAME. * ERF = ERROR FLAG TO SET. * EJTO = EXECUTING JOB TABLE ORDINAL. * RES = RESERVED FOR CDC. * JAL = JOB ACCESS LEVEL LIMIT (RETURNED ON *DTEJ*; 0 ON CALL). * OT = ORIGIN TYPE. * RC = REASON CODE. * MSG BUF = RELATIVE ADDRESS OF BUFFER TO RETURN *MS1W*. * REC WD 1 = RECOVERY WORD 1 (NFL WORD RC1N - SEE *PPCOM*). * REC WD 2 = RECOVERY WORD 2 (NFL WORD RC2W - SEE *PPCOM*). * INST = RESERVED FOR INSTALLATIONS. * TN = TERMINAL NUMBER. * CDC RES = RESERVED FOR CDC. * TNAME = TERMINAL NAME (RETURNED BY *DTEJ* AND *TJEJ*; * SPECIFIED ON CALL FOR *RCEJ*). * * * ENTRY (B4) = ADDRESS OF PARAMETER BLOCK AREA. * (A0) = TERMINAL TABLE ADDRESS. * * USES X - 0, 1, 2, 3, 6, 7. * A - 1, 3, 6, 7. * * CALLS GRI, PPB. PARAM MACRO TYPE,P1,P2,P3 LOCAL PARAM1,PARAM2 MACREF PARAM LIST M SX7 TYPE RJ PPB PRESET PARAMETER BLOCK LIST * TYPE1 IFC EQ,$TYPE$DTEJ$ LIST M SA1 A0+VUIT GET USERNAME MX6 42 BX6 X6*X1 BX6 X2+X6 SA6 A7+B1 SET WORD ONE - USERNAME AND EJT ORDINAL R= X7,P1 SET REASON CODE LX7 42 SA7 A6+B1 RJ GRI GATHER RECOVERY INFORMATION SX6 B2 SET TERMINAL NUMBER IN WORD 5 LX6 36 SA6 B4+5 LIST * TYPE1 ENDIF TYPE2 IFC EQ,$TYPE$ENEJ$ LIST M BX6 X2 IFC NE,$P2$$,2 SA1 P2 GET ENTRY POINT NAME MX2 42 BX1 X2*X1 BX6 X6+X1 MERGE EJT ORDINAL SA6 A7+B1 SET WORD 1 IFC NE,$P1$$,3 R= X3,P1 LX3 18 BX7 X3+X7 MERGE PPI SA1 A0+VSTT COPY DISABLED TERMINAL FLAG INTO REQUEST MX6 1 BX1 X1*X6 LX1 24-59 BX7 X1+X7 SA7 A7 SET WORD ZERO LIST * TYPE2 ENDIF TYPE3 IFC EQ,$TYPE$FJEJ$ LIST M SX6 B2 SUPPLY TERMINAL NUMBER FOR *TSEM* LX6 36 SA6 A7+5 BX6 X2 SA6 A7+B1 LIST * TYPE3 ENDIF TYPE4 IFC EQ,$TYPE$RCEJ$ LIST M R= A3,P1 BX7 X3+X7 SA1 A0+VUIT SET USERNAME MX6 42 BX6 X1*X6 SA6 A7+B1 SET WORD ONE - USERNAME AND EJT ORDINAL R= X0,P2 LX0 24 SA7 A7 BX6 X0 SA6 A6+B1 WORD TWO - BUFFER ADDRESS SX6 B2 LX6 36 SA6 A6+3 LIST * TYPE4 ENDIF TYPE5 IFC EQ,$TYPE$RSEJ$ LIST M SA1 A0+VUIT GET USER NAME MX6 42 BX6 X6*X1 BX6 X2+X6 SA6 A7+B1 SET WORD ONE - USER NAME AND EJT ORDINAL LIST * TYPE5 ENDIF TYPE6 IFC EQ,$TYPE$RTEJ$ LIST M BX6 X2 SA6 A7+B1 SET WORD ONE - EJT ORDINAL IFC NE,$P1$$,4 R= X3,P1 LX3 48 BX6 X3 SA6 A6+B1 SET WORD TWO - ORGIN TYPE IFC NE,$P2$$,4 R= X0,P2 LX0 24 BX7 X0+X7 SA7 A7 SET FLAGS LIST * TYPE6 ENDIF TYPE7 IFC EQ,$TYPE$SAEJ$ LIST M R= X3,P1 LX3 12-0 BX6 X2+X3 SA6 A7+B1 SET WORD ONE - ERROR FLAG LIST * TYPE7 ENDIF TYPE8 IFC EQ,$TYPE$TJEJ$ LIST M BX7 X2 SA7 A7+B1 SET WORD ONE - EJT ORDINAL RJ GRI GATHER RECOVERY INFORMATION SX6 B2 SET TERMINAL NUMBER IN WORD 5 LX6 36 SA6 B4+5 LIST * TYPE8 ENDIF ENDM TQST TITLE TABLE OF QUEUES. ** TQST - TABLE OF QUEUES. * THIS TABLE CONSISTS OF ALL THE QUEUES THAT MAY HAVE * REQUESTS IN THE REENTRY TABLE. * * THE FORMAT OF THIS TABLE IS AS FOLLOWS * * CCCC NNNN 00NN NN00 YYYY * 0000 0000 TTTT TTTT TTTT * WHERE- * CCCC = NUMBER OF ENTRIES (PACKED FORMAT). * NNNN = FIRST TERMINAL ENTRY. * YYYY = LAST TERMINAL ENTRY. * TTTT TTTT TTTT = RESOURCE CONTROL COUNT (RESOURCE CONROL * QUEUE). * QUEUE TABLE. ORG TXORG TRQT BSS 0 SSPA CON 0 CURRENT ENTRY WCMQ VFD 12/2000B,48/0 WAIT COMPLETION QUEUE CON 0 TIMQ VFD 12/2000B,48/0 TIME DELAY QUEUE CON 0 MNWQ VFD 12/2000B,48/0 MONITOR WAIT QUEUE CON 0 * PPU REQUEST QUEUES. ITAQ VFD 12/2000B,48/0 ITOQ VFD 12/2000B,48/0 * PPU REQUEST WORDS. PPUR BSS 0 PPU REQUEST QUEUE PMSG CON 0 *MSG* AND FL CHANGE REQUEST CON 0 CON 0 PITA CON 1 *1TA* REQUEST PITO CON 1 *1TO* REQUEST CON -0 * INTERESTING STATISTICS. CPBM CON 0 NUMBER OF TIMES BELOW MINIMUM POT SUPPLY * CLOCKS. RTIM CON 0 36 BIT MILLI SECOND CLOCK STIM CON 0 24 BIT SECOND CLOCK CPTIME CON 0 CPU TIME AT PROGRAM START START CON 0 REAL TIME AT START UP * HEADER MESSAGE AND DATE AND TIME. HEDR CON 0 DATE CON 0 TIME CON 0 BSSZ 8 SYSTEM TITLE AND VERSION HEDRL EQU *-HEDR TITLE SUB-SYSTEM CONTROL TABLES. JCTT SPACE 4 ** JCCT - JOB COMPLETION MESSAGES AND INPUT DELAY TABLE. GTM ("NL"RUN COMPLETE. "NL") JCTM EQU .2 SET LITERAL ADDRESS JCCTM MACRO A VFD 42/,18/A ENDM JCTT BSS 0 JCCT INDEX JCCTM,MSYS,( 0 ) INDEX ,BASS,( JCTM ) INDEX ,FORS,( JCTM ) INDEX ,FTNS,( JCTM ) INDEX ,EXES,( JCTM ) INDEX ,BATS,( 0 ) INDEX ,ACCS,( 0 ) PCOM SPACE 4 ** PCOM - TABLE OF MINIMUM MASKS AND ERROR PROCESSORS FOR * EACH SYSTEM. BITS (48 - 59) IN PACKED FORMAT CONTAIN * THE MINIMUM NUMBER OF CHARACTERS TO MASK ON. BITS (0 - 17) * CONTAIN THE ADDRESS OF THE ERROR PROCESSING ROUTINE. PCOMM MACRO A,B VFD 12/2000B+A,30/,18/B ENDM PCOM INDEX PCOMM,MSYS,( 3,PCM21 ) INDEX ,BATS,( 7,BAT2 ) RDYA SPACE 4 ** RDYA - TABLE OF READY MESSAGES. RDYAM MACRO A VFD A ENDM RDYA INDEX RDYAM,MSYS,( 60/8LREADY. ) INDEX ,BATS,( 60/4L/''B ) STAA SPACE 4 ** STAA - TABLE OF SUB-SYSTEM NAMES. STAAM MACRO A CON 0L;A ENDM STAA INDEX STAAM,MSYS,( ) INDEX ,NULS,( "NULS" ) INDEX ,BASS,( "BASS" ) INDEX ,FORS,( "FORS" ) INDEX ,FTNS,( "FTNS" ) INDEX ,EXES,( "EXES" ) INDEX ,BATS,( "BATS" ) INDEX ,ACCS,( "ACCS" ) TTTT SPACE 4 ** TTTT - TABLE OF TERMINAL TYPES FROM MODVAL. TTTT INDEX CON,ATTMX+1,( -* ) INDEX ,ATTY+1,( 0LTTY ) INDEX ,ATT7+1,( 0L713 ) INDEX ,ATTCO+1,( 0LCOR ) INDEX ,ATTCA+1,( 0LCORAPL ) INDEX ,ATTMA+1,( 0LMEMAPL ) INDEX ,ATTE+1,( 0LBLKEDT ) TTIS SPACE 4 ** TTIS - TABLE OF INITIAL SUBSYSTEMS TTIS INDEX CON,MSYS,( NULS ) INDEX ,AISNUL,( NULS ) INDEX ,AISBAS,( BASS ) INDEX ,AISFOR,( FORS ) INDEX ,AISFTN,( FTNS ) INDEX ,AISEXE,( EXES ) INDEX ,AISBAT,( BATS ) INDEX ,AISACC,( ACCS ) IAF TITLE CONTROL LOOP. ** IAFEX - MAIN CONTROL LOOP. IAF RJ DRI PROCESS DRIVER QUEUE RJ URT UPDATE RUNNING TIME RJ STR PROCESS SYSTEM IAFEX REQUESTS RJ RPC REFILL POT CHAIN QUEUE RJ TDQ PROCESS TIME DELAY QUEUE RJ PMQ PROCESS MONITOR WAIT QUEUE RJ TSR CHECK FOR REQUEST COMPLETIONS RJ PPU PROCESS PPU REQUESTS RJ CSS CHECK SCP STATUS IAFA RJ /IAFEX4/NDR EXECUTE NETWORK DRIVER * SB0 0 (IF NETWORK DRIVER NOT LOADED) RJ SPR CHECK FOR FIELD LENGTH CHANGE NEEDED RJ EPP ENTER PP REQUESTS RJ DRI PROCESS DRIVER QUEUE RJ STR PROCESS SYSTEM IAFEX REQUESTS RJ RPC REFILL POT POT CHAIN QUEUE SA1 VANL NZ X1,IAF1 IF AT LEAST ONE ACTIVE USER WAIT 100 IAF1 RECALL EQ IAF RE-ENTER MAIN LOOP RPV SPACE 4,10 ** RPV - REPRIEVE PROCESSING. RPV BSS 0 ENTRY MESSAGE RPVA,0,R RJ /SMFIF/ISM IDLE SCREEN MANAGMENT FACILITY SA1 VNTP ZR X1,RPV1 IF NO NETWORK TERMINALS DEFINED RJ /IAFEX4/NOF NETOFF RPV1 REPRIEVE RPVB,RESET,0 EQ * WAIT FOR RESET * THE FOLLOWING CODE IS USED BY *IAFEX2* TO PREVENT THE * IDLING OF *IAFEX2* OR *IAFEX3* BEFORE ALL USERS HAVE * BEEN DETACHED AND IAF ACCESSABILITY HAS BEEN CLEARED. RPV2 REPRIEVE RPVB,RESUME,37B EQ * WAIT FOR RESUME OF EXECUTION RPVA DATA C+ IAF REPRIEVED.+ RPVB RPVBLK RPV TITLE CONTROL SUBROUTINES. CSS SPACE 4,10 ** CSS - CHECK SCP STATUS. * * CALLS AUU, CDD, CFL, RMS, SID, SMS. * AFTER RECEIVED MESSAGE PROCESSED. CSS7 RJ /SMFIF/SMS SEND IAF TO SMF MESSAGES CSS SUBR ENTRY/EXIT SA1 SSCR PL X1,CSS7 IF NO MESSAGE RECEIVED * CHECK PARAMETER BLOCK HEADER. SA2 X1 MX6 -6 AX2 18 BX2 -X6*X2 STATUS FROM CPUMTR SX7 X2-4 NG X7,CSS1 IF NORMAL, OR UCP ABORT, END, OVERRIDE NZ X7,CSS5 IF UNKNOWN STATUS * SCP (NAM) ABORT NOTIFICATION. SX6 -B1 INDICATE SCP FAILURE SA6 VSHD EQ CSS6 CLEAR INTERLOCK AND EXIT * UCP MESSAGE PROCESSING. CSS1 SA3 /SMFIF/ASMF CHECK ACTIVE SMF WORD SA4 A2+B1 COMPARE TO SENDER BX6 X3-X4 BX7 X4 NZ X6,CSS3 IF NOT SMF, SMF NOT ACTIVE OR RECONNECT ZR X2,CSS2 IF NORMAL UCP MESSAGE * UCP ABORT, END OR OVERRIDE. RJ /SMFIF/SID DROP THE SMFEX CONNECTION EQ CSSX RETURN * NORMAL UCP MESSAGE. CSS2 RJ CFL CHECK POT SUPPLY NG X2,CSS7 IF POTS LOW DO NOT PROCESS CURRENT MESSAGE RJ /SMFIF/RMS RECEIVE MESSAGE FROM SMF EQ CSS6 COMPLETE PROCESSING * CHECK FOR NEW CONNECTION TO SMF. CSS3 MX6 24 BX6 X4*X6 CALLER-S JSN SA1 CSSC BX6 X6-X1 BX1 X6+X2 ZR X1,CSS4 IF NEW CONNECTION RJ AUU ABORT UNRECOGNIZED OR RECONNECTING UCP EQ CSS6 COMPLETE PROCESSING * SET UP NEW CONNECTION WITH SMF. CSS4 SA7 /SMFIF/ASMF SET ACTIVE SMF WORD SA1 A2+3 GET BUFFER POINTER MX6 -18 AX1 18 BX1 -X6*X1 ISOLATE SMF BUFFER ADDRESS LX1 24 SA2 /SMFIF/SMSA MX3 -18 CLEAR ADDRESS FIELD LX3 24 BX2 X3*X2 BX6 X1+X2 SA6 A2 SA2 /SMFIF/SMSC BX2 X3*X2 CLEAR ADDRESS FIELD BX6 X1+X2 SA6 A2 SA2 /SMFIF/ISMA BX2 X3*X2 CLEAR ADDRESS FIELD SX6 B1 DECREMENT FOR IDLEDOWN ADDRESS LX6 24 IX6 X1-X6 BX6 X6+X2 SA6 A2 EQ CSS2 INITIATE CONNECTION * UNKNOWN STATUS CODE. CSS5 SX1 X2 RJ CDD CHANGE TO DISPLAY CODE SA6 CSSB MESSAGE CSSA,0,R * CLEAR INTERLOCK ON SCP BUFFER. CSS6 SA1 SSCR MX6 -59 BX6 -X6*X1 SA6 A1 EQ CSS7 SEND IAF TO SMF MESSAGES CSSA DATA C+** INCORRECT SSC STATUS RECEIVED+ CSSB CON 0 DATA C+. **+ CSSC VFD 24/4LSMF ,36/0 EPP SPACE 4,10 ** EPP - ENTER PPU REQUESTS. * * ENTERS PPU REQUESTS QUEUED IN PP REQUEST WORDS. * * ENTRY (PPUR) = LIST OF FORMATTED PPU REQUESTS. EPP SUBR ENTRY/EXIT SX7 3RSPC SA2 B1 CHECK RA+1 CLEAR LX7 42 SA1 PPUR-1 * THE FOLLOWING SHOULD ONLY HAPPEN IF A GARBAGE STORE IS MADE * IN *RA+1*. THE MODE ERROR IS COMPATIBLE WITH OTHER * PROCESSORS FOR THIS ERROR, AND IT PRESERVES ALL THE * REGISTERS. NZ X2,*+400000B IF (RA+1) .NE. 0, ABORT EPP1 SA1 A1+B1 CHECK NEXT REQUEST SX6 A1+ AX1 36 NG X1,EPPX IF END OF QUEUE ZR X1,EPP1 IF NO ENTRY BX6 X6+X7 SA6 B1 STORE REQUEST XJ SA1 A1+ ZR X1,EPP1 IF PPU AVAILABLE SA1 VPPL COUNT NO PPU SX6 B1 IX6 X6+X1 SA6 A1 EQ EPPX EXIT URT SPACE 4,10 ** URT - UPDATE RUNNING TIME. * * UPDATE IAFEX RUNNING TIME, TIME OF DAY, AND DATE. * * CALLS SYS=. URT SUBR ENTRY/EXIT SA5 RTIM UPDATE REAL TIME RTIME RTIM SA1 A5 MX6 -36 BX6 -X6*X1 SA6 A1 AX1 36 SET TIME IN SECONDS BX7 X1 SA7 STIM BX5 X5-X6 AX5 12 ZR X5,URTX IF FOUR SECONDS NOT ELAPSED CLOCK TIME UPDATE TIME OF DAY DATE DATE UPDATE DATE EQ URTX EXIT STR SPACE 4,10 ** STR - PROCESS SYSTEM IAFEX REQUESTS. * * PROCESS SYSTEM REQUESTS MADE TO IAFEX VIA MONITOR * *TSEM* REQUESTS. * * CALLS REQUEST PROCESSOR VIA *PCS*. * ABT IF INCORRECT REQUEST. STR SUBR ENTRY/EXIT * GET ENTRY FROM MONITOR BUFFER. STR1 SA1 STRA CHECK FOR ENTRY SA5 X1 BX6 X6-X6 ZR X5,STRX IF NO ENTRIES TO PROCESS UX2,B7 X5 SX7 X1+B1 UPDATE POINTER SB6 TSTRL SET COMMAND TABLE LIMIT SX2 X7-VTRP-VTRL NZ X2,STR2 IF NOT LIMIT SX7 VTRP * PROCESS ENTRY. STR2 SA7 A1 UPDATE POINTER SA6 A5 CLEAR ENTRY NG B7,STR3 IF INCORRECT REQUEST GE B7,B6,STR3 IF INCORRECT REQUEST SA4 TSTR+B7 SET PROCESSOR ADDRESS SB7 X4+ RJ PCS PROCESS ENTRY EQ STR1 LOOP * PROCESS INCORRECT ENTRY. STR3 BX7 X5 SAVE INCORRECT REQUEST SX6 3RSTR SET ERROR CODE SA7 STRB RJ ABT EQ STRX STRA CON VTRP STRB CON 0 SAVE INCORRECT REQUEST CODE TCCS SPACE 4 ** TSTR - IAFEX *TSEM* SYSTEM COMMAND PROCESSING TABLE. TSTR INDEX CON,VMXR-2000B,( 0 ) INDEX ,VDPO-2000B,( DRT ) INDEX ,VASO-2000B,( ASO ) INDEX ,VMSG-2000B,( DSD ) INDEX ,VSDT-2000B,( SDT ) INDEX ,VCDT-2000B,( CDT ) INDEX ,VSCS-2000B,( SCS ) INDEX ,VPTY-2000B,( PTY ) INDEX ,VSBS-2000B,( SBS ) INDEX ,VSJS-2000B,( SJS ) INDEX ,VTLF-2000B,( FLO ) INDEX ,VREC-2000B,( RDJ ) INDEX ,VITP-2000B,( ITP ) INDEX ,VADI-2000B,( ADI ) INDEX ,VADO-2000B,( ASO1 ) INDEX ,VCSM-2000B,( CSM ) INDEX ,VDTJ-2000B,( DTJ ) ADI SPACE 4,10 ** ADI - ASSIGN DIRECT INPUT. * * GETS INPUT FROM INTERNAL TYPEAHEAD QUEUE FOR DIRECT I/O * REQUEST. * * USES X - 0, 1, 2, 6, 7. * A - 1, 2, 6, 7. * * NOTE THE *DIOF* FLAG MUST BE CLEARED ON EXIT TO AVOID * ANOTHER TERMINAL FROM IMPROPERLY INTERPRETING IT. * * CALLS CFL, DCI, EDR, PIN, UAC, UNQ. ADI BSS 0 ENTRY IFMUX PCSX ADI1 RJ CFL CHECK POT SUPPLY SX6 B1 SET NO POT REJECT BIT LX6 22-0 NG X2,ADI3 IF INSUFFICIENT POTS TA1 B2,VMST CHECK INTERNAL QUEUE MX7 -12 BX7 -X7*X1 SA7 DIOF SET/CLEAR DIRECT I/O FLAG ZR X7,ADI3 IF NO INTERNAL QUEUE LX6 23-22 SET INPUT BUSY RETRY BIT SA2 /IAFEX4/IBSY NZ X2,ADI3 IF NETWORK INPUT BUFFER IN USE RJ /IAFEX4/UNQ UNQUEUE INPUT DATA RJ /IAFEX4/PIN PROCESS INPUT DATA ZR X6,ADI1 IF INSUFFICIENT POTS PL X0,ADI2 IF OVERFLOW DETECTED SA1 /IAFEX4/RCVH BX0 X1 SX7 B1 SET INPUT ACCOUNTING RJ /IAFEX4/UAC UPDATE ACCOUNTING AX0 54 SX6 X0-/IAFEX4/BTMS NZ X6,ADI1 IF NOT MESSAGE BLOCK SA6 DIOF CLEAR DIRECT I/O FLAG SA6 /IAFEX4/RCVH CLEAR HEADER SA6 A6+B1 CLEAR FIRST DATA WORD * SET POT POINTER INTO VROT FOR SYSTEM. SA2 A0+VROT SA1 A0+VDPT MX0 12 BX7 X0*X1 FIRST POT OF LINE LX0 48 BX2 -X0*X2 LX7 48 BX7 X7+X2 INSERT POT POINTER SA7 A2 REWRITE VROT SA6 A1 CLEAR VDPT SA3 A0+VDCT SET INPUT INITIATED MX2 1 LX2 56-59 BX7 X2+X3 SA7 A3 EQ PCSX EXIT * DISCARD INPUT IF OVERFLOW. ADI2 SA1 A0+VDPT SX2 VXLL+3 BX6 X1+X2 SA6 A1 REWRITE VDPT WITH OVERFLOW CHARACTER COUNT SX6 B0 SET ENTRY CONDITION RJ /IAFEX4/DCI DISCARD INPUT BX6 X6-X6 SA6 DIOF SA6 /IAFEX4/RCVH SA6 A6+B1 SX6 B1 SET OVERFLOW REJECT BIT LX6 22-0 * SEND REJECT TO SYSTEM. ADI3 SA1 A0+VROT SET RESPONSE IN VROT BX6 X6+X1 SA6 A1 REWRITE VROT SA1 ADIA INCREMENT REJECT COUNT SX6 X1+B1 SA6 A1 SX6 B0+ CLEAR DIRECT INPUT FALG SA6 DIOF EQ PCSX EXIT ADIA CON 0 *VADI* REJECT/RETRY COUNT DIOF CON 0 DIRECT I/O REQUEST FLAG APS SPACE 4,10 ** APS - APPLICATION SWITCH. * * THIS ROUTINE IS ENTERED FROM ROUTINE *FLO*. * * ENTRY (B3) = POINTER TO POT CONTAINING APPLICATION NAME. * (B4) = ADDRESS OF POT. * (A2) = ADDRESS OF *VDCT*. * (X2) = CONTENTS OF *VDCT* SHIFTED. * * CALLS CJA, DPT, EDR, GOP, PMR, PPB. * * MACROS IFMUX, PARAM. APS BSS 0 ENTRY IFMUX PCSX IF MUX TERMINAL SX3 B1 SET CONNECTION LOANED BIT LX3 47-0 LX2 46-59 BX7 X2+X3 SA7 A2 REWRITE VDCT MX3 -12 SA1 A0+VFST BX1 X1*X3 CLEAR POT POINTER FIELD SX6 B3 SAVE APPLICATION NAME POT POINTER BX6 X6+X1 SA6 A1 REWRITE VFST APS1 SA2 A0+VROT CHECK COMPLETE BIT LX2 59-0 SB3 B0 PL X2,APS2 IF VROT NOT COMPLETE SA1 A0+VSTT WAIT FOR OUTPUT TO COMPLETE MX5 -12 BX3 -X5*X1 ZR X3,APS3 IF NO OUTPUT APS2 SX5 APS1$ EQ PCS1 MAKE QUEUE ENTRY APS3 SX7 APS4 SET REENTRY ADDRESS EQ CJA CLEAR JOB ACTIVITY APS4 SX2 /1TD/HUP RJ EDR ENTER DRIVER REQUEST EQ PCSX EXIT ASO SPACE 4,20 ** ASO - ASSIGN OUTPUT. * * ASSIGNS OUTPUT POT CHAIN TO TERMINAL. UNUSED POTS * AT END OF CHAIN ARE DROPPED. * * ENTRY (B3) = FIRST POT OF OUTPUT. * = ZERO IF NO OUTPUT ASSIGNED. * (X7) = 42/ 0,6/ POT COUNT,12/ LAST POT POINTER. * * CALLS ABT, ASM, GRT, RPL. ASO BSS 0 ENTRY SA1 A0+VROT SET COMPLETE SX2 B1 BX6 X1+X2 LX1 59-0 NG X1,ASO4 IF *VROT* ALREADY COMPLETE SA6 A1 * ENTRY FOR ASSIGNMENT OF OUTPUT FROM DIRECT I/O REQUEST. ASO1 BSS 0 TA4 B2,VRAP CHECK FOR QUEUE ENTRY SA2 A0+VSTT SB5 B2 SET TERMINAL NUMBER FOR *GRT* LX2 59-48 CHECK LOGOUT FLAG NG X2,IGN IF LOGOUT IN PROGRESS ZR X4,ASO2 IF NO QUEUE ENTRY RJ GRT AX4 48 SX3 X4-ETX4$ ZR X3,IGN IF PACK COMPLETE, IGNORE SX3 X4-ITA2$ ZR X3,ASO3 IF LOGIN NOT YET COMPLETE * ENTRY FROM *DSD* TO ASSIGN *DIAL* MESSAGE. ASO2 ZR B3,RES IF NO OUTPUT TO ASSIGN, CONTINUE JOB MX0 -12 BX6 X0*X7 NZ X6,ASO2.1 IF POT COUNT PROVIDED SX6 VLCL*10000B SET TO MAXIMUM ASO2.1 LX6 12 POSITION POT COUNT SX1 B3 LX1 3 TA6 X1,VBMP STORE IN FIRST WORD OF MESSAGE BX7 -X0*X7 SX0 B3 SAVE OUTPUT POT POINTER THROUGH *RPL* SB7 B0+ RJ RPL DROP ANY UNUSED POTS SX7 X0 MX6 1 CHECK USER FORMAT EFFECTOR MODE RJ ASM PROCESS MESSAGE EQ PCSX EXIT ASO3 SX5 ASO2$ WAIT TIME OUT DELAY EQ PCS1 MAKE QUEUE ENTRY * DIAGNOSE INTERLOCK FAILURE OR FAULTY ASSIGNMENT. ASO4 SX6 3RASO SET ERROR CODE RJ ABT EQ PCSX EXIT CDT SPACE 4 ** CDT - CLEAR TERMINAL TABLE BIT. * * ENTRY (B3) = BIT NUMBER. * (X7) = TERMINAL TABLE WORD ORDINAL. * * CALLS SDT. CDT BSS 0 SX3 B0 SB4 X7 SET WORD IN TERMINAL TABLE JP SDT1 CRR SPACE 4,10 ** CRR - CONNECTION REQUEST REPLY * * IF *1TA* HAS BEEN CALLED TO VALIDATE A SECONDARY CONNECTION * REQUEST, THIS ROUTINE WILL ENTER A DRIVER REQUEST TO ACCEPT * OR REJECT THE CONNECTION ACCORDING TO THE RESULTS RETURNED * BY *1TA* PROCESSING. * * USES X - 2 * * CALLS EDR CRR BSS 0 SX2 /1TD/CRR IF ERROR CONDITION DETECTED EQ CRR2 SKIP TO REQUEST ENTRY CRR1 SX2 /1TD/CRR1 IF NO ERROR CONDITION DETECTED CRR2 RJ EDR ENTER DRIVER REQUEST EQ PCSX EXIT CSM SPACE 4,10 ** CSM - CONNECT TO SCREEN MANAGEMENT FACILITY. * * ENTRY (B3) = 0 TO REQUEST CONNECTION. * (B3) = 1 TO CONFIRM DISCONNECTION. * * CALLS /SMFIF/CSM. CSM BSS 0 NZ B3,CSM1 IF DISCONNECTION CONFIRMATION RJ /SMFIF/CSM CONNECT TO SCREEN MANAGER EQ PCSX EXIT CSM1 RJ /SMFIF/DSM DISCONNECT FROM SCREEN MANAGER EQ PCSX EXIT DRT SPACE 4 ** DRT - DROP POTS. * * ENTRY (B3) = FIRST POT OF CHAIN TO BE DROPPED. * (X7) = LAST POT OF CHAIN TO BE DROPPED. DROP * TO END OF CHAIN IF ZERO. * * CALLS DPT. DRT BSS 0 SB4 X7+ RJ DPT DROP POT(S) EQ PCSX EXIT DSD SPACE 4 ** DSD - *DSD* DIAL AND WARN MESSAGES. * * ENTRY (B2) = NONZERO = TERMINAL NUMBER FOR DIAL MESSAGE. * = ZERO = WARNING MESSAGE. * (B3) = MESSAGE POT POINTER. * (X7) = LAST POT POINTER OF MESSAGE. * * CALLS ASO, DPT. DSD SB7 B2-VPST NG B7,DSD1 IF WARNING MESSAGE * PROCESS *DIAL* MESSAGE. SX7 X7+10000B SET DEFAULT POT COUNT SA2 A0+VSTT CHECK LOGOUT FLAG LX2 59-48 SB5 B2 NG X2,DSD0 IF LOGOUT FLAG SET LX2 59-58-59+48 NG X2,DSD0 IF USER BREAK IN PROGRESS SX6 B0 ZERO OUT SECOND WORD OF POT CHAIN HEADER SA1 A0+VDCT CHECK IF USER LOGGED IN LX1 59-57 SA6 B4+B1 NG X1,ASO2 IF USER LOGGED IN DSD0 SB4 B0 RJ DPT DROP POTS EQ PCSX EXIT * PROCESS *WARN* MESSAGE. DSD1 SA1 VWMP PROCESS WARNING MESSAGE MX2 -24 LX1 -24 BX3 -X2*X1 SAVE PREVIOUS CHAIN BX6 X2*X1 SX0 B3 SX7 B0 ZERO OUT SECOND WORD OF POT CHAIN HEADER ZR B3,DSD2 IF NO MESSAGE SA7 B4+B1 SX7 B1 SET POT COUNT FOR MESSAGE LX7 24 SA7 B4 SX4 B4 BX6 X6+X4 DSD2 LX6 24 SA6 A1 ZR X3,DSD3 IF NO PREVIOUS CHAIN TX3 X3,-VBMP AX3 3 SB4 B0 DROP POTS SB3 X3 RJ DPT DSD3 ZR X0,PCSX IF CLEAR OF PREVIOUS WARNING MESSAGE SX5 B1 CLEAR ALL MESSAGE ISSUED FLAGS LX5 50 TB3 VSTT+VPST*VTTL,VTTP SET FWA OF TERMINAL TABLE TB4 VSTT,VTTP,LWA SET LWA+1 OF TERMINAL TABLE DSD4 SA1 B3 CLEAR MESSAGE ISSUED FLAG BX6 -X5*X1 SA6 A1+ SB3 B3+VTTL LT B3,B4,DSD4 IF STILL MORE TERMINALS EQ PCSX EXIT ITP SPACE 4,30 ** ITP - INITIATE TWO PORT MUX DRIVER. * * *ITP* CALLS THE *1TM* DRIVER ONLY IF PRIOR DRIVER SHUTDOWN * IS COMPLETE. IF IT IS NOT COMPLETE, A FLAG IS SET IN *VDRL* * TO INDICATE TO *DSH* THAT *1TM* CANNOT BE CALLED UNTIL * DRIVER SHUTDOWN IS COMPLETE. IF THE *1TM* DRIVER IS ALREADY * RUNNING, NOTHING IS DONE. * * ENTRY (VITM) = *1TM* DRIVER REQUEST WORD. * = 18/DN, 24/0, 18/VA. * DN = *1TM* DRIVER NAME. * VA = *1TM* *VDRL* ADDRESS. * (VDRL) = 9/0,1/F1,1/F2,1/F3,24/SA,12/TC,12/FT. * F1 = CALL *1TM* DRIVER FLAG. * F2 = DRIVER SHUTDOWN COMPLETE FLAG. * F3 = INITIATE DRIVER SHUTDOWN FLAG. * SA = CIRCULAR DRIVER STACK ADDRESS. * TC = TERMINAL COUNT. * FT = FIRST TERMINAL. * * EXIT EITHER *1TM* IS CALLED IF PREVIOUS DRIVER SHUTDOWN IS * COMPLETE, OR F1 IN *VDRL* IS SET TO FLAG *DRI* TO CALL * *1TM* ONCE DRIVER SHUTDOWN HAS COMPLETED. * * USES A - 1, 2, 6. * X - 1, 2, 3, 4, 6. * * CALLS CTM. ITP BSS 0 ENTRY SA2 VITM GET *1TM* *VDRL* ADDRESS SA1 X2 GET *VDRL* ENTRY MX4 12 BX3 X4*X1 MASK TERMINATION BITS ZR X3,PCSX IF *1TM* ALREADY RUNNING SX4 B1 LX4 49 BX3 X4*X1 NZ X3,ITP1 IF PREVIOUS DRIVER SHUTDOWN COMPLETE LX4 1 BX6 X4+X1 SET CALL *1TM* DRIVER FLAG. SA6 X2+ REWRITE *VDRL* WORD EQ PCSX EXIT ITP1 RJ CTM CALL *1TM* DRIVER EQ PCSX EXIT PTY SPACE 4,10 ** PTY - SET TERMINAL PARITY. * * ENTRY (B3) = 0 = SET EVEN PARITY. * = 1 = SET ODD PARITY. * * CALLS DCR, RDC, RES, SEP, SOP. PTY SB7 B3+ SAVE REQUEST CODE SB3 /1TD/SOP EQ B7,B1,PTY1 IF *ODD* SB3 /1TD/SEP EQ B7,B0,PTY1 IF *EVEN* EQ PCSX EXIT - INCORRECT REQUEST PTY1 RJ RDC WAIT VDCT CLEAR SX2 B3 SET REQUEST CODE SB3 B0 CLEAR (B3) SX7 RES SET RESTART ADDRESS EQ DCR ENTER DRIVER REQUEST RDJ SPACE 4,10 ** RDJ - RECOVER DETACHED JOB. * * ENTRY (X7) = JSN OF JOB TO RECOVER, RIGHT JUSTIFIED. * * EXIT JOB RECOVERED AND CURRENT JOB TERMINATED, * OR ERROR MESSAGE SENT AND CURRENT JOB CONTINUED. * * CALLS DCR, DPT, FMF, FSM, GOP, GPL, INO, MVA, PMR, PPB, * RCM, RDC, REP, RES, RPT, SSP, TXT, UEC, ZTB. RDJ BSS 0 ENTRY SA1 A0+VSTT SX2 401B LX2 48 BX2 X1*X2 NZ X2,PCSX IF DETACH OR LOGOUT IN PROGRESS SX2 B1 SET DETACH IN PROGRESS LX2 56-0 BX6 X1+X2 SA6 A1 LX7 36 SAVE JSN FOR RECOVERY SA7 RDJA SX5 B0 GET PARAMETER POTS SB5 B1+B1 PX5 X5,B5 RJ RPT SA1 RDJA SAVE JSN IN PARAMETER POT SB3 X7+ SET POT POINTER LX7 3 SET POT ADDRESS TB4 X7,VBMP BX6 X1 SA6 B4+EJPB ERRPL EJPB-VCPC PARAMETERS OVERFLOW POT SX5 RDJ1$ WAIT FOR JOB TO RETURN EQ PCS1 MAKE QUEUE ENTRY RDJ1 RJ GPL GET POT LINK SX0 B4+ SET MESSAGE ADDRESS RJ SSP RESTORE PARAMETERS SA3 B4+EJPB SET RECOVERY JSN PARAM RCEJ,A3,X0 RJ PMR PROCESS MONITOR REQUST NZ X2,REP IF ERROR RETURNED SX7 B3 SAVE POT POINTER TO BEGINNING OF CHAIN MX2 48 SA1 A0+VFST BX1 X1*X2 BX7 X7+X1 SA7 A1 SB3 B0 GET TERMINATION PARAMETER POT RJ GOP PARAM TJEJ TERMINATE CURRENT JOB RJ PMR PROCESS MONITOR REQUEST ZR X2,RDJ1.1 IF NO ERROR ON TERMINATION RJ UEC PROCESS TERMINATION ERROR RDJ1.1 SA1 B4+6 SAVE TERMINAL NAME OF TERMINATED JOB MX6 42 BX6 X6*X1 SA6 RDJE SB4 B0+ DROP PARAMETER POT RJ DPT SA1 A0+VFST GET RECOVERY POT POINTER MX2 -12 BX3 -X2*X1 GET POT POINTER BX6 X2*X1 SA6 A1 SB3 X3 LX3 3 TB4 X3,VBMP SA2 RECS COUNT RECOVERY SX7 B1 IX6 X2+X7 SA6 A2 * RECONSTRUCT TERMINAL TABLE. IFNET RDJ1.2 IF NETWORK TERMINAL SX2 /1TD/SDU SUSPEND MUX TERMINAL DRIVER SX7 RDJ1.2 EQ DCR ENTER DRIVER REQUEST RDJ1.2 MX2 48 GET PRIMARY FILE NAME SA1 B4 BX5 X2*X1 SA1 A1+B1 SX0 IDMS BX6 X1*X2 AX6 12 SA6 RDJA SAVE SRU COUNT SA3 B4+EJPB GET JSN SA4 A0+VUIT SET EJT ORDINAL IN VUIT BX6 -X2*X1 BX4 X2*X4 BX6 X6+X4 SA6 A4 REWRITE VUIT SA1 A1+B1 GET NEXT PARAMETER BLOCK WORD MX7 -6 LX7 6 BX7 -X7*X1 LX7 6 BX7 X5+X7 MERGE FILE NAME AND MODES SA7 A0+VFNT SA2 A0+VFST SET JSN IN VFST MX4 -36 BX6 -X4*X2 CLEAR OLD JSN BX6 X6+X3 SA6 A2 REWRITE VFST SX6 VRIR (X6) = (VROT) JOB CONTINUATION FLAG MX2 -3 BX7 -X2*X1 INTERACTIVE SUBSYSTEM LX1 59-5 SX4 X7-MSYS LX7 12 NG X4,RDJ2 IF VALID SUBSYSTEM BX7 X7-X7 RDJ2 SX4 B1 SET JOB COMPLETE FLAG LX4 54-0 BX7 X7+X4 SX2 B1 SET VROT COMPLETE SA7 A0+VSTT WRITE VSTT PL X1,RDJ3 IF JOB NOT ACTIVE SX2 VJIR SET JOB IN SYSTEM SX0 JEMS JOB ACTIVE MESSAGE RDJ3 BX6 X2+X6 ADD STATUS TO VROT LX1 3 GET RESOURCE LIMITS MX2 -2 BX2 -X2*X1 LX2 19-1 BX6 X6+X2 PUT INTO VROT SA1 A1+B1 GET FIRST WORD OF RECOVERY TABLE MX2 12 BX7 X1*X2 LX7 12 SA6 A0+VROT WRITE VROT SX4 X7-IFSI ZR X4,RDJ4 IF RECOVERY TABLE FROM *IAF* SX4 X7-RDSI NZ X4,RDJ8 IF RECOVERY TABLE NOT FROM *RDF* * PROCESS RECOVERY TABLE. RDJ4 SX7 34B BX7 X7*X1 BX6 X6+X7 SX4 40B BX4 X4*X1 GET FILE TYPE FLAG LX4 17-5 BX6 X6+X4 SET IN VROT SA6 A0+VROT WRITE VROT SA4 A0+VDCT MX6 27 LX6 24 BX6 X4*X6 BX2 X1 SECOND COPY OF RECOVER INFORMATION LX2 59-7 MX7 -3 LX7 12 BX7 -X7*X1 LX7 51-12 PL X2,RDJ5 IF NOT TEXT MODE SX0 TXMS RDJ5 SX2 B1 LX2 1-0 GET BRIEF MODE BX4 X2*X1 LX4 55-1 BX7 X7+X4 BX6 X7+X6 SA6 A4 REWRITE VDCT LX2 6-1 GET DISTC BIT SA4 A0+VSTT BX7 X2*X1 LX7 59-6 BX4 X4+X7 SX2 B1 GET PROMPT BIT BX7 X2*X1 LX7 53-0 BX4 X4+X7 MX7 -3 GET INITIAL CHARACTER SET LX7 15 BX7 -X7*X1 LX7 18-15 BX6 X4+X7 MX7 56 GET TERMINAL TABLE SUBSYSTEM LX7 12 BX6 X7*X6 CLEAR CPA SUBSYSTEM LX7 18-12 BX7 -X7*X1 AX7 18-12 BX6 X6+X7 INSERT TERMINAL TABLE SUBSYSTEM MX7 -1 LX7 8 BX2 -X7*X1 GET EFFECT MODE LX2 55-8 BX6 X6+X2 LX7 9-8 GET SCREEN MODE BX2 -X7*X1 LX2 49-9 BX6 X6+X2 LX1 59-4 SA6 A4 REWRITE VSTT LX2 X1,B1 LX3 X2,B1 PL X3,RDJ6 IF NO JOB CONTINUATION SX0 JEMS RDJ6 PL X2,RDJ7 IF NO INPUT REQUESTED SX0 INMS RDJ7 PL X1,RDJ7.1 IF NO OUTPUT AVAILABLE SX0 OTMS * RECOVER CHARACTER COUNTS. RDJ7.1 SA2 A0+VCHT GET CHARACTER COUNTS SA3 A0+VFST SA1 A1+B1 READ RECOVERY WORD 2 MX7 -24 MX6 -12 LX6 24 BX2 X7*X2 CLEAR INPUT/OUTPUT COUNTS BX3 X6*X3 CLEAR OVERFLOW COUNT BX7 -X7*X1 BX6 -X6*X1 BX7 X7+X2 MERGE INPUT/OUTPUT COUNTS BX6 X6+X3 MERGE OVERFLOW COUNT SA7 A2 WWRIE INPUT/OUTPUT COUNTS SA6 A3 WRITE OVERFLOW COUNT * ISSUE RECOVERY MESSAGE. RDJ8 SX6 B3 SAVE POT POINTER SA6 RDJB RJ GPL GET ADDRESS OF MSW1 SA1 RDJA GET SRU COUNT RJ FSM FORMAT STATUS MESSAGE SX6 FSMA SET MESSAGE ADDRESS SB3 B0+ SB4 A6-FSMA+1 CALCULATE MESSAGE LENGTH RJ MVA ISSUE STATUS MESSAGE SB5 RDJC SET MESSAGE BUFFER POINTER SX3 X0-IDMS NZ X3,RDJ9 IF NOT IDLE SA1 A0+VROT CLEAR JOB CONTINUATION SX7 VRIR BX7 -X7*X1 SA7 A1+ REWRITE VROT RJ RCM RESET CHARACTER MODE RDJ9 SA1 A0+VDCT SA2 =10H CHARACTER BX6 X2 LX1 59-51 SA6 B5 MX7 24 SA2 =6L SET: SA3 =6LNORMAL PL X1,RDJ10 IF NOT ASCII MODE SA3 =5LASCII RDJ10 BX1 X7*X3 LX1 24 BX6 X1+X2 SA6 A6+B1 BX3 -X7*X3 REST OF CHARACTER SET LX3 24 LEFT JUSTIFIED SA1 =5RMODES BX1 X3+X1 RJ ZTB CONVERT ZERO CHARACTERS TO BLANKS SA6 A6+B1 RJ FMF FORMAT MODES FIELD SA1 X0 MX2 -12 RDJ11 BX6 X1 MOVE APPROPRIATE PROMPT MESSAGE SX7 A6-RDJD PL X7,RDJ11.2 IF END OF BUFFER SA6 A6+B1 BX6 -X2*X6 SA1 A1+B1 NZ X6,RDJ11 IF NO EOL RDJ11.2 SX6 A6-RDJC+1 SAVE MESSAGE LENGTH SA1 RDJB GET POT CHAIN TO DROP SB3 X1 SA6 A1 SB4 B0 RJ DPT DROP POT CHAIN MX2 1 SET READ DATA BIT LX2 54-59 SA1 A0+VDCT BX6 X2+X1 SA6 A1 REWRITE VDCT SA1 RDJB GET MESSAGE LENGTH SB3 B0 SB4 X1 SX6 RDJC SET FWA OF FORMATTED MESSAGE RJ MVA SEND MESSAGE TO TERMINAL IFNET RDJ12 IF NETWORK TERMINAL SB3 X0+ SAVE MESSAGE ADDRESS SA1 A0+VDCT SET INTERRUPT COMPLETE FLAG SX6 B1+ LX6 58-0 BX6 X1+X6 SA6 A1+ RJ RDC ENSURE INTERLOCK CLEAR SX0 B3+ RESTORE MESSAGE ADDRESS SB3 B0+ RDJ12 RJ GOP GET POT FOR PARAMETER BLOCK PARAM RSEJ RESTART JOB SA1 RDJE ADD TERMINATED TERMINAL NAME TO BLOCK SA2 B4+6 MX3 -18 BX3 -X3*X2 BX6 X1+X3 SA6 B4+6 SX1 X0-TXMS ZR X1,RDJ13 IF TEXT MODE RJ PMR PROCESS MONITOR REQUEST ZR X2,RDJ12.1 IF NO ERROR SX3 X2-ERER ZR X3,REP IF DEVICE INACCESSIBLE OR I/O ERROR RDJ12.1 SB4 B0+ RJ DPT DROP REQUEST POT EQ RES RESTART TERMINAL SESSION * FINISH TEXT MODE RECOVERY. RDJ13 RJ PMR PROCESS MONITOR REQUEST ZR X2,RDJ13.1 IF NO ERROR SX3 X2-ERER ZR X3,REP IF DEVICE INACCESSIBLE OR I/O ERROR RDJ13.1 RJ RDC ENSURE INTERLOCK CLEAR SA1 A0+VDCT CLEAR READ DATA BIT MX6 59 LX6 54-0 BX6 X6*X1 SA6 A1 REWRITE VDCT EQ TXT ENTER TEXT MODE RDJA CON 0 TEMPORARY STORAGE RDJB CON 0 RDJC BSS 15 FORMATTED MESSAGE BUFFER RDJD BSS 0 END OF MESSAGE BUFFER RDJE CON 0 TERMINAL NAME OF TERMINATED JOB RECS CON 0 COUNT OF RECOVERED USERS IDMS DATA 22L IDLE. ENTER COMMAND. TXMS DATA 11L TEXT MODE. JEMS DATA 15L JOB IN SYSTEM. INMS DATA 17L INPUT REQUESTED. OTMS DATA 18L OUTPUT AVAILABLE. REP SPACE 4,10 ** REP - RECOVERY ERROR PROCESSOR. * PROCESS ERROR RETURN. REP BSS 0 ENTRY SX6 X2-NTER SX3 X2-JFER ZR X6,REP1 IF NOT DETACHED ZR X3,REP2 IF NOT FOUND SX3 X2-ERER SMA X6,( DEVICE INACCESSIBLE - RECOVERY FAILED."NL") ZR X3,REP3 IF DEVICE INACCESSIBLE OR I/O ERROR SMA X6,( JOB NOT RECOVERABLE."NL") EQ REP3 SEND MESSAGE REP1 SMA X6,( JOB NOT DETACHED."NL") EQ REP3 SEND MESSAGE REP2 SMA X6,( JOB NOT FOUND."NL") REP3 SB4 B0+ RJ MVA MOVE DATA AND ASSIGN MESSAGE * EXIT TO RESTART JOB. RJ CDP CLEAR DETACH IN PROGRESS SB3 B0 SET NO POT EQ RES RESTART TERMINAL SESSION SBS SPACE 4,10 ** SBS - SET SUBSYSTEM. * * ENTRY (B3) = SUBSYSTEM REQUESTED. * * CALLS ABT IF INCORRECT SUBSYSTEM. SBS BSS 0 SA1 A0+VSTT GET WORD VSTT SB4 B3-MSYS CHECK REQUESTED SUBSYSTEM MX6 57 PL B4,SBS1 IF INCORRECT SUBSYSTEM SX7 B3 LX7 12 LX6 12 BX6 X6*X1 MASK SUBSYSTEM IX7 X6+X7 INSERT NEW SUBSYSTEM SA7 A1 EQ PCSX EXIT SBS1 SX6 3RSBS RJ ABT EQ PCSX EXIT SCS SPACE 4,10 ** SCS - SET CHARACTER SET MODE. * * ENTRY (X7) = 56/, 1/Y, 3/X. * Y = RESET ENTRY MODE IF NONZERO. * X = 0 = SET NORMAL MODE. * = 1 = SET EXTENDED MODE. * = 2 = RESET TO ENTRY MODE. * * EXIT (VDCT) = MODE RESET. * * CALLS RDC, RES. SCS MX1 -2 ISOLATE ARGUMENT BX1 -X1*X7 SB3 X1 SB4 B3-B1 TEST ARGUMENT LE B3,B1,SCS1 IF *NORMAL* OR *ASCII* NE B4,B1,PCSX IF NOT *RESTORE* * PROCESS *RESTORE* FUNCTION. SA1 A0+VSTT GET ENTRY MODE SX7 B1 AX1 18 BX7 X7*X1 ENTRY MODE BIT SB3 X7 SAVE IN B3 EQ SCS2 * PROCESS *NORMAL* OR *ASCII* FUNCTION. SCS1 LX7 59-3 CHECK FOR ENTRY MODE RESET PL X7,SCS2 IF NOT RESET SX5 B3 SA1 A0+VSTT CLEAR ENTRY MODE MX7 -1 LX1 -18 BX7 X7*X1 BX7 X7+X5 SET ENTRY MODE LX7 18 SA7 A1 REWRITE VSTT SCS2 RJ RDC READ *VDCT* SX7 B1 CLEAR MODE LX7 51-0 BX1 -X7*X1 SX7 B3 SET MODE LX7 51-0 IX7 X7+X1 SA7 A1 REWRITE *VDCT* SB3 B0 IFNET RES RESTART JOB SX2 /1TD/SCE SET TRANSMISSION MODE FOR MUX TERMINALS SX7 RES SET RESTART ADDRESS JP DCR ENTER DRIVER REQUEST SDT SPACE 4,10 ** SDT - SET TERMINAL TABLE BIT. * * ENTRY (B3) = BIT NUMBER. * (X7) = TERMINAL TABLE WORD ORDINAL. * * CALLS ABT. SDT BSS 0 SX3 1 SB4 X7+ SDT1 MX2 59 SX6 X7-VSTT LX3 X3,B3 POSITION BIT NZ X6,SDT2 IF WRONG WORD SA1 A0+B4 LX2 X2,B3 POSITION MASK SB7 B3-60 BX6 X2*X1 CLEAR BIT PL B7,SDT2 IF BIT OUT OF RANGE BX6 X6+X3 SA6 A1 EQ PCSX EXIT SDT2 SX6 3RSDT RJ ABT EQ PCSX EXIT SJS SPACE 4,10 ** SJS - SET JOB STATUS MESSAGE FOR *ENQUIRE* COMMAND. * * ENTRY (X7) = 0 IF BAD ROLLOUT FILE. SJS BSS 0 ENTRY SA2 A0+VSTT SX0 2001B CHECK USER BREAK OR LOGOUT IN PROGRESS SB5 B2 LX0 48 RJ GRT READ QUEUE ENTRY BX5 X4 AX4 48 SX4 X4-ITA1$ NZ X4,SJS1 IF NOT STATUS REQUEST QUEUE ENTRY SX6 B0 BX0 X0*X2 SA6 A4+ CLEAR QUEUE ENTRY RJ UQS UPDATE QUEUE STACK RJ SSP NZ X0,IGN IF USER BREAK OR LOGOUT IN PROGRESS ZR X7,STA1 IF REQUEST REJECTED, REISSUE EQ STA7 REENTER STATUS PROCESSING SJS1 SX6 3RSJS SET ERROR CODE RJ ABT EQ PCSX EXIT TITLE CHECK SALVARE FILE. TITLE DRI - PROCESS DRIVER REQUESTS. DRI SPACE 4 ** DRI - FINDS ALL DRIVER CIRCULAR STACK REQUESTS AND BEGINS * PROCESSING OF THEM. * * CALLS ABT, CTM, DSH, REQUEST PROCESSORS VIA *PDR*. DRI SUBR ENTRY/EXIT SX7 VDRL SET FIRST STACK POINTER ADDRESS SA7 DRIA * SET STACK ADDRESS. DRI1 SA1 X7 READ STACK POINTER NG X1,DRIX IF END OF STACK POINTERS, EXIT AX1 24 SX7 X1+ SET STACK ADDRESS ZR X7,DRI5 IF NULL STACK SA7 DRIB SAVE STACK ADDRESS * GET CIRCULAR STACK ENTRY. DRI2 SA2 X1+2 READ IN SA3 A2+B1 READ OUT BX4 X2-X3 ZR X4,DRI4 IF IN .EQ. OUT SA4 A3+B1 READ LIMIT SA5 X3 READ ENTRY SX6 X3+B1 ADVANCE OUT BX4 X6-X4 NZ X4,DRI3 IF OUT .NE. LIMIT SA1 A2-1 READ FIRST SX6 X1+ SET OUT = FIRST * PROCESS CIRCULAR STACK ENTRY. DRI3 SA6 A3 REWRITE OUT UX1,B7 X5 UNPACK ENTRY SB6 TDRIL SET COMMAND TABLE LIMIT NG B7,DRI6 IF BAD ENTRY GE B7,B6,DRI6 IF BAD ENTRY SA4 TDRI+B7 GET PROCESSOR ADDRESS SB7 X4+ ZR B7,DRI6 IF UNDEFINED PROCESSOR RJ /SMFIF/PDR PROCESS DRIVER REQUEST SA1 DRIB RESET STACK ADDRESS EQ DRI2 CONTINUE * CHECK COMPLETED STACK FOR SHUTDOWN. DRI4 SA1 DRIA GET STACK POINTER ADDRESS SA2 X1 READ STACK POINTER AX2 48 CHECK SHUTDOWN POINTER ZR X2,DRI5 IF NO SHUTDOWN LX2 59-49+48 NG X2,DRI7 IF SHUTDOWN COMPLETE RJ DSH PROCESS SHUTDOWN * ADVANCE STACK POINTER AND CONTINUE. DRI5 SA1 DRIA GET STACK POINTER SX7 X1+B1 ADVANCE POINTER SA7 A1 EQ DRI1 CONTINUE * PROCESS BAD STACK ENTRY. DRI6 SX6 3RDRI SET ERROR CODE BX7 X5 SAVE INCORRECT REQUEST SA7 DRIC RJ ABT PROCESS ERROR EQ DRI5 CONTINUE * CHECK CALL *1TM* FLAG. DRI7 SA1 DRIA GET CURRENT *VDRL* ADDRESS MX7 -18 SA2 VITM GET *1TM* *VDRL* ADDRESS BX2 -X7*X2 BX7 X1-X2 NZ X7,DRI5 IF NOT *1TM* *VDRL* ADDRESS SA1 X2 LX1 59-50 PL X1,DRI5 IF CALL *1TM* FLAG NOT SET RJ CTM CALL *1TM* DRIVER EQ DRI5 CONTINUE DRIA CON 0 CURRENT STACK POINTER ADDRESS DRIB CON 0 CURRENT STACK ADDRESS DRIC CON 0 SAVE INCORRECT REQUEST CODE TDRI SPACE 4 ** TDRI - COMMAND PROCESSING TABLE FOR DRIVER(S) CIRCULAR. * STACK(S). TDRI INDEX CON,/TLX/REQL,( 0 ) INDEX ,/TLX/CLI,( CLI ) INDEX ,/TLX/DIN,( DIN ) INDEX ,/TLX/DLO,( DLO ) INDEX ,/TLX/DRP,( DRP ) INDEX ,/TLX/DRT,( DRT ) INDEX ,/TLX/DTJ,( DTJ ) INDEX ,/TLX/ETX,( ETX ) INDEX ,/TLX/FLO,( FLO ) INDEX ,/TLX/HUP,( HUP ) INDEX ,/TLX/IAM,( IAM ) INDEX ,/TLX/LPT,( LPT ) INDEX ,/TLX/PUB,( PUB ) INDEX ,/TLX/RES,( RES ) INDEX ,/TLX/RIN,( RIN ) INDEX ,/TLX/SAI,( SAI ) INDEX ,/TLX/TOT,( TOT ) TDRIL EQU *-TDRI TABLE LENGTH DRI TITLE DRI - SUBROUTINES. CLI SPACE 4 ** CLI - COMMAND LINE OF INPUT RECEIVED. * * ENTRY (B3) = COMMAND POT POINTER. * (B4) = COMMAND POT ADDRESS. * (X7) = FWA IN COMMAND POT. * * EXIT TO APPROPRIATE COMMAND PROCESSOR. * SEE SSP. CLI BSS 0 SA1 A0+VDCT SA2 A0+VROT MX4 59 LX4 5-0 CLEAR *INPUT SATISFIED* BIT BX6 X2*X4 LX4 56-5 CLEAR *INPUT REQUESTED* SA6 A2 BX6 X1*X4 SA6 A1+ SB5 B2+ RJ GRT READ QUEUE ENTRY BX3 X4 AX4 48 SX5 X4-INP$ LX1 59-49 ZR X5,CLI2 IF EXPLICIT INPUT REQUEST SX5 X4-TOT$ ZR X5,IGN IF TIMEOUT IN PROGRESS NG X1,AUT5 IF AUTO MODE IFNET CLI1 SA2 A0+VDCT CLEAR AUTO MODE BIT FOR MUX TERMINAL SX6 B1 LX6 45-0 BX6 -X6*X2 SA6 A2 CLI1 LX1 59-57-59+49 NG X1,PCM IF USER LOGGED IN, PROCESS COMMAND RJ INO ISSUE NULL OUTPUT EQ PCSX EXIT * PROCESS INP$ QUEUE ENTRY. * * EXIT TO INP$ QUEUE ENTRY REENTRY ADDRESS. * (B3) = INPUT POT POINTER. * (B5) = QUEUE ENTRY POT POINTER. * (B6) = QUEUE ENTRY POT ADDRESS. * (PBUF) = CRACKED COMMAND. CLI2 BX4 X3 LX3 -24 PL X1,CLI3 IF NOT AUTO MODE IFNET AUT5 MX6 1 CLEAR AUTO MODE BIT FOR MUX TERMINAL BX6 -X6*X1 LX6 49-59 SA6 A1 CLI3 SX5 X3-INP ZR X5,CLI5 IF INPUT TO A RUNNING PROGRAM RJ CCM CRACK COMMAND CLI4 SB5 B2+ SET TERMINAL NUMBER RJ GRT READ QUEUE ENTRY * SET PARAMETERS AND EXIT TO PROCESSOR. CLI5 BX6 X6-X6 CLEAR QUEUE ENTRY SA6 A4 BX6 X4 SAVE QUEUE ENTRY SA6 CLIA RJ UQS UPDATE QUEUE STACK RJ SSP RESTORE REGISTERS SA4 CLIA GET QUEUE ENTRY AX4 12 SET QUEUE ENTRY POT POINTER MX1 -12 BX1 -X1*X4 SB5 X1 AX4 12 SET REENTRY ADDRESS LX1 3 SET QUEUE ENTRY POT ADDRESS SB7 X4+ TB6 X1,VBMP JP B7 EXIT TO PROCESSOR CLIA CON 0 QUEUE ENTRY DIN SPACE 4,10 ** DIN - PROCESS USER DIALED IN. * * DIN IS ENTERED WHEN A COMMUNICATIONS LINE BECOMES * ACTIVE. A POT IS GIVEN TO THE DRIVER FOR THE * ANSWERBACK FROM THE TERMINAL. REENTRY IS SET TO * *LIN* FOR NON-POLLED TERMINALS. DIN BSS 0 ENTRY * DETERMINE IF TERMINAL IS IDLE. DIN1 SA2 A0+VROT SA3 A0+VDCT LX2 59-0 SA4 A0+VSTT MX6 -12 LX4 59-48 BX2 -X2+X4 BX4 X3+X2 NG X4,DIN2 IF LOGOUT, DRIVER REQUEST, OR INCOMPLETE BX6 -X6*X3 NZ X6,DIN2 IF VDCT INTERLOCKED * REQUEST ANSWERBACK POT. PX5 X6,B1 RJ CFL CHECK FIELD LENGTH NG X2,DIN2 IF POTS IN SHORT SUPPLY RJ RPT RESERVE POT SA1 A0+VDCT NZ X7,DIN3 IF POT RESERVED * REENTER DIAL IN PROCESSING. DIN2 SX5 DIN1$ BX7 X7-X7 SB3 B0 EQ PCS1 MAKE QUEUE ENTRY * PRESET FOR LOGIN PROCESSING. DIN3 BX3 X7 ASSIGN POT TO DRIVER SX6 2R"EB" SET TERMINATOR IN POT BX7 X1+X7 LX3 3 LX6 48-0 LX1 59-47 TA6 X3,VBMP SX2 B1 SET *READ DATA* LX2 54-0 BX7 X7+X2 SA7 A1 REWRITE VDCT NG X1,PCSX IF POLLED LINE SX5 INP$ SET UP QUEUE ENTRY SX7 LIN SET REENTRY LX5 48 LX7 24 IX5 X5+X7 MERGE QUEUE POINTER AND REENTRY SB7 B0 INDICATE NULL QUEUE RJ MQE MAKE QUEUE ENTRY EQ PCSX EXIT DTJ SPACE 4,15 ** DTJ - DETACH JOB. * * ENTRY (X7) = REASON CODE. * (B3) = POT POINTER, IF PROVIDED. * (B4) = FWA POT, IF PROVIDED. * * EXIT (B3) = POT POINTER TO PARAMETER BLOCK. * (B4) = FWA PARAMETER BLOCK. * (X2) = ERROR FIELD, IF ANY. * * CALLS CAM, CDP, CJA, CNT, DAP, DIP, DLP, DVP, GOP, MVA, PMR, * SSP, UEC. * * MACROS PARAM. DTJ BSS 0 SA1 A0+VSTT BX2 X1 LX1 59-56 LX2 59-48 BX2 X1+X2 NG X2,PCSX IF LOGOUT OR DETACH IN PROGRESS MX6 1 SET DETACH IN PROGRESS BX6 X1+X6 LX6 56-59 SA6 A1 SA1 A0+VDCT SA7 DTJD SAVE REASON CODE LX1 59-49 PL X1,DTJ1 IF NOT IN AUTO MODE RJ CAM CLEAR AUTO MODE RJ DAP DEASSIGN ANY OUTPUT/DRIVER REQUESTS RJ DLP DUMP ANY REMAINING SOURCE INPUT RJ SSP RESTORE ENTRY PARAMETERS DTJ1 IFMUX DTJ1.1 SA4 DTJD SAVE REASON CODE IN VMST RJ CNT CANCEL TYPEAHEAD ZR X1,DTJ1.1 IF NO REENTRY MADE SA6 DTJD RESTORE REASON CODE DTJ1.1 SA1 A0+VDCT CLEAR *INPUT REQUESTED* SX4 B1 LX4 56-0 BX6 -X4*X1 SA6 A1 RJ GOP SA1 DTJD BX7 X1 SA7 B4+VCPC-1 SAVE REASON CODE SX7 DTJ2 SET RETURN ADDRESS EQ CJA CLEAR JOB ACTIVITY DTJ2 SX7 B3 SET POT ADDRESS LX7 3 TB4 X7,VBMP PARAM FJEJ FREEZE JOB RJ PMR PROCESS MONITOR REQUEST SX5 DTJ3$ EQ PCS1 WAIT UNTIL THE JOB HAS ROLLED DTJ3 SA3 B4+VCPC-1 RESTORE REASON CODE PARAM DTEJ,X3 RJ PMR PROCESS MONITOR REQUEST BX0 X2 SAVE RESULT RJ DIP DROP INPUT POT CHAIN RJ DVP DROP *VROT* POT CHAIN RJ SSP RESTORE B4 BX2 X0 RESTORE RESULT CODE SA1 B4+2 GET REASON CODE MX3 -6 AX1 42 BX3 -X3*X1 SB6 X3-TDJPL PL B6,DTJ6 IF INVALID REASON CODE SA5 TDJP+X3 GET PROCESSOR ADDRESSES SB7 X5 AX5 30 SB6 X5 ZR X2,DTJ4 IF NO ERRORS REPORTED SX1 X2-JOER ZR X1,DTJ3.1 IF JOB NOT ON-LINE * IF A *JDER* ERROR CODE IS RETURNED, EITHER THE * JOB IS NOT IN *IOJS* OR *DOJS* STATUS, OR THERE * IS A BAD REASON CODE IN THE REQUEST. IN EITHER * CASE THERE IS NO WAY TO RECOVER FROM THIS ERROR. SX1 X2-JDER ZR X1,DTJ6 IF UNRECOVERABLE ERROR * IF AN *ERER* ERROR CODE IS RETURNED AN UNRECOVERABLE I/O * ERROR OCCURRED. SX1 X2-ERER ZR X1,DTJ3.1 IF UNRECOVERABLE I/O ERROR JP B7 RETURN TO ERROR PROCESSOR DTJ3.1 SA1 A0+VFST BUILD MESSAGE MX6 24 BX1 X6*X1 JSN SA2 DTJE+2 BX2 -X6*X2 CLEAR OLD JSN BX6 X1+X2 ADD NEW JSN SA6 A2 SX6 DTJE RJ IDM ISSUE DAYFILE MESSAGE DTJ4 SA1 A0+VUIT CLEAR EJT ORDINAL MX3 48 BX6 X1*X3 SA6 A1 REWRITE VUIT JP B6 EXIT TO NORMAL PROCESSOR * RETURN HERE UPON SUCCESSFUL USER DETACH. DTJ5 SA1 A0+VFST PUT JSN IN MESSAGE MX6 24 MX0 -3 SAVE ACCESS LEVEL LIMIT OF DETACHED JOB SA2 B4+2 LX2 -54 BX0 -X0*X2 BX6 X1*X6 BX7 X7-X7 SA6 DTJB MX6 42 SAVE TERMINAL NAME OF DETACHED JOB SA2 B4+6 BX6 X6*X2 SA6 DTJC SA7 A0+VFNT SA7 A0+VCHT SA1 A0+VSTT CLEAR USER EFFECT MODE MX7 1 LX7 55-59 BX6 -X7*X1 SA6 A1 REWRITE VSTT SX6 DTJA SET MESSAGE ADDRESS SB4 3 RJ MVA MOVE MESSAGE TO POT AND ASSIGN RJ GOP GET ONE POT SA1 A0+VUIT MX6 -6 MX7 42 BX7 X7*X1 GET USERNAME LX1 48 BX6 -X6*X1 GET FAMILY ORDINAL SA6 B4 ERRNZ VUFO CODE DEPENDS ON VALUE SA7 B4+VUNA SX6 X0+10B SET ACCESS LEVEL LIMIT FOR NEW JOB SA6 B4+VLAL BX7 X7-X7 ZERO VFST SX6 B1 CLEAR VROT SA7 A0+VFST SA6 A0+VROT SA1 DTJC BX6 X1 SA6 B4+VTRY SET TERMINAL NAME SX5 ITA2$ SET 1TA LOGIN REQUEST EQ PCS1 RELOGIN USER * RETURN HERE UPON ERROR IN USER DETACH. DTJ6 RJ CDP CLEAR DETACH IN PROGRESS SX1 X2-DLER SMA X6,( DETACH LIMIT EXCEEDED."NL") ZR X1,PCS5 IF LIMIT EXCEEDED SX1 X2-SFER SX3 X2-ISER SMA X6,(USER NOT VALIDATED FOR DETACHED SERVICE CLASS."NL") ZR X3,PCS5 IF SERVICE CLASS NOT VALID FOR USER SMA X6,(SERVICE CLASS FULL."NL") ZR X1,PCS5 IF SERVICE CLASS AT JOB LIMIT SX3 X2-ERER SMA X6,( DEVICE INACCESSIBLE - DETACH FAILED."NL") ZR X3,PCS5 IF DEVICE INACCESSIBLE OR I/O ERROR RJ UEC PROCESS ERROR CODE SMA X6,( ERROR ON DETACH."NL") EQ PCS5 EXIT TO SEND MESSAGE DTJA DATA 10H JOB DETA DATA 10HCHED, JSN= DTJB CON 0 JSN DETACH DTJC CON 0 TERMINAL NAME OF DETACHED JOB DTJD CON 0 DETACH REASON CODE DTJE DATA C* DETACH FAILED, JSN=XXXX.* TDJP SPACE 4,10 ** TDJP - TABLE OF DETACH PROCESSORS. * * 30/NORMAL RETURN, 30/ERROR RETURN. TDJP INDEX VFD,MXDT,( ) INDEX ,LDRC,( 30/HUP3,30/FTP5 ) LINE DISCONNECT INDEX ,TORC,( 30/FTP4,30/FTP5 ) FINISH TIMEOUT PROCESSING INDEX ,SARC,( 30/PCSX,30/PCSX ) SUBSYSTEM ABORT INDEX ,UDRC,( 30/DTJ5,30/DTJ6 ) USER DETACH INDEX ,PDRC,( 30/DTJ5,30/DTJ6 ) PROGRAM INITIATED DETACH INDEX ,PIDL,( 30/HUP3,30/FTP5 ) PROGRAM INITIATED HUP DLO SPACE 4 ** DLO - PROCESSES DATA LOST CONDITION. * * ENTRY- * SEE SSP * * (X7) = REQUEST CODE. * 0 = DRIVER REENTRY. THIS MEANS THAT INPUT COULD * NOT BE ACCEPTED BECAUSE A DRIVER REENTRY WAS * ALREADY WAITING TO BE PROCESSED. THIS * IS DIAGNOSED AS *DATA LOST IAFEX*. * * 1 = LOST DATA. THIS MEANS THAT THE LOST DATA STATUS * WAS DETECTED IN THE 667X STATUS. THIS IS DIAGNOSED * AS *DATA LOST DRIVER*. DLO SA1 PMSG CHECK PENDING MESSAGE SA2 DLOB+X7 GET ERROR TYPE NZ X1,PCSX IF REQUEST PENDING SKIP MESSAGE SX1 B2 SET TERMINAL NUMBER BX6 X2 SA6 DLOA+1 RJ O6S SA2 DLOC SET SYSTEM CALL SA6 A6+B1 BX7 X2 SA7 A1 EQ PCSX EXIT DLOA DATA H*DATA LOST * DATA 0 DATA 0 DLOB DATA 10HIAFEX DATA 10HDRIVER DLOC VFD 18/3R1MA,6/0,12/1,6/0,18/DLOA DRP SPACE 4 ** DRP - DROPS A POT THAT IS NO LONGER NEEDED. * * ENTRY- * SEE SSP DRP BSS 0 ZR X7,DRP1 IF NO RESET OF END OF CHAIN SB7 B0 RJ RPL RESET POT LINKAGE EQ PCSX EXIT DRP1 SB4 B3 RJ DPT DROP POT EQ PCSX EXIT ETX SPACE 4,10 ** ETX - PROCESS TEXT MODE EXIT. * * ENTRY (B2) = TERMINAL NUMBER. * (B3) = POT TO BE DUMPED. * (X7) = WORD COUNT IN POT. * IF ZERO, NO DUMP IS FORCED. * * EXIT LAST POT IS DUMPED IF NOT EMPTY. * THE SORT FLAG IS CLEARED. * THE PRIMARY FILE IS PACKED. * *EXIT TEXT MODE.* MESSAGE IS ISSUED. * * CALLS CFC, DMP, MQE, PCB, SFL. ETX BSS 0 ENTRY SA1 A0+VROT CHECK FOR ACTIVITY LX1 59-0 SX5 ETX1$ PL X1,PCS1 IF TERMINAL ACTIVE * REENTRY AFTER ACTIVITY CEASES. ETX1 ZR B3,ETX2 IF USER ENTERED NO DATA SB7 B0 FORCE DUMP SB6 X7 WORD COUNT IN POT RJ DMP FORCE LAST POT DUMP SX5 ETX2$ EQ PCS1 EXIT TO MAKE QUEUE ENTRY * REENTRY AFTER THE LAST POT IS DUMPED. ETX2 SA1 A0+VSTT CLEAR SORT FLAG SX2 B1 LX2 54-0 BX1 X1+X2 SET JOB COMPLETION FLAG LX2 52-54+60 BX6 -X2*X1 SA6 A1 REWRITE VSTT ZR B3,ETX2.1 IF USER ENTERED NO DATA SB4 B0 RJ DPT DROP POT ETX2.1 SA1 A0+VFST SET NEXT OPERATION INDEX SX6 B1+B1 NEXT OPERATION INDEX, PREPROCESSOR INDEX LX6 12 BX7 X6+X1 SA7 A1 REWRITE VFST LX6 48 SX7 B0 SET *EPN* EQ BJB1 ENABLE EXECUTION OF THE PACK INSTRUCTION ETX3 SX5 ETX4$ WAIT FOR PACK TO COMPLETE EQ PCS1 MAKE QUEUE ENTRY * REENTRY AFTER THE PACK IS COMPLETE. ETX4 SB3 B0 SET NO POT AVAILABLE SMA X6,("NL" EXIT TEXT MODE."NL") EQ PCS5 ISSUE THE MESSAGE FLO SPACE 4,10 ** FLO - FORCED LOGOUT, *0004* CONTROL BYTE. * * ENTRY (B3) = APPLICATION NAME POT POINTER IF .NE. 0. * (X7) = 0, IF LOGOUT. * = 1, IF APPLICATION SWITCH. * = 2, IF FORCED LOGOUT. * * EXIT TO *APS* IF APPLICATION SWITCH. * * CALLS CJA, CLE, DIN, DRC1, GOP, HNG, IGN, PMR, PPB, RDC, * SLF, SSI. * * MACROS PARAM. FLO BSS 0 SA1 A0+VSTT CHECK DETACH OR LOGOUT BX2 X1 LX1 59-56 LX2 59-48 BX1 X1+X2 NG X1,IGN IF DETACH OR LOGOUT IN PROGRESS SB5 X7+ NE B5,B1,FLO0 IF NOT APPLICATION SWITCH SA2 A0+VDCT CHECK CONNECTION TYPE LX2 59-47 NG X2,IGN IF THIS CONNECTION IS ALREADY LOANED LX2 59-46-59+47 PL X2,APS IF IAF NOT SECONDARY APPLICATION FLO0 RJ SLF SET LOGOUT FLAG NZ B3,FLO0.1 IF POT PROVIDED RJ GOP SX1 B0+ PASS ZEROES FOR APPLICATION NAME EQ FLO1 CONTINUE FLO0.1 SA1 B4 GET NEXT APPLICATION NAME ZR B5,FLO1 IF NO FORCE LOGOUT, KEEP APPLICATION NAME SA1 =6LLOGOUT SET APPLICATION NAME FOR FORCE LOGOUT FLO1 BX6 X1 SA6 B4+EJPB SAVE APPLICATION NAME ERRPL EJPB-VCPC PARAMETERS OVERFLOW POT SX7 FLO2 SET RETURN ADDRESS EQ CJA CLEAR JOB ACTIVITY FLO2 PARAM FJEJ FORCE JOB TO ROLLOUT RJ PMR FLO3 SX5 FLO4$ WAIT FOR ACTIVITY TO COMPLETE EQ PCS1 MAKE QUEUE ENTRY FLO4 SA1 B4+EJPB SAVE NEXT APPLICATION SA2 A0+VFNT MX0 -18 BX2 -X0*X2 BX6 X0*X1 BX6 X6+X2 SA6 A2 REWRITE VFNT PARAM TJEJ TERMINATE JOB RJ PMR ZR X2,FLO5 IF NO ERROR RJ UEC PROCESS TERMINATION ERROR FLO5 SA1 A0+VUIT CLEAR EJT ORDINAL MX0 42 BX6 X0*X1 SA6 A1 BX6 X6-X6 RJ SSI SEND SRU INFORMATION IFNET HNG IF NETWORK TERMINAL SA1 A0+VFNT SA2 =5LHELLO SA3 =5LLOGIN SX4 3RIAF LX4 42 MX0 42 BX1 X0*X1 BX2 X1-X2 BX3 X1-X3 BX4 X1-X4 ZR X2,FLO6 IF RELOGIN REQUIRED ZR X3,FLO6 IF RELOGIN REQUIRED NZ X4,HNG IF RELOGIN NOT REQUIRED FLO6 RJ RDC WAIT FOR DRIVER TO ACCEPT MESSAGE RJ CLE CLEAN UP TERMINAL TABLE SX7 DIN SET REENTRY ADDRESS SX2 /1TD/LGI SET RELOGIN REQUEST EQ DCR1 MAKE DRIVER REQUEST HUP SPACE 4 ** HUP - PROCESSES THE COMMAND THAT SAYS A USER HAS HUNG UP. * * IF A NETWORK TERMINAL IS IN THE PROCESS OF LOGGING * OUT OR HAS COMPLETED LOGOUT, EXIT *HUP* IMMEDIATELY. * IN THE CASE OF MUX TERMINALS, *HUP* MUST ALWAYS BE * EXECUTED SO NO OUTPUT GOES TO TERMINALS AFTER THE * PHONE IS HUNG UP, AND THE TERMINAL TABLE GETS CLEANED UP. * * CALLS CLE, DAP, DLP, DPT, DQP, SLF, SSP. HUP BSS 0 IFMUX HUP0.1 SA1 A0+VDCT CHECK IF LOGOUT HAS ALREADY BEGUN SA2 A0+VSTT LX1 59-57 LX2 59-48 BX2 -X1+X2 NG X2,PCSX IF LOGOUT IN PROGRESS OR JUST COMPLETED HUP0.1 RJ DAP DROP ASSIGNED POTS RJ SSP SA1 A0+VDCT CLEAR INTERRUPT COMPLETE FLAG MX2 1 LX2 -1 BX6 -X2*X1 SA6 A1 SX7 HUP1 SET REENTRY ADDRESS EQ CJA CLEAR JOB ACTIVITY HUP1 SA1 A0+VUIT CHECK EJT ORDINAL MX2 -12 BX2 -X2*X1 ZR X2,HUP3 IF NO EJT ORDINAL RJ DLP DUMP LAST INPUT POT ZR B6,HUP2 IF NO DUMP IN PROGRESS SX5 HUP2$ EQ PCS1 WAIT DUMP COMPLETE HUP2 SX7 LDRC SET LINE DISCONNECT REASON CODE IFMUX HUP2.1 SA1 /IAFEX4/SHDF PL X1,HUP2.1 IF NOT NETWORK SHUTDOWN SX7 SARC SET SUBSYSTEM ABORT REASON CODE HUP2.1 EQ DTJ DETACH JOB * RETURN HERE AFTER JOB DETACH. HUP3 RJ DQP DROP QUEUE ENTRY POTS SA1 A0+VFST CHECK FOR SPARE POT POINTER MX0 -12 BX6 X0*X1 CLEAR POT POINTER BX1 -X0*X1 ZR X1,HUP4 IF NO POT TO DROP SA6 A1 SB3 X1 SB4 B0 DROP TO END OF CHAIN RJ DPT DROP SPARE POT HUP4 RJ SLF SET LOGOUT FLAG SX7 3RBYE SET NVF PARAMETER LX7 42 SB3 B0 SA7 A0+VFNT IFNET HNG HANG UP PHONE FOR NETWORK TERMINAL RJ CLE CLEAR TERMINAL TABLE EQ PCSX EXIT LPT SPACE 4 ** LPT - LINKS A NEW POT TO THE CURRENT CHAIN. * * ENTRY (B3) = POT TO WHICH NEW POT IS TO BE LINKED. * * CALLS RPT. LPT BSS 0 SX5 B3 SET PARAMETERS TO REQUEST A POT PX5 X5,B1 RJ RPT REQUEST POT EQ PCSX EXIT PUB SPACE 4,10 ** PUB - PROCESS USER BREAKS. * * ENTRY (X7) = USER BREAK CODE. * (B3) = POT POINTER PASSED BY DRIVER. * * EXIT JOB STEP TERMINATED IF USER BREAK TWO ON A * NON-DISABLED TERMINAL. * REENTRY SET FOR *RST* IF USER BREAK ONE ON A * NON-DISABLED TERMINAL. * USER BREAK ERROR FLAG SET IF A DISABLED TERMINAL. * * CALLS CAM, CJA, DAP, DIP, DLP, DPT, DQP, DVP, GOP, GRT, INO, * MVA, PMR, SRR, SSP. * * MACROS PARAM, SMA. * * NOTES A TERMINAL IS DISABLED IF THE JOB STEP CURRENTLY * EXECUTING ON THAT TERMINAL HAS REPRIEVE PROCESSING * ENABLED FOR USER BREAKS. PUB BSS 0 ENTRY RJ DQP DROP ANY POTS PASSED BY THE DRIVER IFMUX PUB0 TA1 B2,VMST PL X1,PUB12 IF TERMINAL IS NOT ON-LINE PUB0 SA2 A0+VSTT SA1 A0+VDCT MX3 -12 SX4 0401B CHECK FOR LOGOUT OR DETACH IN PROGRESS BX3 -X3*X1 LX1 59-57 LX4 48 BX4 X2*X4 LX2 59-58 NG X2,PCSX IF USER BREAK ALREADY IN PROGRESS NZ X4,PUB1 IF LOGOUT OR DETACH IN PROGRESS NG X1,PUB2 IF LOGIN COMPLETE PUB1 NZ X3,PUB12 IF OUTPUT/FUNCTION REQUEST ALREADY QUEUED EQ PUB11 SET COMPLETE FLAG TO RESTART DRIVER PUB2 MX6 1 SET BREAK IN PROGRESS BX6 X2+X6 LX6 58-59 REALIGN VSTT SA6 A2 RJ CAM CLEAR AUTO MODE RJ DAP DEASSIGN ANY OUTPUT/DRIVER REQUESTS RJ DLP DUMP ANY REMAINING SOURCE INPUT RJ SSP RESTORE THE USER BREAK CODE SB3 X7 SAVE USER BREAK CODE THROUGH *CJA* SX7 PUB3 EQ CJA CLEAR JOB ACTIVITY PUB3 SX0 B3 SAVE USER BREAK CODE THROUGH *GOP* SB3 B0 RJ GOP GET A POT FOR THE PARAMETER BLOCK SX7 X0+ SA7 B4+VCPC-1 SAVE USER BREAK CODE THROUGH *PMR* PARAM FJEJ FREEZE JOB RJ PMR PROCESS MONITOR REQUEST SA3 B4+VCPC-1 RESTORE USER BREAK CODE SA1 A0+VSTT CHECK DISABLED TERMINAL CONTROL MX2 1 SX7 X3-TIET BX2 X2*X1 BX2 X2+X7 SX5 PUB4$ ZR X2,PCS1 IF USER BREAK ONE WITHOUT DISTC PARAM SAEJ,X3 SET USER BREAK ERROR FLAG RJ PMR PROCESS MONITOR REQUEST SX5 PUB4$ EQ PCS1 WAIT UNTIL THE JOB HAS ROLLED * CONTROL IS NOT RETURNED UNTIL THE JOB HAS ROLLED OUT * AND THE USER BREAK ERROR FLAG HAS BEEN PLACED IN * THE EJT ENTRY. PUB4 SA1 A0+VSTT NG X1,PUB9 IF DISABLED TERMINAL SA1 B4+B1 RESTORE USER BREAK CODE MX7 -12 AX1 12 BX7 -X7*X1 SX7 X7-TAET ZR X7,PUB5 IF USER BREAK 2 ON NON-DISABLED TERMINAL SB5 B0 USER BREAK 1 ON NON-DISABLED TERMINAL SX7 RST RJ SRR MAKE INP$ ENTRY TO RETURN AT *RST* SMA X6,("NL" *INTERRUPTED*"NL") EQ PUB8.1 ASSIGN MESSAGE PUB5 SB4 B0+ RETURN THE PARAMETER BLOCK POT RJ DPT RJ DVP DROP VROT POT CHAIN SX6 3 SET NEXT OPERATION INDEX SA1 A0+VFST LX6 12 BX6 X1+X6 SA6 A1 SX7 B0 SET *EPN* SX6 B0 SET *PPI* NOT TO SORT FILE EQ BJB1 BEGIN JOB PUB7 SX5 PUB8$ EQ PCS1 MAKE QUEUE ENTRY PUB8 SA1 A0+VSTT CLEAR RUN COMPLETE AND JOB COMPLETE SX2 0110B LX2 48 BX6 -X2*X1 SA6 A1 MX3 59 SA2 A0+VROT CLEAR LIST COMPLETE LX3 6-0 BX6 X3*X2 SA6 A2 SA2 A0+VDCT CLEAR READ DATA LX3 54-6 BX2 X3*X2 LX1 51-18 LX3 51-54 BX2 X3*X2 CLEAR EXTENDED/ASCII CHARACTER SET BX6 -X3*X1 IX6 X6+X2 RESTORE INITIAL CHARACTER SET SA6 A2+ REWRITE VDCT SMA X6,("NL" *TERMINATED*"NL") PUB8.1 IFMUX PUB10 ASSIGN MESSAGE TA1 B2,VMST CLEAR CONTINUATION FLAGS MX7 55 LX7 23 BX7 X7*X1 SA7 A1 REWRITE VMST EQ PUB10 ASSIGN MESSAGE PUB9 SA1 A0+VROT CLEAR OUTPUT AVAILABLE/INPUT REQUESTED MX6 58 LX6 3-0 BX6 X1*X6 SX1 B1 SET EOF LX1 13-0 BX6 X1+X6 SA6 A1+ SX6 B0 SET NO MESSAGE * ISSUE MESSAGE AND REENABLE THE DRIVER. * THE MESSAGE ACTS AS AN INTERLOCK TO KEEP IAF FROM * WRITING IN VDCT UNTIL THE DRIVER HAS CLEARED THE * INTERRUPT COMPLETE FLAG. PUB10 SA1 A0+VSTT CLEAR BREAK IN PROGRESS FLAG SX7 B1 LX7 58-0 BX7 -X7*X1 SA7 A1 ZR X6,PUB11 IF NO MESSAGE TO ASSIGN SB4 B0 RJ MVA ASSIGN INTERLOCKING OUTPUT MESSAGE EQ PUB12 CLEAR INTERRUPT COMPLETE FLAG PUB11 RJ INO PROVIDE THE DRIVER WITH A POT PUB12 IFNET PUB13 SB5 B2+ RJ GRT CHECK NEXT REENTRY ZR X4,PUB14 IF NONE AX4 24 SX1 X4-HUP1 NZ X1,PUB14 IF (X7) NOT *HUP1* AX4 24 SX4 X4-CJA$ ZR X4,PCSX IF *CJA* FOR HUP, EXIT EQ PUB14 SET INTERRUPT COMPLETE PUB13 RJ DIP DROP INPUT POT CHAIN SA2 A0+VCHT SET DRIVER REENTRY MX6 12 BX6 X6*X2 LX6 12 SX6 X6+/IAFEX4/NDR-/IAFEX4/BRK8 NZ X6,PCSX IF USER BREAK DRIVER REENTRY GONE PUB14 SA1 A0+VDCT SET INTERRUPT COMPLETE FLAG SX6 B1 LX6 58-0 BX6 X1+X6 SA6 A1 EQ PCSX EXIT RES SPACE 4 ** RES - REQUEST NEXT ASSIGNMENT. * * CHECKS CURRENT TERMINAL STATUS AND MAKES NEW ASSIGNMENT IF * NEEDED. * * ENTRY (SEE SSP). * (B3) = 0. * * CALLS ASM, COI, COP, EDR, GRT, INP, PIP, RDY, URL. RES BSS 0 SA1 A0+VROT MX4 -12 LX1 59-0 PL X1,PCSX IF ACTIVE, EXIT MX7 14 LX1 1 SA3 A0+VSTT CHECK FOR SECONDARY OUTPUT ASSIGNMENT SA2 A0+VDCT CHECK FOR OUTPUT CURRENTLY AVAILABLE LX7 12 BX6 X7*X2 NZ X6,PCSX IF OUTPUT, DRIVER REQUEST, OR INTERRUPT ACK BX7 -X4*X3 BX5 X1 ZR X7,RES1 IF NO OUTPUT IN VSTT IFNET PCSX IF OUTPUT ON NETWORK TERMINAL BX6 X3*X4 SA6 A3 REWRITE VSTT SX5 B1+B1 TELL DRIVER TO START AT WORD TWO BX7 X2+X7 LX5 36-0 BX7 X5+X7 SA7 A2+ REWRITE VDCT EQ PCSX EXIT RES1 SB5 B2+ CHECK FOR QUEUE ENTRY RJ GRT GET ENTRY FROM TABLE NZ X4,RES8 IF QUEUED ENTRY BX4 X3 LX3 59-56 LX4 59-48 BX4 X3+X4 NG X4,PCSX IF DETACH OR LOGOUT IN PROGRESS LX1 59-4 MX4 -2 NG X1,RES2 IF OUTPUT ON MASS STORAGE LX1 0-18-59+4+60 BX4 -X4*X1 NZ X4,URL IF TIME OR SRU LIMIT LX1 0-36-0+18 MX4 -12 BX6 -X4*X1 NZ X6,RES4.1 IF WAITING TO BE ROLLED IN WITH INPUT LX1 59-3-0+36-60 NG X1,RES3 IF WAITING FOR INPUT LX1 3-2 NG X1,RES5 IF WAITING TO BE ROLLED IN LX1 62-6 LX3 56-54 NG X1,RES6 IF LIST COMPLETE NG X3,RES6 IF JOB COMPLETION NOT PROCESSED SA1 VWMP LX2 59-49 NG X2,PCSX IF AUTO MODE, EXIT LX2 59-57-59+49+60 AX1 24 PL X2,PCSX IF USER NOT COMPLETELY LOGGED IN LX3 54-50 ZR X1,RES9 IF NO WARNING MESSAGE NG X3,RES9 IF MESSAGE ISSUED EQ RES10 ISSUE WARNING MESSAGE * PROCESS OUTPUT ON MASS STORAGE. RES2 SX5 ITO1$ EQ PCS1 MAKE QUEUE ENTRY * PROCESS INPUT REQUEST MESSAGE. RES3 SA1 A0+VDCT REQUEST DRIVER TO ISSUE INPUT PROMPT SX2 /1TD/IIP SET INPUT PROMPT REQUEST LX1 59-49 CHECK FOR AUTO MODE NG X1,RES4 IF AUTO MODE TO A RUNNING PROGRAM RJ EDR ENTER DRIVER REQUEST RES4 SX5 INP$ SET UP INPUT REQUEST SX7 INP SET RETURN ADDRESS SB3 B0 EQ PCS1 MAKE QUEUE ENTRY * ROLLIN JOB. RES4.1 SB3 X6 SAVE INPUT POT POINTER BX6 X4*X1 CLEAR POT POINTER IN VROT LX6 36 SA6 A0+VROT RES5 SX7 B0 SET *EPN* SX6 B0+ SET *PPI* NOT TO SORT FILE EQ BJB1 BEGIN JOB * PROCESS JOB COMPLETION. RES6 SX6 B1 CLEAR READ DATA FLAG LX6 54 BX6 -X6*X2 SA6 A2 SA4 =77777777777700004001B BX6 X4*X5 SA6 A1 SA3 A0+VFST CLEAR SMFIF STATE CODE MX6 -6 LX6 18-0 BX6 X6*X3 SA6 A3 ERRNZ /SMFIF/SIDL THIS CODE ASSUMES SIDL=0 SA3 A0+VSTT SX6 4110B CLEAR CONTROL FLAGS LX6 48 BX6 -X6*X3 SX5 B1 LX3 59-54 PL X3,RES7 IF NOT JOB COMPLETION * RESET TERMINAL CHARACTER MODE. SA1 A0+VDCT LX5 18 BX4 X5*X6 GET VSTT ENTRY MODE LX5 51-18 LX4 51-18 BX7 -X5*X1 CLEAR VDCT CHARACTER MODE BX7 X4+X7 RESET TO ENTRY MODE SA7 A1+ REWRITE VDCT SX7 X6 RESET SYSTEM AX7 12 * ISSUE COMPLETION MESSAGE. RES7 SA6 A3 REWRITE VSTT LX3 54-51 PL X3,RDY IF NOT RUN COMPLETE IFNET /IAFEX4/JCM IF NETWORK TERMINAL MX1 -3 LX6 -12 BX7 -X1*X6 EXTRACT CURRENT SUBSYSTEM SA1 JCTT+X7 GET MESSAGE TO ISSUE SX6 X1+ NZ X6,PCS5 IF MESSAGE SPECIFIED JP RDY * CHECK STATUS OF QUEUED ENTRY. RES8 AX4 48 CHECK QUEUE ENTRY SX6 X4-INP$ NZ X6,PCSX IF NOT EXPLICIT INPUT REQUEST * ISSUE BEGIN INPUT REQUEST. RES9 SA1 A0+VDCT CHECK DRIVER STATUS SA2 RESA BX3 X2*X1 NZ X3,PCSX IF INPUT REQUESTED OR DRIVER REQUEST IFMUX RES9.1 IF MUX TERMINAL SA1 A0+VSTT MX3 -12 BX3 -X3*X1 NZ X3,PCSX IF OUTPUT ON NETWORK TERMINAL RES9.1 SA2 A2+B1 REQUEST DRIVER TO BEGIN INPUT RJ EDR ENTER DRIVER REQUEST EQ PCSX EXIT * ISSUE WARNING MESSAGE. RES10 MX6 1 SET MESSAGE ISSUED BX6 X3+X6 LX6 51 SA6 A3 TX2 X1,-VBMP GET POT POINTER AX2 3 SB3 X2 COPY POT(S) RJ COP RJ ASM ASSIGN MESSAGE EQ PCSX EXIT ** TABLE OF TERMINAL DATA REQUESTS RESA CON 6400BS48+7777B CON 4400BS48+/1TD/BGI RIN SPACE 4,10 ** RIN - RELEASE SOURCE INPUT POTS. * * ENTRY SEE SSP. * *T SSPA 12/ RIN ,6/ ,1/ F ,5/ WC ,12/ LP ,12/ FP ,12/ TN * * F = FORCED DUMP FLAG. * WC = WORD COUNT OF LAST POT IF FORCED DUMP * SPECIFIED. * LP = LAST POT OF SOURCE INPUT STRING. IF * FORCED DUMP SPECIFIED, LAST POT BELONGS * TO *RIN*, ELSE RETAINED BY ORIGINATOR. * FP = FIRST POT OF SOURCE INPUT STRING. * TN = TERMINAL NUMBER. RIN BSS 0 ENTRY ZR B3,RIN9 IF FIRST POT POINTER ZERO SA2 A0+VFNT SX0 B3 MX1 42 BX1 X1*X2 ZR X1,RIN3 IF NO FILE TO DUMP TO LX2 59-12 NG X2,RIN3 IF WRITE LOCKOUT BIT SET SA2 A0+VDCT LX2 59-57 PL X2,RIN3 IF USER NOT LOGGED IN EQ RIN2 ENTER SOURCE DUMP LOOP * DUMP SOURCE TO PRIMARY FILE. RIN1 SB7 VIPL SET POT LIMIT BX7 X7-X7 SB6 B1 SET POT TO BE DUMPED FLAG RJ DMP DUMP POTS SB3 X0 ADVANCE TO NEXT POT RJ GPL GET POT LINK ZR B3,RIN9 IF NEXT POT POINTER ZERO SX0 B3 (X0) = NEXT POT TO DUMP RJ SSP RIN2 MX3 -12 CHECK IF CURRENT POT REACHED BX2 -X3*X7 BX2 X0-X2 BX7 X3*X7 SB3 X0 NZ X2,RIN1 IF CURRENT POT NOT YET REACHED LX7 59-17 CHECK IF FORCED DUMP REQUESTED PL X7,PCSX IF NOT FORCED DUMP * FORCE *1TO* CALL TO DUMP CURRENT POT STRING. LX7 5-59 SB7 B0 SET DUMP REQUIRED SX7 X7-40B SET POT LENGTH SB6 X7+ RJ DMP FORCE SOURCE DUMP * REENTER TO DROP LAST POT ON *1TO* COMPLETION. SB3 X0 SET POT TO DROP BX7 X7-X7 SET TO DROP ENTIRE CHAIN SX5 RIN$ EQ PCS1 MAKE QUEUE ENTRY * DROP POTS IF NO PRIMARY FILE. RIN3 LX7 59-17 CHECK FOR FORCED DUMP REQUESTED NG X7,RIN8 IF FORCED DUMP MX6 -12 LX7 17-59 BX7 -X6*X7 RIN4 SX2 B3 RJ GPL GET POT LINK SX1 B3 BX1 X1-X7 NZ X1,RIN4 IF NOT YET CURRENT POT SB3 X0 SET FIRST POT TO DROP SB4 X2 SET LAST POT TO DROP RJ DPT DROP POTS * ISSUE DIAGNOSTIC. RIN5 SA1 A0+VDCT SB3 B0 SET NO POT AVAILABLE LX1 59-57 PL X1,PCSX IF USER NOT LOGGED IN SMA X6,(NO PRIMARY FILE."NL") SA1 A0+VFNT LX1 59-12 PL X1,RIN6 IF NO WRITE LOCKOUT SMA X6,(WRITE ON READ-ONLY FILE."NL") RIN6 IFMUX RIN7 SA1 A0+VDPT CLEAR *INPUT INITIATED* SX7 1S16 BX7 -X7*X1 SA7 A1 REWRITE VDPT EQ PCS5 ISSUE MESSAGE RIN7 SA1 A0+VSTT MX2 -12 BX3 -X2*X1 ZR X3,PCS5 IF OUTPUT NOT BACKED UP, ISSUE MESSAGE EQ PCSX NO MESSAGE - PREVENT *ASM* ERRORS * ENTRY TO DROP ENTIRE CHAIN AND ISSUE DIAGNOSTIC. RIN8 SB4 B0 DROP WHOLE CHAIN RJ DPT DROP POTS EQ RIN5 ISSUE MESSAGE RIN9 SX6 3RRIN SET ERROR CODE RJ ABT ABORT IF SENSE SWITCH THREE SET EQ PCSX EXIT SAI SPACE 4,10 ** SAI - SET AUTO INPUT MODE. * * ENTRY - * SEE SSP. SAI SA1 A0+VDCT SET AUTO MODE INPUT BIT SX6 B1 LX6 49 BX6 X6+X1 SA6 A1 JP PCSX EXIT TOT SPACE 4,10 ** TOT - TIME OUT TERMINAL. * * MAKES A TIME DELAY QUEUE ENTRY FOLLOWED BY A WAIT * COMPLETION QUEUE ENTRY TO FTP (FINISH TIMEOUT PROCESSING). TOT BSS 0 ENTRY IFMUX FTP1 SB5 B2 RJ GRT GET QUEUE ENTRY SX7 TOT NZ X4,CJA IF REQUEST, CLEAR QUEUE SB7 TIMQ SA1 STIM MX3 -24 BX3 -X3*X1 SX2 NTODL SX5 TOT$ IX2 X2+X3 SET COMPLETION TIME LX5 48 LX2 24 BX5 X2+X5 RJ MQE MAKE QUEUE ENTRY SX5 FTP$ BX7 X7-X7 SB3 B0 EQ PCS1 EXIT PCM TITLE PCM - PROCESSES ALL TERMINAL COMMANDS. PCM SPACE 4 *** PCM - PROCESSES ALL TERMINAL COMMANDS. * * ALL COMMANDS ARE PROCESSED ON THE BASIS OF WHAT SYSTEM THE * USER IS IN. IN SOME SYSTEMS ABBREVIATED FORMS OF THE * COMMANDS MAY BE ENTERED. IN OTHERS ESPECIALLY *BATCH*, * THE COMMANDS MUST BE ENTERED COMPLETELY. IT SHOULD * BE NOTED ALSO THAT SOME COMMANDS ARE VALID ONLY IN CERTAIN * SYSTEMS. IF NO SYSTEM NAMES ARE GIVEN ON THE COMMAND MACRO * CALL, THEN THE DEFAULT GROUP WILL BE TAKEN. IT SHOULD * BE NOTED THAT THE ABOVE ALLOWS A COMMAND TO HAVE DIFFERENT * MEANINGS, SYNTAX, ETC. IN DIFFERENT SYSTEMS. * * * 1) A MASK TO USE IN COMPARISON OF THE COMMAND WITH * THE COMMAND TABLE IS GENERATED AND THEN THE FIRST * CHARACTER IS CHECKED FOR BEING ALPHABETIC. * THE MINIMUM NUMBER OF CHARACTERS IN THIS MASK IS * DETERMINED BY THE SYSTEM THE USER IS UNDER. * * CURRENTLY THE REQUIREMENTS ARE AS FOLLOWS * SYSTEM MINIMUM CHARACTER MASK * NULL 3 * BASIC 3 * FORTRAN 3 * FTNTS 3 * BATCH 7 * ACCESS 3 * * 2) THE FIRST CHARACTER IS USED TO GET AN ADDRESS TO * START SEARCHING AT IN THE COMMAND TABLE. * * 3) THE COMMAND TABLE IS SEARCHED UNTIL A COMPARISON * IS MADE OR UNTIL THE COMMAND IS OF A LESSER * VALUE THAN THOSE BEING COMPARED AGAINST. THE * COMMAND TABLE IS IN ALPHABETICAL ORDER. * * 4) IF A SUCCESSFUL COMPARISON IS MADE, A CHECK IS MADE * TO SEE IF THE COMMAND IS VALID IN THE SUBSYSTEM. * IF IT ISN,T GO BACK TO STEP (3). * * 5) A CHECK IS MADE AFTER A SUCCESSFUL COMPARISION * TO SEE IF THERE IS ANY OTHER COMMAND BEGINNING * WITH THE SAME GROUP OF CHARACTERS THAT IS LEGAL IN * THE SYSTEM THE USER IS UNDER. IF THERE IS * THE MESSAGE *COMMAND NOT UNIQUE.* IS ISSUED. * * 6) THE MAXIMUM NUMBER OF PARAMETERS IS THEN CHECKED. * IF THE MAXIMUM NUMBER IS EXCEEDED GO TO STEP (8). * * 7) IF THE ABOVE STEPS WERE COMPLETED SUCCESSFULLY, THE * COUNT IS INCREMENTED FOR THE GIVEN COMMAND AND THE * APPROPRIATE PROCESSING ROUTINE IS ENTERED. * * 8) THE APPROPRIATE ERROR PROCESSING ROUTINE IS ENTERED * BASED ON THE SYSTEM THE USER IS IN. * * * ERROR RETURNS- * * *FILE NAME ERROR.* A FILE NAME DOES NOT CONFORM TO ONE OR * MORE OF THE FOLLOWING * 1) A FILE NAME MUST BE SEVEN CHARACTERS OR LESS * 2) A FILE NAME MUST CONTAIN ONLY ALPHANUMERICS * * *TOO MANY PARAMETERS.* THE NUMBER OF PARAMETERS IN THE * COMMAND EXCEED THE NUMBER REQUIRED. * * *INCORRECT PARAMETER.* CHECK PARAMETER DEFINITIONS. * * * ENTRY (SEE SSP). * (B3) = COMMAND POT POINTER. * (B4) = COMMAND POT ADDRESS. * (X7) = COMMAND WORD INDEX. * * CALLS CCM, DMP, IGN, SCT, SSP. PCM BSS 0 ENTRY SA1 A0+VDCT LX1 59-54 NG X1,PCM2 IF DATA MODE INPUT SA1 A0+VROT LX1 59-0 NG X1,PCM1 IF NO ACTIVITY SX5 PCM1$ MAKE QUEUE ENTRY EQ PCS1 MAKE QUEUE ENTRY * DUMP QUEUED DATA TO DISK. PCM1 SA1 A0+VSTT CHECK FOR QUEUED DISK DATA MX2 12 LX2 -12 BX3 X2*X1 BX3 X3+X7 ZR X3,PCM2 IF NO DATA TO DUMP TO DISK SA1 A0+VFNT MX2 42 BX2 X1*X2 ZR X2,RIN8 IF NO PRIMARY FILE SB7 B0 RELEASE SOURCE LINB INPUT SB6 X7 RJ DMP SX5 PCM2$ EQ PCS1 MAKE QUEUE ENTRY * CHECK JOB ACTIVITY. PCM2 SA2 A0+VSTT SX3 2001B CHECK FOR USER BREAK OR LOGOUT IN PROGRESS SA1 B4+X7 READ COMMAND LX3 48-0 BX2 X3*X2 NZ X2,IGN IF USER BREAK OR LOGOUT IN PROGRESS SA2 A0+VUIT ZR X2,IGN IF LOGGED OFF NZ X1,PCM4 IF NOT NULL * ISSUE SHORT STATUS RESPONSE IF NULL COMMAND. PCM3 NG X1,PCM20 IF NEGATIVE RJ DJS DETERMINE JOB STATUS EQ PCS5 ISSUE MESSAGE * CRACK COMMAND TO COMMAND BUFFER. PCM4 RJ CCM CRACK COMMAND SA1 PBUF GET CRACKED COMMAND SA2 CCMA GET PARAMETER COUNT AX2 1 IX3 X2+X1 ZR X3,PCM3 IF SINGLE COMMAND OF BLANKS ** PROCESS COMMAND. * REENTER HERE FROM LAN WHEN PROCESSING SECOND COMMAND. PCM5 BSS 0 SA1 PBUF READ PARAMETER SA2 A1+1 READ SEPARATOR NZ X1,PCM6 IF NOT NULL PARAMETER SX2 X2-1R- NZ X2,PCM6 IF NOT *-* SEPARATOR SA3 =0LBEGIN BX6 X3 SA6 A1 SX6 1R( SB4 5 CHARACTER COUNT PX6 X6,B4 SA6 A2 PCM6 BSS 0 SA1 A0+VSTT DETERMINE MINIMUM CHARACTERS TO PROCESS * BASED ON SYSTEM SA2 PBUF+1 GET COUNT OF CHARACTERS IN COMMAND NAME MX3 -3 LX1 -12 BX3 -X3*X1 EXTRACT CURRENT SUBSYSTEM SX1 X3-MSYS PL X1,PCM18 IF INCORRECT SUBSYSTEM SA1 PCOM+X3 UX2,B4 X2 GET NUMBER OF CHARACTERS RECEIVED UX1,B5 X1 GET MINIMUM TO COMPARE ON SB7 X3+ SET SYSTEM NUMBER SX3 B4 GE B4,B5,PCM7 IF AT OR ABOVE MINIMUM CHARACTER COUNT SX3 B5 PCM7 LX4 X3,B1 CHARACTER COUNT * 6 LX3 2 IX6 X3+X4 MX5 1 GENERATE COMPARISON MASK SB5 X6-1 AX5 X5,B5 GENERATE MASK SA3 A2-B1 GET COMMAND NAME BX1 X3 AX3 54 GET FIRST CHARACTER SX4 X3-1R0 NG X1,PCM18 IF INCORRECT COMMAND PL X4,PCM18 IF INCORRECT COMMAND MX2 -2 BX2 -X2*X3 GET LOWER TWO BITS AX3 2 USE UPPER THREE BITS TO INDEX TABLE SA4 TCOMA+X3 GET INDEX WORD SX2 X2+B1 SHIFT COUNT = (BYTE + 1) * 12 LX2 2 GET BYTE IN INDEX WORD LX3 X2,B1 IX3 X2+X3 SB4 X3 SET SHIFT COUNT MX2 -12 LX4 X4,B4 BX6 -X2*X4 SX0 B1+ PCM8 SA2 TCOM+X6 GET NEXT COMMAND BX3 X5*X2 IX3 X1-X3 NG X3,PCM18 IF INCORRECT COMMAND SX6 X6+2 NZ X3,PCM8 IF NO FIND SA3 A2+B1 CHECK IF COMMAND VALID LX4 X0,B7 SET SYSTEM MASK BIT LX4 18 BX7 X4*X3 ZR X7,PCM8 IF NOT VALID FOR THIS SYSTEM SB5 X2 SET COMMAND PROCESSOR ADDRESS MX6 42 SAVE FULL COMMAND NAME BX6 X6*X2 BX2 X1-X6 ZR X2,PCM9 IF COMPLETE COMMAND SA2 A3+B1 CHECK UNIQUENESS BX2 X5*X2 BX2 X1-X2 NZ X2,PCM9 IF COMMAND UNIQUE SA2 A2+B1 BX4 X4*X2 NZ X4,PCM16 IF COMMAND NOT UNIQUE TO THIS SYSTEM PCM9 SA6 PBUF BX2 X3 RJ CFC COUNT COMMAND CHARACTERS BX3 X2 SA1 PBUF+1 GET SEPARATOR UX6,B7 X1 PX6 B6,X6 SA6 A1 SA1 A0+VROT IX6 X3+X0 INCREMENT COMMAND COUNT LX1 59-11 SX4 X6 PL X4,PCM10 IF NO COMMAND COUNT OVERFLOW BX6 X3 PCM10 NG X1,PCM15 IF ERROR ON LAST OPERATION AX1 48 MX2 -5 BX1 -X2*X1 SX1 X1-1 NG X3,PCM12 IF SECONDARY COMMAND ZR X1,PCM11 IF STATUS IDLE SMA X6,( JOB ACTIVE."NL") RJ SSP EQ PCS5 ISSUE MESSAGE PCM11 TA4 B2,VRAP NZ X4,PCM20 IF REENTRY TABLE ENTRY TO BE PROCESSED PCM12 AX3 48 GET NUMBER OF LEGAL PARAMETERS MX5 -6 SA2 CCMA BX5 -X5*X3 IX5 X5-X2 NG X5,PCM17 IF TOO MANY PARAMETERS IFMUX PCM14 IF MUX TERMINAL BX5 X6 LX5 59-57 NG X5,PCM18 IF COMMAND INCORRECT FOR NETWORK PCM14 SA6 A3 UPDATE COMMAND COUNT RJ SSP JP B5 PROCESS COMMAND PCM15 MX6 -59 CLEAR ERROR FLAG BX6 -X6*X1 LX6 12 SA6 A1 SMA X0,( SYSTEM ERROR."NL") RJ SSP EQ PCM21 SEND ERROR MESSAGE PCM16 SMA X0,( COMMAND NOT UNIQUE."NL") RJ SSP EQ PCM21 SEND ERROR MESSAGE PCM17 SMA X0,( TOO MANY PARAMETERS."NL") EQ PCM19 PROCESS ERROR PCM18 SMA X0,( INCORRECT COMMAND."NL") PCM19 RJ SSP SA1 A0+VROT CHECK FOR ACTIVITY MX2 -5 BX3 -X2*X1 SX4 X3-1 NZ X4,PCM21 IF NOT IDLE SA1 A0+VSTT READ VSTT MX4 -3 LX1 -12 BX1 -X4*X1 EXTRACT CURRENT SUBSYSTEM SA1 PCOM+X1 READ ERROR PROCESSOR ADDRESS SB6 X1+ JP B6 GO TO SYSTEM ERROR PROCESSOR PCM20 SMA X0,( INCORRECT COMMAND."NL") RJ SSP PCM21 SA1 TCOMI+1 COUNT INCORRECT COMMAND SX7 X1+B1 SA7 A1 BX6 X0 GET MESSAGE ADDRESS EQ PCS5 ISSUE MESSAGE PCM TITLE PCM - TERMINAL USER,S COMMANDS. ** TCOM - TELETYPE USER,S VALID COMMAND TABLE. * ALL COMMANDS MUST BE ENTERED IN THIS TABLE IN ALPHABETICAL * ORDER. * SEE MACRO USECMN FOR A DESCRIPTION OF THE TABLE FORMAT. TCOM SPACE 4 *** THE FOLLOWING IS A LIST OF ALL OF THE COMMANDS THAT MAY BE * ISSUED BY THE TTY USER. MOST OF THE COMMANDS MAY BE ISSUED * IN ALL SYSTEMS EXCEPT THE ACCESS SYSTEM. SOME COMMANDS * ARE RESTRICTED TO CERTAIN SYSTEMS. IN THE BATCH SYSTEM * ANY COMMAND WHICH CANNOT BE INTERPETED WILL BE ISSUED AS * A COMMAND. ANY COMMAND WHICH IS ISSUED IN A SYSTEM * WHICH IT IS NOT LEGAL FOR WITH THE EXCEPTION OF BATCH * WILL RETURN * INCORRECT COMMAND.* U3 MICRO 1,1,* * FIRST CHARACTER OF LAST COMMAND PROCESSED PARC EQU 10 NUMBER OF PARAMETER POSITIONS TO BE * CLEARED IN PBUF BY CCM. USED FOR * INSURING DEFAULTS FOR *RESEQ* FOR EXAMPLE TCOM BSS 0 ACCESS SPACE 4 *** ACCESS. * * SETS THE USER-S SYSTEM TO *ACCESS* IF VALIDATED (*CTPC* SET * IN *AACW*). IF NOT VALIDATED, * INCORRECT COMMAND.* WILL BE * RETURNED. USECMN ACCESS,ACC,,,,(ALL) SPACE 4,10 *** ADMIT. * * ALLOWS USER TO GRANT EXPLICIT PERMISSION TO ACCESS TAPE * FILE(S) TO ANOTHER USER. (SEE TMS REFERENCE MANUAL FOR * DETAILS. USECMN ADMIT,PBS,0 ALTER SPACE 4,10 *** ALTER,LINES,/STR1/STR2/. * * REPLACES CHARACTER STRINGS IN SPECIFIED PRIMARY FILE LINES. * * LINES = ANY NUMBER OF LINE NUMBERS AND LINE RANGES, * IN ASCENDING ORDER. THIS PARAMETER IS OPTIONAL. * /STR1/STR2/ = TWO SEQUENCES OF CHARACTERS SEPARATED BY AND * DELIMITED BY A STRING DELIMITER. EITHER SEQUENCE MAY * BE NULL. USECMN ALTER,IED,0 SPACE 4,10 *** AMEND. * * ALLOWS USER TO AMEND THE CATALOG ENTRY FOR A TAPE FILE. * (SEE TMS REFERENCE MANUAL FOR DETAILS.) USECMN AMEND,PBS,0 APL SPACE 4 *** APL,XXXXX * * CALL *APL*. * * PARAMETER - * XXXXX = TERMINAL TYPE FOR APL PROCESSING. USECMN APL,PBS,0 APP SPACE 4 *** APPEND,LFN=PFN. * * THIS ALLOWS THE USER TO APPEND THE CONTENTS OF FILE *LFN* * TO FILE *PFN*. (SEE PFILES) USECMN APPEND,PSS,0 SPACE 4,10 *** APPSW,AP=ANAME,OP. * * THIS COMMAND ALLOWS THE USER TO SWITCH TO THE APPLICATION * *ANAME*, AND TO OPTIONALLY PASS INFORMATION TO THAT * APPLICATIOIN WITH THE *Z* PARAMETER. USECMN APPSW,PBS,0 ASCII SPACE 4 *** ASCII. * * SETS THE FLAG TO THE DRIVER FOR ASCII CONVERSION. USECMN ASCII,PBS,,,,(ALL) ATTACH SPACE 4 *** ATTACH. * * SEE *PFILES* DOCUMENTATION. USECMN ATTACH,RPF,0 SPACE 4,10 *** AUDIT. * * ALLOWS USER TO OBTAIN INFORMATION ABOUT THE FILES THAT * RESIDE IN THE USERS TAPE FILE CATALOG OR ARE PERMITTED TO * ACCESS IN AN ALTERNATE USERS CATALOG. (SEE TMS REFERENCE * MANUAL FOR DETAILS.) USECMN AUDIT,PBS,0 AUTO SPACE 4 *** AUTO,NNN,YYY. * * THIS ALLOWS THE USER TO HAVE THE SYSTEM SUPPLY HIM * WITH LINE NUMBERS AUTOMATICALLY. THIS MODE IS CLEARED * ANYTIME A COMMAND LINE IS ENTERED. IT IS POSSIBLE * TO GET OUT OF THIS MODE BY ENTERING A COMMAND LINE. * * PARAMETERS- * NNN = STARTING LINE NUMBER. IF NULL, 100 IS ASSUMED. * YYY = AMOUNT TO INCREMENT EACH LINE NUMBER BY. IF NULL, * 10 IS ASSUMED. * * ERRORS- * *INCORRECT PARAMETER.* = THE INCREMENT IS MORE THAN 4095 * OR THE STARTING LINE NUMBER IS MORE THAN FIVE * DIGITS. USECMN AUTO,AUT,3 BASIC SPACE 4 *** BASIC,NNNNN. * * THIS DEFINES THE SYSTEM TYPE TO BE *BASIC*. IF THERE * HAS BEEN NO FILE PREVIOUSLY DEFINED, THE USER IS ASKED * *OLD, NEW, OR LIB FILE *. * * PARAMETERS- * NNNNN = OPTIONAL ADDITIONAL COMMAND STRING. USECMN BASIC,LAN1,0,,,(ALL) BATCH SPACE 4 *** BATCH,NNNNN. * * THIS COMMAND ALLOWS THE USER TO ENTER STANDARD *NOS* * BATCH COMMANDS AS WELL AS THE *IAFEX* COMMANDS THAT * ARE DESIGNATED VALID FOR THIS SYSTEM. IF A COMMAND CANNOT * BE INTERPRETED BY *IAFEX* IN THIS MODE IT WILL THEN BE * PASSED ONTO THE SYSTEM AS A COMMAND. * * PARAMETERS- * NNNNN = AMOUNT OF FL THESE JOBS ARE TO RUN IN. * IF *NNNNNN* IS NOT GIVEN, THEN THE DEFAULT *VBFL* IS USED. USECMN BATCH,BAT,2,,,(ALL) BEGIN SPACE 4,10 *** BEGIN. * * SEE CYBER CONTROL LANGUAGE DOCUMENTATION. USECMN BEGIN,PSS,0 BINARY SPACE 4 *** BINARY,X,Y * * THIS ALLOWS THE USER TO INPUT BINARY DATA FROM THE TERMINAL * TO HIS PRIMARY FILE. * X = NUMBER OF CHARACTERS/LINE. * Y = TERMINATION CHARACTER IN OCTAL. USECMN BINARY,BIN,3,INVN BRIEF SPACE 4,10 *** BRIEF. * * SETS BRIEF MODE, WHICH SUPPRESSES THE ISSUANCE OF * FULL OR PARTIAL HEADER RESPONSES TO COMMANDS. BRIEF * MODE IS CLEARED BY THE *NORMAL* COMMAND. USECMN BRIEF,BRF BYE SPACE 4 *** BYE,ANAME. * * LOGS THE USER OFF AFTER ISSUING ACCOUNTING INFORMATION. * * PARAMETERS: * * ANAME NEXT APPLICATION TO BE LOGGED INTO. ONLY * *IAF* IS VALID FOR MULTIPLEXER TERMINALS. USECMN BYE,PBS,0,CHGR,,(ALL) CATLIST SPACE 4 *** CATLIST. * SEE *CATLIST* DOCUMENTATION. USECMN CATLIST,PBS,0 CHANGE SPACE 4 *** CHANGE. * ALLOWS USER TO CHANGE THE CATALOG ENTRY * FOR A FILE (SEE PFILES). USECMN CHANGE,PBS,0 CHARGE SPACE 4 *** CHARGE,XXXXXXXXXX,YYYYYYYYYYYYYYYYYYYY. * * THIS COMMAND IS USED TO ENTER AN ACCOUNT FILE MESSAGE AND * VALIDATE THE CHARGE NUMBER *XXXXXXXXXX* AND PROJECT NUMBER * *YYYYYYYYYYYYYYYYYYYY* IF REQUIRED. * UP TO 10D CHARACTERS MAY BE ENTERED FOR CHARGE NUMBER * AND UP TO 20D FOR PROJECT NUMBER. * WHEN CHARGE NUMBER IS REQUIRED, ONLY THE FOLLOWING COMMANDS * MAY BE ENTERED * CHARGE,XXXXXXXXXX,YYYYYYYYYYYYYYYYYYYY. * HELLO. * LOGIN. * BYE. USECMN CHARGE,PBS,0,CHGR,,(ALL) CHVAL SPACE 4,10 *** CHVAL(DI=DATA,...,DI=DATA) * * CHANGE USER VALIDATION DATA. * * DI = DATA IDENTIFIER. * DATA = VALUE TO BE ASSIGNED. * * ALLOWED DATA IDENTIFIERS ARE - * UC=OTSC. SET USER DEFAULT SERVICE CLASS *SC* FOR ORIGIN * TYPE *OT*. USECMN CHVAL,PBS,0 CLASS SPACE 4,10 *** CLASS,SC=SC,OT=OT,L=LFN,A. * * DISPLAY AND/OR CHANGE CURRENT SERVICE CLASS OF JOB. * * SC = SERVICE CLASS. * OT = ORIGIN TYPE. * L = OUTPUT FILE NAME. * A = ABORT MODE. USECMN CLASS,PBS,0 CLEAR SPACE 4 *** CLEAR. * * RETURN ALL FILES EXCEPT FOR PRIMARY FILE. USECMN CLEAR,PBS,0 CVT SPACE 4,10 *** CONVERT(P1,...,PN) * * CALLS *CONVERT* UTILITY TO CONVERT FILE FORMATS FROM * 63 TO 64 CHARACTER SET OR FROM NEW TO OLD CHARACTER * SET. USECMN CONVERT,PBS,0 CSET SPACE 4,10 *** CSET,PARAM. * * SETS TERMINAL TO NORMAL OR ASCII CHARACTER SET MODE. * * PARAMETERS- * PARAM = *ASCII*. SET EXTENDED CHARACTER SET MODE. * = *NORMAL*. SET NORMAL MODE. * * ERRORS- * *INCORRECT PARAMETER.* = AN UNRECOGNIZABLE PARAMETER * OR NO SECOND PARAMETER WAS ENTERED. USECMN CSET,PBS,2,,,(ALL) DAYFILE SPACE 4 *** DAYFILE. * * PRINTS THE USER,S CONTROL POINT AREA DAYFILE TO HIS TERMINAL. USECMN DAYFILE,PBS,0 DEFINE SPACE 4 *** DEBUG,PARAM. * * ALLOWS THE USER TO ACTIVATE, TERMINATE OR RESUME * DEBUG MODE. * * PARAMETERS- * PARAM = *ON* DEFAULT. ACTIVATES DEBUG MODE. * WHENEVER A RELOCATABLE BINARY PROGRAM * IS LOADED AND EXECUTED, CYBER * INTERACTIVE DEBUG IS LOADED AND GIVEN * CONTROL. * = *OFF* TERMINATES DEBUG MODE. * = *RESUME* RESUME THE DEBUG SESSION SUSPENDED * BY THE LAST EXECUTION OF THE SUSPEND * COMMAND. USECMN DEBUG,PBS,0 SPACE 4 *** DEFINE. * * SEE *PFILES* DOCUMENTATION. USECMN DEFINE,PBS,0 DELETE SPACE 4,15 *** DELETE,LINES,/STRING/. * * THIS PRIMARY FILE EDITING COMMAND DELETES LINES SPECIFIED * BY LINE NUMBER OR CHARACTER CONTENT. * * LINES = ANY NUMBER OF LINE NUMBERS OR LINE RANGES, IN * ASCENDING ORDER. * /STRING/ = NON-NULL SEQUENCE OF CHARACTERS DELIMITED BY A * STRING DELIMITER. * * EITHER PARAMETER MAY BE OMITTED. USECMN DELETE,IED,0 DIAL SPACE 4 *** DIAL,NNNN,AAAAAAAAA. * * ALLOWS ONE USER TO SEND A MESSAGE TO ANOTHER USER. * * PARAMETERS- * NNNN = TERMINAL *JSN*. MAY BE DETERMINED BY COMMAND * *USER,USERNUM.*. * AAAAA = THE MESSAGE TO BE SENT. (IT MAY BE UP TO ONE TTY * LINE IN LENGTH INCLUDING THE COMMAND. USECMN DIAL,DIA,0,,,(ACCS) DROP SPACE 4,10 *** DROP,JSN,Q,UJN. * * DROPS A JOB OR QUEUE FILE FROM ANY QUEUE OR CONTROL POINT. * ANY COMBINATION OF PARAMETERS MAY BE SPECIFIED. * * JSN = JOB SEQUENCE NUMBER. * Q = QUEUE TYPE: PR, PU, PL, IN, EX, TT, ALL. * UJN = USER JOB NAME. USECMN DROP,PBS,0 DUP SPACE 4,15 *** DUP,LR,N,Z. * * DUPLICATES LINE(S) FROM ONE PLACE IN A PRIMARY FILE * IN ANOTHER PLACE. * * LR = LINE NUMBER OR RANGE OF LINES TO BE DUPLICATED. * N = LINE NUMBER AFTER WHICH TO INSERT DUPLICATED LINES. * Z = LINE NUMBER INCREMENT USED TO GENERATE NEW LINE NUMBERS * ON DUPLICATED LINES. * * N AND Z ARE OPTIONAL. USECMN DUP,IED,0 EDIT SPACE 4 *** EDIT,LFN,AS. * * INITIATES THE TEXT EDITOR. * * PARAMETERS- * LFN = NAME OF THE FILE TO BE EDITED. IF NULL, THE PRIMARY * FILE NAME IS ASSUMED. * AS = EDIT FILE IN ASCII MODE. * (NOT REQUIRED IF TERMINAL IN ASCII MODE.) USECMN EDIT,EDI,9 ENQ SPACE 4,10 *** ENQUIRE,N. * ALLOWS USER TO FIND OUT HIS CURRENT STATUS. * * THIS COMMAND IS IDENTICAL IN ITS FUNCTION AND PARAMETERS * TO THE *STATUS* COMMAND (Q.V.). IT IS RECOMMENDED * THAT THIS FORM OF THE COMMAND BE USED WHEN IT IS * UNDESIRABLE TO ENTER THE LETTER *S* WHICH INITIATES * THE *STATUS* COMMAND. USECMN ENQUIRE,STA,0,SCOM,,(ALL) EFFECT SPACE 4 *** EFFECT,PARAM. * * SET USER OR SYSTEM SUPPLIED FORMAT EFFECTOR MODE. IF * *SYSTEM* IS ENTERED, THEN IAFEX WILL GENERATE FORMAT * EFFECTORS FOR OUTPUT. IF *USER* IS ENTERED, THE * PROGRAM/USER MUST GENERATE ITS OWN FORMAT EFFECTORS FOR * OUTPUT. * * PARAMETERS- * PARAM = *SYSTEM*. SET SYSTEM SUPPLIED FORMAT EFFECTOR MODE. * = *USER*. SET USER SUPPLIED FORMAT EFFECTOR MODE. * = (OMITTED) = *SYSTEM*. * * ERRORS- * *ILLEGAL PARAMETER.* = AN UNRECOGNIZABLE PARAMETER * WAS ENTERED. USECMN EFFECT,PBS,2,,,(ALL) EXECUTE SPACE 4 *** EXECUTE,NNNNN. * * SETS THE SYSTEM TYPE TO EXECUTE. * IF THERE HAS BEEN NO FILE SPECIFIED, THE USER IS ASKED * *OLD OR LIB FILE *. * NNNNN = OPTIONAL ADDITIONAL COMMAND STRING. USECMN EXECUTE,LAN4,PARL,,,(ALL) EXPLAIN SPACE 4 *** EXPLAIN. * * ALLOWS USER TO ACCESS ON-LINE DOCUMENTATION. USECMN EXPLAIN,PBS,0,,,(ALL) SPACE 4,10 *** FCOPY. * * CONVERT FILE FROM ONE CODE SET TO ANOTHER CODE SET. USECMN FCOPY,PBS,0 FORTRAN SPACE 4 *** FORTRAN,NNNNN. * * SETS THE SYSTEM TYPE TO *FORTRAN*. OTHERWISE IT IS * THE SAME AS THE *BASIC* COMMAND. USECMN FORTRAN,LAN2,0,,,(ALL) FSE SPACE 4,10 *** FSE,LFN,ASCII. * * THIS COMMAND EXECUTES THE FULL SCREEN EDITOR. * * LFN = LOCAL FILE TO BE EDITED. IF OMITTED, ATTEMPT * TO RESUME PREVIOUS EDIT SESSION. * ASCII = PROCESS FILE AS 6/12 ASCII CODE IF THIS * PARAMETER IS PRESENT AND STARTS WITH *A*. USECMN FSE,PSS,0,,,(ALL) FTNTS SPACE 4 ** FTNTS,NNNN. * * SETS THE SYSTEM TYPE TO *FTNTS*. OTHERWISE IT IS THE * SAME AS THE *BASIC* COMMAND. USECMN FTNTS,LAN3,0,,,(ALL) FULL SPACE 4 *** FULL. * * SETS FULL DUPLEX TERMINAL OPERATION. USECMN FULL,FDP,,SCOM+INVN,,(ALL) GET SPACE 4 *** GET,LFN=PFN. * * THIS ALLOWS THE USER TO GET A FILE FROM THE PERMANENT * FILE SYSTEM. (SEE PFILES) USECMN GET,RPF,0 GOODBYE SPACE 4 *** GOODBYE,ANAME. * * SEE *BYE.* USECMN GOODBYE,PBS,0,CHGR,,(ALL) HALF SPACE 4 *** HALF. * * SETS HALF DUPLEX TERMINAL OPERATION. USECMN HALF,HDP,,SCOM+INVN,,(ALL) HELLO SPACE 4 *** HELLO,ANAME. * * SAME AS *BYE,ANAME* IF ANAME IS PRESENT. IF *ANAME* * IS OMITTED, *IAF* IS ASSUMED. USECMN HELLO,PBS,0,CHGR,,(ALL) HELP SPACE 4 *** HELP. * * USER DOCUMENTATION. USECMN HELP,PBS,,,,(ALL) HELPME SPACE 4 *** HELPME. * * WILL DESCRIBE AND EXECUTE NOS COMMANDS FOR ON-LINE * USERS. USECMN HELPME,PBS,,,,(ALL) LENGTH SPACE 4 *** LENGTH,LFN. * * RETURNS THE FILE TYPE, LAST STATUS, AND LENGTH OF FILE * *LFN*. IF *LFN* IS NULL, THE PRIMARY FILE NAME IS USED. * * PARAMETERS- * LFN = LOGICAL FILE NAME. (THIS DOES NOT RETURN THE LENGTH * OF A PERMANENT FILE.) USECMN LENGTH,LEN,2 LIBRARY SPACE 4 *** LIB. * LIB,LFN=PFN. * * SAME AS *OLD,PFN/UN=LIBRARY.* USECMN LIB,PFC,0 LIMITS SPACE 4 *** LIMITS. * THIS COMMAND DISPLAYS A USERS CURRENT * VALIDATION FILE PARAMETERS. USECMN LIMITS,PBS,0,,,(ALL) LINE SPACE 4,10 *** LINE. * LINE,TM=MNEMONIC. * LINE,MNEMONIC. * * SETS THE TERMINAL IN LINE MODE AND OPTIONALLY SETS THE * TERMINAL MODEL. * * PARAMETERS- * MNEMONIC = TERMINAL MODEL. USECMN LINE,PBS,0 LIST SPACE 4,20 *** LIST,LINES,/STRING/. * LIST,LINE,F=LFN. * * ALLOWS THE USER TO LIST SELECTED LINES FROM PRIMARY AND * SECONDARY FILES TO THE TERMINAL. * * FIRST SYNTAX - PRIMARY FILES ONLY. * * LINES = ANY NUMBER OF LINE NUMBERS OR LINE RANGES * IN ASCENDING ORDER. * /STRING/ = A DELIMITED SEQUENCE OF CHARACTERS. * * SECOND SYNTAX - ANY LOCAL FILE. * * LINE = ONE LINE NUMBER OR ONE LINE RANGE. ONLY ONE * SUCH PARAMETER MAY APPEAR WHEN F=LFN IS SPECIFIED. * LFN = FILE TO BE LISTED. IF OMITTED, PRIMARY FILE ASSUMED. * * ALL PARAMETERS ARE OPTIONAL. USECMN LIST,LIS,0 LNH SPACE 4 *** LNH,LINES,/STRING/. * LNH,LINE,F=LFN. * * THIS COMMAND WORKS THE SAME AS *LIST*. USECMN LNH,LIS,0 LOGIN SPACE 4 *** LOGIN,ANAME. * * SAME AS *HELLO* USECMN LOGIN,PBS,0,CHGR,,(ALL) LOGOUT SPACE 4,10 *** LOGOUT,ANAME. * * SAME AS *BYE,ANAME*. USECMN LOGOUT,PBS,0,CHGR,,(ALL) LO72 SPACE 4 *** LO72. * SEE LO72 DOCUMENTATION. USECMN LO72,PBS MOVE SPACE 4,15 *** MOVE,LR,N,Z. * * THIS PRIMARY FILE EDITING COMMAND MOVES LINES FROM ONE PLACE * TO ANOTHER, DELETING THE ORIGINAL LINES. * * LR = LINE NUMBER OR RANGE OF LINES TO BE MOVED. * N = LINE NUMBER AFTER WHICH TO INSERT THE MOVED LINES. * Z = LINE NUMBER INCREMENT USED TO GENERATE NEW LINE NUMBERS * ON MOVED LINES. * * N AND Z ARE OPTIONAL. USECMN MOVE,IED,0 NEW SPACE 4 *** NEW,LFN. * * THIS CAUSES ALL OF THE USER,S CURRENT FILES (NON-PERMANENT) * TO BE PURGED. A NEW PRIMARY FILE IS THEN ESTABLISHED FOR * THE USER. * * PARAMETERS- * LFN = OPTIONAL FILE NAME. * * RETURN- * *FILE NAME * = USER SUPPLIES FILE NAME. USECMN NEW,PFC,3 NORMAL SPACE 4 *** NORMAL. * * CLEARS THE SPECIAL OPTIONS ASCII, BRIEF, AND TAPE * MODES AND ODD PARITY. USECMN NORMAL,NOR,,,,(ALL) NOSORT SPACE 4 *** NOSORT. * * ALLOWS THE USER TO PREVENT HIS PRIMARY FILE FROM BEING * SORTED ON A LIST OR A RUN COMMAND. THIS COMMAND MUST * BE ENTERED AFTER ALL CORRECTION LINES HAVE BEEN ENTERED * TO BE EFFECTIVE. USECMN NOSORT,NOS NULL SPACE 4 *** NULL. * * CLEARS ALL SUB-SYSTEMS. USECMN NULL,LAN,,,,(ALL) OLD SPACE 4 *** OLD. * OLD,LFN=PFN/UN=USERNUM,PW=PASSWOR. * * IF FIRST FORM IS USED THEN USER IS ASKED FOR FILE NAME. * SAME AS *GET* EXCEPT THAT PRIMARY FILE NAME IS SET TO LFN. USECMN OLD,PFC,0 PACK SPACE 4 *** PACK,LFN1,LFN2,NR. * * READS LFN1 TO EOI AND WRITES IT TO LFN2 AS ONE LOGICAL * RECORD. IF LFN1 AND LFN2 ARE NULL, THEN THE PRIMARY FILE * IS PACKED AND WRITTEN BACK. IF NR IS SPECIFIED AND LFN1 * IS NOT THE PRIMARY FILE, LFN1 IS NOT REWOUND BEFORE * THE PACK. USECMN PACK,PAC,4 PACKNAM SPACE 4,10 *** PACKNAM,PN=DNAM,R=TYPE. * * DIRECTS SUBSEQUENT PERMANENT FILE REQUESTS TO THE * NAMED AUXILIARY DEVICE *DNAM* OF TYPE *TYPE*. THE *PN=* * PORTION OF *PN=DNAM*, AND *R=TYPE*, ARE OPTIONAL. USECMN PACKNAM,PBS,5,,,(ALL) PARITY SPACE 4 *** PARITY,PARAM. * * SETS TERMINAL PARITY. IF NO PARAMETER IS ENTERED, * ODD PARITY IS ASSUMED. * * PARAMETERS- * PARAM = *ODD*. SET ODD PARITY. * = *EVEN*. SET EVEN PARITY. * * ERRORS- * *INCORRECT PARAMETER.* = AN UNRECOGNIZABLE PARAMETER * WAS ENTERED. USECMN PARITY,PAR,2,SCOM+INVN,,(ALL) PASSWORD SPACE 4 *** PASSWOR,OLD,NEW. * * ALLOWS THE USER TO CHANGE HIS PASSWORD. * * PARMETERS- * OLD = USER,S CURRENT PASSWORD. * NEW = NEW PASSWORD. USECMN PASSWOR,PBS,3,,,(ALL) PERMIT SPACE 4 *** PERMIT. * * ALLOWS THE USER TO GRANT AN EXPLICIT PERMISSION TO ACCESS * ONE OF HIS FILES TO ANOTHER USER. (SEE PFILES) USECMN PERMIT,PBS,0 PRI SPACE 4,10 *** PRIMARY,LFN. * * MAKES LOCAL FILE *LFN* PRIMARY FILE. USECMN PRIMARY,PFC,2 PURGE SPACE 4 *** PURGE,PFN/UN=USERNUM. * * ALLOWS A USER TO PURGE A FILE FROM THE PERMANENT FILE * SYSTEM. (SEE PFILES) USECMN PURGE,SAV,0 QGET SPACE 4,15 *** QGET,JSN,Q,UJN. * * ALLOWS USERS TO OBTAIN JOB OUTPUT FROM PRINT, PUNCH OR PLOT * QUEUES. * * JSN = JOB SEQUENCE NUMBER OF QUEUE FILE. * Q = QUEUE TYPE: PR, PU, PL OR TT. PR IS DEFAULT. * UJN = USER JOB NAME OF QUEUE FILE. * * EITHER JSN OR UJN MUST BE SPECIFIED. THE LOCAL FILE NAME OF * THE QUEUE FILE WILL BE JSN IF SPECIFIED, OR UJN IF * JSN IS OMITTED. USECMN QGET,PBS,0 READ SPACE 4,15 *** READ,LFN,N,Z. * * THIS COMMAND ADDS THE CONTENTS OF A FILE TO THE PRIMARY FILE. * * LFN = FILE TO ADD TO PRIMARY FILE. LINE NUMBERS ARE OPTIONAL * ON THIS FILE. * N = NUMBER OF LINE AFTER WHICH TO INSERT FILE. * Z = LINE NUMBER INCREMENT. * * N AND Z ARE OPTIONAL. USECMN READ,IED,0 RECOVER SPACE 4 *** RECOVER,NNNN. * * THIS COMMAND ALLOWS A USER TO ATTEMPT TO PICK UP FROM WHERE * HE WAS AT AFTER A LOSS OF COMMUNICATIONS OR A SYSTEM * FAILURE, OR A USER DETACH. * * PARAMETERS- * NNNN = JSN OF JOB TO RECOVER. * * REPLYS- * *JOB NOT FOUND.* JSN WAS NOT IN EJT. * *JOB NOT DETACHED.* JSN POINTS TO NON-DTCS JOB. * *JOB NOT RECOVERABLE.* SOME OTHER REASON PREVENTED RECOVERY, * I.E. BAD ROLLOUT FILE. USECMN RECOVER,PBS,0,,,(ALL) SPACE 4,10 *** RELEASE. * * ALLOWS USER TO RELEASE ONE OR MORE TAPE FILES FROM THE * USERS TAPE CATALOG. (SEE TMS REFERENCE MANUAL FOR DETAILS.) USECMN RELEASE,PBS,0 RENAME SPACE 4 *** RENAME,LFN1=LFN2. * * CHANGES THE NAME OF FILE *LFN2* TO NAME *LFN1*. IF FILE * *LFN1* WAS PREVIOUSLY DEFINED IT IS DROPPED. USECMN RENAME,PBS,0 REPLACE SPACE 4 *** REPLACE,LFN=PFN. * * ALLOWS THE USER TO REPLACE A FILE THAT HE HAS SAVED IN * THE PERMANENT FILE SYSTEM. (SEE PFILES) USECMN REPLACE,SAV,0 RESEQ SPACE 4 *** RESEQ,NNNNN,YYYYY,T * * ALLOWS THE USER TO RESEQUENCE HIS PRIMARY FILE. * * PARAMETERS- * NNNNN = THE NUMBER TO START THE NEW FILE WITH. * IF NULL, 100 IS ASSUMED. * YYYYY = THE INCREMENT TO BE ADDED TO NNNNN FOR EACH LINE. * IF NULL, 10 IS ASSUMED. * T = TYPE OF FILE. * IF T = *B*, FILE TYPE IS ASSUMED BASIC AND INTERNAL SEQUENCE * NUMBERS ARE RESEQUENCED. * IF T = *T*, A FIVE DIGIT SEQUENCE NUMBER + BLANK ARE ADDED * TO THE BEGINNING OF ALL LINES WITH NO INSPECTION FOR * LEADING LINE NUMBERS. * IF T IS OMITTED, IT DEFAULTS TO *B* IF UNDER BASIC SUBSYSTEM, * OTHERWISE, THE FILE IS TREATED AS A FORTRAN TYPE FILE WHERE * ALL LEADING LINE NUMBERS ARE RESEQUENCED WITH NUMBERS BEING * SUPPLIED WHERE NONE ARE PRESENT. * * ERRORS- * *INCORRECT PARAMETER.* = INCREMENT IS ZERO. USECMN RESEQ,RER,4 SPACE 4,10 *** RESERVE. * * ALLOWS USER TO RESERVE A CENTER-OWNED SCRATCH TAPE. (SEE * TMS REFERENCE MANUAL FOR DETAILS.) USECMN RESERVE,PBS,0 RETURN SPACE 4 *** RETURN,LFN. * * SEE *FILES*. USECMN RETURN,PBS,0 REWIND SPACE 4 *** REWIND,LFN. * * REWINDS FILE *LFN*. USECMN REWIND,PBS,0 RFL SPACE 4,15 *** RFL,CM=NNNNNN,EC=MMMM. * * ALLOWS THE USER TO SPECIFY THE INITIAL RUNNING FIELD LENGTH * FOR EACH SUBSEQUENT JOB STEP. * * PARAMETERS- * NNNNNN = DESIRED CENTRAL MEMORY FIELD LENGTH. THIS VALUE * WILL BE ROUNDED UP TO THE NEAREST 100B. ASSUMED TO BE OCTAL * UNLESS AN 8, 9 OR D SUFFIX PRESENT. * MMMM = DESIRED EXTENDED MEMORY FIELD LENGTH IN OCTAL. MMMM * IS THE ACTUAL EXTENDED MEMORY DIVIDED BY 1000B. USECMN RFL,PBS,5 RNH SPACE 4 *** RNH. * * SAME AS THE *RUN* COMMAND. USECMN RNH,RUN,0,,,(BASS,FORS,FTNS,EXES) ROUT SPACE 4 *** ROUT=XX. * * SETS NUMBER OF RUBOUTS AFTER CARRIAGE RETURN TO XX. * XX MUST BE LESS THAN 31. * IF XX IS NULL, SYSTEM DEFINED NUMBER WILL BE SET. USECMN ROUT,ROT,2,SCOM+INVN,,(ALL) RUN SPACE 4 *** RUN,B=LFN,C=LFN,I=LFN,T,Q1,Q2,QN. * * ALLOWS THE USER TO COMPILE IF NECESSARY AND BEGIN EXECUTION * OF HIS PROGRAM. * * PARAMETERS- * THE FOLLOWING ARE OPTIONAL * B = SPECIFIES THAT A BINARY FILE CONTAINING THE OBJECT * CODE IS TO BE GENERATED ON FILE *LFN*. * C = SAME AS *B*. * I = USE FILE LFN INSTEAD OF PRIMARY FILE. FILE IS ASSUMED * SORTED. * T = TRANSMIT THE FOLLOWING PARAMETER STRING AS A CONTROL * COMMAND STRING FOLLOWING THE FILE NAME. APPLIES TO EXECUTE * SYSTEM ONLY. USECMN RUN,RUN,0,,,(BASS,FORS,FTNS,EXES) SAVE SPACE 4 *** SAVE,LFN=PFN. * * SAME AS *REPLACE* EXCEPT THAT THE FILE *PFN* CANNOT * PREVIOUSLY EXIST IN THE PERMANENT FILE SYSTEM. (SEE PFILES) USECMN SAVE,SAV,0 SCOPY SPACE 4,10 *** SCOPY,LFN. * * THIS COMMAND COPIES LFN FROM PRESENT POSITION TO EOF TO THE * OUTPUT FILE, REPORTING FILE STRUCTURE (EOR-S AND EOF-S) IN * READABLE FORMAT. FOR OTHER PARAMETERS AVAILABLE ON THIS * COMMAND, SEE THE NOS REFERENCE MANUAL, VOLUME ONE. * * LFN = LOCAL FILE NAME, DEFAULT INPUT. USECMN SCOPY,PBS,0 SCREEN SPACE 4,10 *** SCREEN. * SCREEN,TM=MNEMONIC. * SCREEN,MNEMONIC. * * SETS THE TERMINAL IN SCREEN MODE AND OPTIONALLY SETS THE * TERMINAL MODEL. * * PARAMETERS- * MNEMONIC = TERMINAL MODEL. USECMN SCREEN,PBS,0 SETASL SPACE 4,12 *** SETASL,SSSSS * * ALLOWS THE USER TO SPECIFY HIS TOTAL ALLOWABLE SRU * ACCUMULATON. * * PARAMETERS - * SSSSS = DESIRED SRU ACCOUNT BLOCK LIMIT. THIS VALUE WILL BE * ROUNDED UP TO THE NEAREST 10. ASSUMED TO BE IN DEFAULT * BASE UNLESS POST RADIX GIVEN. IF NULL, DEFAULT IS ASSUMED. USECMN SETASL,PBS,2 SETFS SPACE 4,15 *** SETFS,LFN1,LFN2,...,LFNN/FS=FS. * SETFS,*,LFN1,LFN2,...,LFNN/FS=FS. * * SET THE AUTO-DROP OR NO-AUTO-DROP STATUS ON FILES ASSIGNED * TO YOUR JOB. IF NO-AUTO-DROP IS SET, THE FILE IS NOT * RELEASED FROM YOUR JOB BY COMMANDS *NEW*, *OLD*, *CLEAR*, * +RETURN,*+ OR +UNLOAD,*+. THE FIRST FORMAT ASSIGNS THE * SPECIFIED STATUS TO THE FILES LISTED. THE SECOND FORMAT * ASSIGNS THE SPECIFIED STATUS TO ALL FILES ASSIGNED TO THE * JOB, EXCEPT THE FILES LISTED. * * LFNX = LOCAL FILE NAME. * FS = SPECIFIES EITHER THE AUTO-DROP (FS=AD) OR NO-AUTO- * DROP (FS=NAD) STATUS. THE DEFAULT FOR USER-CREATED * FILES IS AUTO-DROP. SETFS USECMN SETFS,PBS,0 SETJOB SPACE 4,10 *** SETJOB,UJN,DC,OP. * * SPECIFIES USER JOB NAME, DISPOSITION OF DETACHED JOB OUTPUT * UPON JOB COMPLETION, OR END OF JOB PROCESSING FOR DETACHED * JOB. ANY COMBINATION OF PARAMETERS MAY BE SPECIFIED. * * UJN = USER JOB NAME. * DC = OUTPUT DESTINATION: TO, NO, BC, RB, DF. * OP = END OF DETACHED JOB OPTION: SU, TJ. USECMN SETJOB,PBS,0 SETJSL SPACE 4,12 *** SETJSL,SSSSS * * ALLOWS THE USER TO SPECIFY THE ALLOWABLE SRU ACCUMULATION * DURING EACH JOB STEP. * * PARAMETERS - * SSSSS = DESIRED SRU JOB STEP LIMIT. THIS VALUE WILL BE * ROUNDED UP TO THE NEAREST 10. ASSUMED TO BE IN DEFAULT BASE * UNLESS POST RADIX GIVEN. IF NULL, DEFAULT IS ASSUMED. USECMN SETJSL,PBS,2 SETTL SPACE 4 *** SETTL,NNNNN. * * ALLOWS THE USER TO INCREASE HIS TOTAL ALLOWABLE CPU TIME. * * PARAMETERS- * NNNNN = DESIRED TIME LIMIT. THIS VALUE WILL BE ROUNDED * UP TO THE NEAREST 10. ASSUMED TO BE IN DEFAULT BASE UNLESS * POST RADIX GIVEN. * IF NULL, DEFAULT IS ASUMED. USECMN SETTL,PBS,2 SORT SPACE 4 *** SORT,LFN,NC=N. * * ALLOWS THE USER TO FORCE SORTING OF HIS PRIMARY FILE. * IF *LFN* (OPTIONAL IS GIVEN, A SORT IS PERFORMED IMMEDIATLEY * ON THE FILE NAMED. A FILE OF ANY LENGTH MAY BE SORTED * BY THIS METHOD. * *NC=N* IS AN OPTIONAL PARMETER WHICH SPECIFIES THE NUMBER * OF CHARACTERS TO SORT ON. THIS IS IN THE RANGE OF 1 TO 10. USECMN SORT,SOF,0 STATUS SPACE 4 *** STATUS,N. * ALLOWS THE USER TO FIND OUT HIS CURRENT STATUS. * * PARAMETERS- * N = F, RETURN FILE DESCRIPTION INFORMATION FOR ALL FILES. * N = T, RETURN CUMALATIVE CPU TIME USED. * N = (J=JOBNAME), DETERMINE STATUS OF JOB *JOBNAME*. * * RETURNS- * *TTY NNN*, WHERE NNN = TERMINAL NUMBER. * *SYSTEM - XXXXXXX*, WHERE XXXXXXX = NAME OF SYSTEM. * *FILE NAME FILENAM*, WHERE FILENAM = PRIMARY FILE NAME. * *STATUS - ZZZZZZ*, WHERE ZZZZZZ = USER,S STATUS . USECMN STATUS,STA,0,SCOM,,(ALL) STOP SPACE 4 *** STOP. * * ALLOWS THE USER TO STOP EXECUTION OF HIS JOB. * IF THE USER WANTS TO STOP HIS JOB WHILE IT IS WAITING * FOR INPUT HE MAY TYPE *STOP* AFTER THE QUESTION MARK HAS * BEEN OUTPUT. USECMN STOP,STO,,SCOM+INVN,,(ALL) SUBMIT SPACE 4 *** SUBMIT,LFN,Q.C * * LFN = PRIMARY FILE NAME IF NO PARAMETERS GIVEN. * SEE SUBMIT DOCUMENTATION. USECMN SUBMIT,SUB,0 SUM SPACE 4,10 *** SUMMARY. * * RETURNS SUMMARY OF SYSTEM RESOURCES USED. USECMN SUMMARY,PBS,0 TAPE SPACE 4 *** TAPE. * * ALLOWS THE USER TO INPUT FROM PAPER TAPE. THE READER * WILL BE STARTED AT THE COMPLETION OF THIS COMMAND IF IT * IS READY. USECMN TAPE,TAP,,INVN TERM SPACE 4 *** TERM,T. * * SET TERMINAL TYPE TO T. * * T TERMINAL * * TTY MODEL 33, 35, 37 TELETYPES. * 713 CONTROL DATA 713. * COR CORRESPONDENCE CODE. * CORAPL CORRESPONDENCE CODE WITH *APL* TYPESPHERE. * MEMAPL MEMOREX 1240 WITH *APL* PRINT BELT. USECMN TERM,TER,2,INVN TEXT SPACE 4 *** TEXT. * * ALLOWS USER TO INPUT SOURCE WITH ALPHABETIC LEADING * CHARACTERS. USER MUST ENTER *CONTROL C* (ETX) TO * TERMINATE THIS MODE. USECMN TEXT,TXT TIMEOUT SPACE 4 *** TIMEOUT. * * CLEARS THE TIME OUT LOGOFF BIT IN * THE *VDCT* WORD TO ALLOW THE TERMINAL * TO BE TIMED OUT. * USECMN TIMEOUT,TIM,,,,(ALL) TRMDEF SPACE 4,10 *** TRMDEF. * * REDEFINE THE NETWORK TERMINAL CONFIGURATION. * USECMN TRMDEF,PBS,0,,, USER SPACE 4 *** WHATJSN,USERNUM. * * THIS IS A PRIVILEGED COMMAND THAT ALLOWS THE USER * TO DETERMINE WHAT SPIGOT(S) A GIVEN *USERNUM* IS * CURRENTLY CONNECTED TO. USECMN WHATJSN,UNU,2,,,(ACCS) WRITE SPACE 4,15 *** WRITE,LFN,LINES,/STRING/. * * THIS COMMAND WRITES LINES SELECTED BY LINE NUMBER OR * CHARACTER CONTENT FROM THE USER-S PRIMARY FILE TO A * SPECIFIED SECONDARY FILE. * * LFN = NAME OF FILE ON WHICH TO WRITE LINES. * LINES = ANY NUMBER OF LINE NUMBERS AND LINE RANGES, IN * ASCENDING ORDER. * /STRING/ = DELIMITED SEQUENCE OF CHARACTERS. * * EITHER LINES OR /STRING/ MAY BE OMITTED. USECMN WRITE,IED,0 WRITEN SPACE 4,10 *** WRITEN,LFN,LINES,/STRING/. * * THIS COMMAND IS THE SAME AS *WRITE* EXCEPT LINE NUMBERS ARE * NOT WRITTEN TO FILE LFN. USECMN WRITEN,IED,0 X, SPACE 4 *** X,NNNNNNNNNN. * * THIS COMMAND ALLOWS A USER TO FORCE A COMMAND * TO BE PROCESSED AS A COMMAND CALL EVEN * THOUGH IT WOULD NORMALLY BE INTERPRETED BY *IAFEX*. USECMN X,XEQ,0,,,(ALL) XEDIT SPACE 4,10 *** XEDIT. * * THIS COMMAND INITIATES THE TEXT EDITING PROGRAM, * *XEDIT*. USECMN XEDIT,PSS,0 ILLEGAL SPACE 4 ** ILLEGAL. TCOMI VFD 54/0LINCORRECT,6/0 DATA 0 COUNT OF INCORRECT COMMANDS TCOML EQU *-TCOM TCOMT DATA 37777777777777777777B TABLE TERMINATOR TCOM SPACE 4 ** GENERATE INDEX WORDS TO COMMAND TABLE. * THE FOLLOWING ENABLES THE COMMAND SEARCH ROUTINE TO START * THE SEARCH OF THE COMMAND TABLE AT THE FIRST COMMAND * WHICH BEGINS WITH THE SAME FIRST CHARACTER. * THE TABLE FORMAT IS 12 BITS PER CHARACTER WITH 4 BYTES * USED PER WORD. THE CHARACTER VALUE DIVIDED BY 4 GIVES THE * INDEX TO THE CORRECT WORD AND THE LOWER TWO BITS OF THE * CHARACTER VALUE INDICATES THE BYTE. EACH BYTE CONTAINS AN * ADDRESS RELATIVE TO *TCOM* WHICH IS THE FIRST WORD ADDRESS * OF THE COMMAND TABLE FOR COMMANDS BEGINNING WITH THAT * CHARACTER. U1 SET 0 CHARACTER BEING PROCESSED U2 SET 0 CURRENT WORD COUNT THROUGH THIS INDEX WORD U3 SET 0 POSITION IN WORD TCOMA BSS 0 DUP 28 U1 SET U1+1 U4 MICRO U1,1,* ABCDEFGHIJKLMNOPQRSTUVWXYZ * IF DEF,US"U4" VFD 12/US"U4"-TCOM ELSE 1 VFD 12/TCOMT-TCOM IFEQ U3,3 VFD 12/0 U3 SET 0 ELSE 1 U3 SET U3+1 ENDD PCM TITLE PCM - USER COMMAND PROCESSING ROUTINES. SPACE 4 ** ROUTINES FOR PROCESSING EACH TTY USER,S COMMAND. * * THE ENTRY CONDITIONS FOR ALL OF THEM ARE EXACTLY WHAT IS * SET UP BY SSP. * * SEE CCM AND BUFFER DOCUMENTATION FOR COMMAND PARAMETERS. * * IT IS ASSUMED THAT *VROT* IS COMPLETE AND THAT THE NEXT * MESSAGE POINTER IN *VDCT* IS CLEAR FOR THE GIVEN TERMINAL * PRIOR TO ANY ENTRY TO THESE ROUTINES. ACC SPACE 4 ** ACC - SET *ACCESS* SUBSYSTEM. ACC BSS 0 SA1 A0+VDCT CHECK USER ACCESS LEVEL LX1 59-13 PL X1,ACC1 IF USER NOT VALIDATED SA1 A0+VSTT SET SYSTEM MX6 57 LX6 12 BX1 X6*X1 SX6 ACCS*10000B BX6 X1+X6 SA6 A1 EQ RDY ISSUE *READY* ACC1 SMA X6,( INCORRECT COMMAND."NL") EQ PCS5 ISSUE MESSAGE AUT SPACE 4 ** AUT - INITIALIZES FOR PROCESSING OF AUTO LINE NUMBERS. AUT BSS 0 SA1 A0+VFNT MX5 42 SB7 B1 SET DECIMAL BASE BX5 X1*X5 LX1 59-12 ZR X5,IPF IF NO PRIMARY FILE SMA X6,( WRITE ON READ-ONLY FILE."NL") NG X1,PCS5 IF WRITE LOCKOUT BIT SET SA5 CCMA CHECK PARAMETER COUNT SX7 3R100 SET DEFAULT LINE NUMBER SB6 3*6-1 SET BIT COUNT LX7 42 SX5 X5-1 ZR X5,AUT0 IF DEFAULT LINE NUMBER SA5 PBUF+2 CHECK NUMBER FOR NUMERICS ZR X5,AUT0 IF DEFAULT LINE NUMBER BX7 X5 SB6 B0 AUT0 SA7 AUTB SAVE DISPLAY CODED LINE NUMBER BX5 X7 RJ DXB NZ X4,IPL IF ERROR IN CONVERSION SX7 100000 IX7 X6-X7 PL X7,IPL IF LARGER THAN FIVE DIGITS SA4 =8L00000 "EA" SET *EA* CONTROL BYTE SA1 AUTB RECOVER DISPLAY CODED LINE NUMBER NZ B6,AUT1 IF BIT COUNT DETERMINED SA2 PBUF+3 GET CHARACTER COUNT UX2 B6,X2 SX2 B6 SB6 B6-6 PL B6,IPL IF MORE THAN 5 DIGITS SX3 6 BITS PER CHARACTER IX2 X3*X2 CALCULATE BITS SB6 X2-1 AUT1 MX7 1 GENERATE MASK AX7 X7,B6 SB6 B6+31 LX7 X7,B6 LX1 X1,B6 POSITION LINE NUMBER BX4 -X7*X4 MASK CONTROL BYTE BX7 X4+X1 ADD IN LINE NUMBER BX4 X7 SA7 AUTB SAVE CONTROL BYTE RJ SSP SA6 B4+B1 SAVE LINE NUMBER VALUE MX6 36 MASK OUT LINE NUMBER BX6 X4*X6 SA6 A6+B1 SAVE DISPLAY CODED LINE SA5 PBUF+4 SB7 B1 SET DECIMAL BASE SA1 CCMA CHECK PARAMETER COUNT SX1 X1-3 NG X1,AUT2 IF DEFAULT RJ DXB NZ X4,IPL IF INCORRECT PARAMETER SX7 10000 IX7 X6-X7 PL X7,IPL IF INCORRECT PARAMETER RJ SSP NZ X6,AUT3 IF NOT DEFAULT AUT2 SX6 10 AUT3 SA6 B4 SAVE INCREMENT IN POT SA1 A0+VDCT STORE AUTO POT POINTER SX6 B3 LX6 24 BX1 X6+X1 SX6 102B SET READ DATA AND AUTO MODE LX6 48 BX6 X6+X1 SA6 A1 SB3 B0 SB4 B1+ SET WORD COUNT OF MESSAGE IFMUX AUT4 SX6 AUTB SEND NEXT LINE TO TERMINAL RJ MVA EQ PCSX EXIT AUT4 RJ GOP GET POT FOR CONTROL BYTE SA1 AUTB GET CONTROL BYTE BX6 X1 SA6 B4 SAVE CONTROL BYTE IN POT SA1 A0+VDCT MX5 -3 LX5 36-0 BX6 X5*X1 CLEAR FIRST WORD SX2 B3 BX6 X2+X6 ADD IN POT POINTER SX1 B1 SET AUTO MODE BIT FOR MUX TERMINAL LX1 45-0 BX6 X1+X6 SA6 A1+ EQ PCSX EXIT * ENTER HERE FROM *CLI* TO PROCESS AUTO MODE LINE * NUMBERS OR *0003* BYTE AUTO MODE. * (B3) = COMMAND POT POINTER. * (B4) = COMMAND POT ADDRESS. * (X7) = FIRST WORD IN COMMAND POT. * SEE *VDCT* FOR EXPLANATION OF WHAT IS IN THE * AUTO POT. AUT5 IFNET AUT5.1 SA1 A0+VDCT LX1 59-45 PL X1,PCM IF *0003* BYTE EQ AUT5.2 CONTINUE MUX PROCESSING AUT5.1 SA1 A0+VDCT CHECK FOR CANCEL AUTO LINE LX1 59-53 SX6 B0 CLEAR FLAG PL X1,AUT8 IF CANCEL LINE NOT SET MX2 1 BX6 -X2*X1 CLEAR CANCEL AUTO LINE BIT LX6 53-59 SA6 A1+ AUT5.2 SA1 B4+X7 GET BEGINNING OF LINE SB5 -7 MX2 30 BX2 X2*X1 MX6 -6 AUT6 SB5 B5+6 INCREMENT MASK SHIFT COUNT LX2 6 BX3 -X6*X2 SX4 X3-1R0 SX3 X3-1R+ NG X4,AUT7 IF ALPHABETIC NG X3,AUT6 IF NUMERIC AUT7 NG B5,AUT25 IF COMMAND LINE MX5 1 BUILD MASK AX4 X5,B5 BX5 X4*X1 SB7 B1 SET DECIMAL CONVERSION RJ DXB RJ SSP AUT8 SA1 A0+VDCT MX2 -12 AX1 24 BX2 -X2*X1 LX2 3 TB5 X2,VBMP CALCULATE POT ADDRESS SA2 B5 GET INCREMENT SA1 B5+B1 GET LINE NUMBER VALUE PL X2,AUT10 IF NOT *0003* BYTE AUTO MODE UX3 X1,B6 GET COUNT AND ADDRESS SA2 X3 GET WORD CONTAINING *0003* BYTE SB6 B6+B1 MX5 6 AUT9 LX5 6 SB6 B6-B1 NZ B6,AUT9 IF THIS NOT CONTROL BYTE BX7 -X5*X2 CLEAR CONTROL BYTE SA7 A2 REWRITE WORD SB5 A2+ SET CONTROL BYTE WORD POINTER EQ AUT12 CONTINUE AUT10 ZR X6,AUT11 IF CANCEL LINE NOT SET BX1 X6 REPLACE WITH NEW LINE NUMBER SX7 B0 SA7 B5+2 CLEAR DISPLAY CODED LINE NUMBER AUT11 IX6 X1+X2 SA6 A1+ REPLACE WITH NEXT LINE NUMBER BX1 X6 RJ CDD CONVERT NUMBER SX1 B2-31 PL X1,AUT25 IF LINE NUMBER OVERFLOW LX6 30 POSITION NUMBER SA1 =2222222222BS30 MX5 1 SB3 B2-30+1 SET MASK SHIFT COUNT LX5 X5,B3 BX1 X5*X1 MX4 36 IX6 X6-X1 SX7 00150000B SET *EA* CONTROL BYTE BX6 X4*X6 BX7 X6+X7 SA7 AUTB SAVE CONTROL BYTE SB5 B5+2 SET POINTER TO LINE NUMBER * THE DISPLAY CODED CHARACTERS IN B5 POT ARE * APPENDED TO THE INPUT LINE. AUT12 RJ SSP RESET ENTRY PARAMETERS SB7 B4+VCPC CALCULATE END OF POT SB4 B4+X7 CALCULATE FIRST WORD OF POT SX7 B2 SA7 AUTC SX7 B1 INITIALIZE EOL FLAG MX4 6 MX5 12 SA2 B4 GET FIRST WORD OF POT SA1 B5+ SET UP POINTER TO CONCATENATE CHARACTERS IFNET AUT13 SX1 B0 AUT13 SA6 A1 REPLACE NEW DISPLAY CODED LINE SB6 B0+ BX3 X5*X1 ZR X3,AUT23 IF NO AUTO CHARACTERS SB2 10D BX6 X1 AUT14 BX1 X5*X6 ZR X1,AUT15 IF END-OF-LINE FOUND LX6 6 SB2 B2-B1 ROOM LEFT IN WORD NZ B2,AUT14 IF MORE CHARACTERS IN WORD AUT15 ZR B2,AUT22 IF WRITE WORD FULL NZ B6,AUT18 IF MORE CHARACTERS IN READ WORD SA2 B4 GET NEXT WORD OF POT SB4 B4+B1 INCREMENT POINTER LT B4,B7,AUT17 IF NOT END OF POT BX5 X6 SAVE WRITE WORD RJ GPL GET POT LINK NZ B3,AUT16 IF POT LINK SA1 AUTC RESTORE TERMINAL NUMBER SB2 X1+ SMA X6,( INPUT LOST, REENTER LAST LINE."NL") EQ PCS5 ISSUE MESSAGE TO TERMINAL AUT16 SB7 B4+VCPC MX4 6 BX6 X5 RECOVER WRITE WORD AUT17 SB6 10D RESET CHARACTERS IN READ WORD AUT18 BX3 X4*X2 GET NEXT CHARACTER BX6 -X4*X6 CLEAR BYTE IN WRITE WORD NG X7,AUT21 IF EOL ALREADY FOUND NZ X3,AUT19 IF NOT 00 CHARACTER SX7 X7-1 EQ AUT20 ADD NEXT CHARACTER AUT19 SX7 B1 AUT20 BX6 X6+X3 ADD CHARACTER TO WRITE WORD AUT21 LX6 6 LX2 6 SB2 B2-B1 CHARACTERS IN WRITE WORD SB6 B6-B1 CHARACTERS LEFT IN READ WORD EQ AUT15 CONTINUE SEARCH AUT22 SA6 A2 AUT23 BX6 X6-X6 CLEAR WRITE WORD SB2 10D RESET CHARACTER COUNT PL X7,AUT15 IF NO EOL FOUND IN THIS WORD SA1 AUTC RECOVER TERMINAL NUMBER SB2 X1 IFNET AUT26 ASSIGN OUTPUT TO TERMINAL SA2 AUTB PUT CONTROL BYTE IN POT BX6 X2 SA6 B4 SA1 A0+VDCT ASSIGN OUTPUT TO DRIVER SB7 B7-VCPC SET WORD TO BEGIN OUTPUTTING AT SX6 B4-B7 LX6 36 SX4 B3 BX6 X1+X6 BX6 X6+X4 SA6 A1 AUT24 RJ SSP RESET ENTRY POT POINTER SX6 B3 BX1 X4-X6 ZR X1,PCSX IF NO POT TO RELEASE, EXIT SX5 2000B+/TLX/RIN SET UP RELEASE INPUT DRIVER REQUEST LX6 12 LX5 48 BX7 X5+X6 LX4 24 SX2 B2 BX7 X7+X4 BX7 X7+X2 SA7 SSPA RJ SSP EQ RIN AUT25 RJ SSP RJ CAM CLEAR AUTO MODE RJ DAP RJ DLP RJ SSP RESET ENTRY PARAMETERS EQ PCM PROCESS AS COMMAND * ASSIGN AUTO MODE OUTPUT TO TERMINAL. AUT26 SX7 B3+ SAVE POT POINTER SA7 AUTA SA3 A0+VDCT LX3 0-24 MX7 -12 BX3 -X7*X3 LX3 3 TB5 X3,VBMP SA3 B5+ PL X3,AUT27 IF NOT *0003* BYTE AUTO MODE RJ CAM CLEAR AUTO MODE RJ SSP RESET ENTRY PARAMETERS SB5 B2 RJ GRT AX4 48 SX5 X4-INP$ ZR X5,CLI4 IF INPUT TO A RUNNING PROGRAM EQ PCM PROCESS AS COMMAND AUT27 TX1 B4,-VBMP GET POT POINTER AND WORD COUNT BX2 X1 SA3 A0+VDPT AX2 3 POT POINTER MX7 -24 LX2 3 BX1 X1-X2 WORD COUNT BX7 -X7*X3 CLEAR OLD POT POINTERS LX2 36-3 LX1 30-0 BX7 X1+X7 ADD NEW CURRENT POT WORD COUNT BX7 X2+X7 ADD NEW CURRENT POT LX2 48-36 LX1 33-30 BX7 X1+X7 ADD NEW FIRST POT BX7 X2+X7 ADD NEW FIRST POT FIRST WORD INDEX SA7 A3 SA2 AUTB GET CONTROL BYTE BX6 X2 SA6 B4 PUT CONTOL BYTE IN POT SA1 A0+VDCT ASSIGN CONTOL BYTE TO DRIVER SB7 B7-VCPC SX6 B4-B7 CALCULATE WORD COUNT LX6 36 SX4 B3 GET POT POINTER BX6 X1+X6 ADD IN WORD COUNT BX6 X6+X4 ADD IN POT POINTER SA6 A1 SX6 AUTB SEND NEXT LINE NUMBER TO THE TERMINAL SB3 B0 SB4 B1 RJ MVA SA4 AUTA RESTORE POT POINTER EQ AUT24 RELEASE INPUT POT AUTA CON 0 SAVE MESSAGE POT POINTER AUTB CON 0 NEXT AUTO LINE NUMBER AUTC CON 0 TERMINAL NUMBER BAT SPACE 4 ** BAT - REQUESTS A COMMAND FROM THE USER AND THEN ISSUES * IT TO THE SYSTEM. BAT BSS 0 SA1 PBUF+2 SA3 CCMA CHECK PARAMETER COUNT SX3 X3-2 SA2 =4R$RFL BX6 X2 SA2 A0+VSTT SET SUBSYSTEM ZR X3,BAT1 IF FIELD LENGTH GIVEN SA3 =1L0 BX7 X3 SA7 A1 SX7 1R. SB5 B1+ SET CHARACTER COUNT PX7 B5,X7 SA7 A7+B1 BAT1 LX6 36 SX4 70000B BX3 -X4*X2 SA6 PBUF SB5 4 SET CHARACTER COUNT SX7 1R, PX7 B5,X7 SA7 A1-B1 SX1 BATS*10000B SET BATCH SUBSYSETEM BX7 X3+X1 SA7 A2 EQ PBS BEGIN SYSTEM JOB ** ENTER WHEN COMMAND NOT IN IAFEX SUBSET. BAT2 SX1 PBUF RJ PCB PACK COMMAND BUFFER SA1 PBUF SX6 B1 SET *PPI* TO SORT THE FILE BX7 X1 SET *EPN* EQ BJB BEGIN JOB BIN SPACE 4 ** BIN - SETS BINARY INPUT. BIN BSS 0 SA1 A0+VFNT CHECK PRIMARY FILE SA5 PBUF+2 CHECK NUMBER FOR NUMERICS MX7 42 BX7 X1*X7 SB7 B1+ SET DECIMAL BASE ZR X7,IPF IF NO PRIMARY FILE RJ DXB SX7 X6 CHECK VALUE AX6 12 NZ X4,IPL IF NON-NUMERIC * PROCESS CHARACTER COUNT. SA1 =000600004000BS24 NZ X6,IPL IF TOO LARGE LX7 36 BX6 X1+X7 ZR X7,IPL IF ZERO SA5 PBUF+4 SA1 CCMA CHECK PARAMETER COUNT SX1 X1-3 SA6 BINB NZ X1,BIN1 IF NO TERMINATOR CHARACTER * PROCESS TERMINATOR CHARACTER. SB7 B0 SET OCTAL BASE RJ DXB NZ X4,IPL IF NON-NUMERIC SX7 4000B+X6 AX6 8 NZ X6,IPL IF MORE THAN 8 BITS LX7 24 MERGE TERMINATOR CHARACTER SA1 BINB BX6 X1-X7 SA6 A1 BIN1 RJ SSP SA2 A0+VDCT CHECK TAPE MODE LX2 59-48 SX6 BINA SB4 4 PL X2,PCS6 NOT TAPE MODE SX6 BINB EQ PCS5 BINA DATA 20HENTER BINARY DATA' ' DATA 0 BINB CON 0006BS48 BRF SPACE 4,10 ** BRF - SET *BRIEF* MODE FLAG. * * EXIT (VDCT) BIT 55 = BRIEF MODE SET. BRF BSS 0 ENTRY SA1 A0+VDCT READ VDCT SX6 B1 SET BRIEF MODE LX6 55-0 BX7 X6+X1 SA7 A1 REWRITE VDCT EQ RDY ISSUE *READY* CST SPACE 4,10 ** DIA - ENABLES PRIVILEGED USER TO SEND MESSAGE TO * ANOTHER USER CURRENTLY ON THE SYSTEM. DIA BSS 0 SA1 CCMA CHECK PARAMETER COUNT SX1 X1-2 NG X1,IPL IF *JSN* NOT SPECIFIED SA1 PBUF+4 ZR X1,IPL IF NULL MESSAGE SB7 PBUF+2 GET TERMINAL ADDRESS RJ GTA ZR X4,DIA3 IF NO USER NAME TX1 A4,-VTTP GET TERMINAL NUMBER SX2 VTTL IX1 X1/X2 SX0 A4 SAVE RECEIVER-S TERMINAL TABLE ADDRESS SB5 X1 RJ GRT READ QUEUE ENTRY AX4 48 SX2 X4-INP$ CHECK QUEUE ENTRY ZR X2,DIA4 IF EXPLICIT INPUT REQUEST SA1 X0+VUIT CHECK TERMINAL STATUS ZR X1,DIA3 IF NOT LOGGED IN SA1 X0+VSTT MX3 -12 LX1 59-48 SA2 X0+VDCT NG X1,DIA3 IF LOGOUT IN PROGRESS LX1 59-58-59+48 NG X1,DIA4 IF USER BREAK IN PROGRESS LX1 -59+58 RESTORE VSTT BX2 -X3*X2 DRIVER ASSIGNMENT BX1 -X3*X1 QUEUED MESSAGE POINTER DX1 X1*X2 CHECK PRODUCT SA2 X0+VROT NZ X1,DIA4 IF BOTH QUEUED OUTPUT AND REQUEST SA1 =C*FROM* REPLACE COMMAND LX2 59-0 BX6 X1 PL X2,DIA4 IF TERMINAL BUSY SA6 PBUF SX6 1R SET SEPARATOR AND LENGTH SB7 4 PX6 X6,B7 SA6 A6+B1 SA1 A0+VFST GET SENDER-S JSN MX6 24 BX6 X6*X1 SA6 A6+B1 SX6 1R: SET SEPARATOR PX6 X6,B7 SA6 A6+B1 SX1 PBUF SB2 B5 SA0 X0 RJ PCB SB5 B4+VCPC-1 LAST WORD OF POT NG B6,DIA0 IF WORD ALREADY FULL NZ B6,DIA1 IF NOT JUST ONE ZERO CHARACTER SX6 1R BLANK FILL LAST WORD OF MESSAGE SA1 B7 BX6 X6+X1 SA6 A1+ DIA0 EQ B5,B7,DIA2 IF POT FULL SB7 B7+1 ADD *EOL* SX6 B0+ SA6 B7+ DIA1 EQ B5,B7,DIA2 IF POT FULL AFTER *EOL* SMA A1,("NL") SET TERMINATION BX7 X1 SB7 B7+B1 SA7 B7+ DIA2 SB3 B0 SX6 B4 SB4 B7-B4 SB4 B4+B1 RJ MVA RJ SSP EQ RDY SEND OUT *READY.* DIA3 SMA X6,( TERMINAL NOT ACTIVE."NL") EQ PCS5 ISSUE MESSAGE DIA4 SMA X6,( TERMINAL BUSY."NL") EQ PCS5 ISSUE MESSAGE EDI SPACE 4 ** EDI - INITIATE TEXT EDITOR. EDI BSS 0 SA4 CCMA COUNT PARAMETERS SA2 PBUF+3 GET THIRD PARAMETER SX4 X4-4 PL X4,PSS IF MORE THAN THREE PARAMETERS SX2 X2-1R= ZR X2,PSS IF PARAMETERS EQUATED * CHECK NON-EQUATED FILE NAME. SX4 X4+3 ZR X4,EDI1 IF NO FILE NAME SA3 A2-B1 GET FILE NAME ZR X3,EDI1 IF NULL FILE NAME SB6 A2-1 GET GIVEN FILE NAME RJ GFN BX6 X2 EQ EDI2 EDI1 SA1 A0+VFNT GET PRIMARY FILE NAME MX2 42 BX6 X2*X1 ZR X6,IPF IF NO PRIMARY FILE LX1 59-12 GET WRITE LOCKOUT BIT PL X1,EDI1.1 IF LOCKOUT BIT NOT SET RJ SSP RESET REGISTERS SMA X6,( WRITE ON READ-ONLY PRIMARY FILE."NL") EQ PCS5 ISSUE MESSAGE EDI1.1 ZR X3,EDI2 IF NULL PARAMETER SX7 B1+B1 RESET PARAMETER COUNT SA7 CCMA EDI2 RJ CFC COUNT FILE NAME CHARACTERS SA1 =4LEDIT SET UP COMMAND BX7 X1 ENTER PROGRAM NAME SA7 PBUF SX7 1R, SB7 4 INSERT CHARACTER COUNT PX7 B7,X7 SA7 A7+B1 SA6 A7+B1 SA1 PBUF+5 GET MODE CHARACTER COUNT UX1,B7 X1 SX4 X4-2 SA2 PBUF+4 PL X4,EDI3 IF MODE PARAMETER ENTERED SA1 A0+VDCT CHECK TERMINAL MODE LX1 59-51 PL X1,EDI4 IF NOT EXTENDED MODE SX2 2RAS LX2 48 SB7 B1+B1 EDI3 BX6 X2 ENTER MODE PARAMETER PX7 B6,X7 INSERT FILE NAME CHARACTER COUNT SA7 A6+B1 SA6 A7+B1 EQ EDI5 ENTER TERMINATOR EDI4 SB7 B6 SET FILE NAME COUNT EDI5 SX7 1R. SET TERMINATOR PX7 B7,X7 INSERT CHARACTER COUNT BX6 X6-X6 SA7 A6+B1 SA6 A7+B1 EQ PSS BEGIN SYSTEM JOB WITH SORT FDP SPACE 4 ** FDP - SETS TERMINAL OPERATION TO FULL DUPLEX. FDP BSS 0 SX2 /1TD/SFD REQUEST DRIVER TO SET FULL DUPLEX SX7 RDY SET RETURN JP DCR HDP SPACE 4 ** HDP - SETS TERMINAL OPERATION TO HALF DUPLEX. HDP BSS 0 SX2 /1TD/CFD REQUEST DRIVER TO CLEAR FULL DUPLEX SX7 RDY SET RETURN JP DCR IED SPACE 4,10 ** IED - CALL *IEDIT* TO PROCESS IN-LINE EDITING COMMAND. * * ENTRY (B3) = POINTER TO POT CONTAINING *IEDIT* COMMAND. * * EXIT TO BJS. * (B3) = POINTER TO POT CONTAINING *IEDIT* CONTROL * STATMENT. POT CONTAINING *IEDIT* COMMAND IS * LINKED TO IT. * * USES ALL REGISTERS. * * CALLS BJS, CFC, LEP, PCB, RPT. IED BSS 0 ENTRY * PROCESS FILE NAME. SA1 A0+VFNT GET PRIMARY FILE NAME MX6 42 BX6 X1*X6 SA6 IEDB STORE FILE NAME ZR X6,IPF IF NO PRIMARY FILE SX7 1R, RJ CFC COUNT FILE NAME CHARACTERS PX6 B6,X7 SA6 A6+B1 * PROCESS CHARACTER SET. SA1 A0+VDCT BX2 X1 LX1 59-52 SA3 IEDE GET *ASCII8* LX2 59-55 NG X1,IED2 IF ASCII8 MODE LX1 1 SA3 A3+B1 GET *ASCII* NG X1,IED2 IF 6/12 ASCII MODE SA3 A3+B1 GET *NORMAL* IED2 BX6 X3 MX7 0 RJ CFC COUNT CHARACTERS SA6 IEDC * SET UP OPTIONS. SA1 A0+VSTT NG X2,IED3 IF IN BRIEF MODE SX7 1RL SET LIST OPTION IED3 LX7 48 AX1 12 EXTRACT SUBSYSTEM SX2 7 BX2 X1*X2 SX2 X2-1 ZR X2,IED6 IF BASIC SUBSYSTEM SX2 X2-1 ZR X2,IED7 IF FORTRAN SUBSYSTEM SX2 X2-1 ZR X2,IED7 IF FTNTS SUBSYSTEM LX7 6 BX2 X2-X2 EQ IED8 BYPASS SUBSYSTEM OPTION IED6 SX2 1RB SET BASIC SUBSYSTEM EQ IED8 OPTIONS COMPLETED IED7 SX2 1RF SET FORTRAN/FTNTS SUBSYSTEM * COMPLETE CONTROL STATMENT. IED8 LX2 54 BX7 X2+X7 ZR X7,IED9 IF NO OPTIONS SELECTED SX6 1R, PX6 B6,X6 SA6 A6+B1 STORE SEPARATOR FOR CHARACTER SET SA1 IEDD MOVE *OP* AND SEPARATOR SA2 A1+B1 BX6 X1 SA6 A6+B1 BX6 X2 SA6 A6+B1 BX6 X7 SA6 A6+1 RJ CFC COUNT OPTIONS IED9 SX6 1R) PX6 B6,X6 SA6 A6+B1 STORE TERMINATOR BX7 X7-X7 SA7 A6+B1 SA7 A7+1 * *1RI* ASSUMES THAT THE *IEDIT* COMMAND BEGINS IN THE * FIRST WORD OF THE FIRST POT, SO IF THE COMMAND WAS * PRECEDED BY SOURCE LINE INPUT THEN SHIFT THE *IEDIT* * COMMAND DOWN TO THE BEGINNING OF THE POT. RJ SSP RESTORE POINTER TO THE COMMAND IN THE POT SX6 B3 SA6 IEDF SAVE *IEDIT* COMMAND POT POINTER MX0 -12 CREATE EOL MASK ZR X7,IED12 IF SHIFT NOT NECESSARY SX5 B4 SET DESTINATION POT ADDRESS SB6 X7 SET SOURCE POT INDEX SB5 B0+ SET DESTINATION POT INDEX SB7 VCPC SET POT SIZE LIMIT IED10 SA1 B4+B6 BX6 X1 SA6 X5+B5 BX6 -X0*X6 ZR X6,IED12 IF TRANSFER COMPLETE SB6 B6+1 LT B6,B7,IED11 IF NOT END OF POT SB6 B0+ RJ GPL GET POT LINK IED11 SB5 B5+B1 LT B5,B7,IED10 IF NOT END OF POT SX5 B4 SB5 B0 EQ IED10 CHECK NEXT WORD * PACK THE COMMAND INTO A POT AND LINK THE * *IEDIT* COMMAND POT TO IT. IED12 SB3 B0+ GET POT FOR COMMAND RJ GOP SX1 IEDA RJ PCB PACK COMMAND INTO POT SA2 IEDF RJ LEP LINK *IEDIT* COMMAND TO COMMAND * ENABLE THE JOB. SA1 IEDA MX7 42 LX1 6 SX6 B1 SET *PPI* TO SORT THE FILE BX7 X7*X1 SET *EPN* EQ BJB BEGIN JOB * $IEDIT(FN=LFN,CS=CHAR,OP=OPT). IEDA VFD 60/6L$IEDIT VFD 12/2006B,48/1R( VFD 60/2LFN VFD 12/2002B,48/1R= IEDB VFD 60/0 LFN VFD 60/0 SEPARATOR VFD 60/2LCS VFD 12/2002B,48/1R= IEDC VFD 60/0 CHARACTER SET VFD 60/0 SEPARATOR OR TERMINATOR BSSZ 6 ROOM FOR OP PARAMETER IEDD VFD 60/2LOP VFD 12/2002B,48/1R= IEDE VFD 60/6LASCII8 VFD 60/5LASCII VFD 60/6LNORMAL IEDF CON 0 STORAGE FOR POT POINTER LAN SPACE 4 ** LAN - SETS TYPE OF SYSTEM IN TERMINAL TABLE. LAN SX1 B0 SET NULL FLAG EQ LAN5 LAN1 SX1 BASS*10000B SET BASIC FLAG EQ LAN5 LAN2 SX1 FORS*10000B SET FORTRAN FLAG EQ LAN5 LAN3 SX1 FTNS*10000B SET FTN 4.3 TS FLAG EQ LAN5 LAN4 SX1 EXES*10000B SET EXEC FLAG LAN5 SA2 A0+VSTT MX3 57 LX3 12 BX6 X3*X2 SET SYSTEM BX6 X1+X6 SA6 A2 SA1 CCMA SX6 X1-1 ZR X6,LAN6 IF NO SECOND COMMAND GIVEN SA6 A1 SB5 PARC*2 MOVE DATA SX2 PBUF+2 SX3 PBUF RJ MDA EQ PCM5 REENTER COMMAND PROCESSOR LAN6 SA1 A0+VFNT CHECK FOR FILE DEFINED MX2 42 BX1 X2*X1 NZ X1,RDY IF FILE DEFINED ISSUE READY MESSAGE SMA X6,( OLD, NEW, OR LIB FILE') EQ PCS5 ISSUE MESSAGE LEN SPACE 4 ** LEN - DETERMINES THE LENGTH OF A USERS LOCAL FILE. LEN BSS 0 SA2 CCMA GET PARAMETER COUNT SX2 X2-3 PL X2,IPL IF MORE THAN TWO PARAMETERS SX2 X2+1 SA1 PBUF+2 GET FILE NAME NZ X2,LEN1 IF FILE NAME NOT GIVEN NZ X1,PBS IF FILE NAME GIVEN LEN1 SX6 B1+B1 RESET PARAMETER COUNT SA6 A2 SA2 A0+VFNT MX6 42 BX6 X6*X2 ZR X6,IPF IF NO PRIMARY NAME SX7 1R, SA6 A1 SET PRIMARY FILE NAME SB6 6 PX7 B6,X7 RJ CFC COUNT FILE NAME CHARACTERS SA7 A6-B1 SX6 1R. PX6 B6,X6 SA6 A6+B1 BX6 X6-X6 SA6 A6+B1 SA6 A6+B1 EQ PSS LIS SPACE 4 ** LIS - THIS COMMAND INITIATES THE SORTING IF NECESSARY AND * THE LISTING OF A USER,S FILE. LIS BSS 0 SX7 PBUF SET PARAMETER BUFFER POINTER SA7 LISA SET UP DEFAULT PARAMETERS BX7 X7-X7 BX6 X6-X6 SA7 A7+B1 SA6 A7+B1 CLEAR FIRST LINE NUMBER SA7 A6+B1 CLEAR LINE RANGE FLAG SA6 A7+B1 CLEAR LAST LINE NUMBER RJ PLO PROCESS OPTIONS SA1 LISB ZR X1,LIS2 IF PRIMARY FILE LIST RJ TPF CHECK IF THE PRIMARY FILE ZR X6,LIS2 IF PRIMARY FILE LIST SA1 LISE NZ X1,LIS1 IF LINE RANGE SPECIFIED SA1 LISC BX7 X1 SA7 LISE LIST ONE LINE ONLY LIS1 RJ CFX EXTERNAL LIST CALL SX6 B0 SET *PPI* NOT TO SORT THE FILE EQ BJB BEGIN JOB LIS2 SA2 A0+VFNT MX1 42 BX1 X1*X2 ZR X1,IPF IF NO PRIMARY FILE LX2 59-14 NG X2,IEX IF EXECUTE ONLY SA1 LISF ZR X1,LIS2.1 IF NOT SECURED SYSTEM SA1 LISE NZ X1,LIS2.2 IF LINE RANGE SPECIFIED SA1 LISC BX7 X1 SA7 LISE LIST ONE LINE ONLY EQ LIS2.2 SET UP EXTERNAL LIST LIS2.1 SA3 LISE SX6 B1 LX3 6 SA2 LISC ZR X3,LIS3 IF NO LAST LINE SPECIFIED SX3 X3-1R* ZR X3,LIS3 IF LIST TO EOI SPECIFIED LIS2.2 RJ CFX SET UP EXTERNAL LIST SX6 B1+ SET *PPI* TO SORT THE FILE EQ BJB BEGIN JOB LIS3 NZ X2,LIS4 IF ANY LINE SPECIFICATION SA6 LISD LIS4 SA1 LISC GET LINE NUMBER BX6 X1 SAVE LINE NUMBER SA1 LISD GET SINGLE LINE FLAG NZ X1,LIS5 IF NOT SINGLE LINE SX7 B1 SET SINGLE LINE FLAG BX6 X6+X7 LIS5 SA6 B4 SAVE LINE NUMBER AND FLAG SA1 A0+VSTT CHECK SORT FLAG LX1 59-52 PL X1,LIS8 IF NO SORT REQUIRED SA1 A0+VFST SET NEXT OPERATION INDEX AND POT POINTER MX6 43 BX1 X1*X6 SX2 B3 BX7 X2+X1 SX6 B1 SET NEXT OPERATION INDEX LX6 12 BX7 X6+X7 SA7 A1 REWRITE VFST SB3 B0 SX7 B0 SET *EPN* SX6 B1 SET *PPI* EQ BJB1 ENABLE THE SORT LIS7 SA1 A0+VFST GET POT POINTER MX2 48 BX6 X2*X1 SA6 A1 REWRITE VFST BX7 -X2*X1 SB3 X7 BX7 X7-X7 SX5 LIS8$ EQ PCS1 MAKE WAIT COMPLETION QUEUE ENTRY * MAKE QUEUE ENTRY FOR LIST. LIS8 SA1 A0+VROT SET LIST AND OUTPUT AVAILABLE SX6 120B BX6 X1+X6 SA6 A1 REWRITE VROT SX5 ITO$ EQ PCS1 MAKE 1TO QUEUE ENTRY LISA BSSZ 1 PARAMETER POINTER LISB BSSZ 1 FILE NAME LISC BSSZ 1 LINE NUMBER LISD BSSZ 1 SINGLE LINE/LINE RANGE LISE BSSZ 1 LAST LINE NUMBER LISF CON 0 SYSTEM SECURITY MODE NOR SPACE 4,20 ** NOR - SET TERMINAL *NORMAL* MODE. * * CLEARS ASCII, AUTO, BRIEF AND TAPE MODES. * * EXIT (VDCT) = SPECIAL MODES CLEARED. * * CALLS DCR, RDY. NOR BSS 0 ENTRY SA1 A0+VDCT READ VDCT SA2 =75647777000077777777B CLEAR MODE BITS BX6 X2*X1 SA6 A1 REWRITE VDCT SA1 A0+VSTT RESET ENTRY MODE CONTROL SX7 B1 LX7 18 BX7 -X7*X1 SA7 A1 SX2 /1TD/SNM REQUEST DRIVER TO SET NORMAL MODES SX7 RDY SET RETURN JP DCR NOS SPACE 4 ** NOS - CLEARS SORT FLAG. NOS BSS 0 SA1 A0+VSTT SX2 B1 LX2 52 BX6 -X2*X1 SA6 A1 EQ RDY PAC SPACE 4 ** PAC - PACK FILE. PAC BSS 0 SA1 PBUF+2 SA2 CCMA CHECK PARAMETER COUNT SX2 X2-1 ZR X2,PAC1 IF NO FILE NAME NZ X1,SOF1 IF FILE NAME GIVEN EQ PAC2 SET FILE NAME PAC1 SX2 X2+B1 RESET PARAMETER COUNT SX6 X2+B1 SA6 CCMA PAC2 SA3 A0+VFNT SET PRIMARY NAME AS DEFAULT SX7 1R, MX4 42 BX6 X4*X3 ZR X6,IPF IF NO PRIMARY FILE SB6 4 PX7 B6,X7 SA6 A1 SET FILE NAME SA7 A6-B1 SET SEPARATOR RJ CFC COUNT FILE NAME CHARACTERS SX2 X2-1 CHECK PARAMETER COUNT ZR X2,PAC3 IF TWO PARAMETERS PX7 B6,X7 SA7 A6+B1 EQ SOF2 SET SORT FLAG PAC3 SX7 1R. SET TERMINATOR PX7 B6,X7 SA7 A6+B1 BX6 X6-X6 SA6 A7+B1 SA6 A6+B1 EQ SOF2 PAR SPACE 4 ** PARITY - SETS TERMINAL PARITY. PAR SA1 CCMA CHECK PARAMETER COUNT SX1 X1-2 SX2 /1TD/SOP SET ODD PARITY BY DEFAULT NZ X1,PAR1 IF NOT SECOND PARAMETER SA1 PBUF+2 SET SECOND PARAMETER SA3 =3LODD SA4 =4LEVEN IX3 X3-X1 BX4 X4-X1 ZR X3,PAR1 IF *ODD* NZ X4,IPL IF NOT *EVEN* SX2 /1TD/SEP * ENTER DRIVER REQUEST. PAR1 SX7 RDY SET RETURN JP DCR ENTER DRIVER REQUEST PFC SPACE 4 ** PFC - PROCESS PRIMARY FILE COMMAND. * * ENTRY- * SEE SSP. PFC BSS 0 SA1 CCMA CHECK PARAMETER COUNT SX1 X1-2 PL X1,PFC1 IF PARAMETER GIVEN SA1 PBUF SAVE COMMAND BX6 X1 SA6 B4 SX6 B3 MX2 48 SA1 A0+VFNT BX2 X2*X1 BX6 X2+X6 SA6 A1 REWRITE VFNT SB3 B0 SMA X6,( FILE NAME') SB4 B0 SB5 B0 RJ RQI REQUEST FILE NAME * CONTINUE WHEN PARAMETERS AVAILABLE. SX2 PBUF MOVE PARAMETERS SX3 PBUF+2 SB5 -7*2 RJ MDA SA1 A0+VDCT CLEAR READ DATA SX6 B1 LX6 54 BX6 -X6*X1 SA6 A1 SA1 A0+VFNT RESTORE COMMAND MX2 48 BX6 X2*X1 SA6 A1 REWRITE VFNT BX2 -X2*X1 SB3 X2 LX2 3 TA1 X2,VBMP SA2 =7LPRIMARY BX6 X1 BX2 X2-X1 SA6 PBUF SB4 3 CHARACTERS IN COMMAD NZ X2,PFC0 IF NOT *PRIMARY* COMMAND SB4 7 SET COMMAND LENGTH PFC0 SX6 1R, SET SEPARATOR PX6 X6,B4 SA6 A6+B1 SB4 B0 RJ DPT DROP COMMAND POT RJ SSP RESTORE REGISTERS * CHECK VALIDITY AND COMMAND TYPE. PFC1 SB6 PBUF+2 CHECK FILE NAME RJ GFN SA2 A0+VSTT CLEAR THE SORT FLAG SA2 PBUF SA1 =3LLIB BX2 X1-X2 NZ X2,PBS IF NOT *LIB* SA2 PBUF+3 SX3 X2-1R= SA1 =7LLIBRARY SA2 PBUF+1 INITIALIZE TERMINATOR SEARCH SX7 1R/ SET SEPARATOR FOR */UN=LIBRARY* * SEARCH FOR POINT TO INSERT *UN=LIBRARY* PARAMETER. PFC2 SA2 A2+2 READ SEPARATOR SX6 X2-1R. ZR X6,PFC3 IF *.* SX6 X2-1R= ZR X6,PFC2 IF *=* SX6 X2-1R, ZR X6,PFC2 IF *,* SX6 X2-1R/ NZ X6,PFC3 IF NOT */* SX7 1R, RESET */UN* SEPARATOR TO *,UN* EQ PFC2 CONTINUE TERMINATOR SEARCH * INSERT *UN=LIBRARY* PARAMETER. PFC3 UX2,B6 X2 PX7 B6,X7 SA7 A2 STORE SEPARATOR SX6 2RUN SX7 1R= SB6 B1+B1 SET CHARACTER COUNT PX7 B6,X7 LX6 48 SA6 A7+B1 SET *UN* SA7 A6+B1 SET *=* BX6 X1 SA6 A7+B1 SET *LIBRARY* SX7 1R. SB6 7 SET CHARACTER COUNT PX7 B6,X7 SA7 A6+B1 BX6 X6-X6 SA6 A7+B1 SA6 A6+B1 SX6 3ROLD SB6 3 LX6 42 SA6 PBUF SX6 1R, SET SEPARATOR PX6 B6,X6 SA6 PBUF+1 EQ PSS ENTER JOB AFTER SORT RER SPACE 4 ** RER - PROCESS RESEQUENCING OF PRIMARY FILE. RER BSS 0 BX7 X7-X7 SET TERMINATOR SA7 PBUF+11 SA7 A7-B1 SA2 CCMA CHECK PARAMETER COUNT SX6 5 RESET PARAMETER COUNT SA6 A2 SX2 X2-3 SX6 2R10 SET DEFAULT INCREMENT LX6 48 SB6 B1+B1 SET CHARACTER COUNT NG X2,RER1 IF DEFAULT SA1 PBUF+4 ZR X1,RER1 IF DEFAULT SA3 A1+B1 GET CHARACTER COUNT UX3,B6 X3 BX6 X1 RER1 SX7 1R. SET TERMINATOR PX7 B6,X7 SA7 A7-B1 SA6 A7-B1 SET INCREMENT SX6 3R100 SET DEFAULT LX6 42 SX2 X2+1 CHECK PARAMETER COUNT SB6 3 SET CHARACTER COUNT NG X2,RER2 IF DEFAULT SA1 PBUF+2 GET DEFAULT ZR X1,RER2 IF DEFAULT BX6 X1 SA3 A1+B1 GET CHARACTER COUNT UX3,B6 X3 RER2 SX7 1R, SET SEPERATOR PX7 B6,X7 SA3 A6-B1 GET CHARACTER COUNT SA1 A3-B1 CHECK IF FILE TYPE ENTERED SA7 A6-B1 SA6 A7-B1 SET STARTING LINE NUMBER LX1 6 SX2 X2-2 CHECK PARAMETER COUNT NZ X2,RER3 IF FILE TYPE NOT ENTERED UX3,B6 X3 BX6 X1 NZ X1,RER4 IF FILE TYPE PRESENT RER3 SA1 A0+VSTT CHECK INTERACTIVE SUBSYSTEM SX6 1RB SB6 B1 SET CHARACTER COUNT MX3 -3 LX1 -12 BX1 -X3*X1 EXTRACT CURRENT SUBSYSTEM SX3 X1-BASS ZR X3,RER4 IF BASIC SX6 1RF SX3 X1-FORS ZR X3,RER4 IF FORTRAN SX3 X1-FTNS ZR X3,RER4 IF FTNTS BX6 X6-X6 SB6 B0 SET CHARACTER COUNT RER4 PX7 B6,X7 LX6 54 SA7 A6-B1 SA6 A7-B1 SET SYSTEM SA1 A0+VFNT SET FILE NAME MX6 42 BX6 X6*X1 ZR X6,IPF IF NO PRIMARY FILE RJ CFC COUNT CHARACTERS PX7 B6,X7 SET SEPARATOR SA7 A6-B1 SA6 A7-B1 SA3 A6-B1 SET SEPARATOR UX3,B6 X3 PX7 B6,X7 SA7 A3 EQ PSS BEGIN JOB ROT SPACE 4 ** ROT - SETS RUBOUT COUNT. ROT BSS 0 SA5 CCMA CHECK PARAMETER COUNT SX5 X5-1 BX3 X3-X3 ZR X5,ROT1 IF NO RUBOUT COUNT ENTERED SA5 PBUF+2 SB7 B1 ZR X5,ROT1 IF NULL RUBOUTS RJ DXB NZ X4,ROT2 IF NON NUMERIC SX3 31 IX2 X6-X3 SX3 X6+1 PL X2,ROT2 IF TOO MANY ROT1 SA1 A0+VDCT ENTER COUNT MX6 -5 LX6 39 BX1 X6*X1 LX3 39 BX6 X1+X3 SA6 A1 RJ SSP JP RDY ISSUE READY ROT2 RJ SSP SX6 =C*INCORRECT RUBOUT COUNT.* EQ PCS5 ISSUE MESSAGE RPF SPACE 4,10 ** RPF - RETRIEVE PERMANENT FILE. * PROCESSES *ATTACH* OR *GET* COMMAND. RPF BSS 0 SA2 CCMA CHECK PARAMETER COUNT SX2 X2-1 ZR X2,PBS IF NULL SA2 PBUF+2 CHECK FILE NAME ZR X2,PBS IF NULL SB6 A2 RJ GFN CHECK FOR RESERVED NAME EQ PBS RUN SPACE 4 ** RUN - INITIATES THE RUNNING OF A USERS JOB. RUN BSS 0 SX6 PBUF+2 SET PARAMETER POINTER SA6 RUNA BX6 X6-X6 SET DEFAULT VALUES SA6 A6+B1 SA6 A6+B1 SA6 A6+B1 SX6 2RGO LX6 48 SA6 RUNH SA6 RUNS SX7 1R, SET CHARACTER COUNT SB6 B1+B1 PX7 B6,X7 SA7 A6+B1 SA7 RUNH+1 RUN1 SA1 RUNA GET PARAMETER POINTER SX6 X1+4 UPDATE POINTER SA6 A1 SA1 X1 GET PARAMETER SA2 A1-B1 GET TERMINATOR UX2,B6 X2 SX2 X2-1R. ZR X2,RUN2 IF ALL PARAMETERS PROCESSED AX1 42 SX2 X1-1LI ZR X2,RUN20 IF INPUT FILE NAME SX2 X1-1LB ZR X2,RUN20 IF BINARY FILE NAME SX2 X1-1LC ZR X2,RUN20 IF BINARY FILE NAME SX2 X1-1LT NZ X2,IPL IF NOT TRANSMIT SX6 X6-2 SET TRANSMIT PARAMETER POINTER SA6 RUND RUN2 SA1 RUNB NZ X1,RUN3 IF FILE NAME SPECIFIED SA1 A0+VFNT MX6 42 BX6 X1*X6 ZR X6,IPF IF NO PRIMARY FILE SA6 RUNB RUN3 SA1 A0+VSTT GET SUBSYSTEM MX4 -3 AX1 12 BX4 -X4*X1 SA1 TSYS+X4 GET SYSTEM PROCESSOR SX7 B1 IX6 X1+X7 AX1 42 SA6 A1 SB7 X1 RJ SRC SET TO ISSUE *RUN COMPLETE.* JP B7 ** BASIC. RUN4 SA1 RUND NZ X1,IPL IF *T* PARAMETER SPECIFIED SA1 A0+VDCT CHECK ASCII FLAG LX1 59-51 SB6 B1+B1 SA2 =0LAS NG X1,RUN5 IF ASCII SA2 =0LAS=0 SB6 4 RUN5 BX6 X2 SX7 1R. PX7 B6,X7 SA6 RUNR SET ASCII FLAG SA7 A6+B1 SA1 RUNC BINARY FILE NAME SA2 RUNB INPUT FILE NAME NZ X1,RUN6 IF BINARY FILE NAME SUBSTITUTION SA1 =0L0 RUN6 BX6 X1 RJ CFC GET CHARACTER COUNT SX7 1R, PX7 B6,X7 SA6 RUNP SET BINARY FILE NAME SA7 A6+B1 BX6 X2 RJ CFC GET CHARACTER COUNT SX7 1R, PX7 B6,X7 SA6 RUNQ SET INPUT FILE NAME SA7 A6+B1 SET SEPARATOR SX1 RUNO RJ PCB SA1 =0LBASIC SET *EPN* BX7 X1 EQ RUN13 MAKE QUEUE ENTRY ** FTN 4.3 TS AND FTN5. RUN7 SX7 1R5 *FTN5* LX7 35-5 SB7 5 INSERT CHARACTER COUNT SX2 RUNL MOVE COMMAND PARAMETERS EQ RUN9 FORMAT COMMAND RUN8 SX7 B0 *FTN* SB7 4 SX2 RUNM MOVE COMMAND PARAMETERS RUN9 SA1 RUND NZ X1,IPL IF *T* PARAMETER SPECIFIED SA1 RUNG MX3 24 BX1 X3*X1 BX7 X7+X1 BX0 X7 SA7 A1+ LX0 6 BX0 X0*X3 SAVE *EPN* SX7 1R, INSERT CHARACTER COUNT PX7 B7,X7 SA7 A7+B1 SB5 8 SX3 RUNK RJ MDA MOVE DATA SA1 RUNC BINARY FILE NAME SA2 RUNB INPUT FILE NAME NZ X1,RUN10 IF BINARY FILE NAME SUBSTITUTION SA1 =0LLGO RUN10 BX6 X1 RJ CFC GET CHARACTER COUNT SX7 1R, PX7 B6,X7 SA6 RUNI SET BINARY FILE NAME SA7 A6+B1 SET SEPARATOR BX6 X2 RJ CFC GET CHARACTER COUNT PX7 B6,X7 SA6 RUNJ SET INPUT FILE NAME SA7 A6+B1 SET SEPARATOR SX1 RUNG RJ PCB BX7 X0 SET *EPN* EQ RUN13 MAKE QUEUE ENTRY ** EXECUTE. RUN11 SA1 RUNC NZ X1,IPL IF *B* PARAMETER SPECIFIED SA1 RUNB GET FILE TO EXECUTE SA2 RUND CHECK FOR TRANSMIT PARAMETERS BX6 X1 SA6 PBUF BX0 X6 SET *EPN* RJ CFC GET CHARACTER COUNT SX7 1R. PX7 B6,X7 SA7 A6+B1 BX6 X6-X6 SA6 A7+B1 SET BUFFER TERMINATION SA6 A6+B1 ZR X2,RUN12 IF NOT TRANSMIT PARAMETERS SX7 1R, PX7 B6,X7 SA7 A7 SX3 A7+B1 SA4 CCMA GET PARAMETER COUNT LX4 1 SB5 X4 RJ MDA RUN12 SX1 PBUF BUILD COMMAND RJ PCB BX7 X0 SET *EPN* EQ RUN14 BEGIN JOB * ENABLE THE JOB. RUN13 SA1 RUNB RJ TPF CHECK PRIMARY FILE NAME BX4 X6 SX6 B1 SET *PPI* TO SORT FILE ZR X4,BJB IF PRIMARY FILE RUN14 SX6 B0 SET *PPI* NOT TO SORT THE FILE EQ BJB BEGIN JOB ** PROCESS OPTIONAL FILE NAME. RUN20 SA2 X6-3 CHECK SEPERATOR SX3 X1-1LI SX2 X2-1R= NZ X2,IPL IF NOT *=* SEPERATOR SB6 A2+B1 ZR X3,RUN21 IF INPUT SX3 B1 SX6 B0+ PRESTORE NOGO SA6 RUNH SX6 1R, PX6 B0,X6 SA6 A6+B1 SA6 RUNS+1 MX6 0 SA6 A6-B1 RUN21 RJ GFN CHECK FILE NAME BX6 X2 SAVE FILE NAME SA2 RUNB+X3 NZ X2,IPL IF PARAMETER SPECIFIED TWICE SA6 A2 EQ RUN1 PROCESS NEXT PARAMETER RUNA CON 0 PARAMETER POINTER RUNB CON 0 INPUT FILE NAME RUNC CON 0 BINARY FILE NAME RUND CON 0 TRANSMIT PARAMETER POINTER * FTN,GO,B=LGO,I=INPUT,L=0,SEQ,REW,X,A,TS,T. * FTN5,GO,B=LGO,I=INPUT,L=0,SEQ,REW,X,OPT=0,ET=F. RUNG BSS 0 VFD 60/5L$FTN5 VFD 12/2005B,48/1R, RUNH VFD 60/2LGO VFD 12/2002B,48/1R, VFD 60/1LB VFD 12/2001B,48/1R= RUNI VFD 60/3LLGO VFD 12/2003B,48/1R, VFD 60/1LI VFD 12/2001B,48/1R= RUNJ VFD 60/5LINPUT VFD 12/2005B,48/1R, VFD 60/1LL VFD 12/2001B,48/1R= VFD 60/1L0 VFD 12/2001B,48/1R, VFD 60/3LSEQ VFD 12/2003B,48/1R, VFD 60/3LREW VFD 12/2003B,48/1R, VFD 60/1LX VFD 12/2001B,48/1R, RUNK BSS 10 COMMAND REFORMAT AREA RUNL VFD 60/3LOPT VFD 12/2003B,48/1R= VFD 60/1L0 VFD 12/2001B,48/1R, VFD 60/2LET VFD 12/2002B,48/1R= VFD 60/1LF VFD 12/2001B,48/1R. RUNM VFD 60/1LA VFD 12/2001B,48/1R, VFD 60/2LTS VFD 12/2002B,48/1R, VFD 60/1LT VFD 12/2001B,48/1R. VFD 60/0 VFD 60/0 * BASIC,B=0,I=INPUT,L=0,GO,AS=0. RUNO BSS 0 VFD 60/6L$BASIC VFD 12/2006B,48/1R, VFD 60/1LB VFD 12/2001B,48/1R= RUNP VFD 60/1L0 VFD 12/2001B,48/1R, VFD 60/1LI VFD 12/2001B,48/1R= RUNQ VFD 60/5LINPUT VFD 12/2005B,48/1R, VFD 60/1LL VFD 12/2001B,48/1R= VFD 60/1L0 VFD 12/2001B,48/1R, RUNS VFD 60/2LGO VFD 12/2002B,48/1R, RUNR VFD 60/4LAS=0 VFD 12/2004B,48/1R. VFD 60/0 VFD 60/0 BSS 0 TSYS EQU *-1 VFD 18/RUN4,42/0 VFD 18/RUN7,42/0 VFD 18/RUN8,42/0 VFD 18/RUN11,42/0 SAV SPACE 4 ** SAV - SAVE, REPLACE, OR PURGE FILE. * * PROCESS IMPLIED PRIMARY FILE COMMANDS. SAV BSS 0 ENTRY SA3 CCMA GET PARAMETER COUNT SX2 X3-1 SA1 PBUF+2 GET FILE NAME ZR X2,SAV1 IF IMPLIED FILE NAME NZ X1,SAV2 IF NOT IMPLIED FILE NAME SAV1 SA1 A0+VFNT GET PRIMARY FILE NAME MX3 42 BX6 X3*X1 ZR X6,PBS IF NO PRIMARY FILE EQ PSS PROCESS COMMAND SAV2 RJ TPF CHECK FOR PRIMARY FILE NZ X6,PBS IF NOT PRIMARY FILE EQ PSS PROCESS COMMAND SOF SPACE 4 ** SOF - SETS SORT FLAG. SOF BSS 0 SA2 CCMA CHECK PARAMETER COUNT SA1 PBUF+2 SX2 X2-1 NZ X2,SOF1 IF SORT OF EXPLICIT FILE SA1 A0+VSTT SX6 B1 LX6 52 BX6 X1+X6 SA6 A1 EQ RDY * ENTER HERE FROM PAC. SOF1 RJ TPF CHECK PRIMARY FILE NAME NZ X6,PBS IF NOT PRIMARY FILE BEING SORTED SOF2 BSS 0 SA1 A0+VSTT CLEAR SORT FLAG SX2 B1 LX2 52 BX6 -X2*X1 SA6 A1 EQ PBS STA SPACE 4 ** STA - DETERMINES THE CURRENT JOB STATUS. STA BSS 0 SA1 CCMA CHECK PARAMETER COUNT SX1 X1-1 NZ X1,STA11 IF OPTIONAL PARAMETERS ENTERED * PROCESS SIMPLE *STATUS* (*ENQUIRE*) COMMAND. STA1 TA2 B2,VRAP ZR X2,STA5 IF NO QUEUED ENTRY MX5 12 BX1 X5*X2 NZ X1,STA3 IF SINGLE QUEUE ENTRY SB7 X2 ADDRESS OF ENTRIES SB6 B7+VCPC STA2 SA1 B7 LOAD ENTRY MX5 12 BX2 X5*X1 MASK OFF REQUEST LX2 12D ZR X2,STA4 IF NO MORE ENTRIES IN POT SX2 X2-STA$ ZR X2,STA12 IF *STA$* REQUEST FOUND SB7 B7+1 ADVANCE TO NEXT ENTRY NE B7,B6,STA2 IF NOT AT END OF POT EQ STA4 ENTER *STA$* REQUEST STA3 LX1 12D SX2 X1-STA$ ZR X2,STA12 IF ENTRY IS *STA$* STA4 SX5 STA$ SET STA$ QUEUE ENTRY SX7 B0+ EQ PCS1 MAKE QUEUE ENTRY * REENTRY FROM QUEUED ENTRY. STA5 SA1 A0+VROT CHECK JOB STATUS LX1 59-1 SX7 B0 NG X1,STA6 IF JOB IN SYSTEM LX1 59-0-59+1 PL X1,STA4 IF ACTIVITY * MAKE *1TA* QUEUE ENTRY WITHOUT CLEARING THE COMPLETION * BIT IN VROT. STA6 SX5 ITA1$ CALL *1TA* FOR JOB STATUS SB7 ITAQ BX6 X6-X6 CLEAR POSSIBLE EOL SA6 B4+4 SA6 A6+B1 SX6 B3 LX5 48 LX6 12 BX5 X5+X6 RJ MQE MAKE QUEUE ENTRY EQ PCSX EXIT * REENTRY FROM SJS TO ASSIGN MESSAGE. STA7 SA1 A0+VROT CHECK FOR JOB ACTIVITY MX2 -5 BX2 -X2*X1 SX6 X2-1 NZ X6,STA8 IF ACTIVITY SA1 =0LIDLE BX6 X1 SA6 B4 ISSUE IDLE MESSAGE STA8 SA1 B4+VCPC-1 GET THE SRU ACCUMULATOR VALUE RJ FSM FORMAT STATUS MESSAGE SX6 FSMA SB4 X7 EQ PCS6 ISSUE STATUS MESSAGE * PROCESS OPTIONAL PARAMETERS. STA11 SA2 A0+VROT CHECK JOB ACTIVITY MX5 -5 BX5 -X5*X2 SX5 X5-1 SMA X6,( JOB ACTIVE."NL") NZ X5,PCS5 IF TERMINAL NOT IDLE EQ PBS ENTER JOB * PROCESS DISCARDED REQUEST. STA12 SB4 B0 RJ DPT DROP INPUT POT EQ PCSX EXIT STO SPACE 4 ** STO - STOPS COMPUTATION ON A USER,S JOB. STO BSS 0 ENTRY SX2 /1TD/SDU SUSPEND DRIVER FOR USER BREAK PROCESSING SX7 STO1 SET REENTRY ADDRESS EQ DCR ENTER DRIVER REQUEST TO HANG DRIVER STO1 SA2 SSPA SET *TAET* ERROR FLAG IN *SSPA* AND X7 SX7 TAET MX6 36 LX2 -24 BX6 X6*X2 REMOVE OLD X7 PARAMETER BX6 X6+X7 INSERT *TAET* ERROR FLAG LX6 24 SA6 A2 EQ PUB PROCESS AS A USER BREAK 2 SUB SPACE 4 ** SUB - PROCESS DEFAULT ON SUBMIT. SUB BSS 0 SA3 CCMA GET PARAMETER COUNT SX2 X3-1 SX6 2 RESET PARAMETER COUNT SA1 PBUF+2 GET FILE NAME ZR X2,SUB1 IF NULL FILE NAME SX2 X2-1 NZ X1,PSS IF NOT DEFAULT BX6 X3 SUB1 SA6 A3 SA1 A0+VFNT SET DEFAULT MX3 42 BX6 X3*X1 ZR X6,IPF IF NO PRIMARY FILE SX7 1R, SB6 6 PX7 B6,X7 SA7 PBUF+1 SA6 A7+B1 RJ CFC GET CHARACTER COUNT SX7 1R. ZR X2,SUB2 IF FILE NAME ONLY SA3 A6+B1 GET SEPARATOR UX7,B7 X3 SUB2 PX7 B6,X7 SA7 A6+B1 NZ X2,PSS IF THREE PARAMETERS BX6 X6-X6 SA6 A7+B1 SA6 A6+B1 EQ PSS PROCESS COMMAND TAP SPACE 4 ** TAP - SETS TAPE MODE OPERATION FLAG. TAP BSS 0 SA1 A0+VDCT SET TAPE MODE SX6 B1 LX6 48 BX6 X1+X6 SA6 A1 EQ RDY ISSUE MESSAGE TER SPACE 4 ** TER - SETS TERMINAL TYPE. TER BSS 0 SA1 CCMA CHECK PARAMETER COUNT SX1 X1-1 ZR X1,TER1 IF NO TYPE GIVEN SA5 PBUF+2 CHECK PARAMETER RJ LTT LOCATE TERMINAL TYPE ZR X5,TER1 IF NO PARAMETER GIVEN SX7 X1 EXTRACT CLASS SA1 X2 FIRST TERMINAL NAME SB7 X2 BX5 X5+X7 MERGE WITH PARAMETER SX2 /1TD/STT SET DRIVER REQUEST + BX7 X1-X5 COMPARE TABLE AND PARAMETER ZR X7,TER2 IF MATCH FOUND SA1 A1+B1 NZ X1,*-1 TER1 SMA X6,( INCORRECT TERMINAL TYPE."NL") EQ PCS5 ISSUE MESSAGE TER2 SX1 A1-B7 SET NEW INDEX LX1 6 BX2 X2+X1 SX7 RDY SET RETURN JP DCR ISSUE DRIVER REQUEST TIM SPACE 4 ** TIM - PROCESS TIMEOUT LOGOFF COMMAND. TIM BSS 0 MX2 -1 SA3 A0+VDCT GET ACCESS BITS LX2 12+10 POSITION FOR TIMEOUT BIT BX7 X2*X3 CLEAR BIT SA7 A3 RESTORE *VDCT* WORD JP RDY ISSUE *READY* TXT SPACE 4 ** TXT - SETS TEXT MODE OPERATION FLAG. TXT BSS 0 SA2 A0+VFNT MX1 42 BX1 X1*X2 ZR X1,IPF IF NO PRIMARY FILE LX2 59-12 SMA X6,( WRITE ON READ-ONLY FILE."NL") NG X2,PCS5 IF WRITE LOCKOUT BIT SET SX6 B1 SET TEXT MODE SA2 A0+VDCT LX6 50-0 BX6 X6+X2 SA6 A2 REWRITE VDCT SX7 B1 CLEAR SORT FLAG LX7 52 SA1 A0+VSTT BX7 -X7*X1 SA7 A1 SMA X6,( ENTER TEXT MODE."NL""LF") EQ PCS5 ISSUE MESSAGE UNU SPACE 4 ** UNU - USER NAME SEARCH. * * *UNU* SEARCHES FOR USERS ON THE SYSTEM UNDER THE GIVEN USER * NUMBER. THE JOB SEQUENCE NUMBERS OF THOSE USERS ARE RETURNED * TO THE TERMINAL. * * ENTRY (SEE SSP). * * EXIT LIST OF *JSN*S ASSIGNED TO TERMINAL. * * USES X - 1, 2, 3, 6, 7. * A - 1, 2, 6, 7. * B - 5, 6, 7. * * CALLS ASM. UNU BSS 0 ENTRY TB7 B0,VTTP,LWA TB6 VTTL*VPST-VTTL,VTTP FWA OF FIRST NON-PSEUDO TERMINAL SA2 CCMA CHECK PARAMETER COUNT SX2 X2-1 ZR X2,IPL IF USER NAME NOT GIVEN SA1 =C*TERMINAL(S).* SA2 A1+1 BX7 X1 BX6 X2 SA7 PBUF SA6 A7+1 SA1 PBUF+2 GET GIVEN USER NAME SB5 5 SET MAXIMUM NUMBER OF USERS RETURNED MX3 42 MX7 24 UNU1 SA2 B6+VUIT GET USER NAME TO COMPARE SB6 B6+VTTL BX2 X2*X3 BX2 X1-X2 NZ X2,UNU2 IF USER NAMES DO NOT MATCH SA2 A2+VFST-VUIT BX6 X2*X7 SB5 B5-B1 NG B5,UNU4 IF MORE THAN MAXIMUM NUMBER OF USERS SA6 A6+1 ADD *JSN* TO THE LIST UNU2 LT B6,B7,UNU1 IF STILL MORE USERS TO CHECK SB6 B5-5 ZR B6,UNU3 IF NO USERS FOUND SMA A1,("NL") BX7 X1 SA7 A6+B1 TERMINATE THE LIST EQ UNU5 ISSUE THE MESSAGE UNU3 SMA A1,( NONE."NL") SA2 A1+B1 BX6 X1 BX7 X2 SA6 A6+B1 SA7 A6+1 EQ UNU5 ISSUE THE MESSAGE UNU4 SMA A1,( MORE USERS."NL") SA2 A1+B1 BX6 X1 BX7 X2 SA6 A6 SA7 A6+1 UNU5 SX6 PBUF PROCESS MESSAGE SB4 A7-PBUF+1 RJ MVA EQ PCSX EXIT XEQ SPACE 4 ** XEQ - EXECUTE BATCH COMMAND. XEQ BSS 0 SA1 PBUF+1 SX1 X1-1R, NZ X1,BAT2 IF NOT *,* SX2 PBUF+2 STRIP OFF *X,* SX3 PBUF SA4 CCMB GET NO. OF WORDS TO MOVE SB5 X4 RJ MDA EQ BAT2 TITLE PCM - REENTRANT COMMAND PROCESSING ROUTINES. BJB SPACE 4,20 ** BJB - BEGIN JOB. * * *BJB* HAS TWO ENTRY POINTS. USERS BEGINNING A JOB STEP * ENTER AT *BJB*. JOBS WHICH HAVE BEEN ROLLED OUT FOR * SOME REASON ARE RE-ENABLED BY ENTERING AT *BJB1*. * * ENTRY (A0) = TERMINAL TABLE ADDRESS. * (X6) = PRE-PROCESSOR INDEX. * (X7) = ENTRY POINT NAME. * (B3) = COMMAND POT POINTER. * * EXIT JOB ENABLED. * * USES X - ALL. * A - 1, 2, 3, 4, 6, 7. * B - 3, 4. * * CALLS DPT, GOP, INO, PMR, RDC, UEC. * * MACROS PARAM. BJB BSS 0 ENTRY BX4 X7 AX4 54 RIGHT JUSTIFY FIRST CHARACTER SB7 X4+77B-1R$ NZ B7,BJB0 IF FIRST CHARACTER NOT DOLLAR SIGN LX7 6 STRIP LEADING DOLLAR SIGN FROM *EPN* BJB0 TA4 B2,VRAP CHECK FOR QUEUE ENTRY NZ X4,CDA IF ANOTHER ENTRY ALREADY QUEUED SA6 BJBA STORE *PPI* SA7 BJBB STORE *EPN* SX6 B3 STORE POT POINTER SB3 B0 SA6 BJBC RJ INO ISSUE NULL OUTPUT SA1 BJBC RESTORE POT POINTER SB3 X1+ EQ BJB2 SET UP *ENEJ* CALL BJB1 SA6 BJBA STORE *PPI* SA7 BJBB STORE *EPN* BJB2 SA1 A0+VROT SX2 B1 BX6 X2*X1 ABORT ON TERMINAL TABLE INTERLOCKED ZR X6,BJB5 IF JOB IS IN ENABLED STATE SA3 A0+VDCT CHECK CONNECTION TYPE LX3 59-47 NG X3,PCSX IF CONNECTION LOANED BX1 -X2*X1 SET THE TERMINAL BUSY LX2 1-0 BX1 X2+X1 SET JOB IN SYSTEM FLAG MX2 48 SX6 B3 STORE COMMAND LINE POT POINTER LX2 36 BX2 X1*X2 LX6 36 BX6 X2+X6 SA6 A1 REWRITE *VROT* SB3 B0 RJ GOP GET POT FOR EJT PARAMETER BLOCK SA1 A0+VDCT READ VDCT FOR NETWORK TERMINAL SA3 BJBA GET *PPI* IFNET BJB2.1 IF NETWORK TERMINAL SA2 A3+B1 GET ENTRY POINT NAME BX6 X2 BX7 X3 SA6 B4 SAVE ENTRY POINT NAME SA7 B4+B1 SAVE *PPI* RJ RDC WAIT FOR VDCT INTERLOCK SA2 B4+ RESTORE ENTRY POINT NAME BX7 X2 SA3 A2+B1 RESTORE *PPI* SA7 BJBB BJB2.1 SX2 B1 LX2 54-0 BX6 X1+X2 SA6 A1 SET READ DATA FLAG SA1 A0+VSTT SET JOB COMPLETION FLAG BX6 X1+X2 SA6 A1 REWRITE VSTT SX1 B1 BX1 X1*X3 ZR X1,BJB3 IF PRIMARY FILE NOT TO BE SORTED BX3 -X1*X3 CLEAR *PPI* SORT FLAG SA1 A0+VFNT MX2 42 BX2 X1*X2 ZR X2,BJB3 IF NO PRIMARY FILE EXISTS SA1 A0+VSTT LX1 59-52 PL X1,BJB3 IF SORT NOT NEEDED SX3 X3+B1 RESTORE *PPI* SORT FLAG MX6 1 CLEAR SORT FLAG BX6 -X6*X1 LX6 52-59 SA6 A1 REWRITE VSTT BJB3 SA1 A0+VROT STORE *PPI* IN TERMINAL TABLE MX2 54 LX2 48 BX6 X1*X2 CLEAR PREVIOUS INDEX BX2 X3 LX2 48 BX6 X2+X6 ADD NEW INDEX SA6 A1 REWRITE VROT PARAM ENEJ,X3,BJBB RJ PMR PROCESS MONITOR REQUEST NZ X2,BJB4 IF ERROR RETURNED SB4 B0 RJ DPT RETURN THE PARAMETER BLOCK POT SA1 A0+VFST GET NEXT OPERATION INDEX MX6 5 LX6 17 BX7 X6*X1 BX6 -X6*X1 CLEAR OLD INDEX AX7 12 SA6 A1 REWRITE VFST SX6 X7-TNOIL PL X6,BJB4 IF NEXT OPERATION NOT DEFINED SA1 X7+TNOI SB7 X1 SB3 B0 BX7 X7-X7 JP B7 START NEXT OPERATION BJB4 RJ UEC PROCESS UNEXPECTED ERROR CODE SB4 B0 RJ DPT RETURN THE PARAMETER BLOCK POT SA1 A0+VROT SET TERMINAL NOT BUSY MX2 57 CLEAR JOB CONTINUATION AND JOB IN SYSTEM BX6 X1*X2 SX3 B1 BX6 X3+X6 MX3 -12 REUSE COMMAND LINE POT POINTER LX3 36 BX2 -X3*X1 BX6 X3*X6 AX2 36 SA6 A1 REWRITE VROT SA1 A0+VSTT CLEAR JOB COMPLETION FLAG LX3 54-0 BX6 -X3*X1 SA6 A1 SB3 X2 SMA X6,( SYSTEM ERROR."NL") SB4 B0 RJ MVA ISSUE MESSAGE SX7 3RIAF SET NVF PARAMETER LX7 42 SB3 B0 SA7 A0+VFNT IFNET HNG RJ RDC WAIT FOR DRIVER TO ISSUE MESSAGE RJ CLE CLEAN UP TERMINAL TABLE SX7 DIN SX2 /1TD/LGI SET RELOGIN REQUEST EQ DCR1 MAKE DRIVER REQUEST * ABORT BEGIN JOB PROCESS. BJB5 SX6 3RBJB *ABT* ENTRY PRESET RJ ABT ABORT EQ PCSX EXIT BJBA CON 0 PRE-PROCESSOR INDEX BJBB CON 0 ENTRY POINT NAME BJBC CON 0 COMMAND POT POINTER TNOI SPACE 4,10 ** TNOI - TABLE OF NEXT OPERATION INDICES. * * 60/ NEXT OPERATION ADDRESS TNOI BSS 0 CON PCSX RETURN FOR NO SPECIFED OPERATION CON LIS7 LIST AFTER SORT CON ETX3 EXIT TEXT MODE AFTER PACK COMPLETE CON PUB7 COMPLETE USER BREAK PROCESSING TNOIL EQU *-TNOI CDA SPACE 4,10 ** CDA - ISSUE *COMMAND ACTIVE* DIAGNOSTIC. * * EXIT TO PCS5 TO ISSUE MESSAGE. CDA BSS 0 ENTRY SMA X6,( COMMAND ACTIVE."NL") SET MESSAGE ADDRESS EQ PCS5 ISSUE MESSAGE EJB SPACE 4,20 CJA SPACE 4,10 ** CJA - CLEAR JOB ACTIVITY. * * CLEARS INP$ REQUESTS FROM REENTRY QUEUE. REENTERS UNTIL * REENTRY QUEUE IS CLEAR. ON REENTRY, IF A SECOND CJA$ * REENTRY EXITS IN THE QUEUE, EXIT AND PROCESS THE SECOND * CJA$ REENTRY. * * ENTRY (X7) = RETURN ADDRESS. * (B3) = ANYTHING TO BE SAVED. * * CALLS DPT, GRT, UQS. CJA BSS 0 ENTRY MX2 -12 SX1 B3 LX7 18 BX1 -X2*X1 BX7 X1+X7 SA7 CJAA SAVE RETURN ADDRESS CJA1 RJ UQS UPDATE REENTRY QUEUE STACK SB5 B2+ CHECK NEXT QUEUE ENTRY RJ GRT BX3 X4 AX4 48 SX6 X4-INP$ NZ X6,CJA4 IF NOT INPUT REQUEST SX6 B0+ CLEAR ENTRY SA6 A4 MX1 -12 GET POSSIBLE POT POINTER AX3 12 BX1 -X1*X3 ZR X1,CJA1 IF NO POT POINTER IN REQUEST SB3 X1 DROP POT SB4 B0 RJ DPT EQ CJA1 LOOP THROUGH STACK CJA4 SA1 CJAA RESTORE ENTRY CONDITIONS TA4 B2,VRAP CHECK REENTRY QUEUE SX5 CJA$ SB3 X1 AX1 18 BX7 X1 NZ X4,PCS1 IF OTHER REENTRIES PRESENT SB7 X7 JP B7 RETURN TO CALLER * REENTRY FROM WAIT-COMPLETION QUEUE. CJA5 SB5 B2 GET NEXT QUEUE ENTRY RJ GRT AX4 48 SX6 X4-CJA$ NZ X6,CJA IF NOT SUBSEQUENT *CJA* ENTRY EQ PCSX EXIT CJAA CON 0 STORAGE FOR RETURN ADDRESS FTP SPACE 4,10 ** FTP - FINISH TIMEOUT PROCESSING. * * EXIT TO HNG IF DETACH SUCCESSFUL. * TO FLO IF DETACHED FAILED. * * CALLS CDP, DAP, DLP, DPT, SLF, SSI, SSP. FTP BSS 0 ENTRY IFMUX FTP1 TA1 B2,VMST CHECK TIMEOUT FLAG MX6 59 CLEAR INPUT ENABLED LX6 53-0 BX6 X6*X1 LX1 59-48 NG X1,FTP1 IF TIMEOUT IN PROGRESS SA6 A1 REWRITE VMST SB3 B0 EQ RES RESTART TERMINAL FTP1 SX7 FTP2 SET REENTRY ADDRESS SA1 A0+VSTT SX2 401B LX2 48 BX6 X2*X1 NZ X6,PCSX IF LOGOUT OR DETACH IN PROGRESS EQ CJA CLEAR JOB ACTIVITY FTP2 SA1 A0+VUIT CHECK EJT ORDINAL MX2 -12 BX2 -X2*X1 ZR X2,HNG IF NO EJT ORDINAL RJ DLP DUMP LAST INPUT POT RJ SSP RESET REGISTERS SX5 FTP3$ EQ PCS1 WAIT FOR DUMP TO COMPLETE FTP3 SX7 TORC SET TIMEOUT REASON CODE EQ DTJ DETACH JOB * NORMAL (NO ERROR) RETURN. FTP4 RJ SLF SET LOGOUT IN PROGRESS SA1 A0+VFST SET UP TIMEOUT MESSAGE MX2 24 BX6 X1*X2 SX3 1R. LX3 30 BX6 X3+X6 SA6 SSIB RJ DAP DROP ASSIGNED POTS RJ SSP RESET REGISTERS SX6 B1 SEND TIMEOUT MESSAGE RJ SSI SEND SRU INFORMATION SX7 3RBYE SET NVF PARAMETER LX7 42 SB3 B0 SA7 A0+VFNT RJ CDP CLEAR DETACH IN PROGRESS SX5 HNG$ EQ PCS1 EXIT AND DISCONNECT * ERROR ON DETACH RETURNS HERE. FTP5 SA1 A0+VSTT CLEAR LOGOUT AND DETACH SX6 0401B LX6 48 BX6 -X6*X1 SA6 A1 REWRITE VSTT SB4 B0 ZR B3,FTP6 IF NO HELD POTS RJ DPT DROP POTS FTP6 SX7 2 SET FORCE LOGOUT VALUE EQ FLO FORCE LOGOUT IEX SPACE 4 ** IEX - ISSUE EXECUTE ONLY MESSAGE. IEX BSS 0 SMA X6,( EXECUTE ONLY FILE."NL") RJ SSP EQ PCS5 ISSUE MESSAGE IGN SPACE 4,20 ** IGN - IGNORE QUEUE ENTRY. * * DROPS REENTRY POTS AND EXITS FROM PCS PROCESSING. * * ENTRY (B3) = REENTRY POT CHAIN POINTER. * * EXIT POTS DROPPED. * * CALLS DPT. IGN BSS 0 ENTRY ZR B3,PCSX IF NO POTS TO BE DROPPED SB4 B0+ DROP POT CHAIN RJ DPT EQ PCSX EXIT IPF SPACE 4 ** IPF - ISSUE NO PRIMARY FILE NAME. IPF BSS 0 SMA X6,( NO PRIMARY FILE."NL") RJ SSP EQ PCS5 ISSUE MESSAGE IPL SPACE 4 ** IPL - ISSUES MESSAGE *INCORRECT PARAMETER.* * * ENTRY- * NONE. IPL BSS 0 SMA X6,( INCORRECT PARAMETER."NL") RJ SSP EQ PCS5 ISSUE MESSAGE PBS SPACE 4 ** PBS - PROCESS COMMAND IN SYSTEM. * PSS - PROCSS COMMAND IN SYSTEM AFTER SORT. * * ENTRY- * SEE SSP. PSS SX6 B1 SET *PPI* TO SORT FILE EQ PBS1 PBS SX6 B0+ SET *PPI* NOT TO SORT THE FILE * IF IN BATCH SUBSYSTEM ISSUE COMMANDS WITHOUT *$* PREFIX. PBS1 SX1 LBUF COMMAND BUFFER WITH *$* PREFIX SA2 A0+VSTT CHECK FOR BATCH SUBSYSTEM MX5 -3 LX2 -12 BX5 -X5*X2 SX2 X5-BATS NZ X2,PBS2 IF NOT BATCH SUBSYSTEM SX1 PBUF COMMAND BUFFER WITHOUT *$* PREFIX PBS2 RJ PCB PACK COMMAND SA1 PBUF BX7 X1 SET *EPN* EQ BJB BEGIN JOB RDY SPACE 4 ** RDY - ISSUES READY MESSAGE AND RETURNS TO PCS * * (A0) = TERMINAL TABLE ADDRESS. * (B2) = TERMINAL NUMBER. * (B3) = POT POINTER OR 0. RDY BSS 0 IFNET /IAFEX4/RDY IF NETWORK TERMINAL SA1 A0+VSTT SET SUBSYSTEM SA2 A0+VDCT CHECK TAPE MODE LX2 59-48 MX6 -3 LX1 -12 BX6 -X6*X1 EXTRACT CURRENT SUBSYSTEM SX6 RDYA+X6 SELECT MESSAGE PL X2,PCS5 ISSUE MESSAGE IF NOT TAPE MODE SX6 =2L ISSUE NULL MESSAGE EQ PCS5 ISSUE MESSAGE PCS TITLE PCS - PROCESS QUEUE ENTRY. PCS SPACE 4 ** PCS - PROCESS QUEUE ENTRY. * * SAVES PARAMETERS AND RETURN ADDRESS AND THEN EXECUTES STACK * ENTRY. * * ENTRY (X5) = REENTRY STACK ENTRY. * (B7) = ADDRESS OF PROCESSING ROUTINE. * * CALLS PROCESSING ROUTINE: * (B2) = STACK ENTRY BITS 00-11 (TERMINAL NUMBER). * (B3) = STACK ENTRY BITS 12-23 (POT POINTER). * (B4) = POT ADDRESS. * (X7) = STACK ENTRY BITS 24-47, RIGHT JUSTIFIED. ** PCS5 - EXIT TO ASSIGN MESSAGE. * * LENGTH IS ASSUMED TO BE 7 OR LESS CM WORDS AND * TERMINATES WITH A ZERO BYTE. * * MESSAGE IS 7 OR LESS WORDS IN LENGTH AND IS TERMINATED * BY LINE TERMINATOR OR CONTROL BYTE. * * ENTRY- * (B7) = ADDRESS OF PROCESSING ROUTINE * (X5) = STACK ENTRY ** ENTER- WITH PARAMETERS FOR MVA. PCS5 SB4 0 SET LENGTH ** PCS6 - EXIT TO ASSIGN MESSAGE. * * ENTRY (B4) = MESSAGE LENGTH IN CM WORDS. PCS6 RJ MVA ISSUE MESSAGE PCS SUBR ENTRY/EXIT BX7 X5 SA7 SSPA RJ SSP SET PARAMETERS JP B7 ** PCS1 - EXIT TO MAKE QUEUE ENTRY. * * ENTRY (A0) = TERMINAL TABLE ADDRESS. * (X5) = TRRT ORDER CODE. * (X7) = QUEUE ENTRY BITS 24-47. * (B2) = TERMINAL NUMBER. * (B3) = QUEUE ENTRY BITS 12-23. * * EXIT QUEUE ENTRY MADE. * VROT BIT ZERO CLEARED (BUSY) FOR ITAQ OR ITOQ * REQUEST. PCS1 BSS 0 SA1 TRRT-2000B+X5 SB7 B0 AX1 54 ZR X1,PCS3 IF FOR NO QUEUE SB7 TRQT+X1 PCS3 LX5 48 MX6 -24 BX7 -X6*X7 LX7 24 BX5 X5+X7 MX6 -12 SX7 B3 BX7 -X6*X7 LX7 12 BX5 X5+X7 RJ MQE MAKE ENTRY IN REENTRY TABLE NZ X2,PCSX IF NOT CURRENT ENTRY SB6 B7-ITAQ SB7 B7-ITOQ ZR B6,PCS4 IF 1TA CALL NZ B7,PCSX IF NOT 1TO OR 1TA CALL PCS4 SA1 A0+VROT SET TERMINAL TABLE BUSY FOR 1TA AND 1TO MX2 59 BX6 X1*X2 SA6 A1 REWRITE VROT EQ PCSX RETURN TO CALLING ROUTINE TITLE PMQ - PROCESS MONITOR WAIT QUEUE. ** PMQ - PROCESS MONITOR WAIT QUEUE. * * RETURNS CONTROL TO THE ROUTINE WHICH MADE THE MONITOR * REQUEST WHEN THE COMPLETE BIT IN THE PARAMETER BLOCK * IS SET. * * USES X - 1, 2, 3, 4, 5, 6, 7. * A - 0, 1, 2, 4, 5, 6, 7. * B - 3, 5, 6, 7, * * CALLS GQE, GRT, PCS, SSP, UQS. * * MACROS TTADD. PMQ SUBR ENTRY/EXIT SA4 MNWQ CHECK QUEUE CONTENTS SX7 X4 SA2 A4+B1 ZR X7,PMQX IF QUEUE EMPTY SA1 RTIM CHECK TIME SINCE QUEUE PROCESSED SX3 MWQT IX2 X1-X2 IX2 X3-X2 PL X2,PMQX IF TIME DELAY NOT COMPLETE BX6 X1 UPDATE PROCESSING TIME SA6 A2 * SET QUEUE PROCESSING POINTERS. SA7 PMQA LAST TERMINAL OF QUEUE AX4 18 FIRST TERMINAL OF QUEUE BX7 X7-X7 SX6 X4 SB5 B0 SA6 A7+B1 NEXT TERMINAL = FIRST TERMINAL SA7 A6+B1 CLEAR TERMINAL LINK * ADVANCE TO NEXT TERMINAL. PMQ1 SA1 PMQA LAST TERMINAL IN QUEUE SX7 B5 IX4 X1-X7 ZR X4,PMQX IF LAST TERMINAL CHECKED SA5 A1+B1 NEXT TERMINAL SB5 X5 ZR X5,PMQX IF NO NEXT TERMINAL RJ GRT READ QUEUE ENTRY ZR X4,PMQX IF NO QUEUE ENTRY MX5 -12 SET NEXT TERMINAL NUMBER BX7 -X5*X4 TTADD B5,A0,X1,X2 SA7 A5 * CHECK PARAMETER BLOCK STATUS. AX4 12 BX2 -X5*X4 LX2 3 TA1 X2,VBMP LX1 59-0 NG X1,PMQ2 IF REQUEST COMPLETE SX7 B5 RETAIN TERMINAL IN QUEUE SA7 A7+B1 EQ PMQ1 ADVANCE TO NEXT TERMINAL * PROCESS COMPLETED ENTRY. PMQ2 SA1 PMQC GET LINK TO CURRENT TERMINAL SB6 MNWQ SB7 X1 RJ GQE GET QUEUE ENTRY UX4,B7 X5 SA2 TRRT+B7 SB7 X2 RJ PCS PROCESS FUNCTION RJ SSP RESET PARAMETERS RJ UQS UPDATE QUEUE STACK RJ SSP RESET PARAMETERS SB5 B2 SET CURRENT TERMINAL NUMBER EQ PMQ1 ADVANCE TO NEXT QUEUE ENTRY PMQA CON 0 LAST TERMINAL IN QUEUE PMQB CON 0 NEXT TERMINAL IN QUEUE PMQC CON 0 TERMINAL LINKED TO CURRENT TERMINAL PPU TITLE PPU - PROCESS PPU REQUESTS. PPU SPACE 4 ** PPU - PROCESSES ALL *IAFEX* REQUESTS THAT REQUIRE A PPU * TO BE ASSIGNED. THESE REQUESTS ARE TAKEN FROM *IAFEX,S* * INTERNAL QUEUE, ORDERED APPROPRIATELY, AND PLACED INTO POT * QUEUES FOR THE VARIOUS PPU PROGRAMS. * POST PROCESS *1TA* REQUESTS. PPU SUBR ENTRY/EXIT SA1 PITA ZR X1,PPU2 IF *1TA* ACTIVE BX2 X1 AX1 36 NZ X1,PPU2 IF REQUEST NOT MADE YET MX1 -12 BX3 -X1*X2 AX2 12 SX1 X2 ZR X1,PPU1 IF POST PROCESSING DONE SX6 B1 SET COMPLETION SA6 A1 SB3 X3 DROP POTS SB4 B0 RJ DPT * PROCESS *1TA* REQUEST QUEUE. PPU1 SA1 ITAQ CHECK IF REQUESTS WAITING UX2,B2 X1 ZR B2,PPU2 IF NO REQUESTS SA3 PPUA+1 CHECK IF REQUEST HAS WAITED 1/2 SECOND SA2 RTIM IX4 X2-X3 AX4 9 ZR X4,PPU2 IF TIME NOT ELASPED BX6 X2 SA6 A3 SX0 A1 SORT AND BUILD REQUEST QUEUE FOR *1TA* RJ BRQ ZR X6,PPU2 IF NO REQUEST QUEUE GENERATED SA1 PPUA BX7 X1+X6 SA7 PITA SA7 PPUC SAVE *1TA* REQUEST FOR DEBUG * POST PROCESS *1TO* REQUESTS. PPU2 SA1 PITO BX2 X1 AX1 36 NZ X1,PPUX IF REQUEST NOT MADE YET ZR X2,PPUX IF *1TO* ACTIVE AX2 24 ZR X2,PPU7 IF POST PROCESSING DONE LX2 3 TX1 X2+VCPC,VBMP SET LWA+1 OF POT LX2 33 SX3 X1-VCPC SET FWA OF POT LX1 18 BX2 X2+X3 BX6 X2+X1 SA6 PPUB+1 PPU3 SA1 PPUB+1 GET NEXT ENTRY TO PROCESS MX2 24 SA5 X1 BX3 X2*X1 ZR X5,PPU6 IF LAST ENTRY SX6 B1 ZR X3,PPU6 IF END OF POT CHAIN IX6 X1+X6 AX1 18 BX2 X1-X6 SX3 X2 NZ X3,PPU4 IF NOT END OF POT AX1 18 GET POT LINK SB3 X1 RJ GPL SX4 B3 SX7 B4+VCPC LX4 36 SX6 B4 LX7 18 BX6 X6+X4 BX6 X6+X7 * THE FORMAT OF THE *1TO* REQUEST UPON RETURN FROM *1TO* IS * *T 6/ RT,6/ NP,12/ 0,12/ LP,12/ FP,12/ TN * * IF INPUT WAS DUMPED TO THE PRIMARY FILE, * (RT) = 0, INPUT REQUEST. * (NP) = 0. * (LP) = LAST POT TO DROP. * (FP) = FIRST POT TO DROP. * (TN) = TERMINAL NUMBER. * * IF OUTPUT WAS REQUESTED FROM THE PRIMARY OR ROLLOUT FILE, * (RT) = 1, OUTPUT REQUEST. * (NP) = NUMBER OF POTS CONTAINING OUTPUT. * (LP) = LAST POT CONTAINING OUTPUT. * (FP) = FIRST POT CONTAINING OUTPUT. * (TN) = TERMINAL NUMBER. * * IF OUTPUT WAS REQUESTED, A *VASO* QUEUE ENTRY WILL * BE GENERATED TO ASSIGN THE DATA TO THE TERMINAL. IF * INPUT WAS DUMPED TO THE PRIMARY FILE, A *VDPO* QUEUE * ENTRY WILL BE FORMED TO DROP THE EMPTY POTS. PPU4 SA6 A1 MX4 -42 MASK IF *VASO* BX3 X5 MX1 -12 AX5 48 BX1 -X1*X3 EXTRACT TERMINAL NUMBER SB2 X1+ SX2 VASO SET TO ASSIGN OUTPUT NZ X5,PPU5 IF OUTPUT REQUEST SX2 VDPO SET TO DROP POTS MX6 12 MX4 -36 MASK IF *VDPO* LX6 24 BX6 X6*X3 ZR X6,PPU3 IF NO POTS TO DROP PPU5 SA1 TSTR-2000B+X2 LX5 36 MOVE POT COUNT FOR *VADO* BX3 X3+X5 BX5 -X4*X3 LX2 48 BX5 X5+X2 SB7 X1 RJ PCS EQ PPU3 PPU6 BX6 X6-X6 SA6 A1 SA2 PITO DROP POTS SX7 B1 AX2 24 SA7 A2 SB3 X2 SB4 B0 RJ DPT * PROCESS *1TO* REQUEST QUEUE. PPU7 SA1 ITOQ UX2 X1,B2 ZR B2,PPUX IF NO ENTRIES SX0 A1 RJ BRQ ZR X6,PPUX IF NO REQUEST QUEUE GENERATED SA1 PPUB LX6 24 BX7 X1+X6 SA7 PITO SA7 PPUC+1 SAVE *1TO* REQUEST FOR DEBUG EQ PPUX EXIT PPUA VFD 18/3R1TA,6/0,6/0,18/PITA,12/0 CON 0 TIME OF LAST 1TA REQUEST PPUB VFD 18/3R1TO,6/0,12/0,6/0,18/PITO CON 0 NEXT ENTRY TO POSTPROCESS PPUC CON 0 LAST *1TA* REQUEST CON 0 LAST *1TO* REQUEST RPC SPACE 4,30 ** RPC - REFILL POT CHAINS. * * FOR EACH *TGPM* QUEUE, *RPC* GETS QUEUE POINTERS FROM THE * QUEUE STATUS WORDS AND PASSES THEM TO ROUTINE *FPQ* TO FILL * THE QUEUE WITH POT CHAINS. THE QUEUE STATUS WORDS ARE * UPDATED AFTER EACH QUEUE HAS BEEN FILLED. * * ENTRY (VGPL) = *TGPM* QUEUE STATUS WORDS. * 6/PCL,6/PCC,12/PFP,12/NFP,12/BOQ,12/EOQ. * PCL = POT CHAIN LENGTH. * PCC = POT CHAIN COUNT(CONTROL VALUE). * PFP = PREVIOUS FILL POINTER. * NFP = NEXT FILL POINTER. * BOQ = BEGINNING OF QUEUE. * EOQ = END OF QUEUE. * * EXIT IF ENOUGH FIELD LENGTH WAS AVAILABLE, THE *TGPM* * QUEUES HAVE BEEN FILLED TO THEIR CONTROL VALUES. * IF NOT ENOUGH FIELD LENGTH WAS AVAILABLE, AS MANY * ENTRIES AS POSSIBLE WERE FILLED WITH POT CHAINS. * PCC, PFP, AND NFP IN *VGPL* WORDS HAVE BEEN UPDATED. * * USES A - 1, 2, 6. * X - 0, 1, 2, 3, 4, 6. * B - 2, 3, 4, 5. * * CALLS FPQ. RPC SUBR ENTRY/EXIT SX6 VGPL SAVE STATUS WORD ADDRESS RPC1 SA6 RPCA SA1 X6 BX2 X1 GET POINTERS FROM *VGPL* WORD AX2 24 MX3 -12 BX4 -X3*X2 SB3 X4 (B3) = NEXT FILL POINTER AX2 12 BX4 -X3*X2 SB4 X4 (B4) = PREVIOUS FILL POINTER AX2 12 MX3 -6 BX4 -X3*X2 SB5 X4 (B5) = POT CHAIN COUNT(CONTROL VALUE) AX2 6 BX4 -X3*X2 SB2 X4 (B2) = LENGTH OF POT CHAIN FOR THIS QUEUE RJ FPQ FILL POT QUEUE SA2 RPCA UPDATE QUEUE STATUS WORD SA1 X2 MX3 30 CLEAR OLD POINTERS LX3 24 BX6 X3*X1 SX3 B5 INSERT UPDATED CHAIN COUNT LX3 48 BX6 X6+X3 LX4 36 INSERT UPDATED PREVIOUS FILL POINTER BX6 X6+X4 LX0 24 INSERT UPDATED NEXT FILL POINTER BX6 X6+X0 SA6 X2 REWRITE *TGPM* QUEUE STATUS WORD SX2 X2+B1 BX6 X2 SX3 X2-VGPE NG X3,RPC1 IF NOT LAST QUEUE STATUS WORD EQ RPCX EXIT RPCA CON 0 ADDRESS OF *TGPM* QUEUE STATUS WORDS SPR TITLE SPR - SET FIELD LENGTH. SPR SPACE 4,20 ** SPR - EVALUATE AND ADJUST FIELD LENGTH. * * INCREASE EVALUATION IS DONE EACH TIME *SPR* IS ENTERED. * FIELD LENGTH INCREASES ARE PROCESSED BY A CALL TO *1TA*. * A THROTTLE FLAG IS USED TO SLOW DOWN THE USAGE OF POTS * SO IAF WILL NOT RUN OUT OF POTS BEFORE *1TA* GETS THE * FIELD LENGTH INCREMENT. * * FIELD LENGTH DECREASE EVALUATION IS PERFORMED AFTER THE * INTERVAL TIME HAS ELAPSED. THE TIME CYCLE IS DETERMINED * DYNAMICALLY ACCORDING TO THE AMOUNT OF FIELD LENGTH * VARIATION. MEMORY DECREASES ARE MADE BY THE SYSTEM * *MEMORY* MACRO. * * THE INITIAL RESET START TIME IS SET TO 6 MINUTES TO * ALLOW IAF TO PERFORM JOB RECOVERY. SPR9 SA7 VPAL RESET TOTAL POTS AVAILABLE BX6 X2 SA6 SPRK RESTORE CURRENT FL IN USE SX6 3RSPR NG X7,ABT+1 IF POTS AVAILABLE GOES NEGATIVE MEMORY CM,,,X2 RELEASE MEMORY SA1 SPRL COUNT MEMORY DECREASE SX6 X1+B1 SA6 A1 SPR SUBR ENTRY/EXIT SA1 VCPL NZ X1,SPRX IF FL INCREASE REQUEST PENDING * CHECK FOR FL INCREASE. SA4 VPAL TOTAL POTS AVAILABLE SA1 VPUL POTS IN USE IX3 X4-X1 FREE POTS SX6 X3-VMIP-VFLI/VCPC SX7 B0 SA1 SPRM CLEAR THROTTLE FLAG SA7 A1 SB3 X1 SAVE FLAG VALUE SX1 VFLI GET FIELD LENGTH INCREMENT SA5 VPLP PLT POINTERS BX2 X4 LX2 3 TX2 X2,VBMP OLD FL IX2 X2+X1 NEW FL NG X6,SPR4 IF MORE POTS NEEDED NZ B3,SPR4 IF THROTTLE FLAG SET * AFTER A RESET INTERVAL HAS ELAPSED RESET THE TIME INTERVAL. * EXIT IF A TIME INTERVAL HAS NOT ELAPSED. SA1 STIM CURRENT TIME BX6 X1 SA1 SPRD RESET START SX2 RESTO RESET INTERVAL IX2 X1+X2 RESET START + RESET INTERVAL IX7 X6-X2 CURRENT TIME - RESET TIME SA1 SPRJ SA2 SPRC NG X7,SPR1 IF NOT TIME TO RESET SA6 SPRD RESET START SX7 MINDL SET INTERVAL TIME SA7 A1 SPR1 IX2 X1+X2 CHECK TIME INTERVAL IX1 X6-X2 NG X1,SPRX IF TIME INTERVAL NOT ELAPSED SA6 A2 SET LAST EVALUATION * CHECK RESULTS OF PREVIOUS FIELD LENGTH EVALUATION. SA1 SPRE SA2 SPRG NZ X1,SPR6 IF FL INCREASES NON-ZERO NZ X2,SPR6 IF LAST FL SEGMENT USED * CHECK IF FL DECREASE POSSIBLE. SX2 VFLR FL DECREMENT POT COUNT IX1 X2-X3 PL X1,SPRX IF FL DECREASE NOT POSSIBLE SX6 B0 CLEAR DAYFILE MESSAGE COUNT SA6 SPRN * CALCULATE NEW FIELD LENGTH NEEDED FOR DECREASE. BX1 -X1 COMPLEMENT FL AX1 5 PLT WORDS ROUNDED TO NEAREST VFLI LX1 8 REQUIRED FL FOR DECREASE ZR X1,SPRX IF LESS THAN ONE VFLI MULTIPLE BX1 -X1 COMPLEMENT FL SA3 VPAL ALLOCATED POTS LX3 3 TX3 X3,VBMP OLD FL IX2 X3+X1 OLD FL - MIN DECREASE SA3 X5 LWA+1 OF PLT SPR2 SA3 A3-B1 ZR X3,SPR2 IF POTS NOT ALLOCATED SX3 A3+B1 HIGHEST PLT WORD+1 SB2 24 AX7 X5,B2 SX7 X7 SET FWA OF PLT IX6 X3-X7 FREE LWA+1 - FWA LX6 5 NUMBER OF PLT WORDS * 32 TX6 X6,VBMP MIN FL NEEDED FOR PLT LINKS ACTIVE SX7 X6+VCPC HIGHEST POT ADDR+8 IX6 X7-X2 PL X6,SPRX IF CANNOT DECREASE SA6 SPRH * DETERMINE NEW PLT LENGTH AND LWA. SPR4 AX1 3 NUMBER OF POTS TO ADD OR DROP IX7 X4+X1 NEW POTS COUNT AX1 2 GET NEW PLT LENGTH IX6 X1+X5 AX5 24 CHECK FOR PLT OVERFLOW SB2 X5 SET PLT FWA SB3 X6 SET PLT LWA+1 AX5 24 SB4 X5 SET PLT LENGTH SB3 B3-B2 GT B3,B4,SPR7 IF INCREASE NOT POSSIBLE SA6 A5 SX2 X2+77B ROUND UP FL NG X1,SPR9 IF FL DECREASE * PROCESS MEMORY INCREASE. SA3 SPRB COUNT FL INCREASE SX6 X3+B1 SA6 A3 SA6 SPRE SET FL INCREASE FLAG SA3 SPRA DETERMINE IF NEW MAXIMUM FL SA7 VCPL SET FL INCREASE IN PROGRESS SA4 SPRI READ *1TA* REQUEST IX1 X3-X2 MAXIMUM FL - REQUIRED FL BX6 X2 SA6 SPRK RESET CURRENT FL IN USE BX7 X4+X2 COMPLETE *1TA* REQUEST PL X1,SPR5 IF NOT NEW MAXIMUM SA6 A3 SET NEW MAXIMUM FL SPR5 SA7 PMSG EQ SPRX RETURN * MAKE NO FIELD LENGTH CHANGE IF INCRESES HAVE OCCURRED * THIS PERIOD OR IF NOT ENOUGH FIELD LENGHT REMAINS. * RESET INCREASE FLAG AND LAST SEGMENT USED FLAG. SET * MAXIMUM INTERVAL STATISTIC AND INCREMENT INTERVAL TIME * IF NECESSARY. SPR6 BX6 X6-X6 SA6 A1 RESET FL INCREASE FLAG SA6 A2+ SA3 SPRH ZR X3,SPRX IF REDUCE FLAG NOT SET SA6 A3 RESET REDUCE FLAG SA1 SPRJ INTERVAL TIME SX2 X1-MAXDL PL X2,SPRX IF INTERVAL TIME .GE. HIGH INTERVAL SX7 X1+INCTO SA7 A1 SA1 SPRF MAXIMUM INTERVAL TIME IX1 X1-X7 PL X1,SPRX IF INTERVAL TIME .LE. MAXIMUM INTERVAL SA7 A1+ EQ SPRX RETURN * ISSUE DAYFILE MESSAGE. SPR7 SA3 SPRN INCREMENT DAYFILE MESSAGE COUNT SX6 X3+B1 SA6 A3 NZ X3,SPRX IF MESSAGE HAS BEEN ISSUED MESSAGE (=C* PLT INCREASE NOT POSSIBLE.*) EQ SPRX RETURN * PARAMETERS FOR FIELD LENGTH EVALUATION. SPRA CON 0 MAXIMUM FL USED SPRB CON 0 NUMBER OF FL INCREASES SPRC CON 0 LAST EVALUATION SPRD CON 360D RESET START - SECONDS SPRE CON 0 FL INCREASES FLAG SPRF CON 0 MAXIMUM INTERVAL TIME SPRG CON 0 LAST SEGMENT USED FLAG SPRH CON 0 REDUCE FLAG SPRI VFD 18/3R1TA,6/0,12/4001B,24/0 SPRJ CON MINDL INTERVAL TIME SPRK CON 0 CURRENT FL IN USE SPRL CON 0 NUMBER OF FL DECREASES SPRM CON 0 THROTTLE FLAG SPRN CON 0 DAYFILE MESSAGE COUNT TDQ TITLE TDQ - PROCESS TIME DELAY QUEUE. TDQ SPACE 4 ** TDQ - PROCESS TIME DELAY QUEUE. TDQ SUBR ENTRY/EXIT SA2 STIM SA3 TIMQ+1 IX3 X2-X3 ELASPED TIME ZR X3,TDQX IF TIME DELAY NOT EXCEEDED BX6 X2 SAVE NEW TIME SA6 A3 SA4 A3-B1 UX0 X4,B2 AX0 18 TDQ1 ZR X0,TDQX IF NO MORE ENTRIES SB7 B5 SET PREVIOUS TERMINAL NUMBER SB5 X0 MX5 -24 BX2 -X5*X2 RJ GRT GET ENTRY SB2 B5 SET TERMINAL NUMBER IFMUX TDQ2 TA1 B5,VMST LX1 59-48 PL X1,TDQ3 IF TIMEOUT FLAG CLEAR TDQ2 MX6 -12 BX0 -X6*X4 AX4 24 BX4 -X5*X4 IX4 X4-X2 RESTART TIME - REAL TIME PL X4,TDQ1 IF TIME DELAY NOT PASSED TDQ3 SX0 B5 SAVE LAST TERMINAL PROCESSED SB6 TIMQ RJ GQE GET ENTRY FROM QUEUE SX1 B2 SX6 B5 SAVE CURRENT TERMINAL NUMBER SB2 X0 SET LAST TERMINAL PROCESSED LX6 18 BX0 X1+X6 RJ UQS UPDATE QUEUE STACK SA2 STIM BX1 X0 RESET NEXT TERMINAL NUMBER SX0 X0 AX1 18 SET TERMINAL NUMBER JUST COMPLETED SB5 X1 EQ TDQ1 TITLE TSR - CHECK FOR COMPLETION AND INITIATE NEXT OPERATION. TSR SPACE 4,20 ** TSR - PROCESS WAIT-COMPLETION QUEUE. * * EXECUTES THE NEXT OPERATION FOR TERMINALS IN THE * WAIT-COMPLETION QUEUE WHO MEET ONE OF THE FOLLOWING * CRITERIA - * * (A) THE PREVIOUS OPERATION IS COMPLETE. * (B) THE QUEUE ENTRY IS A WAIT-DRIVER (DCR1$) * QUEUE ENTRY. * (C) THE QUEUE ENTRY IS A STATUS (STA$) QUEUE * ENTRY. * * EXIT QUEUE ENTRIES PROCESSED VIA *PCS*. * * USES A - 0, 1, 2, 4, 5, 6, 7. * X - 1, 2, 3, 4, 5, 6, 7. * B - 3, 5, 6, 7. * * CALLS GRT, GQE, PCS, SSP, UQS. * * MACROS TTADD. TSR SUBR ENTRY/EXIT SA1 RTIM GET REAL TIME SA2 WCMQ+1 TIME QUEUE LAST PROCESSED SX3 WCQT QUEUE TIME DELAY IX2 X1-X2 ELAPSED TIME IX2 X3-X2 PL X2,TSRX IF TIME DELAY NOT UP, RETURN * SET QUEUE PROCESSING POINTERS. BX6 X1 UPDATE PROCESSING TIME SA4 A2-B1 READ QUEUE POINTER SA6 A2 SX7 X4 LAST TERMINAL OF QUEUE ZR X7,TSRX IF QUEUE EMPTY, RETURN SA7 TSRA AX4 18 FIRST TERMINAL OF QUEUE BX7 X7-X7 SX6 X4 SB5 B0+ CLEAR CURRENT TERMINAL NUMBER SA6 A7+B1 SET NEXT TERMINAL = FIRST TERMINAL SA7 A6+B1 CLEAR TERMINAL LINK * ADVANCE TO NEXT TERMINAL. TSR1 SA1 TSRA LAST TERMINAL OF QUEUE SX7 B5 CURRENT TERMINAL IX4 X1-X7 ZR X4,TSRX IF LAST TERMINAL CHECKED, RETURN SA5 TSRB NEXT TERMINAL ZR X5,TSRX IF NO NEXT TERMINAL, RETURN SB5 X5+ SET NEW CURRENT TERMINAL * GET TERMINAL QUEUE ENTRY. RJ GRT READ QUEUE ENTRY ZR X4,TSRX IF NO QUEUE ENTRY, RETURN MX1 -12 SET NEXT TERMINAL NUMBER BX7 -X1*X4 * CHECK TERMINAL STATUS. TTADD B5,A0,X1,X2 SET TERMINAL TABLE ADDRESS SA7 TSRB SA1 A0+VDCT READ VDCT ENTRY MX2 2 AX4 48 CHECK QUEUE ENTRY BX3 X2*X1 NZ X3,TSR2 IF DRIVER REQUEST OR INTERRUPT SX1 X4-DCR2$ SX2 X4-DCR3$ ZR X1,TSR3 IF DRIVER REQUEST WAIT SX3 X4-STA$ ZR X2,TSR3 IF WAIT-DRIVER QUEUE ENTRY ZR X3,TSR3 IF STA$ QUEUE ENTRY SX2 X4-CJA$ ZR X2,TSR3 IF CLEARING REENTRY QUEUE SA1 A0+VROT READ VROT ENTRY LX1 59-0 NG X1,TSR3 IF OPERATION COMPLETE TSR2 SX7 B5 SET TERMINAL AS LINKED SA7 A7+B1 EQ TSR1 ADVANCE TO NEXT TERMINAL * PROCESS QUEUE ENTRY. TSR3 SA1 TSRC GET LINK TO CURRENT TERMINAL SB6 WCMQ INDICATE QUEUE SB7 X1 RJ GQE GET ENTRY FROM QUEUE SA1 A0+VROT READ OPERATION STATUS UX4,B3 X5 UNPACK QUEUE ENTRY LX1 59-11 SA2 TRRT+B3 READ REENTRY POINTER WORD PL X1,TSR4 IF NO ERROR FLAG MX6 -59 CLEAR ERROR FLAG BX6 -X6*X1 LX6 11-59 AX2 18 SET ERROR PROCESSOR ADDRESS SA6 A1+ REWRITE VROT ENTRY TSR4 SB7 X2 SET *PCS* PROCESSOR ADDRESS RJ PCS PROCESS QUEUE ENTRY RJ SSP RJ UQS UPDATE QUEUE STACK RJ SSP SB5 B2 SET CURRENT TERMINAL NUMBER EQ TSR1 ADVANCE TO NEXT TERMINAL TSRA CON 0 LAST TERMINAL OF QUEUE TSRB CON 0 NEXT TERMINAL TO PROCESS TSRC CON 0 TERMINAL LINKED TO CURRENT TERMINAL TRRT SPACE 4 ** TRRT - TABLE OF REENTRY ROUTINES PARAMETERS. * THIS TABLE OF CONSISTS OF ENTRIES THAT DIRECT FURTHER * PROCESSING BASED ON ENTRIES FROM THE REENTRY TABLE AND * ON CERTAIN ACTIONS BEING COMPLETED. * * THE FORMAT OF THE TABLE IS AS FOLLOWS * XXYY ZZZZ EEEE EENN NNNN - WHERE * XX = INDEX TO TRQT (TABLE OF PPU REQUESTS.) * IF XX = 0, NO RESOURCE REQUIREMENTS EXCEPT FOR * POSSIBLE A PERIPHERAL PROCESSOR. * YY = FUNCTION CODE FOR CALLED PROGRAM. * ZZZZ = FUNCTION PROCESSING ADDRESS RELATIVE TO TSRPROC * EEEEEE = ERROR RETURN ADDRESS. * NNNNNN = NORMAL RETURN ADDRESS. TRRT BSS 0 LOC 2000B COMMND APS1,WCMQ,APS1 COMMND ASO2,WCMQ,ASO2 COMMND CJA,WCMQ,CJA5 COMMND DCR2,WCMQ,DCR2 COMMND DCR3,WCMQ,DCR3 COMMND DIN1,WCMQ,DIN1 COMMND DTJ3,WCMQ,DTJ3 COMMND ETX1,WCMQ,ETX1 COMMND FLO4,WCMQ,FLO4 COMMND ETX2,WCMQ,ETX2 COMMND ETX4,WCMQ,ETX4 COMMND FTP,WCMQ,FTP COMMND FTP3,WCMQ,FTP3 COMMND HNG,WCMQ,HNG COMMND HUP2,WCMQ,HUP2 COMMND IAM3,ITAQ,,,3 COMMND ICH,ITOQ COMMND INP,,INP COMMND ITA2,ITAQ,LIN6,LIN14,2 COMMND ITA3,ITAQ,URL8,URL12,4 COMMND ITA4,ITAQ,CRR1,CRR,2 COMMND ITA1,ITAQ,,,5 COMMND ITO,ITOQ COMMND ITO1,ITOQ COMMND LIN1,WCMQ,LIN1 COMMND LIS8,WCMQ,LIS8 COMMND PCM1,WCMQ,PCM1 COMMND PCM2,WCMQ,PCM2 COMMND PMR2,MNWQ,PMR2 COMMND PMR4,MNWQ,PMR4 COMMND PUB4,WCMQ,PUB4 COMMND PUB8,WCMQ,PUB8 COMMND RDJ1,WCMQ,RDJ1 COMMND RIN,WCMQ,DRT COMMND STA,WCMQ,STA5 COMMND TOT,TIMQ,TOT BSS 0 LOC *O TRRTL EQU *-TRRT TITLE TSR - SUBROUTINES. TSRPROC BSS 0 TSA SPACE 4 ** TSR ABORT. TSA BSS 0 SX6 3RTSR EQ ABT+1 DCR SPACE 4 ** DCR - DRIVER COMMAND REQUESTS * * ENTRY (X2) = COMMAND NUMBER. * (X7) = RETURN ADDRESS. * * SEE SSP. DCR BSS 0 SA1 A0+VSTT LX1 59-58 NG X1,IGN IF USER BREAK IN PROGRESS DCR1 SA1 A0+VDCT SX3 X2+ MX0 -12 LX3 18 SX5 DCR2$ SET REENTRY BX0 -X0*X1 CHECK FOR QUEUED OUTPUT BX7 X7+X3 NZ X0,PCS1 IF QUEUED OUTPUT RJ EDR ENTER DRIVER REQUEST SX5 DCR3$ ENTER REQUEST QUEUE EQ PCS1 DCR2 BX2 X7 RESTORE REQUEST CODE AX2 18 EQ DCR1 PROCESS REQUEST DCR3 SA1 A0+VDCT CHECK DRIVER REQUEST SX5 DCR3$ MX2 -12 BX2 -X2*X1 NZ X2,PCS1 IF NOT YET PROCESSED SB7 X7 GET RETURN ADDRESS JP B7 RETURN HNG SPACE 4 * HNG - REQUESTS DRIVER TO HANG UP PHONE WHEN LAST MESSAGE HAS * BEEN ACCEPTED BY DRIVER. HNG BSS 0 RJ RDC READ VDCT SA2 A0+VSTT MX6 -12 BX3 -X6*X2 ZR X3,HNG1 IF NO MESSAGE QUEUED IN VSTT SX5 HNG$ IFNET PCS1 BX6 X6*X2 SA6 A2 UPDATE VSTT BX6 X1+X3 SX3 B1+B1 TELL DRIVER TO START AT WORD TWO LX3 36-0 BX6 X6+X3 SA6 A1 PUT MESSAGE IN VDCT RJ RDC WAIT FOR MESSAGE TO BE TAKEN BY DRIVER HNG1 SX2 /1TD/HUP RJ EDR ENTER DRIVER REQUEST RJ CDP CLEAR DETACH IN PROGRESS * CLEAR OUTPUT AVAILABLE, INPUT REQUESTED, AND JOB CONTINUATION * SO THAT THESE WILL NOT GET RESTARTED BY *RES*. SA1 A0+VROT SX6 34B BX6 -X6*X1 SA6 A1 REWRITE VROT IFNET PCSX * DECREMENT ACTIVE USER COUNT FOR MUX TERMINALS. SA1 VANL DECREMENT ACTIVE USER COUNT ZR X1,PCSX IF NO ACTIVE USERS SX6 B1+ IX6 X1-X6 SA6 A1 RJ UCP UPDATE CONVERTED POINTER EQ PCSX EXIT IAM SPACE 4,10 ** IAM - ISSUE TERMINAL ACCOUNTING MESSAGE. * * IAM FORMATS AND ISSUES ACCOUNTING MESSAGE REQUESTS * TO ITA. * * ENTRY - (SEE SSP). * X7 = REQUEST CODE. * 0 = OUTPUT ACCOUNTING. * 1 = INPUT ACCOUNTING. IAM SA1 A0+VDCT CHECK TERMINAL STATUS SA2 A0+VSTT LX1 59-57 CHECK IF LOGGED IN LX2 59-48 CHECK IF LOGGING OUT SX0 X7+ SET ACCOUNTING MESSAGE INDEX BX1 -X1+X2 AX7 1 NG X1,PCSX IF LOGGING OUT OR NOT LOGGED IN NZ X7,IAM5 IF INCORRECT REQUEST * INCREMENT INPUT/OUTPUT OVERFLOW COUNTER. SA1 A0+VFST MX7 -12 LX1 36 BX2 -X7*X1 EXTRACT OVERFLOW COUNTER BX1 X7*X1 SX2 X2+B1 INCREMENT OVERFLOW COUNT BX6 -X7*X2 BX6 X1+X6 MERGE NEW COUNT LX6 24 SA6 A1 REWRITE VFST BX2 X7*X2 SET FLAG IF COMBINED ACCUMULATOR OVERFLOW LX2 1-12 BX0 X0+X2 * REQUEST POT IF NEEDED. SA1 IAMA CHECK FOR STACKED ENTRY ZR X1,IAM1 IF NO CURRENT ENTRY UX7,B7 X1 UNPACK STACK ENTRY SB6 B7-VCPC NZ B6,IAM2 IF NOT AT END OF CURRENT POT IAM1 PX5 X1,B1 REQUEST POT RJ RPT ZR X7,PCSX IF NO POT AVAILABLE, EXIT SA1 IAMA SB7 B0 SET WORD COUNT TO FIRST WORD ZR X1,IAM2 IF FIRST POT SB3 X7 RJ GPL GET POT LINK SX7 B3+ * ENTER REQUEST WORD IN POT. IAM2 BX4 X7 SAVE CURRENT POT SX6 B2 SET TERMINAL NUMBER LX7 3 SET POT ADDRESS TB4 X7,VBMP LX6 12 IX6 X6+X0 ADD REQUEST CODE SA6 B4+B7 STORE IN POT SB7 B7+B1 INCREMENT WORD POINTER PX7 X4,B7 RESET STACK POINTER WORD SA7 A1 NZ X1,PCSX IF NOT FIRST ENTRY * MAKE 1TA QUEUE ENTRY. SB2 ACPT SET ACCOUNTING PSEUDO TERMINAL TTADD B2,A0,X1,X2 SET TERMINAL TABLE ADDRESS SB3 0 SX5 IAM3$ MAKE 1TA QUEUE ENTRY EQ PCS1 MAKE QUEUE ENTRY * ENTRY FROM ITAQ PROCESSOR TO MAKE SORT BUFFER ENTRY. * * ENTRY (X0) = SORT BUFFER POINTER. * (X7) = ACCOUNTING REQUEST POT POINTER. * * EXIT TO ITA8. * (X6) = 1TA SORT BUFFER ENTRY. * (X7) = 1TA FUNCTION ARGUMENT *400*. IAM3 MX6 -12 SA2 A0+VROT SET POT POINTER LX6 12 BX6 X6*X2 CLEAR POT POINTER FIELD LX7 12 BX2 X6+X7 SX6 B1 BX6 -X6*X2 SA6 A2 REWRITE VROT SA1 IAMA GET REQUEST POINTER BX6 X6-X6 CLEAR REQUEST POINTER SA6 A1 UX4,B7 X1 SX7 400 SET 1TA ARGUMENT SB6 B7-VCPC CHECK POT WORD COUNT ZR B6,IAM4 IF POT FILLED LX4 3 SET TERMINATOR IN POT TB4 X4,VBMP SA6 B4+B7 IAM4 SX6 B2+ SET TERMINAL NUMBER LX6 12 BX6 X6+X7 EQ ITA MAKE ITAQ ENTRY * ERROR EXIT. IAM5 SX6 3RIAM RJ ABT EQ PCSX EXIT * IAM REQUEST POINTER WORD. * *T, 12/ 200N,36/ ,12/ PP * * N = NEXT AVAILABLE WORD IN POT. * PP = POT POINTER. IAMA DATA 0 ICH SPACE 4 ** ICH - MAKES AN INPUT TO PRIMARY FILE *1TO* REQUEST. * *T 6/FT,6/RT,12/EJTO,3/WC,9/NP,12/PP,12/TN. * * FT = 0, PRIMARY FILE REQUEST. * RT = 0, INPUT DUMP REQUEST. * EJTO = EXECUTING JOB TABLE ORDINAL. * WC = LAST POT WORD COUNT IF FORCED DUMP. * NP = NUMBER OF POTS TO DUMP. * PP = FIRST POT OF INPUT TO PRIMARY FILE. * TN = TERMINAL NUMBER. * * ENTRY (X0) = *1TO* REQUEST QUEUE POINTER. * (SEE SSP). * * EXIT (X0) = REQUEST QUEUE POINTER UPDATED. * *1TO* REQUEST ADDED TO BUFFER. * * USES X - 0, 1, 2, 3, 6. * A - 1, 6. ICH BSS 0 SA1 A0+VUIT GET EJT ORDINAL MX2 -36 BX6 -X2*X5 MX3 12 LX1 36 LX3 -12 BX1 X3*X1 BX6 X6+X1 SA6 X0+ MAKE ENTRY SX0 X0+B1 INCREMENT BUFFER POINTER EQ PCSX EXIT INP SPACE 4 ** INP - PROCESS INPUT DATA FOR A RUNNING PROGRAM. * * A *STOP* ENTERED BY A USER ON A MULTIPLEXOR TERMINAL IS * TREATED LIKE A USER BREAK TWO. * * ENTRY- * SEE SSP INP BSS 0 ENTRY * CHECK FOR *STOP* FROM MULTIPLEXER TERMINAL. IFNET INP1 IF NETWORK TERMINAL SA1 B4+ READ FIRST WORD OF INPUT SA2 =4LSTOP CHECK UPPER CASE SA3 =8L^S^T^O^P CHECK LOWER CASE BX2 X1-X2 BX3 X1-X3 ZR X2,STO IF *STOP* ZR X3,STO IF *STOP* * ASSIGN INPUT POT TO MUX TERMINAL. SB3 B0 RJ INO RJ SSP RESTORE COMMAND LINE POT POINTER INP1 SA1 INPA COUNT INPUT RESPONSE SX2 B1 IX6 X1+X2 SA6 A1 SX6 B0 SET *PPI* NOT TO SORT THE FILE SX7 B0 SET *EPN* EQ BJB1 BEGIN JOB INPA CON 0 ITA SPACE 4 ** ITA - ENTER *1TA* REQUEST. * * FORMAT 1TA REQUEST AND INSERT IN REQUEST BUFFER. * * ENTRY - * SEE SSP. * (X0) = REQUEST BUFFER POINTER. * (X6) = 36/0,12/TN,12/ARG * (*COMMND*) = *1TA* FUNCTION CODE, *FC*. * * EXIT - * ((X0)) = 24/0,12/FC,12/TN,12/ARG * (X0) = INCREMENTED TO NEXT ENTRY ADDRESS. * FC = 5, STATUS REQUEST. * MAKE QUEUE ENTRY. ITA1 SB7 B0 MAKE QUEUE ENTRY RJ MQE * EQ ITA2 SET *1TA* CALL * FC = 2, LOGIN. * FC = 4, UPDATE RESOURCE LIMIT. * SET (X6) = 36/0,12/TN/12/PP ITA2 BSS 0 ITA3 BSS 0 ITA4 BSS 0 SX7 B2 SET TERMINAL NUMBER SX6 B3 SET POT POINTER LX7 12 BX6 X6+X7 * EQ ITA * FORMAT 1TA REQUEST AND ENTER INTO BUFFER. ITA BX7 X5 READ TABLE ENTRY AX7 48 SA1 TRRT+X7-2000B MX4 -6 SX2 X1-TSA AX1 48 BX3 -X4*X1 MASK FUNCTION CODE LX3 24 BX6 X6+X3 INSERT FUNCTION CODE ZR X2,ITA0 IF NO WAIT-COMPLETION QUEUE ENTRY SA6 ITAA SAVE REQUEST SB7 WCMQ MAKE WAIT COMPLETION QUEUE ENTRY RJ MQE SA1 ITAA BX6 X1 ITA0 SA6 X0 ENTER REQUEST IN BUFFER SX0 X0+B1 INCREMENT BUFFER POINTER EQ PCSX EXIT ITAA CON 0 REQUEST ITO SPACE 4 ** ITO - MAKES AN OUTPUT REQUEST *1TO* ENTRY. * *T 4/ ,1/ PFIC,1/ FT,6/ RT,12/ EJTO,12/ ,12/ PP,12/ TN * * PFIC = PRIMARY FILE INITIAL CALL FLAG. * 1 = PRIMARY FILE INITIAL CALL. * 0 = PRIMARY OR ROLLOUT FILE CONTINUATION CALL. * FT = FILE TYPE. * 0 = PRIMARY FILE. * 1 = ROLLOUT FILE. * RT = REQUEST TYPE. * 0 = DUMP INPUT TO PRIMARY FILE. * 1 = OUTPUT TO TERMINAL. * EJTO = EXECUTING JOB TABLE ORDINAL. * PP = FIRST POT TO USE FOR OUTPUT. * TN = TERMINAL NUMBER. * * ENTRY (X0) = *1TO* REQUEST QUEUE POINTER. * (B3) = POT CHAIN IF ONE PROVIDED BY CALLER. * * EXIT (X0) = *1TO* REQUEST QUEUE POINTER UPDATED. * *1TO* REQUEST ADDED TO BUFFER. * * USES X - 0, 1, 2, 4, 5, 6, 7. * A - 1, 6. * B - 3, 5. * * CALLS RPT. ITO BSS 0 SA2 A0+VROT SX3 B1 LX3 17-0 BX6 -X3*X2 INDICATE PRIMARY FILE LIST SA6 A2 SX6 B1+ LX6 55-0 SA6 ITOA INITIAL CALL TO LIST PRIMARY FILE ITO1 BSS 0 SX4 VOPL IFMUX ITO2 IF MULTIPLEXER TERMINAL TA1 B2,VMST SET NUMBER OF POTS ZR X1,ITO2 IF TERMINAL IS DISCONNECTED MX4 -5 AX1 18 BX4 -X4*X1 ITO2 LX4 3 CONVERT TO CM WORDS SB6 X4+2 ALLOW FOR LINKAGE WORDS RJ GPC GET POT CHAIN ZR X6,ITO3 IF NO POTS AVAILABLE SA1 ITOA NZ X1,ITO3 IF PRIMARY FILE LIST INITIAL CALL SX6 B0 CLEAR FIRST WORD OF POT SA6 B4 ITO3 SA1 A0+VUIT GET EJT ORDINAL MX6 12 LX1 36 LX6 -12 BX6 X1*X6 SEPARATE EJT ORDINAL FROM REST OF WORD SX7 B3 MERGE POT POINTER SX5 B2 MERGE TERMINAL NUMBER LX7 12 BX6 X6+X5 SX2 B1 SET OUTPUT FLAG BX6 X6+X7 LX2 48-0 BX6 X6+X2 SA1 A0+VROT SPECIFY PRIMARY OR ROLLOUT FILE MX2 1 LX1 54-17 LX2 54-59 BX2 X1*X2 BX6 X2+X6 SA1 ITOA SX7 B0 ZR X1,ITO4 IF NOT INITIAL CALL TO LIST PRIMARY FILE BX6 X1+X6 SA7 A1 ITO4 SA6 X0 SX0 X0+B1 EQ PCSX EXIT ITOA CON 0 PRIMARY FILE INITIAL CALL FLAG LIN SPACE 4 ** LIN - PROCESS LOG IN. * * ENTRY (PBUF) = ANSWERBACK. * SEE SSP. LIN BSS 0 ENTRY RJ RDC WAIT *VDCT* CLEAR MX7 0 CLEAR RETRY COUNTER AND FAMILY NAME SA7 B4+VTRY SA7 B4+VFNA SA1 VANL INCREMENT ACTIVE USER COUNT SX6 X1+B1 SA6 A1 SA2 LINB CHECK MAXIMUM USER COUNT IX2 X2-X6 PL X2,LIN0 IF NOT NEW MAXIMUM SA6 A2 LIN0 RJ UCP UPDATE CONVERTED POINTER * ISSUE LOGIN HEADER MESSAGE. LIN1 SX5 LIN1$ SET REENTRY RJ CFL CHECK POT SUPPLY NG X2,PCS1 IF IN SHORT SUPPLY SX0 B3 SAVE LOGIN POT POINTER SB3 B0 SX6 LINCP ISSUE COPYRIGHT NOTICE SB4 LINCPL RJ MVA SX6 HEDR ISSUE HEADER MESSAGE SB4 HEDRL RJ MVA LIN2 SB3 X0 RESTORE LOGIN POT POINTER RJ RDC WAIT VDCT CLEAR SB5 B3 SET LOGIN POT POINTER SB3 B0 CLEAR MESSAGE POT POINTER SB4 B0 SET DEFAULT MESSAGE LENGTH * REQUEST FAMILY NAME. SX6 LIMFN SET MESSAGE ADDRESS RJ RQI REQUEST INPUT SA1 PBUF READ FAMILY NAME SA5 CCMA GET PARAMETER COUNT SA2 A1+2 READ USER NAME SX7 X1+ NZ X7,LIN14.1 IF TOO MANY CHARACTERS ENTERED SB4 B0 BX7 X1 SET FAMILY NAME IN LOGIN POT SA7 B6+VFNA ZR X5,LIN3 IF NULL FAMILY ENTERED SX5 X5-1 DECREMENT PARAMETER COUNT NZ X5,LIN4 IF USER NAME ENTERED * REQUEST USER NAME. LIN3 SX6 LIMUN SET MESSAGE ADDRESS RJ RQI REQUEST INPUT SA2 PBUF READ USER NAME SA5 CCMA GET PARAMETER COUNT LIN4 SA3 A2+2 READ PASSWORD SX7 X2+ NZ X7,LIN14.1 IF TOO MANY CHARACTERS ENTERED SB4 B0 BX7 X2 SET USER NAME IN LOGIN POT SA7 B6+VUNA SA7 A0+VUIT SET USERNAME IN TERMINAL TABLE SX5 X5-1 DECREMENT PARAMETER COUNT NZ X5,LIN5 IF PASSWORD ENTERED * REQUEST PASSWORD. SX6 LIMPW SET MESSAGE ADDRESS SB4 LIMTT-LIMPW RJ RQI REQUEST INPUT SA3 PBUF READ PASSWORD SB4 B0+ LIN5 SX7 X3 NZ X7,LIN14.1 IF TOO MANY CHARACTERS ENTERED BX7 X3 SET PASSWORD IN LOGIN POT SA7 B6+VPWA * GET UPPER ACCESS LEVEL LIMIT OF TERMINAL FROM MUX TABLE. SX7 0+1S3 SET DEFAULT = 0, SET *AL SPECIFIED* FLAG SB4 MXMX MX3 -12 SX5 B2 CURRENT TERMINAL LIN5.1 SB4 B4-B1 CHECK NEXT MUX TABLE ENTRY NG B4,LIN5.2 IF NO MORE MUXES TO CHECK SA1 MUXP+B4 ZR X1,LIN5.1 IF ZERO ENTRY BX4 -X3*X1 FIRST TERMINAL FOR THIS MUX IX6 X5-X4 NG X6,LIN5.1 IF FIRST TERMINAL .GT. CURRENT TERMINAL LX1 -24 GET UPPER ACCESS LEVEL LIMIT FROM ENTRY BX1 -X3*X1 BX7 X7+X1 LIN5.2 SA7 B6+VLAL SET UPPER ACCESS LEVEL LIMIT IN LOGIN POT SB4 B0 SX0 B5 SAVE LOGIN POT POINTER * CALL *1TA* TO PROCESS LOGIN PARAMETERS. RJ DPT DROP INPUT POT SX5 ITA2$ ENTER 1TA REQUEST SB3 X0 RESTORE LOGIN POT POINTER EQ PCS1 MAKE QUEUE ENTRY * NORMAL *1TA* RETURN. * * ENTRY (B3) = LOGIN POT POINTER. * (B4) = LOGIN POT ADDRESS. * (POT+VUTA) = VALIDATION ACCESS CONTROL WORD. * (POT+VUTD) = VALIDATION TERMINAL CONTROL WORD. LIN6 RJ CDP CLEAR DETACH IN PROGRESS IFNET LIN12 * SET PARITY. SA3 B4+VUTD LOAD TERMINAL CONTROL WORD PL X3,LIN8 IF EVEN PARITY VALIDATION SX7 LIN8 SET RETURN ADDRESS SX2 /1TD/SOP REQUEST ODD PARITY JP DCR * SET DUPLEX MODE. LIN8 SA3 B4+VUTD RELOAD TERMINAL CONTROL WORD LX3 59-53 CHECK DUPLEX MODE PL X3,LIN9 IF HALF DUPLEX SX7 LIN9 SET RETURN ADDRESS SX2 /1TD/SFD REQUEST FULL DUPLEX JP DCR * SET TRANSLATION TABLE. LIN9 SA3 B4+VUTD RELOAD TERMINAL CONTROL WORD MX6 -5 AX3 48 MASK VALIDATED TERMINAL TYPE CODE BX6 -X6*X3 ZR X6,LIN11 IF NONE SPECIFIED SA5 X6+TTTT+1 READ IAFEX EQUIVALENT NAME RJ LTT GET CURRENT TYPE SX6 X1 SET CURRENT LINE CODE BX5 X5+X6 MERGE EQUIVALENT NAME AND LINE CODE SB7 X2+ SET FWA OF TRANSLATION TABLES LIN10 SA1 X2+ READ TRANSLATION TABLE NAME ZR X1,LIN11 IF END OF NAMES SX2 X2+B1 IX6 X1-X5 COMPARE NZ X6,LIN10 IF NO MATCH SX1 A1-B7 SET TRANSLATION INDEX LX1 6 SX7 LIN11 SET RETURN ADDRESS SX2 X1+/1TD/STT REQUEST TRANSLATION INDEX JP DCR * SET RUBOUT COUNT. LIN11 SA3 B4+VUTD RELOAD TERMINAL CONTROL WORD MX6 -5 LX3 -54 SHIFT RUBOUT COUNT SX2 X3+B1 ADD DRIVER BIAS BX7 -X6*X2 MASK BIASED COUNT ZR X7,LIN12 IF SYSTEM DEFAULT COUNT SA1 A0+VDCT LX6 39-0 LX7 39-0 BX1 X6*X1 CLEAR VDCT RUBOUNT COUNT IX7 X7+X1 INSERT BIASED COUNT SA7 A1+ REWRITE VDCT * SET SUBSYSTEM. LIN12 SA3 B4+VUTD RELOAD TERMINAL CONTROL WORD MX7 -5 SA2 A0+VSTT LX3 -42 BX6 -X7*X3 MASK VALIDATION SUBSYSTEM SA3 X6+TTIS GET IAFEX EQUIVALENT SUBSYSTEM BX3 -X7*X3 SX6 LIMUV SX7 X3-MSYS PL X7,LIN16 IF INCORRECT SUBSYSTEM LX3 12 INSERT SUBSYSTEM IN VSTT BX2 X3+X2 MX7 1 LX7 54-59 SET JOB COMPLETE BX6 X2+X7 SA6 A2 REWRITE VSTT * SET ACCESS BITS AND LOGGED-IN STATUS. * SET READ DATA BIT IF *CHARGE* OR *RECOVER* HAVE * ROLLED OUT AWAITING INPUT. MX5 -12 SA1 B4+VUTA LOAD ACCESS WORD SA3 A0+VDCT READ VDCT TA2 B2,VRAP CHECK FOR A QUEUE ENTRY ZR X2,LIN13 IF READ DATA NEED NOT BE SET BX3 X3+X7 SET READ DATA LIN13 BX1 -X5*X1 MASK ACCESS WORD ACCESS BITS LX5 12 BX3 X5*X3 CLEAR VDCT ACCESS BITS LX1 12 BX3 X1+X3 INSERT VALIDATION ACCESS BITS LX7 57-54 SET LOGGED IN BIT BX7 X7+X3 SA7 A3 REWRITE VDCT SA1 VTNL INCREMENT TERMINALS ON LINE SX6 X1+B1 SA6 A1 RJ UCP UPDATE CONVERTED POINTER * ISSUE LOGIN COMPLETION MESSAGE. SA3 LIMTT+1 SA1 A0+VFST MX7 24 LX7 30 LX1 30 BX3 -X7*X3 CLEAR PREVIOUS *JSN* BX1 X1*X7 BX6 X1+X3 INSERT CURRENT *JSN* SA6 A3 MX4 42 SX5 1R RJ LTT GET TERMINAL TYPE NAME BX1 X4*X1 CLEAR LOWER 18 BITS BX7 X1+X5 ADD BLANK LX7 -6 SHIFT BLANK AHEAD OF TERMINAL TYPE SA7 A6+B1 SX6 LIMTT ISSUE LOGGED-IN MESSAGE SB4 B0 RJ MVA EQ PCSX EXIT * 1TA ERROR RETURN. LIN14 SA1 A0+VROT CHECK ERROR STATUS SX6 LIMJT LX1 59-10 NG X1,LIN16 IF INPUT FILE ABORTED SA1 B4+VUTA SX6 LIMUC LX1 59-1 LX7 X1,B1 NG X7,LIN16 IF USER SECURITY COUNT EXHAUSTED SX6 LIMSC NG X1,LIN16 IF USER NOT VALIDATED FOR SERVICE CLASS LX1 59-3-59+1 LX7 X1,B1 SX6 LIMSF NG X7,LIN16 IF SERVICE CLASS FULL SX6 LIMAD NG X1,LIN16 IF ACCESS DENIED (SECURITY CONFLICT) SX6 LIMDI LX1 59-5-59+3 LX7 X1,B1 NG X7,LIN16 IF DEVICE INACCESSIBLE OR I/O ERROR SX6 LIMYF NG X1,LIN16 IF QFT FULL EQ LIN14.2 RETRY LOGIN * RETRY LOGIN (ERROR DETECTED BEFORE CALLING *1TA*). LIN14.1 SX0 B5 SAVE LOGIN POT POINTER SB4 B0 RJ DPT DROP INPUT POT SB3 X0 RESTORE LOGIN POT POINTER LX0 3 TB4 X0,VBMP SET LOGIN POT ADDRESS * RETRY LOGIN. LIN14.2 SA1 B4+VTRY INCREMENT RETRY COUNT SX7 X1+1 SX1 X7-LIAA PL X1,LIN15 IF RETRY COUNT EXCEEDED IFNET LIN15 * REATTEMPT LOGIN FOR MUX TERMINAL. SA7 A1 REWRITE RETRY COUNT SB4 B0 SET DEFAULT MESSAGE LENGTH RJ CDP CLEAR DETACH IN PROGRESS SX0 B3 SAVE POT POINTER SB3 B0 SET NO POT FOR MESSAGE SX6 LIMIL SET MESSAGE ADDRESS RJ MVA ISSUE MESSAGE EQ LIN2 RETRY LOGIN * DISCONNECT USER WHEN LOGIN NOT POSSIBLE. LIN15 SA1 LINA INCREMENT INCORRECT LOGIN COUNT SX6 LIMIT SET MESSAGE ADDRESS SX7 X1+B1 SA7 A1 REWRITE INCORRECT LOGIN COUNT * ENTRY (X6) = MESSAGE ADDRESS. LIN16 SB4 B0 RJ MVA ISSUE LOG OFF MESSAGE EQ HNG LOG OFF USER SPACE 4,10 ** LOGIN MESSAGES. LIMFN DATA C*"EM"FAMILY: '"CB"* LIMUN DATA C*"EM"USER NAME: '"CB"* LIMPW DATA 10H"EM"PASSWORD DATA 10H"NL"(((((((( DATA 10H"CR")))))))) DATA 10H"CR"MMMMMMMM DATA 10H"CR"QQQQQQQQ DATA 10H"CR"XXXXXXXX DATA C*"CR""CB"* LINCP DATA C*WELCOME TO THE NOS SOFTWARE SYSTEM.* *CALL COPYRT CPRT HERE CON 0 LINCPL EQU *-LINCP LENGTH OF COPYRIGHT NOTICE LIMTT DATA 10H"EM" "NL" DATA 10HJSN: , DATA 0 LIMAD DATA C*"EM"ACCESS DENIED - SECURITY CONFLICT."NL""LF""CB"* LIMDI DATA C*"EM"DEVICE INACCESSIBLE - LOGIN FAILED. "NL""LF""CB"* LIMIL DATA C*"EM"IMPROPER LOG IN, TRY AGAIN. "NL""LF""CB"* LIMIT DATA C*"EM"INCORRECT TERMINAL. "NL""LF""CB"* LIMJT DATA C*"EM"JOB TERMINATED. "NL""LF""CB"* LIMSC DATA C*"EM"USER NOT VALIDATED FOR INTERACTIVE SERVICE CLASS. , "NL""LF""CB"* LIMSF DATA C*"EM"SERVICE CLASS FULL. "NL""LF""CB"* LIMUC DATA C*"EM"USER SECURITY COUNT EXHAUSTED."NL""LF""CB"* LIMUV DATA C*"EM"USER VALIDATION ERROR."NL""LF""CB"* LIMYF DATA C*"EM"SYSTEM FULL."NL""LF""CB"* LINA CON 0 NUMBER OF INCORRECT LOGINS LINB CON 0 MAXIMUM NUMBER OF USERS ON SYSTEM RDC SPACE 4,10 ** RDC - READ TERMINAL TABLE WORD *VDCT*. * * RETURN TERMINAL TABLE WORD *VDCT* WHEN INTERLOCK IS * CLEAR. *RDC* WILL EXIT BY MEANS OF REENTRY THROUGH * *DCR1* IF INTERLOCK IS NOT CLEAR ON ENTRY. * * ENTRY - * (B3) = ANY INFORMATION TO BE RETAINED. * * EXIT - * (A1) = ADDRESS OF *VDCT*. * (X1) = *VDCT*. * *VDCT* - INTERLOCK CLEAR. * (B3) = ENTRY CONTENTS PRESERVED. RDC SUBR ENTRY/EXIT SA1 A0+VDCT CHECK INTERLOCK MX2 14 LX2 12 BX7 X2*X1 ZR X7,RDCX IF INTERLOCK CLEAR SA1 RDC SET RETURN ADDRESS SX5 DCR3$ AX1 30 SX7 X1 EQ PCS1 MAKE QUEUE ENTRY URL SPACE 4,15 ** URL - PROCESS USER RESOURCE LIMITS EXCEEDED. * * ENTERED WHEN A JOB HAS EXCEEDED ITS TIME OR SRU * LIMIT. THE TERMINAL WILL BE PROMPTED UNTIL A VALID * INCREMENT IS ENTERED OR A JOB ABORT IS REQUESTED. * * ENTRY SEE SSP. * (X4) = RESOURCE LIMIT CODE. * * EXIT RESOURCE LIMIT INCREMENTED UNLESS JOB ABORT * REQUESTED. CHARGE REQUIRED SET IF AT SRU * VALIDATION LIMIT. * * CALLS CNT, DXB, INO, MVA, SRR, SSP. URL BSS 0 ENTRY AX4 1 MX0 54 SET UP MESSAGE SA5 URLA+X4 URL1 SA1 X5 SA2 X5+B1 BX6 X1 BX7 X2 SA6 URLB SA7 A6+B1 LX0 12 SA3 URLC AX5 42 BX6 X0*X3 BX6 X5+X6 SA6 A3 IFMUX URL3 RJ CNT CANCEL TYPEAHEAD ZR X1,URL3 IF NO REENTRY MADE SA5 URLA+X6 MX0 54 EQ URL1 CONTINUE LIMIT PROCESSING URL3 SB5 B0+ CLEAR POT POINTER SX7 URL4 SET COMMAND REENTRY RJ SRR SX6 URLB SET MESSAGE ADDRESS SB4 URLBL SET MESSAGE LENGTH EQ PCS6 ISSUE MESSAGE * REENTRY TO PROCESS LIMIT INCREMENT. URL4 SA1 PBUF CHECK ENTRY SA2 =8L^S^T^O^P SA3 =4LSTOP BX3 X1-X3 SX6 URLF CONTROL BYTE TO END TRANSPARENT MODE ZR X3,URL10 IF STOP HAS BEEN ENTERED BX2 X1-X2 ZR X2,URL10 IF STOP HAS BEEN ENTERED URL5 SA2 A0+VROT MX4 -1 AX2 19 BX2 -X4*X2 SA2 URLA+X2 MX4 6 SET COMMAND TO CHECK BX4 X4*X2 BX4 X1-X4 AX2 18 NZ X4,URL13 IF INCORRECT ENTRY SX6 X2 SET DEFAULT INCREMENT AX2 18 SA5 PBUF+2 SB6 X2 SAVE FUNCTION CODE SB7 B1 SET DECIMAL CONVERSION ZR X5,URL7 IF NO INCREMENT ENTERED LX5 6 SX4 X5-1R* CHECK FOR (*) ZR X4,URL6 IF (*) LX5 54 RJ DXB CONVERT INCREMENT TO BINARY MX3 45 BX3 X3*X6 RJ SSP NZ X4,URL13 IF INCORRECT INCREMENT ZR X3,URL7 IF INCREMENT .LT. 77777B URL6 SX6 77777B SET INCREMENT TO MAXIMUM URL7 SX3 B6 SET FUNCTION CODE LX3 18 BX6 X3+X6 MERGE FUNCTION CODE AND INCREMENT SA6 B4 SX5 ITA3$ SX7 B0+ EQ PCS1 MAKE QUEUE ENTRY * NORMAL EXIT. URL8 SA1 A0+VDPT LX1 59-15 PL X1,URL9 IF BINARY BIT NOT SET SX6 URLG CONTROL BYTE TO RESUME TRANSPARENT MODE EQ URL10 CONTINUE TO NEXT JOB STEP URL9 IFMUX URL11 TA1 B2,VMST LX1 59-25 PL X1,URL11 IF NOT NAM TRANSPARENT CONTINUATION SX6 URLH CONTROL BYTE TO RESET NAM XPT CONTINUATION URL10 SB4 B0+ RJ MVA URL11 SA1 A0+VROT CLEAR LIMITS/INPUT SATISFIED/JOB WAITING SA3 =00000000000003000050B BX7 -X3*X1 SA7 A1 RJ INO ISSUE NULL OUTPUT SA1 A0+VFST CHECK *SMF* CONNECTION MX2 6 LX1 59-23 BX1 X2*X1 ZR X1,RES IF NO SMF CONNECTION SX6 6 RESET VROT SA6 A0+VROT * RESCHEDULE *FSE* TO REINVOKE *WK* ROLLOUT STATUS. RJ GOP GET PARAMETER BLOCK POT PARAM ENEJ RJ PMR SB4 B0+ RETURN PARAMETER BLOCK POT RJ DPT EQ PCSX RETURN * PROCESS VALIDATION LIMIT. URL12 SMA X6,(USER VALIDATION LIMIT EXCEEDED,"NL") EQ URL10 SEND MESSAGE AND RESTART JOB * PROCESS INCORRECT INCREMENT. URL13 SB5 B0+ CLEAR POT POINTER SX7 URL4 SET COMMAND REENTRY RJ SRR SA1 A0+VROT CLEAR INPUT SATISFIED SX6 1S5 BX6 -X6*X1 SA6 A1 REWRITE VROT SMA X6,( *INCORRECT ENTRY, TRY AGAIN*"NL") EQ PCS5 ISSUE ERROR MESSAGE URLA VFD 6/1LT,12/0,6//CPS/RLIT,18/VDTI,18/URLD VFD 6/1LS,12/0,6//CPS/RLIS,18/VDSI,18/URLE URLB DATA 0 DATA 0 URLC DATA 10L ENTER X T DATA 10LO CONTINUE DATA 10L OR STOP T DATA 10LO END JOB DATA 5LSTEP. DATA 10L TYPED AHE DATA 10LAD INPUT M DATA 10LUST BE REE DATA 7LNTERED. DATA 0 URLBL EQU *-URLB URLD DATA 10L *TIME LIM DATA 3LIT* URLE DATA 10L *SRU LIMI DATA 2LT* URLF DATA B00164064400000000000 END TRANSPARENT MODE URLG DATA B00062043001500000000 RESET TRANSPARENT MODE URLH DATA B00164064400100000000 RESET NAM XPT CONTINUATION TITLE GENERAL SUBROUTINES. ** GENERAL SUBROUTINES. * * IF THE REGISTER USAGE IS NOT SPECIFIED IN THE HEADER * INFORMATION, THEN IT SHOULD BE ASSUMED THAT THE SUBROUTINE * USES ALL REGISTERS EXCEPT THOSE SPECIFIED BELOW. * * A - 0. * B - 1, 2. * X - 0. ABT SPACE 4 ** ABT - THIS ROUTINE IS ENTERED WHEN IAFEX DETECTS * INTERNALLY AN ABNORMAL CONDITION. A MESSAGE IS ISSUED * TO THE DAYFILE AND AN ABORT TAKES PLACE. * * ENTRY- * (X6) = NAME OF CALLING ROUTINE RIGHT JUSTIFIED * * CALLS IDM, MSG=, O6S, SYS=. ABT SUBR ENTRY/EXIT * SAVE EXCHANGE PACKAGE BEFORE PROCESSING ABORT. SB1 A6 SAVE REGISTERS USED BY *SYS* MACRO SA6 ABTB SX6 B1 SB1 1 SA6 A6+B1 BX6 X1 SA6 A6+B1 BX6 X2 SA6 A6+B1 SX6 A1 SA6 A6+B1 SYSTEM XJR,R,ABTC,100B SAVE REMAINDER OF EXCHANGE PACKAGE SA2 ABTB RESTORE ORIGINAL VALUE OF X6 SA1 VABL COUNT ABNORMAL OCCURRENCE SX7 X1+B1 SA7 A1 SA1 ABTA+1 MX7 42 BX1 X7*X1 BX6 X1+X2 SA6 A1 SX1 B2 RJ O6S SA6 ABTA+2 SA1 B0 CHECK ABORT SENSE SWITCH LX1 59-8 NG X1,ABT1 IF SET TO ABORT SA1 ABT CHECK FOR RETURN ADDRESS AX1 30 ZR X1,ABT1 IF NO RETURN ADDRESS SB7 X1 BX6 X6-X6 CLEAR ADDRESS SA6 A1 SX6 ABTA ISSUE DAYFILE MESSAGE RJ IDM JP B7 RETURN ABT1 MESSAGE ABTA,,R ABORT ABTA DATA C*IAFEX ABNORMAL - * DATA 0 ABTB BSSZ 5 AREA TO HOLD REGISTERS USED BY *SYS* MACRO ABTC BSSZ 20B AREA TO HOLD EXCHANGE PACKAGE ASM SPACE 4 ** ASM - ASSIGN MESSAGE TO TERMINAL. * * ASSIGNS AN OUTPUT MESSAGE TO THE TERMINAL. FOR MUX * TERMINALS, THE FIRST TWO WORDS IN THE POT ARE NOT USED. * FOR NETWORK TERMINALS, THE CURRENT CHARACTER SET IS * STORED IN THE SECOND WORD OF THE FIRST POT. * THE FIRST WORD IN THE FIRST POT IS USED FOR LINKING * OUTPUT INTO THE OUTPUT QUEUE IN VSTT. * * ENTRY (X7) = FIRST POT OF MESSAGE TO BE ASSIGNED. * * EXIT (B3) = 0. * (B4) = 0. * * CALLS ABT, ANM, DPT. ASM5 ZR X7,ASM6 IF NULL ASSIGNMENT SB3 X7 DROP POT(S) SB4 B0 RJ DPT ASM6 SB3 B0+ SB4 B0+ ASM SUBR ENTRY/EXIT IFNET ASM4 IF NAM TERMINAL SA1 A0+VSTT SA2 A0+VDCT BX6 X1 LX6 59-58 CHECK USER BREAK IN PROGRESS MX5 -12 BX3 -X5*X1 BX4 -X5*X2 NG X6,ASM5 IF USER BREAK IN PROGRESS SX6 B1+B1 TELL DRIVER TO START AT WORD TWO LX6 36-0 NZ X3,ASM1 IF STACKED MESSAGE NZ X4,ASM2 IF CURRENT MESSAGE OR DRIVER REQUEST BX6 X2+X6 BX6 X6+X7 ASSIGN MESSAGE SA6 A2 REWRITE VDCT EQ ASM6 RETURN ASM1 NZ X4,ASM3 IF TWO MESSAGES ASSIGNED BX6 X2+X6 BX6 X3+X6 ASSIGN STACKED MESSAGE AS CURRENT MESSAGE SA6 A2+ BX1 X5*X1 CLEAR STACKED MESSAGE ASM2 BX6 X1+X7 ASSIGN STACKED MESSAGE SA6 A1 EQ ASM6 RETURN ASM3 SA7 ASMA SAVE POT POINTER SX6 3RASM RJ ABT SA1 ASMA BX7 X1 EQ ASM5 DROP POTS * PROCESS NETWORK TERMINAL MESSAGE; SET 6/12 ASCII FLAG, * PRESERVE CONCATENATION BIT AND SET USER FORMAT EFFECTOR * FLAG IN POT CHAIN HEADER (SEE *ANM*). ASM4 LX7 3 SA3 A0+VDCT SX5 B1 TA1 X7+1,VBMP LX3 0-51 BX4 X3*X5 PL X6,ASM4.1 IF NOT CHECKING FOR USER FORMAT EFFECTORS SA3 A0+VSTT LX5 55-0 BX5 X5*X3 LX5 2-55 BX4 X4+X5 ASM4.1 BX6 X1+X4 SA6 A1+ AX7 3 RJ /IAFEX4/ANM QUEUE OUTPUT FOR TERMINAL EQ ASM6 RETURN ASMA CON 0 POT POINTER AUU SPACE 4,10 ** AUU - ABORT UNIDENTIFIED OR RECONNECTING UCP. * * ENTRY (X7) = UCP IDENTIFICATION (JSN AND EJTO). * (X6) = 0, IF SMF AND ALREADY CONNECTED TO IAF * * USES X - 1, 6. * A - 1. * * CALLS EUC, SFC. AUU SUBR ENTRY/EXIT SA1 AUUA SET FORMATTED *REGR* ABORT CALL NZ X6,AUU1 IF NOT SMF SA1 AUUC SET FORMATTED *REGR* MESSAGE CALL AUU1 BX6 X1 RJ SFC SEND SFCALL RJ EUC END UCP CONNECTION EQ AUUX EXIT AUUA VFD 6/0,12/0,18/2,18/AUUB,6/REGR AUUB DATA C+** UNRECOGNIZED UCP ABORTED BY IAF **+ AUUC VFD 6/0,12/0,18/1,18/AUUD,6/REGR AUUD DATA C+** SMF IS ALREADY CONNECTED TO IAF **+ BRQ SPACE 4 ** BRQ - BUILD REQUEST QUEUE. * * ENTRY (X0) = ADDRESS OF QUEUE POINTER FOR BUILD. * * EXIT PPU FUNCTION REQUESTS BUILT IN POT CHAIN. * (X6) = FIRST POT POINTER OF REQUEST CHAIN. * = ZERO IF NO REQUESTS ENTERED IN CHAIN. * * CALLS CFL, ENP, PCS, SSP, UQS. BRQ SUBR ENTRY/EXIT SA1 X0 BX6 X6-X6 UX2,B2 X1 ZR B2,BRQX IF NO ENTRIES TO PROCESS RJ CFL BX6 X6-X6 SX1 B2+7 CALCULATE NUMBER OF POTS NEEDED AX1 3 NG X2,BRQX IF POTS IN SHORT SUPPLY SX6 X0-ITOQ NZ X6,BRQ1 IF NOT *ITOQ* SX2 B2+6-VRQB*VCPC CHECK QUEUE LENGTH SB7 VRQB SET MAXIMUM QUEUE LENGTH EQ BRQ2 SET QUEUE LENGTH BRQ1 SX2 B2+6-VRQA*VCPC CHECK QUEUE LENGTH SB7 VRQA SET MAXIMUM QUEUE LENGTH BRQ2 PL X2,BRQ3 IF REQUEST .GT. MAXIMUM QUEUE LENGTH SB7 X1+ SET REQUEST QUEUE LENGTH BRQ3 BX7 X7-X7 RJ GZP REQUEST ZEROED POTS BX6 X7 ZR X7,BRQX IF NO POTS AVAILABLE LX7 3 SET UP ENTRY POINTER TX5 X7,VBMP LX7 15 BX6 X6+X7 LX5 36 BX6 X6+X5 SA6 BRQA BX7 X0 SAVE ENTRY POINTER SA7 A6+B1 SX5 X0-ITOQ SX0 SBUF SET SORT BUFFER POINTER SX6 SBUF+VRQA*VCPC SA6 A7+B1 STORE BUFFER CONSTANT MX1 1 NZ X5,BRQ4 IF NOT *ITOQ* SX6 SBUF+VRQB*VCPC BX6 X6+X1 SET *1TO* FLAG SA6 A6 REPLACE CONSTANT WITH *1TO* VALUE BRQ4 SA1 X7 READ QUEUE POINTER SB6 X7 UX1,B2 X1 ZR B2,BRQ5 IF QUEUE EMPTY AX1 18 GET ENTRY SB5 X1 RJ GQE UX4,B3 X5 GET PROCESSOR ADDRESS SA3 TRRT+B3 MX2 -12 AX3 36 BX2 -X2*X3 SB7 X2+TSRPROC RJ PCS RJ SSP RJ UQS SA1 BRQC SX6 X1 GET BUFFER CONSTANT IX6 X0-X6 PL X6,BRQ5 IF NO ROOM FOR MORE ENTRIES SA2 A1-B1 SX7 X2 PL X1,BRQ4 IF NOT *ITOQ* RJ CFL CHECK POT SUPPLY PL X2,BRQ4 IF NOT LOW POT SUPPLY BRQ5 MX6 1 SET BUFFER TERMINATOR SA1 BRQA GET POT POINTER SA6 X0 BX0 X1 SB7 B1 SET ENTRY LENGTH MX5 -54 BX7 -X5 BRQ6 SA1 SBUF START SEARCH SB6 A1 BX2 -X5*X1 BRQ7 SA1 A1+B1 SEARCH ENTRIES BX3 -X5*X1 IX4 X3-X2 NG X1,BRQ8 IF END OF QUEUE PL X4,BRQ7 IF CURRENT FIND BEST SB6 A1 SET NEW FIND POINTER BX2 X3 EQ BRQ7 CONTINUE SEARCH BRQ8 LX2 59-53 NG X2,BRQ9 IF ALL ENTRIES PROCESSED SA1 B6 BX6 X1 SA7 B6 RJ ENP MAKE POT ENTRY EQ BRQ6 CONTINUE BRQ9 AX0 18 SX6 X0 EQ BRQX RETURN BRQA CON 0 POT POINTER BRQB CON 0 QUEUE POINTER ADDRESS BRQC CON 0 1/*1TO* FLAG, 41/0, 18/BUFFER CONSTANT CAM SPACE 4,10 ** CAM - CLEAR AUTO MODE. * * USES A - 2, 6. * X - 2, 3, 5, 6. * B - 3, 4. * * CALLS DPT. CAM SUBR ENTRY/EXIT SA2 A0+VDCT BX6 X2 SAVE CONTENTS OF VDCT SA6 CAMA SX6 B2+ SAVE TERMINAL NUMBER OF USER SA6 CAMB SX6 41B CLEAR READ DATA AND AUTO MODE LX6 49-0 BX2 -X6*X2 LX2 0-24 MX3 -12 BX5 -X3*X2 GET POT POINTER BX6 X3*X2 CLEAR POT POINTER LX6 24-0 SA6 A2 ZR X5,CAMX IF NO POT POINTER SB3 X5 SB4 B0 DROP TO END OF CHAIN RJ DPT DROP POTS EQ CAMX RETURN CAMA CON 0 VDCT OF LAST USER CAMB CON 0 TERMINAL NUMBER OF LAST USER CBL SPACE 4,20 ** CBL - CHECK BREAK IN PROGRESS AND LOGOUT FLAGS. * * CHECK IF EITHER FLAG IS SET. IF NOT, RETURN TO THE * CALLING ROUTINE. IF EITHER FLAG IS SET, DROP * POTS AND EXIT FROM QUEUE PROCESSING. * * ENTRY (SEE SSP.) * (B3) = QUEUE ENTRY POT POINTER. * (B5) = INP$ ENTRY POT POINTER IF NONZERO. * * EXIT TO *PCSX* IF EITHER FLAG SET. * (B3) AND (B5) POTS DROPPED IF EXISTENT. * * USES X - 0, 1. * A - 1. * B - 3, 4. * * CALLS DPT. CBL SUBR ENTRY/EXIT SA1 A0+VSTT CHECK BREAK IN PROGRESS AND LOGOUT FLAGS SX0 2001B LX0 48 BX1 X0*X1 ZR X1,CBLX IF NEITHER FLAG SET, RETURN SX0 B5 SB4 B0 ZR B3,CBL1 IF NO B3 POT(S) RJ DPT DROP POTS CBL1 ZR X0,PCSX IF NO B5 POT(S) SB3 X0 SB4 B0 RJ DPT DROP POTS EQ PCSX EXIT CCM SPACE 4,30 ** CCM - COMMAND CRACKER. * * CCM CRACKS A COMMAND IMAGE INTO A STRING BUFFER * AND THEN REASSEMBLES IT ON A PARAMETER BASIS UP TO * *PARL* PARAMETERS. THE STRING BUFFER MAY BE PARTIALLY * OVERLAID BY THE PARAMETER BUFFER. IF A PARAMETER OF * MORE THAN TEN CHARACTERS IS FOUND, THE ELEVENTH CHAR- * ACTER IS TREATED AS A SEPARATOR CHARACTER. COMMENTS * FOLLOWING THE COMMAND TERMINATOR ARE PACKED TEN * CHARACTERS TO A PARAMETER, REGARDLESS OF CONTENT. ALL * EXCESS POTS ARE DROPPED. SEE *PBUF* AND *SBUF* DES- * CRIPTIONS. * * ENTRY (B3) = POT POINTER OF POT BEGINNING COMMAND. * (B4) = FWA OF POT. * (X7) = FIRST WORD OF COMMAND IN CURRENT POT. * * EXIT TO *IPL* IF *PBUF* OVERLAYS *SBUF*. * (CCMA) = PARAMETER COUNT. * (CCMB) = WORD COUNT OF *PBUF*. * SEE BUFFER DESCRIPTIONS. * * USES X - ALL. * A - 1, 2, 3, 4, 5, 6, 7. * B - 2, 3, 4, 5, 6, 7. * * CALLS GPL, IPL, RPL, SSP. CCM SUBR ENTRY/EXIT SB5 B4+VCPC SET LWA OF POT SB4 B4+X7 SET FWA OF COMMAND IN POT SX3 B1 SA5 A0+VDCT CHECK TRANSMISSION MODE LX3 51-0 SB2 B0 PRESET DISASSEMBLY REGISTER EMPTY SB7 -1R0 BX6 X6-X6 PREVENT SPACE SUPPRESS BEYOND FWA BX3 -X5*X3 TOGGLE TRANSMISSION STATUS SA6 CCMF CLEAR LONG COMMAND LINE FLAG SA6 CCMA INITIALIZE PARAMETER COUNT BX0 X0-X0 SX2 76B BX5 X3+X2 SX7 B3 SAVE POT POINTER THROUGH LOOP SA7 CCMG SA6 SBUF-1 EQ CCM3 ENTER DISASSEMBLY LOOP * DISASSEMBLE COMMAND TO STRING BUFFER. CCM1 LX1 6 GET NEXT CHARACTER BX6 -X3*X1 BX3 X6 LX3 6 AX0 6 BX0 X0+X3 SA3 CCMF SB2 B2-B1 NZ X3,CCM3 IF LONG COMMAND LINE CONDITION SA6 A6+B1 NZ X0,CCM2 IF NOT POSSIBLE END OF LINE ZR B2,CCM6 IF LAST BYTE OF WORD CCM2 NZ X2,CCM2.1 IF PREVIOUS CHARACTER NOT *76* SA6 A6-B1 REPLACE *76* SX4 X6+B7 NG X4,CCM3 IF LOWER-CASE ALPHABETIC EQ CCM2.2 TRANSLATE SPECIAL CHARACTER CCM2.1 SX4 B1+B1 BX4 X2-X4 NZ X4,CCM3 IF PREVIOUS CHARACTER NOT *74* SA6 A6-1 SX6 X6+1R0+TSCTA-TSCT CCM2.2 SA4 TSCT-1R0+X6 GET DISPLAY-CODE TRANSLATION BX7 X4 SA7 A6 ENTER DISPLAY CODE TRANSLATION INTO BUFFER CCM3 BX2 X6-X5 MX3 -6 NZ B2,CCM5 IF MORE CHARACTERS IN CURRENT WORD LT B4,B5,CCM4 IF NOT END OF POT SB6 X6+ SAVE CHARACTER THROUGH *GPL* RJ GPL GET POT LINK SX6 B6+ RESTORE CURRENT CHARACTER SB5 B4+VCPC SX3 -77B CCM4 SA1 B4 READ NEXT WORD FROM POT SB4 B4+B1 SB2 10 RESET CHARACTER COUNT CCM5 SB6 A6+1-PBUF-PBUFL NG B6,CCM1 IF ROOM REMAINING IN STRING BUFFER ZR X0,CCM6 IF END OF COMMAND LINE SX7 B1+ SET LONG COMMAND LINE FLAG SA7 CCMF ZR X6,CCM1 IF COLON - CONTINUE CHECKING SX6 X6-1R ZR X6,CCM1 IF BLANK - CONTINUE CHECKING RJ SSP SET STACK PARAMETERS SMA X6,( COMMAND TOO LONG."NL") EQ PCS5 ISSUE MESSAGE * DELETE TRAILING SPACES AND POTS. CCM6 SA1 A6-B1 MX6 1 SX4 1R CCM7 SA1 A1-1 READ PRECEEDING CHARACTER SX5 A1-SBUF+1 ZR X5,CCM8 IF NO PARAMETERS IN THE BUFFER ZR X1,CCM7 IF TRAILING COLON CCM8 BX5 X4-X1 ZR X5,CCM7 IF TRAILING BLANK SA6 A1+B1 SET END OF LINE FLAG BX6 X6-X6 SA6 A6+B1 TERMINATE BUFFER SA2 CCMG RESTORE POT POINTER BX7 X2 DROP TRAILING POTS SB7 B0 SA1 SSPA MX6 -12 BX6 -X6*X1 SB2 X6 TERMINAL NUMBER TO (B2) RJ RPL * REASSEMBLE COMMAND ON PARAMETER BASIS. * * (X3) = PARAMETER COUNT. * (X6) = ASSEMBLY REGISTER. * (X7) = FILE NAME FLAG. * (B4) = CHARACTER COUNT OF PARAMETER. * (B5) = SHIFT COUNT. * (B6) = PARAMETER BUFFER INDEX. * (B7) = STRING BUFFER INDEX. SB6 PBUF INITIALIZE BUFFER POINTERS SB7 SBUF BX3 X3-X3 PRESET PARAMETER COUNT BX5 X5-X5 CLEAR DELIMITER INDICATOR SB2 8 SA1 B7 CHECK FIRST CHARACTER SB5 X1-1R* NZ B5,CCM22 IF NOT COMMENT SA1 A0+VDCT CHECK USER LOGGED IN LX1 59-57 PL X1,CCM22 IF LOGIN NOT COMPLETE SX1 B0 MX3 1 EQ CCM22 ENTER ASSEMBLY LOOP * ASSEMBLE PARAMETER. CCM9 SB4 B4+B1 COUNT CHARACTER SB5 B5-6 DECREMENT SHIFT COUNT BX6 X6+X2 MERGE CHARACTER CCM10 SA1 B7+ GET NEXT CHARACTER SB7 B7+1 BX2 X1 ZR X2,CCM11 IF COLON CHARACTER SX2 X1-1R+ NG X1,CCM15 IF END OF STRING CCM11 SA4 CCMC MASK FOR BLANK, ASTERIK, AND DOLLAR SIGN BX2 X2+X3 NG X2,CCM14 IF COMMAND TERMINATED OR ALPHANUMERIC SB3 X1 SX2 B7-SBUF-1 ZR X2,CCM12 IF FIRST CHARACTER SA2 CCME MASK FOR DOLLAR SIGN LX2 B3 BX5 X5-X2 NG X5,CCM13 IF BEGINNING OF LITERAL STRING CCM12 LX4 B3 PL X4,CCM15 IF SEPARATOR CHARACTER SB3 B3-1R ZR B3,CCM10 IF UNDELIMITED BLANK CCM13 SX7 B1+ SET NOT-FILE-NAME FLAG CCM14 LX2 X1,B5 POSITION CHARACTER FOR MERGER PL B5,CCM9 IF NOT YET ELEVENTH CHARACTER * PROCESS SEPARATOR CHARACTER. CCM15 NZ X6,CCM16 IF NON-NULL PARAMETER SX7 B1 SET NOT FILE NAME FLAG CCM16 PL X1,CCM17 IF NOT END OF STRING NG X3,CCM17 IF COMMAND TERMINATED NG X5,CCM17 IF INSIDE A LITERAL STRING SX4 1R. SET TERMINATOR BX1 X1+X4 CCM17 LT B4,B2,CCM18 IF .LT. EIGHT CHARACTERS SX7 B1+ SET NOT FILE NAME FLAG CCM18 LX7 36 STORE PARAMETER ASSEMBLY BX7 X7+X1 MX4 1 BX7 -X4*X7 SA6 B6 PX7 X7,B4 SB6 B6+2 INCREMENT PARAMETER BUFFER ADDRESS SA7 A6+B1 SB3 X1 NG X3,CCM22 IF COMMAND TERMINATED PL X1,CCM18.1 IF NOT END OF STRING NG X5,CCM21 IF INSIDE A LITERAL STRING CCM18.1 SX3 X3+B1 COUNT PARAMETER SA2 =4LDIAL BX6 X2 SA2 PBUF BX6 X2-X6 NZ X6,CCM19 IF COMMAND NOT *DIAL* SX6 X3-2 ZR X6,CCM21 IF TERMINAL NUMBER PROCESSED CCM19 SA2 CCMD MASK FOR TERMINATORS NG X5,CCM22 IF INSIDE A LITERAL STRING LX2 B3 PL X2,CCM22 IF CURRENT SEPARATOR NOT TERMINATOR SB3 B3-1R. NZ B3,CCM21 IF NOT PERIOD SA2 PBUF CHECK IF *LIST* COMMAND BX6 X2 SA2 =4LLIST BX2 X2-X6 ZR X2,CCM20 IF *LIST* SA2 =3LLNH BX6 X2-X6 NZ X6,CCM21 IF NOT *LNH* CCM20 SB3 -1R. SA2 B7 CHECK NEXT CHARACTER SX6 X2+B3 SA2 B6-3 CHECK LAST SEPARATOR ZR X6,CCM22 IF ELIPSIS SX6 X2+B3 SA2 A2+B1 BX6 X2+X6 ZR X6,CCM22 IF ELIPSIS CCM21 BX6 X3 SAVE PARAMETER COUNT MX3 1 TERMINATE COMMAND SA6 CCMA CCM22 GE B6,B7,IPL IF *PBUF* OVERFLOWS *SBUF* SB5 54 RESET CHARACTER COUNT BX7 X7-X7 RESET FILE NAME FLAG MX6 0 CLEAR ASSEMBLY REGISTER SB4 B0+ RESET CHARACTER COUNT PL X1,CCM10 IF NOT END OF STRING * TERMINATE PARAMETER BUFFER. SX6 B6-PBUF+2 SET *PBUF* WORD COUNT SA6 CCMB SX6 B0+ TERMINATE BUFFER SX7 B1 SET NOT FILE NAME FLAG LX7 36 SB7 PBUF+PARC*2 CCM23 SA6 B6 SA7 B6+B1 SB6 B6+2 LT B6,B7,CCM23 IF MORE NULL PARAMETERS TO BE SET RJ SSP SET STACK PARAMETERS JP CCMX RETURN CCMA CON 0 PARAMETER COUNT CCMB CON 0 WORD COUNT CCMC BSS 0 MASK OF ALLOWABLE NON-ALPHANUMERICS POS 60-1R* VFD 1/1 POS 60-1R VFD 1/1 POS 60-1R$ VFD 1/1 POS 0 INSURE ZERO FILL CCMD BSS 0 COMMAND TERMINATOR MASK POS 60-1R) VFD 1/1 POS 60-1R. VFD 1/1 POS 0 INSURE ZERO FILL CCME BSS 0 DELIMITED LITERAL MASK POS 60-1R$ VFD 1/1 POS 0 INSURE ZERO FILL CCMF CON 0 LONG COMMAND LINE FLAG CCMG CON 0 COMMAND POT POINTER TSCT SPACE 4,10 ** TSCT - TABLE OF SPECIAL CHARACTER TRANSLATIONS. * * TSCT CONTAINS THE DISPLAY CODE TRANSLATIONS OF THE *74XX* * SPECIAL CHARACTERS AND THE DISPLAY CODE MAPPINGS OF THE * *76XX* SPECIAL CHARACTERS. THE LOWER SIX BITS OF THE * CHARACTER ARE THE INDEX INTO THE TABLE. TSCT BSS 0 *76XX* MAPPINGS CON 61B 7633 - LEFT BRACE CON 75B 7634 - VERTICAL LINE CON 62B 7635 - RIGHT BRACE CON 76B 7636 - TILDE TSCTA BSS 0 *74XX* TRANSLATIONS CON 0 7400 - (NOT DEFINED) CON 74B 7401 - COMMERCIAL AT CON 76B 7402 - CIRCUMFLEX CON 0 7403 - (NOT DEFINED) CON 0 7404 - COLON CON 0 7405 - (NOT DEFINED) CON 0 7406 - (NOT DEFINED) CON 74B 7407 - COMMERCIAL AT PBUF SPACE 4,25 ** PBUF - PARAMETER BUFFER. * SBUF - STRING BUFFER. * * *PBUF* IS FORMATTED DURING COMMAND CRACKING. EACH * PARAMETER HAS A TWO WORD ENTRY AS FOLLOWS. * *T,PBUF 60/ PARAMETER *T,PBUF+1 12/ WORD COUNT, 12/ FN FLAG, 18/ 0, 18/ SEPARATOR * * THE WORD COUNT IS BIASED BY 2000B. THE FILE NAME * FLAG IS SET TO ZERO TO INDICATE THAT THE PARAMETER * CONTAINS ONLY ALPHANUMERICS AND IS SEVEN CHARACTERS * OR LESS IN LENGTH. IT IS SET TO ONE TO INDICATE * OTHERWISE. LBUF CON 0 CON 1R$ PBUF BSS 48 SBUF BSS 82 PBUFL EQU *-PBUF PARL EQU PBUFL/2-2 TBUF SPACE 4,10 ** TBUF - NETWORK DATA TRANSLATION BUFFER. TBUF EQU PBUF DEFINE BUFFER FWA TBUFL EQU 77D DEFINE BUFFER LENGTH TBUFE EQU TBUF+TBUFL+1 DEFINE END OF BUFFER IFLT *,TBUFE,1 DEFINE BUFFER AREA BSS TBUFE-* BSS 3 TRANSLATION OVERFLOW AREA EXIBUF SPACE 4,10 ** EXIBUF -BUFFER FOR EXIT OVERLAY. * * THE EXIT OVERLAY BUFFER IS DEFINED TO OVERLAY A PORTION * OF THE PARAMETER AND TRANSLATION BUFFER. EXIBUF EQU PBUF+20 TITLE GENERAL SUBROUTINES. CDP SPACE 4,10 ** CDP - CLEAR DETACH IN PROGRESS. * * CLEARS VSTT BIT 56, DETACH IN PROGRESS. * * USES X - 1, 6. * A - 1, 6. CDP SUBR ENTRY/EXIT SA1 A0+VSTT SX6 B1 LX6 56 BX6 -X6*X1 SA6 A1 REWRITE VSTT EQ CDPX EXIT CDS SPACE 4,20 ** CDS - CHECK DRIVER STACK STATUS. * * CHECK TO SEE IF ANY ACTIVE DRIVERS REMAIN. IF NOT, * THE EXECUTIVE IS ABORTED. * * EXIT TO CALLER IF ANY DRIVER REMAINS ACTIVE. * ABORTS WITH DAYFILE MESSAGE IF NO DRIVER ACTIVE. * * N.B. THE NETWORK DRIVER IS ALWAYS CONSIDERED * TO BE ACTIVE IF PRESENT. * * USES X - 2, 6, 7. * A - 2. * B - 6. * * MACROS ABORT, MESSAGE. CDS SUBR ENTRY/EXIT TX7 B0,VNTP CHECK IF NETWORK ACTIVE NZ X7,CDSX IF NETWORK ACTIVE, RETURN SB6 B0+ INITIALIZE STACK POINTER INDEX SX6 =C* NO ACTIVE DRIVERS REMAINING.* * CHECK STACK POINTERS FOR ACTIVE DRIVER. CDS1 SA2 VDRL+B6 READ NEXT STACK POINTER SB6 B6+B1 AX2 24 NG X2,CDS2 IF END OF STACK POINTERS SX7 X2 LX2 59-48+24 CHECK SHUTDOWN FLAG ZR X7,CDS1 IF NULL POINTER PL X2,CDSX IF ACTIVE DRIVER EQ CDS1 LOOP FOR NEXT ENTRY * ISSUE DAYFILE MESSAGE AND ABORT. CDS2 MESSAGE X6,,R ISSUE DAYFILE MESSAGE ONSW 2 PREVENT RELOAD ABORT SPACE 4,10 ** CFC - COUNT NUMBER OF CHARACTERS. * * COUNTS THE NUMBER OF CHARACTERS CONTAINED IN A * CHARACTER STRING. THE MAXIMUM LENGTH OF THE * CHARACTER STRING IS SEVEN. * * ENTRY (X6) = 42/CHARACTER STRING, 18/0. * * EXIT (B6) = CHARACTER COUNT. * * USES X - 1, 3. * B - 6. CFC SUBR ENTRY/EXIT SB6 B0 ZR X6,CFCX IF NULL NAME SB6 8 MX3 6 LX3 17-59 CFC1 SB6 B6-B1 LX3 6 BX1 X3*X6 ZR X1,CFC1 IF NO CHARACTER EQ CFCX EXIT CFL SPACE 4,20 ** CFL - CHECK IF MORE FIELD LENGTH NEEDED (POTS IN SHORT * SUPPLY). * * ENTRY (VPAL) = TOTAL POTS ALLOCATED. * (VPUL) = TOTAL POTS RESERVED. * * EXIT (X1) = TOTAL POTS AVAILABLE. * (X2) = NEGATIVE IF BELOW MINIMUM POT SUPPLY. * (X2) = TOTAL POTS AVAILABLE IF NOT BELOW MINIMUM. * * USES A - 1, 2, 6. * X - 1, 2, 6. CFL SUBR ENTRY/EXIT SA1 VPAL TOTAL POTS ALLOCATED SA2 A1+B1 POTS IN USE IX1 X1-X2 POTS NOT IN USE SX2 X1-VMIP NG X2,CFL1 IF BELOW MINIMUM SX2 X1+ (X2) = POTS AVAILABLE EQ CFLX RETURN * PROCESS LOW POT SUPPLY. CFL1 SA2 CPBM COUNT POT SHORTAGE SX6 B1 IX6 X2+X1 BX2 -X1 (X2) = NEGATIVE STATUS SA6 A2 EQ CFLX RETURN CFX SPACE 4,10 ** CFX - COPY FILE EXTERNALLY. * * ENTRY (LISB) = INPUT FILE NAME ADDRESS * (LISC) = FIRST LINE NUMBER. * (LISE) = LAST LINE NUMBER. * * EXIT (X7) = *SCOPY* IN DISPLAY (ENTRY POINT NAME). * (X1) = 1, (ENTRY POINT DIRECTORY FLAG). * * USES X - 0, 1, 6, 7. * A - 1, 6. * * CALLS CFC, PCB, ZTB. CFX SUBR ENTRY/EXIT SA1 LISB GET FILE NAME NZ X1,CFX1 IF NOT PRIMARY FILE SA1 A0+VFNT CFX1 BX6 X1 RJ CFC COUNT CHARACTERS SA6 CFXB STORE FILE NAME SX6 1R, PX6 X6,B6 SA6 A6+B1 SA1 LISC SX6 1R* LX6 54 BX6 X6-X1 NZ X6,CFX2 IF FIRST NUMBER NOT AN ASTERISK SX1 B0+ CFX2 RJ ZTB CONVERT ZERO FILL TO BLANKS SA6 CFXC SA1 LISE SX6 1R* LX6 54 BX6 X6-X1 NZ X6,CFX3 IF SECOND NUMBER NOT AN ASTERISK SX1 B0+ CFX3 RJ ZTB CONVERT ZERO FILL TO BLANKS SA6 CFXD SX1 CFXA RJ PCB PACK CONTROL STATMENT BUFFER SA1 CFXA MX7 42 LX1 6 BX7 X7*X1 SET *EPN* EQ CFXX EXIT * SCOPY,LFN,,,,,,R,D,FLINE,LLINE,NS. CFXA VFD 60/6L$SCOPY VFD 12/2006B,48/1R, CFXB VFD 60/0 INPUT FILE NAME VFD 60/0 SEPARATOR VFD 60/6L,,,,,R REWIND OPTION VFD 12/2006B,48/1R, VFD 60/1LD CHARACTER SET VFD 12/2001B,48/1R, CFXC VFD 60/0 FIRST LINE VFD 12/2012B,48/1R, CFXD VFD 60/0 LAST LINE VFD 12/2012B,48/1R, VFD 60/2LNS VFD 12/2002B,48/1R. VFD 60/0 VFD 60/0 CLE SPACE 4 ** CLE - CLEANS UP TERMINAL TABLE AFTER A USER LOGS OFF. * * EXIT TERMINAL TABLE CLEARED, ALL POTS DROPPED, * AND ACTIVE USER COUNT DECREMENTED. * * USES X - 1, 2, 6, 7. * A - 1, 2, 6, 7. * B - 3, 4. * * CALLS DAP, DPT. CLE SUBR ENTRY/EXIT SA1 VANL DECREMENT ACTIVE USER COUNT ZR X1,CLE0.1 IF NO ACTIVE USERS SX6 B1 IX6 X1-X6 SA6 A1 RJ UCP UPDATE CONVERTED POINTER CLE0.1 RJ DAP DROP ASSIGNED POTS SX6 B0 SX7 B1 SA6 A0+VUIT SA6 A0+VFNT SA6 A0+VFST SA7 A0+VROT SA6 A0+VSTT TA6 B2,VTNP CLEAR TERMINAL NAME IFNET CLE1 IF NETWORK TERMINAL SA1 A0+VDCT SA2 =00007400000000000000B BX6 X2*X1 SA6 A1 REWRITE VDCT EQ CLEX RETURN CLE1 SA6 A0+VDCT SA1 A0+VDPT SA6 A0+VCHT MX2 12 SA6 A1 CLEAR VDPT BX2 X2*X1 ZR X2,CLE2 IF NO POTS IN VDPT SB4 B0 LX2 12 SB3 X2 RJ DPT DROP VDPT POTS CLE2 TA1 B2,VMST MX2 -12 SX6 B0 BX2 -X2*X1 SA6 A1 CLEAR VMST ZR X2,CLEX IF NO POTS IN VMST SB4 B0 SB3 X2 RJ DPT DROP VMST POTS EQ CLEX RETURN CNT SPACE 4,15 ** CNT - CANCEL TYPEAHEAD. * * ENTRY (X4) = REASON CODE TO SAVE IN *VMST*. * * EXIT TYPEAHEAD MODE CLEARED. * (X1) = 0, IF REENTRY NOT MADE. * = 1, IF REENTRY MADE. * (X6) = REASON CODE, IF REENTRY MADE. * * USES X - 1, 2, 3, 4, 6, 7. * A - 3, 6. * B - 3, 4. * * CALLS DCR, DPT. CNT1 TA3 B2,VMST GET REASON CODE MX4 -3 AX3 44 BX6 -X4*X3 SX1 1 SET REENTRY MADE CNT SUBR ENTRY/EXIT TA3 B2,VMST CHECK FOR INTERNAL TYPEAHEAD QUEUE MX6 -12 BX1 -X6*X3 ZR X1,CNTX IF NO TYPEAHEAD POT LX4 44-0 MX6 -3 LX6 44-0 BX3 X6*X3 CLEAR PREVIOUS CODE BX3 X4+X3 SET NEW CODE MX6 -18 BX6 X3*X6 CLEAR POINTER AND POT COUNT IN VMST SA6 A3 RESET VMST SB3 X1 DROP TYPEAHEAD POT SB4 B0 RJ DPT BX1 X1-X1 PRESET NO REENTRY TA3 B2,VMST LX3 59-51 PL X3,CNTX IF NAM TYPEAHEAD NOT IN EFFECT SX2 /1TD/CTM CANCEL NAM TYPEAHEAD SX7 CNT1 JP DCR ENTER DRIVER REQUEST COP SPACE 4 ** COP - COPIES THE CONTENTS OF POT(S) TO OTHER POT(S). * * ENTRY (B3) = NONZERO, FIRST POT TO BE COPIED * ZERO, THEN * (B7) = NUMBER OF POTS TO COPY. * (X5) = POT TO LINK TO. * (X6) = PACKED - BYTE 0 = (B7). * - BYTE 4 = FIRST POT TO COPY. * * EXIT (X7) = POINTER TO FIRST COPIED POT. * ZERO, IF NO POTS AVAILABLE. * (B7) = NUMBER OF POTS COPIED. * * CALLS GPL, RPT. COP SUBR ENTRY/EXIT ZR B3,COP2 IF POT COUNT SPECIFIED IN B7 SX7 B3 SAVE ENTRY INFORMATION SB7 B0 INITIALIZE COUNT COP1 SB7 B7+B1 RJ GPL NZ B3,COP1 IF STILL MORE POTS IN THE CHAIN PX6 X7,B7 BX5 X5-X5 COP2 SA6 COPA GET POTS PX5 X5,B7 RJ RPT ZR X7,COPX IF NO POT(S) AVAILABLE SA1 COPA GET SAVED INFORMATION UX4,B7 X1 SET FIRST READ POT BX1 X7 SET FIRST WRITE POT SB3 X4 LX4 3 LX7 3 TX2 X7+1,VBMP ADDRESS OF WRITE POT AX7 3 TB4 X4,VBMP ADDRESS OF READ POT SB6 VCPC-1 COP3 SA3 B4+B6 COPY POT SB6 B6-B1 BX6 X3 SA6 X2+B6 PL B6,COP3 IF MORE WORDS TO COPY SB6 B3 SAVE READ POT POINTER SB3 X1 SET WRITE POT POINTER RJ GPL GET POT LINK FOR WRITE POT ZR B3,COPX IF COPY COMPLETE RETURN SX2 B4+B1 SET WRITE POT ADDRESS SX1 B3 SAVE WRITE POT POINTER SB3 B6 SET READ POT POINTER RJ GPL GET POT LINK FOR READ POT SB6 VCPC-1 EQ COP3 COPA BSSZ 1 STORAGE FOR POT POINTER CTM SPACE 4,20 ** CTM - CALL TWO PORT MUX DRIVER. * * *CTM* IS CALLED EITHER BY *ITP* WHEN A *TSEM* * REQUEST HAS BEEN ISSUED, OR BY *DRI* AFTER DRIVER * SHUTDOWN FOR *1TM* HAS COMPLETED. * * ENTRY (VITM) = FORMATTED *1TM* DRIVER REQUEST WORD. * = 18/DN, 24/0, 18/VA. * DN = *1TM* DRIVER NAME. * VA = *1TM* *VDRL* ADDRESS. * * EXIT *1TM* HAS BEEN CALLED. * * USES A - 1, 2, 7. * X - 1, 2, 7. * * MACROS SYSTEM. CTM SUBR ENTRY/EXIT SA2 VITM GET FORMATTED DRIVER REQUEST WORD BX7 X2 SA7 CTMA SAVE FORMATTED REQUEST WORD CTM1 SYSTEM SPC,,CTMA CALL *1TM* + SA1 B1+ NZ X1,* IF SYSTEM REQUEST NOT CLEAR SA1 CTMA NZ X1,CTM1 IF PPU NOT AVAILABLE EQ CTMX RETURN CTMA CON 0 SCRATCH WORD CTP SPACE 4,20 ** CTP - COPY DATA INTO POTS. * * COPY DATA FROM A BUFFER INTO POTS. *CTP* RESERVES POTS * BASED ON THE BUFFER CM WORD COUNT AND ON HOW MANY POTS * ARE PROVIDED BY THE CALLER. * * ENTRY (B3) = FIRST POT OF CHAIN IF ONE PROVIDED. * (B4) = NUMBER OF WORDS TO TRANSFER INTO POTS. * (X6) = BUFFER ADDRESS. * (B5) = WORD OFFSET INTO THE FIRST POT AT WHICH POINT * DATA WILL BEGIN TO BE STORED. * * EXIT (X6) = 0, IF DATA WAS NOT COPIED. * POT COUNT, IF TRANSFER COMPLETE. * (B3) = FIRST POT POINTER. * (B4) = ADDRESS OF FIRST POT. * (X7) = LAST POT POINTER. * (B6) = WORD COUNT IN LAST POT. * * USES X - 1, 2, 5, 6, 7. * A - 1, 2, 6, 7. * B - 3, 4, 5, 6, 7. * * CALLS GPC, GPL. CTP SUBR ENTRY/EXIT SX7 B5 SAVE ENTRY CONDITIONS PX6 X6,B4 SA7 CTPA SA6 A7+B1 SB6 B4+B5 SET TOTAL CM WORD COUNT RJ GPC GET POT CHAIN OF CORRECT LENGTH ZR X6,CTPX IF POTS NOT OBTAINED SA1 CTPA SA2 A1+B1 SA6 A1 SAVE POT COUNT UX6,B6 X2 SX5 B3 SAVE FIRST POT POINTER SB7 X1 SB5 VCPC SB5 B5-B7 NUMBER OF WORDS THAT CAN FIT IN FIRST POT SA2 X6-1 SB4 B4+B7 START WITH OFFSET WORD SB6 B6-B5 GT B6,CTP2 IF MORE THAN ONE POT OF DATA SB5 B6+B5 SB7 X1+B5 SET WORD COUNT IN LAST POT EQ CTP2 TRANSFER THE DATA * COPY THE DATA INTO THE POTS. CTP1 RJ GPL ADVANCE TO NEXT POT SB5 VCPC SET TO TRANSFER *VCPC* WORDS SB6 B6-B5 GT B6,CTP2 IF MORE THAN ONE POT OF DATA LEFT SB5 B6+B5 SET TO TRANSFER PARTIAL POT SB7 B5 SET WORD COUNT IN LAST POT CTP2 SA2 A2+B1 GET WORD FROM BUFFER SB5 B5-B1 SB4 B4+B1 BX7 X2 STORE WORD INTO POT SA7 B4-1 NZ B5,CTP2 IF POT NOT YET FULL GT B6,CTP1 IF ALL DATA NOT YET TRANSFERRED SX7 B3 LAST POT POINTER SB6 B7 WORD COUNT IN LAST POT SA1 CTPA SB3 X5 FIRST POT POINTER LX5 3 BX6 X1 TB4 X5,VBMP ADDRESS OF FIRST POT EQ CTPX EXIT CTPA CON 0 OFFSET INTO FIRST POT CTPB CON 0 WORD COUNT, BUFFER ADDRESS DAP SPACE 4 ** DAP - DROP DRIVER REQUESTS AND POTS. * * DROPS POTS ASSIGNED TO TERMINAL IN VDCT AND IN * VSTT. * * CALLS DPT, DQO. DAP1 RJ DQO DROP QUEUED OUTPUT DAP SUBR ENTRY/EXIT SA1 A0+VDCT MX2 -13 LX2 60-1 BX3 -X2*X1 ZR X3,DAP1 IF NO POTS TO DROP BX6 X2*X1 CLEAR POINTER SA6 A1 IFNET DAP1 CHECK NETWORK OUTPUT NG X1,DAP1 IF DRIVER FUNCTION SB3 X3 DROP POTS SB4 B0 RJ DPT EQ DAP1 DIP SPACE 4,10 ** DIP - DROP INPUT POT CHAIN. * * EXIT - INPUT POT CHAIN DROPPED. * * USES X - 1, 6. * A - 1, 6. * B - 3, 4. * * CALLS DPT. DIP SUBR ENTRY/EXIT IFMUX DIPX SA1 A0+VDPT AX1 48 ZR X1,DIPX IF NO INPUT POT CHAIN BX6 X6-X6 CLEAR VDPT SA6 A1 SB3 X1 SB4 B0 RJ DPT DROP POT CHAIN EQ DIPX RETURN DJS SPACE 4,10 ** DJS - DETERMINE JOB STATUS. * * EXIT (X6) = ADDRESS OF STATUS MESSAGE. DJS SUBR ENTRY/EXIT SA1 A0+VSTT SA2 A0+VROT LX1 59-54 LX2 59-2 SX6 =4LIDLE PL X1,DJSX IF JOB COMPLETE SX6 =4LWAIT NG X2,DJSX IF JOB ROLLED OUT SX6 =7LEXECUTE EQ DJSX EXIT DLP SPACE 4,10 ** DLP - DUMP LAST POT OF INPUT TO PRIMARY FILE. * * EXIT LAST INPUT POT DUMPED, POT POSITION CLEARED IN VDPT. * (B6) = 0 IF NO DUMP, NONZERO IF DUMP IN PROGRESS. * * USES X - 0, 1, 2, 3, 6, 7. * A - 1, 2, 6, 7. * B - 3, 4, 6, 7. * * CALLS DMP, GPL, SSP. DLP2 SB3 X0 LAST POT MX7 12 BX1 -X7*X1 LX6 48 SAVE LAST POT POINTER FOR *DIP* BX6 X6+X1 LX7 36 BX6 -X7*X6 CLEAR FW, WC, AND BC FIELDS SA6 A1 REWRITE VDPT BX6 X2 SA6 A2 REWRITE VSTT LX7 12 CHECK QUEUED INPUT DLP3 MX6 -3 CHECK CURRENT VDPT INPUT LX1 30 IFNET DLP4 LX1 2 POSITION FOR CW MUX FORMAT DLP4 BX0 -X6*X1 WORD COUNT IN LAST POT DLP5 BX6 X2*X7 CHECK QUEUE IN VSTT BX6 X0+X6 ZR X6,DLP6 IF NO DUMP NECESSARY BX7 X0 WORD COUNT SB7 B0 SET TO FORCE DUMP SB6 X7 SET TO DUMP (B3) ONLY IF WC .GT. 0 RJ DMP DUMP LAST POT SB6 B1 SET EXIT CONDITION DLP6 RJ SSP RESET REGISTERS DLP SUBR ENTRY/EXIT SA1 A0+VDPT CLEAR INPUT INITIATED BIT SX6 1S16 BX6 -X6*X1 SA6 A1 REWRITE VDPT SA2 A0+VROT CHECK JOB ACTIVITY SB6 B0 SET NO DUMP EXIT CONDITION LX2 59-0 PL X2,DLPX IF JOB ACTIVE SA2 A0+VFNT CHECK PRIMARY FILE MX6 42 BX6 X6*X2 ZR X6,DLPX IF NO PRIMARY FILE SA2 A0+VSTT QUEUE COMPLETE POTS OF DATA MX7 12 BX0 X7*X1 FIRST POT POINTER LX7 48 SB3 B0 ZR X0,DLP5 IF NO POT CHAIN IN VDPT BX3 X7*X1 LAST POT IN VDPT LX3 24 SB3 X3 IFMUX DLP3 SB7 X3 LX0 12 POSITION POT POINTER SX6 X0 INITIALIZE LAST POT POINTER SB3 X0 SB4 B7-B3 ZR B4,DLP2 IF LAST POT REACHED DLP1 RJ GPL GET LINK TO NEXT POT ZR B3,DLP2 IF LAST POT REACHED BX6 X0 MOVE OLD FIRST POT POINTER SX0 B3 SAVE NEW FIRST POT POINTER SB4 B7-B3 ZR B4,DLP2 IF LAST POT REACHED SX3 B1 INCREMENT POT COUNT LX3 30-0 IX2 X2+X3 BX7 X7*X2 CHECK VSTT FIRST POT POINTER LX6 36-0 NZ X7,DLP1 IF ALREADY SET BX2 X2+X6 SET INTO VSTT BX7 X2 EQ DLP1 CHECK NEXT POT IN CHAIN DMP SPACE 4,30 ** DMP - DUMP SOURCE INPUT. * * CALLS *1TO* TO DUMP SOURCE POTS. THE SOURCE POT CHAIN * POINTER AND CHAIN LENGTH IS MAINTAINED IN *VSTT* BYTES * 1 AND 2. *1TO* WILL BE CALLED TO DUMP POTS WHEN THIS * CHAIN LENGTH EXCEEDS THE MAXIMUM SPECIFIED IN THE CALL * TO *DMP*. * * ENTRY (B3) = POT TO BE DUMPED. * (X7) = WORD COUNT IN POT TO BE DUMPED. * (B6) = 0, IF ONLY POTS IN VSTT ARE TO BE DUMPED. * 1, IF POT IN *B3* SHOULD BE DUMPED ALSO. * (B7) = POT COUNT THRESHOLD. A DUMP WILL BE * FORCED IF THE POT COUNT EXCEEDS THIS * VALUE. A VALUE OF ZERO MAY BE USED * TO FORCE THE DUMP. * * EXIT IF *1TO* REQUEST NOT ENTERED. * (VSTT) BYTE 1 = FIRST POT OF CHAIN. * BYTE 2 = POT COUNT. * * IF *1TO* REQUEST ENTERED. * (VSTT) BYTE 1 = 0. * BYTE 2 = 0. * (VROT) = SET BUSY IF CURRENT REENTRY QUEUE ENTRY. * * CALLS MQE, SSP. * * NOTE THE POT CHAIN CONTAINING INPUT DATA * WILL BE DROPPED UPON RETURN FROM *1TO* * EXCEPT FOR THE LAST (B3 - ENTRY) POT. DMP SUBR ENTRY/EXIT SA1 A0+VSTT SA2 A0+VFNT MX5 42 MX4 12 LX4 -12 BX6 X4*X1 BX5 X5*X2 MX3 18 ZR X5,DMPX IF PRIMARY FILE NON-EXISTENT LX3 -12 BX2 X3*X1 NZ X6,DMP1 IF INPUT CURRENTLY BEING HELD SX2 B3 SET POT IN ENTRY ZR B6,DMPX IF NO DUMP NEEDED LX2 36 DMP1 SX4 B0 ZR B6,DMP2 IF NO ADDITIONAL POT TO DUMP SX4 B1 COUNT POT DMP2 LX4 30 IX2 X2+X4 BX4 X2 MX6 -6 AX4 30 BX4 -X6*X4 GET NUMBER OF POTS BX6 -X3*X1 SX3 B1 SET SORT FLAG LX3 52-0 BX6 X3+X6 SB5 X4 LT B5,B7,DMP3 IF DUMP NOT NEEDED SA5 A0+VROT CHECK FOR DUMP IN PROGRESS LX5 59 NG X5,DMP4 IF FILE NOT ACTIVE DMP3 BX6 X2+X6 UPDATE POT COUNT SA6 A1 EQ DMPX DMP4 SA6 A1 REEINITIALIZE POT COUNT AND POINTER AX2 36 LX4 24 POSITION POT COUNT SX5 ICH$ MAKE *1TO* REQUEST NZ B6,DMP5 IF NEW POT BEING DUMPED BX7 X7-X7 DMP5 LX7 33 POSITION WORD COUNT BX6 X4+X7 LX5 48 BX6 X5+X6 SB7 ITOQ LX2 12 BX5 X6+X2 RJ MQE NZ X2,DMP6 IF STACKED QUEUE ENTRY SA5 A0+VROT MARK STATUS BUSY IF CURRENT QUEUE ENTRY MX6 59 BX6 X6*X5 SA6 A5+ REWRITE VROT DMP6 RJ SSP RESET TERMINAL PARAMETERS EQ DMPX RETURN DPT SPACE 4 ** DPT - DROP POT. * * CLEARS POT LINK BYTES AND MARKS POTS AVAILABLE IN THE * POT LINK TABLE. * * ENTRY (B3) = FIRST POT OF CHAIN TO BE DROPPED. * (B4) = LAST POT IN CHAIN TO BE DROPPED. * (B4) = 0 = DROP TO END OF CHAIN. * * EXIT (DPTA) = POT POINTER IF POT NOT RESERVED. * (B3) = ZERO. * (B4) = ZERO. * * USES A - 1, 6, 7. * X - 1, 2, 3, 4, 5, 6, 7. * B - 3, 4, 5, 6, 7. * * CALLS ABT IF POT NOT RESERVED. DPT2 SX3 X2+ SAVE POT POINTER LX2 58 GET PLT RELATIVE ADDRESS SA1 X2+B7 READ PLT ENTRY BX6 X5*X2 GET BYTE NUMBER * 12 LX6 4 BYTE * 4 LX7 X6,B1 BYTE * 8 IX6 X6+X7 BYTE * 12 AX7 3 GET BYTE NUMBER SB3 X6+B6 SET BYTE MASK SHIFT AX6 X5,B3 SHIFT BYTE MASK SB4 X7 SET BIT MASK SHIFT AX7 X4,B4 SHIFT BIT MASK BX2 X6*X1 MASK OUT BYTE LX1 X1,B3 SET FOR NEXT LINK BX6 -X7*X2 MASK OUT BIT SA6 A1 STORE WORD BX7 X7*X2 CHECK RESERVATION SB5 B5-B1 COUNT POT DROPPED BX2 -X5*X1 GET NEXT LINK ZR X7,DPT1 IF POT NOT RESERVED NZ X2,DPT2 IF ANOTHER LINK TO DROP SA1 VPUL UPDATE POTS IN USE SX6 X1+B5 SA6 A1 DPT3 SB3 B0 CLEAR POT POINTER SB4 B0 CLEAR POT CHAIN POINTER DPT SUBR ENTRY/EXIT ZR B3,DPT0 IF TRYING TO DROP POT ZERO SX2 B3 SET FIRST POT TO DROP SX4 10B MX5 48 TB7 0,VPLP SET FWA OF PLT SB6 -48 SB5 B0 CLEAR POTS DROPPED COUNT ZR B4,DPT2 IF DROP TO END OF CHAIN SX3 B4 LX3 58 GET PLT RELATIVE ADDRESS SA1 X3+B7 READ PLT ENTRY BX6 X5*X3 LX6 4 BYTE * 4 LX7 X6,B1 BYTE * 8 IX6 X6+X7 BYTE * 12 SB3 X6+B6 SET BYTE MASK SHIFT AX6 X5,B3 SHIFT BYTE MASK BX6 X6*X1 MASK OUT BYTE SA6 A1 STORE WORD EQ DPT2 * PROCESS NON-RESERVED POT ERROR. * * ENTRY (X3) = POT POINTER. DPT0 SX3 B3 DPT1 SX7 X3+ STORE POT POINTER SX6 3RDPT SET ERROR CODE SA7 DPTA RJ ABT EQ DPT3 CLEAR REGISTERS AND RETURN DPTA CON 0 POINTER TO NON-RESERVED POT DQO SPACE 4,10 ** DQO - DROP QUEUED OUTPUT. * * DROPS OUTPUT POTS QUEUED IN *VSTT*. * FOR A DESCRIPTION OF HOW POT CHAINS OF DATA ARE LINKED * TOGETHER IN THE QUEUE, SEE THE NOTE AT THE BEGINNING * OF SUBROUTINE *ANM*. * * CALLS DPT. DQO2 SB3 X3 DROP THE SINGLE CHAIN SB4 B0 RJ DPT DQO SUBR ENTRY/EXIT SA1 A0+VSTT MX2 -12 BX3 -X2*X1 ZR X3,DQOX IF NO POTS TO DROP BX6 X2*X1 CLEAR POINTER MX2 54 CLEAR CHAIN COUNTER LX2 24 BX6 X2*X6 SA6 A1 IFMUX DQO2 IF ONLY ONE CHAIN IN VSTT DQO1 SB3 X3 LX3 3 TA1 X3,VBMP SAVE LINK TO NEXT CHAIN SB4 B0 BX6 X1 SA6 DQOA RJ DPT DROP CURRENT CHAIN SA1 DQOA MX3 -12 BX3 -X3*X1 ZR X3,DQOX IF NO MORE CHAINS TO DROP EQ DQO1 DROP NEXT CHAIN DQOA CON 0 LINK TO NEXT CHAIN DQP SPACE 4,10 ** DQP - DROP QUEUE ENTRY POTS. * * RELEASE POTS ASSOCIATED WITH A REENTRY QUEUE ENTRY. * * ENTRY (SSPA) = REENTRY QUEUE ENTRY. * * EXIT QUEUE ENTRY POTS RELEASED. * (SSPA) UPDATED. * (B3) = 0. * (B4) = 0. * * USES A - 1, 6. * X - 1, 6. * B - 3, 4. * * CALLS DPT, SSP. DQP SUBR ENTRY/EXIT RJ SSP SET UP REGISTERS SB4 B0+ ZR B3,DQPX IF NO POTS RJ DPT DROP POT(S) SA1 SSPA CLEAR POT POINTER IN STACK ENTRY MX6 -12 LX6 12 BX6 X6*X1 SA6 A1 REWRITE STACK ENTRY EQ DQPX RETURN DSH SPACE 4,10 ** DSH - SHUT DOWN DRIVER QUEUE STACK. * * ISSUE HANG-UP-PHONE DRIVER-TO-IAFEX REQUESTS. THE * REQUESTS ARE PLUGGED INTO THE CIRCULAR REQUEST STACK * TO BE PROCESSED BY *DRI* ON ITS NEXT CYCLE. THIS * CAN CAUSE NO INTERFERENCE WITH DRIVER USE OF THE * STACK BECAUSE THE DRIVER WILL HAVE DROPPED. *DSH* * WILL BE CALLED FROM *DRI* WHENEVER *DRI* FINDS THAT * A CIRCULAR STACK IS EMPTY AND THE SHUTDOWN FLAG IS * SET. AFTER COMPLETION, *DSH* WILL SET THE DRIVER * STATUS AS *OFF* IN THE DRIVER CIRCULAR STACK POINTER. * IF NO ACTIVE DRIVERS REMAIN AND NETWORK IS NOT ACTIVE, * THE EXECUTIVE WILL BE ABORTED. * * ENTRY (X1) = ADDRESS OF CIRCULAR STACK POINTER. * * USES A - 1, 2, 4, 5, 6. * X - 1, 2, 3, 4, 5, 6, 7. * B - 2, 3, 4, 7. * * CALLS CDS. DSH SUBR ENTRY/EXIT RJ CDS CHECK DRIVER STATUSES * INITIALIZE NEW SHUTDOWN. SA5 DSHA CURRENT SHUTDOWN POINTER NZ X5,DSH1 IF SHUTDOWN IN PROGRESS SA2 X1+ READ CIRCULAR STACK POINTER MX5 -12 BX3 -X5*X2 SET FIRST TERMINAL NUMBER OF STACK SB2 X3 PX6 X1,B2 FORMAT SHUTDOWN POINTER BX5 X6 SA6 A5 STORE * SET POINTERS FOR ENTERING CIRCULAR STACK REQUESTS. DSH1 SA1 X5 (X5) = STACK POINTER ADDRESS SB4 10 (B4) = REQUEST LIMIT UX5,B2 X5 (B2) = CURRENT TERMINAL NUMBER MX6 -12 BX2 -X6*X1 FIRST TERMINAL NUMBER OF STACK AX1 12 SB7 X2 BX2 -X6*X1 TERMINAL COUNT AX1 12 SB7 B7+X2 (B7) = LAST TERMINAL + 1 OF STACK SA1 X1+B1 READ FIRST SB3 A1+1 (B3) = ADDRESS OF IN SX6 X1 SET OUT = FIRST SA6 B3+B1 SX7 /TLX/HUP+2000B INITIALIZE REQUEST SA6 B3 SET IN = FIRST LX7 48 * FORMAT CIRCULAR STACK REQUEST. DSH2 SX3 B2+ SET TERMINAL NUMBER TTADD B2,A0,X2,X6 SET TERMINAL TABLE ADDRESS SA1 A0+VDCT SA2 A0+VDPT MX4 12 BX1 X4*X1 ZR X1,DSH3 IF NO USER SA1 A0+VSTT LX1 59-48 NG X1,DSH3 IF LOGOUT IN PROGRESS BX6 X6-X6 BX4 X4*X2 SA6 A2 CLEAR VDPT * ENTER CIRCULAR STACK REQUEST. SA1 B3 GET CURRENT IN POINTER BX6 X7+X3 MERGE REQUEST AND TERMINAL NUMBER LX4 24 BX6 X6+X4 MERGE POT POINTER SA6 X1 STORE REQUEST IN CIRCULAR STACK SX6 X1+B1 ADVANCE IN SA6 B3 SB4 B4-B1 DECREMENT REQUEST COUNT * ADVANCE TO NEXT TERMINAL. DSH3 SB2 B2+B1 ADVANCE TERMINAL NUMBER BX6 X6-X6 ASSUME END OF TERMINALS GE B2,B7,DSH4 IF END OF TERMINALS NZ B4,DSH2 IF NOT REQUEST LIMIT PX6 X5,B2 UPDATE SHUTDOWN POINTER * RESET SHUTDOWN POINTER AND SET DRIVER *OFF*. DSH4 SA6 DSHA REWRITE SHUTDOWN POINTER NZ X6,DSHX IF NOT END OF THIS SHUTDOWN, RETURN SA1 X5 READ CIRCULAR STACK POINTER SX6 B1 SET DRIVER STATUS = *OFF* LX6 49-0 BX6 X6+X1 SA6 A1+ REWRITE CIRCULAR STACK POINTER EQ DSHX RETURN * DSHA - CURRENT SHUTDOWN POINTER. * * 12/2000B+TN , 48/SPA. * TN = CURRENT TERMINAL NUMBER. * SPA = CURRENT STACK POINTER ADDRESS. DSHA CON 0 CURRENT SHUTDOWN POINTER. DVP SPACE 4,10 ** DVP - DROP *VROT* POT CHAIN. * * DROP INPUT POT CHAIN POINTED TO BY *VROT*. * * USES X - 1, 2, 6. * A - 1, 6. * B - 3, 4. * * CALLS DPT. DVP SUBR ENTRY/EXIT SA1 A0+VROT CHECK FOR INPUT POT POINTER MX2 -12 LX2 47-11 BX6 -X2*X1 ZR X6,DVPX IF NO POT TO DROP LX6 -36 SB3 X6 BX6 X2*X1 CLEAR POT POINTER SA6 A1 SB4 B0 RJ DPT DROP INPUT POT EQ DVPX RETURN EDR SPACE 4,20 ** EDR - ENTER DRIVER REQUEST. * * ENTER DRIVER REQUEST IN TERMINAL TABLE WORD *VDCT* * AND SET ACTIVITY BIT IF NETWORK TERMINAL. * * ENTRY (VDCT) = INTERLOCK CLEAR. * (X2) = DRIVER REQUEST. * * USES X - 1, 2, 6. * A - 1, 6. * * CALLS ABT, /IAFEX4/SAB. EDR1 SX6 3REDR RJ ABT EDR SUBR ENTRY/EXIT SA1 A0+VDCT READ VDCT MX6 1 SET DRIVER REQUEST BX2 X6+X2 MX6 -12 BX6 -X6*X1 NZ X6,EDR1 IF VDCT INTERLOCKED BX6 X2+X1 SA6 A1 REWRITE VDCT IFMUX EDRX IF MUX TERMINAL, RETURN RJ /IAFEX4/SAB SET ACTIVITY BIT EQ EDRX RETURN ENP SPACE 4,20 ** ENP - ENTER POT ENTERS TWO WORDS IN A POT CHAIN AND UPDATES * POINTERS IF NECESARY. POT CHAIN MUST BE ZEROED. * * ENTRY- * (X0) = BITS (53 - 36) = CURRENT ADDRESS IN CURRENT POT * (X0) = BITS (35 - 18) = FIRST POT IN CHAIN. * (X0) = BITS (17 - 0) = CURRENT POT IN CHAIN. * (X6) = FIRST WORD TO BE ENTERED. * (X7) = SECOND WORD TO BE ENTERED. * (B7) = 1 OR 2 INDICATING 1 OR 2 WORD ENTRY. * * EXIT- * (X0) = UPDATED. * (X5) = UNCHANGED. * (X7) = UNCHANGED. * (B7) = UNCHANGED. * * CALLS GPL. ENP2 LX1 36 UPDATE POINTER BX6 X6-X6 IX0 X0+X1 SA6 B4 ENP SUBR ENTRY/EXIT BX3 X0 SB3 X0 LX3 3 SX1 B7 TB5 X3+VCPC,VBMP SET LWA+1 OF POT LX3 -3-36 SA6 X3 ENTER FIRST WORD SB4 X3+B7 SET NEXT ADDRESS EQ B1,B7,ENP1 IF ONE WORD ENTRY SA7 X3+B1 ENP1 NE B4,B5,ENP2 IF NOT END OF POT RJ GPL MX6 -18 SX3 B4 LX6 18 BX0 -X6*X0 LX3 36 SX6 B3 BX2 X0+X3 IX0 X2+X6 EQ ENPX EUC SPACE 4,10 ** EUC - END UCP CONNECTION. * * ENTRY (X7) = UCP IDENTIFICATION (JSN AND EJTO). * * EXIT (X1) = RETURN CODE. * * USES X - 1, 6. * A - 1. * * CALLS SFC. EUC SUBR ENTRY/EXIT SA1 EUCA SET UP CALL FORMAT BX6 X1 RJ SFC SEND SFCALL EQ EUCX EXIT EUCA VFD 18/0,18/-1,18/0,6/ENDT FMF SPACE 4,15 ** FMF - FORMAT MODES FIELD. * * ENTRY (A6) = ADDRESS OF LWA MESSAGE SO FAR. * * EXIT (A6) = LWA OF MESSAGE INCLUDING EOL. * * USES X - 1, 2, 6. * A - 1, 2, 6. * B - 5. * * CALLS PKW. FMF SUBR ENTRY/EXIT SX6 2R: SB5 60-12 BITS LEFT IN WORD SA1 A0+VDCT LX1 59-55 PL X1,FMF1 IF NOT BRIEF MODE SA2 =7LBRIEF, RJ PKW PACK WORD FMF1 LX1 55-50 PL X1,FMF2 IF NOT TEXT MODE SA2 =6LTEXT, RJ PKW PACK WORD FMF2 SA1 A0+VSTT LX1 59-53 SA2 =10LPROMPT OFF NG X1,FMF3 IF NO PROMPT MODE SA2 =9LPROMPT ON FMF3 RJ PKW LX6 B5 SA6 A6+B1 MX2 -12 BX2 -X2*X6 ZR X2,FMFX IF EOL ALREADY INCLUDED BX6 X6-X6 SA6 A6+B1 EQ FMFX EXIT FPQ SPACE 4,30 ** FPQ - FILL POT QUEUE. * * *FPQ* CHECKS THE NUMBER OF POT CHAINS IN THE *TGPM* QUEUES * THAT HAVE NOT BEEN USED. IF THE QUEUE IS EMPTY, THE NUMBER * OF POT CHAINS TO KEEP IN THE QUEUE (CONTROL VALUE) IS * INCREASED BY ONE. IF THE QUEUE IS NON-EMPTY FOR 1000 TIMES, * THE CONTROL VALUE IS DECREASED BY ONE. *VMIL* IS THE * MINIMUM POT CHAINS TO KEEP IN EACH QUEUE. EACH QUEUE IS * FILLED IN A ROUND-ROBIN FASHION FROM WHERE THE LAST FILL * COMPLETED. IF THERE IS NOT ENOUGH FIELD LENGTH TO FILL THE * QUEUE TO CONTROL VALUE, AS MANY ENTRIES AS POSSIBLE * ARE REFILLED, SO THERE MAY NOT ALWAYS BE THE CONTROL * VALUE NUMBER OF POT CHAINS IN THE QUEUE. EACH TIME * *FPQ* IS EXECUTED, AN ATTEMPT IS MADE TO FILL TO * CONTROL VALUE. * * ENTRY (X1) = *TGPM* QUEUE STATUS WORD. * (B2) = LENGTH OF POT CHAIN FOR THIS QUEUE. * (B3) = NEXT FILL POINTER. * (B4) = PREVIOUS FILL POINTER. * (B5) = POT CHAIN COUNT(CONTROL VALUE). * * EXIT (X0) = UPDATED NEXT FILL POINTER. * (X4) = UPDATED PREVIOUS FILL POINTER. * (B5) = UPDATED POT CHAIN COUNT (CONTROL VALUE). * * USES A - 1, 3, 4, 5, 6, 7. * X - 0, 1, 2, 3, 4, 5, 6, 7. * B - 4, 5, 6, 7. * * CALLS CFL, RPT. FPQ SUBR ENTRY/EXIT BX6 X1 SAVE *TGPM* QUEUE STATUS WORD SA6 FPQD SX4 B0 CLEAR UNUSED CHAIN COUNT SX5 B0 CLEAR USED CHAIN COUNT MX2 -12 BX3 -X2*X1 SB6 X3 GET END OF QUEUE ADDRESS AX1 12 GET BEGINNING OF QUEUE ADDRESS BX3 -X2*X1 FPQ1 LT B4,B6,FPQ2 IF NOT END OF QUEUE SB4 X3 RESET TO BEGINNING OF QUEUE FPQ2 EQ B4,B3,FPQ6 IF END OF PREVIOUS FILL SA1 B4 NZ X1,FPQ3 IF POT CHAIN NOT USED SX5 X5+B1 COUNT USED POT CHAINS SB4 B4+B1 EQ FPQ1 CHECK NEXT QUEUE ENTRY FPQ3 SB7 B4 (B4) = UPDATED PREVIOUS FILL POINTER FPQ4 LT B7,B6,FPQ5 IF NOT END OF QUEUE SB7 X3 RESET TO BEGINNING OF QUEUE FPQ5 EQ B7,B3,FPQ8 IF END OF PREVIOUS FILL SX4 X4+B1 COUNT UNUSED POT CHAINS SB7 B7+B1 EQ FPQ4 CHECK NEXT ENTRY FPQ6 SB7 X5 NE B7,B5,FPQ8 IF NOT EMPTY QUEUE SA1 FPQA CLEAR DECREMENT COUNTER SB7 B2-VSCL ZR B7,FPQ7 IF SHORT POT CHAIN QUEUE SA1 FPQB FPQ7 SX6 B0 SA6 A1 SX1 B5-VMXL PL X1,FPQ11 IF QUEUE ALREADY AT MAXIMUM SIZE SB5 B5+B1 EQ FPQ11 CONTINUE FPQ8 SA1 FPQA SB7 B2-VSCL ZR B7,FPQ9 IF SHORT POT CHAIN QUEUE SA1 FPQB CHECK DECREMENT COUNTER FPQ9 SX6 X1+B1 SX1 X6-VTHL NG X1,FPQ10 IF NOT TIME TO DECREASE QUEUE SIZE SX6 B0 RESET COUNTER SB7 VMIL LE B5,B7,FPQ10 IF QUEUE ALREADY MINUMUM SIZE SB5 B5-B1 DECREASE QUEUE SIZE FPQ10 SA6 A1 SAVE COUNTER FPQ11 SX0 B5 (X0) = UPDATED CHAIN COUNT IX6 X0-X4 GET NUMBER OF ENTRIES LEFT TO FILL SX1 B4 SAVE CHAIN COUNT AND FILL POINTER PX7 X1,B5 SA7 FPQE SX0 B3 (X0) = CURRENT FILL POINTER FPQ12 SA6 FPQC SX6 X6-1 NG X6,FPQ15 IF POT QUEUE HAS BEEN FILLED RJ CFL CHECK POT SUPPLY PL X2,FPQ13 IF MINIMUM OR ABOVE,FILL QUEUE SA1 VCPL NZ X1,FPQ15 IF FL INCREASE PENDING SA1 SPRM INCREMENT THROTTLE FLAG SX6 X1+1 SA6 A1 EQ FPQ15 RETURN FPQ13 SX1 B0 PX5 X1,B2 RJ RPT GET POT CHAIN ZR X7,FPQ15 IF NOT POTS AVAILABLE SA7 X0 PUT POT POINTER IN QUEUE SX0 X0+B1 UPDATE CURRENT FILL POINTER MX3 -12 CHECK END OF QUEUE SA1 FPQD BX6 -X3*X1 BX6 X0-X6 NZ X6,FPQ14 IF NOT END OF QUEUE AX1 12 RESET TO BEGINNING OF QUEUE BX0 -X3*X1 FPQ14 SA1 FPQC DECREMENT FILL COUNTER SX6 X1-1 EQ FPQ12 FILL NEXT QUEUE ENTRY FPQ15 SA1 FPQE RESTORE PARAMETERS UX4,B5 X1 EQ FPQX RETURN FPQA CON 0 *VTSL* QUEUE NON-EMPTY COUNTER FPQB CON 0 *VTLL* QUEUE NON-EMPTY COUNTER FPQC CON 0 FILL COUNTER FPQD CON 0 CURRENT *TGPM*QUEUE STATUS WORD FPQE CON 0 TEMPORARY STORAGE FOR RETURN PARAMETERS FSM SPACE 4,15 ** FSM - FORMAT STATUS MESSAGE. * * ENTRY (B4) = ADDRESS OF MESSAGE FIELD CONTENTS. * (X1) = CUMULATIVE SRU-S. * * EXIT (A6) = LWA OF MESSAGE. * (X7) = MESSAGE WORD COUNT. * MESSAGE FORMATTED STARTING AT FSMA. * * USES X - 1, 2, 3, 5, 6, 7. * A - 1, 2, 3, 5, 6, 7. * B - 2, 3, 4. * * CALLS CFD, ZTB. FSM SUBR ENTRY/EXIT BX7 X1 SAVE ENTRY CONDITIONS SA7 FSMB SX7 B4 SA7 A7+B1 SX7 B3 SAVE TERMINAL NUMBER AND POT POINTER PX7 X7,B2 SA7 A7+B1 SA1 A0+VFST GET JSN MX2 24 BX2 X2*X1 SA3 =6L JSN: LX2 24 BX6 X2+X3 SA6 FSMA SA1 A0+VSTT MX2 -3 AX1 12 BX1 -X2*X1 SA1 X1+STAA SX2 1RS BX1 X1+X2 RJ ZTB CONVERT ZERO CHARACTERS TO BLANKS SA1 FSMB GET ENTRY PARAMETERS SA5 A1+B1 SA6 A1 SA3 FSMC SRU CONSTANT (.0001) PX1 X1 FX1 X3*X1 DIVIDE ACCUMULATOR VALUE BY 1000 RJ CFD CONVERT TO F10.3 FORMAT SB4 X5 SA5 A5+B1 UX5,B2 X5 RESTORE POT POINTER AND TERMINAL NUMBER SB3 X5 MX2 36 BX6 X2*X6 LX6 36 SA1 =4LRU: BX6 X1+X6 SA6 A6+B1 LX7 36 BX6 X7 SA6 A6+B1 SA1 A0+VFNT MX3 42 BX1 X3*X1 ZR X1,FSM1 IF NO PRIMARY FILE SA2 =6L FILE LX2 36 BX6 X2+X7 LX1 18 SA6 A6 SA2 =7L NAME: MX3 -18 BX6 -X3*X1 BX6 X2+X6 SA6 A6+B1 MX2 -12 BX6 -X2*X6 ZR X6,FSM1 IF EOL APPENDED BX6 X3*X1 SA6 A6+B1 FSM1 SA1 B4 CHECK STATUS MESSAGE MX2 12 BX3 X2*X1 SA1 A1-B1 START LOOP SA2 =10H STATUS: BX6 X2 MX2 -12 NZ X3,FSM2 IF STATUS MESSAGE CURRENT SX7 B0 DO NOT ISSUE MESSAGE SA7 B4 FSM2 SX7 A6-FSMC+1 PL X7,FSM3 IF END OF BUFFER SA6 A6+B1 BX3 -X2*X6 SA1 A1+B1 BX6 X1 NZ X3,FSM2 IF NO EOL FSM3 SX7 A6-FSMA+1 SET WORD COUNT EQ FSMX EXIT FSMA CON 0 JSN DATA 10H SYSTEM: FSMB BSS 12 MESSAGE BUFFER FSMC CON 0.0001P48+1 SRU CONSTANT GFN SPACE 4 ** GFN - GET FILE NAME. * * GETS FILE NAME FROM *PBUF*, CHECKS FILE FLAG, RETURNS TO * CALLING ROUTINE UNLESS AN ERROR WAS DETECTED. * * ENTRY (B6) = POINTER TO FILE NAME. * * EXIT (X2) = FILE NAME IF NO ERROR. * * ERROR TO *IPL* IF INCORRECT FILE NAME. * * USES X - 1, 2. * A - 1, 2. GFN SUBR ENTRY/EXIT SA1 B6+1 GET ERROR FLAG SA2 B6 GET FILE NAME LX1 59-36 NG X1,IPL IF FILE NAME ERROR EQ GFNX EXIT GOP SPACE 4,10 ** GOP - GET ONE POT. * * ENTRY (B3) = POT POINTER IF POT ALREADY RESERVED. * * EXIT (B3) = POT POINTER. * (B4) = POT FWA. * * CALLS RPT. GOP SUBR ENTRY/EXIT SX7 B3 GT B3,GOP1 IF POT ALREADY RESERVED PX5 X7,B1 RJ RPT RESERVE POT GOP1 SB3 X7 LX7 3 TB4 X7,VBMP EQ GOPX EXIT GPC SPACE 4,20 ** GPC - GET POT CHAIN. * * GETS SUFFICIENT POTS FOR THE NUMBER OF CM WORDS SPECIFIED. * IF A POT CHAIN IS PROVIDED BY THE CALLER, *GPC* WILL ADD * POTS AS NECESSARY TO THE END OF THE CHAIN. ANY EXTRA POTS * WILL BE DROPPED. * * ENTRY (B3) = FIRST POT OF CHAIN IF ONE PROVIDED. * (B6) = CM WORD COUNT. * * EXIT (X6) = 0, IF CHAIN NOT RESERVED. * POT COUNT, IF CHAIN RESERVED. * (B3) = FIRST POT OF CHAIN. * (B4) = ADDRESS OF FIRST POT. * * USES X - 1, 5, 6. * A - 1, 6. * B - 3, 4, 6. * * CALLS GPL, RPT. GPC SUBR ENTRY/EXIT SX5 B3 SX6 B6+7 AX6 3 ZR X6,GPCX IF CM WORD COUNT IS ZERO SB6 X6 PX6 X5,B6 SAVE FIRST POT, POT COUNT SA6 GPCA ZR B3,GPC3 IF NO POTS PROVIDED * COMPUTE HOW MANY ADDITIONAL POTS MUST BE RESERVED. GPC1 SB6 B6-1 ZR B6,GPC2 IF ENOUGH POTS PRESENT RJ GPL GET POT LINK ZR B3,GPC3 IF END OF SUPPLIED POT CHAIN REACHED SX5 B3+ EQ GPC1 LOOP TO END OF CHAIN * DROP ANY EXTRA POTS. GPC2 SX7 B3 SB7 B0 RJ RPL DROP TRAILING POTS EQ GPC4 SET UP EXIT CONDITIONS * RESERVE ADDITIONAL POTS. GPC3 PX5 X5,B6 RJ RPT REQUEST NEEDED POTS SX6 X7+ ZR X6,GPC6 IF NO POTS WERE RESERVED GPC4 SA1 GPCA UX1,B6 X1 SB3 X1 NZ B3,GPC5 IF A CHAIN WAS SUPPLIED SB3 X7+ GPC5 SX5 B3 SX6 B6+ RESTORE POT COUNT LX5 3 TB4 X5,VBMP EQ GPCX EXIT GPC6 SA1 GPCA RESTORE ENTRY POT POINTER SB3 X1+ EQ GPCX EXIT GPCA CON 0 FIRST POT, POT COUNT GPL SPACE 4,20 ** GPL - GET POT LINK. * * THIS ROUTINE IS ONLY USED FOR LOW USAGE ROUTINES WHICH * REQUIRE POT LINKS. * * ENTRY (B3) = CURRENT POT. * * EXIT (B3) = NEW POT POINTER. * = 0 IF AT END OF CHAIN ON ENTRY. * (B4) = FWA OF NEW POT. * * USES A - 3. * B - 3, 4. * X - 3, 4, 6. * * CALLS ABT. GPL SUBR ENTRY/EXIT ZR B3,GPL1 IF TO GET LINK FOR POT ZERO SX4 B3 LX4 58 TA3 X4,VPLP GET PLT ENTRY MX6 48 BX4 X6*X4 LX4 4 BYTE * 4 LX6 X4,B1 BYTE * 8 IX4 X4+X6 BYTE * 12 SB3 X4+12 LX3 X3,B3 GET LINK BYTE MX6 -12 BX3 -X6*X3 SB3 X3 SET NEW POT LX3 3 TB4 X3,VBMP SET FWA OF NEW POT EQ GPLX RETURN GPL1 SX6 3RGPL RJ ABT SB3 B0+ EQ GPLX EXIT GQE SPACE 4,30 ** GQE - GET QUEUE ENTRY FROM QUEUE. * * DELETES QUEUE ENTRY FROM QUEUE AND RETURNS ENTRY * TO CALLING ROUTINE. THE EXECUTIVE WILL BE ABORTED * IF THE QUEUE ENTRY IS DETERMINED TO BE INCORRECT. * * ENTRY (B5) = TERMINAL NUMBER OF QUEUE ENTRY. * (B6) = ADDRESS OF QUEUE POINTER WORD. * (B7) = TERMINAL NUMBER LINKED TO QUEUE ENTRY * IF NOT FIRST TERMINAL OF QUEUE. * * EXIT ENTRY REMOVED FROM QUEUE. * QUEUE POINTER WORD UPDATED. * (B2) = NEXT TERMINAL OF QUEUE (ENTRY TO WHICH * CURRENT ENTRY LINKED). * = 0 IF NO ENTRIES AFTER CURRENT ENTRY. * (B5) = TERMINAL NUMBER LINKED TO QUEUE ENTRY * IF NOT FIRST OR LAST TERMINAL OF QUEUE. * (X5) = QUEUE ENTRY. * = 0 IF NO QUEUE ENTRY FOR TERMINAL. * * TO ABT+1 IF INCORRECT QUEUE ENTRY. * (SSPA) = QUEUE ENTRY. * * USES A - 1, 6, 7. * X - 1, 4, 5, 6, 7. * B - 3, 4, 2. * * CALLS ABT, GRT. GQE3 BX2 X1 LX2 42 BX7 X2-X7 SX7 X7 NZ X7,GQE1 IF NOT FIRST ENTRY IN QUEUE BX2 X6*X2 BX2 X2+X4 LX2 18 PX6 X2,B3 UPDATE ENTRY SA6 B6+ REWRITE QUEUE POINTER GQE SUBR ENTRY/EXIT MX2 -12 SX7 B1 RJ GRT UX1,B3 X4 BX5 X4 SB4 TRRTL SET COMMAND TABLE LIMIT GE B3,B4,GQE2 IF OUTSIDE TRRT TABLE ABORT NG B3,GQE2 IF INCORRECT TRRT ORDINAL BX7 X7-X7 CLEAR TABLE ENTRY SA7 A4 BX4 -X2*X5 GET NEXT ENTRY POINTER SX7 B5 SET CURRENT ENTRY POINTER BX5 X2*X5 SB2 X4 SET NEXT ENTRY POINTER BX5 X5+X7 MERGE TERMINAL NUMBER INTO ENTRY SA1 B6 MX6 42 UX1,B3 X1 SB3 B3-B1 DECREMENT ENTRY COUNT BX2 X1-X7 SX2 X2 NZ X2,GQE3 IF NOT LAST ENTRY IN QUEUE BX1 X6*X1 SX2 B7 BX1 X1+X2 NZ B3,GQE1 IF NOT ONLY ENTRY BX7 X7-X7 PX6 X7,B3 UPDATE POINTERS SA6 B6+ EQ GQEX RETURN GQE1 PX6 X1,B3 UPDATE ENTRY SA6 B6 SB5 B7 UPDATE PREVIOUS ENTRY MX7 48 RJ GRT BX4 X7*X4 SX6 B2 BX6 X4+X6 SA6 A4 EQ GQEX RETURN * PROCESS INCORRECT QUEUE ENTRY. GQE2 SB2 B5 SET CURRENT TERMINAL NUMBER BX7 X5 SAVE INCORRECT QUEUE ENTRY SX6 3RGQE SET ERROR CODE SA7 GQEA EQ ABT+1 UNCONDITIONALLY ABORT GQEA CON 0 SAVE INCORRECT QUEUE ENTRY GRI SPACE 4,10 ** GRI - GATHER RECOVERY INFORMATION. * * ENTRY (A0) = ADDRESS OF TERMINAL TABLE. * (B4) = FWA OF PARAMETER BLOCK. * * EXIT RECOVERY WORDS SET IN PARAMETER BLOCK. * * USES X - 1, 2, 3, 6, 7. * A - 1, 2, 7. GRI SUBR ENTRY/EXIT SA1 A0+VROT SET UP MODES SX2 34B JOB CONTINUATION FLAG BX6 X1*X2 INPUT REQUEST, OUTPUT AVAILABLE SX2 40B AX1 17-5 FILE FOR OUTPUT BX2 X2*X1 BX6 X6+X2 SA1 A0+VDCT SX2 B1 AX1 50-0 BX7 X1*X2 TEXT MODE AX1 51-50 BX3 X1*X2 CURRENT CHARACTER SET AX1 55-51 BX1 X1*X2 BRIEF MODE LX7 7 LX1 1 BX7 X1+X7 BX6 X6+X7 SA1 A0+VSTT MX7 -3 SAVE TERMINAL TABLE SUBSYSTEM LX7 12 BX7 -X7*X1 LX7 18-12 BX6 X6+X7 MX7 1 LX7 55-59 BX7 X7*X1 EFFECT MODE LX7 8-55 BX6 X6+X7 MX7 1 LX7 49-59 BX7 X7*X1 SCREEN MODE LX7 9-49 BX6 X6+X7 AX1 18-0 BX7 X2*X1 INITIAL CHAR SET AX1 53-18 SX2 101B BX1 X2*X1 DISABLE TERMINAL CONTROL, NO PROMPT FLAGS BX6 X6+X1 MODES COMPLETED LX7 15-0 INITIAL CHARACTER SET LX3 12-0 CURRENT CHARACTER SET BX3 X7+X3 BX7 X6+X3 SA1 A0+VCHT READ CHARACTER COUNTS SA2 A0+VFST READ INPUT/OUTPUT OVERFLOW COUNT SA7 B4+3 WRITE RECOVERY WORD 1 MX7 -24 MX6 -12 LX6 24 BX7 -X7*X1 SET CHARACTER COUNT BX2 -X6*X2 SET OVERFLOW COUNT BX7 X7+X2 WRITE RECOVERY WORD 2 SA7 A7+B1 EQ GRIX EXIT GRT SPACE 4 ** GRT - GET ENTRY FROM TABLE. * * ENTRY- * (B5) = TERMINAL NUMBER FOR ENTRY TO GET. * * EXIT- * (X4) = ENTRY. * (A4) = ADDRESS OF ENTRY. * (B5) = UNCHANGED. * * SCRATCH- * X6 GRT SUBR ENTRY/EXIT TA4 B5,VRAP GET ENTRY ZR X4,GRT IF NO ENTRY MX6 12 BX6 X6*X4 NZ X6,GRTX IF ENTRY FOUND SA4 X4 NZ X4,GRTX IF ENTRY FOUND SA4 A4+B1 JP GRTX GTA SPACE 4 ** GTA - GET TERMINAL TABLE ADDRESS. * * ENTRY (B7) = ADDRESS IN PBUF CONTAINING THE *JSN*. * (B7)+1 = ADDRESS IN PBUF CONTAINING THE NUMBER OF * CHARACTERS IN THE *JSN*. * * EXIT (A4) = ADDRESS OF TERMINAL TABLE. * (X4) = 0, IF NO TERMINAL FOUND. * * USES X - 1, 2, 4. * A - 1, 2, 4. * B - 6, 7. GTA2 SA4 B6+ SET TERMINAL TABLE ADDRESS GTA SUBR ENTRY/EXIT SA1 B7+1 SA2 B7+ GET THE *JSN* UX1,B6 X1 CHECK NUMBER OF CHARACTERS IN *JSN* SX4 B0+ MX1 24 BUILD MASK FOR *JSN* SB6 B6-4 NZ B6,GTAX IF NOT A VALID *JSN* TB7 B0,VTTP,LWA LWA+1 OF TERMINAL TABLES TB6 VTTL*VPST-VTTL,VTTP FWA OF FIRST NON-PSEUDO TERMINAL GTA1 SA4 B6+VFST BX4 X4-X2 BX4 X1*X4 ZR X4,GTA2 IF *JSN* FOUND SB6 B6+VTTL LT B6,B7,GTA1 IF MORE TERMINALS TO CHECK SX4 B0+ *JSN* NOT FOUND EQ GTAX RETURN GZP SPACE 4 ** GZP - GET ZEROED POT. * * IF X7 NOT = 0 UPON ENTRY, * GZP RETURNS THE POT NUMBER THAT WAS PASSED TO GZP, NOT * THE POT NUMBER OF THE NEW POT. GZP WILL ALSO ZERO OUT THE * POT THAT WAS PASSED TO GZP. * * ENTRY- * (X7) = POT TO BE LINKED ONTO. * (B7) = NUMBER OF POTS NEEDED. * * EXIT- * (X7) = NEW POT OR POT LINKED ONTO. * (X7) = 0, IF NO POT AVAILABLE. * * CALLS- * RPT, GPL. GZP SUBR ENTRY/EXIT PX5 X7,B7 GET POTS RJ RPT ZR X7,GZPX IF NO POT RETURN BX1 X7 SB3 X7 LX1 3 TB4 X1,VBMP GZP1 BX6 X6-X6 SB5 B4+VCPC GZP2 SA6 B4 CLEAR POT SB4 B4+B1 LT B4,B5,GZP2 IF AT END OF POTS RJ GPL GET NEXT POT LINK NZ B3,GZP1 IF STILL MORE POTS EQ GZPX RETURN IDM SPACE 4,10 ** IDM - ISSUE DAYFILE MESSAGE. * * FORMAT DAYFILE MESSAGE REQUEST AND PLACE IN PPU * REQUEST BUFFER. * * ENTRY (X6) = ADDRESS OF DAYFILE MESSAGE. * * USES A - 2, 3, 6. * X - 2, 3, 6. IDM SUBR ENTRY/EXIT SA2 IDMA GET PPU CALL SA3 PMSG CHECK REQUEST BUFFER IDM1 ZR X3,IDM2 IF VACANT SLOT FOUND SX3 A3+1-PITA PL X3,IDMX IF END OF REQUEST BUFFER SA3 A3+1 CHECK NEXT SLOT EQ IDM1 IDM2 BX6 X2+X6 FORMAT PPU CALL SA6 A3 STORE CALL IN REQUEST BUFFER EQ IDMX RETURN IDMA VFD 18/3L1MA,6/0,12/1,24/0 IIR SPACE 4,10 ** IIR - ISSUE INPUT REQUEST. * * ISSUE TERMINAL INPUT REQUEST MESSAGE, SET READ DATA, * AND MAKE INPUT QUEUE ENTRY. THE ADDRESS TO WHICH * CONTROL RETURNS AFTER OPERATOR INPUT IS PRESET BY * THE CALLER IN (X7) RATHER THAN EXTRACTED FROM THE * SUBROUTINE ENTRY POINT AS IN SUBROUTINE *RQI*. * B3 AND B5, IF NONZERO, SHOULD CONTAIN VALID POT * POINTERS, AS THE POT STRING(S) WILL BE DROPPED IF * THE BREAK IN PROGRESS OR LOGOUT FLAG IS SET. * * ENTRY (VDCT) = INTERLOCK CLEAR. * (B3) = POT POINTER FOR MESSAGE. * (B4) = MESSAGE LENGTH. * (B5) = RETURN POT POINTER. * (X6) = MESSAGE ADDRESS. * (X7) = REENTRY ADDRESS. * * EXIT TO (X7) AFTER INPUT (SEE CLI.) * (B5) = RETAINED. * * CALLS CBL, MVA, SRR. IIR BSS 0 ENTRY RJ CBL CHECK BREAK IN PROGRESS AND LOGOUT FLAGS PX6 X6,B4 SAVE MESSAGE POINTERS SA6 IIRA SX6 B3 SA6 A6+B1 RJ SRR SET READ DATA AND REENTRY SA1 IIRA RESET MESSAGE POINTERS SA2 A1+B1 UX6,B4 X1 SB3 X2+ RJ MVA ISSUE MESSAGE EQ PCSX EXIT IIRA DATA 0 SAVE MESSAGE PARAMETERS DATA 0 INO SPACE 4,10 ** INO - ISSUE NULL OUTPUT. * * FOR A MULTIPLEXER TERMINAL, *INO* SENDS A NULL OUTPUT * LINE TO THE TERMINAL TO INSURE THAT THE DRIVER HAS AN * INPUT POT. FOR A NETWORK TERMINAL, ANY POTS IN *B3* * ARE DROPPED. * * ENTRY (B3) = POT POINTER IF NONZERO. * * CALLS ASM, DPT, GOP. INO SUBR ENTRY/EXIT IFNET INO1 IF NETWORK TERMINAL RJ GOP GET ONE POT SX6 2R"CB" SET TERMINATOR BYTE IN POT SX7 B3 LX6 48-0 SA6 B4+2 RJ ASM ASSIGN MESSAGE EQ INOX RETURN * DROP NETWORK TERMINAL POT(S) AND RETURN. INO1 ZR B3,INOX IF NO POTS, RETURN SB4 B0+ DROP POT(S) RJ DPT EQ INOX RETURN LEP SPACE 4,20 *** LEP - LINK EXISTING POTS. * * MANIPULATE PLT TO LINK TWO PREVIOUSLY RESERVED POTS * OR POT CHAINS. * * ENTRY (B3) = POT POINTER FOR LEADING POT. * (X2) = POT POINTER FOR TRAILING POT. * * EXIT (X7) = 0, LINKAGE NOT MADE. * .NE. 0, LINKAGE MADE. * * USES X - 1, 6, 7. * A - 1, 7. * B - 5, 6, 7. * * CALLS ABT. LEP SUBR ENTRY/EXIT ZR B3,LEP2 IF NO FIRST POT SB5 60 SB6 B1+B1 SX7 B3 LEP1 SX6 3 BX6 X7*X6 LX7 58 SB7 X7 TA1 B7,VPLP GET PLT ENTRY LX7 X6,B6 BYTE NUMBER * 4 LX6 3 BYTE NUMBER * 8 IX6 X6+X7 BYTE NUMBER * 12 SB7 X6+12 SX7 7777B LX6 X1,B7 BX7 X6*X7 NZ X7,LEP1 IF ALREADY LINKED SB7 B5-B7 LX6 X2,B7 POSITION NEW POT LINK BX7 X1+X6 MERGE NEW LINK SA7 A1 EQ LEPX RETURN LEP2 SX6 3RLEP RJ ABT BX7 X7-X7 EQ LEPX EXIT LTT SPACE 4,10 ** LTT - LOCATE TERMINAL TYPE. * * EXIT (X1) = TERMINAL TYPE WORD. * (X2) = BASE ADDRESS OF TERMINAL TYPE TABLE. * (MULTIPLEXOR TERMINALS ONLY) * * USES X - 1, 2, 3. * A - 1, 2. LTT SUBR ENTRY/EXIT IFNET LTT1 IF NETWORK TERMINAL SA1 A0+VDPT EXTRACT TERMINAL TYPE SA2 VDRL LOCATE TERMINAL NAME TABLE MX3 -5 AX2 24 SHIFT DRIVER STACK ADDRESS SA2 X2+4 AX1 12+7 BX3 -X3*X1 IX3 X2+X3 READ TERMINAL TYPE WORD SA1 X3 JP LTTX RETURN * SET NETWORK TERMINAL TYPE. LTT1 SA1 =6LNAMIAF SET TERMINAL TYPE EQ LTTX RETURN MDA SPACE 4 ** MDA - MOVE DATA. * * ENTRY- * (B5) = NUMBER OF WORDS TO MOVE. * IF (B5) = NEGATIVE, THE MOVE IS FROM LOW CORE TO HIGH CORE. * (X2) = FWA TO GET DATA FROM. * (X3) = FWA TO STORE DATA AT. * * USES- * A - 1, 6. * B - 6. * X - 1, 6. MDA SUBR ENTRY/EXIT NG B5,MDA2 IF MOVE UPWARD SB6 B0 SX3 X3-1 MDA1 SA1 X2+B6 SB6 B6+B1 BX6 X1 SA6 X3+B6 LT B6,B5,MDA1 IF MORE DATA TO MOVE EQ MDAX MDA2 SB6 -B5 SX3 X3+B1 MDA3 SA1 X2+B6 SB6 B6-B1 BX6 X1 SA6 X3+B6 PL B6,MDA3 IF MORE DATA TO MOVE EQ MDAX MQE SPACE 4 ** MQE - MAKE QUEUE ENTRY. * * MAKES ENTRY IN REENTRY QUEUE. THE ENTRY IS PLACED * IN THE TERMINAL REENTRY TABLE AND ASSOCIATED QUEUE * POINTER IS UPDATED. IF A STACKED ENTRY IS MADE, THE * QUEUE POINTER IS PLACED IN BYTE 4 OF THE STACKED * ENTRY. * * ENTRY (B2) = TERMINAL NUMBER. * (B7) = QUEUE POINTER. * = ZERO IF FOR NULL QUEUE. * (X5) BITS 59-12 = FORMATTED QUEUE ENTRY. * * EXIT ENTRY PLACED IN QUEUE. * QUEUE POINTER UPDATED. * (X2) = 0, IF CURRENT ENTRY FOR THIS TERMINAL. * = 1, IF STACKED BEHIND CURRENT ENTRY. * (X6) = QUEUE ENTRY. * * ERROR CALLS *ABT* IF INCORRECT ENTRY. * (MQEA) = INCORRECT QUEUE ENTRY. * * CALLS ABT, GZP. MQE8 SX6 3RMQE BX2 X2-X2 BX7 X5 SAVE INCORRECT ENTRY SA7 MQEA RJ ABT MQE SUBR ENTRY/EXIT UX1,B6 X5 SB5 TRRTL SET COMMAND TABLE LIMIT MX4 48 NG B6,MQE8 IF INCORRECT ENTRY GE B6,B5,MQE8 IF INCORRECT ENTRY TA1 B2,VRAP BX5 X4*X5 SB5 X1 NZ X1,MQE4 IF PREVIOUS ENTRY MQE1 ZR B7,MQE2 IF NO QUEUE POINTER TO UPDATE SA2 B7 UPDATE QUEUE POINTER UX3,B6 X2 SB6 B6+B1 INCREMENT ENTRY COUNT SX7 B2 EQ B6,B1,MQE3 IF QUEUE PREVIOUSLY EMPTY MX2 42 BX2 X2*X3 SB5 X3 UPDATE PREVIOUS ENTRY BX2 X2+X7 RJ GRT BX6 X4+X7 SA6 A4 PX6 X2,B6 SA6 B7 MQE2 BX6 X5 MAKE ENTRY SA6 A1 SX2 B0+ INDICATE CURRENT ENTRY EQ MQEX RETURN MQE3 BX2 X7 LX7 18 BX2 X2+X7 PX6 X2,B6 SA6 B7 EQ MQE2 MQE4 MX2 12 BX2 X2*X1 ZR X2,MQE5 IF POT NOT NEEDED SX2 B7 INDICATE QUEUE IN STACKED ENTRY BX6 X5+X2 SA6 MQEA BX7 X7-X7 SB7 B1 SET NUMBER OF POTS NEEDED RJ GZP GET ZEROED POT ZR X7,MQE8 IF NO POT AVAILABLE LX7 3 TX5 X7,VBMP LX7 15 BX7 X5+X7 TA1 B2,VRAP PUT POT POINTER IN REENTRY TABLE SA7 A1 SET POT POINTER BX6 X1 SA6 X5 SAVE CURENT ENTRY SA1 MQEA BX6 X1 SA6 A6+B1 SX2 B1 INDICATE STACKED ENTRY EQ MQEX RETURN MQE5 SB4 B5+B1 SB6 B5+VCPC-1 ALLOW UP TO 7 QUEUE ENTRIES MQE6 SA1 B5 SB5 B5+B1 ZR X1,MQE7 IF EMPTY SLOT FOUND NE B5,B6,MQE6 IF NOT AT END OF POT EQ MQE8 MQE7 EQ B4,B5,MQE1 IF FIRST ENTRY IN POT SX2 B7 INDICATE QUEUE IN STACKED ENTRY BX6 X5+X2 SX2 B1 INDICATE STACKED ENTRY SA6 A1 MAKE ENTRY EQ MQEX EXIT MQEA CON 0 MVA SPACE 4,20 ** MVA - MOVE MESSAGE INTO POTS. * * MOVES A MESSAGE INTO POTS, ADDS A *0001* CONTROL BYTE * IF NECESSARY, AND ASSIGNS THE POTS TO TERMINAL OUTPUT. * * ENTRY (X6) = ADDRESS OF MESSAGE IN DISPLAY CODE FORMAT. * (B3) = FIRST POT OF CHAIN IF ONE PROVIDED. * (B4) = LENGTH OF MESSAGE. * 0, IF MESSAGE IS SIX CM WORDS OR LESS IN LENGTH * AND TERMINATES WITH AN EOL. * * EXIT MESSAGE ASSIGNED TO THE TERMINAL. * * USES X - 1, 5, 6, 7. * A - 1, 6. * B - 4, 5, 6, 7. * * CALLS ASM, CTP, DPT, GPC, GPL. MVA SUBR ENTRY/EXIT ZR B4,MVA2 IF NO WORD COUNT SPECIFIED SB5 2 RJ CTP COPY MESSAGE TO POTS ZR X6,MVA5 IF COPY UNSUCCESSFUL LX6 24 SET POT COUNT SA6 B4 SB5 B6-VCPC ZR B5,MVA1 IF LAST POT EXACTLY FULL SX6 2R"EB" ADD *0001* CONTROL BYTE LX7 3 LX6 48 TX7 X7,VBMP SA6 X7+B6 MVA1 SX7 B3+ SX6 B0+ ZERO OUT SECOND WORD OF POT CHAIN HEADER BX5 X7 LX5 3 TA6 X5+1,VBMP RJ ASM ASSIGN MESSAGE TO TERMINAL EQ MVAX EXIT MVA2 SB6 6 SA6 MVAA RJ GPC GET POT CHAIN OF DEFAULT LENGTH ZR X6,MVA5 IF POTS NOT OBTAINED SX7 B1 SET POT COUNT FOR MESSAGE LX7 24 SA7 B4 SA1 MVAA SB5 B4+VCPC SA1 X1-1 SB4 B4+2 MX5 -12 MVA3 SA1 A1+1 GET NEXT WORD OF MESSAGE SB4 B4+B1 BX6 X1 SA6 B4-B1 ADD WORD TO POT BX6 -X5*X6 ZR X6,MVA4 IF END OF MESSAGE REACHED GT B5,B4,MVA3 IF MORE ROOM IN POT MVA4 EQ B4,B5,MVA1 IF NO NEED FOR A *0001* BYTE SX6 2R"EB" LX6 48 SA6 B4+ EQ MVA1 ASSIGN MESSAGE TO TERMINAL * IF A MESSAGE CANNOT BE ASSIGNED TO THE TERMINAL, ANY * POTS SUPPLIED BY THE CALLER ARE DROPPED TO AVOID POT * CANCER. MVA5 ZR B3,MVAX IF NO POTS WERE PROVIDED SB4 B0+ RJ DPT DROP POTS EQ MVAX EXIT MVAA CON 0 MESSAGE ADDRESS O6S SPACE 4 ** O6S - CONVERT 6 DIGITS TO OCTAL DISPLAY CODE WITH TRAILING * ZERO FILL. * * ENTRY- * (X1) = NUMBER TO BE CONVERTED. * * EXIT- * (X6) = CONVERTED NUMBER. * * USES- * A - 2. * B - 7. * X - 2, 3, 7. O6S1 SB7 B7-B1 AX3 6 AX1 3 AX7 6 BX2 -X3*X1 NZ X2,O6S2 IF NOT ZERO BX6 X6+X7 O6S2 BX6 X2+X6 ZR X2,O6S3 IF ZERO SX7 B0 STOP ZERO SUPPRESS O6S3 NZ B7,O6S1 IF STILL MORE DIGITS TO CONVERT SA2 =6L000000 ZR X7,O6S4 BX6 X6-X7 O6S4 LX6 24 IX6 X2+X6 O6S SUBR ENTRY/EXIT SX6 B0 LX1 18 MX3 -3 LX3 36 SB7 6 SX7 1R -1R0 LX7 36 EQ O6S1 PCB SPACE 4 ** PCB - PACKS A COMMAND BUFFER ONE PARAMETER AT A TIME. * * ENTRY (X1) = FWA OF PARAMETER BUFFER. * SEE EXIT CONDITIONS FOR *SSP*. * * EXIT SEE EXIT CONDITIONS FOR *SSP* (EXCEPT X7). * (B4) = FWA POT STORED IN. * (B6) = SHIFT COUNT FOR LAST CHARACTER INSERTED. * (B7) = LAST WORD OF POT STORED IN. * * USES X - 1, 2, 3, 4, 5, 7. * A - 1, 2, 7. * B - 2, 5, 6, 7. * * NOTE TABLE PROCESSED BY THIS ROUTINE SHOULD HAVE TWO * ZERO WORDS TERMINATING IT OR THE COMMAND PACKED * BY THIS ROUTINE SHOULD FILL A POT. THESE CONDITIONS * TERMINATE TABLE PROCESSING. * PCB SUBR ENTRY/EXIT SB7 B4 SET POT ADDRESS SB5 B4+VCPC-1 SET ENDING POT ADDRESS MX5 -6 SX4 B2 SAVE TERMINAL NUMBER SA1 X1 READ FIRST PARAMETER SA2 A1+B1 READ FIRST SEPARATOR UX2,B2 X2 SET CHARACTER COUNT PCB1 BX7 X7-X7 CLEAR ASSEMBLY WORD SB6 54 PCB2 SB2 B2-B1 NG B2,PCB4 IF END OF PARAMETER LX1 6 GET CHARACTER BX3 -X5*X1 PCB3 LX3 X3,B6 ENTER CHARACTER SB6 B6-6 BX7 X3+X7 PL B6,PCB2 IF ASSEMBLY WORD NOT FULL SA7 B7 STORE ASSEMBLY WORD SB7 B7+B1 LE B7,B5,PCB1 IF POT NOT FULL EQ PCB6 RETURN PCB4 SX3 X2 INSERT SEPARATOR SA1 A2+B1 GET NEXT PARAMETER SA2 A1+B1 GET NEXT SEPARATOR UX2,B2 X2 SX2 X2 NZ X2,PCB3 IF NOT END OF BUFFER PL B2,PCB3 IF NOT END OF BUFFER LX3 X3,B6 STORE LAST SEPARATOR BX7 X3+X7 SA7 B7 STORE LAST ASSEMBLY WORD EQ B5,B7,PCB6 IF POT FULL BX7 X7-X7 PCB5 SA7 B5 CLEAR REST OF POT SB5 B5-B1 NE B5,B7,PCB5 IF NOT END OF POT PCB6 SB2 X4 RESTORE TERMINAL NUMBER EQ PCBX RETURN PKW SPACE 4,10 ** PKW - PACK WORD. * * ENTRY (X2) = WORD TO BE PACKED. * (X6) = WORD TO BE PACKED INTO. * (B5) = BITS LEFT IN X6. * (A6) = LWA OF MESSAGE ALREADY FORMATTED. * * EXIT ALL ABOVE REGISTERS UPDATED. * * USES X - 2, 3, 6, 7. * A - 6. * B - 5, 6. PKW SUBR PKW1 NZ B5,PKW2 IF ROOM IN WORD SA6 A6+B1 BX6 X6-X6 SB5 60 PKW2 MX3 -6 LX2 6 BX7 -X3*X2 NEXT CHARACTER BX2 X2*X3 CLEAR CHARACTER ZR X7,PKWX IF NO CHARACTER LX6 6 BX6 X6+X7 SB5 B5-6 EQ PKW1 START NEW WORD RCM SPACE 4,10 ** RCM - RESET CHARACTER MODE. * * USES X - 1, 2, 7. * A - 1, 7. RCM SUBR ENTRY/EXIT SA1 A0+VSTT MX2 -1 LX2 18 BX7 -X2*X1 INITIAL CHARACTER SET SA1 A0+VDCT LX2 51-18 BX2 X2*X1 CLEAR CURRENT CHARACTER SET LX7 51-18 BX7 X2+X7 MERGE INITIAL CHARACTER SET SA7 A1 REWRITE VDCT EQ RCMX EXIT PLO SPACE 4,10 ** PLO - PROCESS LIST OPTIONS. * * ENTRY (LISA) = ADDRESS OF FIRST PARAMETER. * (PBUF) = FIRST PARAMETER. * (CCMA) = PARAMETER COUNT. * * EXIT TO *IPL* IF INCORRECT PARAMETER. * TO *IED* IF *IEDIT* CALL REQUIRED. * * CALLS DXB, GFN, SSP, TPF. PLO SUBR ENTRY/EXIT SA1 PBUF SA3 CCMA SX6 X3 SA6 PLOB STORE PARAMETER COUNT PLO1 SA1 A1+2 GET NEXT PARAMETER SX3 X3-1 ZR X3,PLO2 IF NO MORE PARAMETERS NZ X1,PLO1 IF NOT POSSIBLE STRING SA2 A1+B1 CHECK IF DELIMITER SB6 X2 SA2 PLOA LX2 B6 NG X2,IED IF IMPLIED STRING EQ PLO1 CONTINUE SEARCH PLO2 SA1 LISA GET POINTER SX7 X1+2 SA2 PLOB SA7 A1 SX6 X2-1 ZR X6,PLOX IF ALL PARAMETERS PROCESSED SA6 A2 SA1 X7 SA2 A1-B1 SA4 PLOC GET INCORRECT SEPARATOR MASK SB6 X2 LX4 B6 NG X4,IED IF AN INCORRECT SEPARATOR ZR X1,IED IF A NULL PARAMETER SX4 1RF SX3 1RR BX2 X1 LX2 6 BX4 X2-X4 BX3 X2-X3 ZR X4,PLO7 IF FILE NAME OPTION ZR X3,PLO8 IF *R* OPTION * LINE NUMBER PROCESSOR. SA4 LISC NZ X4,IED IF MORE THAN ONE LINE SPECIFICATION PLO3 BX6 X1 SB7 B1 BX4 X6 LX4 6 SA6 A4 SX6 1R* BX4 X4-X6 ZR X4,PLO4 IF BOI OR EOI BX5 X1 RJ DXB TRANSLATE LINE NUMBER RJ SSP RESET PARAMETER REGISTERS NZ X4,IED IF INCORRECT NUMBER EQ PLO5 CONTINUE SCAN PLO4 SX6 B1+ SA6 LISD SET LINE RANGE FLAG PLO5 SA1 A1+B1 SA2 A1+B1 GET NEXT PARAMETER NZ X2,PLO2 IF NOT NULL PARAMETER SB6 X1 SA2 A2+B1 EXAMINE SEPARATOR SB6 -B6 SB6 B6+X2 NZ B6,PLO2 IF NOT ALIKE, NOT ELIPSIS SX6 X1-1R. NZ X6,IED IF NOT AN ELLIPSIS SA1 LISA SKIP LINE RANGE SX6 X1+4 SA6 A1 SA1 PLOB SX6 X1-2 SA6 A1 SA1 A2+B1 GET SECOND LINE NUMBER SA4 LISE LAST LINE NUMBER NZ X4,IED IF ALREADY SPECIFIED SX6 B1 SA6 A4-B1 EQ PLO3 CHECK VALIDITY * FILE NAME OPTION. PLO7 SA1 LISA SET PARAMETER ADDRESS SX7 X1+2 SA7 A1 SA1 X1+B1 SX1 X1-1R= SA3 PLOB NZ X1,IED IF NOT *=* SX6 X3-1 DECREMENT PARAMETER COUNT SA6 A3 SB6 X7 RJ GFN GET FILE NAME SA1 LISB NZ X1,IED IF MORE THAN ONE FILE PARAMETER BX6 X2 SA6 A1 EQ PLO2 CONTINUE PROCESSING * *R* OPTION, NOW REPLACED WITH EXTERNAL COPY. PLO8 SMA X6,( USE SCOPY FOR FILE STRUCTURE."NL") RJ SSP EQ PCS5 ISSUE MESSAGE PLOA CON 74000000000033727777B STRING DELIMITER MASK PLOB CON 0 PARAMETER COUNT PLOC CON 50000000000000000000B INCORRECT SEPARATOR MASK PMR SPACE 4,15 ** PMR - PROCESS MONITOR REQUEST. * * ENTRY (B3) = POT POINTER TO PARAMETER BLOCK. * (B4) = ADDRESS OF PARAMETER BLOCK. * * EXIT TO CALLER, EITHER DIRECTLY OR VIA PCS. * (X2) = CONTENTS OF ERROR CODE FIELD. * * USES X - 1, 2, 5, 6, 7. * A - 1, 2, 6, 7. * B - 7. * * CALLS ABT. * * MACROS SYSTEM. PMR SUBR ENTRY/EXIT PMR1 SYSTEM EJT,,B4 SA1 B4 LX1 59-0 SX5 PMR2$ SA2 PMRX GET REENTRY ADDRESS LX2 30 SX7 X2 PL X1,PCS1 IF NOT COMPLETE * REENTER HERE WHEN REQUEST IS COMPLETE. PMR2 SB7 X7 SA1 B4 LX1 -10 MX2 -8 BX2 -X2*X1 ZR X2,PMR3 IF NO ERRORS SX6 X2-RTER NZ X6,PMR2.1 IF NOT IMMEDIATE RETRY SX6 1-RTER EQ PMR2.2 RETRY REQUEST AFTER REENTRY PMR2.1 SX6 X2-REER NZ X6,PMR2.3 IF NOT RECOVERABLE DISK ERROR SX6 RTYDL-RTER RETRY REQUEST AFTER DELAY PMR2.2 SX5 PMR4$ SET REENTRY ADDRESS IX6 X6+X1 SET DELAY COUNTER LX6 10 SA6 A1 EQ PCS1 REENTER AND DELAY PMR2.3 SX6 X2-ISER ZR X6,PMR3 IF INCORRECT SERVICE CLASS SX6 X2-SFER ZR X6,PMR3 IF SERVICE CLASS FULL SX6 X2-JFER-1 PL X6,PMR3 IF NO ABT CALL SA7 PMRA SAVE REENTRY ADDRESS SX7 X2 SA7 A7+B1 RJ UEC PROCESS ERROR CODE SA1 PMRA SB7 X1 SA2 A1+B1 PMR3 JP B7 RETURN TO CALLER PMR4 SX5 PMR4$ DECREMENT DELAY COUNTER SX6 1S10 SA1 B4 IX6 X1-X6 SA6 A1 SX1 X6 AX1 10 NZ X1,PCS1 IF NOT TIME TO REISSUE REQUEST LX7 30 RESET ENTRY SA7 PMRX SA1 B4 CLEAR COMPLETE BIT MX2 -1 BX6 X2*X1 SA6 A1 EQ PMR1 REENTER REQUEST PMRA CON 0 SAVE REENTRY ADDRESS CON 0 SAVE ERROR CODE PPB SPACE 4,15 ** PPB - PRESET PARAMETER BLOCK. * * ENTRY (A0) = TERMINAL TABLE ADDRESS. * (B4) = FWA OF PARAMETER BLOCK. * (X7) = FUNCTION CODE. * * EXIT WORDS 1 - 5 CLEARED. * (X6) = 0. * (A7) = (B4). * FOR RCEJ - (X7) = (WD 0) = FUNCTION CODE*2. * FOR ALL OTHERS - (X7) = (WD 0) = JSN, FUNCTION CODE. * - (X2) = EJT ORDINAL. * * USES X - 1, 2, 6, 7. * A - 1, 6, 7. PPB1 SA7 B4 SET WORD 0 BX6 X6-X6 CLEAR WORDS 1 - 5 SA6 A7+1 MX1 EJPB-2 ERRNG VCPC-EJPB EJT RA+1 PARAMETER BLOCK LARGER THAN POT PPB2 LX1 1 SA6 A6+B1 NG X1,PPB2 IF MORE WORDS TO CLEAR PPB SUBR ENTRY/EXIT LX7 1 MX6 24 SX2 X7-RCEJ*2 ZR X2,PPB1 IF RCEJ REQUEST SA1 A0+VFST BX2 X6*X1 JSN BX7 X2+X7 SA1 A0+VUIT MX2 -12 BX2 -X2*X1 EJT ORDINAL EQ PPB1 CONTINUE RPL SPACE 4,15 ** RPL - RESET POT LINK. * * DROPS POTS THAT FOLLOW A SPECIFIED POT ON POT CHAIN * UP TO AND INCLUDING A SECOND SPECIFIED POT. * * ENTRY (X7) = POT AFTER WHICH TO DROP POTS. * (B7) = LAST POT TO DROP. * * USES X - 1, 2, 3, 5, 6, 7. * A - 1, 6. * B - 3, 4. * * CALLS ABT, DPT. RPL1 SX6 3RRPL RJ ABT RPL SUBR ENTRY/EXIT ZR X7,RPL1 IF ATTEMPTING TO DROP POTS AFTER ZERO LX7 58 TA1 X7,VPLP READ PLT ENTRY MX5 48 BX2 X5*X7 GET BYTE * 12 LX2 4 BYTE * 4 LX3 X2,B1 BYTE * 8 IX2 X2+X3 BYTE * 12 SB4 X2+12 LX1 X1,B4 POSITION LINK BYTE BX2 -X5*X1 ZR X2,RPLX IF END OF CHAIN RETURN BX6 X5*X1 CLEAR LINK BYTE SB3 X2 SB4 B4-60 REPOSITION PLT WORD AX6 X6,B4 RESTORE PLT ENTRY WORD SA6 A1 SB4 B7 RJ DPT EQ RPLX RETURN RPT SPACE 4,25 ** RPT - RESERVE POT(S). * A POT OR POTS WILL BE RESERVED. IF THERE ARE NOT ENOUGH * AVAILABLE *IAFEX* WILL BE ABORTED. * * ENTRY- * (X5) BYTE 4 = CURRENT POT. IF CURRENT POT = 0, A NEW CHAIN * WILL BE STARTED. * (X5) BYTE 0 = 200N, WHERE N = NUMBER OF POTS REQUESTED. * * EXIT- * (X7) = FIRST POT RESERVED OR IF A NEW CHAIN WAS NOT * STARTED THE POT NUMBER THAT THE NEW POT WAS LINKED * ONTO(THE POT NUMBER THAT WAS IN X5 UPON ENTRY * TO RPT). * (X7) = 0, IF THE REQUEST CANNOT BE SATISFIED. * (X1) = LAST POT RESERVED. * * USES A - 1, 2, 6 ,7. * B - 3, 4, 5, 6, 7. * X - 1, 2, 3, 4, 5, 6, 7. * * CALLS ABT. RPT SUBR ENTRY/EXIT BX7 X5 SAVE REQUEST SA7 RPTA SA1 VPAL GET TOTAL NUMBER OF POTS AVAILABLE SA2 VPUL GET NUMBER OF POTS IN USE UX3,B7 X5 FIND NUMBER OF POTS REQUESTED BX7 X3 SET RETURN POT POINTER ZR B7,RPT3 IF BAD POT COUNT NG B7,RPT3 IF BAD POT COUNT SX6 X2+B7 IX1 X1-X6 NG X1,RPT3 IF NOT ENOUGH POTS AVAILABLE SB3 3 LX4 X1,B3 SX4 X4-VFLI SET LAST SEGMENT USED FLAG PL X4,RPT0 IF MORE THAN ONE INCREMENT SEGMENT FREE SA6 SPRG RPT0 SA6 A2 UPDATE POTS IN USE COUNT MX5 48 TB6 0,VPLP SET FWA OF PLT MX4 -4 (X4) = -17B SA1 B6 READ FIRST ENTRY SB5 -48 RPT1 BX6 -X4*X1 GET RESERVATION BITS IX6 X4+X6 SA1 A1+1 READ NEXT ENTRY ZR X6,RPT1 IF NO FREE POTS NX6 X6,B3 GET BYTE NUMBER + 44 SA1 A1-B1 SX6 B1 SET RESERVATION BIT LX6 47 SB4 A1-B6 SET RELATIVE WORD ADDRESS AX6 X6,B3 POSITION RESERVATION BIT SX2 -44/4+B4 BUILD PARTIAL POT POINTER BX6 X1+X6 RESERVE POT SA6 A1 LX2 2 SX1 X2+B3 ADD BYTE NUMBER TO COMPLETE POT POINTER SB7 B7-1 DECREMENT POTS NEEDED ZR X3,RPT2 IF START OF NEW CHAIN LX3 58 UPDATE PREVIOUS WORD SA2 B6+X3 BX3 X5*X3 GET BYTE * 12 LX3 4 BYTE * 4 LX6 X3,B1 BYTE * 8 IX6 X3+X6 BYTE * 12 SB3 X6+B5 SET BYTE * 12 - 48 AX6 X1,B3 POSITION LINK POINTER BX6 X2+X6 MERGE LINK POINTER SA6 A2 ZR B7,RPTX IF REQUEST FILLED BX3 X1 SET POT TO ADD LINK BYTE TO SA1 A1 EQ RPT1 RPT2 BX7 X1 SET RETURN POINTER ZR B7,RPTX IF REQUEST FILLED BX3 X1 SA1 A1 EQ RPT1 RPT3 SX6 3RRPT RJ ABT BX7 X7-X7 EQ RPTX RPTA CON 0 CURRENT POT REQUEST RQI SPACE 4,10 ** RQI - REQUEST INPUT. * * ISSUE TERMINAL INPUT REQUEST MESSAGE, SET READ DATA, * AND MAKE INPUT QUEUE ENTRY. THE ADDRESS TO WHICH * CONTROL RETURNS AFTER OPERATOR INPUT IS EXTRACTED * FROM THE SUBROUTINE ENTRY POINT RATHER THAN PRESET * BY THE CALLER IN (X7) AS IN SUBROUTINE *IIR*. * * ENTRY (VDCT) = INTERLOCK CLEAR. * (B3) = POT POINTER FOR MESSAGE. * (B4) = MESSAGE LENGTH. * (B5) = RETURN POT POINTER. * (X6) = MESSAGE ADDRESS. * * EXIT TO CALL AFTER INPUT (SEE CLI.) * (B5) = RETAINED. * * CALLS IIR. RQI SUBR ENTRY (EXIT THROUGH *IIR*) SA1 RQI SET REENTRY ADDRESS AX1 30 SX7 X1 JP IIR REQUEST INPUT RST SPACE 4,10 ** RST - RESTART SUSPENDED JOB. * * ENTRY SEE SSP. * (B3) = INPUT POT POINTER. * (PBUF) = OPERATOR INPUT. * *CR* = CONTINUE. * *P* = CONTINUE BUT DROP OUTPUT. * OTHER = END JOB. RST BSS 0 ENTRY SA1 PBUF ZR X1,RST1 IF *CR* - CONTINUE JOB LX1 -54 SX6 B1 SX1 X1-1RP NZ X1,STO IF NOT *P* NOR *CR* THEN TERMINATE JOB SA2 A0+VROT LX6 4-0 BX6 -X6*X2 CLEAR OUTPUT AVAILABLE FLAG SA6 A2+ * RESTART JOB. RST1 RJ INO ISSUE NULL OUTPUT SA1 A0+VROT SX6 137B BX6 X1*X6 SX6 X6-1 ZR X6,RDY IF NO ACTIVITY EQ RES RESTART JOB SFC SPACE 4,10 ** SFC - SEND SFCALL. * * PARAMETER BLOCK FORMAT = *T 6/ REPLY,12/ FCN PARAM,18/ UCP ADDR,18/ SCP ADDR,6/FCN CD *T 24/ UCP JSN,24/0,12/ UCP EJTO * * ENTRY (X6) = FORMATTED FIRST WORD OF MESSAGE. * (X7) = UCP IDENTIFICATION (JSN AND EJTO). * * EXIT (X1) = RETURN CODE. * (X7) = UNCHANGED. * * USES X - 1, 4, 6, 7. * A - 1, 4, 6, 7. * B - 2. * * MACROS SFCALL. SFC SUBR ENTRY/EXIT SA6 SFCA SA7 A6+B1 SFCALL SFCA,R SA1 SFCA CHECK RETURN CODE SA4 A1+B1 RESET UCP ID BX7 X4 MX6 6 BX1 X6*X1 EQ SFCX EXIT SFCA BSS 2 BUFFER FOR SENDING SFCALL SLF SPACE 4,20 ** SLF - SET LOGOUT FLAG. * * SETS LOGOUT FLAG IN TERMINAL TABLE. * * EXIT (VSTT) = LOGOUT FLAG BIT 48 SET. * * USES A - 1, 6. * X - 1, 6. SLF SUBR ENTRY/EXIT SA1 A0+VSTT READ VSTT ENTRY SX6 B1 SET LOGOUT FLAG LX6 48-0 BX6 X6+X1 SA6 A1 REWRITE VSTT ENTRY EQ SLFX RETURN SRC SPACE 4 ** SRC - SET RUN COMPLETE MESSAGE FLAG. * * USES- * A - 1, 6. * B - NONE. * X - 1, 6. SRC SUBR ENTRY/EXIT SA1 A0+VSTT SX6 B1 LX6 51 BX6 X1+X6 SA6 A1 EQ SRCX RETURN SRR SPACE 4 ** SRR - SET READ DATA AND REENTRY. * * SET UP INPUT REENTRY REQUEST AND SET *READ DATA* * BIT. A POT POINTER MAY BE PASSED IN B5 AND RETURNED * IN B5 BY *CLI* AFTER INPUT. * * ENTRY (VDCT) = INTERLOCK CLEAR. * (B5) = RETURN POT POINTER * (X7) = REENTRY ADDRESS. * * EXIT (VDCT) = *READ DATA* BIT SET. * INP$ QUEUE ENTRY MADE. * * USES A - 1, 7. * X - 1, 5, 6, 7. * B - 7. * * CALLS MQE. SRR SUBR ENTRY/EXIT SX5 INP$ SET UP QUEUE ENTRY LX7 24 SX1 B5 SET RETURN POT POINTER MX6 -12 LX5 48 BX1 -X6*X1 IX7 X5+X7 MERGE QUEUE POINTER AND REENTRY LX1 12 BX5 X7+X1 MERGE RETURN POT POINTER SB7 B0+ INDICATE NULL QUEUE RJ MQE MAKE QUEUE ENTRY SA1 A0+VDCT SET *READ DATA* SX6 B1 LX6 54-0 BX7 X6+X1 SA7 A1 EQ SRRX RETURN SSI SPACE 4,10 * SSI - SEND SRU AND CHARACTER COUNT INFORMATION. * * ENTRY (B4) = FWA OF *EJT* CALL PARAMETER BLOCK. * (X6) = TIMEOUT MESSAGE FLAG. * * EXIT TERMINAL TIMEOUT, SRU AND CHARACTER COUNT MESSAGES * ASSIGNED. * * CALLS CFD, MVA, SFN, SSP. * * MACROS CLOCK. SSI SUBR ENTRY/EXIT SA6 SSIH SAVE TIMEOUT FLAG SA1 A0+VUIT GET USER NAME MX2 42 BX1 X2*X1 SA3 =3LUN= LX1 42 BX1 X1+X3 RJ SFN SPACE FILL USER NAME SA6 SSIC SA1 A0+VFST SA2 =6L JSN= MX3 24 BX1 X1*X3 LX1 24 BX6 X1+X2 LX6 12 SA6 SSIE SA5 B4+4 READ TERMINAL CHARACTER COUNTS SA1 B4+B1 SET ACCUMULATED SRU-S AX1 12 SA3 FSMC SRU CONSTANT (.0001) PX1 X1 FX1 X3*X1 DIVIDE ACCUMULATOR VALUE BY 1000 RJ CFD CONVERT TO F10.3 FORMAT SA6 SSIF MX0 -12 COMPUTE TOTAL CHARACTER COUNT MX1 -24 BX0 -X0*X5 LX5 -12 BX1 -X1*X5 IX1 X1+X0 RJ CFD CONVERT TO F10.3 FORMAT SX7 1R=&1R LX7 54 BX6 X6-X7 SA6 SSIG SET CHARACTER COUNT CLOCK SSID RJ SSP RESET REGISTERS SB4 SICL SET MESSAGE LENGTH SX6 SSIC SET MESSAGE ADDRESS SA1 SSIH ZR X1,SSI1 IF NO TIMEOUT MESSAGE SB4 SIAL RESET MESSAGE LENGTH AND ADDRESS SX6 SSIA SSI1 RJ MVA MOVE MESSAGE EQ SSIX EXIT SSIA DATA 30L"EM""NL"TERMINAL TIME OUT - JSN = SSIB DATA 5LJSNA. SSIC DATA 10HUN=USERNAM DATA 10H LOG OFF SSID DATA 10H HH.MM.SS. DATA 1L EOL SSIE DATA 10HJSN=JSNA DATA 10H SRU-S= SSIF DATA 10H 12345.678 DATA 1L EOL DATA 10HCHARACTERS SSIG DATA 10H=12345.678 DATA 4LKCHS EOL SICL EQU *-SSIC SIAL EQU *-SSIA SSIH CON 0 TIMEOUT MESSAGE FLAG SSP SPACE 4,10 ** SSP - RESET PARAMETERS FROM STACK ENTRY. * * ENTRY (SSPA) = STACK ENTRY PARAMETER WORD. * * EXIT (A0) = FWA OF USER TERMINAL TABLE. * (X5) = STACK ENTRY (SSPA). * (X7) = STACK ENTRY BITS 47-24, RIGHT JUSTIFIED. * (B2) = STACK ENTRY BITS 11-0 (TERMINAL NUMBER). * (B3) = STACK ENTRY BITS 23-12 (POT POINTER). * (B4) = ((B3) * 10B) + VBMP (POT ADDRESS). * * USES A - 5. * X - 1, 2. SSP1 MX1 -12 BX2 -X1*X5 SB2 X2 (B2) TTADD X2,A0,X2,X7 (A0) BX7 X5 AX7 12 BX2 -X1*X7 MX1 -24 SB3 X2 (B3) LX2 3 TB4 X2,VBMP (B4) AX7 12 BX7 -X1*X7 (X7) SSP SUBR ENTRY/EXIT SA5 SSPA (X5) EQ SSP1 SSS SPACE 4,20 ** SSS - SET SSP PARAMETERS. * * INITIALIZE LOCATION *SSPA* FOR *SSP* CALLS. * * ENTRY (B2) = TERMINAL NUMBER. * (B3) = POT POINTER. * (X7) = 24/ANYTHING. * * EXIT (SSPA) = SET. * (A0) = (B2) TERMINAL TABLE ADDRESS. * (B4) = (B3) POT ADDRESS. * (X5) = (SSPA). * * USES A - 6. * X - 1, 2, 5, 6. SSS SUBR ENTRY/EXIT TTADD B2,A0,X5,X2 SET (A0) = TERMINAL TABLE ADDRESS MX2 -24 BX5 -X2*X7 MASK (X7) MX2 -12 LX5 24 SX1 B3 SET (B3) BX1 -X2*X1 LX1 12 BX5 X5+X1 SX1 B2 SET TERMINAL NUMBER BX1 -X2*X1 IX5 X5+X1 BX6 X5 STORE *SSPA* SA6 SSPA ZR B3,SSSX IF NO (B3) POT POINTER SX1 B3 SET POT ADDRESS LX1 3 TB4 X1,VBMP EQ SSSX RETURN TPF SPACE 4 ** TPF - TEST PRIMARY FILE NAME. * * ENTRY- * (X1) = NAME TO BE COMPARED AGAINST. * * EXIT- * (X1) = NAME COMPARED AGAINST. * (X2) = ((A0+VFNT)) * (X6) = 0, IF NAME SAME AS PRIMARY FILE NAME. * * USES- * X3, X4. TPF SUBR ENTRY/EXIT SA2 A0+VFNT MX3 42 BX4 X3*X2 BX6 X1-X4 EQ TPFX UCP SPACE 4,10 ** UCP - UPDATE CONVERTED POINTER WORD. * * CONVERT SPECIFIED VALUE TO DECIMAL DISPLAY CODE. * CODE ADAPTED FROM *COMCCDD*. * * ENTRY (A1) = *VANL* OR *VTNL*. * (X6) = VALUE. * * EXIT WORD *VCAL* OR *VCTL* UPDATED. * * USES X - 1, 2, 3, 4, 5, 6, 7. * A - 2, 3, 5, 6. * B - 4, 5, 6. UCP SUBR ENTRY/EXIT SA2 UCPA SA3 A2+1 SA5 A3+1 (X5) = BACKGROUND SB4 1R0-1R (B4) = CONVERSION SB5 6 PX1 X6 SB6 -B5 UCP1 DX6 X2*X1 EXTRACT REMAINDER FX1 X2*X1 SX4 X1 LX5 -6 SB6 B6+B5 ADVANCE SHIFT COUNT FX6 X3*X6 EXTRACT DIGIT SX7 X6+B4 CONVERT DIGIT IX5 X5+X7 ADVANCE ASSEMBLY NZ X4,UCP1 IF REMAINDER .NE. ZERO LX6 X5,B6 LEFT JUSTIFY ASSEMBLY SA6 A1+VCTL-VTNL ERRNZ VCAL-VCTL-1 CODE REQUIRES CONTIGUOUS WORDS ERRNZ VANL-VTNL-1 CODE REQUIRES CONTIGUOUS WORDS EQ UCPX RETURN UCPA CON 0.1P48+1 CON 10.0P CON 10L UEC SPACE 4,10 ** UEC - UNEXPECTED ERROR CODE PROCESSOR. * * ENTRY (X2) = ERROR CODE. * * EXIT TO ABT. * * USES X - 6. * A - 6. * * CALLS ABT. UEC SUBR ENTRY/EXIT SX6 B3 SAVE PARAMETER BLOCK POT POINTER LX6 12 BX6 X2+X6 SA6 UECA STORE ERROR CODE SX6 3RUEC RJ ABT ABORT PROCESSOR EQ UECX EXIT UECA CON 0 UNEXPECTED ERROR CODE UQS SPACE 4 ** UQS - UPDATE QUEUE STACK. * * PACKS UP THE TERMINALS REENTRY STACK. THE NEXT * QUEUE ENTRY WILL BE PLACED IN THE QUEUE INDICATED * IN BYTE 4 OF THE STACKED ENTRY. * * ENTRY (B2) = TERMINAL NUMBER. * * EXIT TERMINAL REENTRY QUEUE UPDATED. * STACKED QUEUE POTS DROPPED IF QUEUE EMPTIED. * * CALLS DPT, MQE. UQS SUBR ENTRY/EXIT TA1 B2,VRAP ZR X1,UQSX IF NO ENTRY TO UPDATE MX2 12 BX2 X2*X1 NZ X2,UQSX IF NO STACKED ENTRIES SA3 X1 GET FIRST ENTRY IN QUEUE NZ X3,UQSX IF ENTRY PLACED BACK IN QUEUE SX7 B2 SET A0 TTADD X7,A0,X7,X5 SX7 B0 CLEAR NEXT ENTRY POINTER SB5 X1+1 SET NEXT ENTRY ADDRESS SA7 UQSA SB7 X1+VCPC SET POT LIMIT * LOCATE NEXT ENTRY. UQS1 SA5 B5 GET NEXT ENTRY SB5 B5+B1 NZ X5,UQS2 IF ENTRY FOUND LT B5,B7,UQS1 IF END OF POT NOT REACHED UQS2 BX6 X5 SAVE NEXT ENTRY TO BE PROCESSED SA6 A7 SA7 A5+ CLEAR ENTRY POSITION EQ B5,B7,UQS5 IF STACK EMPTY SB6 X1+1 SET INSERT POINTER FOR MOVE * PUSH UP STACK. UQS3 SA5 B5 GET NEXT ENTRY ZR X5,UQS4 IF NULL ENTRY BX6 X5 MOVE ENTRY SA6 B6 SA7 B5 CLEAR ENTRY POSITION SB5 B5+1 INCREMENT POINTERS SB6 B6+1 NE B5,B7,UQS3 IF NOT END OF POT UQS4 SA5 X1+1 CHECK POT ENTRY NZ X5,UQS6 IF POT NOT EMPTY * DROP STACK POT IF EMPTIED. UQS5 SA7 A1 CLEAR POT ADDRESS AX1 18D DROP EMPTY POT SB3 X1 SB4 X1 RJ DPT * PLACE NEXT ENTRY IN QUEUE. UQS6 SA5 UQSA ENTER NEXT ENTRY IN QUEUE ZR X5,UQSX IF NO ENTRY MX4 -12 GET CORRECT QUEUE BX4 -X4*X5 BX5 X5-X4 CLEAR QUEUE POINTER FROM ENTRY SB7 X4 RJ MQE MAKE QUEUE ENTRY NZ X2,UQSX IF NOT CURRENT ENTRY SB7 B7-ITAQ ZR B7,UQS7 IF 1TA CALL SB7 B7-ITOQ+ITAQ NZ B7,UQSX IF NOT 1TO NOR 1TA CALL UQS7 UX6,B7 X6 CHECK QUEUE ENTRY MX2 59 SB5 B7-ITA1$+2000B ZR B5,UQSX IF STATUS REQUEST SA1 A0+VROT MX2 59 BX6 X1*X2 SA6 A1 REWRITE VROT JP UQSX UQSA CON 0 NEXT ENTRY TO BE PLACED IN QUEUE TITLE SMFIF - SCREEN MANAGEMENT FACILITY INTERFACE. QUAL SMFIF *** SMFIF - SCREEN MANAGEMENT FACILITY INTERFACE. * * SMFIF PROCESSES COMMUNICATIONS FOR SMFEX, THE * SCREEN MANAGEMENT FACILITY EXECUTIVE, AND FOR FSE, THE * FULL SCREEN EDITOR. A USERS EDITING SESSION PASSES * BETWEEN FSE AND SMFEX DEPENDING ON THE COMMANDS * ENTERED AND THE AVAILABILITY OF SMFEX. IF SMFEX * IS NOT RUNNING, FSE IS CAPABLE OF HANDLING THE ENTIRE * SESSION, TRANSPARENTLY TO USERS, BUT POSSIBLY SLOWER. * * A WALK-THROUGH OF AN FSE/SMFEX SESSION. * * 1. THE USER INVOKES THE EDITOR WITH THE COMMAND *FSE*. * IAFEX SCHEDULES FSE AS AN ORDINARY COMMAND. * * 2. FSE BUILDS THE WORKFILE AND THEN ATTEMPTS TO * ESTABLISH A CONNECTION BETWEEN THE TERMINAL * AND SMFEX USING THE *TLX* FILE TRANSFER FUNCTION. * * 3. TLX TESTS FOR THE PRESENCE OR ABSENCE OF SMFEX, AND * TESTS SUBSYSTEM ENABLE STATUS TO DETERMINE IF SMFEX IS * WILLING TO ACCEPT ADDITIONAL USERS. IF SMFEX IS READY, * TLX GENERATES A LOCAL FNT IN SMFEX AND DISABLES FSE * FROM SIMULTANEOUS ACCESS TO THE SHARED FILE BY * LIMITING FSE-S FNT ATTRIBUTES AND ROLLING FSE OUT WITH * PP RECALL BACK INTO TLX. TLX THEN NOTIFIES IAFEX OF * THE CONNECTION VIA THE VCSM TSEM FUNCTION. * * 4. IAFEX RESPONDS TO THE CONNECTION EVENT BY FLAGGING THE * TERMINAL WITH NON-ZERO SMFEX CONNECTION STATE AND * SENDING A MESSAGE TO SMFEX SO THAT IT CAN VERIFY * VALIDITY OF FILE FORMAT AND PREPARE TO ACCEPT THE USER-S * INPUT. * * 5. SO LONG AS THE SMFEX CONNECTION STATE REMAINS NON-ZERO, * ALL TERMINAL I/O IS PROCESSED BY THE SMFIF INTERFACE AS * MESSAGES TO AND FROM SMFEX. * * 6. WHEN SMFEX ENCOUNTERS ANY REQUEST IT CANNOT SATISFY, IT * RETURNS ITS LOCAL FNT, SCHEDULES ROLLIN OF FSE, AND * NOTIFIES IAFEX THAT THE CONNECTION IS FINISHED. * * 7. TLX IS RECALLED UPON ROLLIN TO VERIFY VALID RE-TRANSFER * OF THE SHARED FILE. FSE THEN RESUMES EXECUTION AND SCANS * FILE CONTENT TO DETERMINE THE OPERATION LEFT BY SMFEX. * FSE MAY THEN DECIDE TO TERMINATE THE JOB STEP OR TO * ONCE AGAIN CONNECT TO SMFEX. EJECT ** FORMAT OF IAFEX/SMFEX BUFFERS. * *T WORD 0 12/FUNCTION,12/TERMINAL,18/POINTER,18/LENGTH *T,WORD N (TERMINAL I/O DATA) * * FUNCTION - FUNCTION CODE ORDINAL. * * TERMINAL - CONNECTION NUMBER. * * POINTER - ADDRESS WITHIN SMFEX OF IAF-TO-SMF BUFFER. * THIS FIELD IS USED ONLY IN INITIALIZATION. * POINTER-1 WILL BE ADDRESS OF IDLEDOWN BUFFER. * * LENGTH - LENGTH OF MESSAGE INCLUDING THIS WORD. SPACE 4,10 ** SMFIF ASSEMBLY PARAMETERS. NWSS EQU 100B NUMBER OF WORDS IN IAF TO SMF QUEUE NWDB EQU 300B NUMBER OF WORDS IN DEBUGGING BUFFER * (IF 0, DO NOT ASSEMBLE DEBUGGING CODE) SPACE 4,10 ** SMFEX-TO-IAFEX FUNCTIONS. BSS 0 (FORCE UPPER) .SAVE SET * LOC 0 FSIN BSS 1 SMFEX INITIALIZED FAOT BSS 1 ASSIGN OUTPUT TO TERMINAL FAOI BSS 1 ASSIGN OUTPUT AND REQUEST INPUT FDSC BSS 1 DISCONNECT TERMINAL FROM SMFEX NMSF BSS 0 NUMBER OF SMFEX FUNCTIONS SPACE 4,10 ** IAFEX-TO-SMFEX FUNCTIONS. LOC 0 FIIN BSS 1 IAFEX INITIALIZED FCLI BSS 1 COMMAND LINE FROM TERMINAL FRES BSS 1 DRIVER REQUESTS MORE OUTPUT FPUB BSS 1 PROCESS USER BREAK FROM TERMINAL FHUP BSS 1 PHONE HUNG-UP FCSM BSS 1 CONNECT TO SMF ORG .SAVE EJECT *** SMFIF PROCESSING. * * SMFIF RECEIVES CONTROL FROM IAFEX IN THREE WAYS. * * 1. FROM THE IAFEX MAIN LOOP, WHICH USES THE *CSS* ROUTINE * TO DETECT MESSAGE ARRIVING FROM SMFEX. /SMFIF/RMS IS * THE ENTRY POINT FOR THESE EVENTS. * * 2. FROM IAFEX ROUTINE *DRI* WHEN A DRIVER FUNCTION REQUEST * HAS BEEN RECEIVED. (SUBROUTINE *PDR*) * * 3. FROM IAFEX ROUTINE *STR*, AS THE RESULT OF TSEM FUNCTION * CODE VCSM. THIS CODE INDICATES EITHER A TLX REQUEST TO * CONNECT A TERMINAL TO SMFEX, OR TLX CONFIRMATION THAT * DISCONNECTION FROM SMFEX HAS BEEN VALIDLY COMPLETED. * THE ENTRY POINTS ARE /SMFIF/CSM AND /SMFIF/DSM. * * FUNCTION REQUESTS FROM SMFEX, CERTAIN DRIVER FUNCTION * REQUESTS, AND PROMPT-ISSUED ENTRY FROM *RES* ARE * CALLED EVENTS AND ARE ASSIGNED SYMBOLS WITHIN * SMFIF OF THE FORM *EXXX*. * * EACH IAFEX TERMINAL HAS ASSOCIATED WITH IT A STATE * OF SMFIF PROCESSING. A STATE CODE IS MAINTAINED * IN BITS 23-18 OF WORD VFST OF THE TERMINAL TABLE. * STATE CODES ARE ASSIGNED SYMBOLS OF THE FORM *SXXX*. * * FOR EACH STATE, STATE/EVENT TABLES DEFINE WHAT ACTION * (INCLUDING A POSSIBLE STATE CHANGE) IS TO BE PERFORMED * UPON OCCURENCE OF EACH POSSIBLE EVENT. THE ACTION * FOR A GIVEN EVENT IS A ROUTINE CALLED A STATE/EVENT * HANDLER OR PROCESSOR. * * THUS, SMFIF PROCESSING CONSISTS OF THREE REQUEST * PROCESSORS (CSM, DSM, PDR) DETECTING EVENTS AND * EXECUTING THE APPROPRIATE STATE/EVENT HANDLERS. SPACE 4,10 ** STATE TABLE MACROS. MACRO STATE,SXXX IF -DEF,.STATE,1 .STATE SET 0 ERRNZ SXXX-.STATE MISPLACED STATE EVENT TABLE LOC 0 ENDM EVENT MACRO EXXX,IXX,SXXX ERRNZ EXXX-* MISPLACED EVENT ENTRY IFC NE,*SXXX** VFD 36/0,6/SXXX,18/IXX ELSE VFD 36/0,6/.STATE,18/IXX ENDIF ENDM STATEND MACRO .STATE SET .STATE+1 ERRNZ NMEV-* WRONG NUMBER OF EVENTS LOC *O ENDM SPACE 4,10 ** SMFIF TERMINAL STATE SYMBOLS. .SAVE SET * LOC 0 SIDL BSS 1 NO FSE/SMFEX ACTIVITY IN PROGRESS SINP BSS 1 WAITING FOR TERMINAL INPUT SRSP BSS 1 WAITING FOR SMFEX RESPONSE SOUT BSS 1 WAITING FOR MORE OUTPUT FROM SMFEX SHUP BSS 1 WAIT SMFEX OK AFTER HUNG-UP PHONE STOT BSS 1 WAIT SMFEX OK AFTER TIME-OUT LOGOFF SDTJ BSS 1 WAIT SMFEX OK AFTER DETACH ORG .SAVE SPACE 4,10 ** SMFIF TERMINAL EVENT SYMBOLS. .SAVE SET * SAVE ORIGIN LOC 0 ERES BSS 1 DRIVER RES REQUEST ECLI BSS 1 DRIVER CLI REQUEST EPUB BSS 1 DRIVER PUB REQUEST EDTJ BSS 1 DRIVER DTJ REQUEST EHUP BSS 1 DRIVER HUP REQUEST ETOT BSS 1 DRIVER TOT REQUEST EUDR BSS 1 UNEXPECTED DRIVER REQUEST EAOT BSS 1 SMFEX ASSIGN OUTPUT TO TERMINAL EAOI BSS 1 SMFEX ASSIGN OUTPUT AND REQUEST INPUT ECON BSS 1 TLX CONNECT TO SMF EDSC BSS 1 SMFEX DISCONNECT FUNCTION ECFR BSS 1 TLX CONFIRM DISCONNECTION ERMO BSS 1 IAFEX REQUEST MORE OUTPUT FROM SMFEX NMEV BSS 0 NUMBER OF EVENTS ORG .SAVE RESTORE ORIGIN AND LOCATION COUNTERS EJECT ** SMFIF STATE/EVENT TABLES. TSET BSS 0 SPACE 4,20 SIDL STATE NO FSE/SMFEX ACTIVITY ERRNZ SIDL IAFEX AND DRIVER CODE ASSUMES SIDL=0 EVENT ERES,RDR EVENT ECLI,RDR EVENT EPUB,RDR EVENT EDTJ,RDR EVENT EHUP,RDR EVENT ETOT,RDR EVENT EUDR,RDR EVENT EAOT,0 EVENT EAOI,0 EVENT ECON,NSC,SRSP EVENT EDSC,0 EVENT ECFR,0 EVENT ERMO,0 STATEND SPACE 4,20 SINP STATE WAITING FOR TERMINAL INPUT EVENT ERES,DBI EVENT ECLI,PCL,SRSP EVENT EPUB,NSI,SRSP EVENT EDTJ,NSH,SDTJ EVENT EHUP,NSH,SHUP EVENT ETOT,NSH,STOT EVENT EUDR,ADR EVENT EAOT,ASO EVENT EAOI,ASO EVENT ECON,ATL EVENT EDSC,0,SIDL EVENT ECFR,0 EVENT ERMO,0 STATEND SPACE 4,20 SRSP STATE WAITING FOR SMFEX RESPONSE TO INPUT EVENT ERES,0 EVENT ECLI,AIR1 EVENT EPUB,NSI EVENT EDTJ,NSH,SDTJ EVENT EHUP,NSH,SHUP EVENT ETOT,NSH,STOT EVENT EUDR,ADR EVENT EAOT,ASO,SOUT EVENT EAOI,ASO,SINP EVENT ECON,ATL EVENT EDSC,0,SIDL EVENT ECFR,0,SIDL EVENT ERMO,0 STATEND SPACE 4,20 SOUT STATE EXPECTING OUTPUT FROM SMFEX EVENT ERES,AMS EVENT ECLI,AIR1 EVENT EPUB,NSI,SRSP EVENT EDTJ,NSH,SDTJ EVENT EHUP,NSH,SHUP EVENT ETOT,NSH,STOT EVENT EUDR,ADR EVENT EAOT,ASO EVENT EAOI,ASO,SINP EVENT ECON,ATL EVENT EDSC,0,SIDL EVENT ECFR,0 EVENT ERMO,0,SRSP STATEND SPACE 4,20 SHUP STATE WAIT SMFEX OK AFTER HUNG UP PHONE EVENT ERES,0 EVENT ECLI,AIR1 EVENT EPUB,AIR EVENT EDTJ,0 EVENT EHUP,IES EVENT ETOT,IES EVENT EUDR,ADR EVENT EAOT,0 EVENT EAOI,0 EVENT ECON,ATL EVENT EDSC,AHU,SIDL EVENT ECFR,0 EVENT ERMO,0 STATEND SPACE 4,20 STOT STATE WAIT SMFEX OK AFTER TIME-OUT LOGOFF EVENT ERES,0 EVENT ECLI,AIR1 EVENT EPUB,AIR EVENT EDTJ,0 EVENT EHUP,0,SHUP EVENT ETOT,IES EVENT EUDR,ADR EVENT EAOT,0 EVENT EAOI,0 EVENT ECON,ATL EVENT EDSC,ATO,SIDL EVENT ECFR,0 EVENT ERMO,0 STATEND SPACE 4,20 SDTJ STATE WAIT SMFEX OK AFTER DETACH EVENT ERES,0 EVENT ECLI,AIR1 EVENT EPUB,AIR EVENT EDTJ,0 EVENT EHUP,0,SHUP EVENT ETOT,0,STOT EVENT EUDR,ADR EVENT EAOT,0 EVENT EAOI,0 EVENT ECON,ATL EVENT EDSC,ADT,SIDL EVENT ECFR,0 EVENT ERMO,0 STATEND TITLE SMFIF - CSM - CONNECT TO SCREEN MANAGEMENT FACILITY. CSM SPACE 4,10 ** CSM - CONNECT TO SCREEN MANAGEMENT. * * USES X - 1. * * CALLS ESE. CSM SUBR SX1 ECON SET CONNECTION EVENT RJ ESE EXECUTE STATE/EVENT PROCESSOR EQ CSMX RETURN TITLE SMFIF - DSM - DISCONNECT SCREEN MANAGEMENT FACILITY. DSM SPACE 4,10 ** DSM - DISCONNECT FROM SCREEN MANAGEMENT. * * USES X - 1. * * CALLS ESE. DSM SUBR SX1 ECFR SET DISCONNECT CONFIRMATION EVENT RJ ESE EXECUTE STATE/EVENT PROCESSOR EQ DSMX RETURN TITLE SMFIF - PDR - PROCESS DRIVER REQUESTS. PDR SPACE 4,10 ** PDR - PROCESS DRIVER REQUESTS. * * ENTRY (X5) = DRIVER FUNCTION REQUEST. * (B7) = *DRI* PROCESSOR FOR FUNCTION. * * USES X - 1, 2, 3, 7. * A - 1, 2. * B - 5. * * CALLS ESE, PCS, SSP. PDR1 RJ PCS EXECUTE PROCESSOR PDR SUBR BX7 X5 STORE DRIVER REQUEST SA7 SSPA RJ SSP SET UP B2, B3, AND OTHER REGISTERS UX1,B5 X5 SA1 TDRQ+B5 NG X1,PDR1 IF NO SMFIF HANDLING FOR THIS REQUEST SA2 A0+VROT CHECK FOR RESOURCE LIMIT MX3 2 LX2 59-19 BX3 X3*X2 NZ X3,PDR1 IF LIMIT OCCURRED, SKIP SMF PROCESSING RJ ESE EXECUTE STATE/EVENT HANDLER EQ PDRX RETURN TDRQ INDEX CON,/TLX/REQL,0 TABLE OF DRIVER REQUESTS INDEX ,/TLX/CLI,( ECLI ) INDEX ,/TLX/DIN,( EUDR ) INDEX ,/TLX/DLO,( -1 ) INDEX ,/TLX/DRP,( -1 ) INDEX ,/TLX/DRT,( -1 ) INDEX ,/TLX/DTJ,( EDTJ ) INDEX ,/TLX/ETX,( EUDR ) INDEX ,/TLX/FLO,( EUDR ) INDEX ,/TLX/HUP,( EHUP ) INDEX ,/TLX/IAM,( -1 ) INDEX ,/TLX/LPT,( -1 ) INDEX ,/TLX/PUB,( EPUB ) INDEX ,/TLX/RES,( ERES ) INDEX ,/TLX/RIN,( EUDR ) INDEX ,/TLX/SAI,( EUDR ) INDEX ,/TLX/TOT,( ETOT ) TDRQL EQU *-TDRQ TITLE SMFIF - STATE/EVENT HANDLERS. ** STATE/EVENT HANDLERS. * * STATE/EVENT PROCESSORS ARE CALLED ONLY BY *ESE* AND * RETURN BY JUMPING TO *ESEX*. PROCESSORS MAY ALSO * RETURN BY JUMPING TO EACH OTHER. *RDR* HAS THE * PROPERTY OF CALLING *PCS* TO PERFORM ANY FUNCTIONS * WHICH ARE NOT OVERRIDDEN BY SCREEN MANAGEMENT. THE * FOLLOWING ARE TRUE OF ALL STATE/EVENT PROCESSORS. * * ENTRY (B2) = TERMINAL NUMBER. * * EXIT VIA *ESEX*. ESE SPACE 4,10 ** ESE - EXECUTE STATE/EVENT HANDLER. * * ENTRY (X1) = EVENT CODE. * (B2) = TERMINAL NUMBER. * (B3) = PARAMETER TO STATE/EVENT PROCESSOR. * (B4) = PARAMETER TO STATE/EVENT PROCESSOR. * * EXIT TO PROCESSOR. * * CALLS ABT, ASE. ESE SUBR ENTRY/EXIT RJ ASE ADVANCE STATE/EVENT TABLES NG B6,ESE1 IF INCORRECT PROCESSOR ZR B6,ESEX IF NO PROCESSOR JP B6 EXIT TO PROCESSOR ESE1 SX6 3RESE RJ ABT ABORT EQ ESEX RETURN SPACE 4,10 ** ADT - SMFEX ACKNOWLEDGED DETACH. * * USES X - 1. * A - 1. * * CALLS ADQ. ADT BSS 0 ENTRY SA1 ADTA SIMULATE DRIVER *DTJ* REQUEST RJ ADQ ADD TO DRIVER QUEUE EQ ESEX RETURN ADTA VFD 12//TLX/DTJ+2000B,24/UDRC,24/0 ADR SPACE 4,10 ** ADR - ABORT FOR BAD DRIVER REQUEST. * * USES X - 6. * * CALLS ABT. ADR BSS 0 ENTRY SX6 3RADR RJ ABT EQ ESEX RETURN AHU SPACE 4,10 ** AHU - SMFEX ACKNOWLEDGED HUNG-UP-PHONE. * * USES X - 1. * A - 1. * * CALLS ADQ. AHU BSS 0 ENTRY SA1 AHUA SIMULATE DRIVER *HUP* REQUEST RJ ADQ ADD TO DRIVER QUEUE EQ ESEX RETURN AHUA VFD 12//TLX/HUP+2000B,48/0 AIR SPACE 4,10 ** AIR - ACKNOWLEDGE INTERRUPT AND REASSIGN POT. * * ENTRY (B3) = POT POINTER. * * USES X - 2, 6. * A - 2, 6. * B - 4, 6. * * CALLS DPT, RDR. AIR BSS 0 ENTRY SA2 A0+VDCT ACKNOWLEDGE INTERRUPT SX6 B1 LX6 58 BX6 X6+X2 SA6 A2 AIR1 SB4 0 ZR B3,ESEX IF NO POTS TO DROP RJ DPT DROP POTS EQ ESEX RETURN AMS SPACE 4,10 ** AMS - ASSIGN MESSAGE. * * ENTRY (B3) = POT CHAIN. * * USES X - 1, 2, 4, 6, 7. * A - 1, 2, 6, 7. * * CALLS QMS. AMS BSS 0 ENTRY IFNET AMS1 SA1 A0+VDCT SA2 A0+VSTT MX4 -12 MX7 14 LX7 12 BX6 X7*X1 NZ X6,ESEX IF DRIVER BUSY BX7 -X4*X2 ZR X7,AMS1 IF NO STACKED MESSAGE BX6 X4*X2 ASSIGN STACKED MESSAGE SA6 A2 BX7 X1+X7 SA7 A1 EQ ESEX RETURN AMS1 SX6 FRES ASK SMFEX FOR MORE OUTPUT SX7 B2 TERMINAL NUMBER LX6 48 LX7 36 BX6 X6+X7 SX7 B3 POT CHAIN BX6 X6+X7 MESSAGE HEADER WORD RJ QMS QUEUE MESSAGE FOR SMFEX SX1 ERMO SET REQUEST MORE OUTPUT EVENT RJ ASE ADVANCE STATE/EVENT TABLES EQ ESEX RETURN ASO SPACE 4,10 ** ASO - ASSIGN SMFEX OUTPUT TO TERMINAL. * * ENTRY (B4) = MESSAGE LENGTH. * * USES X - 6. * B - 3. * * CALLS MVA. ASO BSS 0 ENTRY ZR B4,ESEX IF NULL OUTPUT SA1 SSCR GET MESSAGE ADDRESS SX6 X1+4 SB3 B0 ASK MVA TO GET POT CHAIN RJ MVA ASSIGN OUTPUT EQ ESEX RETURN ATL SPACE 4,10 ** ATL - ABORT FOR BAD TLX TSEM. * * USES X - 6. * * CALLS ABT. ATL BSS 0 ENTRY SX6 3RATL RJ ABT EQ ESEX RETURN ATO SPACE 4,10 ** ATO - SMFEX ACKNOWLEDGED TIME-OUT LOGOFF. * * EXIT (X1) = PARAMETER FOR *ADQ*. * * USES X - 1. * A - 1. * * CALLS ADQ. ATO BSS 0 ENTRY SA1 ATOA SIMULATE DRIVER *TOT* REQUEST RJ ADQ ADD TO DRIVER QUEUE EQ ESEX RETURN ATOA VFD 12//TLX/TOT+2000B,48/0 DBI SPACE 4,10 ** DBI - ASK DRIVER TO BEGIN INPUT. * * EXIT (X2) = PARAMETER FOR *EDR*. * * USES X - 1, 2, 3, 4. * A - 1, 2, 3. * * CALLS EDR. DBI BSS 0 ENTRY IFNET DBI1 SA3 A0+VSTT CHECK FOR STACKED OUTPUT MX4 -12 BX3 -X4*X3 NZ X3,AMS IF STACKED OUTPUT MESSAGE DBI1 SA1 A0+VDCT SA2 DBIA BX3 X2*X1 NZ X3,ESEX IF INPUT BEGUN OR DRIVER BUSY SA2 A2+B1 RJ EDR ENTER DRIVER REQUEST EQ ESEX RETURN DBIA CON 6400BS48+7777B CON 4400BS48+/1TD/BGI IES SPACE 4,10 ** IES - INVALID EVENT SEQUENCE. * * WHEN AN INVALID SEQUENCE OF EVENTS IS DETECTED, THE * *SMF* SUBSYSTEM MAY NOT BE RESPONDING, THEREFORE DISCONNECT * ALL USERS FROM THE MULTI-USER EDITOR. * * CALLS SID. IES BSS 0 ENTRY RJ SID DISCONNECT FROM *SMF* SUBSYSTEM EQ ESEX RETURN NSC SPACE 4,10 ** NSC - NOTIFY SMFEX OF CONNECTION REQUEST BY TLX. * * USES A - 1. * X - 0, 1, 6, 7. * * CALLS QMS. NSC BSS 0 ENTRY SX6 FCSM FUNCTION CODE TO NOTIFY SMFEX LX6 48 SX7 B2 TERMINAL NUMBER LX7 36 BX6 X6+X7 GENERATE MESSAGE HEADER RJ QMS QUEUE MESSAGE FOR SMFEX SA1 A0+VUIT GET EJT ORDINAL MX0 -12 BX6 -X0*X1 SA1 A0+VFST GET JSN MX0 24 BX1 X1*X0 BX6 X6+X1 MERGE JSN AND EJT TO MAKE MESSAGE RJ QMS QUEUE MESSAGE TO SMFEX EQ ESEX RETURN NSH SPACE 4,10 ** NSH - NOTIFY SMFEX PHONE HUNG UP. * * ENTRY (B3) = POT CHAIN. * * USES X - 6. * B - 3, 4. * * CALLS DPT, QMS. NSH BSS 0 ENTRY SB4 0 SET TO DROP POT CHAIN ZR B3,NSH1 IF NOT POTS TO DROP RJ DPT DROP POT NSH1 SX6 FHUP NOTIFY SMFEX OF HANG-UP SX7 B2 TERMINAL NUMBER LX6 48 LX7 36 BX6 X6+X7 MESSAGE HEADER WORD RJ QMS QUEUE MESSAGE FOR SMFEX EQ ESEX RETURN TO DRI NSI SPACE 4,10 ** NSI - NOTIFY SMFEX OF INTERRUPT FROM TERMINAL. * * EXIT (B3) = POT CHAIN. * TO *AIR*. * * USES X - 6, 7. * * CALLS DAP, QMS, SSP. NSI BSS 0 ENTRY RJ DAP DE-ASSIGN OUTPUT POTS RJ SSP RESTORE PARAMETERS SX6 FPUB SX7 B2 TERMINAL NUMBER LX6 48 LX7 36 BX6 X6+X7 MESSAGE HEADER WORD RJ QMS QUEUE MESSAGE FOR SMFEX EQ AIR GO ACKNOWLEDGE INTERRUPT PCL SPACE 4,10 ** PCL - PROCESS COMMAND LINE FROM TERMINAL. * * ENTRY (B3) = POT CHAIN. * * USES X - 1, 2, 6, 7. * A - 1, 6. * * CALLS QMS. PCL BSS 0 ENTRY SX6 FCLI PASS COMMAND TO SMFEX SX7 B2 TERMINAL NUMBER LX6 48 LX7 36 BX6 X6+X7 SX7 B3 POT CHAIN BX6 X6+X7 MESSAGE HEADER WORD RJ QMS QUEUE MESSAGE FOR SMFEX SA1 A0+VDCT RESET INPUT REQUESTED SX2 B1 LX2 56-0 BX6 -X2*X1 SA6 A1 EQ ESEX RETURN RDR SPACE 4,10 ** RDR - RETURN DRIVER REQUEST TO *PCS* PROCESSING. * * CALLS PCS, SSP. RDR BSS 0 ENTRY SA5 SSPA RESTORE REQUEST REGISTERS RJ SSP RJ PCS EXECUTE PROCESSOR EQ ESEX RETURN TITLE SMFIF - SUBROUTINES. ** ADQ - ADD REQUEST TO DRIVER QUEUE. * * ENTRY (B2) = TERMINAL NUMBER. * (X1) = SIMULATED DRIVER FUNCTION REQUEST. * * EXIT REQUEST ADDED TO FIRST DRIVER REQUEST QUEUE. * * USES X - 2, 3, 4, 5, 6, 7. * A - 2, 3, 4, 5, 6, 7. ADQ SUBR ENTRY/EXIT SX6 B2 ADD TERMINAL NUMBER TO DRIVER REQUEST BX6 X1+X6 SA2 /IAFEX4/NDSA GET NETWORK DRIVER STACK ADDRESS IFNET ADQ3 IF NETWORK TERMINAL SA2 VDRL SEARCH FOR DRIVER QUEUE MX3 -12 SX5 B2 CURRENT TERMINAL ADQ1 NG X2,ADQ5 IF END OF DRIVER STATUS WORDS BX4 -X3*X2 FIRST TERMINAL NUMBER FOR THIS DRIVER IX7 X5-X4 PL X7,ADQ2 IF FIRST TERMINAL .LE. CURRENT TERMINAL SA2 A2+1 NEXT DRIVER STATUS WORD EQ ADQ1 PROCESS NEXT WORD ADQ2 BX7 X2 AX2 24 STACK ADDRESS AX7 12 COMPUTE LAST TERMINAL NUMBER+1 BX7 -X3*X7 IX7 X4+X7 IX7 X7-X5 COMPUTE LAST TERMINAL-CURRENT TERMINAL PL X7,ADQ3 IF CORRECT DRIVER STATUS WORD SA2 A2+1 NEXT DRIVER STATUS WORD EQ ADQ1 PROCESS NEXT WORD ADQ3 SX7 X2 STACK ADDRESS SA2 X7+B1 READ FIRST SA3 A2+B1 READ IN SA4 A3+B1 READ OUT BX5 X4-X2 NZ X5,ADQ4 IF OUT .NE. FIRST SA5 A4+B1 READ LIMIT BX4 X5 ADQ4 SX7 X4-1 DECREMENT OUT BX3 X3-X7 SA6 X7 STORE REQUEST SA7 A4 UPDATE OUT NZ X3,ADQX IF NO DRIVER STACK OVERFLOW ADQ5 SX6 3RADQ EQ ABT+1 ABORT UNCONDITIONALLY ASE SPACE 4,20 ** ASE - ADVANCE STATE/EVENT TABLES. * * ENTRY (X1) = EVENT CODE. * (B2) = PARAMETER TO STATE/EVENT PROCESSOR. * (B3) = PARAMETER TO STATE/EVENT PROCESSOR. * (B4) = PARAMETER TO STATE/EVENT PROCESSOR. * * EXIT (B2) = UNCHANGED. * (B3) = UNCHANGED. * (B4) = UNCHANGED. * (B6) = PROCESSOR ADDRESS. * (B6) .LE. 0 IF NO PROCESSOR FOR THIS EVENT. * (B6) .LT. 0 IF NO PROCESSOR AND INCORRECT EVENT. * * USES X - 1, 2, 3, 4, 6. * A - 1, 2, 6. * B - 5, 6. ASE SUBR ENTRY/EXIT SA2 A0+VFST EXTRACT STATE FROM VFST MX3 -6 BX6 X2 SAVE VFST FOR SETTING NEW STATE AX2 18 BX2 -X3*X2 SX4 NMEV CALCULATE ENTRY IN STATE/EVENT TABLES IX4 X2*X4 IX4 X4+X1 SB5 X4+ SA1 TSET+B5 GET STATE/EVENT ENTRY SB6 X1 SET STATE/EVENT HANDLER ADDRESS LX3 18-0 SET NEW STATE IN VFST BX1 -X3*X1 BX6 X3*X6 BX6 X1+X6 SA6 A2 EQ ASEX RETURN GMQ SPACE 4,10 ** GMQ - GET MESSAGE FROM SEND-TO-SMFEX QUEUE. * * EXIT (X7) = 0 IF QUEUE EMPTY. * (X6) = MESSAGE IF (X7) .NE. 0. * * USES X - 1, 3, 4, 6, 7. * A - 1, 3, 4, 7. GMQ1 SX7 X3+B1 UPDATE STACK OUT POINTER BX6 X4 SA7 A3+ GMQ SUBR ENTRY/EXIT SA1 QMSA+1 READ IN SA3 A1+B1 READ OUT IX7 X3-X1 OUT-IN SA4 X3 READ WORD NG X7,GMQ1 IF NO WRAPAROUND SA1 A3+B1 READ LIMIT SX6 X1 ZR X7,GMQX IF BUFFER EMPTY SX7 X3+B1 ADVANCE OUT IX1 X7-X6 NZ X1,GMQ1 IF OUT .NE. LIMIT SA1 A1-3 READ FIRST SX3 X1-1 EQ GMQ1 UPDATE QUEUE AND RETURN ISM SPACE 4,10 ** ISM - IDLE SCREEN MANAGEMENT FACILITY. * * EXIT SHUTDOWN MESSAGE FORCIBLY TRANSMITTED. * * USES X - 1, 2, 6, 7. * A - 1, 2, 6. * * * CALLS EUC, SFC. ISM SUBR ENTRY/EXIT SA2 ASMF ZR X2,ISMX IF SMF NEVER CONNECTED TO IAF SA1 ISMA BX6 X1 BX7 X2 RJ SFC SFCALL TO SMF RJ EUC RELEASE SMF CONNECTION STATE SX6 B0 SA6 ASMF CLEAR SMF ACTIVE WORD EQ ISMX RETURN ISMA VFD 6/0,12/1,18/0,18/ISMB,6/WRIT ISMB VFD 12/FIIN,12/0,18/0,18/1 QMS SPACE 4,15 ** QMS - QUEUE MESSAGE TO SEND TO SMFEX. * * ENTRY (X6) = MESSAGE HEADER WORD. * * EXIT MESSAGE ADDED TO QUEUE. * * USES X - 1, 2, 3, 4, 6, 7. * A - 1, 2, 3, 6, 7. * * CALLS SID. QMS2 SA6 X1 STORE MESSAGE HEADER IN QUEUE SA7 A1 UPDATE IN POINTER QMS SUBR ENTRY/EXIT SA1 QMSA+1 READ IN SA3 A1+B1 READ OUT SX7 X1+1 IN+1 IX4 X7-X3 IN+1-OUT NG X4,QMS2 IF NO WRAPAROUND SA3 A3+B1 READ LIMIT SX2 X3 ZR X4,QMS1 IF BUFFER FULL IX4 X7-X2 IN+1-LIMIT NZ X4,QMS2 IF IN+1 .NE. LIMIT SA3 A1-B1 READ FIRST SA2 A1+B1 READ OUT SX7 X3 IN+1 IX4 X7-X2 NZ X4,QMS2 IF IN+1 .NE. OUT QMS1 RJ SID TREAT MESSAGE STACK OVERFLOW AS DROPOUT EQ QMSX RETURN QMSA CON QMSB FIRST CON QMSB IN CON QMSB OUT CON QMSB+NWSS LIMIT QMSB BSSZ NWSS SEND-TO-SMFEX MESSAGE STACK RDB SPACE 4,15 ** RDB - RECORD DEBUG BUFFER MESSAGE. * * ENTRY (A1) = ADDRESS OF SFCALL MESSAGE HEADER. * (X1) = SFCALL MESSAGE HEADER. * * EXIT SFCALL MESSAGE RECORDED IN DEBUG BUFFER. * * USES X - 1, 2, 6. * A - 1, 2, 6. * B - 4, 5, 6, 7. .RDB IFNE NWDB,0 RDB3 SX6 B6 STORE NEW DEBUGGING BUFFER POINTER SA6 RDBA SA1 B4 RESTORE MESSAGE HEADER RDB SUBR ENTRY/EXIT SB4 A1 SAVE MESSAGE HEADER ADDRESS SB7 X1 MESSAGE LENGTH GE B7,B1,RDB0 IF MESSAGE LENGTH REASONABLE SB7 B1 RDB0 SA2 RDBA DEBUGGING BUFFER POINTER SB6 X2 SB5 RDBB+RDBBL DEBUGGING BUFFER LWA + 1 RDB1 BX6 X1 STORE MESSAGE WORD IN BUFFER SA6 B6 SB6 B6+B1 ADVANCE BUFFER POINTER SB7 B7-B1 DECREMENT MESSAGE LENGTH GT B5,B6,RDB2 IF NO WRAPAROUND SB6 RDBB RESET POINTER TO FWA RDB2 ZR B7,RDB3 IF MESSAGE TRANSFERRED SA1 A1+B1 EQ RDB1 PROCESS NEXT WORD RDBA CON RDBB BUFFER POINTER RDBB BSSZ NWDB SMFIF DEBUGGING BUFFER RDBBL EQU *-RDBB DEBUGGING BUFFER LENGTH .RDB ENDIF RMS SPACE 4,15 ** RMS - RECEIVE MESSAGE FROM SMFEX. * * ENTRY (SSCR) = ADDRESS OF MESSAGE RECEIVED. * * USES X - 0, 1, 2, 6, 7. * A - 1. * B - 2, 3, 4, 5. * * MACROS TTADD. * * CALLS ESE, RDB, SFC, SID. RMS SUBR ENTRY/EXIT SA1 SSCR GET MESSAGE ADDRESS SA1 X1+3 MESSAGE HEADER IFNE NWDB,0,1 RJ RDB RECORD MESSAGE IN DEBUGGING BUFFER SB5 12 SPLIT OFF PARAMETERS FROM MESSAGE HEADER MX0 12 SB4 X1-1 B4 = BUFFER LENGTH MINUS 1 BX2 X0*X1 LX2 X2,B5 SB3 X2 B3 = FUNCTION CODE LX2 X1,B5 BX2 X0*X2 LX2 X2,B5 SB2 X2 B2 = TERMINAL NUMBER TTADD X2,A0,X3,X4 A0 = TERMINAL TABLE ADDRESS SB5 B3-TSIFL-1 PL B5,RMS0 IF INCORRECT FUNCTION CODE SA1 TSIF+B3 GET EVENT SYMBOL FOR FUNCTION NG X1,RMSX IF NEW *SMF* INITIATION RJ ESE EXECUTE STATE/EVENT HANDLER SX6 ENDT SEND END OF TASK MESSAGE SA1 /SMFIF/ASMF BX7 X1 RJ SFC SEND SFCALL ZR X1,RMSX IF NORMAL RETURN RMS0 RJ SID DISCONNECT FROM *SMF* SUBSYSTEM EQ RMSX RETURN TSIF INDEX CON,NMSF,0 TABLE OF EVENTS FOR SMFEX FUNCTIONS INDEX ,FSIN,( -1 ) INDEX ,FAOT,( EAOT ) INDEX ,FAOI,( EAOI ) INDEX ,FDSC,( EDSC ) TSIFL EQU *-TSIF SID SPACE 4,10 ** SID - SMFEX DROPOUT DETECTED. * * X - 0, 1, 2, 3, 4, 5, 6. * A - 1, 6. * B - 2, 3, 4, 7. * * MACROS TTADD. * * CALLS ADQ, DPT, GMQ, ISM. SID SUBR BX6 X6-X6 CLEAR MESSAGE BUFFERS SA6 SMSB * EMPTY SEND-TO-SMFEX QUEUE AND DROP POTS. SID1 SB4 0 RJ GMQ GET MESSAGE FROM QUEUE ZR X7,SID2 IF QUEUE EMPTY SB3 X6 MX0 12 BX1 X0*X6 LX1 12 SX1 X1-FCSM NZ X1,SID1.1 IF NOT A CONNECTION MESSAGE RJ GMQ SKIP PAST MESSAGE TEXT EQ SID1 LOOP UNTIL QUEUE IS EMPTY SID1.1 ZR B3,SID1 IF NO POT WITH MESSAGE RJ DPT DROP POT EQ SID1 LOOP TIL QUEUE EMPTY * RETURN ALL TERMINALS WITH SMFIF ACTIVITY TO IDLE STATE. SID2 SA1 VTTP GET TERMINAL TABLE POINTERS SX2 X1 TERMINAL TABLE LWA+1 AX1 24 IX3 X2-X1 SX4 VTTL IX6 X3/X4 LAST TERMINAL NUMBER SA6 SIDA SB2 VPST FIRST REAL TERMINAL SID3 MX0 -6 MASK FOR SMFIF STATE CODE IN VFST LX0 18-0 TTADD B2,A0,X2,X3 GET TERMINAL TABLE ADDRESS SA1 A0+VFST GET SMFIF STATE CODE BX6 -X0*X1 ZR X6,SID7 IF NO SMFIF ACTIVITY ON THIS TERMINAL LX6 0-18 SX5 X6-SHUP SA1 AHUA ZR X5,SID4 IF STATE IS *SHUP* SX5 X6-STOT SA1 ATOA NZ X5,SID5 IF STATE NOT *STOT* SID4 RJ ADQ SIMULATE DRIVER *HUP* OR *TOT* REQUEST SID5 SA1 A0+VFST BX6 X0*X1 SA6 A1 ERRNZ SIDL CODE ABOVE ASSUMES *SIDL* = 0 SID7 SB2 B2+B1 ADVANCE TO NEXT TERMINAL SA1 SIDA GET LAST TERMINAL NUMBER SB7 X1 LE B2,B7,SID3 IF MORE TERMINALS TO BE RESET RJ ISM IDLE *SMF* SUBSYSTEM EQ SIDX EXIT SIDA CON 0 LAST TERMINAL NUMBER SMS SPACE 4,10 ** SMS - SEND MESSAGE TO SMFEX. * * ENTRY (SMSB) = 0 IF READY TO SEND QUEUED MESSAGE, OTHERWISE * CURRENT MESSAGE HEADER. * * EXIT SAME AS ENTRY. * * USES X - 0, 1, 2, 5, 6, 7. * A - 1, 2, 6, 7. * B - 2, 3, 4, 5, 6. * * CALLS DPT, GMQ, GPL, QMS, RDB, SFC, SID. SMS11 RJ SID DISCONNECT FROM *SMF* SUBSYSTEM SMS SUBR ENTRY/EXIT SA1 SMSB GET BUFFER HEADER ZR X1,SMS3 IF BUFFER EMPTY SMS0 SA1 SMSC READ BUFFER INTERLOCK WORD SA2 ASMF BX7 X2 BX6 X1 RJ SFC SEND SFCALL NZ X1,SMS11 IF ABNORMAL RETURN SA2 SMSD CHECK BUFFER ADDRESS NZ X2,SMSX IF BUFFER ALREADY USED SA1 SMSB GET MESSAGE LENGTH MX0 -12 BX6 -X0*X1 SA1 SMSA GET SFCALL DESCRIPTOR LX6 42 BX6 X6+X1 MERGE LENGTH INTO DESCRIPTOR RJ SFC SFCALL TO WRITE MESSAGE NZ X1,SMS11 IF ABNORMAL RETURN .RDB IFNE NWDB,0 SA1 SMSB MX0 1 FLAG HEADER AS IAFEX-TO-SMFEX BX1 X0+X1 RJ RDB RECORD MESSAGE IN DEBUGGING BUFFER .RDB ENDIF BX6 X6-X6 CLEAR BUFFER TO INDICATE MESSAGE SENT SA6 SMSB SMS3 RJ GMQ GET MESSAGE FROM SMF QUEUE ZR X7,SMSX IF QUEUE EMPTY SB3 X6 GET POSSIBLE POT POINTER SX5 B3 GET POSSIBLE POT ADDRESS LX5 3 TB4 X5,VBMP MX0 -12 REMOVE POT POINTER FIELD BX6 X6*X0 MX0 12 TEST FOR MESSAGE EMBEDDED IN QUEUE BX7 X6*X0 LX7 12 SX7 X7-FCSM ZR X7,SMS9 IF CONNECTION MESSAGE SX0 B1 SET WORD COUNT=1 FOR NO POT POINTER BX6 X6+X0 SA6 SMSB STORE MESSAGE HEADER IN BUFFER ZR B3,SMS0 IF NO POT POINTER WITH MESSAGE * TRANSFER POT CONTENTS TO SMFEX MESSAGE BUFFER. SX7 B3 SAVE POT POINTER FOR FIRST POT MX2 -12 LX6 0-36 GET TERMINAL NUMBER BX6 -X2*X6 SB2 X6 (B2) = TERMINAL NUMBER SB5 0 INITIALIZE WORD COUNT SB6 B4+VCPC-1 SET LIMIT ADDRESS FOR FIRST POT SMS4 SA1 B4 FETCH NEXT WORD OF INPUT SB5 B5+B1 ADVANCE WORD COUNT SB4 B4+B1 ADVANCE FETCH ADDRESS BX6 X1 SA6 A6+B1 ADVANCE STORE ADDRESS BX0 -X2*X1 ZR X0,SMS5 IF END OF LINE LE B4,B6,SMS4 IF NOT END-OF-POT SX1 B5-MAXB+VCPC PL X1,SMS6 IF LESS THAN ONE POT SPACE AVAILABLE RJ GPL GET NEXT POT SB6 B4+VCPC-1 SET LIMIT ADDRESS FOR NEW POT NZ B3,SMS4 IF NOT END OF CHAIN SMS5 SB3 0 FORCE DROPPING OF WHOLE POT CHAIN SMS6 SA1 SMSB ADD WORD COUNT TO MESSAGE HEADER SX6 B5+B1 MX0 42 BX1 X1*X0 BX6 X1+X6 SA6 A1 STORE MESSAGE HEADER BX1 X7 SAVE POINTER TO FIRST POT ZR B3,SMS8 IF NO MORE POTS TO REQUEUE SA7 SMSE SAVE FIRST POT POINTER SX6 B3 SAVE LAST POT POINTER SA6 SMSF RJ GPL GET POT POINTER TO REQUEUE ZR B3,SMS7 IF NO MORE POTS BEYOND LAST SENT SX6 FCLI FUNCTION CODE TO REQUEUE REMAINING POTS SX7 B2 TERMINAL NUMBER LX6 48 LX7 36 BX6 X6+X7 SX7 B3 POT CHAIN BX6 X6+X7 MESSAGE HEADER WORD RJ QMS QUEUE MESSAGE FOR SMFEX SMS7 SA1 SMSF RESTORE LAST POT TO DROP SB3 X1 SA1 SMSE RESTORE FIRST POT TO DROP SMS8 SB4 B3 LAST POT TO DROP SB3 X1 FIRST POT TO DROP RJ DPT DROP POTS EQ SMS0 GO SEND MESSAGE TO SMFEX SMS9 SX0 B1+B1 SET WORD COUNT=2 FOR CONNECTION MESSAGE BX6 X6+X0 SA6 SMSB STORE MESSAGE HEADER RJ GMQ GET MESSAGE TEXT FROM QUEUE NZ X7,SMS10 IF TEXT AVAILABLE NORMALLY MX6 0 NULL TEXT IF NONE IN QUEUE SMS10 SA6 A6+B1 STORE MESSAGE TEXT EQ SMS0 GO SEND MESSAGE TO SMFEX SMSA VFD 6/0,12/0,18/0,18/SMSB,6/WRIT SMSB BSSZ MAXB SMSC VFD 6/0,12/1,18/0,18/SMSD,6/READ SMSD CON 0 SMSE CON 0 SAVE FIRST POT POINTER SMSF CON 0 SAVE LAST POT POINTER SPACE 4,10 ** BUFFERS FOR SCP INTERFACE. ASMF CON 0 ACTIVE SMF WORD BSMF BSS MAXB QUAL * SPACE 4 *CALL COMCCDD *CALL COMCCFD *CALL COMCCPM *CALL COMCDXB *CALL COMCSFN *CALL COMCSYS *CALL COMCZTB SPACE 4 USE BUFFERS TINST BSS 0 LIST -R TINST HERE LIST R TINSTL EQU *-TINST PRS TITLE IAFEX1 VALIDATION PRESET. PRS SPACE 4,10 ** PRS - PRESET. * * *PRS* ABORTS THE CALLER OF *IAFEX1*. * *PRS* WILL BE EXECUTED ONLY IF *IAFEX1* IMPROPERLY LOADED. * * MACROS ABORT, MESSAGE. PRS MESSAGE (=C* USER ACCESS NOT VALID.*),,R ABORT TTL IAFEX2 - TTY EXECUTIVE EXIT PROCESSOR. EJECT QUAL IAFEX2 IDENT IAFEX2,EXI,EXI,0,0 BASE DECIMAL *COMMENT IAFEX - EXIT PROCESSOR. COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992. IAFEX2 SPACE 4,10 ***** IAFEX2 - TTY EXECUTIVE EXIT PROCESSOR. * P.D. FARRELL. 77/03/17. * * * IAFEX2 IS CALLED BY JOB ADVANCEMENT *EXIT* * COMMAND PROCESSING TO INITIATE THE TERMINATION OF THE * INTERACTIVE TTY EXECUTIVE. THIS OVERLAY HAS BEEN MADE * SEPARATE FROM THE MAIN TERMINATION PROCESSOR IN * ORDER THAT IT MAY PROCESS A TERMINATION CORE DUMP * WITHIN THE MINIMUM AMOUNT OF PROCESSOR CORE. * * IAFEX2 IS LOADED INTO AND EXECUTES WITHIN A * SMALL BUFFER AREA ALLOCATED WITHIN THE MAIN PROCESSOR * FIELD LENGTH. TO PREVENT OVERWRITING OF MAIN PROCESSOR * CODE AND DATA, THE LENGTH OF THIS BUFFER, DEFINED AS * *EXIBUF* IN THE MAIN PROCESSOR OVERLAY, SHOULD BE MAIN- * TAINED AT THE LENGTH OF THE EXIT OVERLAY PLUS ONE. IAFEX2 SPACE 4 *** IAFEX2 EXIT PROCESSING PERFORMS THE FOLLOWING FUNCTIONS: * * - DUMPS EXECUTIVE PROCESSOR CORE IF NOT OPERATOR * DROP AND SENSE SWITCH 5 IS SET. * - LOADS AND TRANSFERS CONTROL TO THE TERMINATION * PROCESSOR, *IAFEX3*. SPACE 4,10 ** PROGRAMS CALLED: * * DMD CORE DUMP PROCESSOR. * CPM CONTROL POINT MANAGER. * OVL OVERLAY LOADER. * IAFEX3 TTY EXECUTIVE TERMINATION PROCESSOR. TITLE MAIN PROCESSOR. ORG EXIBUF+1 EXI SPACE 4,10 ** EXI - NETWORK IAF EXIT PROCESSOR. EXI BSS 0 ENTRY SB1 1 SET CONSTANT B1=1 SX6 //RPV2 SET REPRIEVE PROCESSING SA6 //RPVB+1 SX6 B0+ CLEAR ANY LEFTOVER SYSTEM REQUEST SA6 //RPVB+5 REPRIEVE //RPVB,SETUP,37B MESSAGE EXIB,1,R ISSUES DUMP MESSAGE TO *MS1W* GETJCR EXIA READ JOB CONTROL REGISTERS SA1 EXIA SA2 B0 READ SENSE SWITCHES AX1 54 CHECK ERROR FLAG ZR X1,EXI0 IF NO ERROR FLAG (RECOVERY DEADSTART) SX1 X1-ODET NZ X1,EXI1 IF NOT *OPERATOR DROP* * DUMP FIELD LENGTH ON *OPERATOR DROP* IF SSW4 IS SET. EXI0 LX2 59-5-4 CHECK SSW4 NG X2,EXI2 IF SET EQ EXI3 * DUMP FIELD LENGTH ON OTHER THAN *OPERATOR DROP* * IF SSW5 IS SET. EXI1 LX2 59-5-5 CHECK SSW5 PL X2,EXI3 IF NOT SET EXI2 SYSTEM DMD,R,A0,0 DUMP FIELD LENGTH SYSTEM DMM,R,0,0 * LOAD AND EXECUTE TERMINATION PROCESSOR. EXI3 OVERLAY (=6LIAFEX3),00,S EXIA CON 0 EXIB DATA 10LDUMPING CE DATA 10LNTRAL MEMO DATA 3LRY. TITLE SUBROUTINES. SYS= SPACE 4,10 ** SYS= - PROCESS SYSTEM REQUEST. * * USED IN PLACE OF SYSTEM COMMON DECK *COMCSYS* IN * ORDER TO REDUCE CORE REQUIREMENTS. * * ENTRY (X6) = SYSTEM REQUEST. * * EXIT REQUEST ISSUED. * * USES A - 1, 6. * X - 1, 6. SYS1 XJ SYS= SUBR ENTRY/EXIT SA6 B1 STORE REQUEST EQ SYS1 MAKE REQUEST SPACE 4,10 ** COMMON DECKS. *CALL COMCCPM *CALL COMCOVL SPACE 4 USE END EXIL EQU *-EXI DEFINE OVERLAY LENGTH TTL IAFEX3 - TTY EXECUTIVE TERMINATION. EJECT QUAL IAFEX3 IDENT IAFEX3,TER,TER,0,0 *COMMENT IAFEX - EXECUTIVE TERMINATION. COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992. BASE DECIMAL SPACE 4,10 *** TTY EXECUTIVE TERMINATION. * R.E. TATE 70/04/01. * P.D. FARRELL 77/03/17. * L. K. TUTTLE 81/01/15. SPACE 4 *** IAFEX3 PERFORMS TERMINATION PROCESSING FOR IAFEX. * THIS INCLUDES THE FOLLOWING: * * 1) DETACHING ACTIVE USERS * 2) ISSUING STATISTICAL INFORMATION. SPACE 4 *** DAYFILE MESSAGES. * * SEE LISTING. SPACE 4 *** OPERATOR MESSAGES. * * NONE. SPACE 4 *** PROGRAMS CALLED. * * CIO - CIRCULAR INPUT/OUTPUT. * CPM - CONTROL POINT MANAGER. * DMP - DUMP CORE. * LFM - LOCAL FILE MANAGER. * MSG - ISSUE DAYFILE MESSAGE. * 1TA - IAFEX AUXILIARY. TER TITLE TER - MAIN PROCESSOR. TER SPACE 4,10 ** TER - MAIN PROCESSOR. ORG ASM TER BSS 0 SB1 1 GETSSID TERA GET SUBSYSTEM IDENTIFICATION SA1 TERA SX0 X1-IFSI ZR X0,TER1 IF IAF SUBSYSTEM SX0 X1-RDSI NZ X0,TER6 IF NOT RDF SUBSYSTEM TER1 GETJO TERA GET JOB ORIGIN TYPE SA1 TERA MX2 -6 BX1 -X2*X1 NZ X1,TER6 IF NOT SYSTEM ORIGIN MESSAGE (=C*TERMINATION IN PROGRESS.*),,R MESSAGE (=C*SESB, IAF.*),5 RTIME RTIM GET CURRENT REAL TIME GETJCR TERA SA1 TERA AX1 59-5 SX3 X1-ODET NZ X3,TER2 IF NOT AN OPERATOR DROP SA1 B0 CLEAR CORE DUMP FLAG SX6 5700B BX6 X6*X1 SA6 A1 MX6 1 SET NO-RELOAD FLAG SA6 VRLL EQ TER3 TERMINATE RUN * CHECK IF RECOVERY POSSIBLE. TER2 SA1 VRLL TIME SINCE DEADSTART AT LAST RELOAD SA2 RTIM TIME SINCE DEADSTART BX6 X1 CHECK FOR INITIALIZATION ABORT LX6 1 NG X6,TER4 IF INITIALIZATION ABORT MX6 -24 ZR X1,TER3 IF FIRST RECOVERY ATTEMPT LX2 24 NG X1,TER3 IF NO-RELOAD SET BX2 -X6*X2 SECONDS SINCE DEADSTART IX3 X2-X1 SECONDS SINCE RECOVERY NG X3,TER3 IF FRESH DEADSTART SX4 X3-60 PL X4,TER3 IF .GT. 60 SECONDS SINCE RECOVERY SX3 4 IX3 X2-X3 NG X3,TER3 IF LESS THAN 4 SECONDS SINCE DEADSTART MX6 1 SET NO-RELOAD FLAG SA6 A1 MESSAGE (=C* DURATION TIME TERMINATE.*),,R * LOG OFF USERS AND ISSUE STATISTICS. TER3 RJ LOG LOG OFF ACTIVE USERS RJ STA ISSUE STATISTICS SA1 B0 LX1 59-7 CHECK SSW2 NG X1,TER4 IF SSW2 ON, AVOID RELOAD SA1 VRLL CHECK RECOVERY STATUS PL X1,TER5 IF RELOAD REQUESTED TER4 MESSAGE (=C* IAF TERMINATED.*) MESSAGE (=C*SESC, IAF.*),5 ABORT * PROCESS RELOAD. TER5 MESSAGE (=C*RECOVERY COMPLETE.*),,R MESSAGE (=C*SRSC, IAF.*),5 SA1 TERA SET IAFEX RECOVERY FLAG IN R1 SX6 B1 BX6 X1+X6 SA6 A1 SETJCR TERA ENDRUN TER6 MESSAGE (=C* USER ACCESS NOT VALID.*),,R ABORT TERA CON 0 JOB CONTROL REGISTERS RTIM CON 0 REAL TIME TITLE SUBROUTINES. CKP SPACE 4 ** CKP - CHECK POINTER WORD. * * ENTRY- * (X1) = POINTER WORD. * * EXIT- * (B6) = FWA. * (B7) = LWA. * EXITS TO ERR1 IF POINTER BAD. CKP SUBR ENTRY/EXIT SB5 A0 SB7 X1 AX1 24 SB6 X1 EQ B6,B7,ERR1 NG B6,ERR1 NG B7,ERR1 ZR B6,ERR1 ZR B7,ERR1 GE B6,B7,ERR1 GE B6,B5,ERR1 GE B7,B5,ERR1 EQ CKPX DCV SPACE 4 ** DCV - CONVERT DATA. * * ENTRY- * (X1) = DATA TO BE CONVERTED. * * EXIT- * (X6) = CONVERTED DATA. * * SCRATCH- * X - 0, 1, 2, 3, 4, 5, 6, 7. * B - 2, 3, 4, 5. * A - 2, 3, 5. DCV SUBR ENTRY/EXIT MX0 -18 (X0) = FRACTION MASK SX4 1R. (X4) = DECIMAL POINT MX5 -36 SA2 DCVA =.1P48+1 LX4 18 SA3 A2+B1 =10.0P SB5 6 BX6 -X5*X1 SX7 1000 ZR X6,DCVX IF BLANK WORD SB4 1R0-1R (B4) = CONVERSION SA5 A3+B1 (X5) = BACKGROUND PX1 X6 IX7 X6-X7 SB2 -B5 PL X7,DCV1 IF INTEGER PRESENT SB4 B0 SA5 A5+B1 DCV1 DX6 X2*X1 EXTRACT REMAINDER FX1 X2*X1 SB3 X1 LX5 -6 SHIFT ASSEMBLY SB2 B2+B5 ADVANCE SHIFT COUNT FX6 X3*X6 EXTRACT DIGIT SX7 X6+B4 CONVERT DIGIT IX5 X5+X7 ADVANCE ASSEMBLY NZ B3,DCV1 LOOP TO ZERO REMAINDER LX6 X5,B2 RIGHT JUSTIFY ASSEMBLY BX1 -X0*X6 EXTRACT FRACTION IX7 X1+X4 ADD POINT BX5 X0*X6 EXTRACT INTEGER LX5 6 IX6 X5+X7 ADD INTEGER EQ DCVX DCVA CON 0.1P48+1 CON 10.0P CON 9L CON 9L 0000 ERR SPACE 4 ** ERR - ABORT,S ANY RECOVERY ATTEMPT. * THIS ROUTINE IS CALLED WHEN ITEMS SUCH AS POINTERS HAVE * BEEN MASHED. ERR1 MESSAGE (=C*POINTER ERROR.*),,R * EQ ERRX ERRX MESSAGE (=C*RECOVERY IMPOSSIBLE.*),,R MESSAGE (=C*SRSA, IAF.*),5 ABORT GRI SPACE 4,10 ** GRI - GATHER RECOVERY INFORMATION. * * ENTRY (A0) = ADDRESS OF TERMINAL TABLE. * (B4) = FWA OF PARAMETER BLOCK. * * EXIT RECOVERY WORDS SET IN PARAMETER BLOCK. * * USES X - 1, 2, 3, 6, 7. * A - 1, 7. GRI SUBR ENTRY/EXIT SA1 A0+VROT SET UP MODES SX2 34B JOB CONTINUATION FLAG BX6 X1*X2 INPUT REQUESTED, OUTPUT AVAILABLE SX2 40B AX1 17-5 FILE FOR OUTPUT BX2 X2*X1 BX6 X6+X2 SA1 A0+VDCT SX2 B1 AX1 50-0 BX7 X1*X2 TEXT MODE AX1 51-50 BX3 X1*X2 CURRENT CHARACTER SET AX1 55-51 BX1 X1*X2 BRIEF MODE LX7 7 LX1 1 BX7 X1+X7 BX6 X6+X7 SA1 A0+VSTT MX7 -3 SAVE TERMINAL TABLE SUBSYSTEM LX7 12 BX7 -X7*X1 LX7 18-12 BX6 X6+X7 MX7 1 LX7 55-59 BX7 X7*X1 EFFECT MODE LX7 8-55 BX6 X6+X7 AX1 18-0 BX7 X2*X1 INITIAL CHAR SET AX1 53-18 SX2 101B BX1 X2*X1 DISABLE TERMINAL CONTROL, NO PROMPT FLAGS BX6 X6+X1 MODES COMPLETED LX7 15-0 INIT C.S. LX3 12-0 CURRENT C.S. BX3 X7+X3 BX7 X6+X3 SA1 A0+VCHT READ CHARACTER COUNTS SA2 A0+VFST READ INPUT/OUTPUT OVERFLOW COUNT SA7 B4+3 WRITE RECOVERY WORD 1 MX7 -24 MX6 -12 LX6 24 BX7 -X7*X1 SET CHARACTER COUNT BX2 -X6*X2 SET OVERFLOW COUNT BX7 X7+X2 WRITE RECOVERY WORD 2 SA7 A7+B1 EQ GRI EXIT IER SPACE 4,10 ** IER - ISSUE EJT SYSTEM REQUEST. * * ENTRY LOGA = FWA OF EJT REQUEST PARAMETER BLOCK. * * EXIT (X2) = 0, IF REQUEST COMPLETE. * 1, IF ERROR ENCOUNTERED. * * USES X - 1, 2, 6. * A - 1, 2, 6. * * CALLS COD. * * MACROS MESSAGE, RECALL, RTIME, SYSTEM. IER SUBR ENTRY/EXIT RTIME IERE SET START TIME IER1 SYSTEM EJT,R,LOGA ISSUE EJT SYSTEM REQUEST SA1 LOGA AX1 10 CHECK ERROR RETURN MX2 -8 BX2 -X2*X1 ZR X2,IERX IF NO ERROR SX1 X2-RTER NZ X1,IER2 IF ERROR CODE OTHER THAN RETRY RECALL SA1 LOGA CLEAR ERROR CODE AND COMPLETION BIT SX2 RTER*2000B+1 BX6 X2-X1 SA6 A1 RTIME IERF CHECK CURRENT TIME SA1 IERE SA2 A1+B1 ERRNZ IERF-IERE-1 CODE DEPENDS ON CONSECUTIVE WORDS AX1 36 AX2 36 IX2 X2-X1 ELAPSED TIME SINCE *IER* CALLED SX2 X2-30 NG X2,IER1 IF 30 SECONDS NOT YET ELAPSED SX2 JDER JOB MUST BE HUNG AT A CONTROL POINT IER2 BX1 X2 SX2 X2-JOER ZR X2,IERX IF JOB ALREADY DETACHED RJ COD CONVERT ERROR CODE TO DISPLAY MX1 -24 SA2 IERB PUT ERROR CODE INTO MESSAGE BX6 -X1*X6 BX2 X1*X2 BX6 X2+X6 SA6 A2+ SA2 VTTP GET TERMINAL NUMBER SX1 A0 AX2 24 IX1 X1-X2 AX1 3 RJ COD CONVERT TERMINAL NUMBER TO DISPLAY MX2 -30 SA1 IERD ADD TERMINAL NUMBER TO MESSAGE BX6 -X2*X6 BX1 X1*X2 BX6 X1+X6 SA6 A1 MX6 -24 SA1 LOGA GET JSN LX1 24 BX1 -X6*X1 NZ X1,IER3 IF JSN PRESENT SA1 =4R**** IER3 SA2 IERC PUT JSN INTO MESSAGE BX6 X6*X2 BX6 X6+X1 SA6 A2 MESSAGE IERA,,R SX2 B1 EQ IERX RETURN IERA DATA 20L EJT SYSTEM REQUEST IERB DATA 10LERROR XXXX IERC DATA 10L, JSN=JSNA IERD DATA 10L, TN=12345 DATA 1L. IERE CON 0 START TIME IERF CON 0 CURRENT TIME LOG SPACE 4 ** LOG - LOG OFF ALL ACTIVE USERS. * * ENTRY (A0) = LWA+1 OF IAF FL. * * EXIT ALL ACTIVE USERS DETACHED OR TERMINATED. * ALL ACTIVE TERMINAL TABLES ZEROED. * (A0) = LWA+1 OF IAF FL. * * USES X - 0, 1, 2, 5, 6, 7. * A - 0, 1, 2, 6, 7. * B - 2, 3, 4, 5, 6, 7. * * CALLS CKP, COD, IER. * * MACROS MESSAGE, PARAM, RECALL. LOG6 SA1 LOGC RESTORE (A0) SA0 X1 LOG SUBR ENTRY/EXIT SA1 VTTP GET TERMINAL TABLE POINTERS RJ CKP SX6 A0 SAVE FL SA6 LOGC SX5 B6 SAVE FWA OF TERMINAL TABLE SB6 B6+VPST*VTTL SET START OF ACTUAL TERMINALS LOG1 SA0 B6+ SB2 VPST SET FIRST TERMINAL NUMBER LOG2 SA1 A0+VUIT MX2 -12 BX2 -X2*X1 ZR X2,LOG3 IF EJT ORDINAL = 0 SA1 A0+VSTT LX1 59-48 NG X1,LOG3 IF LOGOUT IN PROGRESS SB4 LOGA PARAM FJEJ FREEZE JOB RJ IER ISSUE EJT SYSTEM REQUEST NZ X2,LOG3 IF UNABLE TO FREEZE JOB SB4 LOGA SX0 SARC SET REASON CODE PARAM DTEJ,X0 RJ IER ISSUE EJT SYSTEM REQUEST NZ X2,LOG3 IF UNABLE TO DETACH JOB BX6 X6-X6 CLEAR TERMINAL TABLE SA6 A0 LOG3 SB5 A0+VTTL SB2 B2+B1 INCREMENT TERMINAL NUMBER SA0 B5 LT B5,B7,LOG2 IF MORE TABLE TO SCAN * CHECK IF ALL USERS DETACHED. SA0 B6 SB4 B0 PRESET FAILURE COUNT LOG4 SA1 A0+VUIT MX2 -12 BX2 -X2*X1 ZR X2,LOG5 IF EJT ORDINAL = 0 SB4 B4+B1 COUNT DETACH FAILURE LOG5 SB5 A0+VTTL SA0 B5+ LT B5,B7,LOG4 IF SCAN NOT COMPLETE ZR B4,LOG6 IF ALL TERMINALS DETACHED SA1 LOGB DECREMENT DETACH ATTEMPTS SX6 X1-1 SA6 A1+ ZR X6,LOG6 IF THREE ATTEMPTS, TERMINATE MESSAGE (=C* RETRY DETACHES.*),,R RECALL EQ LOG1 LOOP TO NEXT SCAN LOGA BSS EJPB EJT SYSTEM REQUEST PARAMETER BLOCK LOGB CON 3 DETACH RETRY COUNT LOGC CON 0 SAVE (A0) PPB SPACE 4,15 ** PPB - PRESET PARAMETER BLOCK. * * ENTRY (A0) = TERMINAL TABLE ADDRESS. * (B4) = FWA OF PARAMETER BLOCK. * (X7) = FUNCTION CODE. * * EXIT WORDS 1 - 5 CLEARED. * IF *FJEJ*, AN INFORMATIVE MESSAGE IS ISSUED * TO *MS1W*. * (X6) = 0. * (A7) = (B4). * (X7) = (WORD 0) = JSN, FUNCTION CODE. * (X2) = EJT ORDINAL. * * USES X - 1, 2, 6, 7. * A - 1, 6, 7. PPB1 SA1 A0+VUIT GET EJT ORDINAL MX2 -12 BX2 -X2*X1 BX6 X6-X6 CLEAR WORDS 1 - 5 SA6 A7+1 MX1 EJPB-2 PPB2 LX1 1 SA6 A6+B1 NG X1,PPB2 IF MORE WORDS TO CLEAR PPB SUBR ENTRY/EXIT LX7 1 MX6 24 SA1 A0+VFST ADD JSN TO WORD 0 SX2 X7-FJEJ*2 BX1 X1*X6 BX7 X1+X7 SA7 B4 NZ X2,PPB1 IF NOT TO ISSUE MESSAGE LX6 24 SA2 PPBA+1 LX1 24 BX6 -X6*X2 CLEAR OLD JSN BX6 X1+X6 ADD NEW JSN TO MESSAGE SA6 A2 MESSAGE PPBA,1,R ISSUE MESSAGE TO *MS1W* ONLY EQ PPB1 CONTINUE PPBA DATA C*DETACHING, JSN= XXXX.* STA SPACE 4 ** STA - ISSUES *IAFEX* STATISTICS. STA8 MESSAGE STAH,,R STA SUBR ENTRY/EXIT SB6 STAC SA1 VNTP CHECK IF NETWORK ACTIVE SX6 B0+ NZ X1,STA1 IF ACTIVE SA6 STAD TURN OF NETWORK STATISTICS STA1 MX0 -12 SB7 STAB SA2 B6 GET POINTER TO QUANITY TO BE CONVERTED ZR X2,STA3 IF END OF TABLE SB6 B6+B1 SA1 X2 GET QUANITY STA2 SA2 A2+B1 MOVE MESSAGE SB6 B6+B1 BX6 X2 SA6 B7+B1 SB7 B7+B1 BX2 -X0*X2 NZ X2,STA2 IF NOT END OF MESSAGE MX6 -18 BX1 -X6*X1 ZR X1,STA1 IF QUANITY ZERO RJ DCV CONVERT NUMBERS SA1 STAA FORMAT MESSAGE MX2 24 MX3 36 BX1 X2*X1 BX7 -X3*X6 AX6 24 BX6 -X2*X6 BX6 X1+X6 SA6 A1 SA1 =10H KILO- BX1 -X2*X1 LX7 36 BX6 X1+X7 SA6 A6+B1 MESSAGE STAA,,R EQ STA1 LOOP STA3 SA1 VCTP ISSUE COMMAND COUNTS BX6 X6-X6 SA6 STAA+4 RJ CKP STA4 SA1 B6+B1 SB6 B6+2 SX1 X1 NZ X1,STA6 IF COMMAND USED STA5 LT B6,B7,STA4 IF STILL MORE COMMANDS TO CEHCK EQ STA7 RETURN STA6 RJ DCV CONVERT NUMBER SA1 STAA FORMAT MESSAGE MX2 24 MX3 36 BX5 -X3*X6 AX6 24 BX6 -X2*X6 BX1 X2*X1 BX6 X1+X6 SA6 A1 SA1 B6-2 GET COMMAND NAME MX6 42 BX1 X6*X1 RJ SFN SPACE FILL NAME BX2 X6 SET UP FIRST FIVE CHARACTERS OF NAME AX6 30 LX5 36 BX6 X5+X6 SX7 1R LX7 30 BX6 X6+X7 SA6 A6+B1 MX7 12 SET UP LAST TWO CHARACTERS OF NAME LX2 30 BX6 X7*X2 SA1 =8R COMMAND BX6 X1+X6 SA6 A6+B1 SA1 =4L(S). BX6 X1 SA6 A6+B1 MESSAGE STAA,,R EQ STA5 STA7 TIME STAF RTIME STAG SA1 CPTIME MX6 -12 BX2 -X6*X1 AX1 12 SX5 1000 IX4 X1*X5 IX4 X4+X2 TOTAL CPU TIME PREVIOUSLY (MS) SA1 STAF BX2 -X6*X1 AX1 12 IX3 X1*X5 IX3 X3+X2 TOTAL CPU TIME CURRENTLY (MS) IX4 X3-X4 ELASPED CPU TIME (MS) SA1 STAG SA2 START MX3 -36 BX1 -X3*X1 BX2 -X3*X2 IX1 X1-X2 ELAPSED TIME NG X1,STA8 DEADSTART RECVOERY HAS OCCURRED SX5 100*1000 IX4 X4*X5 IX1 X4/X1 RJ DCV CONVERT NUMBER SA1 STAE MX2 -36 BX7 X6 AX6 24 BX6 -X2*X6 BX6 X6+X1 SA6 A1 SA1 A1+B1 MX2 24 LX7 36 BX6 X2*X7 BX6 X6+X1 SA6 A1 MESSAGE STAE,,R EQ STAX STAA DATA 10HIAFX STAB BSSZ 6 STAC CON VTNL DATA C*USERS TOTAL.* CON LINB DATA C*USERS MAXIMUM.* CON VANL DATA C*USERS ACTIVE.* CON RECS DATA C*USERS RECOVERED.* CON SPRA DATA C*WORDS MAX. FL.* CON SPRB DATA C*FL INCREASES.* CON SPRL DATA C*FL DECREASES.* CON SPRF DATA C*SECS. MAX. INTERVAL* CON LINA DATA C*INCORRECT LOG IN(S).* CON VABL DATA C*ABNORMAL OCCURRENCES.* CON CPBM DATA C*POTS LOW.* CON VTSR DATA C* TSEM REJECTS DUE TO FULL QUEUE.* CON VTGR DATA C* TGPM REJECTS DUE TO NO POTS AVAILABLE.* CON VPPL DATA C*TIMES NO PPU.* CON TSYS+1 DATA C*BASIC RUNS.* CON TSYS+2 DATA C*FORTRAN RUNS.* CON TSYS+4 DATA C*EXECUTES.* CON INPA DATA C*INPUT RESPONSES.* * NETWORK STATISTICS. STAD BSS 0 QUAL IAFEX4 CON BLTC DATA C*BLOCKS LOST.* CON IDBC DATA C*INCORRECT DATA BLOCKS.* CON ISMC DATA C*INCORRECT SUPERVISORY MESSAGES.* CON LGLC DATA C*LOGICAL ERRORS.* CON NAKC DATA C*BLOCKS NAK.* CON NPBC DATA C*NETPUTS BUSY.* CON DSXC DATA C*DRIVER STACK EXITS.* CON MSXC DATA C*MONITOR STACK EXITS.* QUAL * CON 0 END OF TABLE * CPU USAGE MESSAGE. STAE DATA 4LIAFX DATA 6R PERCE DATA C*NT CPU USAGE.* STAF CON 0 STAG CON 0 STAH DATA C*CPU UTILIZATION INDETERMINATE.* TITLE COMMON DECKS. *CALL COMCCIO *CALL COMCCPM *CALL COMCCOD *CALL COMCLFM *CALL COMCSFN *CALL COMCSYS QUAL EJECT TTL IAFEX4 - IAFEX/NETWORK INTERFACE. QUAL IAFEX4 IDENT IAFEX4,TNI,,1,1 *COMMENT IAFEX - *IAF/NAM* INTERFACE. COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992. SPACE 4 *** IAFEX4 - IAFEX/NETWORK INTERFACE. * P.D. FARRELL 77/03/17. IAFEX4 SPACE 4 *** IAFEX4 PROVIDES THE INTERFACE BETWEEN IAFEX AND * NETWORK INTERFACE (NAM) TERMINALS. IAFEX4 OPERATES * AS AN ADDITIONAL TERMINAL DRIVER, EITHER IN PLACE OF * OR IN PARALLEL WITH THE PPU MULTIPLEXER DRIVER, 1TM, * OR THE INTERNAL STIMULATION DRIVER, 1TN. IAFEX4 * IS LOADED DURING IAFEX INITIALIZATION ONLY IF NETWORK * TERMINALS HAVE BEEN DEFINED IN THE SYSTEM NETWORK FILE. * BECAUSE IAFEX4 OVERLAYS TRANSACTION TERMINAL PROCESSING * CODE OF THE MAIN EXECUTIVE, BOTH TRANSACTION AND NETWORK * TERMINALS CANNOT BE DEFINED SIMULTANEOUSLY. IAFEX4 TITLE INTERNAL DOCUMENTATION. GLOSSARY SPACE 4,10 ** GLOSSARY OF NETWORK INTERFACE ACRONYMS. * * * ABC APPLICATION BLOCK COUNT (DOWNSTREAM) * ABH APPLICATION BLOCK HEADER * ABL APPLICATION BLOCK LIMIT * ABN APPLICATION BLOCK NUMBER * ABT APPLICATION BLOCK TYPE * ACN APPLICATION CONNECTION NUMBER * ACT APPLICATION CHARACTER TYPE * AIP APPLICATION INTERFACE PACKAGE OR PROCEDURE * ALN APPLICATION LIST NUMBER * APP APPLICATION * BACK BLOCK ACKNOWLEDGEMENT * BT BLOCK TYPE * CS COMMUNICATIONS SUPERVISOR * HA HEADER AREA * TA TEXT AREA * NAM NETWORK ACCESS METHOD * NIP NETWORK INTERFACE PROGRAM * SM SUPERVISORY MESSAGE * SMP SUPERVISORY MESSAGE PROCESSOR * TA TEXT AREA * TL TEXT LENGTH * TLC TEXT LENGTH IN CHARACTERS OR OTHER UNITS AS * DEFINED BY THE ACT OF THE ASSOCIATED DATA BLOCK * TLMAX MAXIMUM LENGTH OF DATA MESSAGE BLOCK TEXT TABLES SPACE 4 ** IAFEX4 TABLE USAGE. * * *IAFEX4* AND THE NETWORK TERMINAL PROCESSING ROUTINES * OF PPU PROGRAM *1TO* USE TERMINAL TABLE WORDS *VFST*, * *VDPT*, AND *VCHT* TO MAINTAIN TERMINAL OPERATIONS PA- * RAMETERS. * * IAFEX4 ALSO USES TWO DYNAMIC TABLES IN ADDITION TO THE * REGULAR, NON-NETWORK TABLES. THESE TABLES, THE MESSAGE * STATUS TABLE AND THE NETWORK ACTIVITY TABLE, ARE * ALLOCATED ONLY IF NETWORK TABLES ARE DEFINED. TABLES SPACE 4,10 ** MESSAGE STATUS TABLE, *VMST*. * * THE MESSAGE STATUS TABLE CONTAINS NETWORK * TERMINAL CONTROL INFORMATION AND SUPERVISORY MESSAGE * POINTERS. * *T, 16/ FLAGS,8/ DT,3/ ABC,3/ ABL,2/ ,5/ TF,5/ NP,6/ PC,12/ TP. * * FLAG BITS: * 59 = TERMINAL ON-LINE. * 58 = NETWORK TYPE. * 0 = NAM/CCP CONNECTION. * 1 = NAM/CDNA CONNECTION. * 57 = BREAK IN PROGRESS. * 56 = SHUTDOWN WARNING SENT. * 55 = END-CONNECTION IN PROGRESS. * 54 = DATA RECEIVED PREVIOUS CYCLE. * 53 = *MSG* BLOCK SENT (INPUT ENABLED). * 52 = OUTPUT PRESENT IN *NAM*. * (THIS FLAG IS USED ONLY DURING BREAK * PROCESSING.) * 51 = TYPEAHEAD IN EFFECT. * 50 = UNUSED. * 49 = BREAK MARKER RECEIVED. * 48 = TIMEOUT FLAG. * 47 = CONNECTION RESET RECEIVED (FC/RST) * 46-44 = TEMPORARY STORAGE FOR REASON CODE. * DT = DEVICE TYPE. * ABC = UNACKNOWLEDGED DOWNSTREAM BLOCK COUNT. * ABL = APPLICATION BLOCK LIMIT. * TF = TRANSLATION FLAGS. * 27 = 74 ESCAPE CODE AT END OF PREVIOUS BLOCK. * 26 = 76 ESCAPE CODE AT END OF PREVIOUS BLOCK. * 25 = NAM TRANSPARENT CONTINUATION. * 24 = PARTIAL LINE AT END OF PREVIOUS BLOCK. * 23 = EXTENDED ASCII OUTPUT (*0011* BYTE). * NP = NUMBER OF POTS ALLOCATED FOR OUTPUT POT STRING. * PC = POT COUNT FOR INTERNAL TYPEAHEAD QUEUE. * TP = TYPEAHEAD POT POINTER. TABLES SPACE 4,10 ** NETWORK ACTIVITY TABLE, *VNAT*. * * THE NETWORK ACTIVITY TABLE INDICATES WHICH * NETWORK TERMINALS REQUIRE SERVICE FROM THE TERMINAL * MANAGER. ONE BIT IS USED FOR EACH NETWORK TERMINAL, * 32 BITS PER CM WORD. A TERMINAL'S ACTIVITY IS SET * WHEN THE TERMINAL REQUIRES SERVICE BY THE NETWORK * DRIVER. A TERMINAL'S ACTIVITY BIT MAY BE FOUND BY * THE FOLLOWING ALGORITHM: * * WORD LOCATION RELATIVE TO START OF TABLE = * * [(TERMINAL NO.) - (FIRST NETWORK TERMINAL NO.)]/32. * * BIT LOCATION RELATIVE TO BIT 59 = * * [(TERMINAL NO.) - (FIRST NETWORK TERMINAL NO.)] MOD 32. RCCW SPACE 4,10 ** RECEIVING DATA CONTROL WORD, *RCCW*. * * THIS SINGLE WORD IS USED BY EACH TERMINAL FOR PROCESSING * INPUT WHICH REQUIRES MORE THAN ONE CYCLE THROUGH THE * TRANSLATION ROUTINE. * *T, 1/F, 23/UNUSED, 18/TLC, 18/CA. * * F = FIRST SEGMENT OF LOGICAL LINE IF SET. * TLC = TEXT LENGTH IN CHARACTERS OF CURRENT BLOCK. * CA = CURRENT ADDRESS IN RECEIVING BUFFER (RCVB). TITLE LOCAL DEFINITIONS. ASCII SPACE 4,10 ** ASCII CHARACTERS USED AS CONSTANTS. ASC.A EQU 0#41 ASCII *A* (UC) ASC.C EQU 0#43 ASCII *C* (UC) ASC.X EQU 0#58 ASCII *X* (UC) ASC.AT EQU 0#40 ASCII COMMERCIAL AT ASC.CF EQU 0#5E ASCII CIRCUMFLEX ASC.CL EQU 0#3A ASCII COLON ASC.CM EQU 0#2C ASCII *,* ASC.CR EQU 0#0D ASCII *CR* ASC.ETX EQU 0#03 ASCII *ETX* ASC.LF EQU 0#0A ASCII *LF* ASC.PD EQU 0#2E ASCII *.* ASC.PL EQU 0#2B ASCII *+* ASC.SP EQU 0#20 ASCII SPACE ASC.US EQU 0#1F ASCII *US* ASC.0 EQU 0#30 ASCII ZERO EXT SPACE 4,10 ** EXT - DISABLE NETWORK CALL MACRO *EXT* PSEUDO-OP. * * THE NETWORK CALL MACROS AS DEFINED IN NETTEXT USE * *EXT* PSEUDO-OPS TO REFERENCE AIP MODULE ENTRY POINTS. * THESE MUST BE DISABLED IN ORDER TO ALLOW ABSOLUTE * ASSEMBLIES. EXT OPSYN NIL MSGHDR SPACE 4,10 ** MSGHDR - GENERATE MESSAGE HEADER. * * GENERATES NETWORK FORMAT MESSAGE HEADER. * * LOC MSGHDR ABT=A,ADR=B,ABN=C,ACT=D,NFE=E,XPT=F,AIM=G,TLC=H. * *ABT* = BLOCK TYPE. * *ADR* = ADDRESS (USUALLY ACN). * *ABN* = APPLICATION BLOCK NUMBER. * *ACT* = CHARACTER TYPE. * *NFE* = NO-FORMAT-AFFECTOR BIT (0 OR 1). * *XPT* = NAM TRANSPARENT MODE BIT (0 OR 1). * *AIM* = AUTO-INPUT MODE BIT (0 OR 1). * *TLC* = TEXT LENGTH IN *ACT* UNITS. * * OMITTED PARAMETERS DEFAULT TO A VALUE OF ZERO. PURGMAC MSGHDR MSGHDR MACROE ABT,ADR,ABN,ACT,NFE,XPT,AIM,TLC VFD 6/ABT,12/ADR,18/ABN,4/ACT,4/0,1/NFE,1/XPT,1/0,1/AIM,12/TLC ENDM NETLINK SPACE 4,10 ** NETLINK - GENERATE NETWORK LINKAGE. * * LINKS TO A NETWORK AIP ENTRY AS LOADED. * * NETLINK ENTRY * ENTRY = NAME OF AIP ENTRY POINT. * * CODE GENERATED: * * ENTRY PS 0 * SA4 ENTRY READ ENTRY POINT * SX5 (AIP) SET AIP ENTRY POINT ADDRESS * (PRESET DURING INITIALIZATION.) * EQ XRJ TRANSFER RETURN JUMP NETLINK MACRO A IFC EQ,*A**,1 ERR NETLINK ENTRY POINT OMITTED. A PS 0 SA4 A SX5 *+400000B EQ XRJ ENDM LIST X *CALL COMSNCD LIST * *CALL COMSSCP TITLE COMMON STORAGE. SPACE 4,10 ORG //TINST+5 TNI BSS 0 DEFINE FWA OF OVERLAY. SPACE 4,10 ** PROCESSOR CONTROL FLAGS. * * FLAG USAGE: * * NONZERO = ON/TRUE/SET. * ZERO = OFF/FALSE/CLEAR. IBSY CON 0 HEADER ADDRESS IF INPUT BUFFER BUSY NBSY CON 0 NAM (PARALLEL MODE) BUSY NDSL CON 0 NETWORK DRIVER STACK LIMIT NTON CON 0 NETWORK CONNECTED OBSY CON 0 OUTPUT BUFFER BUSY PCRX CON 0 PREVIOUS CYCLE FORCED READ EXIT SHDF CON 0 SHUTDOWN ADDRESS: POSITIVE = NORMAL SHUTDOWN NEGATIVE = FORCED SHUTDOWN SUPA CON 0 SUPERVISORY MESSAGE AVAILABLE SPACE 4,10 ** INTERESTING STATISTICS. BLTC CON 0 BLOCK-LOST COUNT DSXC CON 0 DRIVER STACK EXIT COUNT IDBC CON 0 INCORRECT DATA BLOCK COUNT ISMC CON 0 INCORRECT SUPERVISORY MESSAGE COUNT LGLC CON 0 LOGICAL ERROR COUNT MSXC CON 0 MONITOR STACK EXIT COUNT NAKC CON 0 *NAK* COUNT NGBC CON 0 NETGET BUSY COUNT NPBC CON 0 NETPUT BUSY COUNT SPACE 4,10 ** DATA STORAGE. CCFC CON 0 CURRENT CYCLE FUNCTION COUNT COMPLEMENT HACN CON 0 HIGHEST ACN ACTIVE NCIN CON 0 NUMBER OF CHARACTERS ON INPUT LINE NDSA CON 0 NETWORK DRIVER STACK ADDRESS NFRT CON 0 NETWORK FUNCTION REAL TIME CLOCK NGLN CON 0 NETGET LIST OR ACN NUMBER NSPA CON 0 NETWORK DRIVER STACK POINTER ADDRESS NSQP CON 0 NULL SUPERVISORY MESSAGE QUEUE POINTER NSUP CON 0 AIP PARALLEL STATUS RESPONSE OTPP CON 0 OUTPUT MESSAGE POT POINTER RCCW CON 0 RECEIVING DATA CONTROL WORD SMPF CON 0 SUPERVISORY MESSAGE PRIMARY FUNCTION CODE SMSF CON 0 SUPERVISORY MESSAGE SUBFUNCTION CODE TMSI CON 0 TERMINAL MANAGER SCAN INDEX SPACE 4,10 ** AIP TRACE DATA STORAGE. ATMC CON 0 MESSAGE COUNT JPTO DATA 10H"TJOB" JOB FILE TO PROCESS AIP TRACE OUTPUT MXLT CON MXML MAXIMUM MESSAGE LENGTH RWTF DATA 0 REWIND FILE SPECIFIED BY *TJOB* SPACE 4,10 ** TEMPORARY PARAMETERS FOR NETWORK CALLS. NCPA CON 0 PARAMETER A NCPB CON 0 PARAMETER B NCPC CON 0 PARAMETER C NCPD CON 0 PARAMETER D NCAS CON 0 SAVE (A0) NCBS CON 0 SAVE (B2) NCZP CON 0 CONSTANT ZERO FOR RESERVED PARAMETERS SPACE 4,10 ** CANNED SUPERVISORY MESSAGES. * HDRS1 - HEADER FOR ONE WORD MESSAGE (DEFAULT HEADER). HDRS1 MSGHDR ABT=BTSV,ACT=1,TLC=1 * HDRS2 - HEADER FOR TWO WORD MESSAGE. HDRS2 MSGHDR ABT=BTSV,ACT=1,TLC=2 * HDRS3 - HEADER FOR A SYNCHRONOUS SUPERVISORY MESSAGE. HDRS3 MSGHDR ABT=BTSV,ACT=2,TLC=2 * HDRS4 - HEADER FOR *CONEND* WITH PARAMETERS. HDRS4 MSGHDR ABT=BTSV,ACT=1,TLC=8 * CONREQ - CONNECTION REQUEST REPLY. CONREQ VFD 8/PFCN,2/1,6/SFRT,34/0,4/2,6/1 * CONREJ - CONNECTION REJECT. CONREJ VFD 8/PFCN,2/2,6/SFRT,8/0,36/0 * CONEND - END CONNECTION. CONEND VFD 8/PFCN,2/0,6/SFEN,44/0 CON 0 CONEND PARAMETER * FCBRK - CONNECTION BREAK. FCBRK VFD 8/PFFC,2/0,6/SFBK,44/0 * DCTRU - TRUNCATE UPLINE DATA TO IAF BUFFER SIZE. DCTRU VFD 8/PFDC,2/0,6/SFTR,44/0 * FCINI - CONNECTION INITIATION RESPONSE. FCINI VFD 8/PFFC,2/1,6/SFCM,44/0 * INTRES - RESPONSE TO BYPASS INTERRUPT FROM USER. INTRES VFD 8/PFIN,2/0,6/SFRS,44/0 * LSTFDX - LIST CONTROL, FULL DUPLEX - CANCEL TYPEAHEAD. LSTFDX VFD 8/PFLS,2/0,6/SFFD,44/0 * LSTHDX - LIST CONTROL, HALF DUPLEX - INITIATE TYPEAHEAD. LSTHDX VFD 8/PFLS,2/0,6/SFHD,44/1 * ROMARK - RESUME OUTPUT. ROMARK VFD 8/PFRO,8/0,40/0 * DLTDC - DOWNLINE TERMINAL DEFINITION - CDNA. * MESSAGE HEADER IS USED FOR *0010* CONTROL BYTE PROCESSING. DLTDC MSGHDR ABT=BTSV,ACT=2 * DLTDF - DOWNLINE TERMINAL DEFINITION - CCP. * MESSAGE HEADER IS USED BY BOTH *0006* AND *0016* CONTROL * BYTE PROCESSING. MESSAGE TEXT IS USED BY *0006* CONTROL * BYTE PROCESSING ONLY. DLTDF MSGHDR ABT=BTSV,ACT=2 VFD 8/PFTC,8/SFDM,8/70D,8/0,8/52D,8/1,8/57D,4/0 VFD 4/0,8/58D,8/0,8/60D,8/0,8/56D,8/0,8/59D SPACE 4,10 ** CANNED DATA MESSAGES. * HDRM - GENERAL IVT ASCII MESSAGE HEADER. HDRM MSGHDR ABT=BTBK,ACT=2 * HDRAI - AUTO-INPUT MODE MESSAGE HEADER. HDRAI MSGHDR ABT=BTMS,ACT=2 * HDRB - NAM TRANSPARENT OUTPUT MESSAGE HEADER. HDRB MSGHDR ABT=BTBK,ACT=2,XPT=1 * DMBI - NULL MSG BLOCK. DMBI MSGHDR ABT=BTMS,ACT=4,TLC=10 DATA 1L, * DMBL - BELL MESSAGE. DMBL MSGHDR ABT=BTBK,ACT=2,TLC=4 DATA 0#2C07071FS28 DMBLL EQU *-DMBL * DMIC - * INCORRECT COMMAND.* DMIC MSGHDR ABT=BTBK,ACT=4,TLC=40 DATA 10L INCORREC DATA 10LT COMMAND. DATA 2L DATA 1L DMICL EQU *-DMIC * DMID - "IDLE". DMID MSGHDR ABT=BTMS,ACT=4,TLC=20 DATA 5L IDLE DATA 1L DMIDL EQU *-DMID * DMIF - "INCORRECTLY FORMATTED DATA." DMIF MSGHDR ABT=BTBK,ACT=4,TLC=50 DATA 10L INCORREC DATA 10LTLY FORMAT DATA 10LTED DATA. DATA 1L DATA 1L DMIFL EQU *-DMIF * DMIN - "*INTERRUPTED*" DMIN MSGHDR ABT=BTMS,ACT=4,TLC=30 DATA 10L *INTERRU DATA 5LPTED* DATA 1L DMINL EQU *-DMIN * DMIP - INPUT PROMPT. DMIP MSGHDR ABT=BTMS,ACT=4,TLC=10 DATA 3L,? * DMIT - "INCORRECTLY FORMATTED TRMDEF DATA." DMIT MSGHDR ABT=BTBK,ACT=4,TLC=50 DATA 10L INCORREC DATA 10LTLY FORMAT DATA 10LTED TRMDEF DATA 6L DATA. DATA 1L DMITL EQU *-DMIT * DMLP - " WRITE ON READ-ONLY FILE." DMLP MSGHDR ABT=BTMS,ACT=4,TLC=40 DATA 10L0 WRITE ON DATA 10L READ-ONLY DATA 6L FILE. DATA 1L DMLPL EQU *-DMLP * DMNP - " NO PRIMARY FILE." DMNP MSGHDR ABT=BTMS,ACT=4,TLC=30 DATA 10L0 NO PRIMA DATA 8LRY FILE. DATA 1L DMNPL EQU *-DMNP * DMOV - " *OVL*". DMOV MSGHDR ABT=BTMS,ACT=4,TLC=20 DATA 7L *OVL* DATA 1L DMOVL EQU *-DMOV * DMRC - "RUN COMPLETE." DMRC MSGHDR ABT=BTMS,ACT=4,TLC=30 DATA 10L RUN COMP DATA 5LLETE. DATA 1L DMRCL EQU *-DMRC * DMRDY - "READY." DMRDY MSGHDR ABT=BTMS,ACT=4,TLC=20 DATA 8L READY. DATA 1L DMRDYL EQU *-DMRDY * DMSH - "NETWORK SHUTDOWN - PLEASE LOGOUT." DMSH MSGHDR ABT=BTMS,ACT=4,TLC=50 DATA 10L0 NETWORK DATA 10LSHUTDOWN - DATA 10L PLEASE LO DATA 5LGOUT. DATA 1L0 DMSHL EQU *-DMSH * DMSL - */* (OR *SLASH*). DMSL MSGHDR ABT=BTMS,ACT=4,TLC=10 DATA 2L,/ DMSLL EQU *-DMSL * DMTO - " TERMINAL TIMEOUT IN NNN SECONDS. " DMTO MSGHDR ABT=BTMS,ACT=4,TLC=50 DATA 10L TERMINAL DATA 10LTIMEOUT IN DMTOS DATA 6R SECON DATA 2LDS DATA 1L DMTOL EQU *-DMTO NDR TITLE NDR - NETWORK DRIVER MAIN CONTROL. NDR SPACE 4,10 ** NDR - NETWORK DRIVER MAIN CONTROL. * * THIS IS THE MAIN CONTROL LOOP OF THE NETWORK DRIVER. * * ENTRY (PCRX) = SET IF EXIT FORCED ON PREVIOUS CYCLE. * (DBUG) = DRIVER DEBUG STATUS. * * EXIT (PCRX) = SET IF EXIT FORCED. * * CALLS CCT, CFX, CKP, GLM, GTM, MGR, NON, NSQ, * RDM, RTF, SHA, SHD. NDR SUBR ENTRY/EXIT * CHECK DEBUG SWITCH. SA2 DBUG READ DRIVER DEBUG WORD MX6 -12 BX3 -X6*X2 MASK BYTE 4 NZ X3,NDRX IF BYTE 4 SET, EXIT LX6 12 MOVE BYTE 3 TO BYTE 4 BX1 -X6*X2 AX1 12 BX6 X2+X1 SA6 A2+ REWRITE DEBUG WORD * CHECK CONNECTION STATUS. SX7 -NFCL SA1 NTON READ NETON FLAG SX6 B0+ SA6 NDSL SA7 CCFC NZ X1,NDR1 IF NTON SET RJ NON TRY TO CONNECT EQ NDRX EXIT * CHECK SHUTDOWN STATUS. NDR1 SA1 VSHD CHECK SCP STATUS SA2 SHDF READ SHUTDOWN FLAG PL X1,NDR2 IF NO SCP FAILURE PL X2,SCF IF IMMEDIATE SHUTDOWN NOT IN PROGRESS NDR2 ZR X2,NDR3 IF NO SHUTDOWN IN PROGESS RJ SHD PROCESS SHUTDOWN NG X6,NDRX IF IMMEDIATE SHUTDOWN * CHECK NETWORK STATUS. NDR3 SA1 NBSY GET PREVIOUS CYCLE STATUS ZR X1,NDR4 IF NAM NOT BUSY PREVIOUS CYCLE RJ CKP CHECK NAM STATUS NZ X6,NDRX IF NAM BUSY, EXIT NDR4 RJ RTF RELEASE TRACE FILE NZ X6,NDRX IF NAM BUSY, EXIT * POSTPROCESS PREVIOUS CYCLE NETWORK CALL. SA4 IBSY CHECK FOR INPUT ZR X4,NDR5 IF NO INPUT RJ RDM PROCESS MESSAGE NZ X6,NDRX IF UNABLE TO PROCESS AT THIS TIME SA1 NBSY SA2 CCFC INCREMENT FUNCTION COUNT NZ X1,NDRX IF NAM BUSY, EXIT SX7 X2+B1 SA7 A2 PL X7,NDRX IF FUNCTION LIMIT, EXIT * PROCESS ASYNCHRONOUS SUPERVISORY MESSAGES. NDR5 SA1 SUPA CHECK FOR SUPERVISORY MESSAGE SA2 NDSL CHECK STACK LIMIT NZ X2,NDRX IF STACK LIMIT, EXIT ZR X1,NDR6 IF NO MESSAGE WAITING SB2 B0+ RJ GTM GET MESSAGE, (B2) = ACN 0 NZ X6,NDRX IF NAM BUSY, EXIT ZR X2,NDR6 IF NO MESSAGE RJ RDM PROCESS MESSAGE NZ X6,NDR12 IF UNABLE TO PROCESS AT THIS TIME SA1 NBSY SA2 CCFC INCREMENT FUNCTION COUNT NZ X1,NDRX IF NAM BUSY, EXIT SX7 X2+B1 SA7 A2 NG X7,NDR5 IF NOT FUNCTION LIMIT EQ NDRX EXIT * TRANSMIT NULL SUPERVISORY MESSAGE QUEUE. NDR6 SA1 NSQP CHECK QUEUE POINTER ZR X1,NDR7 IF EMPTY RJ NSQ TRANSMIT NULL QUEUE NZ X6,NDRX IF NAM BUSY, EXIT * EXECUTE TERMINAL MANAGER. NDR7 RJ CFX CHECK FOR FORCED EXIT NZ X6,NDRX IF FORCED EXIT RJ MGR EXECUTE TERMINAL MANAGER NZ X6,NDRX IF FORCED EXIT OR STACK LIMIT * CHECK IF IT IS TIME TO REQUEST INPUT. SA1 PCRX CHECK PREVIOUS CYCLE READ EXIT SA6 A1+ CLEAR FLAG NZ X1,NDR8 IF FORCED READ EXIT PREVIOUS CYCLE RJ CCT CHECK CYCLE TIME ZR X6,NDRX IF NOT TIME FOR INPUT, EXIT * REQUEST DATA OR SUPERVISORY MESSAGE FROM NETWORK. NDR8 SA1 SUPA CHECK FOR SUPERVISORY MESSAGE SX2 B1 SET (X2) = LIST 1 SB2 B0 SET (B2) = ACN 0 ZR X1,NDR9 IF NO SUPERVISORY MESSAGE QUEUED RJ GTM GET MESSAGE, ACN =0 EQ NDR11 CHECK NAM BUSY NDR9 RJ CFL CHECK AVAILABLE POT COUNT PL X2,NDR10 IF MINIMUM OR ABOVE, GET INPUT FROM NAM RJ CKP CHECK NAM STATUS SA1 VCPL NZ X1,NDRX IF FL INCREASE PENDING SA1 SPRM INCREMENT THROTTLE FLAG SX6 X1+1 SA6 A1+ EQ NDRX EXIT NDR10 SX2 B1 SET (X2) = LIST 1 RJ GLM GET DATA LIST MESSAGE NDR11 NZ X6,NDR12 IF NAM BUSY ZR X2,NDRX IF NO MESSAGE, EXIT SA1 NDSL CHECK STACK LIMIT NZ X1,NDR12 IF STACK LIMIT RJ RDM PROCESS MESSAGE NZ X6,NDR12 IF UNABLE TO PROCESS AT THIS TIME * CONTINUE READING IF WE CAN. SA2 CCFC INCREMENT CYCLE FUNCTION COUNT SA3 NBSY NZ X3,NDR12 IF NAM BUSY SX7 X2+B1 INCREMENT FUNCTION COUNT SA7 A2 NZ X7,NDR8 IF NOT CYCLE LIMIT, LOOP RJ CFX CHECK FOR FORCED EXIT ZR X6,NDR8 IF NOT FORCED EXIT, LOOP * SET FORCED READ EXIT FLAG AND EXIT. NDR12 SX6 B1+ SET FORCED READ EXIT FLAG SA6 PCRX EQ NDRX EXIT MGR TITLE MGR - TERMINAL MANAGER. MGR SPACE 4,20 ** MGR - TERMINAL MANAGER. * * SCANS THE NETWORK TERMINAL TABLES AND MESSAGE STATUS * TABLES AND DIRECTS PROCESSING AS REQUIRED FOR EACH * ACTIVE TERMINAL. * * *MGR* PERIODICALLY CHECKS THE EXECUTIVES OTHER DRIVER * STACKS AND THE MONITOR REQUEST STACK TO SEE IF THEY * REQUIRE PROCESSING. IF SO, *MGR* WILL EXIT. * * ENTRY NAM NOT BUSY. * (TMSI) = CURRENT SCAN INDEX. * * EXIT (X6) = NONZERO IF FORCED EXIT OR STACK LIMIT. * (CCFC) = CURRENT CYCLE FUNCTION COUNT COMPLEMENT. * * CALLS CFX, GAT, ISW, PDR, PQO, RDM, SSM, TFR, UNQ. MGR SUBR ENTRY/EXIT * CHECK IF IT IS TIME TO CYCLE THE MANAGER. SA2 TMSI GET SCAN INDEX SB2 X2+ (B2) = SCAN INDEX (TERMINAL NUMBER) TX3 X2,-VNTP NZ X3,MGR1 IF NOT STARTING FROM GROUND ZERO BX6 X6-X6 CLEAR ACTIVITY INDICATOR SA2 MGRB SA6 A2 NZ X2,MGR1 IF ACTIVITY PRESENT - CONTINUE PROCESSING SA3 RTIM CURRENT REAL TIME SA4 MGRA TIME OF LAST CYCLE SX5 NMCT SET MINIMUM MANAGER SCAN CYCLE TIME MX6 -36 IX4 X3-X4 ELAPSED TIME BX4 -X6*X4 MASK MILLISECONDS LX7 X3 IX4 X4-X5 COMPARE TO MINIMUM BX6 X6-X6 RETURN (X6) = 0 NG X4,MGRX IF NOT MINIMUM, RETURN SA7 A4+ RESET START TIME * FIND TERMINAL WITH ACTIVITY BIT SET. MGR1 RJ GAT GET ACTIVE TERMINAL NZ X6,MGR2 IF TERMINAL FOUND TX7 B0,VNTP RESET SCAN INDEX SA7 TMSI EQ MGRX RETURN * PROCESS REENTRY. MGR2 SA6 TMSI STORE SCAN INDEX SA6 SSPA SET TERMINAL NUMBER IN SSPA SA1 NDSL CHECK STACK LIMIT NZ X1,MGR7 IF STACK LIMIT RJ PDR PROCESS DRIVER REENTRY NZ X6,MGR6 IF REENTRY PROCESSED * PROCESS FUNCTION REQUEST. SA1 A0+VDCT READ VDCT PL X1,MGR3 IF NOT FUNCTION REQUEST RJ TFR PROCESS REQUEST EQ MGR6 * CHECK FOR QUEUED OUTPUT. MGR3 RJ PQO PROCESS QUEUED OUTPUT NZ X6,MGR6 IF OUTPUT * CHECK FOR SHUTDOWN WARNING. SA4 SHDF CHECK SHUTDOWN FLAG ZR X4,MGR4 IF SHUTDOWN NOT IN PROGRESS TA5 B2,VMST GET VMST ENTRY LX5 59-56 NG X5,MGR4 IF SHUTDOWN WARNING SENT RJ ISW ISSUE SHUTDOWN WARNING EQ MGR6 * CHECK FOR INTERNAL TYPEAHEAD QUEUE. MGR4 TA2 B2,VMST MX6 -12 BX3 -X6*X2 ZR X3,MGR5 IF NO DATA QUEUED SA1 A0+VROT SX3 1S5 BX6 X1*X3 NZ X6,MGR7 IF INPUT REQUEST IS ALREADY SATISFIED MX5 -5 BX5 -X5*X1 SX5 X5-1 SB5 B2 RJ GRT BX5 X4+X5 ZR X5,MGR4.1 IF WAITING TO START A NEW JOB STEP SA1 A0+VFST GET SCREEN MANAGEMENT STATE MX0 -6 AX1 18 BX1 -X0*X1 SX1 X1-/SMFIF/SINP ZR X1,MGR4.1 IF SMFEX IS AWAITING INPUT AX4 48 SX4 X4-INP$ NZ X4,MGR7 IF NOT WAITING FOR PROGRAM INPUT MGR4.1 RJ UNQ UNQUEUE TYPEAHEAD INPUT DATA SX6 B1+ RJ RDM PROCESS MESSAGE EQ MGR6 UPDATE FUNCTION COUNT * CLEAR TERMINAL ACTIVITY BIT. MGR5 TX2 B2,-VNTP SET TERMINAL ORDINAL SX6 37B BX6 X6*X2 TERMINAL ORDINAL MOD 32 AX2 5 TERMINAL ORDINAL/32 TA2 X2,VNAT READ TABLE WORD SB5 X6-59 MX6 -1 AX6 X6,B5 BX6 X6*X2 CLEAR BIT SA6 A2 REWRITE TABLE WORD EQ MGR7 * UPDATE FUNCTION COUNT. MGR6 SA1 CCFC GET FUNCTION COUNT SX7 X1+B1 UPDATE COUNT SA7 A1 * ADVANCE SCAN TO NEXT TERMINAL. MGR7 SA1 HACN GET HIGHEST ACTIVE ACN SA2 NBSY SB2 B2+B1 ADVANCE SCAN TX7 B0,VNTP ASSUME END OF SCAN SB7 X1 (B7) = HIGHEST ACTIVE ACN SX6 B1 PRESET (X6) EXIT STATUS GT B2,B7,MGR8 IF END OF SCAN SX7 B2 SET CURRENT SCAN INDEX MGR8 SA7 TMSI STORE SCAN INDEX NZ X2,MGRX IF NAM BUSY, EXIT SX6 B0+ RESET (X6) EXIT STATUS GT B2,B7,MGRX IF END OF SCAN, EXIT RJ CFX CHECK FOR FORCED EXIT NZ X6,MGRX IF FORCED EXIT SA1 CCFC GET CYCLE FUNCTION COUNT ZR X1,MGRX IF FUNCTION LIMIT EQ MGR1 PROCESS NEXT TERMINAL MGRA CON 0 REAL TIME LAST SCAN MGRB CON 0 ACTIVITY INDICATOR (SET BY CBL) NSQ TITLE NSQ - NULL SUPERVISORY QUEUE PROCESSOR. NSQ SPACE 4,20 ** NSQ - PROCESS NULL SUPERVISORY MESSAGE QUEUE. * * THE NULL SUPERVISORY MESSAGE QUEUE CONSISTS OF THOSE * MESSAGES WHICH, FOR ONE REASON OR ANOTHER, CANNOT BE * ASSIGNED TO A TERMINAL'S MESSAGE STATUS TABLE. * * ENTRY (NSQP) = 30/LAST, 30/FIRST MESSAGE POT POINTER. * * EXIT (NSQP) = UPDATED. * (NBSY) = SET IF NAM BUSY. * (OTPP) = MESSAGE POT POINTER IF NAM BUSY. * (OBSY) = SET IF NAM BUSY. * (X6) = (NBSY). * * USES (NCPA) = HEADER ADDRESS. * (NCPB) = TEXT ADDRESS. * * CALLS DLP, DPT, SSM. NSQ SUBR ENTRY/EXIT NSQ1 SA2 NSQP READ QUEUE POINTER SX6 B0+ ZR X2,NSQX IF QUEUE EMPTY, EXIT SX1 X2 SET MESSAGE POT POINTER * UPDATE QUEUE POINTER. BX2 X2-X1 CLEAR FIRST POT FROM QUEUE POINTER RJ DLP DELINK MESSAGE POT NZ X7,NSQ2 IF POT WAS LINKED SX2 B0+ CLEAR LAST POT POINTER NSQ2 BX7 X2+X7 UPDATE QUEUE POINTER SA7 A2 * EXTRACT ACN FROM MESSAGE. BX2 X1 SET POT ADDRESS LX2 3 TB4 X2,VBMP SA2 B4+B1 READ FIRST MESSAGE WORD MX3 8 MASK PRIMARY FUNCTION CODE BX3 X3*X2 LX3 8 SX5 X3-PFTC NZ X5,NSQ3 IF NOT *PFTC* SA2 B4 READ MESSAGE HEADER AX2 42-24 NSQ3 AX2 24-0 MASK ACN MX3 -12 BX2 -X3*X2 SB2 X2 SET ACN TA2 B2,VMST READ VMST ENTRY ZR X2,NSQ4 IF TERMINAL NOT CONNECTED * TRANSMIT MESSAGE TO NETWORK. RJ SSM SEND SUPERVISORY MESSAGE ZR X6,NSQ1 IF COMPLETE, LOOP FOR NEXT MESSAGE EQ NSQX RETURN * DISCARD MESSAGE IF TERMINAL NO LONGER CONNECTED. NSQ4 SB3 X1 DROP POT(S) SB4 B0 RJ DPT EQ NSQ1 CONTINUE RDM TITLE RDM - RECEIVED DATA MANAGER. RDM SPACE 4,20 ** RDM - RECEIVED DATA MANAGER. * * DIRECTS THE PROCESSING OF A RECEIVED NETWORK MESSAGE. * * ENTRY (IBSY) = MESSAGE HEADER ADDRESS. * (RCVH) = MESSAGE HEADER. * (RCVB) = MESSAGE TEXT. * (NGLN) = .GE. 4 IF DATA REQUESTED FOR SPECIFIC * TERMINAL. * (X6) = QUEUED MESSAGE FLAG, 0=NEW, 1=QUEUED. * * EXIT IF MESSAGE PROCESSED: * (X6) = 0. * (IBSY) = 0. * (RCVB) = 0. * (RCVH) = 0. * (PCRX) = 0. * * IF MESSAGE CANNOT BE PROCESSED AT THIS TIME: * (X6) = NONZERO. * * IF NULL MESSAGE RECEIVED: * (PCRX) = ZERO IF DATA NOT REQUESTED FOR * SPECIFIC TERMINAL. * * CALLS ABT, CFL, DCI, GFM, GRT, PIN, QTI, SMP, UAC, VAC. RDM SUBR ENTRY/EXIT SA6 RDMA SAVE QUEUED MESSAGE FLAG * CHECK BLOCK TYPE. RDM1 SA1 RCVH READ MESSAGE HEADER BX2 X1 AX2 54 SHIFT BLOCK TYPE ZR X2,RDM10 IF NULL MESSAGE BLOCK SX5 X2-BTSV ZR X5,RDM3 IF SUPERVISORY MESSAGE NG X5,RDM5 IF DATA MESSAGE (BLK OR MSG BLOCK) * PROCESS ERROR. RDM2 SX6 3RRDM SET ERROR CODE RJ ABT PROCESS ERROR EQ RDM4 * PROCESS SUPERVISORY MESSAGE. RDM3 RJ SMP EXECUTE PROCESSOR * CLEAR INPUT STATUS WORDS AND EXIT. RDM4 BX6 X6-X6 CLEAR INPUT BUFFER SA6 RCVH SA6 A6+B1 SA6 IBSY SET INPUT NOT BUSY EQ RDMX RETURN * INITIALIZE *BLK* AND *MSG* DATA BLOCK PROCESSING. RDM5 BX2 X1 EXTRACT ACN MX6 -12 AX2 42-0 BX7 -X6*X2 LX1 59-17 BLOCK TRUNCATED BIT SB2 X7 SA7 SSPA INITIALIZE (SSPA) NG X1,RDM8 IF BLOCK TRUNCATED RJ VAC VALIDATE ACN NG X6,RDM2 IF INCORRECT ACN TTADD B2,A0,X5,X6 SET TERMINAL TABLE ADDRESS * SET INPUT STATUS AND CLEAR TERMINAL TIMEOUT FLAGS. SX4 B1 LX4 17-0 SA5 A0+VFST CLEAR SCREEN MODE TIMEOUT FLAG BX6 -X4*X5 SA6 A5 REWRITE VFST LX4 48-17 CLEAR TIMEOUT FLAG BX2 -X4*X2 LX4 54-48 SET INPUT RECIEVED FLAG BX6 X4+X2 SA6 A2 REWRITE VMST ENTRY * CHECK FOR DISCARD INPUT CONDITION. LX1 17-59 RESTORE HEADER POSITION RJ DCI DISCARD INPUT IF NECESSARY NZ X0,RDM4 IF INPUT TO DISCARD * CHECK INTERNAL TYPEAHEAD QUEUE. RJ CFL CHECK POT SUPPLY NG X2,RDM7 IF LOW POT SUPPLY SA5 RDMA NZ X5,RDM6 IF THIS IS A QUEUED MESSAGE TA5 B2,VMST MX0 -12 BX5 -X0*X5 NZ X5,RDM5.1 IF QUEUE ALREADY EXISTS, ADD INPUT TO END SA1 A0+VROT SX6 1S5 BX6 X1*X6 NZ X6,RDM5.1 IF INPUT REQUEST IS ALREADY SATISFIED MX5 -5 BX5 -X5*X1 SX5 X5-1 SB5 B2 RJ GRT GET REENTRY BX5 X4+X5 ZR X5,RDM6 IF WAITING TO START A NEW JOB STEP AX4 48 SX4 X4-INP$ ZR X4,RDM6 IF WAITING FOR PROGRAM INPUT SA4 A0+VFST GET SCREEN MANAGEMENT STATE MX0 -6 AX4 18 BX4 -X0*X4 SX4 X4-/SMFIF/SINP ZR X4,RDM6 IF SMFEX IS AWAITING INPUT RDM5.1 RJ QTI QUEUE TYPEAHEAD INPUT MESSAGE RJ SAB SET ACTIVITY BIT EQ RDM4 EXIT * PROCESS INPUT MESSAGE. RDM6 RJ PIN PROCESS INPUT DATA ZR X6,RDM7 IF NOT ENOUGH POTS AVAILABLE PL X0,RDM8 IF OVERFLOW OCCURED SX7 B1 INDICATE INPUT ACCOUNTING SA1 RCVH SET HEADER ADDRESS RJ UAC UPDATE ACCOUNTING EQ RDM4 COMPLETE INPUT PROCESSING * RETURN IF UNABLE TO PROCESS INPUT. RDM7 SX6 B1 (X6) = UNABLE TO PROCESS STATUS EQ RDMX RETURN * PROCESS OVERFLOW OF LOGICAL LINE SIZE. RDM8 BX6 X6-X6 SET OVERFLOW CONDITION SA2 A0+VDPT SX7 VXLL+3 BX7 X2+X7 SA7 A2 RJ DCI DISCARD INPUT EQ RDM4 COMPLETE PROCESSING * CLEAR (PCRX) IF DATA NOT REQUESTED FOR SPECIFIC * TERMINAL. RDM10 SA1 NGLN GET REQUEST LIST/ACN NUMBER BX6 X6-X6 AX1 2 NZ X1,RDM4 IF FOR SPECIFIC ACN SA6 PCRX CLEAR PCRX EQ RDM4 COMPLETE READ PROCESSING RDMA CON 0 QUEUED MESSAGE FLAG SHD TITLE SHD - NETWORK SHUTDOWN PROCESSOR. SHD SPACE 4,20 ** SHD - NETWORK SHUTDOWN PROCESSOR. * * ENTRY (SHDF) = 1/I, 59/ADDR. * I = IMMEDIATE SHUTDOWN BIT. * ADDR = PROCESSING ADDRESS. * (SSCR) = SCP STATUS. * * EXIT AFTER ALL SHUTDOWNS COMPLETE: * (NTON) = OFF. * (SHDF) = ZERO. * (SSCR) = ZERO. * (NFRT) = REAL TIME (SECONDS). * * CALLS CLE, DAP, DPT, ERQ, IDM, NOF, SHA, SRE. * * MACROS MESSAGE. SHD SUBR ENTRY/EXIT SA1 SHDF CHECK SHUTDOWN FLAG SB7 X1+ ZR B7,SHD1 IF NEW SHUTDOWN JP B7 ENTER SEQUENCE * INITIALIZE NORMAL SHUTDOWN. SHD1 TX6 0,VNTP INITIALIZE CURRENT TERMINAL TABLE SA6 SHDB SX6 SHDD SA6 SHDC INITIALIZE DAYFILE COUNTER SX6 B0+ SA6 SHDG CLEAR NON-EJT TERMINAL FLAG NG X1,SHD5 IF IMMEDIATE SHUTDOWN SA1 STIM GET REAL TIME (SECONDS) SX6 =C* SHUTDOWN WARNING.* BX7 X1 SA7 SHDA SET STARTING TIME RJ IDM ISSUE DAYFILE MESSAGE * CHECK IF ALL USERS OFF OR SHOULD BE OFF. SHD2 RJ SHA RESET HIGHEST ACTIVE ACN ZR X6,SHD6 IF ALL USERS OFF SA1 SHDA GET START TIME SA2 STIM GET REAL TIME (SECONDS) SX3 SDTO IX1 X2-X1 ELAPSED TIME IX1 X1-X3 PL X1,SHD6 IF TIME-OUT ELAPSED SB7 SHD2 SET REENTRY ADDRESS * SET SHUTDOWN REENTRY. * * ENTRY (B7) = NORMAL SHUTDOWN ADDRESS IF POSITIVE. * = IMMEDIATE SHUTDOWN ADDRESS IF NEGATIVE. SHD3 SX6 B7+ SET REENTRY ADDRESS PL X6,SHD4 IF NORMAL MX7 1 SET IMMEDIATE SX6 -B7 BX6 X6+X7 SHD4 SA6 SHDF STORE SHUTDOWN ADDRESS EQ SHDX EXIT/REENTER * INITIALIZE IMMEDIATE SHUTDOWN. SHD5 SX6 =C* FORCED NETWORK SHUTDOWN.* RJ IDM ISSUE DAYFILE MESSAGE * DROP OUTPUT AND NULL SUPERVISORY QUEUE POTS. SHD6 SA1 NSQP GET QUEUE POINTER ZR X1,SHD7 IF QUEUE EMPTY SB3 X1 DROP POTS SB4 B0 RJ DPT SX6 B0+ CLEAR QUEUE POINTER SA6 NSQP SHD7 SA1 OBSY CHECK IF OUTPUT LEFT BUSY SA2 OTPP SB7 -SHD8 ZR X1,SHD3 IF NOT BUSY, REENTER ZR X2,SHD3 IF NO POTS TO DROP, REENTER SB3 X2 DROP OUTPUT POT CHAIN SB4 B0 RJ DPT SX6 B0+ CLEAR POINTERS SA6 OBSY SA6 OTPP SB7 -SHD8 SET REENTRY ADDRESS EQ SHD3 REENTER * LOGOFF ALL REMAINING ACTIVE USERS (REENTRY). SHD8 SA1 NDSL CHECK STACK LIMIT SB7 -SHD8 SET REENTRY SA2 SHDB GET CURRENT TERMINAL NUMBER NZ X1,SHD3 IF STACK LIMIT, REENTER TB6 0,VNTP,LTN SB2 X2 SX6 X2+B1 GT B2,B6,SHD10 IF ALL TERMINALS PROCESSED SA6 A2 UPDATE CURRENT TERMINAL TTADD B2,A0,X2,X3 SA2 A0+VUIT ZR X2,SHD8 IF TERMINAL TABLE ALREADY EMPTY MX7 -12 GET EJT ORDINAL BX7 -X7*X2 SA2 A0+VDCT LX2 59-57 SX6 B1 PL X2,SHD8.1 IF USER NOT LOGGED IN NZ X7,SHD8.2 IF EJT ORDINAL SHD8.1 SA6 SHDG FLAG NON-EJT TERMINAL TABLE EQ SHD8 LOOP TO NEXT TERMINAL SHD8.2 SB7 B0+ CLEAR ANY DRIVER REENTRY RJ SRE RJ DAP CLEAR OUTPUT ASSIGNMENTS TA1 B2,VMST DROP VMST POT MX7 -12 BX7 -X7*X1 SB3 X7 SB4 B0 MX7 42 CLEAR POT POINTER MX3 57 CLEAR UNANSWERED BLOCKS LX3 33 BX1 X3*X1 BX7 X7*X1 MX3 1 CLEAR TERMINAL ON LINE PL X7,SHD8 IF TERMINAL NOT ON-LINE, HUP ALREADY SENT BX7 -X3*X7 SA7 A1 REWRITE VMST ZR B3,SHD9 IF NO POT RJ DPT DROP POTS SHD9 SX7 B0 SB3 B0 SX6 /TLX/HUP RJ ERQ ENTER REQUEST TO HANG UP PHONE TX2 B2,-VNTP CLEAR ACTIVITY BIT SX6 37B BX6 X6*X2 TERMINAL ORDINAL MOD 32 AX2 5 TERMINAL ORDINAL/32 TA2 X2,VNAT READ TABLE WORD SB5 X6-59 MX6 -1 AX6 X6,B5 BX6 X6*X2 CLEAR BIT SA6 A2 REWRITE TABLE WORD EQ SHD8 LOOP TO END OF TERMINALS * WAIT FOR ALL TERMINAL TABLES TO BE CLEARED. SHD10 TB2 -1,VNTP INITIALIZE TERMINAL SCAN SX7 B0+ SA7 SHDB SHD11 SB2 B2+B1 ADVANCE TO NEXT TERMINAL TB6 0,VNTP,LTN TTADD B2,A0,X2,X1 GT B2,B6,SHD13 IF ALL TERMINALS HAVE BEEN SCANNED SA1 A0+VUIT ZR X1,SHD11 IF TERMINAL TABLE EMPTY TA3 B2,VMST NG X3,SHD11.1 IF TERMINAL STILL ON-LINE MX6 -12 BX5 -X6*X1 GET EJT ORDINAL MX6 13 SX7 B1 FLAG NON-EMPTY TERMINAL TABLE SA1 A0+VDCT ZR X5,SHD12 IF JOB HAS BEEN DETACHED * CLEAR DRIVER REQUEST FROM VDCT. IF RETRY COUNT EXHAUSTED * ISSUE DAYFILE MESSAGE. LEAVE TERMINAL TABLE INTACT TO * PREVENT POSSIBLE PP HANGS. SA7 SHDB LX6 12 BX6 -X6*X1 CLEAR CURRENT DRIVER REQUEST SA6 A1+ REWRITE VDCT SHD11.1 SA1 SHDC MX6 24 LX6 -6 NZ X1,SHD11 IF NOT TIME TO ISSUE MESSAGE SA2 A0+VFST GET JSN LX2 -6 BX2 X2*X6 SA1 SHDE PUT JSN INTO MESSAGE BX1 -X6*X1 BX6 X1+X2 SA6 A1+ MESSAGE SHDE,,R EQ SHD11 CHECK NEXT TERMINAL SHD12 RJ //CLE CLEAN UP TERMINAL TABLE EQ SHD11 CHECK NEXT TERMINAL SHD13 SA1 SHDG ZR X1,SHD14 IF NO TERMINAL WITHOUT EJT TX6 0,VNTP RESET CURRENT TERMINAL TABLE SA6 SHDB SX6 B0+ SA6 SHDG CLEAR NON-EJT TERMINAL FLAG SB7 -SHD8 EQ SHD15 REPEAT FIRST LOOP SHD14 SA1 SHDB SB7 -SHD10 NZ X1,SHD15 IF AT LEAST ONE TERMINAL REMAINS * SET SHUTDOWN COMPLETE. SHD14.1 RJ NOF ISSUE *NETOFF* REQUEST SX6 =C* NETWORK SHUTDOWN COMPLETE.* RJ IDM ISSUE DAYFILE MESSAGE SX7 B0+ CLEAR NETON STATUS SA1 STIM READ REAL TIME (SECONDS) SA7 NTON SA7 SHDF CLEAR SHUTDOWN FLAG SA7 VSHD CLEAR SCP STATUS MX6 36 SET (X6) STATUS NEGATIVE BX7 X1 SET NETWORK FUNCTION TIME SA7 NFRT EQ NDRX EXIT FROM DRIVER SHD15 SA2 SHDC CHECK DAYFILE COUNTER SX6 X2-1 PL X6,SHD16 IF COUNTER NOT EXPIRED EQ SHD14.1 COMPLETE SHUTDOWN SHD16 SA6 A2+ REWRITE COUNTER EQ SHD3 RETRY LOGOFF SHDA CON 0 SHUTDOWN START TIME SHDB CON 0 NON-EMPTY TERMINAL TABLE FLAG SHDC CON 0 DAYFILE COUNTER SHDD EQU 3000D DAYFILE CONSTANT SHDE DATA 10L **** CANN DATA 10LOT BE DETA DATA 5LCHED. SHDG CON 0 SET IF NO EJT ORDINAL IN TERMINAL TABLE SMP TITLE SMP - SUPERVISORY MESSAGE PROCESSOR. SMP SPACE 4,20 ** SMP - SUPERVISORY MESSAGE PROCESSOR. * * DIRECTS THE PROCESSING OF INCOMING NETWORK SUPERVISORY * MESSAGES. * * ENTRY (RCVH) = MESSAGE HEADER. * (RCVB) = MESSAGE TEXT. * * EXIT TO PRIMARY FUNCTION PROCESSOR VIA *PCS*: * (A0) = TERMINAL TABLE ADDRESS. * (B2) = TERMINAL NUMBER (ACN). * (B3) = PRIMARY FUNCTION CODE. * (X3) = STATUS BITS FROM *CON/END/N*. * (X7) = SUBFUNCTION CODE. * (RCVH) = MESSAGE HEADER. * (RCVB) = MESSAGE TEXT. * (SMPF) = PRIMARY FUNCTION CODE. * (SMSF) = SUBFUNCTION CODE. * * CALLS ABT, PCS, SFE. SMP SUBR ENTRY/EXIT * EXTRACT FUNCTION CODES. SA2 RCVB READ FIRST WORD OF MESSAGE MX5 -24 GET STATUS BITS BX3 -X5*X2 MX5 -6 AX2 44-0 SHIFT SUBFUNCTION CODE BX7 -X5*X2 (X7) = SUBFUNCTION CODE SA7 SMSF SAVE SUBFUNCTION CODE AX2 52-44 SHIFT PRIMARY FUNCTION CODE MX5 -8 BX6 -X5*X2 SB3 X6+ (B3) = PRIMARY FUNCTION CODE SA6 SMPF SAVE PRIMARY FUNCTION CODE LX7 24 FORMAT *SSPA* PARAMETERS LX6 12 SB2 B0 CLEAR TERMINAL NUMBER BX5 X7+X6 (X5) = *SSPA* PARAMETER WORD SB4 B0 SET TABLE SEARCH INDEX MX4 -12 * SEARCH TABLE FOR PRIMARY FUNCTION PROCESSOR. SMP1 SA2 TSMP+B4 READ TABLE ENTRY SB4 B4+B1 SB7 X2 EXTRACT PRIMARY FUNCTION CODE ZR X2,SMPE IF END OF TABLE, ERROR NE B7,B3,SMP1 IF NO MATCH, CONTINUE SEARCH * EXTRACT ACN AND ENTER PRIMARY FUNCTION CODE PROCESSOR. SA1 RCVB ASSUME ACN IN FIRST WORD OF TEXT AX2 18 SHIFT PROCESSOR ADDRESS SB7 X2 SET PROCESSOR ADDRESS AX1 24 PL B7,SMP2 IF ACN IN FIRST WORD OF TEXT SB7 -B7 SA1 RCVH GET ACN FROM HEADER AX1 42 SMP2 BX1 -X4*X1 EXTRACT ACN BX5 X5+X1 MERGE WITH *SSPA* WORD RJ PCS EXECUTE PROCESSOR EQ SMPX EXIT ** SMPE - SUPERVISORY MESSAGE ERROR EXIT. SMPE RJ SFE ISSUE ERROR MESSAGE EQ SMPX EXIT ** TSMP - SMP PRIMARY FUNCTION PROCESSOR TABLE. * * ENTRY 24/, 18/ADR, 18/PFC. * ADR = PROCESSOR ADDRESS. * IF POSITIVE, THIS IS AN ASYNCHRONOUS * SUPERVISORY MESSAGE AND THE ACN IS * CONTAINED IN BITS 35-24 OF THE FIRST * WORD OF THE MESSAGE TEXT. IF NEGATIVE, * THIS IS A SYNCHRONOUS SUPERVISORY MESSAGE * AND THE ACN IS CONTAINED IN BITS 53-42 OF * THE MESSAGE HEADER. * PFC = PRIMARY FUNCTION CODE. TSMP BSS 0 VFD 24/0,18/CON,18/PFCN CONNECT FUNCTION VFD 24/0,18/FCN,18/PFFC TERMINAL FUNCTION VFD 24/0,18/LGL,18/PFLG LOGICAL ERROR VFD 24/0,18/NSH,18/PFSH NETWORK SHUTDOWN VFD 24/0,18/TCH,18/PFCH TERMINAL CHARACTERISTICS VFD 24/0,18/-TCL,18/PFTC TERMINAL CONTROL VFD 24/0,18/USI,18/PFIN INTERRUPT FROM USER VFD 24/0,18/-BIM,18/PFBI BREAK INDICATION MARKER VFD 24/0,18/SMPX,18/PFHO HOP REQUEST (IGNORED) CON 0 END OF TABLE SMP TITLE SMP - PRIMARY FUNCTION CODE PROCESSORS. SMP SPACE 4,10 ** SMP - PRIMARY FUNCTION CODE PROCESSORS. * * THE FOLLOWING DOCUMENTATION IS COMMON TO ALL PRIMARY * FUNCTION CODE PROCESSORS: * * ENTRY (A0) = TERMINAL TABLE ADDRESS. * (B2) = TERMINAL NUMBER (ACN). * (B3) = PRIMARY FUNCTION CODE. * (X7) = SUBFUNCTION CODE. * (RCVH) = MESSAGE HEADER. * (RCVB) = MESSAGE TEXT. * (SMPF) = PRIMARY FUNCTION CODE. * (SMSF) = SECONDARY FUNCTION CODE. * * EXIT (SEE ABOVE): * TO SUBFUNCTION PROCESSOR IF DEFINED. * TO *SMPE* IF ERROR. BIM SPACE 4,10 ** BIM - BREAK INDICATION MARKER, FUNCTION CODE #CA. * * THE BREAK INDICATION MARKER SYNCHRONOUS SUPERVISORY * MESSAGE WAS RECEIVED. THE BREAK MARKER RECEIVED BIT * (BIT 49) IN *VMST* IS SET. * * EXIT (VMST) = BIT 49 SET (BREAK MARKER RECEIVED). * * USES X - 1, 6. * A - 1, 6. * * CALLS VAC. BIM BSS 0 ENTRY RJ VAC VALIDATE ACN NG X6,SMPE IF INCORRECT ACN TA1 B2,VMST SET BREAK MARKER RECEIVED BIT SX6 B1 LX6 49-0 BX6 X1+X6 SA6 A1 REWRITE VMST EQ PCSX EXIT CON SPACE 4,10 ** CON - CONNECT FUNCTION, FUNCTION CODE #63. * * ENTRY (X7) = SUBFUNCTION CODE. * * EXIT TO *CNB* IF CONNECTION BROKEN. * TO *ECR* IF END-CONNECTION RESPONSE. * TO *NWC* IF NEW CONNECTION. * TO APPROPRIATE ROUTINE BASED ON LOAN STATUS VALUE. * TO *CLS1* IF INCORRECT LOAN STATUS OR ERROR. * (X7) = LOAN STATUS VALUE. * (B4) = ERROR MESSAGE INDICATOR. * TO *SMPE* IF ERROR. * * CALLS VAC. CON BSS 0 ENTRY SB6 X7-SFRT CHECK SUBFUNCTION CODE ZR B6,CON1 IF CONNECTION REQUEST RJ VAC VALIDATE ACN NG X6,SMPE IF INCORRECT ACN SB6 X7-SFEN ZR B6,ECR IF *END-CONNECTION* RESPONSE SB6 X7-SFCB ZR B6,CNB IF *CONNECTION BROKEN* EQ SMPE ERROR EXIT CON1 SA3 RCVB+3 GET LOAN STATUS MX5 8 BX5 X5*X3 SB4 3 SET REGISTER FOR *CLS1* LX5 0-52 SB7 X5 SX3 X5-MXLS-1 SX7 ERLS SET INTERNAL ERROR CODE SA1 A0+VDCT CHECK CONNECTION TYPE PL X3,CLS1 IF INDEX OUT OF RANGE SX2 TPCP SET PRIMARY CONNECTION TABLE LX1 59-47 NG X1,CON2 IF CONNECTION IS LOANED SX2 TSCP SET SECONDARY CONNECTION TABLE LX1 59-46-59+47 NG X1,CON2 IF SECONDARY CONNECTION SA1 A0+VUIT CHECK USER NAME NZ X1,CLS1 IF USER LOGGED IN SX2 TNCP SET NEW CONNECTION TABLE CON2 SA1 X2+B7 GET APPROPRIATE ENTRY ZR X1,CLS1 IF NO ENTRY SB7 X1 GET APPROPRIATE ROUTINE ADDRESS SX7 X5 RESTORE LOAN STATUS VALUE IF NO ERROR JP B7 PROCESS CONNECTION TPCP SPACE 4,10 ** TABLE OF PRIMARY CONNECTION PROCESSORS. * (USED FOR LOANED CONNECTIONS) * INDEXED BY LOAN STATUS VALUE (DEFINED IN *COMSNCD*). TPCP INDEX CON,MXLS,( 0 ) INDEX ,PNLS,( CLS1 ) INDEX ,SNLS,( CLS1 ) INDEX ,PALS,( CLS1 ) INDEX ,SCLS,( CLS ) INDEX ,SVLS,( CLS ) INDEX ,SOLS,( CLS ) INDEX ,SFLS,( CLS ) INDEX ,SULS,( CLS ) INDEX ,STLS,( CLS ) INDEX ,SRLS,( CLS ) INDEX ,SALS,( CLS ) INDEX ,SLLS,( CLS ) TPCPL EQU *-TPCP TSCP SPACE 4,10 ** TABLE OF SECONDARY CONNECTION PROCESSORS. * (USED FOR SECONDARY CONNECTIONS) * INDEXED BY LOAN STATUS VALUE (DEFINED IN *COMSNCD*). TSCP INDEX CON,MXLS,( 0 ) INDEX ,PNLS,( CLS1 ) INDEX ,SNLS,( CLS1 ) INDEX ,PALS,( CNB ) INDEX ,SCLS,( CLS1 ) INDEX ,SVLS,( CLS1 ) INDEX ,SOLS,( CLS1 ) INDEX ,SFLS,( CLS1 ) INDEX ,SULS,( CLS1 ) INDEX ,STLS,( CLS1 ) INDEX ,SRLS,( CLS1 ) INDEX ,SALS,( CLS1 ) INDEX ,SLLS,( CLS1 ) TSCPL EQU *-TSCP TNCP SPACE 4,10 ** TABLE OF NEW CONNECTION PROCESSORS. * (USED FOR NEW CONNECTIONS) * INDEXED BY LOAN STATUS VALUE (DEFINED IN *COMSNCD*). TNCP INDEX CON,MXLS,( 0 ) INDEX ,PNLS,( NWC0 ) INDEX ,SNLS,( NWC ) INDEX ,PALS,( CLS1 ) INDEX ,SCLS,( CLS1 ) INDEX ,SVLS,( CLS1 ) INDEX ,SOLS,( CLS1 ) INDEX ,SFLS,( CLS1 ) INDEX ,SULS,( CLS1 ) INDEX ,STLS,( CLS1 ) INDEX ,SRLS,( CLS1 ) INDEX ,SALS,( CLS1 ) INDEX ,SLLS,( CLS1 ) TNCPL EQU *-TNCP FCN SPACE 4,10 ** FCN - TERMINAL FUNCTION, FUNCTION CODE #83. * * ENTRY (X7) = SUBFUNCTION CODE. * * CALLS VAC. FCN BSS 0 ENTRY RJ VAC VALIDATE ACN NG X6,SMPE IF INCORRECT ACN SB6 X7-TFCNL VALIDATE SUBFUNCTION CODE PL B6,SMPE IF INCORRECT SA1 TFCN+X7 GET PROCESSOR ADDRESS SB7 X1+ ENTER PROCESSOR JP B7 ** TFCN - TABLE OF *FCN* SUBFUNCTION PROCESSOR ADDRESSES. TFCN INDEX CON,SFCM+1,( SMPE ) INDEX ,SFAK,( ACK ) BLOCK DELIVERED INDEX ,SFAX,( NAK ) BLOCK NOT DELIVERED INDEX ,SFIN,( INA ) CONNECTION INACTIVE INDEX ,SFCM,( CNM ) CONNECTION MADE INDEX ,SFRS,( SCR ) CONNECTION RESET TFCNL EQU *-TFCN LGL SPACE 4,10 ** LGL - LOGICAL ERROR, FUNCTION CODE #84. * * ISSUES DAYFILE MESSAGE AND COPIES ERROR MESSAGE FROM * RECEIVE BUFFER TO INTERNAL BUFFER. IF THE MESSAGE * WHICH WAS IN ERROR WAS A DATA MESSAGE OR A TERMINAL * DEFINITION SUPERVISORY MESSAGE, THE TERMINAL-S DOWN- * STREAM BLOCK COUNT WILL BE DECREMENTED TO COMPENSATE * FOR THE MESSAGE IN ERROR. * * ENTRY (RCVB) = HEADER OF ERRONEOUS MESSAGE. * (RCVB+1) = TEXT OF ERRONEOUS MESSAGE. * * EXIT TERMINAL BLOCK COUNT DECREMENTED. * DAYFILE MESSAGE ISSUED. * (LGLC) = INCREMENTED. * * CALLS CDD, DBC, IDM, SAB, VAC. LGL BSS 0 ENTRY SA1 RCVB READ MESSAGE FIRST WORD SA3 LGLC UPDATE ERROR COUNT MX2 -8 EXTRACT ERROR CODE SX7 B1 AX1 36 IX7 X7+X3 BX1 -X2*X1 SA7 A3 RJ CDD CONVERT TO DECIMAL SA1 LGLA+1 INSERT IN MESSAGE MX2 -12 BX6 -X2*X6 LX1 -18 BX1 X2*X1 BX6 X6+X1 LX6 18 SA6 A1+ SX6 LGLA ISSUE DAYFILE MESSAGE RJ IDM * SAVE MESSAGE FOR REFERENCE. SA1 RCVB SAVE FIRST THREE WORDS SA2 A1+B1 BX6 X1 SA3 A2+B1 BX7 X2 SA6 LGLB SA7 A6+B1 BX7 X3 SA7 A7+B1 * PROCESS DATA (*BLK* OR *MSG*) BLOCK ERROR. MX4 -6 EXTRACT ACN FROM RETURNED HEADER LX2 6 MX3 -12 BX6 -X4*X2 ZR X6,PCSX IF NULL HEADER SX6 X6-BTSV ZR X6,LGL1 IF SUPERVISORY MESSAGE PL X6,PCSX IF UNDEFINED BLOCK TYPE, RETURN EQ LGL2 CHECK FOR USER ON LINE * PROCESS SUPERVISORY MESSAGE. LGL1 SA1 A2+B1 READ FIRST WORD OF MESSAGE MX6 -8 EXTRACT PRIMARY FUNCTION CODE LX1 8 BX6 -X6*X1 SX6 X6-PFTC CHECK FOR *PFTC* NZ X6,PCSX IF NOT *TERMINAL CONTROL*, RETURN * CHECK FOR VALID USER ON LINE. LGL2 LX2 12 EXTRACT ACN FROM RETURNED HEADER BX2 -X3*X2 SB2 X2+ SET ACN RJ VAC VALIDATE ACN NG X6,PCSX IF NOT VALID ACN ZR X2,PCSX IF NOT ON LINE LX2 59-55 CHECK FOR END CONNECTION NG X2,PCSX IF END OF CONNECTION SET RJ DBC DECREMENT BLOCK COUNT RJ SAB SET TERMINAL ACTIVITY EQ PCSX EXIT LGLA DATA 10H LOGICAL E DATA 8LRROR XX. LGLB BSSZ 3 NSH SPACE 4,10 ** NSH - NETWORK SHUTDOWN, FUNCTION CODE #42. * * CALLS *SHD* TO INITIATE NEW SHUTDOWN. IF THIS IS * AN IMMEDIATE SHUTDOWN, *NSH* EXITS THROUGH *NDRX* * TO BYPASS THE REMAINDER OF THE DRIVER CYCLE. * * ENTRY RCVB BIT 0 = SET, IF IMMEDIATE SHUTDOWN. * * USES X - 1, 2, 6, 7. * A - 1, 2, 6. * * CALLS SHD. NSH BSS 0 ENTRY SA2 RCVB READ MESSAGE SA1 SHDF GET SHUTDOWN FLAG MX6 1 LX2 59-0 CHECK SHUTDOWN TYPE NG X2,NSH1 IF IMMEDIATE SHUTDOWN NZ X1,PCSX IF SHUTDOWN IN PROGRESS, EXIT SX6 B0+ NSH1 NG X1,PCSX IF IMMEDIATE SHUTDOWN IN PROGRESS, EXIT SA6 A1+ SET SHUTDOWN FLAG RJ SHD INITIATE SHUTDOWN PL X6,PCSX IF NORMAL SHUTDOWN, EXIT EQ NDRX EXIT FROM DRIVER TCH SPACE 4,10 ** TCH - TERMINAL CHARACTERISTICS, FUNCTION CODE #64. * * RESETS THE DEVICE TYPE (TERMINAL CLASS) FIELD OF * VMST ENTRY. * * ENTRY (RCVB) = DEVICE TYPE, BITS 16-23. * * EXIT (VMST) = DEVICE TYPE, BITS 36-43. * * CALLS SMPE, VAC. TCH BSS 0 ENTRY RJ VAC VALIDATE ACN NG X6,SMPE IF INCORRECT ACN SA1 RCVB READ MESSAGE MX6 -8 LX6 36-0 SHIFT MASK LX1 36-16 SHIFT MESSAGE DEVICE TYPE BX2 X6*X2 MASK IN NEW DEVICE TYPE BX1 -X6*X1 BX6 X1+X2 SA6 A2+ REWRITE VMST ENTRY EQ PCSX EXIT TCL SPACE 4,10 ** TCL - TERMINAL CONTROL, FUNCTION CODE #C1. * * PROCESSES *TRMDEF* SUPERVISORY MESSAGES FROM THE NETWORK. * * USES X - 1, 7. * A - 1. * B - 3, 4. * * CALLS SMPE, VAC. TCL BSS 0 ENTRY RJ VAC VALIDATE ACN NG X6,SMPE IF INCORRECT ACN SX7 X7-SFDM NZ X7,PCSX IF NOT A *TRMDEF* RESPONSE SA1 RCVB LX1 59-51 PL X1,PCSX IF NORMAL *TRMDEF* RESPONSE SB3 B0 SX6 DMIT SET INCORRECTLY FORMATTED TRMDEF MSG SB4 DMITL RJ ACD ASSIGN CANNED DATA MESSAGE EQ PCSX EXIT USI SPACE 4,10 ** USI - USER INTERRUPT, FUNCTION CODE #80. * * MESSAGE FROM USER WHICH HAS BYPASSED THE TYPEAHEAD QUEUE. * * ENTRY (RCVB) = MESSAGE TEXT, BITS 36-43 CONTAIN PARAMETER * FROM USER, ONE ASCII CHARACTER. * * EXIT APPROPRIATE DRIVER QUEUE ENTRY MADE. * * CALLS ACD, ASV, CTP, ERQ, ETX, GRT, VAC. USI BSS 0 ENTRY RJ VAC VALIDATE ACN NG X6,SMPE IF INCORRECT ACN SA1 RCVB READ MESSAGE TEXT MX3 -8 EXTRACT PARAMETER AX1 36 BX3 -X3*X1 BX7 X3 SAVE PARAMETER FOR BREAK PROCESSING SB4 X3-USB1 ZR B4,BRK IF USER BREAK ONE EQ B4,B1,BRK IF USER BREAK TWO ERRNZ USB2-USB1-1 CODE DEPENDS ON USB2=USB1+1 MX1 -6 SA2 TVXD+X3 READ TRANSLATION OF CHARACTER BX7 -X1*X2 CONVERT TO UPPER CASE LX1 6 BX1 -X1*X2 SX2 X1-7400B NZ X2,USI1 IF TRANSLATION CORRECT BX7 X7+X1 RESTORE *74* ESCAPE CODE USI1 SA7 USIA BX6 X6-X6 SB4 B1 SX7 INTRES RJ ASV ASSIGN RESPONSE MESSAGE SA2 USIA RETRIEVE PARAMETER SB3 B0 BX7 X2 SB7 USI1 ZR X6,PCD IF MESSAGE NOT ASSIGNED, REENTER TA1 B2,VMST CHECK BREAK IN PROGRESS MX3 59 CLEAR TIMEOUT FLAG LX3 48 BX6 X3*X1 SA6 A1 REWRITE VMST SA2 A0+VFST CLEAR SCREEN MODE TIMEOUT FLAG LX3 17-48 BX6 X3*X2 SA6 A2 REWRITE VFST SB5 B2 LX1 59-57 NG X1,PCSX IF BREAK IN PROGRESS SA1 A0+VSTT SA2 A0+VUIT LX1 59-56 NG X1,PCSX IF DETACH IN PROGRESS, EXIT MX1 -12 BX1 -X1*X2 ZR X1,PCSX IF NO EJT ORDINAL ASSIGNED, EXIT SA1 A0+VDCT USER LOGGED IN LX1 59-57 PL X1,PCSX IF USER NOT LOGGED IN LX1 57-50 LX3 X1,B1 BX3 X1+X3 SX6 X7-USDT ZR X6,USI2 IF DETACH REQUEST NG X3,PCSX IF IN AUTO OR TEXT MODE RJ GRT GET REENTRY REQUEST SA1 USIC CHECK REQUEST TYPE BX1 X1-X4 AX4 48 ZR X1,USI8 IF IN INTERRUPTED STATUS SX4 X4-INP$ ZR X4,PCSX IF EXPLICIT INPUT REQUEST * SET UP COMMAND. USI2 SA7 USIA SX3 X7-USDT ZR X3,USI7 IF DETACH COMMAND SX3 X7-USEN SX7 X7-USST SA1 =7LENQUIRE ZR X7,USI3 IF SHORT STATUS REQUEST BX7 X1 NZ X3,USI6 IF NOT ENQUIRE REQUEST USI3 SA7 USIB SA1 A0+VDPT CHECK SOURCE LINE INPUT LX1 59-16 PL X1,USI4 IF NO SOURCE LINE INPUT MX3 -12 LX1 29 MX2 -3 BX3 -X3*X1 GET FIRST POT POINTER BX6 X7 SB3 X3+ LX3 3 LX1 15 TB4 X3,VBMP GET POT ADDRESS BX7 -X2*X1 OFFSET INTO POT SA6 X7+B4 SX6 /TLX/CLI RJ ERQ ENTER COMMAND IN REQUEST QUEUE NG X6,USI5 IF REQUEST NOT TAKEN BX6 X6-X6 CLEAR SOURCE LINE INPUT POINTERS SA6 A0+VDPT EQ PCSX EXIT USI4 SB4 B1 SET TEXT LENGTH SB5 B0 USE FIRST WORD OF POT SX6 USIB RJ CTP COPY DATA TO POTS ZR X6,USI5 IF NO POTS AVAILABLE SX7 B0+ SX6 /TLX/CLI RJ ERQ ENTER QUEUE PL X6,PCSX IF ENTRY MADE USI5 SA2 USIA SB7 USI2 BX7 X2 EQ PCD REENTER USI6 SX6 DMIC SET MESSAGE ADDRESS SB4 DMICL SET MESSAGE LENGTH RJ ACD ASSIGN CANNED MESSAGE EQ PCSX RETURN USI7 SA1 A0+VDCT LX1 59-50 PL X1,USI7.1 IF NOT TEXT MODE RJ ETX CLEAR TEXT MODE BEFORE DETACHING USI7.1 SB3 B0+ SX7 UDRC SET REASON CODE SX6 /TLX/DTJ RJ ERQ ENTER REQUEST PL X6,PCSX IF ENTRY MADE EQ USI5 REENTER USI8 SX6 DMIN *INTERRUPTED* MESSAGE ADDRESS SB4 DMINL SET MESSAGE LENGTH RJ ACD ASSIGN CANNED DATA MESSAGE EQ PCSX RETURN USIA CON 0 STORE PARAMETER USIB CON 0 STORE COMMAND USIC VFD 12/INP$,24///RST,24/0 TFR TITLE TFR - IAFEX FUNCTION REQUEST PROCESSOR. TFR SPACE 4,10 ** TFR - IAFEX FUNCTION REQUEST PROCESSOR. * * PROCESSES EXECUTIVE-TO-DRIVER FUNCTION REQUESTS PASSED * VIA BYTE FOUR AND THE DRIVER REQUEST BIT OF TERMINAL * TABLE WORD *VDCT*. * * ENTRY (X1) = (VDCT). * (A1) = ADDRESS OF VDCT. * * EXIT TO FUNCTION PROCESSOR. * * CALLS ABT, ERQ, PCS. TFR SUBR ENTRY/EXIT MX5 -12 MASK REQUEST CODE BX7 -X5*X1 SX2 X7-/1TD/REQL VALIDATE REQUEST CODE PL X2,TFR3 IF INCORRECT SA3 TTFR+X7 GET PROCESSOR ADDRESS SX5 B2 FORMAT (SSPA) LX7 48 BX5 X7+X5 SB7 X3 TFR1 MX7 13 CLEAR VDCT REQUEST LX7 12 BX7 -X7*X1 SA7 A1 PL X2,TFRX IF INCORRECT REQUEST RJ PCS PROCESS REQUEST * ENTER RESTART JOB REQUEST. TFR2 SB3 B0 FORMAT REQUEST BX7 X7-X7 SX6 /TLX/RES RJ ERQ ENTER REQUEST EQ TFRX RETURN * PROCESS INCORRECT REQUEST CODE. TFR3 SX6 3RTFR SET ERROR CODE RJ ABT PROCESS INTERNAL ERROR SA1 A0+VDCT READ VDCT SX2 B0+ INDICATE INCORRECT REQUEST EQ TFR1 ** TTFR - FUNCTION REQUEST PROCESSOR ADDRESS TABLE. TTFR INDEX CON,/1TD/REQL,( TFR2 ) INDEX ,/1TD/BGI,( BGI ) INDEX ,/1TD/CRR,( CRR ) INDEX ,/1TD/CRR1,( CRR1 ) INDEX ,/1TD/CTM,( CTM ) INDEX ,/1TD/HUP,( HUP ) INDEX ,/1TD/IIP,( IIP ) INDEX ,/1TD/SDU,( SDU ) TITLE FUNCTION PROCESSOR ROUTINES. SPACE 4,10 ** FUNCTION PROCESSOR ROUTINES. * * FUNCTION PROCESSOR ROUTINES ARE OPEN ROUTINES WHICH * EXIT EITHER TO ANOTHER PROCESSOR ROUTINE OR TO A REENTRY * EXIT POINT. THEY NORMALLY EXPECT THE FOLLOWING ENTRY * CONDITIONS PLUS ANY ADDITIONAL ENTRY CONDITIONS AS * DOCUMENTED IN THE INDIVIDUAL ROUTINE: * * ENTRY (A0) = TERMINAL TABLE ADDRESS. * (B2) = TERMINAL NUMBER (ACN). * (SSPA) = REGISTER PARAMETER WORD. ACK SPACE 4,10 ** ACK - BLOCK ACKNOWLEDGED. * * DECREMENTS DOWNSTREAM BLOCK COUNT. * * CALLS ABT, DBC, SAB. ACK BSS 0 ENTRY TA1 B2,VMST READ VMST ENTRY LX1 59-55 CHECK END-CONNECTION BIT NG X1,PCSX IF SET, EXIT RJ DBC DECREMENT BLOCK COUNT NG X6,ACK2 IF BAD BLOCK COUNT ACK1 RJ SAB SET ACTIVITY BIT EQ PCSX EXIT * PROCESS ERROR. ACK2 SX6 3RACK SET ERROR CODE RJ ABT PROCESS ERROR EQ ACK1 AOM SPACE 4,10 ** AOM - ASSIGN OVERFLOW MESSAGE. * * ASSIGNS EITHER *OVL* OR NULL MESSAGE TO NETWORK, * DEPENDING ON CHARACTER COUNT IN *VDPT*. * REENTRANT WAY TO SEND OVERFLOW MESSAGE. AOM BSS 0 ENTRY RJ SOM SEND OVERFLOW MESSAGE EQ PCSX EXIT BGI SPACE 4,10 ** BGI - BEGIN INPUT. * * SENDS AN *MSG* BLOCK TO THE TERMINAL TO ENABLE INPUT * IF AN *MSG* BLOCK WAS NOT THE LAST BLOCK SENT. * * CALLS ACD, PCD. BGI BSS 0 ENTRY TA5 B2,VMST READ VMST ENTRY SB4 B1+B1 MESSAGE LENGTH LX5 59-53 NG X5,PCSX IF *MSG* BLOCK SENT, EXIT SX6 DMBI SET MESSAGE ADDRESS RJ ACD ASSIGN MESSAGE NZ X6,PCSX IF MESSAGE ASSIGNED, EXIT BGI1 SB7 BGI SET REENTRY BX7 X7-X7 SB3 B0 EQ PCD REENTER BRK SPACE 4,10 ** BRK - PROCESS NETWORK BREAK CONDITION. * * PROCESS NETWORK USER BREAKS ONE AND TWO. * * ENTRY (X7) = BREAK REASON CODE. * * CALLS ACD, COA, ERQ, GTM, IFD, ONR, PCD, RDM, RST, * SFE, SSP, SSS. BRK BSS 0 ENTRY SA7 BRKA SAVE BREAK REASON CODE TA5 B2,VMST READ VMST ENTRY MX6 59 CLEAR OUTPUT PRESENT FLAG LX6 48-0 CLEAR TIMEOUT FLAG BX5 X6*X5 LX6 52-48 BX5 X6*X5 SA1 A0+VFST CLEAR SCREEN MODE TIMEOUT FLAG LX6 17-52 BX6 X6*X1 SA6 A1 REWRITE VFST MX6 -3 SB3 B0 LX6 33-0 CHECK ABC BX1 -X6*X5 ZR X1,BRK1 IF OUTPUT NOT PRESENT SX1 B1 SET OUTPUT PRESENT FLAG BRK1 SX4 44B SET BREAK AND DATA RECEIVED BITS BX4 X4+X1 LX4 52-0 BX6 X5+X4 SA6 A5 REWRITE VMST ENTRY LX5 59-57 NG X5,BRK12 IF BREAK ALREADY IN PROGRESS, ERROR * REQUEST OUTSTANDING TERMINAL DATA. * * ENTRY (B3) = 0. * (NBSY) = 0. TA5 B2,VMST READ VMST ENTRY MX2 59 CLEAR DATA-RECEIVED BIT LX2 54-0 BX6 X2*X5 SA6 A5 REWRITE VMST ENTRY LX5 59-55 MX1 -12 NG X5,PCSX IF END CONNECTION SET BX1 -X1*X6 DROP TYPED AHEAD DATA POTS ZR X1,BRK2.1 IF NO POTS SB3 X1 MX1 42 BX6 X1*X6 CLEAR POT POINTER AND COUNT SA6 A5 REWRITE VMST SB4 B0 DROP ENTIRE CHAIN RJ DPT DROP POTS TA1 B2,VMST CHECK NAM TYPEAHEAD SX6 B1 LX6 51-0 BX2 X1*X6 ZR X2,BRK2.1 IF NOT ON BX6 X1-X6 SA6 A1 REWRITE VMST SB4 B0 BX6 X6-X6 SX7 LSTFDX RJ ASV ASSIGN SUPERVISORY MESSAGE BRK2.1 SB7 B0+ RJ SRE CLEAR DRIVER REENTRY SA1 BRKA BX7 X1 BRK3 TA1 B2,VMST LX1 59-49 NG X1,BRK5 IF BREAK MARKER RECEIVED SB7 BRK3 EQ PCD REENTER * SELECT BREAK REASON CODE PROCESSOR. BRK5 SB5 X7-USB2 CHECK REASON CODE SX7 B1+ CLEAR BREAK MARKER RECEIVED TA5 B2,VMST LX7 49 BX7 -X7*X5 SA7 A5+ SX7 TIET ASSUME USER BREAK 1 NG B5,BRK6 IF USER BREAK 1 SX7 TAET ASSUME USER BREAK 2 * PROCESS USER BREAK 1 AND USER BREAK 2. * * ENTRY (X7) = TAET, IF USER BREAK 2. * TIET, IF USER BREAK 1. BRK6 SA1 A0+VDCT READ VDCT SA2 A0+VDPT READ VDPT SA3 A0+VROT READ VROT SA4 A0+VSTT READ VSTT SB3 B0 INDICATE NO POT POINTER SX6 B1 CLEAR INPUT REQUESTED FLAG LX6 56-0 BX6 -X6*X1 SA6 A1 LX4 59-56 NG X4,ROI IF DETACH IN PROGRESS LX1 59-50 CHECK FOR *TEXT* MODE MX6 12 SA4 A0+VUIT BX4 X6*X4 ZR X4,ROI IF NO EJT ORDINAL ASSIGNED LX2 59-16 CHECK FOR INPUT INITIATED MX4 -5 BX3 -X4*X3 LX4 X1,B1 CHECK *AUTO* MODE SX3 X3-1 NG X1,ROI IF IN *TEXT* MODE NG X2,BRK10 IF INPUT INITIATED NZ X3,BRK7 IF ACTIVE NG X4,BRK7 IF AUTO MODE RJ COA CHECK OUTPUT AVAILABLE ZR X4,BRK11 IF OUTPUT NOT PRESENT BRK7 SX6 /TLX/PUB PROCESS USER BREAK RJ ERQ ENTER REQUEST SX7 B1+ SB7 BRK8 EQ PCD REENTER * RESET TERMINAL AFTER INTERRUPT COMPLETION. * (X7) = 1, PROCESSING A USER INITIATED USER BREAK. * (X7) = 0, PROCESSING AN EXECUTIVE INITIATED USER BREAK. BRK8 TA2 B2,VMST SA3 A0+VSTT SA1 A0+VDCT LX2 59-55 CHECK END-CONNECTION FLAG LX3 59-48 CHECK LOGOUT FLAG NG X2,PCSX IF END-CONNECTION SET LX2 X1,B1 CLEAR INTERRUPT COMPLETE MX6 1 BX6 -X6*X2 LX6 58-59 SA6 A1+ REWRITE VDCT NG X3,ROI IF LOGOUT FLAG SET PL X1,BRK9 IF NO DRIVER REQUEST MX3 -12 CHECK DRIVER REQUEST BX4 -X3*X1 SX3 X4-/1TD/HUP ZR X3,ROI IF *HANG UP PHONE* REQUEST BRK9 PL X2,PCD IF INTERRUPT NOT COMPLETE RJ SSS SX6 /TLX/RES SET RESTART REQUEST RJ ERQ ENTER RESTART REQUEST RJ SSP RESTORE X7 NZ X7,ROI IF USER INITIATED TA2 B2,VMST CLEAR BREAK-IN-PROGRESS BIT SX6 B1 LX6 57-0 BX6 -X6*X2 SA6 A2 EQ PCSX EXIT * ISSUE *IDLE* IF NO JOB ACTIVITY TO INTERRUPT. BRK10 MX6 -59 CLEAR INPUT INITIATED BX7 -X6*X2 LX7 16-59 SA7 A2 REWRITE VDPT ENTRY BRK11 SX6 DMID SET IDLE MESSAGE ADDRESS SB4 DMIDL SET MESSAGE LENGTH RJ ACD ASSIGN MESSAGE EQ ROI RESUME OUTPUT * INCREMENT SECOND BREAK RECEIVED COUNTER. BRK12 SA1 BRKB INCREMENT ERROR COUNTER SX6 X1+B1 PX6 B2,X6 SAVE TN AND ERROR COUNT SA6 A1 EQ PCSX EXIT BRKA CON 0 WORD TO SAVE BREAK REASON CODE * STORE THE TOTAL ERROR COUNT WITH THE MOST RECENT * TERMINAL NUMBER THAT DETECTED AN ERROR. BRKB CON 0 12/ TN, 48/ ERROR COUNTER CLS SPACE 4,10 ** CLS - CHECK LOAN STATUS. * * ENTRY (X7) = LOAN STATUS VALUE. * (B4) = ENTRY CONDITION FOR *CLS1*. * = 0, IF NO CALL TO *SFE* OR EXIT TO *CRR*. * = 1, IF ONLY EXIT TO *CRR*. * = 2, IF ONLY CALL TO *SFE*. * > 2, IF CALL TO *SFE* AND EXIT TO *CRR*. * * EXIT TO *CRR* IF CONNECTION RESPONSE IS TO BE ISSUED. * * CALLS ERQ, IDM, PRP, SFE, ZFN. CLS BSS 0 ENTRY SB4 B0 ENTRY CONDITION FOR CALL TO *ZFN* MX0 42 SA1 RCVB+5 GET USERNAME FROM MESSAGE RJ ZFN ZERO FILL USERNAME SB4 3 SET ENTRY CONDITION IN CASE OF ERROR BX2 X0*X6 SA3 A0+VUIT GET USERNAME FROM TERMINAL TABLE BX4 X0*X3 BX4 X4-X2 NZ X4,CLS0 IF NOT THE SAME USERNAME RJ PRP PROCESS RETURN TO PRIMARY EQ CRR1 ISSUE *CON/REQ/N* MESSAGE CLS0 SX7 ERLS SET INTERNAL ERROR CLS1 RJ PRP PROCESS RETURN TO PRIMARY SA2 A0+VDCT CLEAR PRIMARY CONNECTION BIT SX6 B1 LX6 47-0 BX6 -X6*X2 SA6 A2 REWRITE VDCT BX0 X7 SAVE LOAN STATUS VALUE FOR CALCULATION LX7 0-24 SET UP ENTRY FOR DRIVER REQUEST SX6 /TLX/RES SET UP DRIVER REQUEST RJ ERQ ENTER REQUEST IN QUEUE SX1 ERLS BX1 X0-X1 NZ X1,CLS1.5 IF NOT INTERNAL ERROR SA1 A0+VFST INSERT JSN INTO MESSAGE MX0 24 BX1 X0*X1 GET JSN LX1 -6 SHIFT JSN LX0 -6 SHIFT MASK SA2 CLSA BX2 -X0*X2 BX6 X1+X2 INSERT JSN INTO MESSAGE SA6 A2 REWRITE MESSAGE SX6 CLSA SET MESSAGE ADDRESS RJ IDM ISSUE DAYFILE MESSAGE CLS1.5 ZR B4,PCSX IF NO OTHER TASKS WANTED EQ B1,B4,CLS2 IF NO *SMP* MESSAGE WANTED RJ SFE ISSUE IAF DAYFILE MESSAGE CLS2 SB5 B1+B1 EQ B4,B5,PCSX IF NOT TO ISSUE *CON/REJ* EQ CRR ISSUE *CON/REJ* CLSA DATA C* JSNN DETACHED DUE TO APPLICATION SWITCH ERROR.* CNB SPACE 4,10 ** CNB - CONNECTION BROKEN. * * PROCESS INTERRUPTION OF NETWORK TERMINAL CONNECTION. * * ENTRY (X3) = STATUS BITS FROM *CON/CB* MESSAGE * * EXIT TO *CLS1* IF CONNECTION IS LOANED. * (X7) = LOAN STATUS VALUE. * (B4) = ERROR MESSAGE INDICATOR. * * CALLS DAP, DPT, ENC, ERQ, SRE. CNB BSS 0 ENTRY SB3 B0 SA1 A0+VDCT CHECK CONNECTION TYPE LX1 59-47 PL X1,CNB2 IF CONNECTION NOT LOANED * PROCESS LOANED CONNECTION. SB4 B0 SET ENTRY FOR *CLS1* SX7 ERLS SET INTERNAL ERROR ZR X3,CLS1 IF LOAN BIT NOT SET IN MESSAGE SA1 RCVB GET REASON CODE LX1 0-36 MX0 -8 BX1 -X0*X1 SB6 X1 SB5 3 LT B6,B5,CNB1 IF NOT SECONDARY ABORT SX7 SCLS EQ CLS1 PROCESS RETURN FROM SECONDARY ABORT CNB1 SX7 LDLS SET LOAN STATUS FOR LINE DISCONNECT EQ CLS1 PROCESS RETURN FROM LINE DISCONNECT CNB2 BX7 X7-X7 TA1 B2,VMST PL X1,CNB3 IF CONNECTION NOT YET COMPLETE SA1 A0+VSTT SB7 CNB SA2 A0+VDCT LX2 59-57 LX1 59-56 NG X1,PCD IF DETACH IN PROGRESS, REENTER PL X2,PCD IF LOGIN NOT COMPLETE, REENTER CNB3 SB7 B0 RJ SRE CLEAR REENTRY RJ DAP CLEAR OUTPUT ASSIGNMENTS TA1 B2,VMST DROP VMST POT MX7 -12 BX7 -X7*X1 SB3 X7 SB4 B0 MX7 42 CLEAR POT POINTER MX3 57 CLEAR UNANSWERED BLOCKS LX3 33 BX1 X3*X1 BX7 X7*X1 MX3 1 CLEAR TERMINAL ON LINE BX7 -X3*X7 SA7 A1 REWRITE VMST ZR B3,CNB4 IF NO POT RJ DPT DROP POTS CNB4 SB3 B0 CLEAR POT POINTER BX7 X7-X7 SX6 /TLX/HUP SET HANG UP PHONE REQUEST SA1 A0+VUIT CHECK FOR EJT ORDINAL MX3 -12 BX1 -X3*X1 ZR X1,ENC IF NO EJT ORDINAL RJ ERQ ENTER REQUEST EQ PCSX EXIT CNM SPACE 4,10 ** CNM - CONNECTION MADE. * * MAKES 1TA QUEUE ENTRY TO LOGIN USER. * * ENTRY (VDPT(0)) = VALIDATION POT POINTER. * * EXIT TO *PCS1* TO MAKE QUEUE ENTRY. * * CALLS ASV, ITA2 (VIA PCS1). CNM BSS 0 ENTRY TA1 B2,VMST LX1 59-55 NG X1,PCSX IF *CON/CB/R* ALREADY RECEIVED * ISSUE CONNECTION INITIATION RESPONSE. BX6 X6-X6 INDICATE DEFAULT HEADER SB4 B1 TEXT LENGTH = 1 SX7 FCINI ISSUE SUPERVISORY MESSAGE RJ ASV NZ X6,CNM1 IF MESSAGE ISSUED SB3 B0 SET REENTRY BX7 X7-X7 SB7 CNM EQ PCD * BYPASS 1TA LOGIN REQUEST IF SECONDARY RETURNING TO PRIMARY. CNM1 SA1 A0+VDCT CHECK PRIMARY CONNECTION LX1 59-47 PL X1,CNM2 IF NOT RETURN OF SECONDARY CONNECTION MX7 1 CLEAR PRIMARY CONNECTION BIT BX7 -X7*X1 LX7 47-59 SA7 A1 REWRITE VDCT SB3 B0 CLEAR POT POINTER SX6 /TLX/RES SET UP DRIVER REQUEST RJ ERQ ENTER REQUEST EQ PCSX EXIT * ENTER 1TA REQUEST TO LOGIN USER. CNM2 SA1 A0+VDPT GET VALIDATION POT POINTER MX7 12 BX7 -X7*X1 CLEAR VDPT POT POINTER BX1 X1-X7 MASK VDPT POT POINTER SA7 A1 REWRITE VDPT LX1 12 BX7 X7-X7 SX5 ITA2$ SET QUEUE ENTRY SB3 X1+ TA1 B2,VMST SET ON LINE MX6 1 BX6 X6+X1 SA6 A1 REWRITE VMST EQ PCS1 MAKE QUEUE ENTRY CRR SPACE 4,10 ** CRR - CONNECTION REQUEST REPLY. * * EXIT EITHER THE *CON/REQ/N* OR *CON/REJ* * SUPERVISORY MESSAGE HAS BEEN SENT TO NAM. * * CALLS ASV, SHA. CRR BSS 0 ENTRY FOR *CON/REJ* MESSAGE SA1 CONREJ SX3 RTCI LX3 36-0 BX6 X1+X3 EQ CRR2 CONTINUE CRR1 BSS 0 ENTRY FOR *CON/REQ/N* MESSAGE RJ SHA RESET HIGHEST ACTIVITY ACN SA1 CONREQ CONNECTION ACCEPTED BX6 X1 * ISSUE SUPERVISORY MESSAGE. CRR2 SA6 CRRA SX7 A6 BX6 X6-X6 USE DEFAULT HEADER SB4 B1+ SET TEXT LENGTH RJ ASV ASSIGN MESSAGE EQ PCSX EXIT CRRA CON 0 CANNED MESSAGE CTM SPACE 4,10 ** CTM - CANCEL TYPEAHEAD MODE. * * SENDS A *LSTFDX* SUPERVISORY MESSAGE TO *NAM* * TO CANCEL TYPEAHEAD QUEUEING. * * CALLS ASV, PCD. CTM BSS 0 ENTRY BX6 X6-X6 SET DEFAULT HEADER SB4 B1 SET TEXT LENGTH SX7 LSTFDX SET MESSAGE ADDRESS RJ ASV ASSIGN SUPERVISORY MESSAGE NZ X6,CTM1 IF MESSAGE ASSIGNED SB3 B0 SET REENTRY PARAMETERS BX7 X7-X7 SB7 CTM EQ PCD REENTER CTM1 TA1 B2,VMST READ VMST ENTRY MX2 59 LX2 51-0 BX6 X1*X2 CLEAR TYPEAHEAD BIT SA6 A1 REWRITE VMST EQ PCSX EXIT ECR SPACE 4,10 ** ECR - PROCESS *END CONNECTION* RESPONSE. * * PROCESS COMPLETION OF NORMAL LOGOUT OR APPLICATION SWITCH. * * ENTRY (X3) = MESSAGE STATUS BITS. * * EXIT TO *SMPE* IF THE FOLLOWING IS TRUE * END-CONNECTION BIT IS NOT SET. * TO *CLS1* IF ANY OF THE FOLLOWING IS TRUE * LOAN CONFIRMATION BIT IS NOT SET. * THE CONNECTION IS ALREADY LOANED. * * CALLS CLE, DPT, SHA. ECR BSS 0 ENTRY SA1 A0+VDCT CHECK CONNECTION TYPE LX1 59-47 MX2 -12 PL X1,ECR1 IF NOT LOANING CONNECTION SA1 A0+VFST GET APPSW POT POINTER BX4 -X2*X1 ZR X4,ECR0 IF NO POT TO DROP BX6 X2*X1 CLEAR POT POINTER IN VFST SA6 A1 SB3 X4 SB4 B0 DROP TO END OF CHAIN BX0 X3 SAVE MESSAGE STATUS BITS RJ DPT DROP POT BX3 X0 ECR0 SB4 B1+B1 SET REGISTERS FOR *CLS1* LX3 59-0 SX7 ERLS PL X3,CLS1 IF LOAN CONFIRMATION BIT NOT SET LX3 59-1-59+0 NG X3,CLS1 IF CONNECTION ALREADY LOANED EQ PCSX EXIT ECR1 TA1 B2,VMST READ VMST ENTRY LX1 59-55 CHECK END-CONNECTION BIT PL X1,SMPE IF NOT SET, ERROR RJ //CLE CLEAN UP TERMINAL TABLE RJ SHA RESET HIGHEST ACTIVE ACN EQ PCSX EXIT ENC SPACE 4,10 ** ENC - END CONNECTION. * * PROCESSES THE TERMINATION OF THE CURRENT CONNECTION * AND DIRECTS NVF TO SWITCH USER TO ANOTHER APPLICATION * IF DESIRED. * * EXIT *END CONNECTION* SUPERVISORY MESSAGE ISSUED. * (VMST) = END-CONNECTION BIT SET IF LOGOUT REQUEST. * TO *CLS1* IF NO POT POINTER. * (X7) = LOAN STATUS VALUE. * (B4) = ERROR MESSAGE INDICATOR. * * CALLS ASV, DPT, ILV, PCD, SSP, ZFN. ENC BSS 0 ENTRY ZR B3,ENC0 IF NO POT SB4 B0 RJ DPT DROP POT ENC0 SA1 A0+VDCT CHECK CONNECTION TYPE LX1 59-47 PL X1,ENC1 IF CONNECTION NOT BEING LOANED * THIS CONNECTION IS BEING LOANED TO ANOTHER APPLICATION. SX7 ENC0 SAVE ADDRESS SA7 ENCA SA1 A0+VFST GET POT POINTER MX6 -12 SB4 B0 ENTRY FOR *CLS1* BX2 -X6*X1 SX7 ERLS ZR X2,CLS1 IF NO POT POINTER LX2 3 TB4 X2,VBMP CALCULATE POT ADDRESS SA1 B4+B1 GET APPLICATION NAME MX2 42 BX6 X2*X1 RJ ZFN BLANK FILL APPLICATION NAME SA1 CONEND SET STATUS BIT IN MESSAGE SX2 B1 BX7 X2+X1 SA7 B4 STORE MESSAGE IN POT SA6 A7+B1 REWRITE APPLICATION NAME SX7 B4 SET MESSAGE ADDRESS SB4 B1+B1 SET TEXT LENGTH SX6 HDRS4 SET HEADER ADDRESS EQ ENC4 CONTINUE * SET END-CONNECTION IN VMST. ENC1 TA1 B2,VMST READ VMST ENTRY ZR X1,PCSX IF NO USER MX6 1 LX1 59-55 CHECK END-CONNECTION BIT NG X1,PCSX IF ALREADY SET BX6 X1+X6 SET BIT LX6 55-59 SHIFT RESTORE SA6 A1+ REWRITE VMST * DO NOT SEND MESSAGE WHEN SECONDARY CONNECTION HAS ABORTED. SA2 A0+VROT CHECK LOAN STATUS VALUE MX1 -12 LX1 24-0 BX2 -X1*X2 ZR X2,ENC2 IF NO LOAN STATUS VALUE SX7 B0 CLEAR LOAN STATUS VALUE RJ ILV EQ ECR CONTINUE PROCESSING * SET UP CONNECTION TERMINATION MESSAGE. ENC2 SX7 ENC2 SAVE REENTRY ADDRESS SA7 ENCA SX7 CONEND SET MESSAGE ADDRESS SA1 A0+VFNT MX6 42 BX6 X6*X1 SA1 ENCB SET DEFAULT NVF PARAMETER ZR X6,ENC3 IF NO NVF PARAMETER BX1 X6 ENC3 SB4 B1+B1 SET TEXT LENGTH = 2 RJ ZFN BLANK FILL NVF PARAMETER SA6 CONEND+1 SX6 HDRS2 SET HEADER ADDRESS * ISSUE SUPERVISORY MESSAGE. ENC4 RJ ASV ASSIGN MESSAGE RJ SSP SA1 ENCA GET REENTRY ADDRESS SB7 X1+ ZR X6,PCD IF MESSAGE NOT ASSIGNED, REENTER EQ PCSX EXIT ENCA CON 0 REENTRY ADDRESS ENCB DATA C*BYE* HUP SPACE 4,10 ** HUP - HANG UP PHONE. * * * PROCESS REQUEST TO TERMINATE CONNECTION. * * ENTRY (VFST) = NVF LOGOFF PARAMETER * * EXIT TO *ENC*. * (VSTT) = POT POINTER CLEARED. * * CALLS CBL, ENC, PCD, SSS. HUP BSS 0 ENTRY * WAIT UNTIL DOWNSTREAM BLOCKS ARE ACKNOWLEDGED. RJ CBL CHECK BLOCK LIMIT SB7 HUP SET REENTRY BX7 X7-X7 NZ X3,PCD IF BLOCKS OUTSTANDING, REENTER EQ ENC END CONNECTION IIP SPACE 4,10 ** IIP - ISSUE INPUT PROMPT. * * ISSUES INPUT PROMPT IF NOS TRANSPARENT, BINARY, * OR AUTO MODE IS NOT SET. * * EXIT INPUT PROMPT ISSUED. * (VDCT) = INPUT INITIATED BIT 56 SET. * * CALLS ACD, PCD. IIP BSS 0 ENTRY SA3 A0+VDCT GET VDCT SX6 B1 SET *INPUT INITIATED* BIT LX6 56-0 BX6 X6+X3 LX3 59-49 SA6 A3 REWRITE VDCT NG X3,PCSX IF AUTO MODE, EXIT * ISSUE PROMPT MESSAGE. IIP1 RJ IPM ISSUE PROMPT MESSAGE NZ X6,PCSX IF MESSAGE ASSIGNED, EXIT SB7 IIP1 SET REENTRY ADDRESS SB3 B0 BX7 X7-X7 EQ PCD REENTER INA SPACE 4,20 ** INA - USER INACTIVE. * * INDICATES THAT USER HAS HAD NO TERMINAL ACTIVITY * FOR A PERIOD OF TIME EQUAL TO THE INSTALLATION NET- * WORK OPTION. CALLS EXECUTIVE TO LOGOFF USER IF THE * VALIDATION NO-TIME-OUT BIT IS NOT SET, ELSE RETURNS. * IF A TERMINAL IS IN SCREEN MODE, THE TIMEOUT PERIOD * IS TWICE THE INSTALLATION NETWORK OPTION. TO * ACCOMPLISH THIS, THE SCREEN MODE TIMEOUT BIT IS SET * ON THE FIRST PASS THROUGH *INA*. ON THE SECOND * PASS THROUGH *INA*, THIS BIT IS CHECKED AND IF IT * IS SET, THE TERMINAL IS TIMED OUT. * * ENTRY (VDCT) = NO-TIME-OUT BIT, BIT 22. * (VFST) = SCREEN MODE TIMEOUT FLAG, BIT 17. * (VSTT) = SCREEN MODE, BIT 49. * * EXIT (VMST) = TIMEOUT FLAG, BIT 48. * (VFST) = SCREEN MODE TIMEOUT FLAG, BIT 17. * * CALLS DAP, ENC, ERQ, RPT, SRE. INA BSS 0 ENTRY * CHECK CONNECTION TYPE. SA1 A0+VDCT LX1 59-47 PL X1,INA0 IF CONNECTION IS NOT LOANED SB4 B0 SET ENTRY FOR *CLS1* SX7 ERLS SET ENTERNAL ERROR EQ CLS1 PROCESS ERROR * EXIT IF THERE IS CURRENT USER ACTIVITY. INA0 TA1 B2,VMST READ VMST ENTRY SA2 A0+VROT READ VROT SX7 B1 SET TIMEOUT FLAG LX7 48 BX7 X1+X7 SX1 X1 NZ X1,PCSX IF MESSAGE ASSIGNED, EXIT LX2 59-0 CHECK VROT ACTIVITY BIT NG X2,INA1 IF NO JOB ACTIVITY SA2 A0+VFST CHECK SMF CONNECTION STATE MX3 6 LX3 24 BX2 X2*X3 ZR X2,PCSX IF ACTIVE AND NOT SMF, EXIT INA1 SA2 A0+VUIT CHECK EJT ORDINAL MX3 -12 BX2 -X3*X2 ZR X2,PCSX IF NO EJT ORDINAL ASSIGNED, EXIT SA3 A0+VDCT NG X3,PCSX IF DRIVER REQUEST, EXIT SA1 A0+VCHT CHECK FOR REENTRY MX6 36 BX1 X6*X1 NZ X1,PCSX IF REENTRY SET, EXIT SA1 A0+VSTT LX1 59-56 NG X1,PCSX IF DETACH IN PROGRESS, EXIT LX3 59-22 CHECK NO-TIME-OUT BIT SB3 B0 INDICATE NO POTS TO DROP NG X3,PCSX IF NO-TIME-OUT SB7 B0 SA1 A0+VSTT CHECK FOR SCREEN MODE IN EFFECT SA3 A0+VFST CHECK SCREEN MODE TIMEOUT FLAG LX1 59-49 PL X1,INA2 IF NOT IN SCREEN MODE LX3 59-17 NG X3,INA2 IF SCREEN MODE TIMEOUT MX6 1 SET SCREEN MODE TIMEOUT FOR NEXT PASS BX6 X6+X3 LX6 17-59 SA6 A3 REWRITE VFST EQ PCSX EXIT * CLEAR UNACKNOWLEDGED BLOCKS AND ISSUE DOWNLINE BREAK. INA2 MX6 -3 CLEAR APPLICATION BLOCK COUNT LX6 33 BX7 X6*X7 BX6 X6-X6 USE DEFAULT SUPERVISORY MESSAGE HEADER TA7 B2,VMST REWRITE *VMST* SB4 B1+ SX7 FCBRK SEND CONNECTION BREAK SUPERVISORY MESSAGE RJ ASV SB3 B0 BX7 X7-X7 SB7 INA2 ZR X6,PCD IF MESSAGE NOT ISSUED INA3 TA3 B2,VMST CHECK FOR CONNECTION RESET RECEIVED LX3 59-47 NG X3,INA4 IF CONNECTION RESET HAS BEEN RECEIVED BX7 X7-X7 SB7 INA3 EQ PCD REENTER * CONNECTION RESET RECEIVED, CONTINUE WITH TIMEOUT. INA4 MX7 1 CLEAR CONNECTION RESET RECEIVED BIT BX7 -X7*X3 LX7 47-59 REALIGN *VMST* SB7 B0 TA7 B2,VMST REWRITE *VMST* RJ SRE CLEAR DRIVER REENTRY SX6 /TLX/TOT RJ ERQ ENTER REQUEST RJ DAP DROP ASSIGNED POTS SX6 DMBL SEND BELLS SB4 DMBLL RJ ACD ASSIGN MESSAGE SX6 DMTO SEND TIMEOUT MESSAGE SB4 DMTOL SB3 B0 RJ ACD ASSIGN MESSAGE EQ PCSX EXIT ITM SPACE 4,10 ** ITM - INITIATE TYPEAHEAD MODE. * * SENDS A *LSTHDX* SUPERVISORY MESSAGE TO THE NETWORK * TO INITIATE TYPEAHEAD QUEUING. * * CALLS ASV, PCD, SRE. ITM BSS 0 ENTRY BX6 X6-X6 SET DEFAULT HEADER SB4 B1 SET MESSAGE LENGTH SX7 LSTHDX SET MESSAGE NAME RJ ASV ASSIGN MESSAGE SB3 B0 BX7 X7-X7 SB7 ITM ZR X6,PCD IF MESSAGE NOT ISSUED, REENTER TA1 B2,VMST READ VMST ENTRY SX6 B1 SET TYPEAHEAD IN EFFECT LX6 51-0 BX6 X6+X1 SA6 A1 REWRITE VMST EQ PCSX EXIT JCM SPACE 4,10 ** JCM - ISSUE JOB COMPLETION MESSAGE. * * ISSUE JOB OR RUN COMPLETION MESSAGE AS DETERMINED * BY THE TERMINAL SUBSYSTEM. * * ENTRY (VSTT) BYTE 3 = 6/, 6/SUBSYSTEM. * * EXIT TO *RDY* IF NO MESSAGE SPECIFIED FOR THE * TERMINAL SUBSYSTEM. * * CALLS ACD, PCD, RDY. JCM BSS 0 ENTRY SA1 A0+VSTT READ VSTT MX6 -3 LX1 -12 BX6 -X6*X1 EXTRACT CURRENT SUBSYSTEM SA1 JCMT+X6 READ MESSAGE ADDRESS ZR X1,RDY IF NO MESSAGE DEFINED SX6 X1+ SET MESSAGE ADDRESS SB4 DMRCL SET MESSAGE LENGTH RJ ACD ASSIGN MESSAGE NZ X6,PCSX IF MESSAGE ASSIGNED SB7 JCM SET REENTRY BX7 X7-X7 EQ PCD REENTER * JCMT - TABLE OF RUN COMPLETION MESSAGES. JCMT INDEX CON,MSYS,( 0 ) INDEX ,BASS,( DMRC ) INDEX ,FORS,( DMRC ) INDEX ,FTNS,( DMRC ) INDEX ,EXES,( DMRC ) NAK SPACE 4,10 ** NAK - BLOCK NOT DELIVERED. * * PERFORMS THE FOLLOWING FUNCTIONS IN RESPONSE TO A * *NAK* SUPERVISORY MESSAGE- * * (1) UPDATES *NAK* COUNT. * (2) DECREMENTS DOWNSTREAM BLOCK COUNT. * (3) VALIDATES REASON CODE. * (4) ISSUES APPROPRIATE DAYFILE MESSAGE. * (5) CALLS ABORT PROCESSOR IF ERROR. * * ENTRY (RCVB) = REASON CODE, BITS 36-43. * * EXIT DAYFILE MESSAGE ISSUED. * (NAKC) = INCREMENTED. * (BLTC) = INCREMENTED IF BLOCK-LOST. * (VMST) = DOWNSTREAM BLOCK COUNT DECREMENTED. * * CALLS ABT, DBC, IDM, O6S. NAK BSS 0 ENTRY SA1 NAKC UPDATE *NAK* COUNT SX7 B1 SB6 B0 (B6) = ERROR FLAG IX7 X1+X7 SA7 A1 REWRITE *NAK* COUNT RJ DBC DECREMENT TERMINAL BLOCK COUNT PL X6,NAK1 IF NO ERROR SB6 B1+ SET ERROR FLAG * VALIDATE REASON CODE. NAK1 SA2 RCVB READ MESSAGE MX3 -8 MASK REASON CODE SX1 B2 SET (X1) FOR *O6S* AX2 36 BX3 -X3*X2 SX2 X3-AXLB CHECK FOR *BLOCK-LOST* NZ X2,NAK2 IF NOT *BLOCK-LOST* * PROCESS *BLOCK-LOST* CONDITION. RJ O6S CONVERT TERMINAL NUMBER SA1 NAKB INSERT IN DAYFILE MESSAGE MX3 18 AX6 6 BX1 X3*X1 BX6 -X3*X6 IX7 X6+X1 SA7 A1 SX6 NAKA SET MESSAGE ADDRESS RJ IDM ISSUE DAYFILE MESSAGE SA1 BLTC INCREMENT BLOCK-LOST COUNT SX7 B1 IX6 X7+X1 SA6 A1+ ZR B6,PCSX IF NO ERROR, EXIT * PROCESS ERROR. NAK2 SX6 3RNAK SET ERROR CODE RJ ABT PROCESS ERROR EQ PCSX EXIT NAKA DATA 10HBLOCK LOST NAKB DATA 03L - NWC SPACE 4,40 ** NWC - PROCESS NEW CONNECTION. * * INITIATES THE CREATION OF NEW USER. THE USER HAS * BEEN VALIDATED BY *NVF* AND THE USERS VALIDATION DATA * ARE AVAILABLE IN THE CONNECTION SUPERVISORY MESSAGE. * *NWC* COPIES THE VALIDATION INFORMATION TO POT FOR * USE FOR LOGIN AND ISSUES SUPERVISORY MESSAGE TO EITHER * ACCEPT OR REJECT THE NEW CONNECTION. LOGIN WILL BE * COMPLETED AFTER THE COMMUNICATIONS SUPERVISOR SENDS * A *CONNECTION MADE* SUPERVISORY MESSAGE. * * ENTRY (MESSAGE) = VALIDATION PARAMETERS. * (MSG+0) = 36/, 3/ ABL, 5/, 8/ DT, 8/. * (MSG+1) = 42/ TN, 2/, 8/ PW, 8/PL. * (MSG+2) = 46/, 1/A, 3/LAL, 11/ BSZ, 1/0. * (MSG+4) = 42/ FN, 18/ FO. * (MSG+5) = 42/ UN, 18/ UI. * (MSG+6) = 60/ AHMT. * (MSG+7) = 60/ AHDS. * (MSG+8) = 60/ AAWC. * (MSG+9) = 60/ ATWD. * * MSG = MESSAGE FWA. * ABL = APPLICATION BLOCK LIMIT. * DT = DEVICE TYPE. * TN = TERMINAL NAME. * PW = PAGE WIDTH. * PL = PAGE LENGTH. * A = *LAL* SPECIFIED. * LAL = LINE ACCESS LEVEL LIMIT. * BSZ = BLOCK SIZE. * FN = FAMILY NAME. * FO = FAMILY ORDINAL. * UN = USER NAME. * UI = USER INDEX (NOT USED). * AHMT = ACCOUNT FILE WORD *AHMT*. * AHDS = ACCOUNT FILE WORD *AHDS*. * AAWC = ACCOUNT FILE WORD *AAWC*. * ATWD = ACCOUNT FILE WORD *ATWD*. * * EXIT (VDPT(0)) = VALIDATION POT POINTER. * * TO *CRR* IF ERROR CONDITION DECTECTED. * TO *CRR1* IF NO ERROR CONDITION DETECTED. * * CALLS ABT, CRR, CTP, ZFN. NWC BSS 0 ENTRY * ENTRY FOR SECONDARY CONNECTION REQUEST. SA1 A0+VDCT SET SECONDARY APPLICATION MX6 1 LX6 46-59 BX6 X1+X6 SA6 A1 REWRITE VDCT * VERIFY THAT CONNECTION CAN BE ACCEPTED. * ENTRY FOR PRIMARY CONNECTION REQUEST. NWC0 BSS 0 ENTRY SA1 SHDF CHECK SHUTDOWN FLAG NZ X1,CRR IF SHUTDOWN IN PROGRESS TB6 B0,VNTP LT B2,B6,CRR IF INCORRECT ACN TB7 B0,VNTP,LWA GT B2,B7,CRR IF INCORRECT ACN TA1 B2,VMST GET VMST NZ X1,CRR IF ALREADY ON-LINE SA1 RCVB CHECK DEVICE TYPE MX6 -3 AX1 13-0 BX6 -X6*X1 SB4 B0 SELECT ZERO FILL NZ X6,CRR IF PASSIVE DEVICE SX0 B0 USE X0 AS A TEMPORARY VALIDATION FLAG SA1 RCVB+10D CHECK FOR SECONDARY VALIDATION SA3 =8HVALIDATE BX6 X3-X1 NZ X6,NWC0.1 IF NO VALIDATION SX0 B1 SET FLAG = ONE TO INDICATE VALIDATION SA1 RCVB+11D PUT SECONDARY FAMILY NAME IN *RCVB+4* BX6 X1 SA6 RCVB+4 SA1 A1+B1 PUT SECONDARY USER NUMBER IN *RCVB+5* BX6 X1 SA6 A6+B1 SA1 RCVB+1 RJ ZFN ZERO FILL TERMINAL NAME SA6 A1 NWC0.1 SA1 RCVB+4 RJ ZFN ZERO FILL FAMILY NAME SA6 A1 SA1 A1+B1 RJ ZFN ZERO FILL USER NAME SA6 A1 * INCREMENT ACTIVE USER COUNT. SA1 VANL GET ACTIVE USER COUNT SX6 X1+B1 INCREMENT ACTIVE USER COUNT SA6 A1 SA2 LINB GET MAXIMUM USER COUNT IX2 X2-X6 PL X2,NWC1 IF NOT NEW MAXIMUM SA6 A2+ STORE NEW MAXIMUM NWC1 RJ UCP UPDATE CONVERTED POINTER * SAVE VALIDATION PARAMETERS IN POT. SB3 B0 INDICATE NO POT AVAILABLE BX6 X6-X6 CLEAR VCHT SB4 VUNA-VFNA+1 SET BLOCK LENGTH SA6 A0+VCHT SX6 RCVB+4 SET BLOCK FWA SB5 B0+ USE FIRST WORD OF POT RJ CTP COPY INPUT BLOCK TO POT SX7 B3 SET LOGIN POT POINTER LX7 48 SA7 A0+VDPT SA1 RCVB+2 SET LINE ACCESS LIMIT IN POT MX6 -4 LX1 -12 BX6 -X6*X1 SA6 B4+VLAL ZR X0,NWC1.1 IF NO VALIDATION, SKIP PASSWORD SA1 RCVB+13D PUT PASSWORD INTO PARAMETER POT MX6 42 BX6 X1*X6 EQ NWC1.2 CLEAR NWC1.1 SA1 RCVB+13D PUT ZEROES IN PASSWORD FIELD MX6 42 BX6 -X6*X1 NWC1.2 SA6 B4+VPWA WRITE INTO PARAMETER POT SA1 RCVB+1 GET TERMINAL NAME SA2 B4+VTRY GET LRC MX6 42 BX1 X6*X1 BX2 -X6*X2 BX6 X2+X1 SA6 A2 SET TERMINAL NAME AND LRC IN POT * SET TERMINAL CHARACTERISTICS IN MESSAGE STATUS TABLE. SA1 RCVB READ FIRST WORD OF MESSAGE MX5 -8 BX7 X7-X7 AX1 8 SHIFT DEVICE TYPE BX6 -X5*X1 SET DEVICE TYPE LX6 36 AX1 21-8 MASK BLOCK LIMIT (ABL) MX5 -3 BX1 -X5*X1 LX1 30 BX6 X6+X1 MERGE SA1 RCVB+2 READ THIRD WORD OF MESSAGE MX5 -11 GET POT STRING LENGTH SX7 60 AX1 1 BX1 -X5*X1 IX1 X1/X7 CALCULATE NUMBER OF POTS SX1 X1+B1 SX7 VXPL IX5 X1-X7 MX2 -5 PL X5,NWC2 IF GREATER THAN MAXIMUM SX7 VNPL IX5 X1-X7 NG X5,NWC2 IF LESS THAN MINIMUM SX7 X1 NWC2 BX7 -X2*X7 SET NUMBER OF POTS LX7 18 SA1 RCVB+5 READ USER NAME BX6 X6+X7 SA2 RCVB+2 READ THIRD WORD OF MESSAGE LX2 59-16 GET NETWORK TYPE PL X2,NWC2.1 IF NAM/CCP CONNECTION SX2 B1 LX2 58-0 BX6 X6+X2 STORE NETWORK TYPE NWC2.1 TA6 B2,VMST STORE VMST * INITIALIZE TERMINAL TABLE. MX6 42 BX7 X6*X1 MASK OUT THE USER INDEX SA7 A0+VUIT SET *VUIT* SA1 RCVB+1 GET TERMINAL NAME MX2 42 BX7 X2*X1 TA7 B2,VTNP ENTER NEW TERMINAL NAME NZ X0,NWC3 IF VALIDATE FLAG IS SET, MAKE A REENTRY EQ CRR1 SEND SUPERVISORY MESSAGE NWC3 SX5 ITA4$ SET *1TA* REQUEST EQ PCS1 MAKE ENTRY PCD SPACE 4,10 ** PCD - DRIVER *PCS* PROCESSING EXIT. * * USED AS *PCS* EXIT IF DRIVER REENTRY IS REQUIRED. * * ENTRY (B7) = REENTRY ADDRESS IF NONZERO. * (B3) = REENTRY POT POINTER. * (X7) = 12 BIT REENTRY PARAMETER. * * CALLS SRE. PCD BSS 0 ENTRY ZR B7,PCSX IF NO REENTRY REQUIRED RJ SRE SET REENTRY EQ PCSX EXIT RDY SPACE 4,10 ** RDY - ISSUE *READY* MESSAGE. * * ISSUES *READY* MESSAGE IF NOT IN BATCH SUBSYSTEM, * ISSUES SLASH IF IN BATCH SUBSYSTEM. * * ENTRY (VSTT) BYTE 3 = 6/, 6/SUBSYSTEM. * * EXIT MESSAGE ISSUED. * * CALLS ACD, PCD. RDY BSS 0 ENTRY SA1 A0+VSTT READ VSTT SX6 DMRDY ASSUME *READY* MESSAGE SB4 DMRDYL MX7 -3 LX1 -12 BX1 -X7*X1 EXTRACT CURRENT SUBSYSTEM SX1 X1-BATS CHECK SUBSYSTEM NZ X1,RDY1 IF NOT BATCH SUBSYSTEM SX6 DMSL SET *SLASH* MESSAGE SB4 DMSLL RDY1 RJ ACD ASSIGN MESSAGE NZ X6,PCSX IF MESSAGE ISSUED SB7 RDY SET REENTRY BX7 X7-X7 EQ PCD REENTER ROI SPACE 4,10 ** ROI - RESUME OUTPUT INTERRUPT RESPONSE. * * ISSUES *INTRES* ASYNCHRONOUS SUPERVISORY MESSAGE IN * RESPONSE TO A USER INTERRUPT AND ISSUES AN *ROMARK* * SYNCHRONOUS SUPERVISORY MESSAGE TO RESUME OUTPUT TO * THE TERMINAL FOLLOWING A USER BREAK ONE OR TWO. IF * THE USER IS IN *TEXT* MODE AND BREAK IS IN PROGRESS, * *ETX* WILL BE CALLED TO EXIT FROM *TEXT* MODE. IF THE * TERMINAL LOGOUT FLAG IS SET, IT IS ASSUMED THAT HANG * UP PROCESSING HAS BEEN INTERRUPTED AND MUST BE RESUMED. * * ENTRY (B3) = ZERO. * * EXIT (VMST) BREAK-IN-PROGRESS BIT CLEARED. * *ETX* DRIVER REQUEST SENT, IF IN TEXT MODE. * TO *CNB* IF LOGOUT FLAG IS SET. * * CALLS ASV, ETX, SAB, SCS. ROI BSS 0 ENTRY SX7 INTRES ISSUE *INTRES* SUPERVISORY MESSAGE SB4 B1 TEXT LENGTH = 1 BX6 X6-X6 INDICATE DEFAULT HEADER RJ ASV ASSIGN ASYNCHRONOUS MESSAGE SB3 B0 NZ X6,ROI1 IF MESSAGE ASSIGNED SB7 ROI SET REENTRY EQ PCD REENTER ROI1 SA2 NBSY CHECK IF NETWORK BUSY NZ X2,ROI2 IF NETWORK BUSY RJ CBL CHECK DOWNLINE BLOCK LIMIT NZ X6,ROI2 IF AT BLOCK LIMIT SB2 -B2 SEND RESUME OUTPUT SUPERVISORY MESSAGE SX6 HDRS3 SET UP ASYNCHRONOUS HEADER SX7 ROMARK RJ SCS ASSIGN SYNCHRONOUS MESSAGE SB3 B0 EQ ROI3 CONTINUE ROI2 SB7 ROI1 SET REENTRY ADDRESS EQ PCD REENTER * HANG UP PHONE IF LOGOUT INTERRUPTED. ROI3 RJ IBC INCREMENT DOWNLINE BLOCK COUNT TA1 B2,VMST READ VMST ENTRY SA2 A0+VDCT READ VDCT SA4 A0+VSTT READ VSTT LX1 59-57 LX2 59-50 MX6 -59 LX4 59-48 CHECK LOGOUT FLAG BX3 X1*X2 CHECK BREAK AND TEXT MODE BITS BX6 -X6*X1 CLEAR BREAK IN PROGRESS BIT LX6 57-59 SB3 B0 SA6 A1+ REWRITE VMST ENTRY NG X4,ROI5 IF LOGOUT FLAG SET PL X3,ROI4 IF NOT BOTH BREAK AND TEXT MODE * EXIT FROM *TEXT* MODE. RJ ETX EXIT *TEXT* MODE EQ PCSX EXIT ROI4 RJ SAB SET TERMINAL ACTIVE EQ PCSX EXIT * WAIT FOR THE ACKNOWLEDGMENT OF THE *BI/MARK* * MESSAGE BEFORE CONTINUING WITH LOGOUT. ROI5 RJ CBL CHECK BLOCK LIMIT SB7 ROI5 SET REENTRY ADDRESS NZ X3,PCD IF BLOCKS OUTSTANDING EQ CNB CONTINUE WITH LOGOUT SCP SPACE 4,20 ** SCF - PROCESS SYSTEM CONTROL POINT FAILURE. * * SETS UP DAYFILE MESSAGE AND INITIATES IMMEDIATE SHUT- * DOWN. IT IS ASSUMED THAT, UPON ENTRY, THE CONTENTS * OF REGISTER B1 HAVE BEEN DESTROYED BY AN *AIP* CALL. * * EXIT TO *SIS*. * (B1) = 1. * (X6) = ADDRESS OF DAYFILE MESSAGE. SCF BSS 0 ENTRY SB1 1 RESTORE CONSTANT B1=1 SX6 =C* SYSTEM CONTROL POINT FAILURE.* EQ SIS SET IMMEDIATE SHUTDOWN SDU SPACE 4,10 ** SDU - SUSPEND DRIVER FOR USER BREAK. * * SETS BREAK-IN-PROGRESS BIT IN *VMST* AND THEN JUMPS TO * USER BREAK PROCESSING. X7 IS SET TO ZERO, SIGNIFYING AN * EXECUTIVE INITIATED USER BREAK. * * EXIT TO ROUTINE *BRK*. * (X7) = 0. SDU BSS 0 ENTRY TA1 B2,VMST SET BREAK-IN-PROGRESS SX6 B1 LX6 57-0 BX6 X1+X6 SA6 A1 SX7 B0+ SB7 BRK8 EQ PCD REENTER IN USER BREAK PROCESSING. SCR SPACE 4,10 ** SCR - SET CONNECTION RESET BIT. * * SET CONNECTION RESET RECEIVED BIT IN *VMST* WHEN AN UPLINE * FC/RST SUPERVISORY MESSAGE IS RECEIVED IN RESPONSE TO A * DOWNLINE FC/BRK SUPERVISORY MESSAGE. * * EXIT (VMST) = CONNECTION RESET RECEIVED BIT SET * * USES A - 1, 6. * X - 1, 6. SCR BSS 0 ENTRY TA1 B2,VMST READ *VMST* MX6 1 SET CONNECTION RESET RECEIVED BIT LX6 47-59 BX6 X1+X6 SA6 A1 REWRITE *VMST* EQ PCSX EXIT SIS SPACE 4,30 ** SIS - SET IMMEDIATE SHUTDOWN. * * PERFORMS THE FOLLOWING FUNCTIONS TO INITIATE AN * IMMEDIATE SHUTDOWN- * * (1) ISSUES REASON FOR SHUTDOWN DAYFILE MESSAGE. * (2) SETS IMMEDIATE SHUTDOWN STATUS IF NOT ALREADY SET. * (3) EXITS FROM NETWORK DRIVER. SHUTDOWN WILL * BE PROCESSED ON THE NEXT DRIVER CYCLE. * * ENTRY (X6) = DAYFILE MESSAGE ADDRESS. * (SHDF) = CURRENT SHUTDOWN STATUS. * * EXIT TO *NDRX*. * (SHDF) = SET FOR IMMEDIATE SHUTDOWN. * * USES X - 1, 6, 7. * A - 1, 6, 7. * * CALLS IDM. SIS BSS 0 ENTRY RJ IDM ISSUE DAYFILE MESSAGE SA1 SHDF GET CURRENT SHUTDOWN FLAG NG X1,NDRX IF IMMEDIATE SHUTDOWN IN PROGRESS MX6 1 SA6 A1 SET IMMEDIATE SHUTDOWN EQ NDRX EXIT FROM NETWORK DRIVER TITLE NETWORK INTERFACE ROUTINES. SPACE 4,10 ** THE NETWORK INTERFACE ROUTINES CONSIST OF ALL ROUTINES * WHICH EXECUTE NETWORK CALLS. ANY NETWORK CALL MACRO * USED BY A NETWORK INTERFACE ROUTINE REQUIRES THE COR- * RESPONDING AIP LINKAGE IN ORDER TO LINK TO ITS LOADED * RELOCATABLE AIP SUBROUTINE ENTRY POINT. CKP SPACE 4,40 ** CKP - CHECK NETWORK PARALLEL MODE STATUS. * * CHECKS NETWORK PARALLEL MODE STATUS AND POST PRO- * CESSES COMPLETED INPUT OR OUTPUT REQUESTS. IN THE * CASE OF AN INPUT REQUEST, *CKP* RETURNS THE MESSAGE * HEADER AND BLOCK TYPE; IN THE CASE OF AN OUTPUT RE- * QUEST, *CKP* CLEARS THE OUTPUT STATUS POINTERS AND * DROPS ANY OUTPUT POTS HELD. * * IF NAM IS NO LONGER PRESENT, *CKP* WILL CALL *SCF* * TO SET IMMEDIATE SHUTDOWN AND EXIT FROM THE NETWORK * DRIVER. * * ENTRY (IBSY) = INPUT REQUEST HEADER ADDRESS. * (NGLN) = .GE. 4 IF INPUT REQUESTED FOR SPECIFIC * TERMINAL. * (OBSY) = NONZERO IF OUTPUT REQUEST. * (OTPP) = OUTPUT POT POINTER IF NONZERO. * (NCAS) = (A0) TO BE RESTORED. * (NCBS) = (B2) TO BE RESTORED. * (SSCR) = NEGATIVE IF SCP FAILURE. * * EXIT (NBSY) = ZERO IF NETWORK CALL COMPLETE * (PCRX) = ZERO IF NULL INPUT BLOCK RECEIVED * NOT IN CUNJUNCTION WITH A SPECIFIC * TERMINAL. * (SUPA) = SET IF SUPERVISORY MESSAGE AVAILABLE. * (X6) = ZERO IF CALL COMPLETE. * (A0) = RESTORED. * (B1) = 1. * (B2) = RESTORED. * * IF OUTPUT REQUEST COMPLETE: * (OBSY) = 0. * (OTPP) = 0, POTS DROPPED. * * IF INPUT REQUEST COMPLETE: * (X1) = MESSAGE HEADER. * (X2) = MESSAGE BLOCK TYPE, RIGHT JUSTIFIED. * = 0 IF NULL BLOCK. * (IBSY) = 0 IF NULL BLOCK. * * TO SCF IF NAM FAILURE: * (SHDF) = COMPLETE SHUTDOWN. * * CALLS DPT, SCF. * * MACROS NETCHEK. CKP SUBR ENTRY/EXIT SA1 VSHD CHECK SCP STATUS NG X1,SCF IF SCP FAILURE SA2 NSUP NG X2,CKP1 IF CHECK UNNECESSARY NETCHEK CHECK NETWORK STATUS CKP1 SA1 NSUP READ STATUS RESPONSE WORD SA3 NCAS RESTORE (A0) SA4 NCBS RESTORE (B2) SB1 1 RESET CONSTANT B1=1 SA0 X3+ SB2 X4+ BX2 X1 PL X2,CKP4 IF OPERATION NOT COMPLETE LX2 59-57 PL X2,SCF IF NAM NO LONGER PRESENT SX7 B1 AX1 55-0 SHIFT SUPERVISORY MESSAGE BIT BX7 X7*X1 MASK SUPERVISORY MESSAGE BIT SA1 OBSY GET OUTPUT POINTER BX6 X6-X6 SA7 SUPA SET SUPERVISORY MESSAGE AVAILABLE SA6 NBSY CLEAR BUSY STATUS * POSTPROCESS OUTPUT OPERATION. ZR X1,CKP2 IF NOT OUTPUT OPERATION SA2 OTPP READ POT POINTER SA6 A1 CLEAR OUTPUT BUSY STATUS ZR X2,CKPX IF NO OUTPUT POTS, RETURN SB3 X2 DROP OUTPUT POT CHAIN SB4 B0 RJ DPT SX6 B0+ CLEAR OUTPUT POT POINTER SA6 OTPP EQ CKPX RETURN * POSTPROCESS INPUT OPERATION. CKP2 SA3 IBSY GET HEADER ADDRESS ZR X3,CKPX IF NOT INPUT OPERATION, RETURN SA2 X3+ READ HEADER AX2 54 SHIFT BLOCK TYPE NZ X2,CKPX IF NOT NULL BLOCK SA1 NGLN GET REQUEST LIST/ACN NUMBER SA6 A3 CLEAR INPUT STATUS AX1 2 NZ X1,CKPX IF FOR SPECIFIC ACN SA6 PCRX CLEAR PREVIOUS CYCLE FORCED EXIT EQ CKPX RETURN * CHECK INCOMPLETE STATUS. CKP4 LX1 59-57 CHECK FOR NAM NO LONGER PRESENT SX6 =C* NETWORK CONNECTION LOST.* PL X1,SIS IF NAM NO LONGER PRESENT SX6 B1+ SA6 NBSY SET BUSY STATUS EQ CKPX RETURN GLM SPACE 4,30 ** GLM - GET DATA LIST MESSAGE. * * ISSUES *NETGTLQ* CALL TO INPUT DATA FROM NETWORK * UPON SPECIFIED APPLICATION LIST. * * ENTRY (X2) = APPLICATION LIST NUMBER (ALN). * * EXIT (IBSY) = INPUT REQUEST HEADER ADDRESS. * (IBSY) = ZERO IF NULL BLOCK RECEIVED. * (NGLN) = APPLICATION LIST NUMBER (ALN). * (RCVH) = MESSAGE HEADER. * (RCVB) = MESSAGE BUFFER. * (X6) = NONZERO IF NAM BUSY. * (X1) = MESSAGE HEADER. * (X2) = BLOCK TYPE, RIGHT JUSTIFIED. * = 0 IF NULL BLOCK. * * USES (NCPA) = APPLICATION LIST NUMBER. * * CALLS CKP, SCF. * * MACROS NETGTLQ. GLM SUBR ENTRY/EXIT SX6 RCVH SET INPUT BUSY SX7 X2+ SET APPLICATIONS LIST NUMBER SA6 IBSY SA1 VSHD CHECK SCP STATUS SA7 NCPA NG X1,SCF IF SCP FAILURE SA7 NGLN NETGTLQ NCPA,RCVH,RCVB,GLMA,GTMA ISSUE NETWORK CALL RJ CKP CHECK PARALLEL STATUS ZR X6,GLMX IF CALL COMPLETE * INCREMENT NETGET BUSY COUNT. SA1 NGBC GET BUSY COUNT SX7 B1 INCREMENT COUNT IX7 X7+X1 SA7 A1+ EQ GLMX RETURN GLMA CON RCVL RECEIVE BUFFER LENGTH GTM SPACE 4,20 ** GTM - GET MESSAGE. * * REQUESTS MESSAGE ON SPECIFIED ACN. * * ENTRY (B2) = TERMINAL NUMBER (ACN). * * EXIT (IBSY) = INPUT REQUEST HEADER ADDRESS. * (NBSY) = SET IF NAM BUSY. * (NGLN) = TERMINAL NUMBER (ACN). * (RCVH) = MESSAGE HEADER. * (RCVB) = MESSAGE BUFFER. * (X1) = MESSAGE HEADER. * (X2) = BLOCK TYPE, RIGHT JUSTIFIED. * = 0 IF NULL BLOCK. * * USES (RCVH) = RECEIVE HEADER. * (RCVB) = RECEIVE BUFFER. * (NCPA) = ACN (TERMINAL NUMBER). * * CALLS CKP, SCF. * * MACROS NETGETQ. GTM SUBR ENTRY/EXIT SX6 B2 SAVE (B2) SX7 A0 SAVE (A0) SA6 NCBS SA7 NCAS SA1 VSHD CHECK SCP STATUS SX7 RCVH SET INPUT BUSY SA6 NCPA SET ACN NG X1,SCF IF SYSTEM CONTROL POINT FAILURE SA7 IBSY SA6 NGLN NETGETQ NCPA,RCVH,RCVB,GLMA,GTMA ISSUE NETWORK CALL RJ CKP CHECK PARALLEL STATUS ZR X6,GTMX IF CALL COMPLETE, RETURN * INCREMENT NETGET BUSY COUNT. SA1 NGBC GET BUSY COUNT SX7 B1 INCREMENT COUNT IX7 X7+X1 SA7 A1+ EQ GTMX RETURN GTMA VFD 58/0,1/0,1/0 *NETGTLQ/NETGETQ* PROCESSING OPTIONS NOF SPACE 4,10 ** NOF - DISCONNECT FROM NETWORK ACCESS SUBSYSTEM. * * ISSUE NETWORK *NETOFF* REQUEST. * * ENTRY (NTON) = ZERO IF NOT CONNECTED TO NETWORK. * (ATMC) = MESSAGE COUNT USED TO CONTROL * PROCESSING OF TRACE OUTPUT FILE. * = ZERO, IF TRACE IS NOT SELECTED. * = NEGATIVE, IF PROCESS TRACE FILE AT * IAF TERMINATION ONLY. * * MACROS NETOFF, NETREL. NOF SUBR ENTRY/EXIT SA2 NTON CHECK NETON STATUS ZR X2,NOFX IF NOT CONNECTED NETOFF ISSUE *NETOFF* CALL SA1 ATMC GET TRACE MESSAGE COUNT SB1 1 RESET CONSTANT B1=1 ZR X1,NOFX IF TRACE IS NOT SELECTED NG X1,NOFX IF NO TRACE FILE END PROCESSING NETREL JPTO,MXLT,RWTF COMPLETE PROCESSING OF TRACE FILE SB1 1 EQ NOFX RETURN NON SPACE 4,30 ** NON - CONNECT TO NETWORK ACCESS SUBSYSTEM. * * SET PARALLEL MODE AND ISSUE *NETON* REQUEST. * * ENTRY (VNTP) = NETWORK TERMINAL POINTER. * (STIM) = REAL TIME CLOCK (SECONDS). * (NFRT) = REAL TIME (SECONDS) OF LAST NETON * ATTEMPT OR OF INITIAL LOAD. * (NONB) = NONZERO IF REQUEST ACTIVE. * * EXIT (NTON) = ON IF SUCCESSFUL *NETON*. * (NONB) = NONZERO IF REQUEST ACTIVE. * PARALLEL PROCESSING MODE SET. * (TMSI) = FIRST NETWORK TERMINAL NUMBER. * (HACN) = FIRST NETWORK TERMINAL NUMBER. * (IBSY) = 0. * (NBSY) = 0. * (SHDF) = 0. * (PCRX) = 0. * (SUPA) = SET IF SUPERVISORY MESSAGE AVAILABLE. * * USES (NCPA) = LOWER ACN LIMIT. * (NCPB) = UPPER ACN LIMIT. * (NCPC) = STATUS REPLY WORD. * * CALLS ABT, IAT, IDM. * * MACROS NETCHEK, NETON, NETSETP. NON SUBR ENTRY/EXIT * TEST FOR INCOMPLETED PREVIOUS NETON REQUEST AND CHECK * IF DELAY TIME HAS ELAPSED SINCE COMPLETED REQUEST. SA3 NONB TEST IF REQUEST STILL ACTIVE SA1 STIM GET CURRENT REAL-TIME CLOCK NZ X3,NON1 IF REQUEST STILL ACTIVE SA2 NFRT TIME OF LAST NETON ATTEMPT SX6 NODT DELAY TIME BX7 X1 IX2 X1-X2 ELAPSED TIME IX2 X2-X6 NG X2,NONX IF DELAY TIME NOT ELAPSED, RETURN SA7 A2 RESET TIME OF NETON * SET ACN LIMIT CALL PARAMETERS. TX6 0,VNTP SET LOWER ACN LIMIT TX7 0,VNTP,LWA SET UPPER ACN LIMIT SA6 NCPA SET NETON CALL PARAMETERS SA7 NCPB * REQUEST CONNECTION TO NETWORK. RJ IAT INITIALIZE AIP TRACE OUTPUT FILE NETSETP =0 SELECT PARALLEL MODE NETON =3HIAF,NSUP,NCPC,NCPA,NCPB SX7 1 FLAG REQUEST ACTIVE SA7 NONB * CHECK STATUS OF NETON REQUEST. NON1 NETCHEK CHECK PARALLEL STATUS SA1 NSUP READ RESPONSE SB1 1 RESET CONSTANT B1=1 PL X1,NONX IF CALL NOT COMPLETED SX7 B0+ CLEAR REQUEST ACTIVE FLAG SA2 NCPC READ NETON STATUS REPLY SA7 NONB NZ X2,NON2 IF CONNECTION NOT MADE SX6 =C* NETWORK CONNECTED.* RJ IDM ISSUE DAYFILE MESSAGE NETFUNC =2,AIPB SELECT AIP BUFFERING OF INPUT SB1 1 RESET CONSTANT B1=1 NETPUTS HDRS1,DCTRU,NCZP SEND *DC/SFTR* TO NAM SB1 1 RESET CONSTANT B1=1 * INITIALIZE CONTROL FLAGS AND POINTERS. SX6 B1 SET NETON STATUS BX7 X7-X7 SA6 NTON AX1 55-0 SET SUPERVISORY MESSAGE STATUS BX6 X6*X1 SA6 SUPA SA7 IBSY CLEAR STATUS WORDS SA7 NBSY SA7 NONA SA7 OBSY SA7 OTPP SA7 PCRX TX6 B0,VNTP INITIALIZE MANAGER SCAN SA6 TMSI SA6 HACN EQ NONX RETURN * CHECK NETWORK NOT-CONNECTED RESPONSE. NON2 SB7 X2-1 CHECK REPLY NZ B7,NON4 IF NOT *UNAVAILABLE* STATUS SA1 NONA CHECK LAST MESSAGE ADDRESS SX6 =C* WAITING FOR NETWORK.* IX1 X1-X6 ZR X1,NONX IF MESSAGE ISSUED, RETURN SA6 A1 SET MESSAGE ADDRESS RJ IDM ISSUE MESSAGE EQ NONX RETURN * PROCESS REJECT. NON4 SA1 NONA GET LAST MESSAGE ADDRESS SX6 =C* NETON REJECT.* IX1 X1-X6 ZR X1,NONX IF MESSAGE ISSUED, RETURN SA6 A1 SET MESSAGE ADDRESS RJ IDM ISSUE DAYFILE MESSAGE EQ NONX EXIT NONA CON 0 MESSAGE-ISSUED ADDRESS NONB CON 0 REQUEST ACTIVE FLAG RTF SPACE 4,15 ** RTF - RELEASE NETWORK TRACE FILE. * * ENTRY (ATMC) = MESSAGE COUNT USED TO CONTROL * PROCESSING OF TRACE OUTPUT FILE. * = ZERO, IF TRACE IS NOT SELECTED. * = NEGATIVE, IF PROCESS TRACE FILE AT * IAF TERMINATION ONLY. * * EXIT (X6) = NONZERO, IF NAM BUSY. * * USES X - 1, 2, 3, 4, 6. * A - 1, 2. * * CALLS CKP. * * MACROS NETREL. RTF SUBR ENTRY/EXIT SA1 ATMC CHECK TRACE THRESHOLD MX3 -30 BX6 X6-X6 ZR X1,RTFX IF TRACE IS NOT SELECTED NG X1,RTFX IF DO NOT PROCESS TRACE FILE SA2 NSUP GET MESSAGE COUNT BX2 -X3*X2 IX4 X2-X1 NG X4,RTFX IF NOT TIME TO PROCESS TRACE FILE NETREL JPTO,MXLT,RWTF PROCESS TRACE FILE RJ CKP CHECK NAM STATUS EQ RTFX RETURN SCS SPACE 4,30 ** SCS - SEND CANNED SUPERVISORY MESSAGE. * * TRANSMITS IN-CORE MESSAGE TO THE NETWORK. THE MESSAGE * IS TRANSMITTED FROM CORE AS-IS AFTER THE ACN IS PLACED * IN THE MESSAGE. ALTHOUGH PRIMARILY INTENDED FOR SUPER- * VISORY MESSAGES, MAY BE USED FOR TRANSMISSION OF ANY * IN-CORE MESSAGE. * * ENTRY (A0) = TERMINAL TABLE ADDRESS. * (B2) = ACN TO BE PLACED IN MESSAGE: * = POSITIVE, THIS IS AN ASYNCHRONOUS * SUPERVISORY MESSAGE, SO THE ACN * IS PLACED IN THE FIRST WORD OF THE * MESSAGE TEXT, BITS 35-24. * = NEGATIVE, THIS IS A SYNCHRONOUS * SUPERVISORY MESSAGE, SO THE ACN * IS PLACED IN BITS 53-42 OF THE * MESSAGE HEADER. * (X6) = ADDRESS OF HEADER: * = ZERO, USE DEFAULT HEADER. * (X7) = ADDRESS OF TEXT. * * EXIT (X6) = NONZERO IF NAM BUSY. * (OBSY) = NONZERO IF NAM BUSY. * * USES (NCPA) = ADDRESS OF HEADER. * (NCPB) = ADDRESS OF TEXT. * (NCAS) = SAVE (A0). * (NCBS) = SAVE (B2). * * CALLS CKP, SCF. * * MACROS NETPUTS. SCS SUBR ENTRY/EXIT NZ X6,SCS1 IF HEADER PROVIDED SX6 HDRS1 USE DEFAULT HEADER SCS1 SA6 NCPA STORE HEADER ADDRESS SA7 NCPB STORE TEXT ADDRESS SB6 24 SET TEXT ACN SHIFT COUNT PL B2,SCS2 IF ACN IN TEXT WORD 1 SB2 -B2 SX7 X6 SET ADDRESS FOR ACN IN HEADER SB6 42 SET HEADER ACN SHIFT COUNT SCS2 SA1 X7+ READ WORD FOR ACN MX4 -12 SX6 B2 LX4 X4,B6 SHIFT MASK LX6 X6,B6 SHIFT ACN BX1 X4*X1 INSERT ACN BX6 X1+X6 SA6 A1 REWRITE WORD WITH ACN * TRANSMIT MESSAGE TO NETWORK. SX6 B1+ SET OUTPUT BUSY - NO POT POINTER BX7 X7-X7 SA6 OBSY SA7 OTPP SX6 A0+ SAVE (A0) SX7 B2+ SAVE (B2) SA6 NCAS SA1 VSHD CHECK SCP STATUS SA7 NCBS NG X1,SCF IF SCP FAILURE SX6 NCZP SA6 NCPC CLEAR PROCESSING OPTIONS NETPUTS (LIST=NCPA) SEND MESSAGE TO NAM RJ CKP CHECK STATUS ZR X6,SCSX IF NAM NOT BUSY, RETURN * INCREMENT NETPUT BUSY COUNT. SA1 NPBC GET COUNTER SX7 B1 INCREMENT COUNTER IX7 X7+X1 SA7 A1+ EQ SCSX RETURN SSM SPACE 4,30 ** SSM - SEND SUPERVISORY MESSAGE. * * SEND MESSAGE CONSISTING OF SINGLE POT TO NETWORK. * ALTHOUGH PRIMARILY INTENDED FOR SUPERVISORY MES- * SAGES, WHICH NEVER EXCEED ONE POT IN LENGTH, MAY * BE USED FOR TRANSMISSION OF ANY SINGLE POT MESSAGE. * * ENTRY (X1) = MESSAGE POT POINTER. * * EXIT POT DROPPED IF NAM COMPLETE. * (NBSY) = SET IF NAM BUSY. * (OTPP) = POT POINTER IF NAM BUSY. * (OBSY) = SET IF NAM BUSY. * (X6) = (NBSY). * * USES (NCPA) = HEADER ADDRESS. * (NCPB) = TEXT ADDRESS. * (NCAS) = SAVE (A0). * (NCBS) = SAVE (B2). * * CALLS CKP, SCF. * * MACROS NETPUTS. SSM SUBR ENTRY/EXIT BX7 X1 SET BUSY POINTERS SA7 OBSY LX1 3 SA7 OTPP TX7 X1,VBMP SET HEADER ADDRESS SA7 NCPA SX7 X7+B1 SET TEXT ADDRESS SA7 A7+B1 SX6 A0 SAVE (A0) SX7 B2 SAVE (B2) SA6 NCAS SA1 VSHD CHECK SCP STATUS SA7 NCBS NG X1,SCF IF SCP FAILURE SX6 NCZP SA6 NCPC CLEAR PROCESSING OPTIONS NETPUTS (LIST=NCPA) SEND MESSAGE TO NAM RJ CKP GET STATUS ZR X6,SSMX IF NAM NOT BUSY * INCREMENT NETPUT BUSY COUNT. SA1 NPBC GET COUNTER SX7 B1 INCREMENT COUNT IX7 X7+X1 SA7 A1+ EQ SSMX RETURN TITLE NETWORK AIP LINKAGES. ** NETWORK AIP LINKAGES. * * THE NETWORK AIP CALL LINKAGES LINK NETWORK AIP * CALLS TO THE ACTUAL, LOADED ENTRY POINTS OF THE * RELOCATABLE AIP SUBROUTINES. EACH LINKAGE IS REF- * ERENCED BY THE NAME OF THE AIP ENTRY POINT TO WHICH * IT LINKS. A CALL TO A LINKAGE WILL RESET THE AD- * DRESS FIELD OF THE CALLING *RJ* INSTRUCTION TO THE * ENTRY POINT OF THE CORRESPONDING AIP SUBROUTINE AND * WILL RE-EXECUTE THE *RJ* TO THE NEW ADDRESS. THE * AIP RELOCATABLE SUBROUTINE ENTRY POINT ADDRESSES ARE * PRESET DURING INITIALIZATION BY THE INITIALIZER OVER- * LAY ROUTINE *LNA* AND THE ENTRY POINTS ARE LINKED * USING THE *TLCK* OR *TLKT* TABLE AND THE * *LDREQ PASSLOC* ENTRIES. * * THE *EXT* PSEUDO-OP, USED WITHIN MOST NETWORK CALL * MACROS, MUST BE DISABLED IN ORDER TO PREVENT ASSEMBLY * ERRORS. * * THE FOLLOWING DOCUMENTATION IS COMMON TO ALL NETWORK AIP * LINKAGES: * * ENTRY: * * ADR RJ NAM * . * . * . * NAM PS 0 ENTRY * SA4 NAM READ ENTRY POINT * SX5 AIP SET AIP ENTRY POINT ADDRESS * EQ XRJ TRANSFER RETURN JUMP * * AIP = AIP ENTRY POINT ADDRESS. SET BY INI- * TIALIZATION ROUTINE *LNA*. * ADR = ADDRESS OF *RJ* INSTRUCTION (MUST BE UPPER). * NAM = NAME OF AIP ENTRY POINT (I.E., LINKAGE). * * EXIT *RJ* ADDRESS FIELD MODIFIED. * *RJ* RE-EXECUTED. * * USES A - 4, 5. * X - 4, 5. * * CALLS XRJ. ** GENERATE NETWORK AIP CALL LINKAGES USING THE *NETLINK* * MACRO: NETLINK NETCHEK NETLINK NETFUNC NETLINK NETGETQ NETLINK NETGTLQ NETLINK NETOFF NETLINK NETON NETLINK NETPUTS NETLINK NETREL NETLINK NETSETP TITLE GENERAL SUBROUTINES. GENERAL SPACE 4,10 ** GENERAL SUBROUTINES. * * IF THE REGISTER USAGE IS NOT SPECIFIED IN THE HEADER * INFORMATION, IT SHOULD BE ASSUMED THAT THE SUBROUTINE * USES ALL REGISTERS EXCEPT THOSE SPECIFIED BELOW: * * A - 0. * X - 0. * B - 1, 2. ACD SPACE 4,20 ** ACD - ASSIGN CANNED DATA MESSAGE. * * COPY PREPARED IN-CORE MESSAGE TO POT(S) AND ASSIGN * TO TERMINAL TABLE. * * ENTRY (B2) = TERMINAL NUMBER. * (B3) = POT POINTER IF POT AVAILABLE. * = 0 IF ACD TO GET POTS FOR MESSAGE. * (B4) = MESSAGE LENGTH, INCLUDING HEADER, IN CM WORDS. * (X6) = FWA OF MESSAGE. * * EXIT (X6) = NONZERO IF MESSAGE ASSIGNED. * = ZERO IF MESSAGE COULD NOT BE ASSIGNED. CALLER * MUST TRY AGAIN LATER. * * CALLS ANM, CFL, CTP. ACD SUBR ENTRY/EXIT * GET REQUIRED POTS FOR MESSAGE. SX5 X6+ SAVE (X6) NZ B3,ACD2 IF POTS PROVIDED RJ CFL CHECK POT SUPPLY SX6 B0+ NG X2,ACDX IF LOW POT SUPPLY, RETURN ACD2 SX6 X5 COPY MESSAGE TO POT(S) SB5 B1 SKIP FIRST WORD IN POT RJ CTP ZR X6,ACDX IF INSUFFICIENT POTS AVAILABLE LX6 24 SET POT COUNT SA6 B4 SX7 B3+ SET MESSAGE POT POINTER RJ ANM ASSIGN MESSAGE SX6 B1 SET EXIT STATUS COMPLETE EQ ACDX RETURN ADB SPACE 4,30 ** ADB - ASSEMBLE DISPLAY CODED BUFFER. * * ASSEMBLES DISPLAY CODED STRING BUFFER INTO POTS. * THE STRING BUFFER CONSISTS OF 6 BIT DISPLAY CODE * OR 12 BIT EXTENDED DISPLAY CODE CHARACTERS, RIGHT * JUSTIFIED, AND IS TERMINATED BY A NEGATIVE WORD. * A CHARACTER IS ASSEMBLED AS 12 BITS ONLY IF THE * UPPER 6 BITS ARE NONZERO; THE LOWER SIX BITS ARE * ALWAYS ASSEMBLED. * * ENTRY (VDPT) = CURRENT POSITION IN POT. * (TBUF) = FIRST CHARACTER TO ASSEMBLE. * * EXIT DATA ASSEMBLED INTO POT CHAIN. * (VDPT) = UPDATED. * (X0) AND (X5) UNCHANGED. * * USES A - 2, 3, 4, 6. * B - 3, 4, 5, 6, 7. * X - 1, 2, 3, 4, 6. * * CALLS ADP. ADB SUBR ENTRY/EXIT SA2 A0+VDPT EXTRACT STARTING POSITION LX2 24 MX3 -12 BX3 -X3*X2 SB3 X3+ (B3) = LAST POT POINTER LX3 3 TB4 X3,VBMP (B4) = FWA LAST POT SB7 B4+VCPC (B7) = POT LWA+1 LX2 6 MX3 -3 BX3 -X3*X2 SB6 X3 (B6) = WORD COUNT IN LAST POT LX2 6 MX3 -6 BX3 -X3*X2 SB5 X3 (B5) = BIT COUNT IN LAST WORD SA4 TBUF GET FIRST CHARACTER BX6 X6-X6 CLEAR ASSEMBLY SB4 B4+B6 SET POT STORE ADDRESS SB6 60 SB6 B6-B5 ZR B6,ADB1 IF STARTING AT WORD BOUNDARY SA3 B4 GET PARTIAL WORD LX6 X3,B6 POSITION ASSEMBLY ADB1 SB6 6 (B6) = ASSEMBLY SHIFT BIAS SX3 77B (X3) = DISASSEMBLY MASK NG X4,ADB4 IF END OF BUFFER * SPLIT UP 12-BIT CHARACTER. ADB2 BX1 X3*X4 (X1) = LOWER SIX BITS AX2 X4,B6 (X2) = UPPER SIX BITS ZR X2,ADB3 IF NO UPPER SIX BITS * INSERT UPPER SIX BITS. LX6 6 SHIFT ASSEMBLY BX2 X2*X3 CLEAR FLAG BIT SB5 B5-B6 BIAS ASSEMBLY SHIFT BX6 X6+X2 MERGE CHARACER NZ B5,ADB3 IF NOT END OF ASSEMBLY WORD SA6 B4 STORE ASSEMBLY SB4 B4+B1 ADVANCE POT ADDRESS SX6 B0+ CLEAR ASSEMBLY SB5 60 LT B4,B7,ADB3 IF NOT POT LIMIT RJ ADP ADVANCE POT SB6 6 RESET ASSEMBLY SHIFT BIAS SB7 B4+VCPC SX6 B0+ CLEAR ASSEMBLY SX3 77B * INSERT LOWER SIX BITS. ADB3 SA4 A4+B1 READ UP NEXT WORD LX6 6 SHIFT ASSEMBLY SB5 B5-B6 BIAS ASSEMBLY SHIFT BX6 X6+X1 MERGE CHARACTER NG X4,ADB4 IF END OF BUFFER NZ B5,ADB2 IF NOT END OF ASSEMBLY WORD SA6 B4+ STORE ASSEMBLY SB5 60 BX6 X6-X6 SB4 B4+B1 LT B4,B7,ADB2 IF NOT END OF POT RJ ADP ADVANCE POT BX6 X6-X6 CLEAR ASSEMBLY SA4 A4 RESTORE NEXT CHARACTER SB7 B4+VCPC SET LWA+1 OF NEW POT EQ ADB1 * STORE FINAL WORD OF ASSEMBLY. ADB4 LX6 X6,B5 STORE ASSEMBLY SA6 B4 SA3 RCCW NZ X3,ADB6 IF NOT FINISHED WITH THIS BLOCK SA3 A0+VDPT LX3 59-13 NG X3,ADB6 IF NOT MSG BLOCK SB4 B4+B1 BX6 X6-X6 LT B4,B7,ADB5 IF NOT END OF POT RJ ADP ADVANCE POT SB7 B4+VCPC SX6 B0+ * SET TERMINATOR WORD IN POT. ADB5 SB6 B5-12 SB5 B0 PL B6,ADB7 IF TERMINATOR NOT NEEDED SA6 B4 STORE TERMINATOR ADB6 NZ B5,ADB7 IF ROOM IN WORD SB5 60 RESET TO WORD BOUNDARY SB4 B4+B1 LT B4,B7,ADB7 IF NOT END OF POT RJ ADP ADVANCE POT SB7 B4+VCPC * REPACK VDPT. ADB7 SA2 A0+VDPT SA3 =77770000700077777777B BX6 X2*X3 PRESERVE FP, FW, FLAGS AND CC SX3 B3 LX3 36 BX6 X6+X3 MERGE NEW LAST POT SB6 B4-B7 SX3 B6+VCPC LX3 30 BX6 X6+X3 MERGE WORD COUNT SX3 B5 LX3 24 BX6 X6+X3 MERGE BIT COUNT SA6 A2 REWRITE VDPT EQ ADBX RETURN ADP SPACE 4,10 ** ADP - ADVANCE POT. * * ENTRY (B3) = FULL POT POINTER. * * EXIT (B3) = NEW POT POINTER. * (B4) = NEW POT ADDRESS. * (B5), (X5), (X1) UNCHANGED. * * USES X - 5, 6. * A - 5, 6. * B - 3, 7. * * CALLS GPL, RPT. * * NOTE IF *RPT* IS CALLED AND NO POT IS AVAILABLE, * (B3) WILL BE RETURNED AS 7777B. THEREFORE, * THIS ROUTINE SHOULD NOT BE USED UNLESS THE * CALLER CAN GUARANTEE THAT A POT WILL BE AVAILABLE * IF *RPT* NEEDS TO BE CALLED. THIS CAN BE * DONE BY CALLING *CFL* BEFORE CALLING *ADP*. ADP SUBR ENTRY/EXIT ADP1 SB7 B3 SAVE ORIGINAL POT POINTER RJ GPL GET POT LINK NZ B3,ADPX IF NOT END OF CHAIN SX6 B5 SAVE EXIT REQUIREMENTS SA6 ADPA BX6 X5 SA6 A6+B1 BX6 X1 SA6 A6+B1 SX5 B7 PX5 X5,B1 REQUEST ONE MORE POT RJ RPT REQUEST POT SB3 X1 SET NEW POT POINTER SA5 ADPA RESTORE EXIT REQUIREMENTS SB5 X5 SA5 A5+B1 SA1 A5+B1 EQ ADP1 CHECK LINK ADPA BSS 3 EXIT REQUIREMENTS ANM SPACE 4,10 ** ANM - ASSIGN MESSAGE TO NETWORK TERMINAL. * * ADDS A MESSAGE TO THE OUTPUT QUEUE IN VSTT. THE * FIRST WORD IN THE FIRST POT OF EACH POT CHAIN IS USED TO * LINK THE MESSAGE INTO THE QUEUE, USING THE FORMAT * *T 30/ 0,6/ NP,12/ LC,12/ NC. * * NP = NUMBER OF POTS IN THIS MESSAGE. * LC = POT POINTER OF LAST CHAIN OF DATA IN QUEUE. * NC = POT POINTER OF NEXT CHAIN OF DATA IN QUEUE. * THE LC FIELD IS ONLY PRESENT IN THE LINKAGE WORD OF * THE FIRST POT CHAIN IN THE QUEUE. SUBSEQUENT POT CHAINS USE * LC = 0. THE LAST POT CHAIN IN THE QUEUE WILL * ALWAYS HAVE NC = 0. IN THE CASE WHERE EXACTLY ONE MESSAGE IS * IN THE QUEUE, THE LC FIELD POINTS TO ITSELF AND * NC = 0. THE SECOND WORD IN THE FIRST POT IS EITHER A * MESSAGE HEADER OR A SET OF TRANSLATION FLAGS. IF THE TOP * 6 BITS OF THE WORD ARE NON-ZERO, THE WORD IS A MESSAGE * HEADER, WHICH MEANS THE MESSAGE STARTING IN WORD THREE HAS * ALREADY BEEN TRANSLATED TO ASCII8 FOR TRANSMISSION TO NAM. * IF THE TOP 6 BITS ARE ZERO, THEN THE WORD CONTAINS * TRANSLATION FLAGS IN THE FOLLOWING FORMAT: * *T 57/ 0,1/ UF,1/ WR,1/ CS. * * UF = 1 IF USER FORMAT EFFECTOR MODE IS SET. * WR = 1 IF THIS CHAIN OF OUTPUT MAY NOT BE COMBINED * WITH DATA IN SUBSEQUENT CHAINS. * CS = CHARACTER SET AT THE TIME THE OUTPUT WAS SENT TO * IAF (1=ASCII 6/12,0=NORMAL). * * ENTRY (X7) = MESSAGE POT POINTER. * (FW OF POT CHAIN) = POT COUNT IN BITS 29-24. * * CALLS DPT, SAB. ANM2 SA2 ANMA COUNT DISCARDED OUTPUT IX6 X2+X1 SA6 A2 MX6 24 SA2 A0+VFST GET JSN LX6 -6 LX2 -6 BX2 X2*X6 SA1 ANMB PUT JSN IN MESSAGE BX1 -X6*X1 BX6 X1+X2 SA6 A1 MESSAGE ANMB,,R ANM3 SB3 X7 DROP THE POT CHAIN SB4 B0 RJ DPT DROP POTS ANM SUBR ENTRY/EXIT SX1 X7 SET POT ADDRESS LX1 3 TA4 X1,VBMP GET POT COUNT SA2 A0+VSTT BX6 X2 LX6 59-58 CHECK USER BREAK IN PROGRESS TA1 B2,VMST CHECK IF ON LINE BX6 -X1+X6 MX5 -12 BX3 -X5*X2 NG X6,ANM3 IF USER BREAK IN PROGRESS IX6 X2+X4 ADD IN POT COUNT NZ X3,ANM1 IF VSTT BUSY BX6 X6+X7 LX7 12 SET LINKAGE WORD BX7 X7+X4 SA7 A4+ REWRITE FIRST WORD IN POT CHAIN SA6 A2 RJ SAB SET TERMINAL ACTIVITY BIT EQ ANMX RETURN * ADD CHAIN TO END OF QUEUE IN VSTT. ANM1 LX3 3 MX1 6 CHECK FOR POT COUNT OVERFLOW LX1 30 BX2 X1*X2 OLD POT COUNT IX2 X2+X4 BX2 -X1*X2 SX1 B1 LX5 12 NZ X2,ANM2 IF POT COUNT OVERFLOW TA1 X3,VBMP SA6 A2 REWRITE VSTT BX3 -X5*X1 SAVE PREVIOUS LAST CHAIN BX5 X5*X1 LX7 12 BX6 X5+X7 ADD NEW LAST CHAIN SA6 A1 AX7 12 LX3 -9 TA1 X3,VBMP BX7 X1+X7 SA7 A1 EQ ANMX EXIT ANMA CON 0 DISCARDED OUTPUT COUNT ANMB DATA 10L **** LOST DATA 10L OUTPUT ME DATA 6LSSAGE. ASV SPACE 4,30 ** ASV - ASSIGN SUPERVISORY MESSAGE. * * TRANSMITS SUPERVISORY MESSAGE. IF NAM IS BUSY, *ASV* * COPIES THE MESSAGE INTO A POT AND ASSIGNS IT TO * THE NULL SUPERVISORY QUEUE. * *T NSQP 30/LAST POT ,30/FIRST POT. * * * ENTRY (B2) = ACN TO BE PLACED IN THE FIRST WORD OF * THE MESSAGE TEXT. * (B4) = TEXT LENGTH; MAXIMUM 7 WORDS. * (X6) = ADDRESS OF HEADER: * = ZERO, USE DEFAULT HEADER. * (X7) = ADDRESS OF TEXT. 7 WORDS ASSUMED. * * EXIT (X6) = ZERO IF NO POTS AVAILABLE. * * CALLS CBL, CFL, IBC, RPT, SAB, SCS. ASV SUBR ENTRY/EXIT SA6 ASVA SAVE (X6) SA1 NBSY NZ X1,ASV1 IF NAM BUSY RJ SCS TRANSMIT MESSAGE SX6 B1 FLAG MESSAGE AS SENT EQ ASVX EXIT * NAM IS BUSY. SEE IF A POT IS AVAILABLE INTO WHICH * THE MESSAGE CAN BE STORED. ASV1 RJ CFL CHECK POT SUPPLY BX6 X6-X6 NG X2,ASVX IF LOW POT SUPPLY SA7 ASVB SAVE (X7) SX7 B4 SAVE (B4) SA7 ASVC * GET POT FOR MESSAGE. SA5 NSQP GET NULL QUEUE POINTER AX5 30 SET POT TO LINK TO PX5 X5,B1 REQUEST ONE POT RJ RPT SB3 X1 NEW POT POINTER LX1 3 TB4 X1,VBMP NEW POT ADDRESS * ASSIGN POT TO NULL SUPERIVISORY MESSAGE QUEUE. SA2 NSQP GET QUEUE POINTER MX6 -30 BX2 -X6*X2 CLEAR LAST POT POINTER NZ X2,ASV2 IF NOT EMPTY QUEUE SX2 B3+ ASV2 LX1 30-3 SET NEW LAST POT POINTER BX7 X1+X2 SA7 A2+ REWRITE QUEUE POINTER * READ HEADER AND FIRST TEXT WORD OF MESSAGE. SA1 ASVA GET HEADER ADDRESS SA2 ASVB GET TEXT ADDRESS SA2 X2+ READ FIRST WORD OF TEXT NZ X1,ASV3 IF HEADER PROVIDED BY CALLER SX1 HDRS1 USE DEFAULT HEADER ASV3 SA1 X1 GET HEADER MX3 -12 LX3 24 SET ACN MASK SX6 B2 SET ACN * INSERT ACN IN FIRST TEXT WORD, BITS 35-24. BX2 X3*X2 CLEAR ACN FIELD LX6 24 INSERT ACN BX7 X2+X6 * COPY MESSAGE TO POT. BX6 X1 COPY FIRST TWO WORDS SA6 B4 SA7 A6+B1 SA5 ASVC GET WORD COUNT SX6 B1+ SET EXIT STATUS SB6 X5-1 ASV4 ZR B6,ASVX IF COPY COMPLETE SA2 A2+B1 SB6 B6-B1 BX7 X2 STORE WORD SA7 A7+B1 EQ ASV4 CONTINUE TRANSFER ASVA CON 0 SAVE (X6) HEADER ADDRESS ASVB CON 0 SAVE (X7) TEXT ADDRESS ASVC CON 0 SAVE (B4) TEXT LENGTH CBL SPACE 4,10 ** CBL - CHECK BLOCK LIMIT. * * CHECKS TERMINAL DOWNSTREAM BLOCK COUNT TO SEE IF * TERMINAL IS CURRENTLY AT BLOCK LIMIT. * * EXIT (X6) = NONZERO IF AT TERMINAL BLOCK LIMIT. * (X3) = APPLICATION BLOCK COUNT. (DOWNSTREAM * BLOCKS NOT YET ACKNOWLEDGED). * * USES A - 3. * X - 3, 4, 6. CBL SUBR ENTRY/EXIT TA3 B2,VMST READ VMST ENTRY MX6 -3 AX3 30 SHIFT ABL BX4 -X6*X3 SET ABL AX3 3 SHIFT ABC BX3 -X6*X3 SET ABC BX6 X6-X6 ASSUME NOT AT LIMIT IX4 X3-X4 ABC - ABL NG X4,CBLX IF NOT AT LIMIT SX6 B1 SET LIMIT EXIT STATUS EQ CBLX RETURN CCT SPACE 4,20 ** CCT - CHECK CYCLE TIME. * * CHECKS TO SEE IF IT IS TIME TO CYCLE NETWORK. * * ENTRY (NSCT) = MINIMUM CYCLE TIME (MSECS). * (NFRT) = REAL TIME AT LAST CYCLE. * (RTIM) = CURRENT REAL TIME. * * EXIT (X6) = ZERO IF MINIMUM NOT ELAPSED. * (NFRT) = (RTIM) IF MINIMUM ELAPSED. * * USES A - 2, 3, 4, 6. * X - 2, 3, 4, 6. CCT SUBR ENTRY/EXIT SA2 RTIM CURRENT REAL TIME SA3 NFRT LAST FUNCTION REAL TIME SX4 NSCT SET MINIMUM NETWORK SCAN CYCLE TIME MX6 -36 MASK MILLISECONDS BX3 -X6*X3 BX6 -X6*X2 IX3 X6-X3 ELAPSED MILLISECONDS BX6 X6-X6 IX4 X3-X4 NG X3,CCT1 IF REAL TIME RESET NG X4,CCTX IF LESS THAN MINIMUM, RETURN CCT1 BX6 X2 SET FUNCTION TIME SA6 A3 EQ CCTX RETURN CFX SPACE 4,20 ** CFX - CHECK FOR FORCED EXIT. * * CHECKS MONITOR REQUEST AND OTHER DRIVERS CIRCULAR * REQUEST STACKS TO SEE THEY REQUIRE PROCESSING BY * MAIN EXECUTIVE. A STACK REQUIRES PROCESSING IF IT * IS HALF-FULL. * * EXIT (X6) = NONZERO IF FORCED EXIT REQUIRED. * (DSXC) = UPDATED IF DRIVER STACK EXIT. * (MSXC) = UPDATED IF MONITOR STACK EXIT. * (CCFC) = COMPLEMENT OF FUNCTION LIMIT (NFCL). * * USES X - 2, 3, 4, 6, 7. * A - 2, 3, 4, 6, 7. * B - 4, 5, 6. CFX SUBR ENTRY/EXIT * SET FUNCTION LIMIT COMPLEMENT. CHECK FOR FULL NETWORK STACK. SA3 NDSL SX6 -NFCL SA6 CCFC NZ X3,CFX4.1 IF NETWORK STACK IS FULL * CHECK MONITOR REQUEST STACK. SB5 VTRP SET STACK FWA SB6 VTRP+VTRL STACK LWA+1 SX2 MSXC INDICATE EXIT COUNTER SX4 VTRL/2 STACK LENGTH/2 CFX1 SA3 B5 READ STACK ENTRY SB5 B5+B1 ZR X3,CFX2 IF NO REQUEST SX4 X4-1 COUNT ENTRY ZR X4,CFX5 IF STACK HALF FULL CFX2 LT B5,B6,CFX1 IF NOT DONE WITH STACK, LOOP * CHECK DRIVER REQUEST STACKS. SA3 NSPA GET NETWORK STACK POINTER ADDRESS SB5 VDRL-1 START OF DRIVER STACK POINTERS BX6 X6-X6 ASSUME NO EXIT FORCE SB6 X3 (B6) = NETWORK STACK POINTER ADDRESS CFX3 SB5 B5+B1 ADVANCE POINTER ADDRESS EQ B5,B6,CFX3 IF NETWORK POINTER ADDRESS, IGNORE SA3 B5 READ STACK POINTER NG X3,CFXX IF END OF STACK ZR X3,CFX3 IF NULL STACK, IGNORE AX3 24 SHIFT STACK POINTER SB4 X3+B1 (B4) = ADDRESS OF FIRST SA2 B4+1 READ IN SA3 A2+1 READ OUT SX2 X2+B1 IX4 X3-X2 (X4) = OUT-IN-1 PL X4,CFX4 IF IN .LE. OUT-1 SA2 B4 READ FIRST SA3 A3+B1 READ LIMIT SX2 X2 SX3 X3 IX4 X4-X2 IX4 X4+X3 (X4) = (OUT-FIRST)+(LIMIT-IN)-1 CFX4 SX4 X4-VDSL/2 CHECK LENGTH PL X4,CFX3 IF LESS THAN HALF FULL CFX4.1 SX2 DSXC * UPDATE FORCED EXIT COUNT AND RETURN. CFX5 SA2 X2 READ EXIT COUNTER WORD SX6 B1 UPDATE EXIT COUNT IX7 X6+X2 SA7 A2 EQ CFXX RETURN SPACE 4,10 ** COA - CHECK OUTPUT AVAILABLE. * * DETERMINES IF THERE IS ANY OUTPUT BEING OUTPUT TO * THE TERMINAL OR ANY DRIVER REQUESTS PENDING. * * ENTRY (A0) = TERMINAL TABLE ADDRESS. * (X1) = VDCT, LEFT SHIFTED NINE BITS. * * EXIT (X4) = 0 IF NO OUTPUT PRESENT. * (X4) .NE. 0 IF OUTPUT PRESENT. * * USES A - 1, 6. * X - 1, 4, 6. COA SUBR ENTRY/EXIT LX1 -9 REALIGN VDCT SX4 B1 NG X1,COAX IF DRIVER REQUEST PENDING TA1 B2,VMST CHECK FOR OUTPUT FLAG LX4 52-0 BX4 X4*X1 ZR X4,COA1 IF NO OUTPUT ON *NAM* BX6 -X4*X1 CLEAR OUTPUT FLAG SA6 A1 REWRITE VMST EQ COAX RETURN COA1 SA1 A0+VSTT CHECK FOR OUTPUT POT MX4 -12 BX4 -X4*X1 EQ COAX RETURN DBC SPACE 4,10 ** DBC - DECREMENT BLOCK COUNT. * * DECREMENT TERMINAL APPLICATION BLOCK COUNT. * * EXIT (X6) = NEGATIVE IF BLOCK COUNT ZERO ON ENTRY. * * USES A - 3, 6. * X - 3, 6. DBC SUBR ENTRY/EXIT TA3 B2,VMST READ VMST ENTRY MX6 -3 MASK BLOCK COUNT LX3 -33 BX6 -X6*X3 IX3 X3-X6 CLEAR BLOCK COUNT SX6 X6-1 DECREMENT BLOCK COUNT NG X6,DBCX IF ZERO ON ENTRY BX6 X6+X3 INSERT NEW BLOCK COUNT LX6 33 SA6 A3 REWRITE VMST ENTRY BX6 X6-X6 (X6) STATUS = NO ERROR EQ DBCX RETURN DCI SPACE 4,15 ** DCI - DISCARD INPUT IF NECESSARY. * * ENTRY (X1) = MESSAGE HEADER. * (X6) = 0, IF OVERFLOW ALREADY DETECTED. * = (VMST), IF TESTING FOR DISCARD. * * EXIT (X0) = NONZERO IF INPUT TO DISCARD. * * USES A - 1, 2, 3, 6. * B - 3, 4, 7. * X - ALL. * * CALLS DPT, ERQ, SRE. DCI SUBR ENTRY/EXIT SA2 A0+VUIT SA3 A0+VSTT MX7 -12 LX3 59-56 BX2 -X7*X2 ZR X2,DCI4 IF NO EJT ORDINAL ASSIGNED, DISCARD DATA NG X3,DCI4 IF DETACH IN PROGRESS, DISCARD DATA ZR X6,DCI4 IF OVERFLOW ALREADY DETECTED LX1 59-13 CHECK CANCEL LINE FLAG BX5 X1 SA1 A0+VDCT PL X5,DCI0 IF CANCEL BIT NOT SET LX1 59-49 PL X1,DCI0 IF NOT AUTO MODE MX4 1 LX1 59-53-59+49 BX7 X4+X1 SET CANCEL AUTO LINE LX7 53-59 SA7 A1 LX7 59-49-59+53 DCI0 SA1 A0+VDCT SA2 A0+VDPT LX2 59-12 CHECK DISCARD DATA BIT BX2 X5+X2 NG X2,DCI4 IF EITHER SET SA2 A0+VSTT LX6 59-57 CHECK FOR BREAK IN PROGRESS LX1 59-50 CHECK TEXT MODE IN PROGRESS PL X6,DCI1 IF BREAK NOT IN PROGRESS PL X1,DCI4 IF NOT TEXT MODE, DISCARD INPUT DCI1 LX6 59-55-59+57 CHECK END-CONNECTION FLAG LX2 59-48 CHECK LOGOUT IN PROGRESS BX7 X6+X2 NG X7,DCI4 IF ANY OF THE ABOVE SET, DISCARD * DISCARD *BGI* REQUEST. DCI2 LX1 50-59 MX5 -12 BX3 -X5*X1 MASK DRIVER REQUEST BX0 X0-X0 SET NORMAL RETURN STATUS PL X1,DCIX IF NO DRIVER REQUEST SX3 X3-/1TD/BGI NZ X3,DCI3 IF NOT *BGI* REQUEST MX6 13 CLEAR *BGI* REQUEST LX6 12 BX6 -X6*X1 SA6 A1 REWRITE VDCT EQ DCIX RETURN DCI3 SX3 X3-/1TD/IIP+/1TD/BGI ZR X3,DCIX IF AN *IIP* REQUEST * DISCARD INPUT. DCI4 SA1 RCVH READ MESSAGE HEADER SA2 A0+VDPT AX1 54 SX4 B0 SX0 X1-BTMS ZR X0,DCI5 IF MSG BLOCK SX4 10000B DISCARD DATA BIT DCI5 BX6 X4+X2 SA6 A2 REWRITE *VDPT* RJ RIP RESET INPUT POINTERS IN *VDPT* DCI6 NZ X0,DCIX IF NOT MSG BLOCK RJ SOM SEND OVERFLOW MESSAGE SX0 B1 DISCARD INPUT FLAG EQ DCIX EXIT DLP SPACE 4,20 ** DLP - DELINK POT. * * DELINKS POT FROM CHAIN. POT REMAINS RESERVED AND * LINK TO FOLLOWING POT IS CLEARED. * * ENTRY (X1) = POT POINTER. * * EXIT (X7) = POT POINTER TO WHICH ENTRY POT WAS * ORIGINALLY LINKED. ZERO IF ENTRY POT * WAS NOT LINKED. * * USES A - 3, 6. * X - 3, 4, 6. * B - 7. * * CALLS ABT. DLP SUBR ENTRY/EXIT SX4 X1 SET PLT RELATIVE ADDRESS ZR X4,DLP1 IF TRYING TO DELINK POT ZERO LX4 -2 TA3 X4,VPLP READ PLT ENTRY MX6 2 BX4 X6*X4 MASK BYTE ORDINAL LX4 4 BYTE * 4 LX6 X4,B1 BYTE * 8 IX4 X4+X6 BYTE * 12 SB7 X4+12 SET LINK BYTE SHIFT COUNT LX3 X3,B7 SHIFT LINK BYTE MX6 -12 BX7 -X6*X3 MASK LINK BYTE SB7 B7-60 BX3 X6*X3 CLEAR LINK BYTE AX6 X3,B7 REWRITE PLT ENTRY SA6 A3 EQ DLPX RETURN DLP1 SX6 3RDLP RJ ABT BX7 X7-X7 EQ DLPX EXIT ECL SPACE 4,20 ** ECL - ENTER COMMAND INPUT LINE. * * ENTERS DRIVER REQUEST QUEUE ENTRY TO RELEASE INPUT * LINE TO THE EXECUTIVE AS A COMMAND LINE. * * ENTRY (X1) = (VDPT). * (VDPT) = 12/FP, 12/LP, 3/FW, 3/WC, 6/, 12/FLAGS, 12/. * FP = FIRST POT OF LINE. * LP = LAST POT OF LINE. * FW = FIRST WORD OF FIRST POT. * WC = LAST POT WORD COUNT. * (A1) = ADDRESS OF VDPT. * * EXIT POTS RELEASED TO EXECUTIVE. * (VDPT) = POT POINTERS CLEARED. * * CALLS ERQ. ECL SUBR ENTRY/EXIT SX7 1S16 CLEAR INPUT-INITIATED BIT BX1 -X7*X1 MX6 -30 CLEAR POT POINTERS BX6 -X6*X1 MX2 -12 SA6 A1+ REWRITE VDPT LX1 12 SET FIRST POT OF LINE MX7 -3 BX2 -X2*X1 LX1 15 SX6 /TLX/CLI SET REQUEST CODE BX7 -X7*X1 SET FIRST WORD OF FIRST POT SB3 X2 RJ ERQ ENTER REQUEST SA1 A0+VROT SEE IF VROT COMPLETE LX1 59-0 PL X1,ECLX IF CONNECTED TO SMFEX LX1 0-59 SET INPUT SATISFIED SX7 1S5 BX7 X1+X7 SA7 A1 REWRITE VROT EQ ECLX EXIT EIL SPACE 4,15 ** EIL - PROCESS END OF INPUT LINE. * * CALLS COMMAND OR SOURCE INPUT LINE PROCESSOR DEPENDING * ON TERMINAL MODE AND DATA FORMAT. * * ENTRY (A1) = ADDRESS OF VDPT. * (X1) = (VDPT). * * EXIT (VDPT) = UPDATED. * (X0) AND (X5) UNCHANGED. * * CALLS ECL, ESL. EIL SUBR ENTRY/EXIT * SELECT PROCESSOR ACCORDING TO MODE FLAGS. SA2 A0+VDCT READ VDCT LX2 59-54 CHECK READ-DATA BIT BX5 X1 MOVE (VDPT) FOR TESTING NG X2,EIL1 IF READ-DATA SET LX2 54-50 CHECK TEXT MODE BIT MX3 -12 NG X2,EIL2 IF TEXT MODE SET * SELECT PROCESSOR ACCORDING TO DATA MODE. LX5 59-15 CHECK FOR BINARY MODE NG X5,EIL2 IF SET LX5 60+12-59+15 GET FIRST POT POINTER BX2 -X3*X5 MX4 -3 LX5 15 GET FIRST POT FIRST WORD ADDRESS BX4 -X4*X5 MASK FIRST POT WORD INDEX SB3 X2 STORE POT POINTER LX2 3 SET POT ADDRESS TB4 X2,VBMP SA3 B4+X4 READ FIRST WORD OF DATA MX2 6 BX4 X2*X3 CHECK FIRST CHARACTER LX4 6 SX2 X4-1R0 NG X2,EIL1 IF ALPHA CHARACTER SX2 X4-1R9-1 NG X2,EIL2 IF NUMERIC * ENTER COMMAND LINE. EIL1 RJ ECL ENTER COMMAND LINE EQ EILX RETURN * ENTER SOURCE LINE. EIL2 RJ ESL ENTER SOURCE LINE EQ EILX RETURN ERQ SPACE 4,30 ** ERQ - ENTER CIRCULAR STACK REQUEST. * * ENTERS DRIVER-TO-EXECUTIVE REQUESTS IN THE DRIVER * CIRCULAR STACK. THE STACK LIMIT FLAG WILL BE SET * IF THERE ARE LESS THAN THREE WORDS LEFT IN THE * STACK TO INHIBIT OPERATIONS WHICH ISSUE MULTIPLE * REQUESTS. * * ENTRY (NDSA) = ADDRESS OF CIRCULAR STACK. * (X6) = REQUEST CODE. * (X7) = REQUEST BITS 47-24. * (B2) = REQUEST BITS 11-0 (TERMINAL NUMBER). * (B3) = REQUEST BITS 23-12. * * EXIT (X6) = NEGATIVE IF ENTRY COULD NOT BE MADE. * (X6) = (NDSL) IF ENTRY MADE. * (X7) = STACK REMAINING WORD COUNT. * REQUEST ENTERED IN CIRCULAR STACK. * REQUEST STACK *IN* POINTER UPDATED. * (NDSL) = NONZERO IF STACK FULL AFTER ENTRY. * * USES A - 1, 2, 3, 4, 6, 7. * X - 1, 2, 3, 4, 5, 6, 7. * B - 6. * * CALLS ABT. ERQ SUBR ENTRY/EXIT SB6 X6 SAVE REQUEST CODE FOR PACKING MX6 -24 * FORMAT REQUEST STACK ENTRY. SA1 NDSA GET DRIVER STACK ADDRESS SX5 B3 SET BITS 23-12 BX7 -X6*X7 SET BITS 47-24 SX6 B2 SET BITS 11-0 LX5 12 SA1 X1+2 READ IN PX6 X6,B6 PACK REQUEST CODE AND BITS 11-0 LX7 24 BX6 X6+X5 MERGE BITS 23-12 IX6 X6+X7 MERGE BITS 47-24 SA6 X1 STORE REQUEST * UPDATE CIRCULAR STACK POINTER. SX7 X1+B1 UPDATE IN SA3 A1+2 READ LIMIT SA4 A1-B1 READ FIRST IX1 X3-X7 LIMIT - IN SA2 A1+B1 READ OUT NZ X1,ERQ1 IF IN .NE. LIMIT SX7 X4 SET IN = FIRST ERQ1 IX1 X2-X7 LENGTH = OUT-IN ZR X1,ERQ4 IF OUT = IN, ERROR SA7 A1 STORE NEW IN PL X1,ERQ2 IF OUT > IN IX1 X1-X4 LENGTH = (LIMIT-IN) + (OUT-FIRST) IX1 X1+X3 ERQ2 SX6 B1+ INITIALIZE STACK LIMIT FLAG SX7 X1-3 NG X7,ERQ3 IF STACK FULL SX6 B0+ ERQ3 SA6 NDSL SET/CLEAR STACK LIMIT FLAG EQ ERQX RETURN * PROCESS ERROR IF STACK FULL. ERQ4 SX6 3RERQ SET ERROR CODE RJ ABT MX6 59 SET NEGATIVE STATUS BX7 X6 EQ ERQ3 RETURN ESL SPACE 4,20 ** ESL - ENTER SOURCE INPUT LINE. * * RELEASES INPUT LINE TO EXECUTIVE AS A SOURCE LINE * OF DATA IF THE LINE CROSSES A POT BOUNDARY. IF THERE * IS NO POT SWITCH INVOLVED, THE INPUT INITIATED BIT * IS SET ONLY. * IF THE PRIMARY FILE IS NON-EXISTENT OR LOCKED, * THIS ROUTINE ISUES AN APPROPRIATE MESSAGE AND * CLEARS THE POT POINTERS IN *VDPT*. * * ENTRY (X1) = (VDPT). * (VDPT) = 12/FP, 12/LP, 3/FW, 3/WC, 6/, 12/FLAGS, 12/. * FP = FIRST POT OF LINE. * LP = LAST POT OF LINE. * FW = FIRST WORD OF FIRST POT. * WC = LAST POT WORD COUNT. * (A1) = ADDRESS OF VDPT. * (B2) = TERMINAL NUMBER. * (B3) = POT POINTER FOR THE INPUT LINE. * * EXIT IF PRIMARY FILE IS PRESENT IN WRITE MODE - * (VDPT) = FIRST POT RESET TO LAST POT. * INPUT INITIATED BIT SET. * IF LOCKED OR NO PRIMARY FILE - * (VDPT) = POT POINTERS CLEARED. * APPROPRIATE MESSAGE ISSUED. * * USES X - 1, 2, 3, 4, 5, 6, 7. * A - 1, 5, 6. * B - 3, 4, 5, 7. * * CALLS ACD, ASV, ERQ, SSP. ESL SUBR ENTRY/EXIT * CHECK PRIMARY FILE SA5 A0+VFNT GET PRIMARY FILE NAME MX6 42 BX6 X6*X5 NZ X6,ESL1 IF PRIMARY FILE EXISTS SX6 DMNP SET MESSAGE ADDRESS SB4 DMNPL SET MESSAGE LENGTH EQ ESL2 FINISH PROCESSING ESL1 LX5 59-12 CHECK WRITE LOCKOUT BIT PL X5,ESL3 IF WRITE LOCKOUT NOT SET SX6 DMLP SET MESSAGE ADDRESS SB4 DMLPL SET MESSAGE LENGTH ESL2 RJ ACD ASSIGN MESSAGE * CLEAR POT POINTERS IN VDPT SA1 A0+VDPT CLEAR POT POINTERS MX6 30 BX6 -X6*X1 SA6 A1+ REWRITE VDPT EQ ESLX RETURN * UPDATE POINTERS IN VDCT. ESL3 MX5 -3 EXTRACT FIRST WORD LX1 -30 BX7 -X5*X1 (X7) = FIRST WORD LX1 -3 RESET FIRST WORD = WORD COUNT BX6 X5*X1 IX6 X6+X7 MX5 -12 EXTRACT LAST POT LX6 -3 BX1 -X5*X6 (X1) = LAST POT LX6 -12 EXTRACT FIRST POT BX2 -X5*X6 (X2) = FIRST POT LX7 12 SHIFT WORD COUNT FOR *RIN* REQUEST BX6 X5*X6 RESET FIRST POT = LAST POT IX6 X6+X1 SX4 1S16 SET INPUT-INITIATED BIT 16 LX6 48 REWRITE VDPT IX3 X1-X2 COMPARE POT POINTERS BX6 X6+X4 SA6 A1 ZR X3,ESLX IF NO POT CHANGE BX7 X7+X1 MERGE LAST POT, WORD COUNT SB3 X2 SET FIRST POT SX6 /TLX/RIN SET RELEASE-INPUT REQUEST RJ ERQ ENTER REQUEST EQ ESLX EXIT ETX SPACE 4,10 ** ETX - EXIT FROM TEXT MODE. * * ENTER *EXIT TEXT MODE* REQUEST. * * ENTRY (A0) = TERMINAL TABLE ADDRESS. * * EXIT THE INPUT-INITIATED FLAG IS CLEARED. * VDPT CLEARED. * *EXIT TEXT MODE* REQUEST ENTERED. * * CALLS ERQ. ETX SUBR ENTRY/EXIT SA1 A0+VDCT CLEAR TEXT MODE BIT MX6 59 LX6 50-0 BX6 X6*X1 SA6 A1 REWRITE VDCT SA1 A0+VDPT GET POT POINTER BX6 X6-X6 SA6 A1 CLEAR VDPT MX6 -12 LX1 60-36 EXTRACT LAST POT OF LINE BX6 -X6*X1 SB3 X6 (B3)=LAST POT OF LINE MX7 -3 LX1 36-30 EXTRACT LAST POT WORD COUNT BX7 -X7*X1 (X7)=LAST POT WORD COUNT SX6 /TLX/ETX EXIT TEXT MODE REQUEST RJ ERQ ENTER REQUEST EQ ETXX RETURN GAT SPACE 4,10 ** GAT - GET ACTIVE TERMINAL NUMBER. * * SEARCHES FOR NEXT TERMINAL WITH ACTIVITY BIT SET. * * ENTRY (B2) = STARTING TERMINAL NUMBER. * * EXIT (B2) = NEXT TERMINAL NUMBER WITH ACTIVITY. * = ZERO IF NO TERMINAL FOUND. * (A0) = (B2) TERMINAL TABLE ADDRESS. * (X6) = (B2). * * MACROS TTADD. GAT SUBR ENTRY/EXIT SA4 HACN GET HIGHEST ACTIVE ACN TX2 B2,-VNTP SET TERMINAL ORDINAL MX7 -5 BX3 -X7*X2 TERMINAL ORDINAL MOD 32 AX2 5 TERMINAL ORDINAL/32 SB5 X3 TA1 X2,VNAT READ STARTING TABLE ENTRY SB6 32 (B6) = BIT TEST SHIFT LIMIT SB7 X4 (B7) = HIGHEST ACTIVE ACN LX1 X1,B5 SHIFT STARTING TERMINAL BIT EQ GAT2 ENTER TEST LOOP * ADVANCE TO NEXT TABLE ENTRY. GAT1 SA1 A1+B1 READ NEXT TABLE ENTRY SB5 B0 CLEAR SHIFT COUNT NZ X1,GAT2 IF NOT NULL WORD SB2 B2+32 ADVANCE TERMINAL NUMBER LE B2,B7,GAT1 IF NOT END OF TERMINALS EQ GAT4 * SEARCH ENTRY WORD FOR ACTIVITY BIT. GAT2 NG X1,GAT3 IF ACTIVITY BIT SET SB2 B2+1 ADVANCE TERMINAL NUMBER LX1 1 SHIFT NEXT TERMINAL BIT GT B2,B7,GAT4 IF END OF ACTIVE TERMINALS SB5 B5+B1 ADVANCE SHIFT COUNT LT B5,B6,GAT2 IF NOT END OF ENTRY WORD EQ GAT1 PROCESS NEXT TABLE ENTRY * RETURN ENTRY FOUND. GAT3 TTADD B2,A0,X1,X2 SET TERMINAL TABLE ADDRESS SX6 B2 RETURN TERMINAL NUMBER EQ GATX RETURN * RETURN ENTRY NOT FOUND. GAT4 SB2 B0 CLEAR RETURN REGISTERS BX6 X6-X6 EQ GATX RETURN IAT SPACE 4,10 ** IAT - INITIALIZE AIP TRACE OUTPUT FILE. * * ENTRY (ATMC) = MESSAGE COUNT USED TO CONTROL * PROCESSING OF TRACE OUTPUT FILE. * = ZERO, IF TRACE IS NOT SELECTED. * = NEGATIVE, IF PROCESS TRACE FILE AT * IAF TERMINATION ONLY. * * EXIT TRACE OUTPUT FILE INITIALIZED IF REQUIRED. * * USES X - 1, 2, 6. * A - 1, 2, 6. * * MACROS NETREL. IAT1 NETREL =0,MXLT,=0 INITIALIZE TRACE FILE FOR T=* OPTION SB1 1 IAT SUBR ENTRY/EXIT SA1 ATMC GET TRACE MESSAGE COUNT SA2 IATA CHECK IF FILE ALREADY INITIALIZED ZR X1,IATX IF TRACE IS NOT SELECTED NZ X2,IATX IF TRACE FILE ALREADY INITIALIZED BX6 X1 SA6 A2 INDICATE TRACE FILE INITIALIZED NG X1,IAT1 IF T=* OPTION IS SELECTED NETREL JPTO,MXLT,RWTF INITIALIZE TRACE OUTPUT FILE SB1 1 EQ IATX RETURN IATA DATA 0 SET NONZERO WHEN TRACE FILE INITIALIZED IBC SPACE 4,10 ** IBC - INCREMENT BLOCK COUNT. * * INCREMENT TERMINAL APPLICATION BLOCK COUNT. * * EXIT (VMST) = BLOCK COUNT INCREMENTED * * USES A - 3, 6. * X - 3, 6. IBC SUBR ENTRY/EXIT TA3 B2,VMST READ VMST SX6 B1 INCREMENT ABC LX6 33-0 IX6 X6+X3 SA6 A3 REWRITE VMST EQ IBCX RETURN ILV SPACE 4,10 ** ILV - INSERT LOAN STATUS VALUE. * * PUT THE LOAN STATUS VALUE IN BYTE 2 OF VROT. * * ENTRY (X7) = LOAN STATUS VALUE. * * EXIT (X7) = UNCHANGED. * * USES A - 1, 6. * X - 0, 1, 6. ILV SUBR ENTRY/EXIT SA1 A0+VROT INSERT LOAN STATUS VALUE IN VROT MX0 -12 LX0 24-0 BX6 X0*X1 LX1 59-0 PL X1,PCSX IF VROT BUSY LX7 24-0 BX6 X6+X7 SA6 A1 REWRITE VROT LX7 0-24 REALIGN LOAN STATUS VALUE EQ ILVX RETURN IPM SPACE 4,15 ** IPM - ISSUE PROMPT MESSAGE. * * EXIT (X6) .NE. 0, IF PROMPT WAS ASSIGNED TO TERMINAL, * OR *MSG* BLOCK ALREADY SENT. * .EQ. 0, IF POT WAS NOT AVAILABLE FOR PROMPT. * * USES X - 1, 2, 3, 6. * A - 1, 3. * B - 3, 4. * * CALLS ACD. IPM SUBR ENTRY/EXIT SA1 A0+VROT CHECK QUEUED INPUT AVAILABLE TA3 B2,VMST MX2 -12 BX3 -X2*X3 LX2 36 BX1 -X2*X1 BX6 X1+X3 NZ X6,IPMX IF INPUT QUEUED, DO NOT SEND PROMPT SA1 A0+VDPT CHECK INPUT MODE SX2 140000B SA3 A0+VSTT CHECK PROMPT MODE BX2 X1*X2 LX3 59-53 SX6 DMBI SET NULL MESSAGE ADDRESS SB4 B1+B1 SET TEXT LENGTH SB3 B0 NG X3,IPM1 IF PROMPT OFF NZ X2,IPM1 IF TRANSPARENT OR EXTENDED MODE LX3 59-55-6 NG X3,IPM1 IF USER EFFECT MODE SX6 DMIP SET INPUT PROMPT ADDRESS RJ ACD ASSIGN CANNED DATA MESSAGE EQ IPMX EXIT IPM1 TA3 B2,VMST READ VMST ENTRY LX3 59-53 NG X3,IPMX IF *MSG* BLOCK SENT, EXIT RJ ACD ASSIGN CANNED DATA MESSAGE EQ IPMX EXIT ISW SPACE 4,10 ** ISW - ISSUE SHUTDOWN WARNING MESSAGE. * * CALLS ACD, CBL. ISW SUBR ENTRY/EXIT RJ CBL CHECK BLOCK LIMIT NZ X6,ISWX IF TERMINAL AT BLOCK LIMIT * CHECK FOR BREAK IN PROGRESS, WARNING SENT, OR * END CONNECTION. TA1 B2,VMST READ VMST ENTRY SX6 7B SET BIT MASK LX6 55-0 BX6 X6*X1 NZ X6,ISWX IF ANY OF THE ABOVE, RETURN * CHECK FOR JOB ACTIVE OR OUTPUT ON MASS STORAGE. SA1 A0+VROT READ VROT SX6 26B BX6 X6*X1 NZ X6,ISWX IF ANY OF THE ABOVE, RETURN * CHECK FOR OUTPUT CONTINUATION OR LOGOUT. SA2 A0+VSTT READ VSTT LX1 59-29 LX2 59-48 NG X1,ISWX IF OUTPUT CONTINUATION NG X2,ISWX IF LOGOUT * CHECK FOR AUTO MODE INPUT. SA1 A0+VDCT READ VDCT SB3 B0 INDICATE NO POT AVAILABLE FOR MESSAGE LX1 59-49 NG X1,ISWX IF AUTO MODE, RETURN * ASSIGN MESSAGE. SX6 DMSH MESSAGE ADDRESS SB4 DMSHL MESSAGE LENGTH RJ ACD ASSIGN MESSAGE ZR X6,ISWX IF MESSAGE NOT ASSIGNED, RETURN * SET MESSAGE-ISSUED STATUS. TA1 B2,VMST READ VMST SX6 B1 SET BIT LX6 56-0 BX6 X1+X6 SA6 A1 REWRITE VMST EQ ISWX RETURN PDR SPACE 4,10 ** PDR - PROCESS DRIVER REENTRY. * * ENTRY (VCHT) = REENTRY PARAMETERS. * * EXIT REENTRY PROCESSED. * (X6) = ZERO IF NO REENTRY PRESENT. * * CALLS PCS. PDR SUBR ENTRY/EXIT SA1 A0+VCHT READ VCHT BX6 X6-X6 ASSUME NO REENTRY MX2 36 BX3 X2*X1 MASK REENTRY ZR X3,PDRX IF NO REENTRY, RETURN BX6 -X2*X1 CLEAR REENTRY AX3 24 SA6 A1 REWRITE VCHT BX5 -X2*X3 (X5) = X7 AND B3 REENTRY PARAMETERS SX1 B2 LX5 12 IX5 X5+X1 INSERT (X5) TERMINAL NUMBER AX3 24 MX2 -12 BX3 -X2*X3 SB7 X3+NDR SET REENTRY ADDRESS RJ PCS EXECUTE REENTRY SX6 B1+ INDICATE REENTRY PROCESSED EQ PDRX RETURN PIN SPACE 4,30 ** PIN - PROCESS INPUT DATA. * * TRANSLATES INPUT DATA AND PASSES INPUT TO EXECUTIVE. * * ENTRY (DIOF) = DIRECT INPUT FLAG. * (RCVB) = INPUT DATA. * (RCVH) = INPUT MESSAGE HEADER. * (VDPT) = CURRENT POSITION IN POT. * * EXIT (X6) = ZERO IF NOT ENOUGH POTS FOR TRANSLATION. * (VDPT) = UPDATED. * (X0) = POSITIVE VALUE IF OVERFLOW OCCURRED. * * CALLS EIL, ETX, IVD, VBX, VDX. PIN SUBR ENTRY/EXIT * INITIALIZE TRANSLATOR CALL PARAMETERS. SA4 RCVH READ MESSAGE HEADER SA5 A0+VDPT READ VDPT MX6 -12 BX2 -X6*X4 MASK TEXT LENGTH BX3 -X6*X5 OLD CHARACTER COUNT SB7 X2 (B7) = TEXT LENGTH IN CHARACTERS IX1 X2+X3 CUMULATIVE CHARACTER COUNT SX0 X1-VXLL-1 LX2 18 PL X0,PINX IF OVERFLOW OCCURRED SA3 A0+VDCT BX6 X3 LX6 59-47 NG X6,PINX IF CONNECTION IS LOANED NE B7,B1,PIN1 IF NOT ONE CHARACTER MESSAGE LX6 59-50-59+47 NG X6,PIN8 IF TEXT MODE * SET UP RCCW. PIN1 SX6 RCVB FWA BUFFER BX6 X6+X2 COMBINE FWA AND TEXT LENGTH SX0 B1 LX0 13 BX2 X0*X5 CHECK BLK BIT NZ X2,PIN2 IF NOT FIRST BLOCK MX2 1 BX6 X2+X6 SET FIRST BLOCK BIT PIN2 SA6 RCCW MX6 -12 BX6 X5*X6 CLEAR OLD CC SA4 RCVH BX6 X1+X6 INSERT CUMULATIVE CC BX6 -X0*X6 CLEAR BLK RECEIVED BX1 X4 AX1 54 SX7 X1+ SX1 X1-BTMS SA7 PINA SAVE BLOCK TYPE ZR X1,PIN3 IF MSG BLOCK BX6 X0+X6 SET BLK RECEIVED PIN3 SA6 A5+ REWRITE VDPT * PROCESS RESOURCE LIMIT FOR TRANSPARENT MODE SA1 A0+VROT CHECK FOR RESOURCE LIMIT LX1 59-19 MX2 2 BX5 X2*X1 ZR X5,PIN4 IF NO LIMIT MX2 1 CLEAR BINARY DATA BIT IN RCVH LX2 14-59 BX7 -X2*X4 SA7 A4 REWRITE RCVH BX4 X7 * SELECT TRANSLATION PROCESSOR. PIN4 SX0 4000B SET BINARY DATA BIT SX2 5 CHARACTERS PER WORD SX5 7777B MASK FOR 12 BIT CHARACTERS SX7 B7 SET CHARACTER COUNT FOR ENTRY TO *IVD* LX4 59-14 CHECK HEADER *XPT* BIT LX3 59-52 CHECK ASCII8 MODE NG X4,PIN6 IF BINARY DATA LX4 X3,B1 LX6 59-14 CHECK TRANSPARENT MODE NG X4,PIN5 IF EXTENDED MODE NG X6,PIN5 IF TRANSPARENT MODE SX0 B1 LX0 58-0 SET ASCII8 BIT NG X3,PIN6 IF ASCII8 MX5 7 LX5 6 SX2 10D CHARACTERS PER WORD PIN5 RJ IVD INITIALIZE VDPT AND POT CHAIN ZR X6,PINX IF NO POTS RJ VDX TRANSLATE TO 6/12 EQ PIN7 COMPLETE PROCESSING PIN6 RJ IVD INITIALIZE VDPT AND POT CHAIN ZR X6,PINX IF NO POTS RJ VBX TRANSLATE BINARY DATA PIN7 SA1 A0+VDPT BX0 X1 LX0 59-13 NG X0,PINX IF NOT MSG BLOCK SA2 DIOF MX0 1 NZ X2,PINX IF DIRECT I/O REQUEST RJ EIL ENTER END-OF-LINE * CLEAR MODE BITS AND CHARACTER COUNT. SA1 A0+VDPT READ VDPT MX6 -16 MX0 1 SET NO OVERFLOW STATUS BX7 X6*X1 CLEAR BITS SA2 A0+VROT CHECK FOR RESOURCE LIMIT MX5 2 LX2 59-19 BX5 X5*X2 ZR X5,PIN7.1 IF NO LIMIT HAS OCCURRED LX1 59-15 BX2 X0*X1 PRESERVE VALUE OF BINARY BIT LX2 15-59 BX7 X7+X2 PIN7.1 SA7 A1+ REWRITE VDPT EQ PINX RETURN * PROCESS TEXT MODE EXIT. PIN8 SA4 RCVB READ INPUT DATA AX4 52 SX4 X4-ASC.ETX CHECK FOR *ETX* CODE NZ X4,PIN1 IF NOT *ETX* SB3 B0+ RJ ETX EXIT FROM TEXT MODE SX6 B1 MX0 1 SET NORMAL RETURN EQ PINX RETURN PINA CON 0 BLOCK TYPE PQO SPACE 4,20 ** PQO - PROCESS QUEUED OUTPUT. * * PROCESS THE NEXT OUTPUT MESSAGE QUEUED IN VSTT. * FOR A DESCRIPTION OF HOW POT CHAINS OF DATA ARE LINKED * TOGETHER IN THE QUEUE, SEE THE NOTE AT THE BEGINNING * OF SUBROUTINE *ANM*. * * EXIT (X6) = ZERO IF NO OUTPUT PRESENT. * * CALLS CBL, DQO, ERQ, GPL, IBC, SCS, SRE, TDM, UAC, UOC. PQO SUBR ENTRY/EXIT TA1 B2,VMST NG X1,PQO0 IF TERMINAL IS ON LINE RJ DQO DROP QUEUED OUTPUT PQO0 RJ CBL CHECK BLOCK LIMIT NZ X6,PQOX IF AT BLOCK LIMIT SA1 A0+VSTT MX6 -12 MASK POT POINTER BX6 -X6*X1 ZR X6,PQOX IF NO OUTPUT SA1 A0+VDCT CHECK CONNECTION LX1 59-47 NG X1,PQO8 IF LOANED CONNECTION SA3 A0+VDPT READ VDPT LX3 59-16 NG X3,PQOX IF INPUT INITIATED, RETURN SB3 X6 LX6 3 TA2 X6+1,VBMP AX6 3 MX4 6 CHECK FOR BLOCK TYPE BX4 X4*X2 ZR X4,PQO3 IF MESSAGE NEEDS TO BE TRANSLATED BX6 X2 SA6 SNDH STORE HEADER SB5 6 PQO1 SA2 A2+B1 TRANSFER DATA INTO SEND BUFFER SB5 B5-B1 BX6 X2 SA6 A6+B1 NZ B5,PQO1 IF MORE DATA IN POT RJ GPL SA2 B4-1 SB5 VCPC NZ B3,PQO1 IF MORE POTS CONTAINING DATA SA1 SNDH EQ PQO6 SEND MESSAGE AND DROP POTS * ENTRY POINT TO RESUME TRANSLATION OF DATA WHEN A * CHAIN OF OUTPUT HAD TO BE BROKEN INTO MORE THAN ONE * DOWNLINE BLOCK. AN EXAMPLE IS WHEN TRANSPARENT AND * NORMAL DATA ARE MIXED IN THE SAME OUTPUT CHAIN. PQO2 BSS 0 SA1 A0+VSTT CHECK OUTPUT POT POINTER MX6 -12 BX6 -X6*X1 ZR X6,PQOX IF POTS HAVE BEEN DROPPED SB7 PQO2 RJ CBL CHECK BLOCK LIMIT NZ X6,PCD IF AT BLOCK LIMIT, REENTER MX3 -3 BX2 -X3*X7 SET UP ENTRY CONDITIONS AX7 3 BX7 -X3*X7 SX6 B3 SB6 X2 SB7 X7 EQ PQO4 RESUME TRANSLATION PQO3 SB6 2 SB7 B0 PQO4 RJ TDM TRANSLATE DATA INTO BUFFER SX7 B0+ CLEAR USER FORMAT EFFECTOR FLAG SA7 TDMG NG X6,PQO9 IF DATA COULD NOT BE TRANSLATED ZR X6,PQO5 IF ENTIRE POT CHAIN TRANSLATED BX7 X6 AX6 6 MAKE REENTRY FOR TRANSLATION CONTINUATION SB3 X6 SB7 PQO2 RJ SRE PQO5 SA1 SNDH CHECK FOR EMBEDDED FUNCTION REQUESTS MX3 -12 BX3 -X3*X1 ZR X3,PQO8 IF ZERO LENGTH MESSAGE * SET MESSAGE BLOCK SENT FLAG IF CURRENT MESSAGE IS A * MESSAGE BLOCK. PQO6 TA5 B2,VMST AX1 54 EXTRACT BLOCK TYPE SX3 B1 SX1 X1-BTMS LX3 53-0 BX7 -X3*X5 CLEAR PREVIOUS VALUE NZ X1,PQO7 IF NOT MESSAGE BLOCK BX7 X3+X7 SET MESSAGE BLOCK FLAG PQO7 SA7 A5 SX6 SNDH TRANSMIT MESSAGE SX7 SNDB SB2 -B2 RJ SCS SA1 SNDH UPDATE OUTPUT ACCOUNTING SX7 B0+ RJ UAC RJ IBC INCREMENT BLOCK COUNT PQO8 SA1 A0+VCHT AX1 48 SX6 B1 NZ X1,PQOX IF A REENTRY WAS MADE, DO NOT DROP CHAIN PQO9 RJ UOC UPDATE OUTPUT CHAINS SX7 B0 SX6 /TLX/RES RJ ERQ ENTER RESTART REQUEST SX6 B1 EQ PQOX RETURN PRP SPACE 4,15 ** PRP - PROCESS RETURN TO PRIMARY. * * UPON RETURNING FROM A SECONDARY APPLICATION, CHECK LOGOUT * AND INTERLOCK CONDITIONS, AND INSERT THE LOAN STATUS * VALUE IN VROT. * * ENTRY (X7) = LOAN STATUS VALUE. * * EXIT (X7) = UNCHANGED. * * USES A - 1. * B - 3. * X - 1. * * CALLS ILV. PRP SUBR ENTRY/EXIT SB3 B0 CLEAR SUPERVISORY FUNCTION CODE SA1 A0+VSTT CHECK LOGOUT BIT LX1 59-48 NG X1,PCSX IF LOGOUT IN PROGRESS RJ ILV INSERT LOAN STATUS VALUE IN VROT EQ PRPX EXIT QTI SPACE 4,10 ** QTI - QUEUE TYPEAHEAD INTERNALLY. * * QUEUES INPUT DATA TO A DEPTH OF *TAPC* POTS, THEN * INITIATES NAM TYPEAHEAD MODE TO PREVENT OVERFLOW. * * USES X - 1, 2, 6, 7. * A - 1, 2, 6. * B - 3, 4, 5, 7. * * CALLS ASV, CTP, LEP, MVA, SRE. QTI SUBR ENTRY/EXIT SA1 RCVH CALCULATE BUFFER LENGTH SB3 B0 START NEW POT CHAIN MX7 -12 BX2 -X7*X1 CHARACTER COUNT LX2 1 TIMES TWO SX2 X2+14 SX1 15 IX1 X2/X1 NUMBER OF WORDS IN MESSAGE SB4 X1+B1 ADD ONE FOR THE HEADER TA2 B2,VMST CHECK FOR INPUT QUEUE OVERFLOW AX1 3 MESSAGE POT COUNT MX7 -6 SB5 X1-77B AX2 12 BX2 -X7*X2 SB5 X2+B5 TOTAL POT COUNT - 77B GE B5,QTI5 IF THIS MESSAGE WILL OVERFLOW THE QUEUE SB5 B1 SKIP FIRST WORD IN POT CHAIN SX6 RCVH SET MESSAGE ADDRESS RJ CTP COPY MESSAGE TO POTS SB5 X6 SET POT COUNT PX7 X7,B5 SA6 QTIA SAVE POT COUNT SA7 B4 SET LINK TO LAST POT * LINK ONTO INPUT POT CHAIN. TA1 B2,VMST GET CURRENT POT POINTER MX6 -12 BX6 -X6*X1 SX2 B3 TRAILING POT NZ X6,QTI2 IF CURRENT CHAIN BX6 X1+X2 SA6 A1 REWRITE VMST OR CHAIN HEADER EQ QTI3 CHECK NAM TYPEAHEAD QTI2 SB3 X6 LEADING POT RJ LEP LINK EXISTING POT CHAINS QTI3 TA2 B2,VMST CHECK NAM TYPEAHEAD MODE SA1 QTIA LX1 12 ADD POT COUNT MX6 -6 IX7 X1+X2 SB3 B0 SA7 A2+ REWRITE VMST LX2 59-51 NG X2,QTIX IF NAM TYPEAHEAD ALREADY IN EFFECT AX7 12 BX1 -X6*X7 BX6 X6-X6 INDICATE DEFAULT MESSAGE HEADER SX1 X1-TAPC+1 NG X1,QTIX IF NAM TYPEAHEAD NOT REQUIRED SB4 B1 TEXT LENGTH SX7 LSTHDX MESSAGE ADDRESS RJ ASV ASSIGN SUPERVISORY MESSAGE NZ X6,QTI4 IF ISSUED SB3 B0 BX7 X7-X7 SB7 ITM RJ SRE SET REENTRY EQ QTIX EXIT QTI4 TA1 B2,VMST SET NAM TYPEAHEAD IN EFFECT SX6 B1 LX6 51-0 BX6 X6+X1 SA6 A1 REWRITE VMST EQ QTIX EXIT * SEND MESSAGE TO TERMINAL AND DISCARD INPUT. QTI5 SMA X6,( TYPEAHEAD OVERFLOW, REENTER INPUT.) SB4 B0+ RJ MVA MOVE MESSAGE TO OUTPUT QUEUE SA1 QTIB COUNT OVERFLOW OCCURRENCE SX6 B1 IX6 X1+X6 SA6 A1 EQ QTIX EXIT QTIA CON 0 POT COUNT QTIB CON 0 OVERFLOW OCCURRENCE COUNT RIP SPACE 4,10 ** RIP - RESET INPUT POINTERS IN *VDPT*. * * ENTRY (A0) = TERMINAL TABLE ADDRESS. * * EXIT (VDPT) RESET TO LAST EOL. * * USES X - 1, 2, 6. * A - 1, 6. RIP SUBR ENTRY/EXIT SA1 A0+VDPT MX2 -9 LX2 24 BX6 X2*X1 CLEAR WORD COUNT IN CURRENT POT LX2 3 BX2 -X2*X6 GET FIRST WORD AX2 3 BX6 X6+X2 MX2 -12 LX2 36 BX6 X2*X6 CLEAR LAST POT LX2 12 BX2 -X2*X1 LX2 48 BX6 X2+X6 REPLACE WITH FIRST POT SA6 A1 REWRITE *VDPT* EQ RIPX EXIT SAB SPACE 4,10 ** SAB - SET TERMINAL ACTIVITY BIT. * * ENTRY (B2) = TERMINAL NUMBER. * * EXIT (VNAT) = BIT SET. * (MGRB) = SET IF NOT TERMINAL BLOCK LIMIT. * * USES A - 2, 6. * X - 2, 6. * B - 5. * * CALLS CBL. SAB SUBR ENTRY/EXIT TX2 B2,-VNTP RELATIVE TERMINAL ORDINAL SX6 37B BX6 X6*X2 TERMINAL ORDINAL MOD 32 AX2 5 TERMINAL ORDINAL/32 TA2 X2,VNAT READ TABLE ENTRY SB5 X6-59 MX6 -1 AX6 X6,B5 BX6 -X6+X2 SET BIT SA6 A2 REWRITE TABLE ENTRY RJ CBL CHECK BLOCK LIMIT NZ X6,SABX IF NO MORE BLOCKS ALLOWED SX6 B1+ SA6 MGRB EQ SABX RETURN SFE SPACE 4,10 ** SFE - SUPERVISORY FUNCTION CODE ERROR PROCESSOR. * * ISSUES SUPERVISORY MESSAGE ERROR DAYFILE MESSAGE. * * ENTRY (B2) = TERMINAL NUMBER (ACN). * * CALLS IDM, WOD. SFE SUBR ENTRY/EXIT SA1 RCVH PUT RCVH INTO MESSAGE RJ WOD CONVERT WORD TO OCTAL DISPLAY CODE SA6 SFEB SA7 A6+1 SA1 RCVB ADD RCVB TO MESSAGE RJ WOD CONVERT WORD TO OCTAL DISPLAY CODE SA6 A7+B1 SA7 A6+B1 SX6 SFEA SET MESSAGE ADDRESS RJ IDM ISSUE DAYFILE MESSAGE SA1 ISMC UPDATE INCORRECT SUPERVISORY MESSAGE COUNT SX7 B1 IX7 X1+X7 SA7 A1 EQ SFEX RETURN SFEA DATA 10L SMP ERR SFEB BSSZ 4 SHA SPACE 4,20 ** SHA - SET HIGHEST ACTIVE ACN NUMBER. * * EXIT (HACN) = HIGHEST ACTIVE ACN NUMBER. * = 0 IF NO TERMINALS ACTIVE. * (X6) = (HACN). * = 0 IF NO TERMINALS ACTIVE. * (B6) = FIRST NETWORK TERMINAL NUMBER. * (B7) = (HACN). * * USES A - 2, 6. * X - 2, 6. * B - 6, 7. SHA SUBR ENTRY/EXIT TB6 B0,VNTP SET SEARCH LIMITS TB7 B0,VNTP,LWA SHA1 TA2 B7,VMST READ VMST ENTRY NZ X2,SHA2 IF TERMINAL ACTIVE SB7 B7-B1 DECREMENT TERMINAL NUMBER GE B7,B6,SHA1 IF NOT END OF TERMINALS, LOOP SB7 B0 ZERO HIGHEST ACTIVE ACN SHA2 SX6 B7+ SET HIGHEST ACTIVE ACN SA6 HACN EQ SHAX RETURN SOM SPACE 4,15 ** SOM - SEND OVERFLOW MESSAGE. * * SEND EITHER *OVL* OR NULL MESSAGE TO NETWORK * DEPENDING ON CHARACTER COUNT IN *VDPT*. * * ENTRY (VDPT) BITS 11-0 = CHARACTER COUNT. * * EXIT (VDPT) BITS 23-0 = 0 IF MESSAGE SENT. * * USES X - 1, 2, 3, 6. * A - 1, 2, 6. * B - 3, 4, 7. * * CALLS ACD, SRE. SOM2 SX2 40000B PRESERVE ASCII INPUT MODE BX3 X3+X2 SOM3 SA2 A0+VDPT CLEAR FLAGS AND CHARACTER COUNT BX6 X3*X2 SA6 A2 REWRITE *VDPT* SOM SUBR ENTRY/EXIT TA1 B2,VMST CHECK BREAK IN PROGRESS SA2 A0+VSTT CHECK LOGOUT FLAG LX1 59-57 LX2 59-48 MX3 36 BX2 X1+X2 LX1 59-55-59+57 BX2 X1+X2 NG X2,SOM3 IF LOGOUT, END CONNECTION, OR BREAK SX6 DMBI SET NULL MESSAGE SB4 B1+B1 MX1 -12 SA2 A0+VDPT CHECK CHARACTER COUNT BX1 -X1*X2 SB3 B0 SX1 X1-VXLL NG X1,SOM1 IF NOT OVERFLOW CONDITION SX6 DMOV SET *OVL* MESSAGE SB4 DMOVL SOM1 RJ ACD ASSIGN MESSAGE SA2 A0+VCHT CHECK DRIVER REENTRY MX3 36 BX2 X3*X2 NZ X6,SOM2 IF MESSAGE ASSIGNED NZ X2,SOMX IF REENTRY ALREADY ASSIGNED SB7 AOM RJ SRE SET REENTRY EQ SOMX EXIT SRE SPACE 4,20 ** SRE - SET/CLEAR DRIVER REENTRY. * * ENTRY (B7) = REENTRY ADDRESS IF NONZERO. * (B3) = REENTRY POT POINTER. * (X7) = 12 BIT REENTRY PARAMETER. * * EXIT (VCHT(0)) = REENTRY ADDRESS RELATIVE TO *NDR*. * (VCHT(1)) = (X7) PARAMETER. * (VCHT(2)) = (B3) POT POINTER. * * CALLS ABT, DPT, SAB. SRE SUBR ENTRY/EXIT ZR B7,SRE1 IF NO REENTRY ADDRESS RJ SAB SET ACTIVITY BIT SRE1 SA2 A0+VCHT READ VCHT MX3 36 BX0 X0-X0 SX4 B7+ SET REENTRY ADDRESS ZR X4,SRE2 IF NO REENTRY TO BE SET SX4 X4-NDR BIAS REENTRY ADDRESS MX6 -12 LX4 12 BX7 -X6*X7 TRUNCATE (X7) TO 12 BITS SX6 B3+ SET POT POINTER BX4 X4+X7 MERGE PARAMETERS LX4 12 BX4 X4+X6 LX4 24 BX0 X3*X2 GET OLD PARAMETERS SRE2 BX6 -X3*X2 INSERT NEW PARAMETERS MX7 -12 BX6 X6+X4 AX2 24 SA6 A2 REWRITE VCHT BX6 -X7*X2 MASK PRIOR REENTRY POT POINTER AX2 24 BX2 -X7*X2 GET REENTRY INDEX SB3 X2+NDR-PQO2 ZR B3,SRE2.1 IF TRANSLATION REENTRY SB3 X6 SB4 B0 SRE2.1 SA2 A0+VDCT CLEAR INTERRUPT COMPLETE MX6 59 LX6 58-0 BX6 X2*X6 SA6 A2 REWRITE VDCT MX7 24 BX6 X7*X4 (X6) = REENTRY ADDRESS AND X7 SA2 SRE GET RETURN ADDRESS MX7 18 LX7 -12 BX2 X7*X2 LX2 -18 BX6 X6+X2 MERGE RETURN ADDRESS IN X6 SX2 B2 GET TERMINAL NUMBER BX6 X6+X2 MERGE TERMINAL NUMBER IN X6 SA2 SREC GET BUFFER POINTER SA6 X2 STORE REENTRY INFORMATION IN BUFFER SX6 X2+B1 INCREMENT BUFFER POINTER SB5 X6-SREC NG B5,SRE2.2 IF NOT AT END OF BUFFER SX6 SREB RESET POINTER TO BEGINNING OF BUFFER SRE2.2 SA6 SREC STORE BUFFER POINTER ZR X0,SRE3 IF NO ABORT CONDITION SX7 B7-HUP ZR X7,SRE3 IF LOGOUT REQUEST SX7 B7-CNB ZR X7,SRE3 IF CONNECTION BROKEN REQUEST BX6 X0 SA6 SREA SX6 3RSRE RJ ABT PROCESS ABORT SRE3 ZR B3,SREX IF NO POTS TO DROP RJ DPT EQ SREX RETURN SREA CON 0 SAVE OLD REENTRY * 12/REENTRY ADDR, 12/X7, 6/, 18/RETURN ADDR, 12/TN SREB BSSZ 20 REENTRY INFORMATION BUFFER SREC CON SREB BUFFER POINTER UAC SPACE 4,20 ** UAC - UPDATE CHARACTER ACCOUNTING. * * ADDS BLOCK CHARACTER COUNT TO ACCUMULATOR IN VCHT AND * ENTERS EXECUTIVE ACCOUNTING REQUEST IF ACCUMLATOR * OVERFLOW. * * ENTRY (X1) = BLOCK HEADER. * (X7) = 0 IF OUTPUT ACCOUNTING. * = 1 IF INPUT ACCOUNTING. * (B2) = TERMINAL NUMBER. * * EXIT (A0) = (B2) TERMINAL TABLE ADDRESS. * (VCHT) = ACCUMULATOR UPDATED. * * USES A - 1, 2, 6. * X - 1, 2, 3, 6. * B - 6. * * CALLS ERQ. UAC SUBR ENTRY/EXIT * INITIALIZE ACN AND TERMINAL TABLE ADDRESS. SB6 X7 (B6) = ACCOUNTING TYPE MX7 -12 TTADD B2,A0,X2,X3 (A0) = TERMINAL TABLE FWA SA2 A0+VCHT READ VCHT BX3 -X7*X1 (X3) = TEXT LENGTH IN ACT UNITS ZR B6,UAC1 IF OUTPUT ACCOUNTING LX2 -12 SHIFT INPUT ACCOUNTING ACCUMULATOR * ADD CHARACTER COUNT TO ACCUMULATOR. UAC1 AX1 20 GET CHARACTER TYPE MX6 -4 BX1 -X6*X1 (X1) = CHARACTER TYPE CODE (ACT) SX6 B0 SX1 X1-TUACL CHECK ACT PL X1,UACX IF INCORRECT, RETURN SA1 X1+TUAC+TUACL READ CONVERSION FACTOR IX3 X3*X1 CONVERT TLC TO CHARACTER COUNT BX6 -X7*X2 MASK VCHT ACCUMULATOR IX6 X6+X3 ADD CHARACTER COUNT BX2 X7*X2 CLEAR VCHT BYTE BX3 -X7*X6 TRUNCATE TOTAL TO 12 BITS IX7 X3+X2 INSERT UPDATED VALUE AX6 12 SHIFT OFF ALL BUT OVERFLOW ZR B6,UAC2 IF OUTPUT ACCOUNTING LX7 12 RESTORE VCHT POSITION UAC2 SA7 A2 REWRITE VCHT SX7 B6 RESTORE (X7) ZR X6,UACX IF NO OVERFLOW, RETURN * CALL EXECUTIVE TO ENTER ACCOUNTING MESSAGE. SX6 /TLX/IAM ENTER REQUEST SB3 B0+ RJ ERQ EQ UACX RETURN * TUAC - TABLE OF ACCOUNTING CONVERSION FACTORS. TUAC BSS 0 LOC 0 CON 1 CON 10 CON 1 CON 1 CON 1 LOC *O TUACL EQU *-TUAC UNQ SPACE 4,10 ** UNQ - UNQUEUE INTERNAL TYPEAHEAD INPUT. * * USES X - 1, 2, 3, 5, 6, 7. * A - 1, 2, 5, 6. * B - 3, 4, 5, 7. * * CALLS ABT, ASV, DLP, DPT, GPL, SRE. UNQ SUBR ENTRY/EXIT TA2 B2,VMST CHECK INTERNAL QUEUE MX3 -12 BX1 -X3*X2 ZR X1,UNQX IF NO QUEUE BX5 X1 SAVE CURRENT CHAIN POINTER LX1 3 GET POINTER TO NEXT CHAIN TA1 X1,VBMP SX3 X1+ NZ X3,UNQ0 IF LAST POT POINTER PRESENT * PROCESS ERROR IN TYPEAHEAD LINKAGE. SX6 3RUNQ RJ ABT TA2 B2,VMST GET INTERNAL TYPEAHEAD MX3 -12 BX3 -X3*X2 SB3 X3 SB4 B0 RJ DPT DROP POT CHAIN SA2 A2 MX3 42 BX6 X3*X2 CLEAR TYPEAHEAD POT(S) AND COUNT SA6 A2 EQ UNQ2.1 INGNORE TYPEAHEAD AND CONTINUE * UNQUEUE FIRST POT CHAIN IN TYPEAHEAD QUEUE. UNQ0 RJ DLP DELINK POT CHAIN UX1,B5 X1 MX3 -6 LX3 12 BX3 -X3*X2 PREVIOUS POT COUNT SX6 B5 LX6 12 IX3 X3-X6 NEW POT COUNT MX6 42 BX6 X6*X2 ZR X7,UNQ1 IF NO POT QUEUED BX6 X7+X6 MERGE POT POINTER NG X3,UNQ1 IF BAD POT COUNT BX6 X3+X6 MERGE POT COUNT UNQ1 SA6 A2 REWRITE VMST SB3 X5 BX1 X5 SAVE POT POINTER LX5 3 TB4 X5,VBMP SB5 VCPC-2 SA5 B4+B1 BX6 X5 SA6 RCVH UNQ2 SA5 A5+B1 TRANSFER FROM POT TO RCVB BX6 X5 SA6 A6+B1 SB5 B5-B1 NZ B5,UNQ2 IF MORE DATA IN POT RJ GPL GET POT LINK SA5 B4-B1 SB5 VCPC NZ B3,UNQ2 IF MORE DATA IN POTS * DROP POTS. SB3 X1 SB4 B0 RJ DPT DROP POT CHAIN * CHECK NAM TYPEAHEAD MODE. TA1 B2,VMST MX6 -6 CHECK POT COUNT AX1 12 BX6 -X6*X1 LX1 59-51+12 PL X1,UNQX IF ALREADY OFF SX6 X6-TAPT PL X6,UNQX IF THRESHOLD NOT REACHED UNQ2.1 SB4 B1 SET TEXT LENGTH BX6 X6-X6 USE DEFAULT HEADER SX7 LSTFDX SET TEXT ADDRESS RJ ASV ASSIGN SUPERVISORY MESSAGE NZ X6,UNQ3 IF MESSAGE ASSIGNED SB3 B0 BX7 X7-X7 SB7 CTM SET REENTRY TO CANCEL TYPEAHEAD MODE RJ SRE SET REENTRY EQ UNQX EXIT UNQ3 TA1 B2,VMST CLEAR TYPEAHEAD MODE MX6 59 LX6 51-0 BX6 X1*X6 SA6 A1 REWRITE VMST EQ UNQX EXIT UOC SPACE 4,15 ** UOC - UPDATE OUTPUT CHAINS. * * ENTRY (VSTT BYTE 4) = CURRENT OUTPUT POT CHAIN POINTER. * * EXIT (VSTT BYTE 4) = NEW OUTPUT POT CHAIN POINTER, IF * ANY - ZERO MEANS NO MORE OUTPUT. * * USES X - 1, 2, 3, 4, 6, 7. * A - 1, 2, 6, 7. * B - 3, 4. * * CALLS DPT. UOC SUBR ENTRY/EXIT SA1 A0+VSTT MX6 -12 BX2 -X6*X1 SB3 X2 BX7 X1*X6 CLEAR VSTT POT POINTER LX2 3 TA2 X2,VBMP MX1 6 UPDATE POT COUNT IN VSTT BX3 -X6*X2 GET LINK TO NEXT CHAIN LX1 30 BX4 X1*X7 OLD POT COUNT BX7 -X1*X7 CLEAR VSTT COUNT BX1 X1*X2 MESSAGE POT COUNT ZR X3,UOC2 IF NO NEXT CHAIN IX1 X4-X1 NEW POT COUNT NG X1,UOC1 IF NEGATIVE POT COUNT BX7 X7+X1 UOC1 LX6 12 BX6 -X6*X2 GET LINK TO LAST CHAIN BX7 X3+X7 STORE NEXT POT CHAIN IN VSTT LX3 3 TA4 X3,VBMP BX6 X4+X6 SA6 A4 UOC2 SA7 A1 REWRITE VSTT NG X2,UOC3 IF *0003* BYTE AUTO MODE SB4 B0 RJ DPT EQ UOCX RETURN UOC3 SA1 A0+VDCT SAVE AUTO MODE POT POINTER LX1 -24 MX4 -12 BX5 -X4*X1 GET POT BX1 X4*X1 CLEAR FIELD SX7 B3 BX7 -X4*X7 BX7 X1+X7 LX7 24 SX3 102B SET AUTO MODE AND READ DATA BITS LX3 48 BX7 X3+X7 SA7 A1 SB3 B0 ZR X5,UOCX IF NO POT SB4 B0 SB3 X5 RJ DPT EQ UOCX RETURN VAC SPACE 4,20 ** VAC - VALIDATE ACN. * * CHECK ACN TO SEE IF ON-LINE NETWORK TERMINAL. * * ENTRY (B2) = ACN. * * EXIT (X6) = NEGATIVE IF INCORRECT ACN. * (X2) = VMST ENTRY. * (A2) = ADDRESS OF VMST ENTRY. * * USES A - 2. * X - 2, 6. VAC SUBR ENTRY/EXIT TX6 B2,-VNTP COMPARE LOWER LIMIT NG X6,VACX IF INCORRECT SX6 B2-B1 CHECK UPPER LIMIT TX6 X6,-VNTP,LWA BX6 -X6 COMPLEMENT NG X6,VACX IF INCORRECT NUMBER TA2 B2,VMST READ VMST NZ X2,VACX IF ON-LINE SX6 -1 EQ VACX RETURN XRJ SPACE 4,20 ** XRJ - TRANSFER RETURN JUMP. * * CHANGE ADDRESS FIELD OF RETURN JUMP INSTRUCTION * AND RE-EXECUTE MODIFIED INSTRUCTION. THE RETURN * JUMP INSTUCTION MUST BEGIN IN THE FIRST PARCEL OF * THE INSTRUCTION WORD. * * ENTRY (X4) = 12, 18/ADR+1, 30/. * (X5) = NAD. * ADR = ADRESS OF RETURN JUMP INSTUCTION. * NAD = NEW ADDRESS TO BE INSERTED. * * EXIT TO MODIFIED INSTRUCTION. * * USES A - 4, 6. * X - 4, 6. * B - 7. XRJ BSS 0 ENTRY AX4 30 SET ADDRESS OF RETURN JUMP SB7 X4-1 SA4 B7 READ INSTRUCTION MX6 -18 LX4 30 CLEAR ADDRESS FIELD BX6 X6*X4 BX6 X6+X5 INSERT NEW ADDRESS LX6 30 REWRITE INSTRUCTION SA6 A4 JP B7 RE-EXECUTE MODIFIED INSTRUCTION ZFN SPACE 4,15 ** ZFN - ZERO OR BLANK FILL NAME. * * *ZFN* ZERO FILLS A 42 BIT BLANK PADDED NAME OR BLANK * FILLS A ZERO PADDED NAME. THE BOTTOM 18 BITS REMAIN * UNCHANGED. * * ENTRY (X1) = NAME TO BE PROCESSED. * (B4) .NE. 0, IF TO PAD NAME WITH BLANKS. * .EQ. 0, IF TO REMOVE BLANK PADDING. * * EXIT (X6) = PROCESSED NAME. * (B4) = UNCHANGED. * * USES X - 1, 2, 3, 4, 5, 6. * A - 2. ZFN SUBR ENTRY/EXIT SA2 =10H LX1 42 MX5 12 BX3 X1 NZ B4,ZFN1 IF NAME TO BE BLANK FILLED BX3 X1-X2 ZFN1 AX5 6 BX4 -X5*X3 NZ X4,ZFN1 IF MORE CHARACTERS IN NAME BX3 X1-X3 RESTORE FILL MASK BX2 X2-X3 BX1 X5*X1 REMOVE OLD PADDING BX6 -X5*X2 ADD NEW PADDING BX6 X1+X6 LX6 -42 EQ ZFNX EXIT TITLE TRANSLATION SUBROUTINES. BHD SPACE 4,35 ** BHD - BUILD HEADER FOR DOWNLINE MESSAGE. * * *BHD* BUILDS THE HEADER WORD FOR THE DOWNLINE BLOCK * OF DATA. IF MORE DATA REMAINS TO BE TRANSLATED, *BHD* * ASSEMBLES ALL INFORMATION NECESSARY TO CONTINUE THE * TRANSLATION LATER. * * ENTRY (X6) = CURRENT *WRITE* WORD, WITH CHARACTERS * RIGHT JUSTIFIED. * (B6) = NUMBER OF WHOLE EIGHT-BIT CHARACTERS THAT * WILL STILL FIT INTO (X6). * (SNDH) = SPECIAL HEADER, IF NEEDED FOR CONTROL BYTE. * (BHDB) = ADDRESS TO CONTINUE AT, IF REENTRY NECESSARY. * (BHDD) = BYTE TO CONTINUE AT, IF REENTRY NECESSARY. * (BHDC) .EQ. 0, IF CURRENT CHARACTER COUNT TO BE USED. * .GT. 0, IF TO USE CHARACTER COUNT AT LAST EOL. * * EXIT (X6) .EQ. 0, IF NO REENTRY REQUIRED. * .EQ. 42/0, 12/PP, 3/FB, 3/FW. * IF REENTRY REQUIRED, WHERE * PP = POT POINTER TO REMAINING DATA. * FW = FIRST WORD OF DATA IN POT PP. * FB = FIRST BYTE OF DATA IN WORD FW. * * USES X - 2, 3, 4, 5, 6, 7. * A - 3, 4, 5, 6, 7. * B - 6, 7. BHD SUBR ENTRY/EXIT * LEFT JUSTIFY AND STORE THE FINAL *WRITE* WORD. SA3 BHDC SX4 A6-SNDB+2 LX4 59-0 PL X4,BHD1 IF SECOND WORD OF PAIR LX6 4 ADJUST FOR 7.5 CHARACTER BHD1 SX2 B6 LX2 3 SB7 X2 LX6 X6,B7 LEFT JUSTIFY LAST WORD SA6 A6+B1 * PREPARE CHARACTER COUNT FOR HEADER. ZR X3,BHD2 IF CURRENT CHARACTER COUNT TO BE USED SA3 CBPA USE COUNT AT LAST EOL BX7 X3 EQ BHD3 ADD COUNT TO HEADER BHD2 SA3 TDMC ADD COUNT IN CURRENT WORD TO TOTAL SX2 B6-7 IX7 X3-X2 BHD3 SA5 SNDH NZ X5,BHD4 IF CONTROL BYTE HEADER SA5 HDRM USE DEFAULT HEADER FOR MESSAGE BHD4 BX7 X7+X5 ADD CHARACTER COUNT TO HEADER SA7 SNDH SX6 B0 SA3 BHDB ZR X3,BHDX IF REENTRY IS NOT REQUIRED * SET UP REENTRY INFORMATION. SA4 TDMA FIRST POT OF REMAINING DATA LX4 3 TB6 X4,VBMP LX4 3 SB7 X3 SA3 BHDA FIRST BYTE OF REMAINING DATA LX3 3 BX4 X3+X4 SX6 B7-B6 FIRST WORD OF REMAINING DATA BX6 X4+X6 EQ BHDX EXIT BHDA CON 0 BYTE AT WHICH TO CONTINUE BHDB CON 0 WORD AT WHICH TO CONTINUE BHDC CON 0 CHARACTER COUNT TO USE CBP SPACE 4,25 ** CBP - CONTROL BYTE PROCESSOR. * * ENTRY (X2) = CONTROL BYTE. * * EXIT (X4) .NE. 0, IF TO IGNORE ANY REMAINING DATA. * (X7) .NE. 0 IF SPECIAL CHARACTER IN X2. * * USES X - 0, 1, 2, 3, 4, 5, 6, 7. * A - 1, 2, 3, 4, 5, 6, 7. * B - 3, 4, 5, 6, 7. * * CALLS ABT, CFE, ERQ, GNR, TNT, TTL. * * DEFINE (A0) = TERMINAL TABLE ADDRESS. * (A1) = CURRENT *READ* WORD ADDRESS. * (X1) = CURRENT *READ* WORD. * (A6) = CURRENT *WRITE* WORD ADDRESS. * (X6) = CURRENT *WRITE* WORD. * (B3) = NUMBER OF CHARACTERS LEFT IN *READ* WORD. * (B6) = NUMBER OF CHARACTERS ROOM LEFT IN *WRITE* WORD. * (B4) = LWA OF CURRENT *READ* POT. CBP SUBR ENTRY/EXIT SB7 X2 GET JUMP INDEX JP B7+CBP1 PROCESS CONTROL BYTE CBP1 BSS 0 LOC 0 EQ CB0 *0000* END OF LINE EQ CB1 *0001* END OF BLOCK EQ CB1 *0002* END OF BLOCK EQ CB3 *0003* AUTO INPUT EQ CB4 *0004* FORCE LOGOUT EQ CB5 *0005* START EXTENDED ASCII INPUT EQ CB6 *0006* START NAM TRANSPARENT INPUT EQ CB7 *0007* START NAM TRANSPARENT OUTPUT EQ CB10 *0010* TRMDEF - NAM/CDNA EQ CB11 *0011* START EXTENDED ASCII OUTPUT EQ CBP2 *0012* UNUSED EQ CB13 *0013* END OF STRING EQ CB14 *0014* INTERNAL END OF BLOCK EQ CB15 *0015* INTERNAL AUTO INPUT EQ CB16 *0016* TRMDEF - NAM/CCP LOC *O CBP2 SX6 3RCBP INCORRECT CONTROL BYTE RJ ABT MX6 1 TRANSLATION ERRORS EQ TDMX EXIT * *0000* - END OF LINE. * SAVE THE CHARACTER COUNT (INCLUDING THE UNIT SEPARATOR) * AT THE TIME THE EOL IS FOUND. SAVE BOTH THE ADDRESS * OF THE WORD IN WHICH THE UNIT SEPARATOR WILL BE STORED * AND ITS CHARACTER POSITION. CLEAR EXTENDED ASCII MODE * IF IT IS SET AND CLEAR PARTIAL LINE FLAG. CB0 SX7 A6+B1 SAVE ADDRESS AND POSITION OF EOL PX7 X7,B6 SA7 CBPB SX7 A1 SAVE ADDRESS OF LAST *READ* WORD EOL BX5 X1 SA7 CBPE SA3 TDMC SAVE CURRENT CHARACTER COUNT SX7 B6-8 IX7 X3-X7 SB3 B1+B1 SA7 CBPA SX2 ASC.US RETURN A UNIT SEPARATOR SX1 1R. PRESET FORMAT EFFECTOR FOR NEXT LINE LX1 54 SX4 B0 SET TO CONTINUE WITH DATA SA3 TDMG CHECK EFFECT MODE PL X3,CB0.1 IF NOT USER EFFECT MODE SB3 B1 RESET NUMBER OF CHARACTERS IN *READ* WORD SX1 B0 NZ X5,CB0.1 IF NOT POSSIBLE DEGENERATE LINE SA3 A1-B1 CHECK FOR *EOL* IN PREVIOUS WORD MX5 -12 BX3 -X5*X3 NZ X3,CB0.1 IF CURRENT READ WORD IS *EOL* SB3 10 SX2 ASC.SP RETURN A BLANK AS DEFAULT FORMAT EFFECTOR SX1 1R LX1 59-5 CB0.1 TA3 B2,VMST CLEAR EXTENDED ASCII AND PARTIAL LINE FLAG MX7 58 LX7 23-0 BX7 X3*X7 SA7 A3 SX7 B0+ SET NO SPECIAL CHARACTER EQ CBPX EXIT * *0001*, *0002* - END OF BLOCK. * ADD UNIT SEPARATOR TO THE *WRITE* WORD IN *X6*. CHANGE * THE FORMAT EFFECTOR ON THE CURRENT LINE FROM A PERIOD * TO A COMMA SO THAT THE TERMINAL CARRIAGE WILL NOT ADVANCE * TO THE NEXT LINE. CB1 SX7 B7+ SAVE CONTROL BYTE SA7 CBPC SX2 ASC.US NZ B6,CB1.1 IF NOT THE 7.5 CHARACTER LX6 4 ADD TOP HALF OF SEPARATOR TO *X6* LX2 -4 SX7 X2 BX6 X6+X7 SA6 A6+B1 STORE FIRST WORD MX7 -4 SX3 A6-SNDB-SNDL PL X3,TDM30 IF MESSAGE HAS OVERFLOWED DATA BUFFER LX2 4 BX6 -X7*X2 PUT REMAINDER OF SEPARATOR IN *X6* SB6 7 SA3 TDMC UPDATE CHARACTER COUNT SX7 X3+8 SA7 A3+ EQ CB1.2 CHANGE FORMAT EFFECTOR CB1.1 BX6 X2+X6 ADD UNIT SEPARATOR SB6 B6-B1 NZ B6,CB1.2 IF WORD NOT FULL SX7 A6-SNDB+2 LX7 59-0 NG X7,CB1.2 IF IN FIRST WORD SA6 A6+B1 STORE SECOND WORD SX6 B0 SB6 7 SA3 TDMC UPDATE CHARACTER COUNT SX7 X3+B6 SA7 A3 SX3 A6-SNDB-SNDL PL X3,TDM30 IF MESSAGE HAS OVERFLOWED DATA BUFFER CB1.2 RJ CFE CHANGE FORMAT EFFECTOR SA3 CBPC SX4 B1 SET END OF DATA FLAG SX7 X3-2R"IB" ZR X7,CBPX IF *0014* BYTE EQ CB0.1 CLEAR EXTENDED ASCII MODE * *0003* - AUTO INPUT. * ANY LINES PRECEEDING THE AUTO INPUT DATA MUST BE * TRANSMITTED BEFORE CONTINUING. THE CARRIAGE * WILL BE HELD AFTER THE OUTPUT. CB3 SA3 CBPA NZ X3,CB3.0 IF PREVIOUS DATA NOT YET TRANSMITTED SA5 HDRAI USE AUTO INPUT HEADER BX7 X5 SA7 SNDH SA5 A0+VSTT GET OUTPUT POT POINTER MX2 -12 BX5 -X2*X5 LX5 3 CALCULATE POT ADDRESS TA2 X5,VBMP SX5 A1 SAVE ADDRESS OF *0003* BYTE SB5 B3+ SAVE REMAINING CHARACTER COUNT SX7 B3-12B NZ X7,CB3.4 IF *0003* NOT IN LAST BYTE SX5 A1-B1 RESET ADDRESS SB5 B0 RESET CHARACTER COUNT CB3.4 PX7 X5,B5 SA7 A2+B1 SAVE IN POT MX7 1 BX7 X2+X7 SET UPPER BIT AS FLAG SA7 A2+ EQ CB1 HOLD CARRIAGE AT THIS POINT * BACK UP TO LAST EOL. CB3.0 SA1 CBPE GET LAST *READ* WORD EOL ADDRESS TX3 X1,-VBMP SA1 X1+ BX7 X3 AX7 3 SA7 TDMA SAVE *READ* POT POINTER LX7 3 BX3 X3-X7 SX3 X3-VCPC+1 NZ X3,CB3.1 IF NOT AT THE END OF THE *READ* POT RJ GNR GET NEXT *READ* POT CB3.1 SA1 A1+B1 GET NEXT *READ* WORD CB3.2 SX7 A1 SA7 BHDB SET REENTRY POINT CB3.3 SX7 B1 TRANSMIT ALL COMPLETE LINES SA7 BHDC SX4 B1 STOP TRANSLATION SX7 B0 ZR B6,CBPX IF ALREADY RIGHT JUSTIFIED LX6 -8 EQ CBPX EXIT * *0004* - FORCE LOGOUT. * ISSUE FORCED LOGOUT DRIVER REQUEST AND DROP REMAINING * OUTPUT. CB4 SX0 A6 SAVE (A6) SX3 B6 SAVE (B6) SA6 CBPD SAVE (X6) LX3 18 BX0 X0+X3 SX7 2 SET FORCE LOGOUT VALUE SB3 B0 SX6 /TLX/FLO FORCE LOGOUT RJ ERQ ENTER REQUEST SA3 X0 AX0 18 SB6 X0 RESTORE (B6) BX6 X3 SA5 CBPD SA6 A3 RESTORE (A6) BX6 X5 RESTORE (X6) EQ CB3.3 TRANSMIT ALL COMPLETE LINES * *0005* - START ASCII INPUT. * SET EXTENDED ASCII INPUT MODE AND DROP REMAINING OUTPUT. CB5 SA3 A0+VDPT SET EXTENDED ASCII INPUT MODE SX7 1S14 BX7 X3+X7 SA7 A3 EQ CB1 HOLD CARRIAGE AT THIS POINT * *0006* - START NAM TRANSPARENT INPUT. * ANY LINES PRECEEDING THE *0006* BYTE MUST BE TRANSMITTED * BEFORE CONTINUING BECAUSE NAM TRANSPARENT OUTPUT REQUIRES * A SPECIAL SUPERVISORY MESSAGE IN THE FOLLOWING FORMAT. * *T 8/ PFC,8/ SFC,8/ TLF,8/ TLV,8/ INF,8/ INV,8/ C1F,4/ 0 *T, 4/ C1V,8/ C2F,8/ C2V,8/ TOF,8/ TOV,8/ DAF,8/ DAV,8/ XF *T, 8/ XV * * WHERE PFC = PRIMARY FUNCTION CODE (PFTC) * SFC = SECONDARY FUNCTION CODE (SFDM) * TLF = TRANSPARENT LINE FUNCTION * TLV = 0 = SINGLE LINE TRANSPARENT MODE * INF = INPUT FUNCTION * INV = 1 = TRANSPARENT MODE * C1F = CHARACTER COUNT FUNCTION (UPPER BYTE) * C1V = CHARACTER COUNT VALUE (UPPER BYTE) * C2F = CHARACTER COUNT FUNCTION (LOWER BYTE) * C2V = CHARACTER COUNT VALUE (LOWER BYTE) * TOF = TIMEOUT OPTION * TOV = 0 IF TIMEOUT NOT SELECTED * DAF = CHARACTER DELIMITER ACTIVE FUNCTION * DAV = 0, DELIMITER INACTIVE IF NO DELIMITER SPECIFIED * = 1, DELIMITER ACTIVE IF DELIMITER SPECIFIED * XF = DELIMITER FUNCTION * XV = DELIMITER VALUE CB6 SA3 CBPA NZ X3,CB3.2 IF PREVIOUS DATA NOT YET TRANSMITTED SA2 DLTDF STORE MESSAGE HEADER SA3 A2+1 STORE FIRST WORD OF TEXT SA4 A3+B1 BX7 X2 BX6 X3 MX2 12 EXTRACT CHARACTER COUNT SA7 SNDH BX5 X1*X2 MX2 8 NZ X5,CB6.1 IF CHARACTER COUNT SUPPLIED SX5 B1 LX5 48 SET DEFAULT COUNT OF ONE CB6.1 LX2 -4 SPLIT CHARACTER COUNT BX7 X2*X5 BOTTOM EIGHT BITS BX5 X5-X7 TOP FOUR BITS LX7 40-48 SA6 SNDB BX6 X4+X5 BX6 X6+X7 SX5 B1 LX5 8-0 SX7 14 LX1 12 CHECK FOR DELIMITER CHARACTER MX2 8 GET DELIMITER CHARACTER NG X1,CB6.2 IF NO DELIMITER CHARACTER LX1 4 BX6 X5+X6 SA6 A6+1 BX3 X1*X2 BX6 X3 SX7 16 CB6.2 SA6 A6+B1 SA7 CBPA UPDATE LAST EOL CHARACTER COUNT LX5 15-8 SA3 A0+VDPT BX7 X3+X5 SET TRANSPARENT INPUT MODE SA7 A3 REWRITE VDPT SX3 A1-B4 NZ X3,CB6.3 IF NOT AT THE END OF THE *READ* POT RJ GNR GET NEXT *READ* POT CB6.3 SA1 A1+B1 GET NEXT *READ* WORD SX7 2R"IB" LX7 48 BX3 X1-X7 ZR X3,CB3.3 IF END OF *READ* DATA EQ CB3.2 SET REENTRY POINT * *0007* - START NAM TRANSPARENT OUTPUT. * ANY LINES PRECEEDING THE *0007* BYTE MUST BE TRANSMITTED * BEFORE CONTINUING BECAUSE NAM TRANSPARENT OUTPUT REQUIRES * A SPECIAL MESSAGE HEADER. CB7 SA3 CBPA NZ X3,CB3.2 IF PREVIOUS DATA NOT YET TRANSMITTED RJ TNT TRANSLATE NAM TRANSPARENT CHARACTERS SX4 B1 SX7 B0 EQ CBPX EXIT * *0010* - DOWNLINE TRMDEF FOR NAM/CDNA TERMINAL. * ANY LINES PRECEEDING THE TRMDEF LINE MUST BE * TRANSMITTED BEFORE CONTINUING BECAUSE TRMDEF * REQUIRES A SPECIAL MESSAGE HEADER. CB10 SA3 CBPA NZ X3,CB3.2 IF PREVIOUS DATA NOT YET TRANSMITTED SX6 B1+ RJ TTL TRANSFER TRMDEF LINE - NAM/CDNA SX4 B1 SX7 B0 EQ CBPX EXIT * *0011* - START EXTENDED ASCII OUTPUT. CB11 TA3 B2,VMST SET EXTENDED ASCII BIT SX7 B1+ LX7 23-0 BX7 X7+X3 SA7 A3+ CB11.1 LX1 6 EXTRACT NEXT *READ* CHARACTER MX5 -6 BX2 -X5*X1 SA2 X2+TVXD LOOK IT UP IN THE TRANSLATION TABLE BX7 X2 SET UP SPECIAL CHARACTER MASK AX2 18 SX2 X2 GET TRANSLATED VERSION SX4 B0 EQ CBPX EXIT * *0013* - END OF STRING. * TERMINATE LINE WITHOUT CHANGING TERMINAL CARRIAGE. * IF FOLLOWED BY ADDITIONAL DATA, THE *0013* BYTE * TREATS THAT DATA AS A PART OF THE CURRENT LINE. * IF FOLLOWED BY ANOTHER CONTROL BYTE, THE *0013* * BYTE HOLDS THE TERMINAL CARRIAGE ON THE CURRENT * LINE AND TREATS THE FOLLOWING CONTROL BYTE AS THE * BEGINNING OF A NEW LINE. CB13 SX3 A1-B4 SA4 TDMA SAVE CURRENT *READ* WORD POSITION SB5 X4 SB7 B4 SX0 A1 NZ X3,CB13.1 IF NOT AT THE END OF THE *READ* POT RJ GNR GET NEXT *READ* POT CB13.1 SA1 A1+B1 GET NEXT *READ* WORD SB3 10 MX7 12 BX2 X1*X7 LX2 12 SX7 X2-17B NG X7,CB13.2 IF WITHIN CONTROL BYTE RANGE TA3 B2,VMST CLEAR EXTENDED ASCII BIT SX7 B1 LX7 23-0 BX7 -X7*X3 SA7 A3 EQ CB11.1 GET NEXT READ CHARACTER CB13.2 SX7 B5+ BACKUP TO PREVIOUS *READ* WORD SA7 TDMA SA1 X0 SB4 B7 SA3 PZDA SB7 X2 LX3 X3,B7 ZR B6,CB13.3 IF ACCUMULATOR IS RIGHT JUSTIFIED LX6 -8 CB13.3 RJ CFE CHANGE FORMAT EFFECTOR ZR B6,CB13.4 IF ACCUMULATOR WAS RIGHT JUSTIFIED LX6 8 CB13.4 SX2 ASC.US SX7 A1 SAVE ADDRESS OF LAST *READ* WORD EOL SA7 CBPE SX7 A6+B1 PX7 X7,B6 SA7 CBPB SA3 TDMC SAVE CHARACTER COUNT SX7 B6-8 IX7 X3-X7 SB3 B1+B1 SA7 CBPA SX1 1R. LX1 54 SX4 B0 SX7 B0 EQ CBPX EXIT * *0014* - INTERNAL END OF BLOCK. * ALL PRECEEDING DATA WILL BE TRANSMITTED AND THE * CARRIAGE WILL BE HELD AT ITS CURRENT POSITION. CB14 SX4 B6-6 SA5 TDMG CHECK EFFECT MODE PL X5,CB14.0 IF NOT USER EFFECT MODE SX4 B6-7 CB14.0 SA5 TDMC IX7 X5-X4 TA4 B2,VMST LX4 59-24 SA5 CBPA NZ X5,CB14.1 IF EOL ENCOUNTERED IN THIS POT CHAIN NG X4,CB14.2 IF NO EOL PRECEEDING *0014* BYTE CB14.1 BX7 X5-X7 NZ X7,CB14.2 IF NO EOL PRECEEDING *0014* BYTE MX7 1 CLEAR PARTIAL LINE FLAG BX7 -X7*X4 LX7 24-59 SA7 A4 EQ CB3.3 ALLOW CARRIAGE TO ADVANCE CB14.2 MX7 1 SET PARTIAL LINE FLAG BX7 X4+X7 LX7 24-59 SA7 A4 EQ CB1 HOLD CARRIAGE * *0015* - EXECUTIVE AUTO MODE. * THE *AUTO* COMMAND CAUSES A LINE NUMBER TO BE SENT * DOWNLINE. ANY OUTPUT LINES PRECEDING THE AUTO LINE * NUMBER MUST BE TRANSMITTED BEFORE CONTINUING. THE * CARRIAGE WILL BE HELD AFTER THE LINE NUMBER. * CB15 SA3 CBPA NZ X3,CB3.0 IF PREVIOUS DATA NOT YET TRANSMITTED SA5 HDRAI USE AUTO INPUT HEADER BX7 X5 SA7 SNDH EQ CB1 HOLD CARRIAGE AT THIS POINT * *0016* - DOWNLINE TRMDEF FOR NAM/CCP TERMINAL. * ANY LINES PRECEEDING THE TRMDEF LINE MUST BE * TRANSMITTED BEFORE CONTINUING BECAUSE TRMDEFS * REQUIRE A SPECIAL MESSAGE HEADER. CB16 SA3 CBPA NZ X3,CB3.2 IF PREVIOUS DATA NOT YET TRANSMITTED SX6 B0+ RJ TTL TRANSFER TERMDEF LINE - NAM/CCP SX4 B1 SX7 B0 EQ CBPX EXIT CBPA CON 0 LAST EOL WORD COUNT CBPB CON 0 ADDRESS OF LAST EOL CBPC CON 0 CONTROL BYTE CBPD CON 0 SAVE *X6* CBPE CON 0 ADDRESS OF LAST *READ* WORD EOL CFE SPACE 4,30 ** CFE - CHANGE FORMAT EFFECTOR. * * *CFE* CHANGES THE FORMAT EFFECTOR OF THE MOST RECENT * LINE FROM A PERIOD TO A COMMA IN ORDER TO PREVENT THE * TERMINAL CARRIAGE FROM ADVANCING AFTER THE LINE IS * PRINTED. * * ENTRY (CBPB) = ADDRESS OF LAST EOL. * * EXIT FORMAT EFFECTOR OF CURRENT LINE CHANGED FROM * A PERIOD TO COMMA UNLESS IN USER EFFECT MODE. * * USES X - 2, 3, 4, 5, 6, 7. * A - 3, 7. * B - 3, 4, 7. * * DEFINE (A0) = TERMINAL TABLE ADDRESS. * (A1) = CURRENT *READ* WORD ADDRESS. * (X1) = CURRENT *READ* WORD. * (A6) = CURRENT *WRITE* WORD ADDRESS. * (X6) = CURRENT *WRITE* WORD. * (B3) = NUMBER OF CHARACTERS LEFT IN *READ* WORD. * (B6) = NUMBER OF CHARACTERS ROOM LEFT IN *WRITE* WORD. * (B4) = LWA OF CURRENT *READ* POT. CFE SUBR ENTRY/EXIT SA3 TDMG CHECK EFFECT MODE NG X3,CFEX IF USER EFFECT MODE SA3 CBPB NZ X3,CFE1 IF MORE THAN ONE LINE ALREADY TRANSLATED * THE FORMAT EFFECTOR TO BE CHANGED IS THE FIRST CHARACTER * IN WORD TWO OF THE FIRST *WRITE* POT. SX3 SNDB-1 SX7 B1+ EQ CFE3 CHANGE FORMAT EFFECTOR * THE POSITION OF THE FORMAT EFFECTOR TO BE CHANGED * MUST BE CALCULATED USING THE CONTENTS OF *B6* AT THE * TIME THE LAST EOL WAS PROCESSED AND THE ADDRESS OF * THE WORD INTO WHICH THE CORRESPONDING UNIT SEPARATOR * WAS STORED. CFE1 SX7 B1 UX3,B7 X3 ZR B7,CFE3 IF UNIT SEPARATOR IS THE 7.5 CHARACTER NE B7,B1,CFE4 IF NOT AT THE BOTTOM OF A WORD SX5 X3-SNDB+2 LX5 59-0 NG X5,CFE3 IF UNIT SEPARATOR IS AT END OF SECOND WORD SB7 9 FORMAT EFFECTOR IS THE 7.5 CHARACTER SX3 X3+1 EQ CFE4 COMPARE ADDRESSES CFE3 SX3 X3+1 SB7 8 * COMPARE ADDRESS AGAINST CURRENT *WRITE* WORD ADDRESS. CFE4 SX5 A6+B1 BX5 X3-X5 NZ X5,CFE5 IF FORMAT EFFECTOR IN PREVIOUS WORD * THE FORMAT EFFECTOR TO BE CHANGED IS IN THE CURRENT * *WRITE* WORD BEING BUILT IN *X6*. USING THE CURRENT * VALUE OF *B6*, CALCULATE WHERE THE FORMAT EFFECTOR * IS POSITIONED AND CHANGE IT FROM A PERIOD TO A COMMA. SX5 B7-B6 LX5 3 SB7 X5-15 LX7 X7,B7 BX6 -X7*X6 CHANGE FORMAT EFFECTOR EQ CFEX EXIT * THE FORMAT EFFECTOR TO BE CHANGED IS IN A WORD THAT * HAS PREVIOUSLY BEEN STORED. LOAD THE WORD, CALCULATE * THE POSITION OF THE FORMAT EFFECTOR, AND CHANGE IT FROM * A PERIOD TO A COMMA. THEN REWRITE THE WORD IN PLACE. CFE5 SX5 B7-B1 LX5 3 SB7 X5-3 SX5 X3-SNDB+2 LX5 59-0 PL X5,CFE6 IF IN FIRST WORD OF PAIR SB7 B7-4 CFE6 SA3 X3 LX7 X7,B7 BX7 -X7*X3 CHANGE FORMAT EFFECTOR SA7 A3 EQ CFEX EXIT COC SPACE 4,10 ** COC - CHECK OUTPUT CHAINS. * * ENTRY (A6, X6, B6) = *WRITE* WORD POSITION. * (B7) = RETURN ADDRESS FOR XPT OUTPUT PROCESSING. * * EXIT (B4) = 0, DO NOT CONTINUE TRANSLATION. * = LWA *READ* POT, IF TRANSLATION TO CONTINE. * TRANSLATION REGISTERS SET UP OR PRESERVED - * A6, X6, B6, B7, A1, X1, B3, B4. * *TDMA* AND *TDMF* UPDATED. * * USES X - 1, 2, 3, 4, 6, 7. * A - 1, 2, 3, 4, 6, 7. * B - 3, 4, 6, 7. * * CALLS UOC. * * NOTES THE CONCATENATION FIELD IN THE SECOND WORD OF THE POT * CHAIN HEADER IS SET BY *1MI* FOR WRITER OR WRITEF * *CIO* FUNCTIONS (SEE *ANM*). * COC SUBR ENTRY/EXIT SB4 B0 SET NOT TO CONTINUE TRANSLATION MX7 -12 SA3 SNDH NZ X3,COCX IF HEADER ALREADY SET SA3 A0+VSTT GET POINTER TO NEXT OUTPUT CHAIN BX3 -X7*X3 CURRENT CHAIN POINTER LX3 3 TA3 X3,VBMP BX7 -X7*X3 NEXT CHAIN POINTER LX7 3 ZR X7,COCX IF NO NEXT CHAIN SA4 A3+B1 GET SECOND WORD OF POT CHAIN HEADER TA3 X7+1,VBMP CHECK IF HEADER PROVIDED MX7 6 BX3 X7*X3 NZ X3,COCX IF HEADER PROVIDED LX4 59-1 NG X4,COCX IF WRITER OR WRITEF THEN RETURN SA3 A3-1 LX7 30 BX2 X7*X3 POT COUNT IN THIS MESSAGE TA3 B2,VMST GET BLOCKSIZE MX7 -5 AX3 18 BX3 -X7*X3 NUMBER OF POTS IN BSZ AX2 24 SX2 X2+B1 INSURANCE IX3 X3-X2 BSZ-NEXT IN POTS SX2 60D IX2 X3*X2 BSZ-NEXT IN CHARACTERS SA3 TDMC IX3 X2-X3 SX2 2R"IB" RESET CONTROL BYTE NG X3,COCX IF NOT ENOUGH ROOM FOR NEXT CHAIN SX7 A6 PRESERVE REGISTERS USED FOR CONTINUATION SA7 COCA SA6 A7+B1 SX7 B7 SX6 B6 LX6 30 BX7 X6+X7 SA7 A6+B1 RJ UOC UPDATE OUTPUT CHAINS * SET UP REENTRY TO TRANSLATION LOOP. SA1 COCA RESTORE CONTINUATION REGISTERS SA2 X1 BX6 X2 SA6 A2 (A6) RESTORED SA2 A1+B1 BX6 X2 (X6) RESTORED SA2 A2+B1 SB7 X2 (B7) RESTORED AX2 30 SB6 X2 (B6) RESTORED SA1 A0+VSTT GET POSSIBLE NEW CHARACTER SET MX7 -12 BX7 -X7*X1 SA7 TDMA UPDATE *READ* POT POINTER LX7 3 TA1 X7+1,VBMP GET CHARACTER SET SB4 A1+VCPC-2 BX7 X1 LX7 59-0 SA7 TDMF TA2 B2,VMST CHECK SPECIAL CONTINUATION MX3 57 LX3 25-0 BX7 X3*X2 CLEAR POSSIBLE CONTINUATION BITS BX3 -X3*X2 SA7 A2 REWRITE VMST ZR X3,COC3 IF NO SPECIAL CONTINUATION LX3 59-26 LX2 X3,B1 NG X2,COCX IF TRANSPARENT MODE CONTINUATION SB3 B1 SX2 ASC.CF SET 76 ESCAPE CODE NG X3,COC1 IF 76 CONTINUATION SX2 ASC.AT SET 74 ESCAPE CODE COC1 MX7 1 SET UP SPECIAL CONTINUATION LX7 59 EQ COCX RETURN COC3 SA2 TDMD GET OLD RETURN ADDRESS MX7 -18 SA3 TRAR SB3 TRARL COC4 BX4 -X7*X3 BX4 X4-X2 ZR X4,COC5 IF ADDRESS FOUND SA3 A3+B1 SB3 B3-B1 NZ B3,COC4 IF SEARCH NOT COMPLETE SB3 11 SET UP PSEUDO CONTINUATION SX2 B0 EQ COCX RETURN COC5 AX3 18 PL X3,COC6 IF (X6) OK LX6 -8 REPOSITION *WRITE* WORD COC6 MX5 -6 RESET STANDARD CHARACTER MASK SB7 X2 RESET OLD RETURN ADDRESS SB3 X3+ GET NEW RETURN ADDRESS JP B3 RETURN THERE COCA BSS 3 CONTINUATION REGISTERS (A6, X6, B6, B7) TRAR SPACE 4,10 ** TRAR - TABLE OF RETURN ADDRESSES TO RESET. * *T 1/F,23/ 0,18/ NEW ADDRESS,18/ OLD ADDRESS * F = SET IF (X6) NEEDS REPOSITIONING. TRAR BSS 0 VFD 1/1,23/0,18/TDM4,18/TDM6 VFD 1/0,23/0,18/TDM9,18/TDM11 VFD 1/1,23/0,18/TDM12,18/TDM14 TRARL EQU *-TRAR GNR SPACE 4,30 ** GNR - GET NEXT *READ* POT. * * *GNR* DETERMINES THE NEXT *READ* POT IN THE CHAIN AND SETS * UP THE *READ* DEFINED REGISTERS. IF NO POT IS FOUND, * *GNR* RETURNS A *0014* CONTROL BYTE TO FORCE END OF DATA. * * ENTRY (TDMA) = CURRENT *READ* POT POINTER. * * EXIT (A1) = FIRST WORD ADDRESS OF THE POT - 1. * (B4) = LWA OF NEW *READ* POT. * * USES X - 1, 5, 6, 7. * A - 1, 7. * B - 3, 4. * * CALLS GPL. * * DEFINE (A0) = TERMINAL TABLE ADDRESS. * (A1) = CURRENT *READ* WORD ADDRESS. * (X1) = CURRENT *READ* WORD. * (A6) = CURRENT *WRITE* WORD ADDRESS. * (X6) = CURRENT *WRITE* WORD. * (B3) = NUMBER OF CHARACTERS LEFT IN *READ* WORD. * (B6) = NUMBER OF CHARACTERS ROOM LEFT IN *WRITE* WORD. * (B4) = LWA OF CURRENT *READ* POT. * (B7) = RETURN ADDRESS FOR SPECIAL CHARACTER HANDLING. GNR SUBR ENTRY/EXIT SA1 TDMA CURRENT *READ* POT POINTER BX5 X6 SB3 X1 RJ GPL GET THE NEXT LINK SX7 B3 SA7 TDMA UPDATE CURRENT *READ* POT POINTER SA1 B4-B1 BX6 X5 SB4 A1+VCPC NZ B3,GNRX IF ANOTHER LINK IS FOUND SA1 GNRA-1 RETURN A *0014* BYTE EQ GNRX EXIT GNRA CON 2L"IB" IVD SPACE 4,30 ** IVD - INITIALIZE VIRTUAL ASCII DISASSEMBLY. * * GETS POT CHAIN FOR TRANSLATION ROUTINES, AND INITIALIZES * VDPT IF NECESSARY. * * ENTRY (X2) = NUMBER OF DISPLAY CHARACTERS PER WORD. * (X7) = ASCII CHARACTER COUNT. * * EXIT (X6) = ZERO IF INSUFFICIENT POTS AVAILABLE. * (X0) AND (X5) UNCHANGED. * (VDPT) = INITIALIZED IF FIRST BLOCK OF LOGICAL LINE. * * CALLS GPC. IVD SUBR ENTRY/EXIT BX6 X5 SAVE *X5* SA6 IVDA MX3 -3 SA1 A0+VDPT LX1 30 BX3 -X3*X1 GET WORD COUNT SB6 X3 WORD OFFSET IN POT LX1 24-30 MX6 -12 BX3 -X6*X1 CURRENT POT NZ X3,IVD1 IF CURRENT POT EXISTS LX1 -12 BX3 -X6*X1 FIRST POT IVD1 SB3 X3+ POT TO LINK TO * GET POT CHAIN. IX3 X7+X2 CHARACTERS NEEDED IX3 X3/X2 WORDS REQUIRED SB6 B6+X3 PLUS OFFSET SB6 B6+2 PLUS TWO RJ GPC GET POT CHAIN SA5 IVDA RESTORE *X5* ZR X6,IVDX IF NOT ENOUGH POTS SX6 B1 SET EXIT CONDITION SA3 RCCW PL X3,IVDX IF NOT FIRST TIME THROUGH SA2 A0+VDPT MX3 6 LX3 30 BX6 -X3*X2 CLEAR BIT COUNT SX3 60D NEW BIT COUNT LX3 24 BX6 X3+X6 MX3 30 BX7 X3*X2 CHECK POT POINTERS NZ X7,IVD2 IF POT POINTERS ALREADY SET SX3 B3 LX3 36 BX6 X3+X6 INSERT LAST POT LX3 12 BX6 X3+X6 INSERT FIRST POT IVD2 SA6 A2 REWRITE VDPT EQ IVDX RETURN IVDA CON 0 SAVE *X5* PZD SPACE 4,40 ** PZD - PROCESS ZERO DISPLAY CHARACTER. * * *PZD* DETERMINES WHETHER OR NOT A ZERO DISPLAY * CHARACTER IS PART OF A CONTROL BYTE OR AN EOL. * * ENTRY (X1) = CURRENT *READ* WORD, WITH ZERO CHARACTER IN * THE BOTTOM SIX BITS. * (B3) = NUMBER OF CHARACTERS LEFT TO PROCESS IN X1, * INCLUDING THE ZERO CHARACTER. * * EXIT (X7) .GE. 0, * (X2) = COLON, IN ASCII. * (X1) = CURRENT *READ* WORD, WITH CHARACTER * FOLLOWING THE COLON IN THE TOP SIX * BITS. * (B3) = NUMBER OF CHARACTERS LEFT TO PROCESS * IN X1, INCLUDING THE COLON. * (X7) .LT. 0, * (X2) = CONTROL BYTE. * (X1) = CURRENT *READ* WORD, WITH CHARACTER * FOLLOWING THE CONTROL BYTE IN THE TOP * SIX BITS. * (B3) = NUMBER OF CHARACTERS LEFT TO PROCESS * IN X1, NOT COUNTING THE CONTROL BYTE. * * USES X - 1, 2, 3, 4, 5, 7. * A - 1, 3, 4, 5, 7. * B - 3, 7. * * CALLS GNR, COC. * * DEFINE (A0) = TERMINAL TABLE ADDRESS. * (A1) = CURRENT *READ* WORD ADDRESS. * (X1) = CURRENT *READ* WORD. * (A6) = CURRENT *WRITE* WORD ADDRESS. * (X6) = CURRENT *WRITE* WORD. * (B3) = NUMBER OF CHARACTERS LEFT IN *READ* WORD. * (B6) = NUMBER OF CHARACTERS ROOM LEFT IN *WRITE* WORD. * (B4) = LWA OF CURRENT *READ* POT. PZD SUBR ENTRY/EXIT SX7 B0+ SA7 PZDB * CHECK FOR END OF LINE CONTROL BYTE FIRST. SB3 B3-B1 NZ B3,PZD2 IF NOT THE LAST SIX BITS OF WORD SX2 A1-B4 NZ X2,PZD1 IF NOT AT THE END OF THE *READ* POT RJ GNR GET NEXT *READ* POT PZD1 SA1 A1+1 GET NEXT *READ* WORD SB3 10 PZD2 SX3 B3+ BUILD MASK TO CHECK FOR EOL SX2 6 IX2 X2*X3 MX7 1 SB7 X2-1 AX7 X7,B7 BX2 X7*X1 ZR X2,PZDX IF END OF LINE * IF THE ZERO CHARACTER IS IN THE LOWER HALF OF A BYTE * AND IS IMMEDIATELY FOLLOWED BY ONE OF THE CONTROL * BYTES *0001*, *0002*, *0003*, *0005* OR *0013*, IT WILL * NOT BE PRINTED ON THE TERMINAL. LX3 59-0 NG X3,PZD3 IF ZERO CHARACTER IN TOP HALF OF BYTE MX7 12 CHECK IF FOLLOWED BY A CONTROL BYTE BX2 X7*X1 LX2 12 SX7 X2-17B PL X7,PZD16 IF NOT IN CONTROL BYTE RANGE SX3 35010B SB7 X2+45 LX3 X3,B7 PL X3,PZD16 IF NOT A VALID CONTROL BYTE * STORE POSITION OF ZERO CHARACTER IN CASE CONTROL BYTE DOES * NOT TURN OUT TO BE VALID. SX7 A1 PX7 X7,B3 SA7 PZDB SB3 B3-B1 ADVANCE POINTER TO THE CONTROL BYTE LX1 6 * CHECK IF A CONTROL BYTE EXISTS WITH THIS VALUE. PZD3 MX7 6 GET LOWER HALF OF THE CONTROL BYTE BX2 X7*X1 SA3 PZDA LX2 6 SX7 X2-17B PL X7,PZD16 IF NOT IN CONTROL BYTE RANGE SB7 X2+ LX3 X3,B7 PL X3,PZD16 IF NOT A VALID CONTROL BYTE * CHECK IF THE POTENTIAL CONTROL BYTE MUST BE THE FIRST * BYTE OF A WORD AND MUST BE PRECEEDED BY AN END OF LINE. LX3 15 PL X3,PZD5 IF FIRST BYTE POSITION NOT REQUIRED SX5 B3-9 NZ X5,PZD16 IF NOT THE FIRST BYTE SX5 X2-2R"IB" ZR X5,PZD5 IF *0014* BYTE, NO PRECEEDING EOL NEEDED SX4 B6-6 CALCULATE CURRENT CHARACTER COUNT SA5 TDMG CHECK EFFECT MODE PL X5,PZD3.1 IF NOT USER EFFECT MODE SX4 B6-7 PZD3.1 SA5 TDMC IX7 X5-X4 TA4 B2,VMST LX4 59-24 SA5 CBPA COMPARE WITH TOTAL AT LAST EOL NZ X5,PZD4 IF EOL ENCOUNTERED IN THIS POT CHAIN NG X4,PZD16 IF NO EOL PRECEEDING CONTROL BYTE PZD4 IX7 X5-X7 NZ X7,PZD16 IF NO EOL PRECEEDING CONTROL BYTE * CHECK IF THE POTENTIAL CONTROL BYTE MUST BE FOLLOWED * BY AN END OF LINE. PZD5 LX3 15 PL X3,PZD9 IF TRAILING EOL NOT NECESSARY SX5 B3-B1 ZR X5,PZD6 IF LAST BYTE OF WORD, LOOK ONE WORD AHEAD SX4 6 BUILD MASK TO CHECK FOR EOL IX5 X5*X4 MX7 1 SB7 X5-1 AX7 B7,X7 LX7 -6 BX4 X7*X1 NZ X4,PZD16 IF NO EOL FOLLOWING, NOT A CONTROL BYTE EQ PZD9 CONTROL BYTE IS VALID * PROCESS THE CASE WHERE THE CONTROL BYTE IS THE LAST * BYTE IN A WORD. CHECK NEXT WORD TO SEE IF IT IS AN * EOL. STORE CURRENT POSITION IN CASE CONTROL BYTE * IS NOT VALID. PZD6 SA4 PZDB STORE CURRENT POSITION SX7 A1 PX7 X7,B3 NZ X4,PZD7 IF PRECEEDING COLON POSITION SAVED SA7 A4+ PZD7 SX4 A1-B4 NZ X4,PZD8 IF NOT AT THE END OF THE *READ* POT RJ GNR GET NEXT *READ* POT SA3 PZDA SB7 X2+30 LX3 X3,B7 PZD8 SA1 A1+1 GET NEXT *READ* WORD NZ X1,PZD16 IF CONTROL BYTE NOT FOLLOWED BY AN EOL SB3 11 LX1 -6 * SOME OF THE CONTROL BYTES HAVE SPECIAL CRITERIA IN * ADDITION TO THE ABOVE TESTS WHICH MUST BE MET FOR * THE CONTROL BYTE TO BE CONSIDERED VALID. PERFORM ANY * SPECIAL CHECKS FOR THE CURRENT CONTROL BYTE. PZD9 LX3 15 PL X3,PZD15 IF NO SPECIAL CHECKING NECESSARY * THE BOTTOM TWO BYTES IN THE DISPLAY CODE WORD IN WHICH * A *0006* BYTE OCCURS MUST BE ZERO. PZD12 SX5 X2-2R"BI" NZ X5,PZD13 IF NOT A *0006* BYTE SX7 7777B LX7 6 BX7 X1*X7 NZ X7,PZD16 IF LAST TWO BYTES ARE NOT ZERO EQ PZD15 CONTROL BYTE IS VALID * BOTH A *0007* AND A *0016* BYTE MUST BE FOLLOWED BY AT * LEAST ONE VALID TRANPARENT-TYPE CHARACTER, IE, THE TOP * FOUR BITS OF THE BYTE SHOULD BE *1000*. PZD13 SX5 X2-2R"BO" ZR X5,PZD13.1 IF A *0007* BYTE SX5 X2-10B ZR X5,PZD13.1 IF A *0010* BYTE SX5 X2-16B NZ X5,PZD13.2 IF NOT A *0016* BYTE PZD13.1 MX7 4 LX7 -6 BX7 X7*X1 LX7 10 SX7 X7-10B NZ X7,PZD16 IF NOT FOLLOWED BY TRANSPARENT CHARACTER EQ PZD15 CONTROL BYTE IS VALID * A *0014* CONTROL BYTE WILL ONLY BE PROCESSED IF * NO MORE OUTPUT DATA CAN BE PROCESSED - IT MUST BE * CHAINED IN VSTT AND FIT IN THE SEND BUFFER FOR * TRANSLATION TO BE CONTINUED IGNORING THE *0014*. PZD13.2 SX5 X2-2R"IB" NZ X5,PZD14 IF NOT *0014* RJ COC CHECK OUTPUT CHAINS ZR B4,PZD15 IF NO CONTINUATION EQ PZDX RETURN * A *0015* BYTE MAY ONLY BE USED BY IAF FOR INTERNAL * AUTO INPUT MODE. IT MUST ALSO HAVE A PRECEEDING END OF LINE * IN THE DISPLAY CODE WORD IN WHICH IT APPEARS. PZD14 SA5 A0+VDCT CHECK FOR AUTO MODE BIT SET LX5 59-49 PL X5,PZD16 IF NOT IAF INTERNAL AUTO MODE SA5 TDMC COMPUTE CHARACTER COUNT AT START OF WORD SX4 B6-7+9 IX7 X5-X4 TA4 B2,VMST LX4 59-24 SA5 CBPA COMPARE WITH TOTAL AT LAST EOL NZ X5,PZD14.1 IF EOL ENCOUNTERED IN THIS POT CHAIN NG X4,PZD16 IF NO EOL PRECEEDING CURRENT WORD PZD14.1 IX7 X5-X7 NG X7,PZD16 IF NO EOL PRECEEDING CURRENT WORD * A CONTROL BYTE HAS BEEN FOUND WHICH PASSES ALL CRITERIA. PZD15 LX1 6 MX7 1 SB3 B3-1 GET TO NEXT CHARACTER EQ PZDX EXIT * THE ZERO CHARACTER WAS NOT PART OF A VALID CONTROL * BYTE. SET UP EXIT CONDITIONS, RESTORING ALL *READ* * DEFINED REGISTERS IF NECESSARY. PZD16 SX2 ASC.CL SX7 B0 NOT A CONTROL BYTE SB3 B3+B1 BACK UP TO INCLUDE THE COLON SA3 PZDB ZR X3,PZDX IF COLON IN CURRENT WORD UX3,B3 X3 BACK UP TO PREVIOUS WORD SA1 X3 SX5 6 SX3 B3-10 IX3 X3*X5 SB7 X3 AX1 X1,B7 SHIFT *READ* WORD TO CORRECT POSITION SB3 B3+B1 TX7 A1,-VBMP AX7 3 SA7 TDMA LX7 3 TB4 X7+VCPC-1,VBMP SX7 B0 RESTORE EXIT CONDITION EQ PZDX EXIT PZDA VFD 15/37757B,15/02745B,15/37016B,15/00707B PZDB CON 0 TDM SPACE 4,20 ** TDM - TRANSLATE DISPLAY CODED MESSAGE. * * TRANSLATES DISPLAY CODED DATA TO IVT ASCII, PACKING * SEVEN AND ONE HALF CHARACTERS PER WORD. * CODE IN THIS SUBROUTINE IS MONOLITHIC BECAUSE OF TIMING * CONSIDERATIONS. * * ENTRY (B2) = TERMINAL NUMBER. * (X6) = FIRST *READ* POT POINTER. * (B6) = FWA IN FIRST DISPLAY CODE POT. * (B7) = FIRST BYTE IN WORD. * * EXIT (X6) .EQ. 0, IF ALL DATA TRANSLATED. * .LT. 0, IF TRANSLATION ERROR. * .EQ. 42/0, 12/PP, 3/FB, 3/FW. * IF REENTRY REQUIRED, WHERE * PP = POT POINTER TO REMAINING DATA. * FW = FIRST WORD OF DATA IN POT PP. * FB = FIRST BYTE OF DATA IN WORD FW. * * USES X - 1, 2, 3, 4, 5, 6, 7. * A - 1, 2, 3, 4, 5, 6, 7. * B - 3, 4, 5, 6, 7. * * CALLS BHD, CPB, GNR, PZD, TNT. * * DEFINE (A0) = TERMINAL TABLE ADDRESS. * (X5) = CHARACTER MASK. * (A1) = CURRENT *READ* WORD ADDRESS. * (X1) = CURRENT *READ* WORD. * (A6) = CURRENT *WRITE* WORD ADDRESS. * (X6) = CURRENT *WRITE* WORD. * (B3) = NUMBER OF CHARACTERS LEFT IN *READ* WORD. * (B6) = NUMBER OF CHARACTERS ROOM LEFT IN *WRITE* WORD. * (B4) = LWA OF CURRENT *READ* POT. * (B7) = RETURN ADDRESS FOR SPECIAL CHARACTER HANDLING. TDM SUBR ENTRY/EXIT * INITIALIZE DEFINED REGISTERS AND CELLS. SA6 TDMA SAVE INITIAL *READ* POT POINTER SA3 A0+VSTT MX7 -12 LX6 3 TX1 X6,VBMP SB4 X1+VCPC-1 SET LWA OF CURRENT *READ* POT SB6 B6-B1 SA1 X1+B6 (A1) IS *READ* POT ADDRESS - 1 BX3 -X7*X3 SAVE OUTPUT CHARACTER SET LX3 3 TA3 X3+1,VBMP BX6 X3 LX6 59-0 SA6 TDMF LX6 0-59+59-2 SA6 A6+B1 SAVE CURRENT EFFECT MODE ERRNZ TDMF-TDMG+1 CODE REQUIRES CONTIGUOUS WORDS SX7 B0 SX6 B0 SA7 TDMC INITIALIZE TRANSLATED CHARACTER COUNT SA6 CBPA INITIALIZE LAST EOL POSITION SA7 A6+B1 SA7 BHDA INITIALIZE REENTRY INFORMATION SA6 A7+B1 SA7 A6+B1 SA6 SNDH SB6 6 INITIAL *WRITE* WORD CHARACTER COUNT SX6 ASC.PD INITIAL LINE FORMAT AFFECTOR * CHECK IF THIS IS A CONTINUATION OF DATA IN A PREVIOUS * DOWNLINE BLOCK. TA2 B2,VMST GET CONTINUATION FLAGS MX7 -3 LX2 59-24 SA3 TDMG CHECK EFFECT MODE SX4 B1 BX4 X2*X4 NZ X4,TDM1 IF NAM CONTINUATION PL X2,TDM3 IF NOT PARTIAL LINE PL X3,TDM1 IF NOT USER EFFECT MODE SX6 ASC.CM HOLD CARRIAGE FORMAT AFFECTOR TDM1 BX5 -X7*X2 74 - 76 NAM CONTINUATION ZR X5,TDM3.1 IF NOT CONTINUATION MX5 2 SA4 A0+VROT CHECK FOR RESOURCE LIMIT LX4 59-19 BX5 X5*X4 ZR X5,TDM1.1 IF NO LIMIT HAS OCCURRED MX7 -2 LEAVE NAM TRANSPARENT CONTINUATION SET LX7 1 TDM1.1 BX7 X7*X2 CLEAR CONTINUATION FLAGS MX5 -6 LX7 25 SA1 A1+B1 SA7 A2 SB3 10 LX2 59-27+25-0 LX6 8 SB7 TDM6 SX4 200B NG X2,TDM21 IF 74 ESCAPE CODE CONTINUATION LX2 59-26-59+27 AX4 1 NG X2,TDM21 IF 76 ESCAPE CODE CONTINUATION LX6 -8 * PROCESS NAM TRANSPARENT DATA CONTINUATION. ZR X1,TDM2 IF DATA STARTS WITH AN EOL MX7 12 BX7 X1*X7 LX7 4 SX2 X7-10B ZR X2,TDM2 IF FIRST CHARACTER IS TRANSPARENT LX7 8 SX7 X7-0007B ZR X7,TDM2 IF *0007* CONTROL BYTE PL X3,TDM5 IF NOT USER EFFECT MODE SB6 7 SX6 B0 EQ TDM5 ENTER TRANSLATION LOOP TDM2 RJ TNT NAM TRANSPARENT CONTINUATION RJ BHD EQ TDMX EXIT * CHECK IF DATA STARTS AT THE BEGINNING OF THE POT. TDM3 PL X3,TDM3.1 IF NOT USER EFFECT MODE SB6 7 WORD EMPTY SX6 B0 CLEAR *WRITE* WORD TDM3.1 SX3 B7+B7 CHARACTER POSITION TO START AT SB7 TDM6 MX5 -6 ZR X3,TDM4 IF DATA STARTS ON A WORD BOUNDARY SX2 -6 SA1 A1+B1 POSITION FIRST WORD TO BEGINNING OF DATA IX7 X2*X3 SB3 X7+60 LX1 X1,B3 SB3 X3 EQ TDM5 ENTER TRANSLATION LOOP * BUILD FIRST WORD OF PAIR. TDM4 SA1 A1+1 GET NEXT *READ* WORD SB3 10 TDM5 LX1 6 EXTRACT NEXT *READ* CHARACTER BX2 -X5*X1 SA2 X2+TVXD LOOK IT UP IN THE TRANSLATION TABLE LX6 8 BX7 X2 AX2 18 GET TRANSLATED VERSION LX7 59-58 SX2 X2+ NG X7,TDM18 IF CHARACTER NEEDS SPECIAL PROCESSING TDM6 SB6 B6-B1 BX6 X6+X2 ADD CHARACTER TO *WRITE* WORD SB3 B3-1 ZR B6,TDM8 IF SEVENTH CHARACTER COMPLETED TDM7 NZ B3,TDM5 IF MORE CHARACTERS IN *READ* WORD SX3 A1-B4 NZ X3,TDM4 IF NOT AT THE END OF THE *READ* POT RJ GNR GET NEXT *READ* POT MX5 -6 EQ TDM4 GET FIRST WORD OF NEW POT * BUILD 7.5 CHARACTER. TDM8 NZ B3,TDM10 IF MORE CHARACTERS IN *READ* WORD SX3 A1-B4 NZ X3,TDM9 IF NOT AT THE END OF THE *READ* POT RJ GNR GET NEXT *READ* POT TDM9 SA1 A1+B1 GET NEXT *READ* WORD SB3 10 MX5 -6 TDM10 LX1 6 EXTRACT NEXT *READ* CHARACTER BX2 -X5*X1 SA2 X2+TVXD LOOK IT UP IN THE TRANSLATION TABLE SB7 TDM11 BX7 X2 AX2 18 GET TRANSLATED VERSION LX7 59-58 SX2 X2 NG X7,TDM18 IF CHARACTER NEEDS SPECIAL PROCESSING TDM11 LX6 4 LX2 56 SX7 X2 BX6 X6+X7 ADD TOP HALF OF CHARACTER TO *WRITE* WORD SA6 A6+B1 STORE FIRST WORD OF *WRITE* PAIR MX7 -4 SX3 A6-SNDB-SNDL PL X3,TDM30 IF MESSAGE HAS OVERFLOWED DATA BUFFER LX2 -56 BX6 -X7*X2 SB6 7 SA3 TDMC UPDATE TOTAL TRANSLATED CHARACTER COUNT SX7 X3+8 SB3 B3-B1 SA7 A3 SB7 TDM14 EQ TDM15 ENTER TRANSLATION LOOP * BUILD SECOND WORD OF PAIR. TDM12 SA1 A1+1 GET NEXT *READ* WORD SB3 10 TDM13 LX1 6 EXTRACT NEXT *READ* CHARACTER BX2 -X5*X1 SA2 X2+TVXD LOOK IT UP IN THE TRANSLATION TABLE LX6 8 BX7 X2 AX2 18 GET TRANSLATED VERSION LX7 59-58 SX2 X2+ NG X7,TDM18 IF CHARACTER NEEDS SPECIAL PROCESSING TDM14 SB6 B6-B1 BX6 X6+X2 ADD CHARACTER TO *WRITE* WORD SB3 B3-1 ZR B6,TDM16 IF SECOND WORD IS FULL TDM15 NZ B3,TDM13 IF MORE CHARACTERS IN *READ* WORD SX3 A1-B4 NZ X3,TDM12 IF NOT AT THE END OF THE *READ* POT RJ GNR GET NEXT *READ* POT MX5 -6 EQ TDM12 GET FIRST WORD OF NEW POT * STORE SECOND WORD OF *WRITE* PAIR AND THEN LOOP * BACK AND BEGIN BUILDING THE NEXT WORD PAIR. TDM16 SA6 A6+B1 STORE SECOND WORD OF *WRITE* PAIR SB6 7 SX6 B0 CLEAR CHARACTER ACCUMULATOR SA2 TDMC UPDATE TOTAL TRANSLATED CHARACTER COUNT SX7 X2+7 SA7 A2 SX3 A6-SNDB-SNDL PL X3,TDM30 IF MESSAGE HAS OVERFLOWED DATA BUFFER SB7 TDM6 MX5 -6 EQ TDM7 START NEXT *WRITE* WORD PAIR * PROCESS SPECIAL CHARACTERS, WHICH INCLUDE THE 74 AND 76 * ESCAPE CODES AND DISPLAY CHARACTER ZERO. TDM18 SX3 X2-ASC.CL ZR X3,TDM26 IF ZERO DISPLAY CHARACTER TA4 B2,VMST SA3 TDMF LX4 59-23 BX3 X3+X4 PL X3,TDM29 IF NOT EXTENDED ASCII, PRINT ESCAPE CODE SX7 X2-ASC.AT SX4 200B ZR X7,TDM19 IF 74 ESCAPE SX4 100B MUST BE 76 ESCAPE * TRANSLATE NEXT CHARACTER WITH ESCAPE CODE BIAS. TDM19 SB3 B3-B1 NZ B3,TDM21 IF MORE CHARACTERS IN *READ* WORD SX7 A1-B4 NZ X7,TDM20 IF NOT AT THE END OF THE *READ* POT BX7 X4 SA7 TDME RJ GNR GET NEXT *READ* POT SA4 TDME MX5 -6 TDM20 SA1 A1+1 GET NEXT *READ* WORD SB3 10 TDM21 LX1 6 EXTRACT NEXT *READ* CHARACTER BX2 -X5*X1 BX2 X2+X4 ADD BIAS SX3 X2-TVXDL PL X3,TDM22 IF VALUE TOO LARGE TO BE A CHARACTER SA2 X2+TVXD LOOK IT UP IN THE TRANSLATION TABLE BX7 X2 AX2 18 SX2 X2 GET TRANSLATED VERSION ZR X4,TDM28 IF SECOND TIME THROUGH NG X2,TDM22 IF NO SUCH CHARACTER EXISTS LX7 59-58 PL X7,TDM29 IF NOT A 7412 CHARACTER * 7412 PROCESSING. A 7412 CHARACTER IS TREATED AS A * UNIT SEPARATOR. SX3 45B PRESET NEXT LINE FORMAT EFFECTOR BX1 X1-X3 LX1 -6 SB3 B3+B1 SX7 A6+B1 PX7 X7,B6 SA7 CBPB JP B7 RETURN A UNIT SEPARATOR * PROCESS INCORRECT TWELVE BIT CHARACTERS. IF THE LAST * SIX BITS OF THE CHARACTER ARE NON-ZERO, IT IS THROWN * AWAY. IF THE LAST SIX BITS ARE THE BEGINNING OF AN * EOL, THEN THE ESCAPE CODE IS PRINTED. IF THE LAST SIX * BITS ARE THE START OF A *0014* BYTE, THEN A TWELVE BIT * CHARACTER HAS BEEN SPLIT ACROSS DOWNLINE BLOCKS, SO * THE APPROPRIATE ESCAPE CODE CONTINUATION FLAG IS SET. TDM22 BX5 -X5*X1 NZ X5,TDM24 IF NOT A ZERO CHARACTER MX5 6 BX5 X1*X5 ZR X5,TDM25 IF A POSSIBLE EOL SX5 B3 LX5 59-0 NG X5,TDM24 IF NOT A CONTROL BYTE SX3 2R"IB" CHECK FOR A *0014* BYTE LX3 54 BX3 X1-X3 NZ X3,TDM23 IF NOT 74 NOR 76 CONTINUATION TA3 B2,VMST SET CONTINUATION FLAG IN VMST LX4 20 BX7 X3+X4 SA7 A3+ TDM23 SB3 B3+1 LX1 -6 TDM24 SX4 B0 MX5 -6 EQ TDM19 TRANSLATE NEXT CHARACTER TDM25 SX4 B7 BUILD AN EOL MASK SX3 B3-B1 SX5 6 IX5 X3*X5 MX7 1 SB7 X5-1 AX7 X7,B7 SB7 X4+ BX7 X1*X7 ZR X7,TDM23 IF A VALID EOL EQ TDM24 THROW INCORRECT CHARACTER AWAY * PROCESS ZERO CHARACTER. TDM26 SX7 B7 SAVE RETURN ADDRESS SA7 TDMD RJ PZD PROCESS ZERO DISPLAY CHARACTER PL X7,TDM27 IF NOT A CONTROL BYTE RJ CBP CONTROL BYTE PROCESSOR ZR X4,TDM27 IF NOT END OF THE DATA RJ BHD BUILD MESSAGE HEADER EQ TDMX EXIT TDM27 SA3 TDMD RESTORE RETURN ADDRESS SB7 X3+ TDM28 MX5 -6 RESTORE CHARACTER MASK LX7 59-58 NG X7,TDM18 IF SPECIAL CHARACTER TDM29 JP B7 RETURN TO THE CALLING ROUTINE TDM30 SX6 3RTDM OVERFLOW OF SEND BUFFER RJ ABT MX6 1 EQ TDMX EXIT TDMA DATA 0 CURRENT *READ* POT POINTER TDMB DATA 0 CURRENT *WRITE* POT POINTER TDMC DATA 0 TRANSLATED CHARACTER COUNT TDMD DATA 0 RETURN ADDRESS TDME DATA 0 74, 76 ESCAPE TDMF DATA 0 EXTENDED MODE FLAG TDMG DATA 0 USER-SUPPLIED FORMAT EFFECTORS FLAG TNT SPACE 4,25 ** TNT - TRANSLATE NAM TRANSPARENT LINES. * * *TNT* TRANSFERS TRANSPARENT CHARACTERS TO THE SEND BUFFER, * STRIPPING OFF THE TOP FOUR BITS OF EACH CHARACTER. * THE TRANSFER CONTINUES UNTIL END OF DATA, OR UNTIL * NON-TRANSPARENT DATA IS FOUND IN WHICH CASE *TNT* SETS * UP THE REENTRY WORD AND BYTE ADDRESSES TO ALLOW * TRANSLATION TO CONTINUE ONCE THE TRANSPARENT DATA HAS * BEEN TRANSMITTED. * * ENTRY (X1) = TRANSPARENT DATA, LEFT ADJUSTED. * * EXIT TRANSPARENT DATA TRANSFERRED TO SEND BUFFER. * * USES X - 1, 2, 3, 4, 5, 6, 7. * A - 1, 2, 3, 5, 6, 7. * B - 3, 6, 7. * * CALLS GNR, COC. * * DEFINE (A0) = TERMINAL TABLE ADDRESS. * (A1) = CURRENT *READ* WORD ADDRESS. * (X1) = CURRENT *READ* WORD. * (A6) = CURRENT *WRITE* WORD ADDRESS. * (X6) = CURRENT *WRITE* WORD. * (B3) = NUMBER OF CHARACTERS LEFT IN *READ* WORD. * (B6) = NUMBER OF CHARACTERS ROOM LEFT IN *WRITE* WORD. * (B4) = LWA OF CURRENT *READ* POT. TNT SUBR ENTRY/EXIT SB7 TNT3 SB6 7 MX5 -8 SX6 B0 THROW AWAY THE FORMAT EFFECTOR EQ TNT2 ENTER TRANSLATION LOOP * BUILD FIRST WORD OF PAIR. TNT1 SA1 A1+1 GET NEXT *READ* WORD SB3 10 TNT2 MX3 4 CHECK FOR A VALID NEXT CHARACTER BX3 X3*X1 LX3 4 SX3 X3-10B NZ X3,TNT12 IF NOT A NAM TRANSPARENT CHARACTER LX6 8 LX1 12 BX3 -X5*X1 STRIP OFF TOP FOUR BITS BX6 X6+X3 ADD CHARACTER TO *WRITE* WORD SB6 B6-B1 SB3 B3-2 ZR B6,TNT4 IF SEVENTH CHARACTER COMPLETED TNT3 NZ B3,TNT2 IF MORE CHARACTERS IN *READ* WORD SX3 A1-B4 NZ X3,TNT1 IF NOT AT THE END OF THE *READ* POT RJ GNR GET NEXT *READ* POT MX5 -8 EQ TNT1 GET FIRST WORD OF NEW POT * BUILD 7.5 CHARACTER. TNT4 NZ B3,TNT6 IF MORE CHARACTERS IN *READ* WORD SX3 A1-B4 NZ X3,TNT5 IF NOT AT THE END OF THE *READ* POT RJ GNR GET NEXT *READ* POT TNT5 SA1 A1+B1 GET NEXT *READ* WORD SB3 10 MX5 -8 TNT6 MX3 4 CHECK FOR A VALID NEXT CHARACTER BX3 X3*X1 SB7 TNT4 LX3 4 SX3 X3-10B NZ X3,TNT12 IF NOT A NAM TRANSPARENT CHARACTER LX1 12 LX6 4 BX2 -X5*X1 STRIP OFF TOP FOUR BITS LX2 56 SX7 X2 BX6 X6+X7 ADD TOP HALF OF CHARACTER TO *WRITE* WORD SA6 A6+B1 STORE FIRST WORD OF *WRITE* PAIR MX7 -4 SX3 A6-SNDB-SNDL PL X3,TDM30 IF MESSAGE HAS OVERFLOWED DATA BUFFER LX2 -56 BX6 -X7*X2 SB6 7 SB3 B3-2 SA3 TDMC UPDATE TOTAL TRANSLATED CHARACTER COUNT SX7 X3+8 SA7 A3 SB7 TNT9 EQ TNT9 BEGIN FILLING SECOND WORD OF PAIR * BUILD SECOND WORD OF PAIR. TNT7 SA1 A1+1 GET NEXT *READ* WORD SB3 10 TNT8 MX3 4 CHECK FOR A VALID NEXT CHARACTER BX3 X3*X1 LX3 4 SX3 X3-10B NZ X3,TNT12 IF NOT A NAM TRANSPARENT CHARACTER LX6 8 LX1 12 BX3 -X5*X1 STRIP OFF TOP FOUR BITS BX6 X3+X6 ADD CHARACTER TO *WRITE* WORD SB6 B6-B1 SB3 B3-2 ZR B6,TNT10 IF SECOND WORD IS FULL TNT9 NZ B3,TNT8 IF MORE CHARACTERS IN *READ* WORD SX3 A1-B4 NZ X3,TNT7 IF NOT AT THE END OF THE *READ* POT RJ GNR GET NEXT *READ* POT MX5 -8 EQ TNT7 GET FIRST WORD OF NEW POT * STORE SECOND WORD OF *WRITE* PAIR AND THEN LOOP * BACK AND BEGIN BUILDING THE NEXT WORD PAIR. TNT10 SA6 A6+B1 STORE SECOND WORD OF *WRITE* PAIR SB6 7 SX6 B0 CLEAR CHARACTER ACCUMULATOR SA2 TDMC UPDATE TOTAL TRANSLATED CHARACTER COUNT SX7 X2+7 SA7 A2 SX3 A6-SNDB-SNDL PL X3,TDM30 IF MESSAGE HAS OVERFLOWED DATA BUFFER SB7 TNT3 MX5 -8 EQ TNT3 START NEXT *WRITE* WORD PAIR * SPECIAL CHARACTER HANDLING. * CHECK FOR A VALID END OF LINE OR A *0007* BYTE. * IF EITHER ONE, THEN CONTINUE TRANSLATING TRANSPARENT * DATA. TNT12 SX3 B3 BUILD AN EOL MASK SX2 6 IX2 X2*X3 MX7 1 SX4 B7 SB7 X2-1 AX7 X7,B7 SB7 X4+ BX2 X7*X1 NZ X2,TNT13 IF NOT EOL SB3 B0+ JP B7 CONTINUE TRANSLATION TNT13 AX2 48 SX2 X2-0007B NZ X2,TNT14 IF NOT *0007* BYTE SB3 B3-2 LX1 12 JP B7 CONTINUE TRANSLATION * END OF NAM TRANSPARENT LINE. A SPECIAL MESSAGE HEADER * IS REQUIRED MAKING IT NECESSARY TO TRANSMIT THE * TRANSPARENT DATA SEPARATELY FROM ANY DATA FOLLOWING IT. * IF MORE DATA DOES EXIST, MARK TRANSLATION CONTINUATION * POINT. TNT14 SX7 0014B END OF DATA INDICATOR LX7 48 BX3 X7-X1 NZ X3,TNT15 IF NOT *0014* BYTE TA3 B2,VMST SET TRANSPARENT CONTINUATION SX4 B1 LX4 25-0 BX7 X3+X4 SA7 A3 RJ COC CHECK OUTPUT CHAINS ZR B4,TNT16 IF NO CONTINUATION SA1 A1+B1 SET UP REGISTERS FOR REENTRY SB3 10 MX5 -8 JP B7 CONTINUE TRANSLATION TNT15 SX7 A1+ SA7 BHDB MARK TRANSLATION CONTINUATION POINT SB7 10 EQ B7,B3,TNT16 IF DATA TO CONTINUE AT WORD BOUNDARY SX7 B3 SAVE BYTE POSITION AX7 1 SA7 BHDA TNT16 SA5 HDRB USE TRANSPARENT HEADER BX7 X5 SA7 SNDH EQ TNTX EXIT TTL SPACE 4,30 ** TTL - TRANSFER TRMDEF LINE. * * *TTL* TRANSFERS TRMDEF BYTES TO THE SEND BUFFER UNTIL AN EOL * OR BYTE WITHOUT BIT 11 SET IS FOUND. SUPERVISORY MESSAGE * PRIMARY AND SUBFUNCTIONS ARE ADDED TO THE BEGINNING OF THE * DATA, AND IF ANY DATA FOLLOWS THE TRMDEF LINE, *TTL* * SETS UP THE REENTRY ADDRESS TO ALLOW TRANSLATION TO * CONTINUE ONCE THE TRMDEF MESSAGE IS TRANSMITTED. * * ENTRY (X1) = TRMDEF DATA, LEFT ADJUSTED. * (X6) .EQ. 0 IF CONTROL BYTE 0016B TO BE SENT. * .EQ. 1 IF CONTROL BYTE 0010B TO BE SENT. * * EXIT TRMDEF DATA TRANSFERRED TO SEND BUFFER. * * USES X - 1, 2, 3, 4, 5, 6, 7. * A - 1, 2, 3, 6, 7. * B - 3, 5, 6, 7. * * CALLS GNR. * * DEFINE (A0) = TERMINAL TABLE ADDRESS. * (A1) = CURRENT *READ* WORD ADDRESS. * (X1) = CURRENT *READ* WORD. * (A6) = CURRENT *WRITE* WORD ADDRESS. * (X6) = CURRENT *WRITE* WORD. * (B3) = NUMBER OF CHARACTERS LEFT IN *READ* WORD. * (B4) = LWA OF CURRENT *READ* POT. * (B6) = NUMBER OF CHARACTERS ROOM LEFT IN *WRITE* WORD. TTL SUBR ENTRY/EXIT SB6 5 MX5 -8 SB5 X6 SAVE CONTROL BYTE FLAG NZ X6,TTL0 IF CONTROL BYTE 0010B TO BE SENT SX6 PFTC*400B+SFDM SET UP PRIMARY AND SUB-FUNCTIONS EQ TTL2 ENTER TRANSFER LOOP TTL0 SX6 PFTC*400B+SFCC SET UP PRIMARY AND SUB-FUNCTIONS EQ TTL2 ENTER TRANSFER LOOP * BUILD FIRST WORD OF PAIR. TTL1 SA1 A1+1 GET NEXT *READ* WORD SB3 10 TTL2 PL X1,TTL15 IF END OF TRMDEF DATA REACHED LX1 12 EXTRACT NEXT *READ* CHARACTER BX2 -X5*X1 LX6 8 BX6 X6+X2 ADD CHARACTER TO *WRITE* WORD SB6 B6-1 SB3 B3-2 ZR B6,TTL5 IF SEVENTH CHARACTER COMPLETED TTL4 NZ B3,TTL2 IF MORE CHARACTERS IN *READ* WORD SX3 A1-B4 NZ X3,TTL1 IF NOT AT THE END OF THE *READ* POT RJ GNR GET NEXT *READ* POT MX5 -8 EQ TTL1 GET FIRST WORD OF NEW POT * BUILD 7.5 CHARACTER. TTL5 NZ B3,TTL7 IF MORE CHARACTERS IN *READ* WORD SX3 A1-B4 NZ X3,TTL6 IF NOT AT THE END OF THE *READ* POT RJ GNR GET NEXT *READ* POT TTL6 SA1 A1+B1 GET NEXT *READ* WORD SB3 10 MX5 -8 TTL7 PL X1,TTL15 IF END OF TRMDEF DATA REACHED LX1 12 EXTRACT NEXT *READ* CHARACTER BX2 -X5*X1 LX6 4 LX2 56 SX7 X2 BX6 X6+X7 ADD TOP HALF OF CHARACTER TO *WRITE* WORD SA6 A6+B1 STORE FIRST WORD OF *WRITE* PAIR MX7 -4 SX3 A6-SNDB-SNDL PL X3,TDM30 IF MESSAGE HAS OVERFLOWED DATA BUFFER LX2 -56 BX6 -X7*X2 SB6 7 SB3 B3-2 SA3 TDMC UPDATE TOTAL TRANSLATED CHARACTER COUNT SX7 X3+8 SA7 A3+ EQ TTL12 BEGIN FILLING SECOND WORD OF PAIR * BUILD SECOND WORD OF PAIR. TTL9 SA1 A1+1 GET NEXT *READ* WORD SB3 10 TTL10 PL X1,TTL15 IF END OF TRMDEF DATA REACHED LX1 12 EXTRACT NEXT *READ* CHARACTER BX2 -X5*X1 LX6 8 BX6 X2+X6 ADD CHARACTER TO *WRITE* WORD SB6 B6-1 SB3 B3-2 ZR B6,TTL13 IF SECOND WORD IS FULL TTL12 NZ B3,TTL10 IF MORE CHARACTERS IN *READ* WORD SX3 A1-B4 NZ X3,TTL9 IF NOT AT THE END OF THE *READ* POT RJ GNR GET NEXT *READ* POT MX5 -8 EQ TTL9 GET FIRST WORD OF NEW POT * STORE SECOND WORD OF *WRITE* PAIR AND THEN LOOP BACK * AND BEGIN BUILDING THE NEXT WORD PAIR. TTL13 SA6 A6+B1 STORE SECOND WORD OF *WRITE* PAIR SB6 7 SX6 B0 CLEAR CHARACTER ACCUMULATOR SA2 TDMC UPDATE TOTAL TRANSLATED CHARACTER COUNT SX7 X2+7 SA7 A2 MX5 -8 SX3 A6-SNDB-SNDL PL X3,TDM30 IF MESSAGE HAS OVERFLOWED DATA BUFFER EQ TTL4 START NEXT *WRITE* WORD PAIR * END OF TRMDEF DATA REACHED. TRMDEFS ARE SENT DOWNLINE * AS SUPERVISORY MESSAGES, MAKING IT NECESSARY TO TRANSMIT * THE TRMDEF DATA SEPARATELY FROM ANY DATA FOLLOWING IT. * IF MORE DATA DOES EXIST, MARK TRANSLATION CONTINUATION * WORD AND BYTE. TTL15 SA5 DLTDC NZ B5,TTL15.1 IF CONTROL BYTE 0010B TO BE SENT SA5 DLTDF TTL15.1 SX3 6 BX7 X5 SA7 SNDH SX7 B3 BUILD AN EOL MASK IX3 X3*X7 MX7 1 SB7 X3-1 AX7 X7,B7 BX7 X1*X7 ZR X7,TTL16 IF END OF LINE SX7 A1 SET CONTINUATION WORD SA7 BHDB SX7 B3 SET CONTINUATION BYTE AX7 1 SA7 BHDA EQ TTLX EXIT TTL16 SX3 A1-B4 NZ X3,TTL17 IF NOT AT THE END OF THE *READ* POT RJ GNR GET NEXT *READ* POT TTL17 SA1 A1+B1 GET NEXT *READ* WORD SX7 2R"IB" LX7 48 BX3 X1-X7 ZR X3,TTLX IF END OF *READ* DATA SX7 A1 SA7 BHDB MARK TRANSLATION CONTINUATION POINT EQ TTLX EXIT VBX SPACE 4,30 ** VBX - ASCII TO BINARY CODE CONVERSION. * * COPIES IVT ASCII CODE TO RECEIVING POTS IN 12 BIT FORMAT, * SETTING UPPER BIT OF EACH 12 BIT BYTE AS NOS BINARY FLAG. * THE FIRST BYTE IS PRESET TO *0007B* AND THE DATA COPY * STARTS AT THE SECOND BYTE OF THE RECEIVING POT. * * (RCCW) = 1/F,23/,18/TEXT LENGTH,18/RCVB. * F = FIRST BLOCK OF LOGICAL LINE IF SET. * ENTRY (X0) = ASCII8 OR BINARY BIT. * * EXIT (X6) = NONZERO IF CONVERSION COMPLETE. * = ZERO IF INSUFFICIENT POTS AVAILABLE. * (RCCW) = 0. * * CALLS ADB. VBX SUBR ENTRY/EXIT SA3 TBUF-1 BX7 X3 SA7 A3 SX7 X0+ SA3 RCCW ZR X7,VBX1 IF ASCII8 PL X3,VBX1 IF NOT FIRST BLOCK SX7 0007B SET CONTROL BYTE SX4 B1+ LX4 58-0 BX7 X7+X4 ASSEMBLE 12 BITS SA7 A7+1 VBX1 SA2 X3 ADDRESS OF NEXT WORD TO BE CRACKED AX3 18 SB7 X3+ CHARACTER COUNT SX1 B7-TBUFL+2 NG X1,VBX2 IF CHARACTERS WILL FIT IN BUFFER SB7 TBUFL-2 VBX2 BX6 X6-X6 SB5 X3 CHARACTER COUNT SB5 B5-B7 LE B5,VBX3 IF LAST TIME THROUGH THIS BLOCK SX6 B5+ DECREMENT CHARACTER COUNT LX6 18 SX4 A2+TBUFL*2/15 UPDATE ADDRESS IN RCBF BX6 X4+X6 VBX3 SA6 A3 REWRITE *RCCW* MX6 1 (X6) = EVEN/ODD WORD FLAG SX4 377B (X4) = 8 BIT BYTE MASK LE B7,B0,VBX6 IF NULL LINE * CRACK ASCII DATA INTO TRANSLATION BUFFER. VBX4 BX6 -X6 TOGGLE EVEN/ODD WORD FLAG LX1 X2 MOVE NEXT WORD TO DISASSEMBLY SB6 7 (B6) = ASCII BYTE COUNT PER WORD VBX5 LX1 8 SHIFT NEXT CHARACTER SB7 B7-1 DECREMENT TOTAL CHARACTER COUNT BX7 X4*X1 MASK CHARACTER SB6 B6-B1 DECREMENT WORD BYTE COUNT BX7 X7+X0 ADD BINARY OR ASCII8 BIT SA7 A7+1 STORE CHARACTER LE B7,B0,VBX6 IF ALL CHARACTERS MOVED NZ B6,VBX5 IF NOT END OF WORD SA2 A2+B1 READ UP NEXT WORD NG X6,VBX4 IF PROCESSING ODD WORD * PROCESS HALF-BYTES AT EVEN/ODD WORD BOUNDARY. LX1 4 SHIFT UPPER HALF-BYTE MX7 -4 LX2 4 SHIFT LOWER HALF-BYTE BX1 -X7*X1 MASK HALF-BYTE BX7 -X7*X2 LX1 4 MERGE HALF-BYTES BX7 X7+X1 BX7 X7+X0 ADD BINARY OR ASCII8 BIT SA7 A7+B1 STORE ASSEMBLY SB7 B7-1 DECREMENT CHARACTER COUNT GT B7,B0,VBX4 IF NOT END OF DATA * REASSEMBLE CRACKED DATA INTO POT CHAIN. VBX6 MX7 1 TERMINATE BUFFER SA7 A7+B1 RJ ADB ASSEMBLE BUFFER TO POTS SA3 TBUF-1 BX7 X3 SA7 A3 RESET FWA STRING BUFFER SA3 RCCW NZ X3,VBX1 IF NOT FINISHED WITH THIS BLOCK SX6 1 EQ VBXX RETURN VGX SPACE 4,30 ** VDX - VIRTUAL ASCII TO DISPLAY CODE TRANSLATION. * * ENTRY (X5) = CHARACTER MASK - * = LOWER 6 BITS PLUS BIT 59 IF 6-BIT * DISPLAY CODE. * = LOWER 12 BITS IF 6/12-BIT * EXTENDED DISPLAY CODE. * = LOWER 12 BITS IF 6/12-BIT TRANSPARENT * DISPLAY CODE. * (RCCW) = 1/F,23/,18/TEXT LENGTH,18/RCVB. * F = FIRST BLOCK OF LOGICAL LINE IF SET. * * EXIT (X6) = NONZERO IF CONVERSION COMPLETE. * = ZERO IF INSUFFICIENT POTS AVAILABLE. * (RCCW) = 0. * * CALLS ADB. VDX SUBR ENTRY/EXIT VDX1 SA3 RCCW SA2 X3 ADDRESS OF NEXT WORD TO BE PROCESSED AX3 18 SB7 X3 SET CHARACTER COUNT SB5 X3 SX1 B7-TBUFL+2 NG X1,VDX2 IF CHARACTERS WILL FIT IN BUFFER SB7 TBUFL-2 VDX2 BX6 X6-X6 SB5 B5-B7 SB4 TBUF (B4) = STRING BUFFER ADDRESS LE B5,B0,VDX3 IF LAST SEGMENT OF THIS BLOCK SX6 B5+ UPDATE CHARACTER COUNT LX6 18 SX4 A2+TBUFL*2/15 UPDATE ADDRESS IN RCBF BX6 X4+X6 VDX3 SA6 A3+ REWRITE RCCW SB5 7 (B5) = NUMBER OF ASCII BYTES PER WORD ZR B7,VDX8 IF NULL LINE SX4 177B SET 7-BIT ASCII MASK * TRANSLATE ASCII WORD TO STRING BUFFER. VDX4 MX7 1 TOGGLE MASK UPPER BIT BX1 X2 MOVE NEXT WORD TO DISASSEMBLY BX4 X4-X7 SB6 B5 (B6) = ASCII BYTE COUNT VDX5 LX1 8 SHIFT NEXT ASCII BYTE BX7 X4*X1 MASK ASCII BYTE SA3 TVXD+X7 READ TRANSLATION SB7 B7-1 DECREMENT COUNTERS SB6 B6-B1 BX7 X5*X3 MASK TRANSLATION NG X7,VDX6 IF IGNORE CHARACTER SA7 B4+ STORE TRANSLATION SB4 B4+B1 LX3 59-57 CHECK FOR SPECIAL CHARACTERS NG X3,VDX9 IF SPECIAL CHARACTER VDX6 LE B7,B0,VDX7 IF END OF DATA GT B6,B0,VDX5 IF NOT END OF WORD SA2 A2+1 READ NEXT WORD PL X4,VDX4 IF NOT CROSSING FROM EVEN TO ODD WORD * PROCESS HALF-BYTES AT EVEN/ODD WORD BOUNDARY. LX1 4 SHIFT UPPER HALF-BYTE SX7 17B LX2 4 SHIFT LOWER HALF-BYTE BX1 X7*X1 MASK HALF-BYTES BX7 X7*X2 LX1 4 BX7 X7+X1 MERGE HALF BYTES BX7 X4*X7 REMOVE ASCII PARITY BIT SA3 TVXD+X7 READ TRANSLATION SB7 B7-B1 DECREMENT CHARACTER COUNT BX7 X5*X3 MASK TRANSLATION NG X7,VDX7 IF IGNORE CHARACTER SA7 B4 STORE TRANSLATION SB4 B4+B1 LX3 59-57 CHECK FOR SPECIAL CHARACTERS NG X3,VDX10 IF SPECIAL CHARACTER VDX7 GT B7,B0,VDX4 IF NOT END OF DATA SA3 B4-1 CHECK LAST CHARACTER OF BUFFER SX7 1R SA2 RCCW NZ X3,VDX8 IF NOT COLON (*00*) SA3 PINA GET BLOCK TYPE NZ X2,VDX8 IF NOT END OF BLOCK SX3 X3-BTBK ZR X3,VDX8 IF BLK BLOCK TYPE SA7 B4 ADD TRAILING BLANK SB4 B4+B1 ADVANCE BUFFER POINTER VDX8 MX7 1 TERMINATE BUFFER SA7 B4 * REASSEMBLE TRANSLATED CODE INTO POT CHAIN. RJ ADB ASSEMBLE DATA SA3 RCCW NZ X3,VDX1 IF NOT FINISHED WITH THIS BLOCK SX6 B1+ SET RETURN STATUS EQ VDXX RETURN * PROCESS SPECIAL CHARACTERS IF IN NORMAL MODE. * * ENTRY (X7) = SPECIAL CHARACTER TRANSLATION. * (A7) = CURRENT BUFFER ADDRESS. VDX9 LX3 12-59+57 POSITION SPECIAL CHARACTER TRANSLATION BX7 X5*X3 SX3 X5 SET LOWER 18 BITS OF MODE MASK AX3 6 CHECK IF TRANSPARENT NZ X3,VDX6 IF TRANSPARENT OR EXTENDED SA7 A7+ REPLACE CHARACTER EQ VDX6 CONTINUE VDX10 LX3 12-59+57 POSITION LOWER 18 BITS OF MODE MASK BX7 X5*X3 SX3 X5 SET LOWER 18 BITS OF MODE MASK AX3 6 CHECK IF TRANSPARENT OR EXTENDED NZ X3,VDX7 IF TRANSPARENT OR EXTENDED SA7 A7+ REPLACE CHARACTER EQ VDX7 CONTINUE TITLE CPU COMMON DECKS. SPACE 4,10 ** CPU COMMON DECKS. *CALL COMCCIO *CALL COMCWOD LIST X *CALL COMTVDT LIST * TITLE DATA TRANSFER BUFFERS. USE BUFFERS RCVB SPACE 4,10 ** RCVB - NETWORK DATA RECEIVE BUFFER. RCVL EQU 1+2*VXPH/15D CALCULATE BUFFER LENGTH RCVH CON 0 RECEIVE DATA BLOCK HEADER RCVB BSSZ RCVL RECEIVE DATA BLOCK BUFFER SNDB SPACE 4,10 ** SNDB - NETWORK DATA SEND BUFFER. SNDH CON 0 SEND DATA BLOCK HEADER SNDB BSSZ SNDL SEND DATA BLOCK BUFFER ERRNZ SNDH-SNDB+1 VBUF SPACE 4,10 ** AIPB - APPLICATION INTERFACE PROCEDURES UPLINE DATA BUFFER. AIPB VFD 12/0,12/1,12/1,12/0,12/AIPL BSSZ AIPL TINST SPACE 4,10 ** TINST - INSTRUCTION MODIFICATION TABLE. TINST BSS 0 LIST -R TINST HERE ASSEMBLE REMOTE CODE LIST R TINSTL EQU *-TINST TTL IAFEX - TTY EXECUTIVE PROCESSOR. END SPACE 4,10 END