*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