;ORIGIN:CARDS 01-FEB-73 MOVE.S16 ;<<<<<<<<<< THE .S1(N) SERIES SUPERSEDES THE .S0(N) SERIES >>>>>>>>>> .ENABL CDR .LIST MEB .TITLE MOVE STRING TRANSFER SUBROUTINE ; ******************************************************************* ; * * ; * PROGRAM IDENTIFICATION: M O V E X * ; * CHARACTER STRING CHECK AND TRANSFER SUBROUTINE * ; ;UPDATE: 19-JAN-73 CONFIG.S13 ;01-19-73 ;UPDATE: 17-JAN-73 CONFIG.S12 ;01-17-73 ;UPDATE: 16-JAN-73 CONFIG.S11 ;01-16-73 ;UPDATE: 14-JAN-73 CONFIG.S10 ;01-14-73 ;UPDATE: 13-JAN-73 CONFIG.S09 ;01-13-73 ;UPDATE: 11-JAN-73 CONFIG.S08 ;01-11-73 ;UPDATE: 10;UPDATE: 11-JAN-73 MOVE.S04 ;UPDATE: 10-JAN-73 MOVE.S03 ;01-10-73 ;UPDATE:CARDS 01-JAN-73 MOVE.S02 ;01-01-73 ;ORIGIN:CARDS 03-DEC-72 MOVE.S01 .NLIST TTM .LIST MEB .TITLE MOVE STRING TRANSFER SUBROUTINE ; ******************************************************************** ; * PROGRAM IDENTIFICATION: MOVEX * ; * CHAR;ORIGIN:CARDS 28-JAN-73 BUGSUP.S03 ;ORIGIN:CARDS 24-JAN-73 BUGSUP ;THIS MODULE SERVES AS A SUPPLEMEMNT TO ASSEMBLIES DURING DEBUG ONLY. ;IT PROVIDES OVERRIDE MACROS AND MISSING EQUATES. IT IS EXCLUDED FROM ;THE FINAL ASSEMBLY. .TITLE BUGSUP ASSEMBLY SUPPLEMENT ; DEBUG ASSEMBLY SUPPLEMENT FOR [FORMAT] [CONFIG] [EODRPT] MNTLMN = 76 ;LOC OF "LAST MSG #" IN MSG NUMBER TABLE TRMUSE = 0 ;AREA TYPE NOT SPECIFIED IN "TRM" MTRSEC = * * ; * PURPOSE: TRANSFERS STRINGS OF ASCII CHARACTERS FROM SPECIFIED* ; * SOURCE AREAS TO SPECIFIED DESTINATION AREAS. PROVIDES* ; * THE ABILITY TO UNPACK STRINGS OF KNOWN FORMAT AND TO * ; * RE-PACK THEM INTO A DIFFERENT FORMAT. PROVIDES THE * ; * OPTION OF INDIVIDUAL CHARACTER CHECKING TO ASSURE * ; * THAT THE CHARACTERS IN A GIVEN FIELD BELONG TO THE SET -JAN-73 CONFIG.S07 ;01-10-23 ;UPDATE: 10-JAN-73 CONFIG.S06 ;01-10-73 ;UPDATE: 09-JAN-73 CONFIG.S05 ;01-09-73 ;UPDATE: 08-JAN-73 CONFIG.S04 ;01-08-73 ;ORIGIN: CARDS 05-JAN-73 CONFIG.S03 ;UPDATE: 12-14-72 CONFIG.S02 ;12-14-72 ;ORIGIN:CARDS 03-DEC-72 CONFIG.S01 .NLIST TTM ACTER STRING CHECK AND MOVE SUBROUTINE * ; * * ; * PURPOSE: TRANSFERS STRINGS OF ASCII CHARACTERS FROM SPECIFIED * ; * SOURCE AREAS TO SPECIFIED DESTINATION AREAS. PROVIDES THE * ; * ABILITY TO UNPACK STRINGS OF KNOWN FORMAT AND RE-PACK THEM INTO* ; * A DIFFERENT FORMAT. CHECKS EACH CHARACTER TO ASSURE * ; * THAT THE CHARACTERS IN A GIVEN FIELD BELONG TO THE SET ASSIGNED* ; * TO T 3 ;# OF METER AREAS PER SECTOR IN "MTR" THDL = 27 ;OVERRIDE LENGTH FOR "ELITE" AUTO MESSAGE HEADER MXMSGN = 999. ;MAXIMUM MESSAGE SEQUENCE # MNTLMN = 63. ;OFFSET IN [MNT] FOR LAST MESSAGE # TRMSIZ = 64. ;# WORDS IN TERMIANL FACILITY TABLE ; ******************************************************************** .MACRO DEBUG BITPAT,?Y .IF B BITPAT BPT .IFF * ; * ASSIGNED TO THAT FIELD. * ; * * ; * IN AN ALTERNATE MODE, THIS SUBROUTINE WILL * ; * CALL A SPECIFIED ASCII-TO-BINARY OR BINARY-TO-ASCII * ; * SUBROUTINE TO PERFORM CONVERSION BETWEEN SOURCE AND * ; * DESTINATION INFORMATION.. THUS "MOVEX" LIES AT THE * ; * HEART OF AN EFFICIENT TABLE-DRIVEN CHARACTER-H.LIST MEB .LIST ME ; ****************************************************************** * ; * PROGRAM IDENFIFICATION: "CONFIG" * ; * TERMINAL CONFIGURATION TASK * ; * * ; * PURPOSE: TO ALTER TERMINAL DESCRIPTOR TABLE(S) IN RESPONSE TO * ; * COMMAND MESSAGES FROM THE TERMINAL, THE HUB, OR THE * ; * DATA CENTER; AHAT FIELD. * ; * METHOD: "MOVEX" DEPENDS ON TABLES SUPPLIED BY THE CALLER. * ; * EACH FIELD IN A STRING REQUIRES THREE WORDS USED FOR CONTROL. * ; * THESE "PACKETS" ARE ARRANGED IN THE ORDER DESIRED FOR TRANSFER:* ; * WORD 1: ADDRESS OF FIRST DESTINATION BYTE * ; * WORD 2: ADDRESS OF FIRST SOURCE BYTE * ; * BYTE 4: COUNT OF NUMBER OF CHARACTERS IN FIELD * ; BIT #BITPAT,@#SWR BEQ Y BPT Y: .ENDC .ENDM DEBUG ANDLING * ; * AND CONVERSION SYSTEM. * ; * * ; * METHOD: "MOVEX" DEPENDS ON TABLES SUPPLIED * ; * BY THE CALLER. EACH FIELD IN A STRING REQUIRES FOUR * ; * WORDS USED FOR CONTROL. THESE FOUR-WORD PACKETS ARE * ; * ARRANGED IN THE ORDER DESIRED FOR TRANSFER. * ; * ND TO PROVIDE LISTINGS OF THESE TABLES.* ; * * ; * METHOD: FIXED-FORMAT COMMAND MESSAGES ARE ROUTED TO "CONFIG" * ; * AFTER (OPTIONAL) MANUAL MESSAGE FORMAT VERIFICATION. * ; * PRE-ASSIGNED COMMAND CODES CAUSE EXECUTION OF VARIOUS* ; * SUBROUTINES WHICH PERFORM SUCH TASKS AS READING FILES* ; * FROM DISC, MAKING VALIDITY CHECKS ON THE NEW DATA, * ; * UPDATI* IF COUNT=0, TRANSFER CONTINUES TO FIRST "EOR" OR "ETX" * ; * IF COUNT = -1, TRANSFER CONTINUES TO FIRST "ETX". * ; * BYTE 5: CONVERSION/CHECK CODE * ; * THIS CODE DETERMINES THE TYPE OF TRANSFER: * ; * EITHER STRAIGHT CHARACTER-BY-CHARACTER, OR CONVERSION. * ; * IF BIT #7 IS RESET, THE TRANSFER IS STRAIGHT CHARACTER.* ; * THE REMANING BITS COMPRISE THE CHARACTER TYPE CODE: ;UPDATE: 31-JAN-73 FORMAT.S09 01-31-73 ;UPDATE: 29-JAN-73 2 FORMAT.S08 01:29:73 ;UPDATE: 29-JAN-73 FORMAT.S07 01-29-73 ;ORIGIN:CARDS 28-JAN-73 FORMAT.S06 ;ORIGIN:CARDS 26-JAN-73 FORMAT.S05 ;ORIGIN:CARDS 25-JAN-73 FORMAT.S04 ;ORIGIN:CARDS 23-JAN-73 FORMAT.S03 ;ORIGIN:CARDS 22-JAN-73 FORMAT.S02 ;ORIGIN:CARDS 29-OCT-72 FORMTS.S01  * ; * CALL SEQUENCE: * ; * JSR R5,ENTRY * ; * .WORD TABLE * ; * BR ERROR * ; * (CONTINUE) * ; * * ; * TABLE STRUCTURE: NG THE FILE IMAGE, AND WRITING THE NEW IMAGE * ; * BACK TO DISC. LISTING REQUESTS ARE RETURNED TO THE * ; * REQUESTOR. ERROR MESSAGES ARE PRINTED ON THE HUB * ; * CONSOLE, AND RETURNED TO THE TERMINAL IF IT WAS THE * ; * REQUESTOR. * ; * * ; * PROGRAMMER: 52 * ; ************ * ; * EACH BIT IN THE TYPE CODE ALLOWS A SPECIFIC SUBSET * ; * OF 7-BIT ASCII. IF NO BITS ARE SET, THE ENTIRE 128 * ; * CHARACTERS ARE ALLOWED. IF ANY BITS ARE SET, THEY ALLOW* ; * SUBSETS AS FOLLOWES: * ; * BIT 0: NUMERICS FROM ZERO TO NINE * ; * BIT 1: ALPHAS FROM A TO Z * ; * BIT 2: SPACES  .ENABL CDR ; ******************************************************************* ; * PROGRAM IDENTIFICATION: "FORMAT" * ; * INPUT MESSAGE CONVERSION TASK * ; * * ; * PURPOSE: TO ACCEPT TRANSACTION MESSAGES FROM THE VARIOUS * ; * SOURCES: TERMINAL, DATACENTER, HUB; AND RE-FORMAT * ; * THEM INTO THE STANDARD I * ; * TABLE: .WORD DEST ;ADDR OF 1ST DESTINATION BYTE * ; * (CONDITIONALLY ABSENT. SEE "MOVEXA") * ; * .WORD SRCE ;ADDR OF 1ST SOURCE BYTE * ; * (CONDITIONALLY ABSENT. SEE "MOVEXB") * ; * .WORD COUNT ;# OF BYTES TO TRANSFER * ; * .WORD MODE ;TYPE OF TRANSFER DESIRED * ; * [PACKET #2] ****************************************************** * .PAGE .TITLE CONFIGURATION OF TERMINAL ; MACRO REFERENCES ;01-16-73 ;01-16-73 .MCALL FILEC,MOVEC,MOVEA,CNXRTE ;01-16-73 .MCALL HEADR,MSPLST,FLPLST,MESGM,FILGM,IOPAC,IODLST ;01-16-73 .MCALL STDID,INTID,HUBRTE,DCRTE  * ; * BIT 3: THE 64 CHARACTERS FROM 40 TO 137 * ; * (BITS 4-6 ARE CURRENTLY UNASSIGNED.) ; * NOTE THAT ANY COMBINATION OF THESE BITS MAY BE USED. * ; * * ; * IF BIT #7 IS SET, THEN A CONVERT-AND-STORE IS ORDERED. * ; * THE REMANING BITS DETERMINE THE TYPE OF CONVERSION: * ; * RESET / SET * NTERNAL MESSAGE FORMAT. * ; * ON AUTOMATIC ("ELITE" OR EXISTING EQUIPMENT) * ; * TRANSACTIONS, THIS INCLUDES ACCUMULATING AND LIMIT- * ; * CHECKING REPORTED FLOW AMOUNTS AND TEMPERATURES. * ; * * ; * METHOD: "FORMAT" IS PRIMARILY TABLE-DRIVEN, DEPENDING ON THE* ; * VERSATILE "MOVE" SUBROUTINE TO DISSECT RAW MESSAGES,* ; * PERFORM CONVERSI * ; * ----------- * ; * [PACKET #N] * ; * .WORD 177777 ;ENDS PACKET STRING * ; * * .PAGE ; * "ENTRY" MAY BE TO ONE OF THE FOUR SUBROUTINE ENTRY * ; * POINTS: "MOVEX"; "MOVEXA"; "MOVEXB"; OR "MOVEXC". * ; *  ;01-16-73 .MCALL TSKRUN,JEQ ;01-16-73 ;01-16-73 ; EXTERNAL REFERENCES .GLOBL RTEST,OUTST,SYDST ;01-10-23 .GLOBL MOVEX,MOVEXA,MOVEXB ;01-14-73 .GLOBL CNVRTX,FLDT,FLSNT,FLATT,FLWR,MSAT,MSDT,MOVC,BASCNV .GLOBL MOVA ; * BIT 0: ASCII-TO BINARY / BINARY-TO-ASCII * ; * BIT 1: SINGLE PRECISION / DOUBLE PRECISION * ; * BIT 2: WORD / BYTE (SOURCE BINARY FOR B-A SINGLE ONLY)* ; * (THE REMAINING BITS ARE CURRENTLY UNASSIGNED) * ; * IF ANY CHARACTER IS DETECTED DURING TRANSFER AS BEING * ; * OUTSIDE OF ALL ALLOWED SUBSETS, MOVEX WILL TERMINATE * ; * IMMEDIATELY AND RETURN TO CALL+2. WHEN MOVEX DET ONS BETWEEN ASCII AND BINARY, * ; * AND TO RE-FORMAT THE MESSAGE ACCORDING TO AN * ; * INTERNAL STANDARD. THERE IS IN-LINE CODE TO * ; * PERFORM THE NECESSARY ARITHMETIC, BUT EVEN AT THIS * ; * LEVEL THE CONTROL IS MAINTAINED THROUGH THE SET OF * ; * SYSTEM AND LOCAL PROGRAM EQUATES. * ; * THERE IS ROOM TO EXPAND THE DRIVING TABLES TO * ; * INCORPOR! * ; * MOVEX: NORMAL ENTRY WHEN BOTH SRC & DST ARE SPECIFIED* ; * EACH PACKET CONTAINS FOUR WORDS. * ; * MOVEXA: R0 IS ASSUMED PRESET WITH DESTINATION ADDRESS* ; * THE DESTINATION WORD IS ABSENT FROM EACH * ; * PACKET IN THE REFERENCED STRING. * ; * MOVEXB: R1 IS ASSUMED PRESET WITH SOURCE ADDRESS. * ; * " ;01-09-73 .GLOBL SYDVST ;01-19-73 ; EXTERNAL DEFINITIONS .GLOBL MESG,MESGB,MESGL,MESGP,MESG1,MESG2,MESG3,MESG4 ;01-08-73 .GLOBL FILG,FILGB,FILGL,FILGP,FILG1,FILG2,FILG4,FILAT ;01-08-73 .GLOBL TASKNO,TSKNO ;01-08-73 ; TASK PARAMETERS FILTYP = 205 ;FILE TYPE ;01-08-73 TASKNO = #ECTS * ; * THAT WORD 1 OF THE NEXT 3-WORD PACKET CONTAINS ALL BITS* ; * SET (=-1), EXIT IS MADE TO CALL+4. WHEN THE ERROR EXIT * ; * IS TAKEN, ALL CHARACTERS PRECEDING THE INVALID * ; * CHARACTER WILL HAVE BEEN TRANSFERRED. R5 WILL POINT TO * ; * THE OFFENDING CHARACTER. * ; * NEITHER THE TABLE START ADDRESS NOR ANY OF THE CHARACTER STRING* ; * ADDRESSES THAT IT CONTAINS ARE CHECKED FOR VALIDIT$ATE A WIDER VARIETY OF INPUT AND OUTPUT * ; * FORMATS. IN MOST CASES, THIS DOES NOT NECESSITATE * ; * ANY ALTERATIONS TO THE PROGRAM LOGIC ITSELF. * ; * ERRORS DETECTED DURING MESSAGE PROCESSING CAUSE * ; * THE PROCESSING TO ABORT AND RETURN THE ORIGINAL * ; * MESSAGE TO THE SENDER, ALONG WITH A CODE NUMBER * ; * IDENTIFYING THE TYPE OF ERROR. THIS ERROR MESSAGE * ; * % THE SOURCE WORD IS ABSENT FROM EACH PACKET * ; * IN THE REFERENCED STRING. * ; * MOVEXC: R0 IS ASSUMED PRESET WITH DESTINATION ADDRESS* ; * AND R1 IS ASSUMED TO CONTAIN THE SOURCE ADDRES* ; * BOTH THE SOURCE AND DESTINATION WORDS ARE * ; * ABSENT FROM EACH PACKET IN THE STRING. * ; * COUNT: THIS WORD SPECIFIES THE NUMBER OF BYTES TO * & TSCONF ;TASK = FOR CONFIGURATION TSKNO = TASKNO ;01-08-73 TSKFR = FILTYP ;STATUS INITED WITH FILE TYPE ;01-08-73 START = CONFIG ;TASK ENTRY EXTIM = 0 ;NO TIME LIMIT STKSZ = 50. ;STACK SIZE PRI = PRBASE+1 ;TASK PRIORITY (ROS) FILEID = TSFLBS+TASKNO ;ILE ID FOR THIS TASK ;01-08-73 .PAGE .SBTTL LOCA'Y. * ; * USAGE: MOVEX IS CALLED USING THE SEQUENCE: * ; * JSR R5,MOVEX ;NORMAL CALL * ; * .WORD TBEGIN ;CONTROL TABLE ADDRESS * ; * BR ERROR ;ILLEGAL CHARACTER FOUND * ; * CONTINUE * ; * JSR R5,MOVEXA ;THIS ENTRY ASSUMES R0 IS PRESET WITH * ; * ;THE DESTINATION A(IS ALSO ROUTED TO THE HUB CONSOLE. * ; * * ; * PROGRAMMER: 52 * ; ******************************************************************* .PAGE .TITLE FORMAT INPUT MESSAGE CONVERSION ;FOLLOWING ARE THE COMMANDS FOR ASSEMBLING THIS PROGRAM. ;THE SOURCE IS LOCATED ON DK: UNDER [27,200]. THE PROGRAM EXPECTS ;TO FIND TWO FILES CALLED "SYSMAC.SML") ; * BE TRANSFERRED. IN THE CASE OF A CONTROLLED * ; * STOP ON ETX OR EOR, THIS WORD CONTAINS THE * ; * MAXIMUM CHARACTER COUNT. * ; * MODE: IT IS THE MODE WORD WHICH PROVIDES THE MAJOR * ; * PORTION OF THE FLEXIBILITY OF "MOVEX" * ; * THE CONTROL BITS ARE NOW EXPLAINED: * ; * *L MACROS .MACRO FILEF NAME,LIST,TEMP,LCK,PAR,ERR1,ERR2,ERR3 .LIST ME ERRNUM = ERRNUM+1 .NLIST ME,COM ;01-08-73 ERR = ERR-4 ;01-19-73 .IF B LIST .IF B TEMP FILEC NAME,CFFCL,R0,LCK,PAR,ERR1,ERR2,ERR3 .IFF FILEC NAME,CFFCL,TEMP,LCK,PAR,ERR1,ERR2,ERR3 .ENDC .IFF .I+DDRESS * ; * JSR R5,MOVEXB ;ASSUMES R0 PRESET W/DESTINATION * ; * ;R1 PRESET WITH SOURCE ADDRESS * ; * ON RETURN FROM ANY OF THE ABOVE CALLS, R0 AND R1 CONTAIN THE * ; * DESTINATION AND SOURCE ADDRESSED IMMEDIATELY FOLLOWING THE LAST* ; * TRANSFER. * ; * REGISTERS ARE SAVED AND RESTORED, EXCEPT FOR R0&R1 AS ABOVE * ; **************************************,: ONE UNDER [1,1] CONTAINING ALL ;THE ELITE MACROS, AND ONE UNDER [27,200] CONTAINING THE LOCAL MACROS, ;IN THE MODULE TITLED "LOCMAC". "BUGSUP" IS A SUPPLEMENTARY MODULE ;CONTAINING ANY OVERRIDE MACROS AND EQUATES NEEDED DURING DEBUG. ; GET RMACRO ; AS,DK:,SML ; BEGIN ;FOR THE HOUSE DEBUG VERSION ; DK:,DK:/NL:TOC/LI:MEBw   f5eU@  [*   & * G &( 8L'4e Q$ BBB"   U@ U e  "U%Gef. U U Bb 0 * B.&0 M &0 & IHILE IN THE CONVERSION MODE. * ; * BIT #15: STOP TRANSFER ON ETX [3] * ; * BIT #14: STOP TRANSFER ON EOR [32] * ; * BIT #13: IF RESET, TAKE ERROR EXIT ON CHECK FAILURE * ; * IF SET, FOLLOW CONTROL BY BIT #12 * ; * BIT #12: IF RESET, REPLACE BAD CHARACTER WITH A BLANK* ; * [60], AND CONTINUE WITH CURRENT TRANSFER; * ; * JINE EODFF = 4 ;FORM FEED COUNT SURROUNDING E-O-D MESSAGE CFSOCO = 0 ;OFFSET FOR SECONDARY OP CODE CFSOCL = 2 ;LENGTH MXPRBN = 16. ;MAX TEMP PROBE # MXPRDN = 99. ;MAX PRODUCT # MXUSEN = 6 ;MAX ALLOWED AREA USE NUMBER MXSPTN = 8. ;MAX SPOT NUMBER MXMTRN = 10. ;MAX METER NUMBER ARPSEC = 3 ;# OF AREAS (SPOTS) PER DISC SECTOR IN "MTR" FLSL1 = HRF0SZ ;SPACE FOR RAF0 TYPEK (R1)+,-(SP) ;NEXT CHAR CLR R3 BISB (R4),R3 ;CHAR TYPE CODE BEQ 9$ ;NO BITS ON: BYPASS ALL CHECKS MOV #CHRTAB,R5 ;CHAR LIMIT CHECK TABLE BR 7$ 5$: DEC R5 ;ADJUST CHECK POINTER... 6$: TST (R5)+ ;...FOR NEXT RANGE PAIR 7$: TST R3 ;HAVE WE EXHAUSTED ALLOWED CHECKS? BNE 8$ ;NO: KEEP TRYING TST (SP)+ L ;TEMPERATURE LIMITS IN DEGREES F. HITEMP = 180. LOLIM1 = 10. ;LOW FLOW LIMIT FOR USE TYPE #1 LOLIM2 = 20. ;SAME FOR USE TYPE #2 LOLIM3 = 40. ;USE #3 LOLIM4 = 40. ;USE #4 LOLIM5 = 40. ;USE 5 MUTYPN = 6 ;AREA TYPE # FOR MULTI-USE HILIM1 = 20. ;DOUBLE-PRECISION HI TOTAL FLOW LIMIT HILIM2 = 0 ;LO-ORDER OF ABOVE MXPRDS = 10. M IF SET, REPLACE BAD CHARACTER WITH AN ETX * ; * AND ADVANCE TO NEXT PACKET * ; * BIT #11: IF RESET, SQUEEZE OUT ALL "DEL'S" [177]; * ; * IF SET, DO NOT SQUEEZE OUT DEL'S. * ; * * ; * ERROR PATHS: * ; * IN THE CHARACTER TRANSFER MODE, AN ERROR OCCURS ONLY * ; * N I CELL FLSL2 = HRF0SZ ;ALSO TYPE II CELL FLSL3 = HRF0SZ ;FILE ATTACH AREA ;01-10-23 MSWL2 = TYP2ML ;TYPE II CELL FOR LISTINGS ;FOLLOWING DEFINE FIELD OFFSETS AND LENGTHS FOR THE VARIOUS FORMATS OF ;CONFIGURATION REQUEST MESSAGES. THE FIRST LETTER "C" IDENTIFIES ;CONFIGURATION. THE NEXT TWO NUMERALS IDENTIFY THE FORMAT MASK NUMBER. ; THE FOLLOWING TWO CHARACTERS DESCRIBE THE PARTICULAR FIELD. THE FINAL ;CHARACTER IS EIO;YES: POP CURRENT CHARACTER... BR MOVEX9 ;...AND TAKE ERROR EXIT 8$: ASR R3 ;FIND NEXT ALLOWED RANGE BCC 6$ ;NOT THIS ONE CMPB (SP),(R5)+ ;LOW LIMIT OF ALLOWED RANGE BLT 5$ ;BELOW RANGE: THIS CHECK FAILED. MORE? CMPB (SP),(R5)+ ;HIGH LIMIT BGT 7$ ;OVER RANGE: CHECK FAILED. MORE? 9$: MOVB (SP)+,R5 ;NEXT CHAR MOVB R5,(R0)+P ;MAX # PRODUCTS ALLOWED PER TRANSACTION MXTMAC = 8. ;MAX ALLOWED TERMINAL ACTION CODE MATCOD = 3 ;MESSAGE ATTACH CODE AUTOAC = 0 ;INDEX TO A/C TABLE FOR AUTO XACTION TERMAC = 3 ;A.C. INDEX FOR MESSAGE TO TERMINAL TERRAC = 3 ;TERMINAL ERROR ACCESS CODE INDEX ABONDX = 3 ;".AB OUT" ACTION CODE INDEX FUELTY = 2 ;TRANSACTION TYPE # FOR FUELING QWHEN A CHARACTER IS DETECTED TO BE OUTSIDE THE RANGE * ; * SPECIFIED IN THE MODE LOWER BYTE. IF THE UPPER BYTE * ; * DOES NOT ALLOW A CONTINUE, THE ERROR EXIT TO CALL + 2 * ; * IS TAKEN IMMEDIATELY. FURTHER PROCESSING OF THE * ; * PACKET STRING IS ABORTED. IF THE MAXIMUM CHARACTER * ; * COUNT IS EXHAUSTED WHILE IN ONE OF THE CONTROLLED STOP* ; * MODES (ETX OR EOR), THE FINAL CHARACTER IS REPLACED * ; * RTHER "O" FOR "OFFSET", OR "L" FOR "LENGTH". C80IDO = 0 ;INPUT I.D. C80IDL = 3 C80RCO = 3 ;ROUTING CODE C80RCL = 5 C80CIO = 8. ;COMPLEX I.D. C80CIL = 2 C80OCO = 10. ;OP CODE C80OCL = 2 C81OCO = 0 ;OP CODE C81OCL = 2 C81TIO = 2 ;TERMINAL I.D. C81TIL = 7 C81MIO = 9. ;PLANT MANAGERS'S INITIALS C81MIL S ;TRANSFER TO DESTINATION BUFFER 17$: BR .+2 ;SWITCH FOR EOR/ETX STOP BR 14$ ;TAKE BRANCH WHEN USING NORMAL COUNT BEQ MOVEX9 ;NULL CHAR CAUSES ERROR EXIT ON OPEN COUNT ;01-10-73 CMPB R5,#ETX BNE 18$ ;NOT ETX INCB ETXFLG ;INDICATE THAT ETX WAS FOUND BR 12$ ;AND EXIT LOOP 18$: BR .+2 ;ON COUNT = -1, DON'T T MXMTRS = 10. ;MAX # OF METERS REPORTED PER TRANSACT'N MXTMPS = 16. ;MAX # OF TEMPERATURES REPORTED FLSL1 = HRF0SZ ;SPACE FOR RAF0 TYPE I CELL FLSL2 = HRF0SZ ;ALSO TYPE II CELL FLSL3 = 0 ;NO ATTACH AREA MSWL2 = 0 ;NO TYPE II MESSAGES ; FOLLOWING SPECIFY MAXIMUM ASCII FIELDS FOR INTERNAL TABLES PIDIGS = 2 ; DIGITS/I.D. IN INTERNAL PROD I.D. TABLE TMPDGS = 4 U WITH AN ETX, AND PROCESSING CONTINUES NORMALLY. * ; * AN ERROR RETURN FROM ONE OF THE CONVERSION SUBROUTINES* ; * ALSO CAUSES AN ERROR EXIT. * ; * * ; * WHEN THE FIRST WORD OF A NEW PACKET IS DETECTED TO BE * ; * ALL ONES, A GOOD RETURN IS MADE TO CALL +4. * ; * UPON EITHER GOOD OR BAD RETURN, R0 AND R1 POINT TO * V= 3 C81SCO = 12. ;SHIPPED FROM CODE C81SCL = 8. C81SDO = 20. ;SHIPPED FROM DESCRIPTION C81SDL = 25. C81PRO = 45. ;PIPELINE RECEIPT SUPPLY POINT C81PRL = 7 C81PDO = 52. ;PIPELINE DISPOSAL SUPPLY POINT C81PDL = 7 C82OCO = 0 ;OP CODE C82OCL = 2 C82.AO = 2 ;FIELD "A" C82.AL = 1 C82.BO = 3 ;FIELD "B" C82.WMAKE NEXT CHECK BR 4$ ;...BUT KEEP TRANSFERRING UNTIL "ETX" CMPB R5,#EOR ;WHEN COUNT = 0, MAKE BOTH CHECKS BEQ 12$ BR 4$ 14$: SOB R2,4$ ;BACK FOR MORE... MOVEX4: 12$: INC R4 ;...OR TO NEXT CONTROL PACKET CMP (R4),#-1 ;END OF TABLE OF PACKETS? BNE 1$ ;NOT YET ADD #2,12(SP) ;GOOD RETURN TO CALL+4 MOVEX9: MOV R0,(SP) X ; DIGITS/TEMP IN INTERNAL TEMPERATURE TABLE QTYDGS = 6 ; DIGITS/QUANTITY IN INTERNAL FLOW TOTALS TABLE .PAGE ; CHARACTER CHECK CODES FOR THE "MOVE" SUBROUTINE .RADIX 2 MVCD00 = 0 ;ALL 128 CHARACTERS MVCD01 = 1 ;NUMBERIC ONLY MVCD02 = 10 ;ALPHA ONLY MVCD03 = 11 ;ALPHA AND NUMERIC MVCD04 = 1000 ;ALL 64 LEGAL ASCII MVCD05 = 100 Y; * THE BYTES FOLLOWING THE LAST BYTES TRANSFERRED IN THE * ; * DESTINATION AND SOURCE CHARACTER STRINGS, RESPECTIVELY* ; * * ; * WHEN TRANSFERRING IN THE ETX STOP MODE, THE MESSAGE * ; * NORMALLY ENDS IN ETX. IF THE MAX COUNT IN EXHAUSTED * ; * BEFORE AN ETX IN DETECTED, AN ETX IS FORCED AS THE * ; * FINAL CHARACTER. ZBL = 2 C82TMO = 5 ;TIME OF E-O-D C82TML = 4 C83OCO = 0 ;OP CODE C83OCL = 2 C83.AO = 2 ;FIELD "A" C83.AL = 1 C83.BO = 3 ;FIELD "B" C83.BL = 1 C83.CO = 4 ;FIELD "C" C83.CL = 2 C83.DO = 6 ;FIELD "D" C83.DL = 2 C83.EO = 8. ;FIELD "E" C83.EL = 2 C83.FO = 10. ;FIELD "F":T[ ;RETURN FINAL DEST... MOV R1,2(SP) ;...AND SRC ADDRS JSR R5,RESREG ;POP SAVED REGS RTS R5 ;AND RETURN TO CALLER ;(I KNOW YOU DON'T BELIEVE IT, BUT IT WORKS!) .DSABL LSB .PAGE MOVEX5: MOV #CNVTRG,R5 ;S+T TO +I3L C-N0+RSION CALL LIST BIC #-3-1,R3 ;GET A-B AND S/D BITS TO USE AS INDEX ASL R3 ;WORD INDEX MOV CNADTB(R\;SPACES MVCD06 = 10000 ;PRINT CONTROL CHARACTERS ; FOLLOWING ARE "CONVERT-AND-STORE" CODES, RATHER THAN SIMPLE TRANSFERS MVCD50 = 10000000 ;ASCII-TO-BINARY: SINGLE PRECISION MVCD51 = 10000010 ;ASCII-TO-BINARY: DOUBLE PRECISION MVCD52 = 10000001 ;BINARY-TO-ASCII: SINGLE PRECISION MVCD53 = 10000011 ;BINARY-TO-ASCII: DOUBLE PRECISION MVCD54 = 10001001 ;BINARY-TO-ASCII: SINGLE BINARY BYTE .RADIX 8 ] * ; * NOTE THAT IT IS PROPER TO INTERMIX TRANSFER AND * ; * CONVERSION PACKETS IN THE SAME PACKET STRING, SO LONG * ; * AS THE CALL IS TO "MOVEX". THAT IS, ALL PACKETS IN A * ; * MIXED STRING MUST BE FOUR WORDS LONG. DYNAMIC SOURCE * ; * AND DESTINATION ADDRESS SETTING MAY BE ACCOMPLISHED IN* ; * FULL-SIZED PACKETS BY STORING ADDRESSES INTO THEM AT * ; * RUN TIME. ^EMP #1 START MONTH C83.FL = 2 C83.GO = 12. ;TEMP #1 BASE C83.GL = 3 C83.HO = 15. ;TEMP #2 START MONTH C83.HL = 2 C83.JO = 17. ;TEMP #2 BASE C83.JL = 3 C84OCO = 0 ;OP CODE C84OCL = 2 C84L1O = 2 ;LINE #1 C84L1L = 25. C84L2O = 27. ;LINE #2 C84L2L = 25. ; THESE ARE THE TRANSFER-AND-CONVERT CODES USED BY "MOVE" _3),(R5)+ ;LOAD CONVERSION ROUTINE'S ADDR MOV #TWO,SRCA01 ;SET TO BUMP SOURCE BY ONE WORD BITB #4,(R4) ;IS BYTE-ORIGIN BIT SET? BEQ 30$ ;NO MOV #ONE,SRCA01 ;YES: WILL BUMP BY ONLY ONE BYTE CLR TMPARY MOVB (R1),TMPARY ;EXTRACT THE SOURCE BYTE BINARY... MOV #TMPARY,(R5)+ ;...AND USE A "FRONT" FOR THE SOURCE BR 32$ 30$: MOV R1,(R5)+ ;ADDR OF SOURCE `; THESE ARE THE TRANSFER CONTROL CODES: MVCDD = 4000 ;SUPPRESS SQUEEZING OUT "DEL"'S MVCDC = 10000 ;REPLACE BAD CHAR W/ETX, RATHER THAN SP MVCDF = 20000 ;REPLACE BAD CHAR, RATHER THAN ERR EXIT MVCDR = 40000 ;STOP TRANSFER UPON EOR MVCDX = 100000 ;STOP TRANSFER ON ETX PAKEND = -1 ;END-OF-PACKET KEY .PAGE ; "MTR" METER TABLE EQUATES MXPRL = 10. a * ; * * ; * REGISTERS ARE SAVED AND RESTORED, EXCEPT FOR R0 & R1, AS ABOVE* ; * * ; * PROGRAMMER: 52 * ; ******************************************************************* .PAGE R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 b .RADIX 2 MVCD00 = 00 ;ALL CHARACTERS ALLOWED MVCD01 = 01 ;NUMERICS ONLY MVCD02 = 10 ;ALPHA ONLY MVCD03 = 11 ;ALPHA & NUMERICS MVCD04 = 1000 ;THE 64 CHARS FROM 40-137 MVCD05 = 101 ;NUMERICS AND SPACES MVCD06 = 110 ;ALPHAS AND SPACES MVCD07 = 111 ;ALPHAS & NUMERICS & SPACES MVCD10 = 10000000 ;ASCII-TO-BINARY (SINGLE) c 32$: MOV R0,(R5)+ ;ADDR OF DESTINATION MOV R2,(R5)+ ;BYTE COUNT MOV R2,COUNT ;SAVE IT FOR BUMP BELOW JSR R5,@(PC)+ ;CALL PROPER CONVERSION ROUTINE CNVTRG: .WORD 0 ;ROUTINE'S ADDRESS GOES HERE .WORD 0 ;ADDRESS OF SOURCE .WORD 0 ;ADDRESS OF DESTINATION .WORD 0 ;ACTUAL BYTE COUNT BMI MOVEX9 ;CONVERSION ERROR 36$: d ;MAX PRODUCT LINES: CONTROLS TOTALS TABL MXPR10 = 10. ;MAX PRODUCT LINES: TYPE 10 MXPR30 = MXPR10 MXPR60 = 10. ;MAX PRODUCT LINES: TYPE 60 MXPR70 = MXPR60 ; CP DATA FORMAT FROM TERMINAL TO HUB FOR "ELITE" CONTROLLED TRANSFER ; BYTE OFFSETS FROM FIRST CHARACTER OF MESSAGE ;MESSAGE HEADER: ;VALUES FROM "SYE" OVERRIDE WHERE THEY EXIST ELLN1 = 0 ;LINE #1 EL1HD = ELLN1 ;LINE #1 HEADER EL1HDLe = %5 SP = %6 PC = %7 EOR = 32 ETX = 3 DEL = 177 ; EXTERNAL REFERENCES .GLOBL BASCNV,BADCNV,ABSCNV,ABDCNV ; EXTERNAL DEFINTIONS .GLOBL MOVEX,MOVEXA,MOVEXB,MOVEXC .PAGE .ENABL LSB BYPASS: NOP ;INSERTED WHEN DST AND/OR SRC IS PRESET DSTINS: MOV (R4)+,R0 ;WHEN DST IS NOT PRESET SRCINS: MOV (R4)+,R1 ;WHEN SRC IS NOT PRESET MOVEf MVCD11 = 10000010 ;ASCII-TO-BINARY (DOUBLE) MVCD12 = 10000001 ;BINARY-TO-ASCII (SINGLE) MVCD13 = 10000011 ;BINARY-TO-ASCII (DOUBLE) MVCD14 = 10000101 ;BINARY-TO-ASCII (SINGLE: BYTE SOURCE) .RADIX 8 .PAGE HEADR TASKNO,TSKFR,START,EXTIM,STKSZ,PRI ;ROS TASK HEADER .PAGE CFIML: MSPLST QUCONF ;GENERATE MESSAGE REQUEST LIST MESGM ;MESSAGE WORK AREA CFIML1 = gADD @SRCA00(R3),R1 ;BUMP SOURCE POINTER BY PROPER AMOUNT ADD @DSTA00(R3),R0 ;DESTINATION BR MOVEX4 ;BACK FOR NEXT PACKET SRCA00: ;TABLE OF ADDRESSES TO FIND PROPER BUMP COUNTS:SOURCE .WORD COUNT ;A-TO-B SINGLE SRCA01: .WORD 0 ;("ONE" OR "TWO") B-TO-A SINGLE .WORD COUNT ;A-TO-B DOUBLE .WORD FOUR ;B-TO-A DOUBLE DSTA00: ;BUMP ADDRESSES FOR DESTINATION .WORD TWO h = 2 ;CR - LF ELRCD = EL1HD+EL1HDL ;ROUTE CODE ELRCD = THDRTE ;ROUTE CODE ELRCDL = HDRLFR ELSP1 = ELRCD+ELRCDL ;SPACE ELSP1L = 1 ELASR = ELSP1+ELSP1L ;ASR STATUS ELASR = THDSTS ;ASR STATUS ELASRL = 1 ELSPA = ELASR+ELASRL ;SPACE ELSPAL = 1 ELACT = ELSPA+ELSPAL ;ACTION CODE ELACT = THDACT ;ACTION CODE ELACTL = 1 ELSP2 = iXA: JSR PC,MOVSR1 ;ENTRY POINT WITH R0 PRESET MOV BYPASS,1$ ;INSERT BYPASS INSTRUCTION (DESTINATION) BR 11$ MOVEXB: JSR PC,MOVSR1 ;ENTRY POINT WITH R1 PRESET MOV DSTINS,1$ ;RESET DESTINATION INSTRUCTION BR 3$ MOVEXC: JSR PC,MOVSR1 ;ENTRY POINT WITH R0 & R1 PRESET MOV BYPASS,1$ ;INSERT BYPASS INSTRUCTION(DESTINATION) 3$: MOV BYPASS,2$ ;INSERT BYPASS INSTRUCTION (SOURCEjCFIML+MSPNUM ;QUEUE NUMBER CFIML2 = CFIML+MSPLCK ;LOCK CFIML3 = CFIML+MSPPAR ;PARAMETER CFIML4 = CFIML+MSPPRI ;PRIORITY CFIML5 = CFIML+MSPWRK ;WORK AREA POINTER CFIML6 = CFIML+MSPSVC ;RESERVED "SERVICE" WORD .PAGE .SBTTL LOCAL BUFFERS CFFCL: FLPLST ,TRMNDX ;GENERATE FILE REQUEST LIST FILGM ;GENERATE FILE WORK AREA CFFCL1 = CFFCL+FLPNAM ;FILE NAME CFFCL2 = CFFCL+FLPLCK ;LOCK BYTEk .WORD COUNT .WORD FOUR .WORD COUNT ONE: .WORD 1 TWO: .WORD 2 FOUR: .WORD 4 COUNT: .WORD 0 ;HOLDS TRANSFER BYTE COUNT TMPARY: .WORD 0 ETXFLG: .WORD 0 ;FLAG FOR USERS TO CHECK WHEN ETX IS DETECTED CNADTB: .WORD ABSCNV ;TABLE OF CONVERSION RTNE ADDRESSES .WORD BASCNV .WORD ABDCNV .WORD BADCNV .PAGE ;COMMON ENTRY SUBROUTINE MOVSR1: MOl ELACT+ELACTL ;SPACE ELSP2L = 1 ELTIM = ELSP2+ELSP2L ;TIME ELTIM = THDTIM ;TIME ELTIML = 4 ELSP3 = ELTIM+ELTIML ;SPACE ELSP3L = 1 ELJUL = ELSP3+ELSP3L ;JULIAN DATE ELJUL = THDDAT ;JULIAN DATE ELJULL = 3 ELSP4 = ELJUL+ELJULL ;SPACE ELSP4L = 0 ELMSN = ELSP4+ELSP4L ;MESSAGE # ELMSN = THDMSN ;MESSAGE # ELMSNL = 3 ELLN1L = ELMSN+ELm) BR 1$ MOVEX: JSR PC,MOVSR1 MOV DSTINS,1$ ;RESET DESTINATION INSRTUCTION 11$: MOV SRCINS,2$ ;RESET SOURCE INSTRUCTION ; THE FOLLOWING TWO INSTRUCTIONS MAY CONTAIN EITHER "MOV" OR "NOP": ; THIS ALLOWS THE USE OF A PRESET SOURCE OR SOURCE AND DESTINATION 1$: .WORD 0 ;SET DST ADDR INSTRUCTION GOES HERE 2$: .WORD 0 ;SET SRC ADDR INSTRUCTION GOES HERE MOV (R4)+,R2 ;CHAR COUNT n CFFCL3 = CFFCL+FLPPAR ;PARAMETER CFFCL4 = CFFCL+FLPLOC ;LOCATOR POINTER CFFCL5 = CFFCL+FLPWRK ;WORK AREA POINTER CFFCL6 = CFFCL+FLPSVC ;RESERVED "SERVICE" WORD MSGBUF: .BLKB MESG3-MESG2 ;LOCAL MESSAGE BUFFER INPLIN: .BLKB CFLINE ;LOCAL BUFFER FOR EACH INPUT LINE .PAGE .SBTTL LOCAL STORAGE MASKTB: ;INDEXED TABLE OF ONE-BIT MASKS .WORD 1,2,4,10,20,40,100,200,400,1000,2000,4000,10000,20000 oV R4,-(SP) ;SAVE ALL REGS... MOV R3,-(SP) MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) MOV (R5)+,R4 ;SET UP POINTER TO FIRST PACKET MOV 12(SP),-(SP) ;PUSH RTN ADDR ONTO END MOV R5,14(SP) ;REPLACE HOLE IN TABLE W/RTN ADDR IN R5 RTS PC CHRTAB: ;TABLE OF ALLOWED CHARACTER RANGES .BYTE '0,'9 ;BIT #0: MOST COMMON RANGE - NUMERICS .BYTE 'A,'Z pMSNL ;LINE #1 LENGTH ELLN1L = THDL ;LINE #1 LENGTH ;TRUCK CARD: ELLN2 = ELLN1+ELLN1L ;LINE #2 EL2HD = ELLN2 ;LINE #2 HEADER EL2HDL = 2 ELSPN = EL2HD+EL2HDL ;SPOT # ELSPNL = 1 ELSPB = ELSPN+ELSPNL ;SPACE AFTER SPOT # 01:29:73 ELSPBL = 1 01:29:73 EL2ID = ELSPB+ELSPBL ;CARD I.D. 01:29:73q BLE MOVEX4 ;NEG OR ZERO COUNT CAUSES IGNORE MOV (R4),R3 ;GET TRANSFER & CONVERSION MODE WORD TSTB R3 ;IS MODE FOR CONVERT? BMI MOVEX5 ;YEAH CMPB -(R0),-(R1) ;;POINTERS ARE FRONT-BUMPED BELOW 4$: CMPB (R0)+,(R1)+ ;BUMP TO NEXT CHARS BICB #200,(R1) ;ONLY 7-BIT ASCII CHECKS MADE MOV (R4),R3 ;RESET CHARACTER-CHECK CODE BIT #4000,R3 r .WORD 40000,100000 CALTAB: ;CALENDAR TABLE (INCLUDES JANUARY OF FOLLOWING YEAR) .BYTE 31.,28.,31.,30.,31.,30.,31.,31.,30.,31.,30.,31.,31. DCRTE: DCRTE ;DATA CENTER ROUTE CODE STDID: STDID ;GENERATE STANDARD MESSAGE HEADER I.D. INTID: INTID ;GENERATE INTERCEPT MESSAGE HEADER I.D. TRMACT: .ASCII ".3C" ;ACTION CODE FOR MESSAGES GOING TO TERMINALS ;01-11-73 .EVEN NAMLST: ;LIST OF FILE NAMES FOR OPs ;BIT #1 - ALPHAS .BYTE ' ,' ;BIT #2 - SPACES .BYTE ' ,'_ ;BIT #3 - 64-CHAR ASCII SET .REPT 4 .BYTE 1,0 ;CURRENTLY UNUSED .ENDM SAVREG: .IRP X,<4,3,2,1,0> ;SAVE REGISTERS ON STACK: JSR R5,SAVREG MOV R'X,-(SP) .ENDM JMP (R5) RESREG: TST (SP)+ ;CURRENT VALUE OF R5 NOT NEEDED .IRP X,<0,1,2,3,4> ;POP STACK INTO REGS: JSR R5,RESREG t EL2IDL = 1 ELCAR = EL2ID+EL2IDL ;CARRIER CODE ELCARL = 4 ELSP5 = ELCAR+ELCARL ;SPACE ELSP5L = 3 ELTRK = ELSP5+ELSP5L ;TRUCK CODE ELTRKL = 4 ELFLR = ELTRK+ELTRKL ;FLOW RATE ELFLRL = 1 EL2AC = ELFLR+ELFLRL ;TERMINAL ACCESS CODE EL2ACL = 2 ELLN2L = EL2AC+EL2ACL-ELLN2 01-29-73 ;CUSTOMER CARD: ELLN3 = ELLN2+ELLN2L ;LINE #3 EL3HD = u;SQUEEZE DEL'S? BNE 6$ ;NO CMPB (R1),#DEL BNE 6$ DEC R0 ;BACK UP DEST POINTER: IGNORE DEL BR 22$ 6$: MOVB (R1),(R0) ;PUT CHAR IN DEST BUFFER CLR FAILFG ;INIT FAILURE FLAG TO FAIL STATE TSTB R3 ;CHARACTER-CHECK CODE BYTE BEQ 14$ ;NO BITS ON: BYPASS RANGE CHECKS MOV #CHRTAB,R5 ;CHAR LIMIT CHECK TABLE v-CODES 01 AND 05 ;01-09-73 .WORD TRM ;MUST BE FIRST NAME IN LIST ;01-09-73 .WORD MTR ;REMAINDER OF LISTS CONTAINS ALL FILES ;01-09-73 .WORD NMN ;...ASSOCIATED WITH TERMINALS ;01-09-73 .WORD MNT ;01-09-73 .IF NE .GULF ;01-09-73 .WORD TMP MOV (SP)+,R'X .ENDM RTS R5 .END x ELLN3 ;LINE #3 HEADER EL3HDL = 1 ;SPACE EL3ID = EL3HD+EL3HDL ;CARD I.D. EL3IDL = 1 ELSP6 = EL3ID+EL3IDL ;SPACE ELSP6L = 3 ELCUS = ELSP6+ELSP6L ;CUSTOMER # ELCUSL = 7 ELSP7 = ELCUS+ELCUSL ;SPACE ELSP7L = 4 ELLN3L = ELSP7+ELSP7L-ELLN3 01-29-73 ;DRIVER CARD: ELLN4 = ELLN3+ELLN3L ;LINE #4 EL4HD = ELLN4 ;LINE y BR 12$ ;BEGIN 8$: DEC R5 ;ADJUST CHECK POINTER... 10$: TST (R5)+ ;...FOR NEXT RANGE PAIR 12$: TSTB R3 ;HAVE WE EXHAUSTED ALLOWED CHECKS? BEQ 16$ ;YES: LEAVE FLAG AS FAILED AND SKIP OUT ASRB R3 ;FIND NEXT ALLOWED RANGE BCC 10$ ;NOT THIS ONE CMPB (R0),(R5)+ ;LOW LIMIT OF ALLOWED RANGE BLO 8$ ;BELOW RANGE: THz ;01-09-73 .ENDC ;01-09-73 .IF NE .CITGO ;01-13-73 .WORD PRD ;01-13-73 .ENDC ;01-13-73 .WORD 0 ;ZERO ENDS LIST ;01-09-73 CNTLST: ;PARALLEL LIST CONTAINING # OF CELLS IN EACH ELEMENT ;01-09-{; UPDATE 01.31.73 EODRPT.S06 01.31.73 ; UPDATE 01.29.73 EODRPT.S05 01.29.73 ; UPDATE 01.27.73 EODRPT.S04 01.27.73 ;UPDATE: 23-JAN-73 EODRPT.S03 ;01-23-73 ;ORIGIN&CARDS 22-JAN-73 EODRPT.S02 ;ORIGIN:CARDS 12-12-72 EODRPT.S01 .NLIST TTM .LIST MEB .LIST ME .ENABL CDR |#4 HEADER EL4HDL = 1 ;SPACE EL4ID = EL4HD+EL4HDL ;CARD I.D. EL4IDL = 1 ELSP8 = EL4ID+EL4IDL ;SPACE ELSP8L = 1 ELDRV = ELSP8+ELSP8L ;DRIVER # ELDRVL = 3 ELSP9 = ELDRV+ELDRVL ;SPACE ELSP9L = 8. EL4AC = ELSP9+ELSP9L ;TERMINAL ACCESS CODE EL4ACL = 2 ELLN4L = EL4AC+EL4ACL-ELLN4 01-29-73 }IS CHECK FAILED. MORE? CMPB (R0),(R5)+ ;HIGH LIMIT BHI 12$ ;OVER RANGE: CHECK FAILED. MORE? 14$: INC FAILFG ;ADVANCE FLAG TO GOOD STATE 16$: MOV (R4),R3 ;MODE FLAGS BPL 18$ ;NO STOP CHECK FOR ETX CMPB (R0),#ETX ;ETX? BEQ MOVEX4 ;SKIP OUT ON ETX 18$: ASL R3 ;CHECK FOR EOR? BPL 20$ ;DON'T MAKE IT CMPB (R0)~73 .WORD 2 ;TRM ;01-09-73 .WORD 3 ;MTR ;01-09-73 .WORD 1 ;NMN ;01-09-73 .WORD 1 ;MNT ;01-09-73 .IF NE .GULF ;01-13-73 .WORD 1 ;TMP ;01-13-73 .ENDC  ; 01.29.73 DEBUG = 1 ;ALLOW INSERTION OF DEBUG TRAPS ; ******************************************************************** ; * PROGRAM IDENTIFICATION: " E O D R P T " * ; * END-OF-DAY REPORT TASK * ; * * ; * PURPOSE: * ; * TO N 01-29-73 ELMTR = ELLN4+ELLN4L+2 ;INDEX TO METER #1 DATA; ALLOW FOR CR-LF01:29:73 ELMTRL = 6 ;FIELD WIDTH FOR EACH METER 01-29-73 ELTMP = ELMTR+>-1+2 ;ALLOW FOR SPACES & CR-LF 01-29-73 ELTMPL = 3 ;FIELD WIDTH FOR EACH TEMPERATURE 01-29-73 01-29-73 ELMSGL = ELTMP+>-1+6 ;ALLOW FOR PSUEDO-BCC&E,#EOR ;EOR? BEQ MOVEX4 ;SKIP OUT ON EOR 20$: TST FAILFG ;WAS THERE A RANGE CHECK ERROR? BNE 22$ ;NO ASL R3 ;"REPLACE" REQUESTED? BPL MOVEX9 ;NO: TAKE ERROR RETURN MOVB #' ,(R0) ;INIT WITH A BLANK ASL R3 ;WAS A BLANK REQUESTED? BMI 23$ ;NO: ETX REPLACE INSTEAD 22$: SOB R2,4$ ;GET ANOTHER CHAR UNTI ;01-13-73 .IF NE .CITGO ;01-13-73 .WORD 1 ;PRD ;01-13-73 .ENDC ;01-13-73 .PAGE ; FOLLOWING ARE TEMPORARY STORAGE CELLS TMPW01: .WORD 0 TMPW02: .WORD 0 TMPW03: .WORD 0 TMPW04: .WORD 0 TMPW05: .WORD 0 TMPW06: .WORD 0 TMPW07: .WOTIFY BOTH THE DATACENTER AND THE TERMINAL THAT THE* ; * TRANSACTION FOLIO FOR THE DAY IS BEING CLOSED, AND THAT* ; * A NEW ONE IS BEING OPENED. END-O-MONTH IS ALSO NOTED * ; * ON THE APPROPRIATE DATE FOR EACH TERMINAL. * ; * * ; * METHOD: * ; * THE "TRM" TERMINAL FACILITY DATA FILE IS REFERENCED * ; * TX01:29:73 ;LENGTH OF "ELITE" MESSAGE, INCLUDING PSUEDO-BCC DURING AUDIT TRAIL. 01:29:73 ; BULK TRANSACTION STAT AND PRODUCT LINE FORMAT ; STAT LINE ; FIELD WIDTHS BUK01L = 3 ;INPUT I.D. BUK02L = 7 ;TERMINAL I.D. BUK03L = 1 ;DDI BUK04L = 7 ;CUSTOMER NUMBER BUK05L = 4 ;TRUCK NUMBER BUK06L = 4 ;CARRIER NUMBER BUK07L = 3 ;DRIL COUNT EXPIRES MOVEX4: ;THIS IS THE SUCCESSFUL EXIT POINT TST (R4)+ ;BUMP STRING POINTER FOR NEXT PACKET BPL 24$ ;WAS NOT IN ETX STOP CONTROL MODE ;TIE OFF MESSAGE WITH ETX AND SET FLAG TO INDICATE IT, WHETHER ETX ;ITSELF CAUSED TERMINATION, OR THE MAX COUNT EXPIRED WITHOUT AN ETX, ;OR TRANSFER WAS HALTED DUE TO A BAD CHARACTER. 23$: MOVB #ETX,(R0) 24$: CMPB (R0)+,(R1)+ ;BUMP POINTERS TO NEXT CHARACTER PLACES ORD 0 TMPW08: .WORD 0 TMPW09: .WORD 0 TMPW10: .WORD 0 TMPW11: .WORD 0 TMPW12: .WORD 0 TMPW13: .WORD 0 TMPW14: .WORD 0 TMPW15: .WORD 0 TMPW16: .WORD 0 TMPW17: .WORD 0 TMPW18: .WORD 0 TMPW19: .WORD 0 TMPW20: .WORD 0 ;THE FINAL CHARACTER IN THE NAMES OF LOCAL STORAGE CELLS IS ; "A" FOR ASCII AND "B" FOR BINARY. ERORXB: .WORD 0 ;ERR MSG # CFOPCB: .WORD 0 ;BINARY OP CODE CFNIDB: .WORD 0 ;INPUT I.D. CF EVERY QUARTER HOUR, OR WHENEVER A TANK-GAUGE TRANS- * ; * ACTION IS RECEIVED. IF IT IS THE PROPER TIME, THE * ; * E-O-D SEQUENCE IS INITIATED FOR THAT TERMINAL. SEE * ; * "REQUIREMENTS" BELOW FOR DETAILS OF THE SEQUENCE. * ; * * ; * PROGRAMMERS: 50 AND 52 * ; ******************************************************************** VER NUMBER BUK08L = 5 ;INVOICE NUMBER BUK09L = 3 ;DATE BUK10L = 4 ;TIME BUK11L = 3 ;FOLIO BUK12L = 1 ;EOR BUK13L = 0 ;- BUK14L = 0 ;- ; OFFSETS BUK01 = 0 BUK02 = BUK01+BUK01L BUK03 = BUK02+BUK02L BUK04 = BUK03+BUK03L BUK05 = BUK04+BUK04L BUK06 = BUK05+BUK05L BUK07 = BUK06+BUK06L CMP (R4),#-1 ;REACHED END OF PACKET STRING? BNE 1$ ;NOT YET ADD #2,12(SP) ;GOOD RETURN TO CALL+4 MOVEX9: ;THIS IS ALSO THE EXIT POINT FOR ERROR RETURN MOV R0,(SP) ;RETURN FINAL DESTINATION... MOV R1,2(SP) ;...AND SOURCE ADDRESSES JSR R5,RESREG ;POP SAVED REGS RTS R5 ;AND RETURN TO CALLER ;(I KNOW YOU DON'T BELIEVE IT, BUT IT HORA: .BYTE 0,0 ;CURRENT HOUR CFMINA: .BYTE 0,0 ;MINUTE CFSECA: .BYTE 0,0 ;SECOND CFMONA: .BYTE 0,0 ;MONTH CFDATA: .BYTE 0,0 ;DATE CFYERA: .BYTE 0,0 ;YEAR CFJULA: .BYTE 0,0,0 ERRORX: .BYTE 0 ;ERROR COUNT IN ERROR PROCESSING TLSTFG: .BYTE 0 ;TERMINAL LISTING FLAG: 0 IF OP-02, ELSE OP-03 LSTCHR: .BYTE 0 ;LAST CHAR OF CURRENT LINE ;01-14-73 CFHORB: .WORD .PAGE ;* * * ; ; ;* * * ; ; REQUIREMENTS ; ; 1. CONTROL EOD TRANSACTION GENERATION FOR THE TERMINALS. ; THE CLOSING TIME FOR A TERMINAL IS MAINTAINED IN ITS ; PERSONALITY TABLE (TERMINAL DESCRIPTOR - TRM). ; ; 2. UPDATE THE FOLIO NUMBER FOR THE TERMINAL AT EACH EOD. ; THE FOLIO NUMBER IS IN FIELD TRMFLN. ; ; 3. THE TIME FOR EOD IS IN FIELD TRMEOD. THE DAY FOR EOD ; IS IN THE FIELD TRMEDM. THE YEAR FOR EOD I BUK08 = BUK07+BUK07L BUK09 = BUK08+BUK08L BUK10 = BUK09+BUK09L BUK11 = BUK10+BUK10L BUK12 = BUK11+BUK11L BUK13 = BUK12+BUK12L BUK14 = BUK13+BUK13L ; PRODUCT LINE ; FIELD WIDTHS BUK20L = 2 ;PRODUCT I.D. BUK21L = 3 ;PRODUCT TEMPERATURE BUK22L = 6 ;PRODUCT QUANTITY BUK23L = 1 ;SIGN BUK24L = 1 ;EOR BUK25L = 0 WORKS!) .DSABL LSB .PAGE MOVEX5: MOV #CNVTRG,R5 ;INIT TO FILL THE CONVERSION CALL LIST BIC #-3-1,R3 ;GET A-B AND S/D BITS TO USE AS INDEX ASL R3 ;WORD INDEX MOV CNADTB(R3),(R5)+ ;LOAD CONVERSION ROUTINE'S ADDR MOV #TWO,SRCA01 ;SET TO BUMP SOURCE BY ONE WORD BIT #4,(R4) ;IS BYTE-ORIGIN BIT SET? BEQ 30$ ;NO MOV #ONE,SRCA01 ;Y0 CFMINB: .WORD 0 CFSECB: .WORD 0 CFMONB: .WORD 0 CFDATB: .WORD 0 CFYERB: .WORD 0 CFJULB: .WORD 0 TRMNDX: .WORD 0 ;TERMINAL'S ROUTING CODE INDEX CFMORG: .BLKB HDRLFR ;STORAGE FOR SENDER'S ROUTE CODE .EVEN ;01-08-73 .PAGE .SBTTL TRANSFER CONTROL TABLES PAKEND = -1 PAKX01: ;XFERS INPUT MESSAGE TO LOCAL BUFFER, EXCLUDING HEADER PACK MSGBUF,MESG2+HDRL,-1N IN FIELD ; TRMEDY. THE DAY FOR NEXT EOM TRANSACTION IS IN FIELD ; TRMEMM. ; ; 4. THE TIME ZONE (TRMTMZ) IS USED TO CORRECT TERMINAL TIME ; TO HUB TIME. ; ; 5. THE EOM TRANSACTION CAN BE GENERATED ON THE LAST DAY OF ; THE MONTH OR THE FIRST DAY OF THE MONTH. THE FIELD TRMEOM ; CONTROLS THIS. ; ; 6. ALL EOD TRANSACTIONS HAVE INPUT ID = 020. FOUR TYPES ; OF TRANSACTION ARE PREPARED AND ARE IDENTIFIED BY TH ;- BUK26L = 0 ;- ; OFFSETS BUK20 = BUK14+BUK14L BUK21 = BUK20+BUK20L BUK22 = BUK21+BUK21L BUK23 = BUK22+BUK22L BUK24 = BUK23+BUK23L BUK25 = BUK24+BUK24L BUK26 = BUK25+BUK25L HEADR TASKNO,TSKFR,START,EXTIM,STKSZ,PRI .PAGE .SBTTL NEW MESSAGE & SEQUENCE ACCOUNTING ; ******************************************************************** ;FORMAT ES: WILL BUMP BY ONLY ONE BYTE CLR TMPARY MOVB (R1),TMPARY ;EXTRACT THE SOURCE BYTE BINARY... MOV #TMPARY,(R5)+ ;...AND USE A "FRONT" FOR THE SOURCE BR 32$ 30$: MOV R1,(R5)+ ;ADDR OF SOURCE 32$: MOV R0,(R5)+ ;ADDR OF DESTINATION MOV R2,(R5)+ ;BYTE COUNT MOV R2,COUNT ;SAVE IT FOR BUMP BELOW JSR R5,@(PC)+ ;CALL PROPER CONVERSION ROUTINE CNVTRG: .WORD 0 ,00 ;TO 1ST "ETX" PACK CFMORG,MESG2+HDRFR,HDRLFR,00 ;SAVE SENDER'S ROUTE CODE PAKEND ;*********************************************************************** PAKX02: .WORD INPLIN ;XFRS NEXT LINE TO INPUT LINE BUFFER X02SRC: .WORD 0 ;DYNAMIC SOURCE .BYTE 0 ;TO 1ST EOR/ETX .BYTE 0 ;NO CHECKS PAKEND ;*********************************************************************** PAKX03: ;;CONVERT-AND-STORE CURRENT DATE AEIR ; OPCODE: ; ; 01 = OPEN FOLIO ; 07 = CLOSE DAILY FOLIO ; 05 = CLOSE MONTH END FOLIO ; 00 = NULL MESSAGE NUMBER LISTING ; ; 7. THE EOD OCCURS IF A FORMAT 090 IS RECEIVED AT THE HUB WITH- ; IN 1 HOUR PRIOR TO THE NORMAL EOD. ; 8. THE FOLIO NUMBER IS ASSIGNED SEQUENTIALLY BEGINNING ; WITH 001 ON THE FIRST DAY OF EACH MONTH ; ; 9. A MESSAGE IS PREPARED FOR THE TERMINAL INDICATINCONVERSION TASK ;MASSAGES ALL INCOMING MESSAGES TO CONFORM TO STANDARD ;INTERNAL TRANSACTION FORMAT ; ******************************************************************** ERR = FMTX00 ;AUTOMATIC TARGET FOR EACH ERR CONDITION ERRNUM = 0 FMTEXT: EMT EXIT ;ALL EXIT HERE SYSERR: DEBUG ;SYSTEM FAULT: BETTER FIND OUT WHAT IT IS ;*********************************************************************** ;INPUT ;ROUTINE'S ADDRESS GOES HERE .WORD 0 ;ADDRESS OF SOURCE .WORD 0 ;ADDRESS OF DESTINATION .WORD 0 ;ACTUAL BYTE COUNT BMI MOVEX9 ;CONVERSION ERROR 36$: ADD @SRCA00(R3),R1 ;BUMP SOURCE POINTER BY PROPER AMOUNT ADD @DSTA00(R3),R0 ;DESTINATION CMPB -(R0),-(R1) ;ADJUST FOR BUMP @ 24$ BR MOVEX4 ;BACK FOR NEXT PACKET SRCA00: ;TABLEND TIME DATA PACK CFYERA,CFYERB,2,12 PACK CFDATA,CFDATB,2,12 PACK CFMONA,CFMONB,2,12 PACK CFHORA,CFHORB,2,12 PACK CFMINA,CFMINB,2,12 PACK CFSECA,CFSECB,2,12 PACK CFJULA,CFJULB,3,12 PAKEND ;*********************************************************************** PAKX04: ;CONVERTS INPUT I.D.& PRIMARY OP CODE TO BINARY PACK CFOPCB,INPLIN+C80OCO,C80OCL,10 PACK CFNIDB,INPLIN+C80IDO,C80G THE EOD. ; THE MESSAGE IS SENT TO THE ASR AT THE TERMINAL. ; ; 10. THE REQUEST TO OPEN A FOLIO IS SENT TO THE DATA-CENTER ; REAL-TIME QUEUE. THE REQUEST TO CLOSE A FOLIO IS SENT ; TO THE DATA-CENTER BATCH QUEUE. ; ; 11. THE GENERATION OF THE EOD CAUSES TERMINAL INPUT TO BE ; STOPPED FOR 1 MINUTE. THE FIRST ACTION IS TO SEND THE ; OPEN FOLIO. THEN AFTER 30 SECONDS THE CLOSE FOLIO IS ; SENT. AFTER ANOTHER 30 SECONDS T NEXT MESSAGE ;UPDATE MESSAGE-NUMBER TABLE ;*********************************************************************** FORMAT: DEBUG 1 TST WRNFLG ;DOES WARNING MESSAGE NEED TO BE PRINTED01-29-73 BEQ 2$ ;NO 01-29-73 CLR WRNFLG 01-29-73 JSR PC,FORMT2 ;GO PRINT IT 01-29-73 2$: TSKRUN FMTEXT OF ADDRESSES TO FIND PROPER BUMP COUNTS:SOURCE .WORD COUNT ;A-TO-B SINGLE SRCA01: .WORD 0 ;("ONE" OR "TWO") B-TO-A SINGLE .WORD COUNT ;A-TO-B DOUBLE .WORD FOUR ;B-TO-A DOUBLE DSTA00: ;BUMP ADDRESSES FOR DESTINATION .WORD TWO .WORD COUNT .WORD FOUR .WORD COUNT ONE: .WORD 1 TWO: .WORD 2 FOUR: .WORD 4 COUNT: .WORD 0 ;HOLDS TRANSFER BYTE COUNT TMIDL,10 PACK CFCODE,INPLIN+C80OCO,2,00;PRIM'Y OP-CODE INTO O.K. MSG ;01-16-73 PAKEND ;*********************************************************************** PAKX05: ;PACKET TO CONVERT SECONDARY OP CODE TO BINARY PACK CFOPCB,INPLIN+0,CFSOCL,10 PACK CFCODE,INPLIN+0,2,00 ;SEONDARY OP-CODE INTO O.K. MSG ;01-16-73 PAKEND ;*********************************************************************** PAKX06: ;FILLS OK MSG SKEL W/RTE CODESHE TERMINAL INPUT IS ; ALLOWED. ; ; TERMINAL INPUT IS STOPPED BY SETTING THE INHIBIT INPUT ; FLAG (MSQIH) IN THE TERMINAL QUEUE TABLE MSQ. ; ; NULL MESSAGE NUMBERS ARE REPORTED PRIOR TO FORMING THE ; CLOSE FOLIO MESSAGE. THE NULL MESSAGE NUMBERS ARE IN THE ; NULL MESSAGE NUMBER TABLE (NMN) FOR THE TERMINAL. THE TABLE ; IS CLEARED UPON COMPLETION OF THE REPORT. A MAXIMUM OF 100 ; NULL SEQUENCE NUMBERS ARE REPORTED IN 01-29-73 CLRB ERRORX ;INIT ERR MSG # FILEF MSDT,M,,#0,#0,FMTEXT ;DETACH NEXT MESSAGE MOVE MSG1PK ;XFR MSG UP TO "ETX" INTO LOCAL AREA DEC R0 MOV R0,MSGETX ;PNTR TO END OF MESSAGE MOV #MSGBUF+HDRFR,-(SP) ;LOC FOR TRM RTNG CODE IN MSG JSR PC,CNVRTX ;CONVERT TO TERMINAL INDEX MOV (SP)+,TRMNDX ;SAVE IT BPL PARY: .WORD 0 FAILFG: .WORD 0 ;INDICATES RANGE CHECK FAILURE WHEN ZERO CNADTB: .WORD ABSCNV ;TABLE OF CONVERSION RTNE ADDRESSES .WORD BASCNV .WORD ABDCNV .WORD BADCNV .PAGE ;COMMON ENTRY SUBROUTINE MOVSR1: MOV R4,-(SP) ;SAVE ALL REGS... MOV R3,-(SP) MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) MOV (R5)+,R4 ;SET UP POINTER TO OF TARGET AND SENDER ;01-16-73 PACK CFFRRC,CFMORG,HDRLFR,03 ;SENDER'S ROUTE CODE ;01-16-73 PACK CFUPRC,INPLIN+C80RCO,HDRLFR,03 ;TARGET ROUTE CODE ;01-16-73 PAKEND ;01-16-73 ; ******************************************************************** PAKX90: ;BUILDS THE "O.K." MESSAGE FOR THE HUB PACK MESG2,CFHDR1,HDRL,00 ;STD. HEADER PACK MESG2+HDRL,CFOKMS,CFOKML,0ONE MESSAGE. UP TO ; 10 NULL MESSAGES ARE PREPARED AS REQUIRED ; ; 12. EOD TRANSACTIONS ARE GENERATED AUTOMATICALLY ONLY ON THE ; QUARTER HOUR. ; ; 13. THE 090 TRANSACTION IS REROUTED TO THE DATACENTER. ; TO = DCRTE ; ACT = .NC (MANUAL TRANSACTION TO DC) ; 14. ALL TIMES RECORDED IN "TRM" ARE IN TERMINAL'S LOCAL TIME. ; THEY ARE CONVERTED TO HUB TIME IF NEEDED FOR COMPARISON ; WITH CURRENT CLOCK. 4$ JMP NTRCPT ;INVALID CODE: NO WAY TO RETURN MSG 4$: MOV #MNT,FMFCL1 ;INIT TO MESSAGE NUMBER TABLE CLR FMFCL6 ;1ST CALL FILEF FLSNT,,,#2,#0 ;READ IN MESSAGE NUMBER TABLE MOV FMTSEQ,R1 ;CONVERTED & STORED BY "MSG1PK" MOV R1,R2 ;SAVE SEQUENCE # BGT 6$ 01-31-73 ERR ;SEQUENCE # WAS ZERO OR NEG FIRST PACKET MOV 12(SP),-(SP) ;PUSH RTN ADDR ONTO END MOV R5,14(SP) ;REPLACE HOLE IN TABLE W/RTN ADDR IN R5 RTS PC CHRTAB: ;TABLE OF ALLOWED CHARACTER RANGES .BYTE '0,'9 ;BIT #0: MOST COMMON RANGE - NUMERICS .BYTE 'A,'Z ;BIT #1 - ALPHAS .BYTE ' ,' ;BIT #2 - SPACES .BYTE ' ,'_ ;BIT #3 - 64-CHAR ASCII SET .BYTE 11,15 ;BIT #4 - PRINT CONTROL 0 ;TEXT OF O.K. MSG ;01-16-73 PAKEND ; ******************************************************************** PAKX91: ;BUILDS ERROR MESSAGE FOR HUB AND TERMINAL PACK MESG2+HDRL+14.,ERRORX,2,14 ;CVT & STORE ERR# INTO MSG ;01-16-73 PACK MESG2+HDRL+7,CFERMS,5,00;REPLACE PHRASE W/"ERROR" ;01-16-73 PAKEND ;*********************************************************************** PAKX92: ;ALTER ERROR MSG HEADER FOR SEND TO TERMINAL HUB CLOCK IS CONVERTED TO TERMINAL TIME ; WHEN NEEDED FOR LISTINGS AT THE TERMINAL. .PAGE .SBTTL LOCAL MACROS ;* * * .MACRO FILEF NAME,LIST,TEMP,LCK,PAR,ERR1,ERR2,ERR3 .LIST ME ERRNUM = ERRNUM+1 .NLIST ME,COM ERR = ERR-4 .IF B LIST .IF B TEMP FILEC NAME,CFFCL,R0,LCK,PAR,ERR1,ERR2,ERR3 .IFF FILEC NAME,CFFCL,TEMP,LCK,PAR,ERR1,ERR2,ERR3 .ENDC 01-31-73 6$: 01-31-73 DEC R1 ;PREPARE FOR INDEXING CLR R0 DIV #16.,R0 ;FIND ROW & COLUMN FOR M-N BIT MOV #1,R3 ;INIT MARKER BIT ASH R1,R3 ;SHIFT MARKER BIT TO PROPER POSITION ASL R0 ;MAKE A WORD INDEX BIT R3,FILG1(R0) ;HAS THIS MSG ALREADY COME IN? BEQ FORMT3 ;N .REPT 3 .BYTE 1,0 ;CURRENTLY UNUSED .ENDM SAVREG: .IRP X,<4,3,2,1,0> ;SAVE REGISTERS ON STACK: JSR R5,SAVREG MOV R'X,-(SP) .ENDM JMP (R5) RESREG: TST (SP)+ ;CURRENT VALUE OF R5 NOT NEEDED .IRP X,<0,1,2,3,4> ;POP STACK INTO REGS: JSR R5,RESREG MOV (SP)+,R'X .ENDM RTS R5 .END PACK MESG2+HDRTO,CFMORG,HDRLTO,00 ;REQUESTOR'S ROUTE CODE PACK MESG2+HDRACT,TRMACT,HDRLAC,00 ;MOVE IN TERM ACT COD ;01-11-73 PAKEND ;*********************************************************************** PAKB01: PACK FILG1+TRMRTE,CFUPRC,HDRLFR,00 ;PUT RTE CODE INTO "TRM" ;01-16-73 PAKEND ;01-16-73 ; ******************************************************************** .PAGE ;THE F .IFF .IF B TEMP FILEC NAME,LIST,R0,LCK,PAR,ERR1,ERR2,ERR3 .IFF FILEC NAME,LIST,TEMP,LCK,PAR,ERR1,ERR2,ERR3 .ENDC .ENDC .LIST COM .ENDM FILEF ;THE FORMAL PARAMETER "ENTRY" MUST BE BLANK, [A], OR [B]. SEE "MOVEX". .MACRO MOVE PAKADR,ERROR,ENTRY ;CALL THE GENERAL "MOVE" RTNE JSR R5,MOVEX'ENTRY PAKADR .IF B ERROR NOP .IFF O INC WRNFLG ;FLAG TO WARN OPERATOR : SEE "FORMAT" 01-29-73 .PAGE FORMT3: BIS R3,FILG1(R0) ;SET BIT FOR THIS MSG MOV FILG1+,R0 ;"LAST MSG #" 01-29-73 INC R0 ;BUMP IT CMP R0,#MXMSGN ;OVER TOP? BLE 8$ MOV #1,R0 ;RESET 8$: CMP R0,R2 ;FILE + MSG #'S MUST AGREE BEQ 10$ OLLOWING PACKET STRING CONTROLS THE FILLING OF THE SKELETON ;LISTING OF THE CURRENT TERMINAL'S "TRM" FILE. MOST OF THE INFORMATION ;IS TRANSFERRED DIRECTLY FROM THE TABLE IMAGE IN CORE, WITH CONVERSION ;TO ASCII MADE WHERE NECESSARY. IN A FEW CASES, PRELIMINARY WORK IS ;DONE BEFORE THE CALL TO "MOVE" TO PREPARE THE NEEDED DATA. ;FIELD SIZES ARE DEPENDENT ON MESSAGE SKELETON SIZES, AND ARE THEREFORE ;HARD-CODED. ;IN THE ORIGINAL VERSION, THE BLANK SKELETON WAS MOVED TO THE MESSAGE ;BUFFER FI BR ERROR .ENDC .ENDM MOVE .MACRO ERR .LIST ME ERRNUM = ERRNUM+1 .NLIST ME ERR = ERR-4 JMP ERR .ENDM ERR .MACRO PACK DEST,SRCE,COUNT,CODE ;GENERATES "MOVE" PACKET .WORD DEST .WORD SRCE .BYTE COUNT .BYTE MVCD'CODE .ENDM PACK ; .PAGE ; TANK GAUGE FORMAT ID MACRO DEF ; ;* * * ; .MACRO TNKFID INC WRNFLG ;FLAG TO WARN OPERATOR: SEE "FORMAT" 01-29-73 10$: MOV R0,FILG1+ ;NEW COUNT 01-29-73 CLR FMFCL2 ;UNLOCK & TYPE I FILEF FLWR ;WRITE OUT MODIFIED MNT .PAGE .SBTTL FACILITY TABLE READ ;*********************************************************************** ;FILTER OUT THE ".AA" MESSAGES. ;SEND THE ".AB" MESSAGES ON. ;SEND ALL OTHERS T;ORIGIN:CARDS 28-JAN-73 LOCMAC .TITLE LOCMAC ELITE LOCAL MACROS .SBTTL MACROS FOR [CONFIG] [FORMAT] [EODRPT] ;******* REFERENCED AS S Y S M A C . S M L [ 2 7 , 2 0 0 ] ******** .MACRO MOVE PAKADR,ERROR,ENTRY ;CALL THE GENERAL "MOVE" RTNE .NLIST COM ; "ENTRY" MUST BE [BLANK], [A], [B], OR [C]. JSR R5,MOVEX'ENTRY ;TO ONE OF THE FOUR ENTRY POINTS PAKADR ;ADDRESS OF BEGIN OF PACKET STRING .IF RST, AND THEN THE DATA WAS STORED INTO THE IMAGE THERE. ;NOW, BECAUSE THE MESSAGE IS LARGER THAN THE MESSAGE AREA AND MUST ;THEREFORE BE BROKEN INTO A NUMBER OF TYPE II CELLS, THE ENTIRE MESSAGE ;IS CONSTRUCTED IN THE SKELETON AREA, AND THE MESSAGE CELLS ARE THEN ;CREATED ONE AT A TIME FROM THERE. "TRMSKX" WAS ORIGINALLY USED TO ;PROVIDE THE NECESSARY OFFSET FOR UPDATING IN THE MESSAGE AREA. IT IS ;NOW ZERO, TO ALLOW UPDATING IN THE SKELETON AREA. TRMSKX = 0 PAKC01: ;PACKET ; .ASCII /090 / ; .ENDM ; ; ;* * * ; ; MANUAL INPUT ACTION CODE MACRO DEF ; ;* * * ; ; INDICATES TO DC THAT TRANSACTION ORIGINATED AS A MANUAL ENTRY ; .MACRO DCMANA ; .ASCII /.NC/ 01.27.73 .ENDM ; ; ; ;* * * ; ; END OF DAY ACTION CODE MACRO DEF ; ;* * * .MACRO EODACT ; .ASCII /.NB/ O INTERCEPT. ;*********************************************************************** FORMT1: MOV #TRM,FMFCL1 ;INIT TO "TRM" FILE CLR FMFCL6 ;1ST ACCESS FILEF FLSNT,,,#0,#0 ;READ IN TYPE I OF "TRM" MOVE TRMPAK ;SAVE IT MOV #MSGBUF+HDRACT+2,R0 ;ADDR OF 3RD A/C CHAR 01-29-73 CMPB (R0),#'A ;******** BEQ FMT.AA ;IS .AA CMPB B ERROR NOP ;CONTINUE IF NO ERROR EXIT SPECIFIED .IFF BR ERROR .ENDC .LIST COM .ENDM MOVE ;GENERATES THE "MOVE" PACKETS .MACRO PACK DEST,SRCE,COUNT,CD1,CD2,CD3,CD4,CD5,CD6 .NLIST .NLIST CND .LIST .IF NB DEST .WORD DEST .ENDC .IF NB SRCE .WORD SRCE .ENDC STRING FOR OP CODE 02: "LIST TERMINAL FACILITY" PACK MESG2,CFHDR1,HDRL,00 ;01-08-73 PACK MESG2+HDRTO,CFMORG,HDRLTO,00 ;BUILD HEADER ;01-08-73 PACK TXTID+TRMSKX,FILG1+TRMID ,7,00 PACK TXRTE+TRMSKX,FILG1+TRMRTE,5,00 PACK TXTMZ+TRMSKX,FILG1+TRMTMZ,1,14 .IF NE .GULF PACK TXSHN+TRMSKX,FILG1+TRMSHN,8.,00 PACK TXPMI+TRMSKX,FILG1+TRMPMI,3,00 .ENDC 01.27.73 .ENDM ;* * * ; .PAGE .SBTTL LOCAL EQUATES ; .TITLE EODRPT END OF DAY REPORT ; ; SYSTEM EQUATES ; ; TABLES ACCESSED ; ; GENERAL INFORMATION ; ; 1. ASSIGNED MESSAGE QUEUE - QUEODR ; 2. TASK NAME - TSEODR ; 3. TASK PRIORITY - PRIEOD ; .PAGE ; MACRO REFERENCES .MCALL HEADR,MSPLST,FLPLST,MESGM,FILGM,IOPAC,IODLST .MCALL TSKRUN,JEQ,JNE,FILEC .MCA (R0),#'B ;******** BEQ 12$ ;IS .AB JMP NTRCPT ;NEITHER: TO INTERCEPT 12$: DEC R0 ;BACK UP TO 1ST CHAR MOVB FMTACD+0+,(R0)+ ;NEW ACTION CODE MOVB FMTACD+1+,(R0)+ CLR FMIML6 ;1ST REQUEST FILEF MSAT,FMIML,,#0,#3 ;ATTACH .AB MSG BACK TO SYSTEM JMP FORMAT ;...AND PROCESS A NEW MSG IF A .WORD COUNT .IF B CD6 .IF B CD5 .IF B CD4 .IF B CD3 .IF B CD2 .WORD MVCD'CD1 .IFF .WORD MVCD'CD1!MVCD'CD2 .ENDC .IFF .WORD MVCD'CD1!MVCD'CD2!MVCD'CD3 .ENDC .IFF .WORD MVCD'CD1!MVCD'CD2!MVCD'CD3!MVCD'CD4 .ENDC .IFF .WORD MVCD'CD1!MVCD'CD2!MVCD'CD3!MVCD'CD4!MVCD'CD5 .ENDC .IFF .WORD MVCD PACK TXFLN+TRMSKX,FILG1+TRMFLN,3,14 .IF NE .GULF PACK TXCPX+TRMSKX,FILG1+TRMCPX,2,14 .ENDC PACK TXSHD+TRMSKX,FILG1+TRMSHD,25.,00 .IF NE .GULF PACK TXPLR+TRMSKX,FILG1+TRMPLR,7,00 .ENDC PACK TXFB1+TRMSKX,FILG1+TRMFB1,TRMFL,00 .IF NE .GULF PACK TXPLD+TRMSKX,FILG1+TRMPLD,7,00 .ENDC PACK TXFB2+TRMSKX,FILG1+TRMFB2,TRMFL,00 .IF NE .CLL DATEG,MOVEA,SERCH,QUEUE,CNXRTE ;01-23-73 .MCALL DCRTE,HUBRTE,STDID,INTID,TRMAC1 ;01-23-73 ; EXTERNAL DEFINITIONS .GLOBL MESG,MESGB,MESGL,MESGP,MESG1,MESG2,MESG3,MESG4 .GLOBL FILG,FILGB,FILGL,FILGP,FILG1,FILG2,FILG4,FILAT .GLOBL TASKNO,TSKNO ; ; EXTERNAL REFERENCES .GLOBL SYDST,SYDSK3,SYDTM3,SYDVST .GLOBL MOVEX,MOVEXA,MOVEXB,MOVA .GLOBL MSDT,MSAT,FLSNT,FLWR,CNVNY MORE .PAGE .SBTTL PROCESS A TYPE ".AA" ;*********************************************************************** ;DETERMINE TYPE OF TRANSACTION. ;JUMP TO PROPER ROUTINE. ;*********************************************************************** .ENABL LSB FMT.AA: ;THE ACTION CODE IS ".AA" MOVB MSGBUF+HDRL+ELACT,R0 ;TERMINAL ACTION CODE SUB #60,R0 ;MUST BE POS & NON-ZERO BGT 4$ FMT.AX: 'CD1!MVCD'CD2!MVCD'CD3!MVCD'CD4!MVCD'CD5!MVCD'CD6 .ENDC .NLIST .LIST CND .LIST .ENDM PACK .MACRO FILEF NAME,LST,TEMP,LCK,PAR,ERR1 .NCHR NCOUNT,LST ERR = ERR-4 .NLIST .LIST ME .LIST ERRNUM = ERRNUM+1 .NLIST ME,COM .IF B LST .IF B TEMP FILEC NAME,FLIST,R0,LCK,PAR,ERR1,SYSERR .IFF FILEC NAME,FLIST,TEMP,LCK,PAR,ERITGO PACK TXFB3+TRMSKX,FILG1+TRMFB3,TRMFL,00 .ENDC NUM = 0 .REPT 16. ;FILL LISTING WITH PRODUCT CODES PACK TXPPD++TRMSKX,FILG1+TRMPPD+,2,14 ;01-17-73 NUM = NUM+1 .ENDM NUM = 0 .REPT 16. ;FILL LISTING WITH GRAVITY GROUPS PACK TXGRV++TRMSKX,FILG1+TRMGRV+,1,14 ;01-17-73 NUM = NUM+1 .ENDM PACK EODTID+TRMSKX,FIRTX,CNVRTQ,SECHS,RTEST,OUT ; ;TASK PARAMETERS EXTIM = 80. PRI = 3 TSKNO = TSEODR FILEID = TSFLBS+TSEODR CSTAT = 200 STKSZ = 50. STRT2 = 0 START = EODRPT TSKFR = 205 TASKNO = TSKNO ; ; TASK EQUATES FLSL1 = 128. ; FLSL2 = 0 ; FLSL3 = 0 ; MSWL2 = 0 ; TSKLV = PRIEOD ; EODST = ;ERROR EXIT FOR ALL INVALID TERMINAL ACTION CODES 2$: ERR 4$: CMP R0,#MXTMAC ;MAX ALLOWED ACTION CODE BGT 2$ ASL R0 MOVB R0,ACTCOD ;SAVE A/C AS A WORD INDEX MOV JMPTB1(R0),PC ;TRANSFER TO PROPER ROUTINE JMPTB1: .WORD FMT.AX ; 0 = NULL MESSAGE .WORD FMTA00 ; 1 = AUTOMATIC TRANSACTION .WORD FMT.AX ; 2 = MANUAL TRANSACTION .WORD FMT.AX R1,SYSERR .ENDC .IFF .IF B TEMP .IF NE NCOUNT-1 FILEC NAME,LST,R0,LCK,PAR,ERR1,SYSERR .IFF FILEC NAME,LST'LIST,R0,LCK,PAR,ERR1,SYSERR .ENDC .IFF .IF NE NCOUNT-1 FILEC NAME,LST,TEMP,LCK,PAR,ERR1,SYSERR .IFF FILEC NAME,LST'LIST,TEMP,LCK,PAR,ERR1,SYSERR .ENDC .ENDC .ENDC .LIST COM .ENDM FILEF ; ****************LG1+TRMID ,7,00 PACK EODFLN+TRMSKX,FILG1+TRMFLN,3,14 PACK EODMIN+TRMSKX,FILG1+TRMEOD,2,14 PACK EODHOR+TRMSKX,FILG1+TRMEOD+1,2,14 PACK EODINP+TRMSKX,TMPW02,3,12 PACK EODOUT+TRMSKX,TMPW03,3,12 PACK EODMTH+TRMSKX,CFMONA,2,00 PACK EODATE+TRMSKX,CFDATA,2,00 PACK EODYER+TRMSKX,CFYERA,2,00 PACK EODCHR+TRMSKX,CFHORA,4,00 PACK EODDAY+TRMSKX,TMPW01,2,12 PACK EODJUL+TRMSKX,FI MESG2+HDRL ; START OF EOD TRANSACTION BUFPRI = 3 ;PRIORITY FOR "GETBUF" NMNTSZ = 63. ;# OF WORDS TO ZERO IN NULL MESSAGE NUMBER TABLE MNTTSZ = 64. ;# OF WORDS TO ZERO IN MESSAGE NUMBER TABLE EODFF = 4 ;# OF LINE FEEDS SURROUNDING E-O-D LISTING @ TRM EODMDY = 180. ;MAX # DAYS EOD ALLOWED TO BE POST-DATED BY TERM PAKEND = -1 ;END-OF-PACKET KEY .PAGE ;01-23- .WORD FMT.AX ; 4 = CONFIGURATION UPDATE .WORD FMT.AX .WORD FMT.AX .WORD FMT.AX .WORD FMTB00 ; 8 = AUDIT TRAIL TAPE TRANSACTION .DSABL LSB .PAGE ;*********************************************************************** ;PROCESS AUDIT TRAIL TAPE. ;*********************************************************************** FMTB00: ;AUDIT TRAIL: CHECK BCC, THEN PROCEED AS IN STD AUTO MOV M**************************************************** .MACRO ERR .NLIST .LIST ME .LIST ERRNUM = ERRNUM+1 .NLIST ME ERR = ERR-4 JMP ERR .ENDM ERR LG1+TRMEDM,3,12 ;01-17-73 .WORD EOMDAY EOMSRC: .WORD 0 ;SOURCE ADDR SET BY PROGRAM .BYTE 5,0 PAKEND ;*********************************************************************** PAKD01: ;CONTROLS MOVING OF OP-03 MSG TO TOP OF MSG BUFFER PACK MESG2+HDRL,EODMSG+TRMSKX,-1,00 ;TO "ETX" PAKEND ;*********************************************************************** .PAGE ; THE "PAKE--" SERIES BUILDS THE 73 ; THESE ARE THE TRANSFER-AND-CONVERT CODES USED BY "MOVE" .RADIX 2 MVCD00 = 00 ;ALL CHARACTERS ALLOWED MVCD01 = 01 ;NUMERICS ONLY MVCD02 = 10 ;ALPHA ONLY MVCD03 = 11 ;ALPHA & NUMERICS MVCD04 = 1000 ;THE 64 CHARS FROM 40-137 MVCD05 = 101 ;NUMERICS AND SPACES MVCD06 = 110 ;ALPHAS AND SPACES MVCD07 = 111 ;ALPHAS & NUMERICSSGETX,R1 ;INIT WITH PTR TO ETX CLR R2 BISB -(R1),R2 ;UPPER BYTE OF PSUEDO-BCC SWAB R2 ;GET IT UP THERE BISB -(R1),R2 ;...AND THE LOWER BYTE BIS #40100,R2 ;FORCED BITS (AVOIDS "ETX" DURING XMIT) MOV #MSGBUF,R0 CLR CRCRM ;"CRC" ACCUM 2$: MOVB (R0)+,R4 ;NEXT CHAR JSR PC,CRC16 ;GO COMPUTE CRC WITH NEW CGAR CMP R0,R1 P)+,R0 ; TO QUEUE TABLE MOV R0,EODW22 ; ADDR BPL 2$ ERR 2$: BIS #MSQF2,MSQIH(R0) ;INHIBIT INPUT FROM TERM BIS #1,EODW19 ;SHOW AT LEAST ONE TERM SERVICED CLR -(SP) ;INDEX FOR "OPEN FOLIO" JSR PC,EODS40 ;BUILD I.D. 20 MESSAGE W/PROPER OP-CODE MOV #.+4,EODW25 ;RTN ADDR FOR DELAY RTNE IF MSG AREA FULL CLR EODV10+MSPSVC ;SEND ; * * * * * LISTING OF THE ROUTING CODE TABLE PAKE01: ;BUILD HEADER AND TRANSFER FIRST TWO LINES ;01-08-73 PACK MESG2,CFHDR1,HDRL,00 ;01-08-73 PACK MESG2+HDRTO,CFMORG,HDRLTO,00 ;01-08-73 PACK MESG2+HDRL,RTELST,RTLSTL,00 ;01-08-73 PAKEND PAKE02: PACK RTENDX,TRMNDX,2,12 ;XFER TERMINAL INDEX TO SKELETON PAKEND PAKE03: .WORD RTECOD ;LOAD & SPACES MVCD10 = 10000000 ;ASCII-TO-BINARY (SINGLE) MVCD11 = 10000010 ;ASCII-TO-BINARY (DOUBLE) MVCD12 = 10000001 ;BINARY-TO-ASCII (SINGLE) MVCD13 = 10000011 ;BINARY-TO-ASCII (DOUBLE) MVCD14 = 10000101 ;BINARY-TO-ASCII (SINGLE: BYTE SOURCE) .RADIX 8 .PAGE ; END OF DAY MESSAGE EQUATES ; ;* * * ; ; EOD1 = 0 ; FORMAT ID (020) EOD2 = EOD1+3 ; TERMIN ;REACHED END? BLO 2$ CMP CRCRM,R2 ;DOES PSUEDO-BCC AGREE WITH CALC'N? BEQ FMTA00 ;IF SO,CONTINUE AS IN STD AUTOMATIC ERR ;BCC DID NOT CHECK .PAGE .SBTTL STANDARD AUTOMATIC TRANSACTION ;*********************************************************************** ;DISSECT RAW STANDARD AUTOMATIC TRANSACTION MESSAGE. ;CONVERT RAW INPUT DATA TO BINARY. ;***************************** * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#0,EODR10 ; OPEN FOLIO ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#3 ; TO DC ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * EODB26: FILEF FLWR,EODV20,R0,#SKELETON W/ROUTING CODE ;01-11-73 PKE3SR: .WORD 0 ;DYNAMIC SOURCE ;01-11-73 .BYTE RTEQNM,0 ;01-11-73 PAKEND PAKE04: PACK RTETID,FILG1+TRMID,7,00 ;TERM ID... PAKEND PAKE05: PACK 0,RTELN2,0,00 ;FILL MSG BUF UP TO FIRST EOR ;01-11-73 PAKEND ;*********************************************************************** PAKG01: ;XFR INVOICE DATA FROM INPAL ID EOD3 = EOD2+7 ; FOLIO NO. EOD4 = EOD3+3 ; OP CODE EOD5 = EOD4+2 ; JULIAN DAY EOD6 = EOD5+3 ; HOUR EOD7 = EOD6+2 ; MIN EOD8 = EOD7+2 ; LAST SEQ NUM EOD9 = EOD8+3 ; FIRST NULL SEQ.NO. EODL = EOD9 ; LENGTH OF OPEN & CLOSE TRANSACTIONS ; ; FIELD LENGTHS ; EOD1L = 3 ; SEE ABOVE EOD2L = 7 ; ******************************************* .ENABL LSB 1$: ERR ;CHARACTER TYPE ERROR IN DISSECTION FMTA00: ;STANDARD AUTOMATIC TRANSACTION MOVE AUTOPK,1$ ;DISSECT BODY OF TRANSACTION MOV #FMTMTR,R0 ;INIT "MOVE" DESTINATION MOVE MTRPAK,1$,A ;CONVERT METER FLOWS TO BINARY MOV #FMTTMP,R0 ;INIT DESTINATION MOVE TEMPAK,1$,A ;DO SAME FOR THE TEMPERATURES 0,#0 ;WRITE "TRM" BACK OUT ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * JMP EODB12 ; .PAGE ; ******************************************************************** ; BEGIN FIRST 30-SEC DELAY PERIOD ; ******************************************************************** ; EODB30: TST EODW19 ; ANY TERML NEED SERVICE? BNE EODB34 ;YES: START 30-SEC DELAY INC EODW32 ;SET FLAG TO EUT MESSAGE TO "TRM" (OP-20) PACK FILG1+TRMID ,INPLIN+C81TIO,C81TIL,00 .IF NE .GULF PACK FILG2+TRMPMI,INPLIN+C81MIO,C81MIL,00 PACK FILG2+TRMSHN,INPLIN+C81SCO,C81SCL,00 .ENDC PACK FILG2+TRMSHD,INPLIN+C81SDO,TRMSL,00 .IF NE .GULF PACK FILG2+TRMPRD,INPLIN+C81PRO,C81PRL,00 PACK FILG2+TRMPLD,INPLIN+C81PDO,C81PDL,00 .ENDC PAKEND ;******************************************* EOD3L = 3 ; EOD4L = 2 ; EOD5L = 3 ; EOD6L = 2 ; EOD7L = 2 ; EOD8L = 3 ; EOD9L = 3 ; ; ; .PAGE ; .SBTTL TASK HEADER HEADR TSKNO,TSKFR,START,EXTIM,STKSZ,TSKLV 01.31.73 .PAGE .SBTTL TASK ROOT ERR = EODE00 ;INIT ERROR "SLI .DSABL LSB .PAGE ;*********************************************************************** ; READ IN THE PROPER "MTR" TABLE CELL ;*********************************************************************** MOV C.SPTB,R1 ;SPOT (AREA) NUMBER MOV R1,R2 CLR FMFCL6 ;1ST ACCESS MOV #MTR,FMFCL1 8$: FILEF FLSNT,,,#2,#0 ;READ IN A SECTOR OF "MTR" TABLE SUB #MTRSEC,R1 ;AREAS PER SECTOR IN MTR TAB XIT ON EMPTY QUEUE AFTER RE-SCAN JMP EODA00 ;LOOK FOR ANY MORE MESSAGES BEFORE EXITING EODB34: DEBUG 10 MOV #1,SYDST+SYDED1 ;FLAG TO RESTART AT [EODC00] EODB40: MOVEA EODX30,SYDTM3,EODX32-EODX30 ;TIMER MODULE IMAGE TO BUF;01-23-73 .WORD EODX30 ; TIMER .WORD SYDTM3 ; MODULE .WORD EODX32-EODX30 ; TO BUFFER 8$: MOV #SYDTM3,-(SP) ; QUEUE **************************** PAKH01: ;CONVERTS INPUT DATA FOR MASK FORMAT #83 TO BINARY PACK TMPW01,INPLIN+C83.AO,C83.AL,10 PACK TMPW02,INPLIN+C83.BO,C83.BL,10 PACK TMPW03,INPLIN+C83.CO,C83.CL,10 PACK TMPW04,INPLIN+C83.DO,C83.DL,10 PACK TMPW05,INPLIN+C83.EO,C83.EL,10 PAKEND PAKH02: ;FOR OP-25 ONLY PACK TMPW06,INPLIN+C83.FO,C83.FL,10 PACK TMPW07,INPLIN+C83.GO,C83.GL,10 PACK TMPW08DE" TARGET ERRNUM = 0 ;ERROR NUMBER SIGNAL AND ERROR "SLIDE" LENGTH CONTROL ; ******************************************************************** ; CHECK SYSTEM IDLE ; RE-QUEUE SCHEDULER MODULE, IF NEEDED. ; ******************************************************************** EODRPT: ; ENTRY ; DEBUG 1 CLR ERRORX ;INIT ERROR NUMBER CELL FOR ERROR "SLIDE" BITB #SYDF2,SYDST+SYDIDL ;IS THE SYSTEM IDLE? * BLE 10$ ;THE RIGHT ONE IS IN MOVB #2,FMFCL3 ;SET TO READ IN A TYPE II BR 8$ 10$: MUL #40.,R1 ;BYTE OFFSET (0,-40, OR -80) ADD #FILG1+80.,R1 ;ADDR OF METER DATA IN TYPE I AREA ******** CMP R2,#3 ;IS IT TYPE I? BLE FMTA10 ;YES ADD #FILG2-FILG1,R1 ;ADDR OF METER DATA IN TYPE II AREA .PAGE ;**************************************************** ;01-23-73 MOV #30.,-(SP) ; TIMER MODULE EMT QTIME ; FOR TST (SP)+ ; 30 SEC DELAY BNE 10$ ;TIMER WAS NOT QUEUED (VERY,VERY RARE) EMT EXIT ;LEAVE NOW---COME BACK AGAIN 30 SECS FROM NOW 10$: MOV #40000,R0 ;LOOP FOR ABOUT 17MS UNTIL NEXT BEAT... SOB R0,. ;...OF CLOCK, SO LIST CAN EMPTY BR 8$,INPLIN+C83.HO,C83.HL,10 PACK TMPW09,INPLIN+C83.JO,C83.JL,10 PAKEND ;*********************************************************************** PAKI01: ;CONVERTS INPUT DATA FOR OP CODE 22 PACK TMPW01,INPLIN+C82.AO,C82.AL,10 ;E-O-M DAY PACK TMPW02,INPLIN+C82.BO,C82.BL,10 ;E-O-D DATE PACK TMPW03,INPLIN+C82TMO,2,10 ;E-O-D HOURS PACK TMPW04,INPLIN+C82TMO+2,2,10 ;E-O-D MINS PAKEND ;********************* 01.27.73 BEQ 2$ ;NO MOV #SYDSK3,-(SP) ;YES: DE-QUEUE SCHEDULER MODULE EMT DQSKED TST (SP)+ ;POP OFF THE ERROR FLAG 01.27.73 JMP EODXIT ;...AND GET OUT UNTIL RE-CALLED BY RECOV ; 2$: TSKRUN EODXIT ; QUIT IF NOT ALLOWED TO RUN EMT GTIME ; GET MOV (SP)+,EODW10 ; THE MOV (SP)+,EODW11 ; TIME TST (SP)+ ******************* ; INCR NOISY METER FLAGS; ZERO OUT THESE FLOWS IN "FMTMTR". ; LIMIT-CHECK THE TEMPERATURES. ; REJECT MESSAGE IF MORE THAN ONE TYPE OF METER USE REPORTED. ;ENTRIES IN "FMTMTR" ARE TWO-WORD BINARY , WITH THE HIGH-ORDER 01-31-73 ;WORD IN THE LOWER ADDRESS. 01-31-73 ;*********************************************************************** FMTA10: MOV R1,MTRPTR ;SAVE POINTER TO METER ;TRY AGAIN .PAGE .SBTTL PHASE #2 ; ******************************************************************** ; CHECK EACH TERMINAL FOR EOD/EOM SERVICING ; ******************************************************************** EODC90: MOV #2,SYDST+SYDED1 ;INIT "COMMON" FLAG TO RESTART AFTER ;THE SECOND 30-SEC DELAY JMP EODB40 ;SET DELAY FOR 30 SECS & EXIT EODC00: ;WAKE UP HERE AFTE************************************************** PAKJ01: ;CONVERT INPUT FOLIO # TO BINARY FOR OP 23 PACK TMPW01,INPLIN+C82.AO,C82.AL+C82.BL,10 ;01-14-73 PAKEND PAKJ02: ;BUILDS "OPEN FOLIO" MESSAGE FOR OP CODE 23 PACK FOLTID,FILG1+TRMID,FOLNUM-FOLTID,00 PACK FOLNUM,INPLIN+C82.AO,C82.AL+C82.BL,00 PACK FOLDAT,CFJULA,3,00 PACK FOLHR,CFHORA,4,00 ;XFRS BOTH HRS AND MINS .WORD FOLLMN ; OF DAY MOVB EODW10,EODW12+1 ; COMBINE MOVB EODW11,EODW12 ; HOUR AND MINUTE DATEG EODW15 ;FETCH AND STORE CURRENT DATE INFO MOV #365.,EODW24 ;#DAYS THIS YEAR BICB #1,EODCAL+1 ;RESET FEB BIT #3,EODW15 ;LEAP? BNE EODRP7 ;BRANCH IF THIS ISN'T A LEAP YEAR 01.27.73 BISB #1,EODCAL+1 ;YES - MAKE FEB = 29... INC EODW24 DATA IN FILE W/A CLRB ZFLAG .IF NE TRMUSE ;ONLY IF "TRM" CAN SHOW AREA USE TYPE. CLRB 8$ ;OPEN THE MULTI- CLRB 16$ ; USE SWITCHES ASL R2 ;SPOT # AS WORD INDEX MOVB FMTPTA+TRMATP-2(R2),R2 ;AREA TYPE # FROM FACILITY TABL MOVB R2,USE ;SAVE IT CMP R2,#MUTYPN ;MULTI-USE TYPE # BNE 2$ INCB 8$ ;CLOSR FIRST 30-SEC DELAY DEBUG 20 MOV #RTEST-RTEL,R4 ; GET ADDR OF ROUTING TABLE EODC10: DEBUG 40 ADD #RTEL,R4 ; ADVANCE POINTER MOV RTEID(R4),R0 ; 1ST 2 BYTES OF ROUTE CODE BEQ EODC10 ; NULL ENTRY- GET NEXT CMP #-1,R0 ; END OF TABLE? BEQ EODC90 ;YES MOV R4,-(SP) JSR PC,CNVRTX ;GET TER ;LAST MESSAGE NUMBER PAKJ2S: .WORD 0 .BYTE HDRLSE ;01-14-73 .BYTE 12 ;BINARY-TO-ASCII FOR LAST MESSAGE # ;01-14-73 PACK MESG2,FOLIOM,-1,00 ;01-08-73 PAKEND ;*********************************************************************** PAKK01: ;CONVERTS INPUT DATA PARAMETERS FOR OP-24 PACK TMPW01,INPLIN+C83.AO,C83.AL,10 PACK ;...AND TOTAL DAYS = 366 ; 01.27.73 EODRP7: 01.27.73 TSTB SYDSK3+2 ;SEE IF THE SCHEDULER MODULE IS QUEUED 01.27.73 BNE EODRP9 ;BRANCH IF IT IS 01.27.73 MOV EODW11,R1 ;CURRENT MINUTE CLR R0 ADD #14.,R1 ;WE WANT TO ADVANCE TO THE NEXT 15 MINTS01.31.73E THE MULTI- INCB 16$ ; USE SWITCHES .ENDC CLRB USE ;MULTI: RESET USE UNITL FOUND IN MTR TAB 2$: MOV #FMTMTR,R3 ;POINTER TO BEGIN OF BINARY FLOWS 01-31-73 MOV #MXMTRS,R4 ;COUNT 01-31-73 4$: TST (R3)+ ;HI-ORDER OF FLOW ZERO? 01-31-73 BNE 13$ ;NO: NO NEED FOR FURTHER NOISE CHECK 01-31-73 6$: TSTM'S RTE INDEX MOV (SP)+,EODW13 CLR EODV30+FLPSVC ;GET NULL MESSAGE TABLE... MOV #NMN,EODV30+FLPNAM ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLSNT,EODV30,R0,#2,#0 ;...IN CASE WE NEED IT ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * MOVEA FILGL,EODX60,FILAT-FILGL;SAVE NMNT TO MAKE ROOM FOR TRM CLR EODV20+FLPSVC ; GET ; * * * * * * * * * * * * * TMPW02,INPLIN+C83.BO,C83.BL,10 PACK TMPW03,INPLIN+C83.CO,C83.CL,10 PACK TMPW04,INPLIN+C83.DO,C83.DL,10 PACK TMPW05,INPLIN+C83.EO,C83.EL,10 PAKEND ;*********************************************************************** PAKM01: ;CONVERTS TIME ZONE INPUT PARAMS TO BINARY FOR OP-26 PACK TMPW01,INPLIN+C83.AO,C83.AL,10 PACK TMPW02,INPLIN+C83.BO,C83.BL,10 PAKEND ;******************************************************* DIV #15.,R0 CMP R1,#13. ;SEE IF WE ARE WITHIN ONE MINUTE OF 01.27.73 BNE 1$ ;THE 15-MINUTE MARK. BRANCH IF NO. 01.27.73 INC R0 ;OTHERWISE, ADVANCE TO THE NEXT 01.27.73 ;15-MINUTE MARK (EODRPT EXECUTES ON 01.27.73 ;QUARTER HOUR BOUNDARIES) 01.27.73 ; (R3)+ ;LO-ORDER ZERO? 01-31-73 BEQ 12$ ;TRUE ZERO 01-31-73 BEQ 12$ ;TRUE ZERO BMI 14$ ;ABOVE NOISE LEVEL .IF NE TRMUSE 8$: BR .+2 ;SWITCH BR 10$ ;MULTI-USE .ENDC MOVB MTRTY(R1),R2 ;AREA TYPE (WHEN MULTI-USE) 10$: ASL R2 ;MAKE USE # A WORD INDEX CMP* * * * * * * * * * * * * * * * * * * * FILEF FLSNT,EODV20,R0,#0,#0 ; TABLE (TRM) ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TSTB FILG1+TRMAED ; EOD FLAG SET BEQ EODC10 ; NO - GET NEXT .PAGE ; ******************************************************************** ; REPORT NULL MESSAGES ; ******************************************************************** EODC14: **************** ;LNTH OF CONTIGUOUS XFER CONTROLLED BY # OF LINES & LENGTH OF EACH LINE PAKN01: ;TRANSFERS ALPH-NUM INFO TO "TRM" IMAGE FOR OP-27 PACK FILG2+TRMFB1,INPLIN+C84L1O,TRMRLN*TRMFL,00 PAKEND ;*********************************************************************** .PAGE .SBTTL MESSAGE SKELETONS ;THE FORMATS OF LISTINGS ARE DETERMINED BY ASSEMBLY OF THE BLANK ;SKELETONS - WHICH ARE NOT CONTROLLED BY EQUATES - AND THEREFORE MUST BE ;RE-01.27.73 1$: 01.27.73 MUL #15.,R0 ;GET THE NEXT QUARTER HOUR MARK 01.31.73 MOV R1,-(SP) ;PUSH MINUTES ONTO THE STACK 01.27.73 MOV EODW10,-(SP) ;THEN HOURS 01.27.73 MOV EODW16,-(SP) ;AND THEN DAYS 01.31.73 JSR PC,ADJUST ;NOW, NOW GO ADJUST THE TIME/DATE 01.27.73 -(R3),LOLIM-2(R2) ;LOW FLOW LIMIT FOR THIS TYPE AREA 01-31-73 BGE 13$ ;ABOVE NOISE LEVEL 01-31-73 INCB MTRNS(R1) ;FLAG & COUNT IN MTR TAB FOR NOISE REPRT01-31-73 CLR (R3)+ ;CLEAR OUT NOISE 01-31-73 12$: CMP (R1)+,(R1)+ ;NEXT HIGHER METER TABLE ENTRY 01-31-73 SOB R4,4$ ;BACK IF MORE TSTB ZFLAG ;ANY FLOWS FOUND? B ;HERE TO CHECK FOR ANY NULL MESSAGES & REPORT THEM MOV #6,-(SP) ;INDEX FOR NULL MSG # REPORT JSR PC,EODS40 ;BUILD I.D. 20 MESSAGE W/PROPER OP-CODE ;LEAVES R0 POINTING TO NEXT CHAR IN OUTPUT MESSAGE STRING. MOV #EODX60+FILG1-FILGL,R5 ;PNTR TO NULL MSG TABLE IMAGE MOV #NMNTSZ,R1 ;# WORDS TO SCAN MOV #1,R2 ;INIT NEXT MSG # 2$: MOV (R5),R3 ;NEXT WORD OF 16 MSG #'S BEQ 8$ ASSEMBLED IN ORDER TO BE ALTERED. ;THE PACKET STRINGS CONTROLLING THE FILLING OF THE SKELETONS HAVE THE ;FIELD SIZES HARD-CODED FOR THIS REASON, AND THEY, TOO, MUST ALSO BE ;RE-ASSEMBLED WHEN A FORMAT CHANGE AFFECTS FIELD SIZES. TRMSKL: ;THIS IS THE BLANK SKELETON FOR THE LISTING OF THE ;TERMINAL DESCRIPTOR DATA (OP-02) .ASCII " *** TERMINAL FACILITY DATA ***" .ASCII "TERMINAL ID = " TXTID: .ASCII " RO ;(BY ADVANCING THE TIME FORWARD BY 01.27.73 ;15 MINUTES, IT IS POSSIBLE THAT THE 01.27.73 ;MINUTES EXCEED 60). 01.27.73 MOV (SP)+,EODX51 ;THIS WORD RETURNED BY 'ADJUST' CONTAINS01.27.73 ;THE DAY/HOUR/MINUTE IN QSKED FORMAT. 01.27.73 ;STORE IT IN THE SCHEDULER MODULE 01.27.73 ADD #6,SP NE 20$ ;NEED AT LEAST ONE ERR 13$: TST (R3)+ ;BUMP POINTER TO KEEP IN STEP 01-31-73 14$: INCB ZFLAG ;SHOW AT LEAST ONE FLOW FOUND .IF NE TRMUSE 16$: BR .+2 BR 12$ ;CONTINYUH IF NOT MULTI-USE .ENDC TSTB USE ;USE BEEN ESTABLISHED YET? BEQ 18$ ;NO CMPB MTRTY(R1),USE ;THIS METER AGREE? BEQ 12$ ;YES CLR (R5) ;RESET FOR WRITE-BACK MOV #16.,R4 ;WILL SCAN 16 BITS 4$: ASR R3 BCC 6$ ;NO NULL FOR THIS # MOV R2,EODW25 ;STORE BINARY OF THIS NULL MSG # MOVE EODP14,,A ;NMN TO ASCII & ATTACH TO MSG INC EODW26 ;BUMP MSG COUNT CMP EODW26,#100. ;MESSAGE CAN HOLD MAX 100 NUMBERS BEQ 12$ ;GO SEND IT NOW AND THEN COME BACK TO 6$ 6$: INC R2 UTE CODE = " TXRTE: .ASCII " DST = " TXDST: .ASCII " ZONE = " TXTMZ: .ASCII " ""SHIP NO = " .IF EQ .GULF ;01-09-73 .ASCII " " ;01-09-73 .ENDC ;01-09-73 TXSHN: .ASCII " INITIALS = " .IF EQ .GULF ;01-09-73 ;POP OFF OTHER RETURNED ARGUMENTS 01.27.73 MOVEA EODX50,SYDSK3,8.;TRANSFER THE MODULE TO COMMON 01.27.73 MOV #5,R5 ;SET UP MAXIMUM DELAY LOOP COUNTER 01.27.73 ; 01.27.73 EODRP8: MOV #SYDSK3,-(SP) EMT QSKED ;QUEUE THAT MUTHA TST (SP)+ ;ERROR? BEQ EODRP9 ;NO JSR PC,EODS20 ;SCHEDULER ERROR - M ERR ;THIS METER'S USE # IS NOT = ALREADY-ESTABLISHED USE 18$: MOVB MTRTY(R1),USE ;ESTABLISH USE W/1ST REPORTED FLOW BR 12$ 01-31-73 20$: FILEF FLWR,,,#0 ;WRITE "MTR" FILE BACK OUT FMTA20: ;CHECK BINARY TEMPERATURES AGAINST LIMITS MOV #MXTMPS,R0 MOV #FMTTMP,R1 2$: CMP (R1),#LOTEMP BGE 6$ ;ABOVE LOW LIMIT 4$: ;NEXT MSG # SOB R4,4$ BR 10$ ;DONE W/WORD 8$: ADD #16.,R2 ;SKIP ENTIRE WORD... 10$: TST (R5)+ ;BUMP TO NEXT ENTRY SOB R1,2$ ;...AND GET NEXT WORD TST EODW26 ;ANY NUMBERS TO REPORT IN THIS MESSAGE? BEQ EODC20 ;NO - SKIP SENDING ANY MORE NULL MESSAGE REPORTS 12$: CLR EODW26 ;RESET COUNT AND GET THE MESSAGE OFF MOVB #ETX,(R0)+ ;TIE O.ASCII " " ;01-09-73 .ENDC ;01-09-73 TXPMI: .ASCII " FOLIO = " TXFLN: .ASCII " " .IF NE .GULF .ASCII " COMPLEX = " TXCPX: .ASCII " " .ENDC .ASCII "SHIP DESCRIP = " .IF NE .GULF TXSHD: .ASCII " PIPE RECEIPT = " .ENDC .IF NE .CITGO AY BE IT IS BUSY 01.27.73 ;USE EODS20 TO DELAY ONE SECOND 01.27.73 SOB R5,EODRP8 ;THEN LOOP BACK A MAXIMUM OF 5 TIMES 01.27.73 DEBUG ;THEN GIVE UP 01.27.73 BR EODRP8 ;...AND TRY AGAIN ; ******************************************************************** ; DETERMINE PROGRAM PHASE & JUMP TO PROPER SECTION ; ******************************************** ERR ;OUTSIDE LIMITS 6$: CMP (R1)+,#HITEMP BGT 4$ ;ABOVE HIGH LIMIT SOB R0,2$ .PAGE ; ******************************************************************** ;THE "FMTCUM" TABLE IS FIRST CONSTRUCTED, ASSOCIATING DATA FROM ;THE "FMTMTR" TABLE OF BINARY FLOWS, THE "FMTTMP" TABLE OF ;BINARY TEMPERATURES, AND THE "MTR" TABLE, WHICH PROVIDES THE ;TEMPERATURE PROBE # CROSS-REFERENCE AND PRODFF MESSAGE MOV #.+4,EODW25 ;RTN ADDR FOR DELAY RTNE IF MSG AREA FULL CLR EODV10+MSPSVC ;SEND ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#0,EODR10 ; NULL MESSAGE NUMBER ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#3 ; MESSAGE TO D/C ; TXSHD: .ASCII " " .ENDC TXPLR: .ASCII " ""FREIGHT ADDR = " .IF NE .GULF TXFB1: .ASCII " PIPE DISPOSL = " .ENDC .IF NE .CITGO TXFB1: .ASCII " " .ENDC .IF NE .GULF TXPLD: .ASCII " "" " .ENDC .IF NE .GULF TXFB2: .ASCII " ************************ EODRP9: ;CALC INDEX TO PROGRAM SECTION AND JUMP TO IT CLR EODW32 ;OPEN THE EXIT SHUNT @ EODA90 MOV SYDST+SYDED1,R0 ;COMMON AREA INDEX TO LOCAL ENTRY POINTS ASL R0 MOV EODJP1(R0),PC ;TRANSFER TO PROPER ENTRY POINT EODJP1: ;ENTRY-POINT JUMP TABLE EODA00 ;INITIAL START ENTRY POINT EODC00 ;ENTRY POINT AFTER 1ST 30 SECOND DELAY EODD00 ;ENTRY POINT AFTER 2UCT CODE FOR EACH ;METER. AFTER THIS TABLE IS CONSTRUCTED, ANOTHER TABLE CALLED ;"FMTOTL" WILL BE MADE TO TOTAL AND ORDER THE ENTRIES. SEE BELOW ; ******************************************************************** ; LAYOUT OF THE "FMTCUM" TABLE: ;WORD 1: PRODUCT I.D. ;WORD 2: FLOW TOTAL FOR THIS PRODUCT (HI ORDER) ;WORD 3: FLOW TOTAL FOR THIS PRODUCT (LO ORDER) ;WORD 4: T* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * MOV #6,-(SP) ;INDEX FOR NULL MESSAGE REPORT JSR PC,EODS40 ;BUILD I.D. 20 MESSAGE W/PROPER OP-CODE TST R1 ;IS LOOP STILL UNSATISFIED? BNE 6$ ;YEAH .PAGE ; ******************************************************************** ; SEND "CLOSE FOLIO" MESSAGE TO DATACENTER ; ******************************************************************** ""PROD" .ENDC .IF NE .CITGO TXFB2: .ASCII " " TXFB3: .ASCII " ""PROD" .ENDC .ASCII " ID " TXPPD: .ASCII " " .ASCII " ""GRAV""GRP " TXGRV: .ASCII " " .ASCII " "" ND 30 SECOND DELAY .PAGE .SBTTL PHASE #1 ; ******************************************************************** ; INPUT A MESSAGE FROM THE MESSAGE QUEUE. ; IF A "TANK GAUGE", PROCESS IT. ; IF SOMETHING ELSE, SEND IT TO INTERCEPT. ; IF NO MESSAGE THERE, GO TO CONDITIONAL EXIT PROCESSING ; ******************************************************************** EODA00: ;INPUT A MESSAGE, IF ANY WAITING. ; WHEN QUEUE IS EMPTY, PROCEED TO EMP ASSOCIATED WITH LOWEST # METER ; FLOWING THIS PRODUCT ON THIS TRANSACTION ;ALL DATA IS IN BINARY FMTA30: MOV #FMTMTR,R0 ;D/P BINARY FLOW TABLE MOV #FMTCUM,R1 ;BLOCKED ACCUMULATE TABLE MOV MTRPTR,R2 ;BGN OF METER DESCRIPTORS MOV #MXMTRS,R3 ;LOOP ONCE PER METER 2$: MOVB MTRPD(R2),(R1)+ ;PRODUCT NUMBER 01-31-73 CLRB (R1)+ MEODC20: MOV #4,-(SP) ;INDEX FOR "CLOSE DAILY FOLIO" MESSAGE BITB #2,FILG1+TRMAED ;IS E-O-M REQUIRED? BEQ 2$ MOV #2,(SP) ;YES: SET FOR "CLOSE MONTHLY FOLIO" 2$: JSR PC,EODS40 ;BUILD I.D. 20 MESSAGE W/PROPER OP-CODE MOV #.+4,EODW25 ;RTN ADDR FOR DELAY RTNE IF MSG AREA FULL CLR EODV10+MSPSVC ;SEND ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *** " ;01-09-73 .ASCII "METER ASSIGNMENTS: PRODUCT-USE-PROBE # ***" .ASCII "MTR SPOT #1 SPOT #2 SPOT #3 SPOT #4 SPOT #5 SPOT #6";01-09-73 .ASCII " SPOT #7 SPOT #8 ""NO " ;01-09-73 .REPT 8. .ASCII "PD U PB " ;01-09-73 .ENDM .ASCII NUM = 1 M1S1A = .+2 ;START OF METER ASSIGNMENT TABLE SECTION "B" ;UNLESS THIS IS THE FINAL MESSAGE QUEUE CHECK AT END OF SECTION "B", ;IN WHICH CASE WE WILL EXIT IF THE QUEUE IS EMPTY. CLR MSPSVC+EODV10 ; INIT FOR FIRST CALL ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSDT,EODV10,R0,#0,#0,EODA90; GET A MESSAGE ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * CLR EODW32 ;RESET TO FORCE SCAN OF ALL TERMINALS ;(SHUNT IS CLOSED AT END OF PHASE #1 IF NOOV (R0)+,(R1)+ ;MOVE IN FLOWS (HI ORDER) MOV (R0)+,(R1)+ ;(LO ORDER) MOVB MTRRT(R2),R4 ;PROBE # ASL R4 ;WORD INDEX MOV FMTTMP-2(R4),(R1)+ ;MOVE IN TEMPERATURE CMP (R2)+,(R2)+ ;SKIP TO NEXT ENTRY IN "MTR" TABLE 01-31-73 SOB R3,2$ ; ******************************************************************** ;THE "FMTCUM" TABLE IS COMPLETE. NOW CREATE THE "FMTOTL" TABLE  FILEF MSAT,EODV10,R0,#0,#0,EODR10 ; CLOSE FOLIO ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#3 ; MESSAGE TO D/C ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * .PAGE ; ******************************************************************** ; UPDATE EOD/EOM DATES IN "TRM" ; ********************** .REPT 10. .IF NE NUM-10. .ASCII " " .ENDC .ASCII " " .ASCII " " NUM = NUM+1 .ENDM .PAGE EODMSG: ;SKELETON FOR END-OF-DAY MESSAGE .REPT EODFF .ASCII .ENDM .ASCII " *** TERMINAL SUMMARY ***" .ASCII " DAT TERMINALS REQUIRED SERVICE.) MOV #MESG2+HDRL,R1 ; IS THIS 01.27.73 SERCH EODX10,SXT1L,SXT1L ; A FORMAT TST R1 ; 090? BNE EODA50 ;BRANCH IF WE FOUND AN 090 FORMAT 01.27.73 ; .PAGE ; ******************************************************************** ; SEND MESSAGE TO INTERCEPT (IT DIDN'T BELONG IN OUR QUEUE) ; ************************************** ;OF ORDERED AND ACCUMULATED FLOW TOTALS. EACH ENTRY IN THIS ;TABLE LOOKS JUST LIKE THE ENTRIES IN "FMTCUM". IN "FMTOTL", ;HOWEVER, THE ORDER OF THE FOUR-WORD BLOCKS IS ACCORDING TO ;THE PRODUCT I.D. WORD, BEGINNING AT THE LOWEST ADDRESS OF THE ;TABLE WITH THE LOWEST I.D. IN "FMTCUM" THERE MAY BE MULTIPLE ;ENTRIES FOR A GIVEN I.D. IN "FMTOTL", THERE IS ONLY ONE ENTRY ;FOR EACH UNIQUE I.D. FLOWS REPORTED FROM DIFFERENT METERS ;FOR ********************************************** ;NOW ADVANCE EOD & EOM JULIAN DATES IN "TRM". BUMP "TRMEDM" BY 1 ONLY ;IF EOD WAS JUST SCHEDULED (THAT IS, ONLY IS "TRMAED" HAS BIT #1 SET). ;THIS AVOIDS BUMPING A POST-DATED EOD. THE EOM DATE "TRMEMM" ;WILL BE RECALCULATED ONLY IF "TRMAED" HAS BIT #2 SET, INDICATING THAT ;AN EOM MESSAGE WENT OUT. TIMES AND DATES ARE ALWAYS KEPT IN TERM'S ZONE ;THEY ARE CONVERTED TO HUB TIME WHEN MAKING COMPARISONS EODC30: BITB #1,FILG1+TRMAED ;WAS TE = " EODMTH: .ASCII " -" EODATE: .ASCII " -" EODYER: .ASCII " TIME = " EODCHR: .ASCII " " EODCMN: .ASCII " ""TERM ID = " .PAGE EODTID: .ASCII " FOLIO = " EODFLN: .ASCII " INPUT NO = " EODINP: .ASCII " OUTPUT NO = " EODOUT: .ASCII " ""EOD DAY = " EODDAY: .ASCII " EOD(JULN) = " .PAGE EODJUL: .ASCII " EOD TIME = " EODHOR: .ASCII " " EODMIN: .ASCII " EOM DAY = " EOMDAY****************************** ; EODA20: MOVEA EODX11,MESG2+HDRID,HDRLID ; SET HEADER ID ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#0 ; ATTACH TO QUE ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * BR EODA00 ;BACK FOR ANY MORE ; .PAGE ; ******************************************************************** ; PROCESS TANK GAUGE TRANSACTION ; SET EOD-REQUTHE SAME PRODUCT ARE ACCUMULATED HERE IN THAT PRODUCT'S ;ENTRY. THE TEMPERATURE STORED IS THAT ASSOCIATED WITH THE 01-31-73 ;LOWEST NUMBERED METER REPORTING THAT PRODUCT. 01-31-73 ; ******************************************************************** MOV #FMTOTL,R0 MOV #MXMTRS*4,R1 4$: CLR (R0)+ ;CLEAR OUT TABLE SOB R1,4$ MOV #FMTCUM,R0 CLRB NPRODS MOV #FMTOTL,R1 HIS EOD? BEQ 4$ ;NO: JUST EOM MOV EODW15,EODW31 ;INIT EOD YEAR W/CURRENT YEAR MOV EODW18,R1 ;TODAY INC R1 ;BUMP TO TOMORROW FOR NEW EOD DATE CMP R1,EODW24 ;NEW YEAR ROLL-OVER? BLE 2$ MOV #1,R1 INC EODW31 ;SHOW NEXT YEAR IN PRINTOUT 2$: MOV R1,FILG1+TRMEDM ;RESTORE UPDATED EOD JULIAN 4$: BITB #2,FILG1+TRMAED ;WAS THIS ALSO EOM? BEQ : .ASCII " " .REPT EODFF .ASCII .ENDM .ASCII EODEND = . TXTEND = . .PAGE FOLIOM: ;SKELETON FOR "OPEN FOLIO" MESSAGE STDID ;01-08-73 HUBRTE ;01-08-73 DCRTE ;01-08-73 .ASCII "000 0 " IRED FLAG, IF WITHIN ONE HOUR OF EOD ; ******************************************************************** ; EODA50: CLR FLPSVC+EODV20 ; INIT ;THE FOLLOWING CODE CONVERTS THE ROUTING01.27.73 ;CODE OF THE SENDER TO A BINARY INDEX 01.27.73 CNXRTE MESG2+HDRFR,EODW13,EODA20 ; GET LOCATOR FROM TRML RTE ;GO TO EODA20 IF THE INDEX IS NOT USEFUL01.27.73 ; * * * *  6$: MOV #FMTOTL,R2 8$: TST (R2) ;CURRENT I.D. IN TABLE BEQ 12$ ;VIRGIN SPOT: FILL NOW CMP (R0),(R2) ;FILLED: IS IT SAME? BLT 16$ ;LOWER: MOVE ALL HIGHER ENTRIES UP BGT 20$ ;GREATER: KEEP LOOKING UNTIL =, <, OR 0 CMP (R0)+,(R0)+ ;SKIP TO LO ORDER OF FLOW CMP (R2)+,(R2)+ ;...AND POINT TO LO ORDER FOR TOTAL ADD (R0),(R2) ;ACCUMULATE  EODC30 ;BYPASS EOM UPDATE MOV EODW17,R1 ;CURRENT MONTH INC R1 ;NEXT MONTH CMP R1,#12. BLE 6$ ;NO MOV #1,R2 ;INIT TO JAN 1 CMPB #1,FILG1+TRMEOM ;FIRST OF MONTH? BEQ 10$ ;YEAH: LEAVE IT MOV #31.,R2 ;INIT TO JAN 31 BR 10$ 6$: CMPB #1,FILG1+TRMEOM ;FIRST OF MONTH? BNE 8$ ;NO: MUST  ;01-08-73 FOLACT ;01-08-73 .BYTE EOR .ASCII "020" FOLTID: .ASCII " " FOLNUM: .ASCII " 01" FOLDAT: .ASCII " " FOLHR: .ASCII " " FOLMIN: .ASCII " " ;01-14-73 FOLLMN: .ASCII " " ;LAST MESSAGE NUMBER ;01-14-73 CFOKMS: ;TEXT OF "O.K." MESSAGE TO HUB .ASCII "CONFIG CODE * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLSNT,EODV20,R0,#2,#0,EODA20 ; GET TRM FILE ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * MOV FILG1+TRMEDM,R0 ;GET TERMINAL'S JULIAN DATE FOR THE EOD 01.31.73 JSR PC,EODS30 ;CONVERT IT TO LOCAL HUB TIME 01.27.73 ;RETURN FROM EODS30 WITH: 01.27.73 ; R0 = JULIAN DAY FOR EOD  LO ORDER ADC -(R2) ;CARRY TO HIGH ADD -(R0),(R2) ;ACCUM HI ORDER ADD #6,R0 ;SKIP TO NEXT PRODUCT I.D. 10$: CMP R0,#FMTCUM+ ;REACHED END OF INPUT TAB? BLO 6$ ;NOT YET BR FMTA40 12$: ADD #8.,R1 ;BUMP PTR TO NEXT VIRGIN SPOT 14$: .REPT 4 ;NEW BLOCK TO "TOTALS" TABLE MOV (R0)+,(R2)+ .ENDM INCB NPRODS ;ANBUMP BY # DAYS NEXT MONTH DEC R1 ;YES: USE #DAYS THIS MONTH 8$: MOVB EODCAL-1(R1),R2 ;# DAYS THIS/NEXT MONTH ADD FILG1+TRMEMM,R2 ;BUMP 10$: MOV R2,FILG1+TRMEMM ;RESTORE NEW EOM JULIAN .PAGE ; ******************************************************************** ; PREPARE DATA FOR TERMINAL'S EOD MESSAGE ; ******************************************************************** ;CONVERT HUB TIME & DATE TO TERM TIME & DATE ;I#" ;01-16-73 CFCODE: .ASCII " ; RTE:" ;01-19-73 CFUPRC: .BLKB HDRLFR ;TARGET TERMINAL'S ROUTE CODE ;01-16-73 .ASCII "; FROM:" ;01-16-73 CFFRRC: .BLKB HDRLFR ;SENDER'S ROUTE CODE ;01-16-73 .BYTE CR,LF,ETX ;01-16-73 CFOKML = .-CFOKMS  01.27.73 ; R1 = TIME OF DAY FOR EOD 01.27.73 2$: CMP EODW18,R0 ;IS IT FOR TODAY? BNE 4$ ;NO SUB EODW12,R1 ;GET OFFSET TO EOD CMP #1*400,R1 ;WITHIN ONE HOUR? BLOS 4$ ;BRANCH IF NO 01.31.73 BISB #1,FILG1+TRMAED ;SET EOD-REQUIRED FLAG ; ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * OTHER PRODUCT BR 10$ 16$: ;HERE TO CREATE A "HOLE" IN "TOTALS" FOR NEW PRODUCT MOV R1,R3 ;POINTER TO NEXT OPEN ENTRY ADD #8.,R3 ;NEXT OPEN BLOCK MOV R3,R4 ;SAVE FOR RESTORE BELOW 18$: .REPT 4 ;MOVE BLOCK UP MOV -(R1),-(R3) .ENDM CMP R1,R2 ;REACHED DESIRED "HOLE" YET? BHI 18$ ;NOT YET MOV R4,R1 ;REN PREPARATION FOR MESSAGE TO TERMINAL ;FOR THE HOUR: HR(T) = HR(H) + Z(T) - Z(H) + DST(T) - DST(H) EODC35: MOV EODW10,R0 ;HUB HOUR MOVB FILG1+TRMTMZ,R1 ;TRM'S ZONE MOVB FILG1+TRMDST,R2 MOV EODW18,R3 ;INIT W/CURRENT JULIAN MOV EODW15,R4 ;CURRENT YEAR ADD R1,R0 ADD R2,R0 SUB #HUBZON+HUBDST,R0 BGE 2$ ADD #24.,R0 ;BRING TO TIME, 1 DAY EARLIER  ;01-16-73 ;01-16-73 CFERMS: .ASCII "ERROR" ;PHRASE OVERWRITES "CODE " ;01-16-73 CFHDR1: ;STANDARD HEADER STDID HUBRTE HUBRTE .ASCII "000 0 " ;SEQ # AND PRIORITY .ASCII ".HA" ;HUB ACTION CODE: PRINT ON CONSOLE .PAGE ;FOLLOWING IS SKELETON FOR THE ROUTING CODE MESSAGE (OP CODE 04) RTELST: .ASCII "IND* * * 4$: FILEF FLWR,EODV20,R0,#0,#0 ; WRITE TO DISC ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; MOVEA EODX12,MESG2+HDRTO,HDRLTO ; SEND MOVEA EODX13,MESG2+HDRACT,HDRLAC ; TRANSACTION ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#0 ; TO DC ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * JMP EODA00 ;GO PROCESS THE NE-SET TO NEXT OPEN CELL... BR 14$ ;...AND MOVE NEW BLOCK INTO NEW HOLE 20$: ADD #8.,R2 ;BUMP TO NEXT BLOCK... BR 8$ ;...AND KEEP LOOKING FOR I.D. #'S .PAGE ;*********************************************************************** ;FLOWS & TEMPS NOW ORDERED & ACCUMULATED: ;MUST CHECK AGGREGATE TOTAL AGAINST HIGH LIMIT ;*********************************************************************** DEC R3 ;BACK UP DATE 2$: CMP R0,#23. BLE 4$ SUB #24.,R0 INC R3 ;ALREADY TOMORROW THERE 4$: TST R3 BNE 6$ MOV #365.,R3 DEC R4 ;BACK UP YEAR BIT #3,R4 BNE 6$ INC R3 ;LAST YEAR WAS LEAP 6$: MOV R0,EODW25 ;SAVE TERM'S HOUR MOV R4,EODW27 ;TERM'S YEAR MOV R3,EODW26 ;TERM(EX RTE CODE TERM ID" ;01-11-73 .ASCII "----- -------- -------" ;01-11-73 RTLSTL = .-RTELST ;LENGTH OF FIRST LINE ;01-11-73 ;01-11-73 RTELN2: .ASCII " " ;LINE #2: REPEATABLE WITH VARIABLE LENGTH ;01-11-73 RTENDX: .ASCII " " ;ROUTE CODE INDEX ;01-11-73 RTECOD: .ASCII " " ;ROUTIXT MESSAGE 01.27.73 ; ******************************************************************** ; CONDITIONAL TASK EXIT: ; IF MESSAGE QUEUE FOUND EMPTY AFTER TERMINAL RE-SCAN, EXIT. ; ELSE, PROCEED TO NEXT SECTION ; ******************************************************************** EODA90: TST EODW32 ;IS EXIT SHUNT CLOSED? (@ EODB30) BEQ EODB10 ;NO - CONTINUE TO SCAN TERMINALS EODXIT: CLR SYDST+SYDED1 ;RESET PHASE FLAG  FMTA40: MOV #FMTOTL+4,R0 ;LO ORDER OF 1ST FLOW PTR CLR R3 ;LO ACC CLR R4 ;HI ACC 2$: ADD (R0),R3 ;D/P ACCUM: LO-ORDER 01-31-73 ADC R4 ADD -(R0),R4 ADD #12,R0 ;SKIP TO NEXT I.D. 01-31-73 CMP R0,R1 ;REACHED TOP? BLO 2$ ;NOT YET MOV #HILIM2,R0 ;LO ORDER HALF OF LIMITS JULIAN DATE ;NOW CALC CURRENT MONTH AND DAY OF MONTH FOR TERMINAL MOV #EODCAL,R0 ;CALENDAR CLR R1 CLR R2 7$: INC R1 MOVB (R5)+,R4 ;DAYS IN SUCCESSIVE MONTHS SUB R4,R3 ;TRYING TO FIND WHICH MONTH IT'S IN BGT 7$ ADD R4,R3 ;FOUND IT: RESTORE FOR DAY OF MONTH MOV R3,EODW31 MOV R1,EODW32 ;NOW CALC EOD DAY FROM EOD JULIAN DATE: MOV #EODCAL,R0 NG CODE (WHEN ENTRY IS NON-ZERO) ;01-11-73 RTETID: .ASCII " " ;TERMINAL ID (WHEN ELEMENT EXISTS) ;01-13-73 .BLKB 10 ;PROTECTION ZONE ;01-14-73 RTEL2L = .-RTELN2 ;COUNT FOR PRE-CLEAR WITH BLANKS ;01-14-73 .EVEN .NLIST ME .PAGE .SBTTL NEXT MESSAGE & OP CODE PROCESSING ERRNUM = 0 ERR = CFGX00 ;INIT ERR TARGET ADDR TO BOTTOM OF SLIDE .ENABL LSFOR NEXT RUN DEBUG 2 EMT EXIT ;TH-TH-THAT'S ALL, FOLKS! .PAGE ; ******************************************************************** ; CHECK "NULL MESSAGE NUMBER TABLE" AND "MESSAGE NUMBER TABLE" ; SET ACTIVITY FLAG IF ACTIVITY IN EITHER FOUND. ; ******************************************************************** ;HERE AFTER ALL MESSAGES IN INPUT QUEUE HAVE BEEN SERVICED EODB10: ;CHECK EACH TERMINAL TO SEE IF IT'S TI  01-31-73 MOV #HILIM1,R2 ;HI-ORDER HALF OF LIMIT 01-31-73 SUB R3,R0 ;D/P SUBTRACT: LO-ODER 01-31-73 SBC R2 01-31-73 SUB R4,R2 ;D/P SUBTRACT: HI-ORDER 01-31-73 BGE FMTA50 ;TOTAL DID NOT EXCEED LIMIT 01-31-73 ERR ;OVER LIMIT .PAGE ;**********! MOV FILG1+TRMEDM,R1 ;JULIAN EOD 8$: MOVB (R0)+,R2 ;#DAYS IN INDEXED MONTH SUB R2,R1 ;KEEP GOING UNTIL RUN OUT BGT 8$ ADD R2,R1 ;STICK LAST ONE BACK IN MOV R1,EODW28 ;SAVE FOR CONVERSION TO ASCII FOR MSG MOVB FILG1+TRMEOM,R1 ;"1" OR "2" FOR EOM DAY MUL #5,R1 ;MUST GET "FIRST" OR "LAST" ADD #EODX40-5,R1 MOV R1,EODP21 ;LOAD SOURCE ADD"B CONFG1: EMT EXIT ;BYE-BYE IF TASK OFF OR IF THROUGH CONFIG: DEBUG 1 TSKRUN CONFG1 ;EXIT IF TASK NOT ALLOWED TO RUN MOV #PATCH,SP ;A PREVIOUS ERROR EXIT WILL LEAVE SP PUSHED EMT GDATE ;GET CURRENT DATE MOV (SP)+,CFYERB MOV (SP)+,CFDATB MOV (SP)+,CFMONB EMT GTIME MOV (SP)+,CFHORB MOV (SP)+,CFMINB MOV (SP)+,CFSECB EMT JULDAT#ME FOR E-O-D DEBUG 4 MOV #RTEST-RTEL,R4 ;GET ADDR OF ROUTING TABLE CLR EODW19 ; CLEAR EOD SERVICED FLAG EODB12: ADD #RTEL,R4 ; ADVANCE TO NEXT ENTRY MOV R4,EODW21 ; SAVE ADDR OF RTE ENTRY MOV RTEID(R4),R0 ; GET FIRST WORD OF ENTRY BEQ EODB12 ;NULL ENTRY CMP #-1,R0 ; END OF LIST JEQ EODB30 ;Y$************************************************************* FMTA50: ;NOW CONVERT ORDERED PRODUCT-LINE INFO BACK TO ASCII: ;*********************************************************************** SUB #FMTOTL,R1 ;# BYTES USED IN TABLE ASH #-3,R1 ;DIV BY 8: GET # OF 8-BYTE BLOCKS MOV R1,R3 MOV #FMTOTL,R0 MOV #PIDASC,R2 MOV #PIDIGS,8$ 2$: MOV R0,4$ MOV R2,6$ JSR R5,BA%RESS INTO TRANSFER PAKET MOV EODW13,R1 ;TERM'S INDEX MUL #6,R1 ;"OUT" TABLE HAS 6 BYTES PER ENTRY ADD #OUT+2,R1 MOV (R1)+,R0 BIC #100000,R0 ;INPUT SEQ # MOV R0,EODW29 ;SAVE FOR CONVERSION MOV (R1),EODW30 ;OUTPUT SEQ # ;THIS ONE CALL - IN A SINGLE STROKE - MOVES THE MESSAGE SKELETON TO THE ;MESSAGE BUFFER, THEN FILLS IT WITH ALL DATA NEEDED FROM THE "TRM" FILE ;AND FROM THE IN& MOV (SP)+,CFJULB MOVE PAKX03 ;CONVERT & STORE ASCII OF ABOVE BICB #1,CALTAB+1 ;FEB = 28 DAYS BIT #3,CFYERB ;LEAP? BNE 2$ ;NO INCB CALTAB+1 ;YES: FEB = 29 DAYS (SIMPLE, HUH?) 2$: FILEF MSDT,CFIML,,#0,#0,CONFG1 ;DETACH NEXT MESSAGE ;01-10-23 MOVE PAKX01 ;XFR MSG TO LOCAL WORK AREA MOVB INTID,MESG2+HDRID MOVB INTID+1,MESG2+HDRID+'ES - EXIT LOOP MOV R4,-(SP) JSR PC,CNVRTX ;GET TERMINAL RTE INDEX MOV (SP)+,EODW13 BMI EODB12 ;BRANCH IF ILLEGAL ROUTE INDEX 01.27.73 CLR EODW25 ;RESET ACTIVITY INDICATOR MOV #NMN,EODV30+FLPNAM CLR EODV30+FLPSVC ;FIRST TIME ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLSNT,EODV30,R0,#0,#0 ;READ IN NULL MSG # TABLE ; * * * * (SCNV ;CONVERT NEXT PRODUCT I.D. & STORE ASCII 4$: .WORD 0 ;SOURCE ADDRESS 6$: .WORD 0 ;DEST ADDR 8$: .WORD 0 ;ACTUAL BYTE COUNT ADD #8.,R0 ;BUMP TO NEXT ENTRY ADD #PIDIGS,R2 ;BUMP TO NEXT SPACE IN TABLE SOB R3,2$ MOV R1,R3 MOV #FMTOTL+6,R0 MOV #TMPASC,R2 MOV #TMPDGS,16$ 10$: MOV R0,12$ MOV R2,14$ J)ITIALIZED LOCAL BINARY STORAGE. CONVERSION TO ASCII IS ;SPECIFIED AS NEEDED IN THE TRANSFER PACKET STRING, AND IS MADE PRIOR TO ;THE TRANSFER OF THAT PARTICULAR DATUM. MOVE EODP20 ; ******************************************************************** ; OUTPUT THE EOD MESSAGE TO THE TERMINAL ; ******************************************************************** EODC40: ;01-23-73 CLR EODV10+M*1 MOVB INTID+2,MESG2+HDRID+2 BIS #TYPF4,MESG1+TYPREC ;INHIBIT WRITE TO AUDIT TRAIL ;01-11-73 FILEF MSAT,CFIML,,,#3 ;ATTACH MSG TO INTERCEPT ;01-09-73 MOV #MSGBUF,X02SRC ;INIT TRANSFER SOURCE POINTER CLRB LSTCHR ;INIT FOR FIRST "LAST-CHARACTER" CHECK ;01-14-73 JSR PC,MOVLIN ;GET FIRST LINE TO LINE BUF MOVE PAKX04,6$ ;CONVERT ID AND PRIMARY OP-CODE TO BIN ;01-17-73 CMP +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * MOV #FILG1,R0 MOV #NMNTSZ,R1 ;WILL CHECK EACH WORD IN TABLE CLR R2 2$: BIS (R0)+,R2 SOB R1,2$ BNE EODB14 ;ACTIVITY FOUND: GO SET ACTIVITY INDICATOR MOV #MNT,EODV30+FLPNAM CLR EODV30+FLPSVC ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLSNT,EODV30,R0,#0,#0 ;READ IN MSG NUMBER TABLE ; * * ,SR R5,BASCNV ;CONVERT-AND-STORE NEXT TEMPERATURE 12$: .WORD 0 ;SOURCE ADDRESS 14$: .WORD 0 ;DEST ADDR 16$: .WORD 0 ;ACTUAL BYTE COUNT ADD #8.,R0 ;BUMP TO NEXT ENTRY ADD #TMPDGS,R2 ;BUMP TO NEXT SPACE IN TABLE SOB R3,10$ MOV R1,R3 MOV #FMTOTL+2,R0 MOV #QTYASC,R2 MOV #QTYDGS,24$ 18$: MOV R0,20$ MOV R2,22$ -SPSVC FILEF MSAT,EODV10,,,#0 ;FORM TYPE I CELL FILEF MSAT,EODV10,,,#3 ;ATTACH TO EOD "INPUT" QUEUE ; ******************************************************************** ; WRITE UPDATED "TRM" BACK TO DISC ; ******************************************************************** ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLWR,EODV20,R0,#0,#0 ;WRITE BACK UPDATED "TRM" ; * * * * * * * * * * * . CFNIDB,#41. ;ONLY ACCEPT THIS ONE RIGHT NOW *$$$$$$$$ BEQ 30$ ;GOOD I.D. ERR ;BAD I.D. CFGA02: 6$: ERR ;I.D. OR OP-CODE CONVERSION ERROR ;01-17-73 8$: ERR ;ILLEGAL ROUTING CODE 10$: ERR ;CHARACTER CHECK ERROR IN SENDER'S OR TARGET ROUTE CODE;01-16-73 .PAGE ;01-14-73 30$: ;CHECK FOR LEGAL ROUTE CODE AND ME/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TST FILG1+MNTLMN ;CHECK LAST MESSAGE # BEQ EODB16 ;NO ACTIVITY EODB14: INC EODW25 ;INDICATE MESSAGE ACTIVITY FOR THIS TERMINAL .PAGE ; ******************************************************************** ; READ IN "TRM" FACILITY TABLE ; CHECK IF TIME FOR [EOD] AND SET EOD-REQUIRED FLAG IF SO. ; CHECK IF TIME FOR [EOM] AND SET EOM-REQUIRED FLAG IF SO. ; IF E0 JSR R5,BADCNV ;CONVERT-AND-STORE NEXT FLOW TOTAL 20$: .WORD 0 ;SOURCE ADDRESS 22$: .WORD 0 ;DEST ADDR 24$: .WORD 0 ;ACTUAL BYTE COUNT ADD #8.,R0 ;BUMP TO NEXT ENTRY ADD #QTYDGS,R2 ;BUMP TO NEXT SPACE IN TABLE SOB R3,18$ .PAGE ;*********************************************************************** ;ALLOW ONLY ONE PRODUCT IF FUELING. ;FILL INPUT1* * * * * * * * * * * * * * * * * * * * * .PAGE ; ******************************************************************** ;NOW RESTORE ZEROED IMAGE OF NULL M.N.T. TO THE FILE WORK AREA. THE ;POINT OF USING "MOVEA" IS TO TRANSFER THE HEADER. ; ******************************************************************** MOVEA EODX60,FILGL,FILAT-FILGL ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLWR,EODV30,R0,#0,#0 ;WRITE NULL M.N.T.2SSAGE END SYNTAX ;01-16-73 MOVE PAKX06,10$;FILL OK MSG W/SENDER & TARGET ROUTE CODES ;01-17-73 MOV #INPLIN+C80RCO,-(SP) ;ADDR OF TERM ROUTING CODE ;01-16-73 JSR PC,CNVRTX MOV (SP)+,TRMNDX ;SAVE ROUTING CODE INDEX BPL CFGA04 ;INDEX IS O.K. ;01-16-73 CMP CFOPCB,#1 ;IF NOT A TERM, ONLY ALLOW CODE #1 ;01-16-73 BNE 8$ ;ILLEGAL ROUTE CODE AND NOT OP-CODE 01 3OM IS SET, PROCEED TO PROCESS END-OF-DAY FOR THIS TERMINAL ; IF BOTH EOD AND ACTIVITY FLAGS ARE SET, PROCEED WITH EOD. ; IF NONE OF THE ABOVE, PROCEED TO NEXT TERMINAL. ; ******************************************************************** EODB16: CLR FLPSVC+EODV20 ; INIT FILE REQUEST ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLSNT,EODV20,R0,#2,#0 ;READ IN "TRM" ; * * * * * * * * * * * * * * * * * * * 4 & TERM I.D.'S IN LOCAL COMMON. ;BUILD MESSAGE FROM ASCII DATA TABLES. ;RE-ATTACH MESSAGE TO QUEUE. ;*********************************************************************** .ENABL LSB FMTA60: MOVB USE,R4 ;AREA TYPE: 1-5 CMP R4,#FUELTY ;IF FUELING... BNE 2$ CMPB NPRODS,#1 ;...THEN ALLOW ONLY ONE PRODUCT BEQ 2$ ;O.K. ERR 2$: ASL R4 ;WORD INDEX A5 BACK, CLEARE ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; ******************************************************************** ; CLEAR OUT THE "MESSAGE NUMBER TABLE" ; ******************************************************************** EODC80: ;NOW CLEAR MESSAGE NUMBER TABLE AND CLEAN UP ;01-23-73 MOV #MNT,EODV30+FLPNAM ;READ IN CLR EODV30+FLPSVC ; MESSAGE SEQUENCE ; * * * * * * * * 6 ;01-16-73 CFGA04: TST CFOPCB ;SEE IF PRIMARY OP-CODE IS [00] ;01-16-73 BNE CFGA30 ;NO: GO PROCESS IT ;01-16-73 CMPB LSTCHR,#ETX ;DID FIRST LINE END IN ETX? ;01-16-73 BNE CFGA20 ;NO: THERE IS ANOTHER LINE ;01-16-73 ERR ;MUST HAVE AT LEAST ONE LINE AFTER [00] ;01-16-73 ;01-08-73 7* * * * * * * * * * * * * * ;CHECK TERM'S EOD & EOM DATES & TIME FOR A MATCH WITH NOW. ;JULIAN IS USED FOR THE TARGET DATES TO ELIMINATE AMBIGUITIES. IN ORDER ;TO ALLOW FOR SYSTEM OUTTAGES, ESPECIALLY DURING A NEW YEAR TURNOVER, ;THE FOLLOWING RULES ARE IMPOSED: 1) IF THE CURRENT DATE HAS A LOWER ;JULIAN DATE THAN THE TARGET DATE (EOM OR EOD), IT IS CONSIDERED TOO ;SOON FOR THAT FUNCTION, UNLESS THE FUTURE DELAY IS GREATER THAN SOME ;AMOUNT THAT IS MORE THAN HALF A YEAR. IN THIS CASE IT 8SL R4 ;ENTRIES ARE 4 BYTES EACH 01-31-73 ;FIRST FILL INPUT I.D. IN COMMON AREA FROM TABLE OF I.D.'S, THEN ;FILL TERMINAL I.D. IN COMMON AREA FROM FACILITY TABLE DATA: MOV FMTNID-4(R4),C.INID ;FILL WITH FIRST TWO CHARS 01-31-73 MOV FMTNID-2(R4),C.INID+2 ;...AND LAST TWO 01-31-73 MOV #FMTPTA,R1 MOVE PAKA60 ;PICK UP TERMINAL I.D. FROM "TRM" ASR R4 ;BACK TO A WO9* * * * * * * * * * * * * * * * * * * * * * * * FILEF FLSNT,EODV30,R0,#2,#0 ; NUMBER TABLE ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * MOV #FILG1,R0 ;WILL CLEAR ENTIRE MNT... MOV #MNTTSZ,R1 ;...IN PREP FOR WRITE-BACK 2$: CLR (R0)+ SOB R1,2$ ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLWR,EODV30,R0,#0,#0 ;WRITE MNT BACK, CLEARED : .DSABL LSB ;01-08-73 ;*********************************************************************** CFGA10: ;HERE WHEN PROCESSING A NEW LINE DEBUG 2 JSR PC,OKRETN ;DOCUMENT PREV OP-CODE AS "OK" ;01-08-73 CFGA20: JSR PC,MOVLIN ;GET NEXT LINE INTO LINE BUFFER ;01-16-73 JEQ CONFIG ;NO MORE LINES ;01-14-73 MOVE PAKX05,CFGA02 ;IS ASSUMED AN ;OUTTAGE HAS OCCURRED AND LASTED THROUGH A NEW YEAR, AND THAT THE ;MESSAGE OUGHT TO COME OUT NOW. 2) IF THE CURRENT DATE HAS A GREATER ;JULIAN VALUE THAN THE TARGET, IT IS ASSUMED THE TARGET HAS BEEN ;BYPASSED DUE T0 AN OUTTAGE, UNLESS THE CURRENT MONTH IS DECEMBER AND ;THE TARGET MONTH IS JANUARY, IN WHICH CASE IT IS ASSUMED THE TARGET ;FUNCTION HAS BEEN POSTDATED, CAUSING THE MESSAGE TO BE DELAYED. NOTE ;THAT "EOD" & "EOM" ARE TREATED INDEPENDENTLY: IF EOD IS FOUND POST- ;DAT<RD INDEX 01-31-73 MOV STATDR-2(R4),MOVAD1 ;SELECTS PROPER STAT LINE PACKET 01-31-73 JSR R5,MOVEX;PUTS STAT LINE IN MESG BUF BEHIND HEADER MOVAD1: .WORD 0 ;(LOOK AT THE INSTRUCTION BEFORE THE JSR NOP MOV PRODIR(R4),MOVAD2 ;SELECTS PROPER PRODUCT LINE PAC MOVB NPRODS,R2 ;LOOP COUNT 4$: JSR R5,MOVEXA ;CONTINUE W/ R0 SET FROM PREVIOUS MOVAD2: .WORD 0 ;EACH PACKET =; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * .IF NE .CITGO QUEUE RON ;TASK TO SEND LIST OF TOTALS TO TERM ;*CITGO* .ENDC JMP EODC10 ;BACK FOR MORE .PAGE .SBTTL PHASE #3 ; ******************************************************************** EODD00: ;ENTRY POINT AFTER 2ND 30-SEC DELAY ; ******************************************************************** >;CONVERT SECONDARY OP-CODE TO BINARY ;01-17-73 CFGA30: ;ENTRY POINT WHEN PRIMARY OP-CODE IS NON-ZERO ;01-16-73 CLRB ERRORX ;INIT ERROR MSG # JSR PC,RLSEFL ;RELEASE RESIDENT FILE IF STILL WRITE-LOCKED MOV CFOPCB,R0 ;OP-CODE (EITHER PRIMARY OR SECONDARY) CMP R0,#MXOPCD ;CAN'T BE GREATER BLE 12$ ERR 12$: ASL R0 MOV JMPTB1(R0),PC ;XFER TO PROPER SECTION .P?ED, BUT EOM IS DUE OR OVERDUE, EOM WILL COME OUT. IF BOTH ARE DUE, ;EOM WILL COME OUT. MOV FILG1+TRMEDM,R0 ;SET R0 = TERMINAL JULIAN DAY FOR EOD 01.27.73 JSR PC,EODS30 ;CONVERT TERMINAL EOD DATE/TIME TO 01.27.73 ;LOCAL HUB TIME. (STORED IN R0) 01.27.73 MOV #1,R4 ;SET R4 = 'EOD' FLAG 01.27.73 JSR PC,EODS10 ;SET FLAG IF EOD MOV FILG1+TRMEMM,R0 ;EOM J@MOVES ONE PRODUCT LINE NOP ADD #26.,MOVAD2 ;ADVANCE TO NEXT PACKET SOB R2,4$ ;EXECUTE ONE PACKET PER PRODUCT TYPE MOVB #ETX,-(R0) ;REPLACE FINAL EOR WITH ETX 01-31-73 MOV #AUTOAC,R0 ;AUTO TRANS ACTION-CODE INDEX MOVB FMTACD(R0),MSGBUF+HDRACT+1 ;CHANGE ACTION CODE MOVB FMTACD+1(R0),MSGBUF+HDRACT+2 MOVE PAKA90 ;MOVE ENTIRE MESSAGE TO REAL MSG AREA ADEBUG 100 MOV #RTEST-RTEL,R5 ;INIT PNTR TO "RTE" EODD10: ADD #RTEL,R5 MOV RTEID(R5),R0 BEQ EODD10 ;NULL ENTRY CMP R0,#-1 BNE EODD14 CLR SYDST+SYDED1 ;RESET COMMON CORE ENTRY-POINT FLAG JMP EODRPT ;AND RESTART IN CASE MORE MESSAGES IN ; ******************************************************************** EODD14: ;FOR EACH TERMINAL THAT HAD AN EOD, CLEAR THAT FLAG IN BAGE JMPTB1 = .-2 ;OP CODE: .WORD CFGB00 ; 01 .WORD CFGC00 ; 02 .WORD CFGD00 ; 03 .WORD CFGE00 ; 04 .WORD CFGF00 ; 05 .REPT 14. .WORD OPCERR .ENDM .WORD CFGG00 ; 20 .WORD CFGH00 ; 21 .WORD CFGI00 ; 22 .WORD CFGJ00 ; 23 .WORD CFGK00 ; 24 .WORD CFCULIAN JSR PC,EODS30 ;CONVERT EOM TIME AND DATE TO LOCAL HUB 01.27.73 MOV #2,R4 JSR PC,EODS10 ;SET FLAG IF EOM BITB #2,FILG1+TRMAED ;IS EOM-REQUIRED FLAG SET? BNE EODB20 ;YEAH - GO DO IT BITB #1,FILG1+TRMAED ;IS EOD-REQUIRED FLAG SET? BEQ EODB26 ;NO - SKIP PROCESSING TST EODW25 ;WAS ACTIVITY INDICATED? BEQ EODB26 ;NO - BYPASS EOD IF NO ACTIVITY D FILEF MSAT,FMIML,,,#3 ;RE-ATTACH MSG TO QUEUE JMP FORMAT .DSABL LSB .PAGE ;*********************************************************************** ;WARN HUB OPERATOR THAT MESSAGE NUMBERS ;WERE FOUND OUT-OF-SEQUENCE. ;*********************************************************************** FORMT2: MOVE PAKA10 ;FILL MSG AREA W/WARNING MESSAGE CLR FMIML6 ;INIT FOR FIRST TIME FE ;ITS FACILITY TABLE & RELEASE THE INHIBIT OF ITS INPUT ; ******************************************************************** MOV R5,-(SP) JSR PC,CNVRTX ;GET THIS TERM'S INDEX MOV (SP)+,EODW13 ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLSNT,EODV20,R0,#2,#0 ;READ IN "TRM" ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TSTB FILG1+TRMAED ;WASFGL00 ; 25 .WORD CFGM00 ; 26 .WORD CFGN00 ; 27 .PAGE .SBTTL OP CODE 01 .ENABL LSB ;01-10-73 CFGB00: ;OP CODE 01: ESTABLISH NEW TERMINAL CMP TRMNDX,#-1 ;WAS ROUTING CODE FOUND IN TABLE? BEQ 2$ ;NO: O.K. TO CONTINUE WITH ESTABLISH ERR ;DUPLICATE ROUTING CODE WAS FOUND: NO GOOD 2$: CLR R1G .PAGE ; ******************************************************************** EODB20: ;PREPARE OPEN FOLIO MESSAGE ; ******************************************************************** MOV EODW21,-(SP) ;CONVERT JSR PC,CNVRTQ ; RTE ADDR MOV (SP)+,R0 ; TO QUEUE TABLE MOV R0,EODW22 ; ADDR CMP R0,#-1 ;ERROR? 01.31.73 BEQ 2$ ;BRANCHILEF MSAT,FMIML,,#0,#0 ;FORM TYPE I CELL FILEF MSAT,FMIML,,#0,#3 ;ATTACH IT RTS PC .PAGE .SBTTL ERROR PROCESSING ;*********************************************************************** ;ERROR PROCESSING: USUALLY SEND MSG BACK TO TERM ;*********************************************************************** .REPT ERRNUM ;ERROR NUMBERING IS AUTOMATIC INCB ERRORX .ENDM FMTX00: ;GENEI THERE AN EOD ON THIS? BEQ 10$ ;NO MOV R5,-(SP) ;GET ADDR IN QUEUE TABLE... JSR PC,CNVRTQ ;...FROM ADDR IN RTE TABLE MOV (SP)+,R0 BIC #MSQF2,MSQIH(R0) ;CLEAR INHIBIT 10$: CLRB FILG1+TRMAED ;RESET EOD FLAG ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLWR,EODV20,R0,#0,#0 ;WRITE "TRM" BACK OUT ; * * * * * * * * * * * * * * * * * * * J ;NO DUPLICATE: O.K. TO CONTINUE: FIND A HOLE MOV #RTEST,R0 ;BEGIN OF "RTE" TABLE IN CORE 4$: TST (R0) ;01-10-23 BEQ 6$ ;FOUND A HOLE ADD #RTEL,R0 ;NEXT SLOT ;01-09-73 INC R1 ;KEEP COUNTING ;01-10-23 CMP (R0),#-1 ;END? BNE 4$ ;NO ERR KH IF NO 01.31.73 ERR 2$: BIS #MSQF2,MSQIH(R0) ;INHIBIT INPUT FROM TERM BIS #1,EODW19 ;SHOW AT LEAST ONE TERM SERVICED CLR -(SP) ;INDEX FOR "OPEN FOLIO" JSR PC,EODS40 ;BUILD I.D. 20 MESSAGE W/PROPER OP-CODE MOV #3$,EODW25 ;STORE RETURN ADDRESS FOR DELAY ROUTINE 01.27.73 ; ;(EXERCISED ONLY IF THE MESSAGE AREA 01.27.73 ; LRAL ERROR PROCESSING DEBUG 200 MOV #FMTACD+,PKA70S ;INIT SOURCE PNTR MOVE PAKA70 ;BUILD ERROR MESSAGE MOVE PAKA80,,A ;MOVE BACK ORIGINAL TEXT FILEF MSAT,M,,,#3 ;RE-ATTACH MESSAGE TO QUEUE 01-29-73 JMP FORMAT .PAGE ;*********************************************************************** ;HERE TO ROUTE CURRENT MESSAGE TO "INTERCEPT" ;****************M* * * * * * * * * * * * * BR EODD10 ;BACK FOR MORE .PAGE .SBTTL ERROR PROCESSING ; ******************************************************************** ; ERROR PROCESSING: OUTPUT AN ERROR MESSAGE TO THE HUB CONSOLE ; INCLUDE IN IT AN ERROR NUMBER FOR IDENTIFICATION ; ******************************************************************** ;ALL ERROR MESSAGES ENTER ERROR PROCESSING THROUGH THIS "SLIDE": .REPT ERRNUM INN ;"RTE" IS FULL 6$: MOV #MSGBUF+C80RCO,R2 MOV #RTEQNM,R3 ;# OF CHARS IN ROUTING CODE ;01-09-73 8$: MOVB (R2)+,(R0)+ ;LOAD "RTE" W/ROUTING CODE SOB R3,8$ MOV R1,TRMNDX ;SAVE TERMINAL INDEX ;NOW ENTER LOOP TO CREATE ALL FILES ASSOCIATED WITH NEW TERMINAL. ;01-09-73 ;WHICH FILES AND THE LENGTHS (# OF CELLS) OF EACH ARE CONTROLLED BY ;01-09-73 ;THE LISTS "NAMLST" AND "CNTLST". O;IS FULL) 01.27.73 ; 01.27.73 3$: 01.27.73 CLR EODV10+MSPSVC ;SEND ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#0,EODR10 ; OPEN FOLIO ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * * * * * * * * * * * P******************************************************* NTRCPT: .IRP X,<0,1,2> ;CHANGE HEADER CODE TO [???]... MOVB #'?,MESG2+X .ENDM FILEF MSAT,M,,,#3,FORMAT ;RE-ATTACH TO QUEUE 01-29-73 JMP FORMAT 01-29-73 .PAGE .LIST ME MLIST: ;MESSAGE LIST FMIML: MSPLST QUFORM ;GENERATE MESSAGE REQUEST LIST MESGM QC ERRORX .ENDM EODE00: ;ENTRY TO ERROR PROCESSING ROUTINE DEBUG 200 MOVE EODP30 ;BUILD ERR MSG AND CONVERT ERROR # TO ASCII MOV #.+4,EODW25 ;RTN ADDR FOR DELAY RTNE IF MSG AREA FULL CLR EODV10+MSPSVC ;INIT TO FORM ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#0,EODRPT,EODR10 ;"FORM" TYPE I MSG ; * * * * * * * * * * * * * * * * * * * * * * * * * R ;01-09-73 MOVB #1,22$ ;CLOSE SHUNT SWITCH TO INIT "TRM" FIRST TIME ;01-09-73 MOV #NAMLST,R5 ;INIT POINTER TO LIST OF FILE NAMES ;01-09-73 CFGB10: MOV CNTLST-NAMLST(R5),R4 ;# OF CELLS TO FORM ;01-10-73 MOV (R5)+,CFFCL1 ;INIT WITH NEXT FILE NAME ;01-09-73 BNE 18$ ;THERE'S MORE IN LIST ;01-10-73 JMP CFGA10 ;***** ALL DONE: E X I T ***** ;01-10-73 S* * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#3 ; TO DC ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * EODB26: FILEF FLWR,EODV20,R0,#0,#0 ;WRITE "TRM" BACK OUT ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * JMP EODB12 ; .PAGE ; ******************************************************************** T ;GENERATE MESSAGE WORK AREA FMIML1 = FMIML+MSPNUM ;QUEUE NUMBER FMIML2 = FMIML+MSPLCK ;LOCK FMIML3 = FMIML+MSPPAR ;PARAMETER FMIML4 = FMIML+MSPPRI ;PRIORITY FMIML5 = FMIML+MSPWRK ;WORK AREA POINTER FMIML6 = FMIML+MSPSVC ;RESERVED "SERVICE" WORD .PAGE FLIST: ;FILE LIST FMFCL: FLPLST ,TRMNDX ;GENERATE FILE REQUEST LIST FILGM ;GENERATE FILE WORK AREA FMFCL1 = FMFCLU* * * * * * * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#3,EODRPT,EODRPT ;"ATTACH" MESSAGE ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * JMP EODRPT ;BACK TO TRY AGAIN .PAGE .SBTTL LOCAL SUBROUTINES EODS10: ;SUBROUTINE TO CHECK IF IT IS TIME FOR EOM/EOD [EO!] ;(R0)=JULIAN TARGET (EOM OR EOD); (R4)=FLAG FOR ASSOCIATED FUNCTION MOV EODW18,R1 V ;01-10-73 18$: CLR CFFCL6 ;INIT FOR FIRST CALL ;01-10-23 FILEF FLSNT,,,#2,#0,20$ ;SCAN FOR POSS. EXISTING ELEMNT;01-09-73 FILEF FLDT ;DETACH ONLY IF EXISTING ;01-09-73 20$: MOVEC 0,FILG1,FLSL1+FLSL2+FLSL3 ;CLEAR OUT FILE AREA ;01-10-23 22$: BR .+2 ;SHUNT SWITCH TO INIT "TRM" ONLY FIRST TIME ;01-09-73 BR CFW; BEGIN FIRST 30-SEC DELAY PERIOD ; ******************************************************************** ; EODB30: TST EODW19 ; ANY TERML NEED SERVICE? BNE EODB34 ;YES: START 30-SEC DELAY INC EODW32 ;SET FLAG TO EXIT ON EMPTY QUEUE AFTER RE-SCAN JMP EODA00 ;LOOK FOR ANY MORE MESSAGES BEFORE EXITING EODB34: DEBUG 10 MOV #1,SYDST+SYDED1 ;FLAG TO RESTART AT [EODC00] EODB40: MOVEA X+FLPNAM ;FILE NAME FMFCL2 = FMFCL+FLPLCK ;LOCK BYTE FMFCL3 = FMFCL+FLPPAR ;PARAMETER FMFCL4 = FMFCL+FLPLOC ;LOCATOR POINTER FMFCL5 = FMFCL+FLPWRK ;WORK AREA POINTER FMFCL6 = FMFCL+FLPSVC ;RESERVED "SERVICE" WORD .PAGE FMTPTA: .BLKW TRMSIZ ;PERSONALITY TABLE SAVE AREA FMTMTR: .BLKW MXMTRS*2 ;METER DATA BINARY TABLE FMTTMP: .BLKW MXTMPS ;TEMPERATURE DATA BINARY TABLE FMTCUM: .BLKW MXMTRS*4 ;INTEY ;TODAY'S JULIAN CMP R0,R1 ;TARG:NOW BEQ 4$ ;GO CHECK TIME BGT 6$ ;TOO SOON, UNLESS OUTTAGE DURING NEW YEAR CMP EODW17,#12. ;IS IT DECEMBER OUTSIDE? BNE 2$ ;NO: ASSUME BYPASSED DUE TO OUTTAGE CMP R0,#31. ;EO! DURING JAN? BLE 8$ ;YES: ASSUME POSTDATED 2$: BISB R4,FILG1+TRMAED ;MARK FOR EO! BR 8$ 4$: CMP EOZGB20 ;BYPASS "TRM" INIT ON SUBSEQUENT TIMES THRU ;01-11-73 CLRB 22$ ;OPEN SWITCH TO AVOID COMING HERE AGAIN ;01-09-73 MOVEC " ,FILG2,FLSL2 ;INIT CELL #2 WITH SPACES ;01-09-73 ; NOW INIT "TRM" W/ NEEDED DEFAULT VALUES MOVB #2,FILG1+TRMEOM MOVB #HUBZON,FILG1+TRMTMZ MOVB #HUBDST,FILG1+TRMDST MOV CFMONB,R0 MOVB CALTAB-1(R0),R0 ;# DAYS IN CURRENT MONTH SUB CFDATB,R0 ADD [EODX30,SYDTM3,EODX32-EODX30 ;TIMER MODULE IMAGE TO BUF;01-23-73 MOV #5,R5 ;SET UP MAXIMUM DELAY LOOP COUNTER 01.27.73 8$: MOV #SYDTM3,-(SP) ; QUEUE ;01-23-73 MOV #30.,-(SP) ; TIMER MODULE EMT QTIME ; FOR TST (SP)+ ; 30 SEC DELAY BNE 10$ ;TIMER WAS NOT QUEUED (VERY,VERY RARE) EMT EXIT ;LEAVE N\RMEDIATE ACCUMULATE TABLE FMTOTL: .BLKW MXMTRS*4 ;FINAL ACCUMULATED TOTALS TABLE FMTACD: ;ACTION CODE TABLE: ACCESS BY INDEX .WORD "JB ;INDEX = 0 .WORD "CA ;INDEX = 1 .WORD "3A ;INDEX = 2 HUBRTE: HUBRTE FMTNID: ;TABLE OF INPUT I.D.'S FOR THE VARIOUS USE MODES .ASCII "060 " ;LOAD RACK DISPOSAL (USE #1) .ASCII "060 " ;TRUCK FUELING (#2) .ASCII "010 " ]DW12,EODW14 ;TODAY IS DAY: CHECK TIME BGE 2$ BR 8$ 6$: SUB R1,R0 ;GET # DAYS FUTURE DELAY CMP R0,#EODMDY ;MAXIMUM DELAY BLE 2$ 8$: RTS PC .PAGE EODS20: ;DELAY 1 SEC SUBROUTINE MOV #EODX34,-(SP) MOV #1,-(SP) EMT QTIME TST (SP)+ BEQ 2$ MOV #4000,R0 SOB R0,. BR EODS20 2$: RTS PC ^ CFJULB,R0 ;JULIAN FOR END OF THIS MONTH MOV R0,FILG1+TRMEMM MOV CFJULB,FILG1+TRMEDM ;TODAY FOR NEXT E-O-D MOVB CFYERB,FILG1+TRMEDY ;THIS YEAR MOVE PAKB01 ;FILL IMAGE WITH ROUTE CODE ;01-16-73 MOVEC ',FILG1+TRMID,TRMLID ;INIT TERM ID FIELD W/BLANKS ;01-16-73 ;01-10-23 .DSABL LSB _OW---COME BACK AGAIN 30 SECS FROM NOW 10$: MOV #40000,R0 ;LOOP FOR ABOUT 17MS UNTIL NEXT BEAT... SOB R0,. ;...OF CLOCK, SO LIST CAN EMPTY SOB R5,8$ ;TRY 5 TIMES 01.27.73 DEBUG ;THEN GIVE UP 01.27.73 JMP EODRPT 01.27.73 .PAGE .SBTTL PHASE #2 ; ************************************` ;BULK RECEIPT (#3) .ASCII "070 " ;PRODUCT RETURN (#4) .ASCII "030 " ;BULK DISPOSAL (#5) 01-31-73 FMTZRO: .ASCII "00000000" ;FOR ZEROING FIELDS IN OUTPUT MESSAGES 01-31-73 LOLIM: ;TABLE OF LOW FLOW LIMITS BY AREA TYPE, FOR NOISE CHECK 01-31-73 .WORD LOLIM1 ;USE TYPE #1 01-31-73 .WORD LOLIM2 ;USE #2 a .PAGE ;THIS SUBROUTINE CONVERTS THE TERMINAL'S EOM & EOD TIME TO HUB TIME. ;IN THE PROCESS IT ADJUSTS THE EOD DAY IN ALLOWING FOR TIME ZONE ;DIFFERENCES EITHER WAY, FOR DIFFERENCES IN DAYLIGHT SAVINGS TIME STATUS ;FOR GOING BACKWARD OR FORWARD THROUGH MIDNIGHT, AND FOR GOING BACKWARD ;OR FORWARD THROUGH NEW YEAR'S. THE BASIC CONVERSION FORMULA IS: ; HOUR(H) = HOUR(T) + ZONE(H) - ZONE(T) + DST(H) - DST(T) ;CONDITIONS UPON ENTRY: (R0) = JULIAN DATE FOR TERM'S EOD OR EOM EODS30: b ;01-11-73 .PAGE ;01-10-23 ;IN THE FOLLOWING LOGIC, THE COUNT OF THE NUMBER OF CELLS CONTROLS THE ;01-10-23 ;TYPE OF AND NUMBER OF FORM COMMANDS. IF AN ELEMENT REQUIRES 1 OR 2 ;01-10-23 ;CELLS,THEN A FORM TYPE I ONLY OR FORM TYPES I & II COMMAND IS GIVEN. ;01-10-23 ;IF THE NUMBER OF CELLS IS GREATER THAN 2, SUCCESSIVE FORMS OF TYPE II ;01-10-23 ;CELLS ARE MADE FROM THE ATTACH AREA. c******************************** ; CHECK EACH TERMINAL FOR EOD/EOM SERVICING ; ******************************************************************** EODC90: MOV #2,SYDST+SYDED1 ;INIT "COMMON" FLAG TO RESTART AFTER ;THE SECOND 30-SEC DELAY JMP EODB40 ;SET DELAY FOR 30 SECS & EXIT EODC00: ;WAKE UP HERE AFTER FIRST 30-SEC DELAY DEBUG 20 MOV #RTEST-RTEL,R4 ; GET ADDR OF ROUTING TABLE EODCd 01-31-73 .WORD LOLIM3 ;USE #3 01-31-73 .WORD LOLIM4 ;USE #4 01-31-73 .WORD LOLIM5 ;USE #5 01-31-73 .PAGE TMPW01: .WORD 0 ;TEMPORARY STORAGE LOCATIONS TMPW02: .WORD 0 TMPW03: .WORD 0 TMPW04: .WORD 0 TMPW05: .WORD 0 TMPW06: .WORD 0 WRNFLG: .WORD 0 ;CAUSES OUT-OF-SEQ e MOVB FILG1+TRMEOD+1,R1 ;TERM'S EOD TIME (HOUR) MOVB FILG1+TRMTMZ,R2 ;TERM'S TIME ZONE MOVB FILG1+TRMDST,R3 ;DAYLIGHT TIME INDICATOR ADD #HUBZON+HUBDST,R1 ;ADD IN HUB'S ZONE & DST SUB R2,R1 SUB R3,R1 BGE 2$ ADD #24.,R1 ;HOUR WENT BELOW 00 DEC R0 ;EOD @ TERM HAPPENS DAY BEYOND DAY AT HUB 2$: CMP R1,#23. BLE 4$ SUB f ;01-10-23 CFGB20: CLR CFFCL6 ;INIT FOR FIRST CALL ;01-11-73 CLR CFFCL2 ;CLEAR LOCK AND PAR ;01-10-23 DEC R4 ;CELL COUNT ;01-10-23 CMP R4,#2 ;WAS ORIG COUNT GREATER THAN 2? ;01-10-23 BLT 32$ ;WAS 2 OR 1 ;01-10-23 MOVB #1,CFFCL3 ;UNCONDITIONAL FORM OF TYPESg10: DEBUG 40 ADD #RTEL,R4 ; ADVANCE POINTER MOV RTEID(R4),R0 ; 1ST 2 BYTES OF ROUTE CODE BEQ EODC10 ; NULL ENTRY- GET NEXT CMP #-1,R0 ; END OF TABLE? BEQ EODC90 ;YES MOV R4,-(SP) JSR PC,CNVRTX ;GET TERM'S RTE INDEX MOV (SP)+,EODW13 CLR EODV30+FLPSVC ;GET NULL MESSAGE TABLE... MOV hWARN MSG TO OPERATOR 01-29-73 FMTSEQ: .WORD 0 ;MESSAGE SEQUENCE NUMBER MSGETX: .WORD 0 ;POINTER TO ETX AT END OF INPUT MESSAGE MTRPTR: .WORD 0 ;POINTER TO METER DATA IN FILE DATA AREA SGNEOR: .BYTE ' ,EOR ;USED TO END A PRODUCT LINE TRMNDX: .WORD 0 ;TERMINAL INDEX FMTBCC: .WORD 0 ;BINARY OF PSUEDO-BCC FOR AUDIT-TRAIL TMPASC: .BLKB MXMTRS*TMPDGS ;TEMPERATURE DATA ASCII TABLE PIDASC: .BLKB MXPRL*PIDi #24.,R1 ;HUB'S ALREADY IN NEW DAY @ TIME OF TERM EOD INC R0 ;IN HUB TIME, IT IS NEXT DAY 4$: TST R0 BNE 6$ MOV EODW24,R0 ;JULIAN WENT BACK TO ZERO: REPLACE WITH ; LAST DAY OF CURRENT YEAR: WILL WORK FOR BOTH POSTDATED EOD'S AND ;BYPASSED EOD'S OR EOM'S 6$: CMP R0,EODW24 ;GO PAST END OF YEAR? BLE 8$ MOV #1,R0 ;INIT TO FIRST OF NEXT 8$: SWAB R1 ;NOW FORM HOUR:MIN WORD BIj I & II ;01-10-23 BR 34$ ;01-10-23 32$: MOVB R4,CFFCL3 ;FORM TYPE I OR TYPES I & II ;01-10-23 34$: FILEF FLATT ;"FORM" ;01-10-23 MOVB #2,CFFCL3 ;READY FOR FORM FROM ATTACH AREA ;01-10-23 DEC R4 ;01-10-23 BGT 34$ ;KEEP FORMING UNTIL ALL TYPE II'S SATISFIED ;01-10-k #NMN,EODV30+FLPNAM ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLSNT,EODV30,R0,#2,#0 ;...IN CASE WE NEED IT ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * MOVEA FILGL,EODX60,FILAT-FILGL;SAVE NMNT TO MAKE ROOM FOR TRM CLR EODV20+FLPSVC ; GET ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLSNT,EODV20,R0,#0,#0 ; TABLE (TRM) ; * * * lIGS ;PRODUCT I.D. ASCII TABLE QTYASC: .BLKB MXMTRS*QTYDGS ;ASCII TABLE FOR ORDERED PRODUCT TOTALS ACTCOD: .BYTE 0 ;CURRENT ACTION CODE ERRORX: .BYTE 0 ;ERROR MESSAGE # NPRODS: .BYTE 0 ;# OF DIFFERENT PRODUCTS REPORTED USE: .BYTE 0 ;CURRENT METER USAGE NUMBER ZFLAG: .BYTE 0 ;>0 IF AT LEAST ONE VALID FLOW REPORTED MSGBUF: .BLKB MESG3-MESG2 ;LOCAL MESSAGE BUFFER STLBGN = MSGBUF+HDRL ;BEmSB FILG1+TRMEOD,R1 ;EOD/EOM TIME IN HUB TIME MOV R1,EODW14 ;SAVE IT MOV R0,EODW20 ;SAVE EOD DATE RTS PC .PAGE EODS40: ;THIS SUBROUTINE BUILDS AN I.D. 20 MESSAGE IN THE ;MESSAGE BUFFER AREA, AND FILLS IT WITH THE PROPER OP-CODE. ;IT ALSO STICKS IN THE "LAST MESSAGE #", TAKEN FROM THE "OUT" ;TABLE. THE OP-CODE TO USE IS SPECIFIED BY THE NUMBER ON THE ;STACK, WHICH IS USED TO INDEX In23 INCB CFFCL3 ;ADVANCE TO "ATTACH" MODE ;01-10-23 FILEF FLATT ;ATTACH THE ELEMENT ;01-09-73 BR CFGB10 ;BACK FOR ANOTHER FILE ;01-10-73 .PAGE .SBTTL OP CODES 02&03 CFGC90: ERR ;"TRM" NOT FOUND CFGD00: ;OP CODE 03: LIST SHORT (EOD) TERMINAL DATA INCB TLSTFG ;INDICATE OP-03 BR CFGC02 ;ENTER MAIN ROUTINE o* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TSTB FILG1+TRMAED ; EOD FLAG SET BEQ EODC10 ; NO - GET NEXT .PAGE ; ******************************************************************** ; REPORT NULL MESSAGES ; ******************************************************************** EODC14: ;HERE TO CHECK FOR ANY NULL MESSAGES & REPORT THEM MOV #6,-(SP) ;INDEX FOR NULL MSG # REPORTpGIN OF STAT LINE IN OUTPUT MESSAGE .EVEN .PAGE ; FORMAT CONVERSION "COMMON" AREA C.ACOD: .BLKB 2. ;ACTION CODE: TYPE OF TRANSACTION C.CARN: .BLKB 6. ;CARRIER # C.CUSN: .BLKB 8. ;CUSTOMER # C.DATE: .BLKB 4. C.DRVN: .BLKB 4. ;DRIVER # C.INID: .BLKB 4. ;INPUT I.D. C.MSGN: .BLKB 4. ;MESSAGE NUMBER C.RTCD: .BLKB 6. ;ROUTING CODE C.SPOT: .BLKB 2. qNTO A LIST OF OP-CODES. ;IT IS ASSUMED THAT THE TERMINAL'S "RTE" INDEX IS AVAILABLE ;IN "EODW13". JSR R5,SAVREG MOV 16(SP),R0 ;THE STACKED INDEX ADD #EODX21,R0 MOV R0,EODP11 ;POINTER TO PROPER OP-CODE FOR "MOVE" MOV EODW13,R1 ;TERM'S "RTE" INDEX MUL #OUTRTV+2,R1 ;GET TO THIS TERM'S ENTRY IN "OUT" MOV OUT+OUTRTV(R1),EODW30 ;"LAST MSG #" FOR THIS TERMINAL MOVErCFGC00: ;OP CODE 02: LIST TERMINAL DESCRIPTOR DATA CLRB TLSTFG ;INDICATE OP 02 CFGC02: ;ENTRY POINT FROM OP-03 JSR PC,INTRMU ;READ IN "TRM" WITHOUT LOCK BR CFGC90 ; MUST NOW CONVERT NEXT E-O-D DATE FROM JULIAN TO DAY-OF-MONTH... ; ...AND STORE IT TEMPORARILY SO THAT IT CAN BE CONVERTED TO ASCII MOV #CALTAB,R0 MOV FILG1+TRMEDM,R1 ;JULIAN FOR NEXT E-O-D REPORT 2$: MOVB (R0)+,R2 ;#s JSR PC,EODS40 ;BUILD I.D. 20 MESSAGE W/PROPER OP-CODE ;LEAVES R0 POINTING TO NEXT CHAR IN OUTPUT MESSAGE STRING. MOV #EODX60+FILG1-FILGL,R5 ;PNTR TO NULL MSG TABLE IMAGE MOV #NMNTSZ,R1 ;# WORDS TO SCAN MOV #1,R2 ;INIT NEXT MSG # 2$: MOV (R5),R3 ;NEXT WORD OF 16 MSG #'S BEQ 8$ CLR (R5) ;RESET FOR WRITE-BACK MOV #16.,R4 ;WILL SCAN 16 BITS 4$: ASR t ;SPOT NUMBER C.TIME: .BLKB 4. C.TRID: .BLKB 8. ;TERMINAL I.D. C.TRKN: .BLKB 4. ;TRUCK # C.SPTB: .WORD 0 ;SPOT #: BINARY .PAGE .SBTTL CHARACTER TRANSFER CONTROL PACKETS .NLIST ME .NLIST CND .LIST MEB MSG1PK: ;TRANSFERS ENTIRE MESSAGE TO LOCAL MESSAGE BUFFER PACK MSGBUF,MESG2,HDRL,04,05,06,R ;HEADER TO EOR PACK MSGBUF+HDRL,MESG2+HDRL,ELMSGL,03,05,06,X ;BODY Tu EODP10 ;TRANSFERS SKELETON, THEN FILLS IMAGE WITH INFO CLR EODW26 ;INT COUNT OF NULL MSG #'S REPORTED MOV R0,(SP) ;RETURN WITH R0 POINTING TO NEXT DST JSR R5,RESREG MOV (SP)+,(SP) ;POP STACKED INDEX RTS PC .PAGE ;THIS PATH IS TAKEN IF ANY OF THE "FORM" TYPE MESSAGE CALLS FINDS THE ;MESSAGE BUFFERS ALL TAKEN (A, HOPEFULLY, UNLIKELY SITUATION). ;WHAT WE DO IS SUSPEND THE TASK FOR 5 SECONDS OR SO, Tv DAYS IN INDEXED MONTH SUB R2,R1 ;KEEP GOING UNTIL RUN OUT OF DAYS BGT 2$ ADD R2,R1 ;STICK LAST ONE BACK IN MOV R1,TMPW01 ;DAY (OF MONTH) FOR NEXT E-O-D REPORT MOVB FILG1+TRMEOM,R1 ;EITHER 1 OR 2 FOR E-O-M DAY MUL #5,R1 ;MUST GET "FIRST" OR "LAST" ADD #EMDYTB-5,R1 MOV R1,EOMSRC ;SPECIAL TRANSFER PACKET W/OPEN SOURCE MOV TRMNDX,R1 ;INIT POINTERS TO "OUT" TAwR3 BCC 6$ ;NO NULL FOR THIS # MOV R2,EODW25 ;STORE BINARY OF THIS NULL MSG # MOV R1,-(SP) ;SAVE IT (MOVEX USES R1) 01.31.73 MOVE EODP14,,A ;NMN TO ASCII & ATTACH TO MSG MOV (SP)+,R1 ;RESTORE R1 01.31.73 INC EODW26 ;BUMP MSG COUNT CMP EODW26,#100. ;MESSAGE CAN HOLD MAX 100 NUMBERS BEQ 12$ ;GO SEND IT NOW xO ETX 01-29-73 PACK FMTSEQ,MSGBUF+HDRSEQ,HDRLSE,50 ;CVRT SEQUENCE # PAKEND PAKA10: ;FORM THE MESSAGE-NUMBER-OUT-OF-SEQUENCE WARNING MESSAGE PACK WRNTID,C.TRID,TRMLID,00 ;FILL WITH TERM ID PACK WRNMSG,MSGBUF+HDRSEQ,HDRLSE,00 ;FILL WITH MSG SEQ # PACK MESG2,WRNTXT,WRNMSL,00 ;XFER TO MSG AREA PAKEND PAKA60: PACK C.TRID,FMTPTA+TRMID,TRMLID,03,05 ;XFER TERM I.D. LOCAL 01-31-73 PAKEND PAKA70: ;PAyHEN RETURN TO THE ;"CALLER" AND TRY THE "FORM" AGAIN. I SAY "CALLER" INQUOTES BECAUSE ;THE LINK TO HERE IS VIA A JUMP. CLEVERLY,THOUGH, THE RETURN ADDRESS ;HAS ALREADY BEEN STORED IN [EODW25] IN ANTICIPATION OF THE HAPPENSTANCE ;THIS SEQUENCE HAS INFINITE LOOP POTENTIAL, IN THE EVENT THAT THE ;MESSAGE BUFFERS NEVER BECOME AVAILABLE. SO WATCH IT! EODR10: ;AS IT IS WRITTEN ABOVE MOV #EODX34,-(SP) ;PREPARE TO SUSPEND MOV #5,-(SP) ;5 SECONDS zBLE MUL #OUTL,R1 ;01-09-73 ADD #OUTST+OUTSEQ,R1 ;01-10-73 MOV (R1)+,R0 BIC #100000,R0 ;INP SEQ NUMBER MOV R0,TMPW02 ;SAVE FOR CONVERSION MOV (R1)+,TMPW03 ;ALSO THE OUT SEQ NUMBER ;FILL MESSAGE SKELETON WITH ALL DATA NEEDED FROM "TRM" FILE. ;THE REMAINING "MTR" DATA IS PROCESSED BELOW. MOVE PAKC01 .PAGE {AND THEN COME BACK TO 6$ 6$: INC R2 ;NEXT MSG # SOB R4,4$ BR 10$ ;DONE W/WORD 8$: ADD #16.,R2 ;SKIP ENTIRE WORD... 10$: TST (R5)+ ;BUMP TO NEXT ENTRY SOB R1,2$ ;...AND GET NEXT WORD TST EODW26 ;ANY NUMBERS TO REPORT IN THIS MESSAGE? BEQ EODC20 ;NO - SKIP SENDING ANY MORE NULL MESSAGE REPORTS 12$: CLR EODW26 ;RESET COUNT AND GET THE MESSA|CKET STRING BUILDS THE ERROR MESSAGE PACK MESG2+HDRTO,MESG2+HDRFR,HDRLFR,00 ;REVERSE ROUTE CODES PACK MESG2+HDRFR,HUBRTE,HDRLFR,00 .WORD MESG2+HDRACT+1 ;PROPER ACTION CODE PKA70S: .WORD 0 ;DYNAMIC SOURCEFOR A.C. .WORD HDRLAC,00 PACK FMTERN,ERRORX,2,54 ;CONVERT ERROR NUMBER PACK MESG2+HDRL,FMTEPH,FMTERL,00 ;XFER ERROR PHRASE TO W/A PAKEND ;**************************************************}EMT QTIME ;SUSPEND TASK TST (SP)+ BEQ 2$ ;WE ARE BACK, WITH NO PROBLEMS MOV #4000,R0 ;IT DIDN'T TAKE IT (I REALLY DON'T NEED SOB R0,. ;ALL THIS AGGRAVATION. LOOK AT ME CRYING (SOB) BR EODR10 ;TRY HIM AGAIN: WHAT WORSE CAN HE SAY BUT "NO". 2$: MOV EODW25,PC ;RETURN TO TRY AGAIN .PAGE SAVREG: .IRP X,<4,3,2,1,0> ;SAVE REGISTERS ON STACK: JSR R5,SAVREG MOV R'X,~ MOVB FILG1+TRMDST,R1 ;MUST FILL WITH "STD" OR "DST" MUL #3,R1 ADD #DSTTAB-3,R1 MOV #TXDST+TRMSKX,R0 ;INIT DEST. ADDR MOVB (R1)+,(R0)+ ;FILL WITH EITHER "STD" OR "DST" MOVB (R1)+,(R0)+ MOVB (R1)+,(R0)+ TSTB TLSTFG ;IS THIS FULL OR SHORT LIST? BEQ 20$ ;FULL MOVE PAKD01 ;SHORT: MOVE E-O-D STUFF TO TOP OF MSG BUFFER... BR CFGC30 ;...ANGE OFF MOVB #ETX,(R0)+ ;TIE OFF MESSAGE MOV #13$,EODW25 ;STORE RETURN ADDRESS FOR DELAY IF 01.27.73 ;MESSAGE AREA IS FULL 01.27.73 ; 01.27.73 13$: 01.27.73 CLR EODV10+MSPSVC ;SEND ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ********************* PAKA80: ;PACKET FOR TRANSFERRING ORIGINAL TEXT BEHIND ERR MSG PACK ,MSGBUF+HDRL,ELMSGL,00 PAKEND ;*********************************************************************** PAKA90: ;XFER ENTIRE TRANSACTION MESSAGE TO REAL MESSAGE AREA PACK MESG2,MSGBUF,MESG3-MESG2,00,X ;TO ETX PAKEND .PAGE WRNTXT: ;TEXT FOR THE MESSAGE NUMBER OUT-OF-SEQUENCE WARNING STDID HUBRTE HUBRTE -(SP) .ENDM JMP (R5) RESREG: TST (SP)+ ;CURRENT VALUE OF R5 NOT RELEVANT .IRP X,<0,1,2,3,4> ;POP STACK INTO REGS: JSR R5,RESREG MOV (SP)+,R'X .ENDM RTS R5 .PAGE .SBTTL LISTS, SKELETONS, ETC. .LIST ME ; REQUEST LISTS ; EODV10: MSPLST QUEODR ; MESSAGE CONTROL LIST MESGM EODV20: FLPLST TRM,EODW13 ; TRM FILE CONTROL LIST (TERMINAL DESCRIPTOR) FID BYPASS REST OF OP-02 ;01-08-73 20$: MOV #M1S1A+TRMSKX+5-8.,R2 ;POSITION @ FIRST "PB" ENTRY MOV #80.,R5 ;BREAK OUT OF LOOP AFTER 80 METERS MOV #MTR,CFFCL1 ;INIT FILE NAME CLR CFFCL2 ;BEGIN WITH TYPE I AND UNLOCKED CLR CFFCL6 ;INIT FOR FIRST TIME MOV #FILG1,R3 ;12-14-72 CFGC10: FILEF FLSNT,,,,,6$,6$ ;READ IN NEXT "MTR" ELEMENT ;01* * FILEF MSAT,EODV10,R0,#0,#0,EODR10 ; NULL MESSAGE NUMBER ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#3 ; MESSAGE TO D/C ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * MOV #6,-(SP) ;INDEX FOR NULL MESSAGE REPORT JSR PC,EODS40 ;BUILD I.D. 20 MESSAGE W/PROPER OP-CODE  .ASCII "000 0 " ;SEQ # AND PRIORITY .ASCII ".HA" .ASCII "FORMAT WARN #1; TERM I.D.:" WRNTID: .BLKB TRMLID .ASCII "; MSG #:" WRNMSG: .BLKB HDRLSE .BYTE ETX WRNMSL = .-WRNTXT ;LENGTH OF WARNING FMTEPH: .ASCII "FORMAT ERROR #" FMTERN: .ASCII " " ;ERROR NUMBER GOES HERE FMTERL = .-FMTEPH ;LENGTH OF ERR MSG .EVEN .PAGE TRMPAK: ;TRANSFERS TERMINAL FACILITY TABLLGM EODV30: FLPLST NMN,EODW13 ; NMN FILE CONTROL LIST (NULL MSG NO) ; ; DATA AREA ; EODX10: TNKFID ; TANK GAUGE FORMAT ID EODX11: INTID ; INTERCEPT ID EODX12: DCRTE ; DATACENTER ROUTING CODE EODX13: DCMANA ; MANUAL TRANSACTION TO DC ;CURRENT TIME: EODW10: .WORD 0 ; HOUR EODW11: .WORD 0 ; MIN EODW12: .WORD 0 ; HOUR+MIN EODW13: -17-73 .PAGE 6$: MOV #3,R1 ;3 AREAS PER SECTOR (EXCEPT LAST) ;12-14-72 7$: ;12-14-72 ADD #8.,R2 ;GET TO NEXT COLUMN IN LISTING MOV R2,MTASAD ;LOAD DESTINATION ADDRESS MOV #10.,R0 ;10 METERS/AREA 8$: MOV #2,MTRCNT ;2 DIGITS EACH FOR PROBE AND PRODUCT MOVB (R3)+,TMPW01 ;LOAD BINARY VALUE FOR PROBE # BNE  TST R1 ;IS LOOP STILL UNSATISFIED? BNE 6$ ;YEAH .PAGE ; ******************************************************************** ; SEND "CLOSE FOLIO" MESSAGE TO DATACENTER ; ******************************************************************** EODC20: MOV #4,-(SP) ;INDEX FOR "CLOSE DAILY FOLIO" MESSAGE BITB #2,FILG1+TRMAED ;IS E-O-M REQUIRED? BEQ 2$ MOV #2,(SP) ;YES: SET FOR "CLOSEE TO LOCAL WORK AREA PACK FMTPTA,FILG1,FLSL1,00 PAKEND AUTOPK: ;THIS IS THE STRING THAT DISSECTS THE RAW MESSAGE PACK C.RTCD,STLBGN+ELRCD,ELRCDL,03 01-29-73 PACK C.ACOD,STLBGN+ELACT,ELACTL,01 01-29-73 PACK C.MSGN,STLBGN+ELMSN,ELMSNL,01 01-29-73 PACK C.DATE,STLBGN+ELJUL,ELJULL,01 01-29-73 PACK C.TIME,STLBGN+E.WORD 0 ; TERMINAL INDEX FOR USE AS FILE LOC EODW14: .WORD 0 ; TERMINAL EOD TIME EODW15: .WORD 0 ; CURRENT YEAR EODW16: .WORD 0 ; DAY EODW17: .WORD 0 ; MONTH EODW18: .WORD 0 ; JULIAN DAY EODW19: .WORD 0 ; EOD SERVICED FLAG ; ; = 0 IF NO TERML HAD EOD ON SCAN EODW20: .WORD 0 ; TERMINAL EOD DATE (JULIAN) EODW21: .WORD 0  20$ ;IF ENTRY IS NON-ZERO: PRINT IT ;01-17-73 CMPB (R3)+,(R3)+ ;BUMP PAST PRODUCT & USE TYPE ;01-17-73 SUB #2,MTASAD ;MAKE IT LOOK AS IF WE PRINTED IT ;01-17-73 MOV MTASAD,10$ ;01-17-73 SUB #3,10$ ;INIT POINTER FOR BLANKING FIELD ;01-17-73 JSR R5,MOVC ;INIT THIS METER'S AREA W/BLANKS ;01-17-73 .WORD '  MONTHLY FOLIO" 2$: JSR PC,EODS40 ;BUILD I.D. 20 MESSAGE W/PROPER OP-CODE MOV #3$,EODW25 ;STORE RETURN ADDRESS FOR DELAY 01.27.73 ;IF MESSAGE AREA IS TEMPORARILY FULL 01.27.73 ; 01.27.73 3$: 01.27.73 CLR EODV10+MSPSVC ;SEND ; * * * * * * * * * * * * LTIM,ELTIML,01 01-29-73 PACK C.SPOT,STLBGN+ELSPN,ELSPNL,01 01-29-73 PACK C.CARN,STLBGN+ELCAR,ELCARL,01 01-29-73 PACK C.TRKN,STLBGN+ELTRK,ELTRKL,01 01-29-73 PACK C.CUSN,STLBGN+ELCUS,ELCUSL,01 01-29-73 PACK C.DRVN,STLBGN+ELDRV,ELDRVL,01 01-29-73 PACK C.SPTB,C.SPOT,ELSPNL,50 ;; ADDR OF RTE ENTRY EODW22: .WORD 0 ; ADDR OF QUE TABLE ENTRY EODW23: .WORD 0 ; ADDR OF LAST SEQ NO EODW24: .WORD 0 ; # OF DAYS IN CURRENT YEAR EODW25: .WORD 0 ; TEMPORARY EODW26: .WORD 0 ; TEMPORARY EODW27: .WORD 0 ; TEMPORARY EODW28: .WORD 0 ; TEMPORARY EODW29: .WORD 0 ; TEMPORARY EODW30: .WORD 0 ; TEMPORARY EODW31: .WORD 0 ;  ;01-17-73 10$: .WORD 0 ;DEST. ADDR ;01-17-73 .WORD 8. ;01-17-73 BR 30$ ;01-17-73 20$: JSR PC,CFGC80 ;CONVERT TO ASCII AND FILL LISTING ;01-17-73 SUB #5,MTASAD ;BACK UP TO PRODUCT # IN LISTING MOVB (R3)+,TMPW01 ;PRODUCT # JSR PC* * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#0,EODR10 ; CLOSE FOLIO ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#3 ; MESSAGE TO D/C ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * .PAGE ; ******************************************************************** ; UPDATE EODSPOT # TO BINARY PAKEND .PAGE TEMPAK: ;PACKET STRING FOR CONVERT-AND-STORE OF THE TEMPERATURES ;CONVERT TO BINARY FROM INPUT ASCII STRING ; DESTINATION IS PRESET INTO R0 PROBEN = 0 .REPT MXTMPS PROBEN = PROBEN+1 .WORD MSGBUF+HDRL+ELTMP+> .WORD ELTMPL .WORD MVCD50 .ENDM PAKEND .PAGE MTRPAK: ;PACKET STRING FOR CONVERT-AND-STORE OF REPORTED METER FTEMPORARY EODW32: .WORD 0 ;FLAG TO EXIT AFTER MSG QUEUE IS EMPTY ERRORX: .WORD 0 ;ERROR NUMBER .PAGE EODCAL: ;CALENDAR .BYTE 31.,28.,31.,30.,31.,30.,31.,31.,30.,31.,30.,31. EODX21: .ASCII /01/ ; OP CODE 01 - OPEN EODX22: .ASCII /05/ ; OP CODE 05 - CLOSE MONTH EODX23: .ASCII /07/ ; OP CODE 07 - CLOSE DAY EODX24: .ASCII /00/ ; OP CODE 00 - NULL SEQ NO. ; ; TIME DELAY SKELE,CFGC80 ;CONVERT AND STORE IT, TOO DEC MTRCNT ;ONLY 1 DIGIT FOR USE TYPE ADD #3,MTASAD ;AND POSITION FOR IT IN LISTING MOVB (R3)+,TMPW01 ;BINARY VALUE OF USE TYPE JSR PC,CFGC80 ;CONVERT AND STORE IT, TOO 30$: INC R3 ;GET TO NEXT METER'S ENTRY ;01-17-73 ADD #71.+2,MTASAD ;SKIP TO NEXT LINE, THIS COLUMN DEC R5 ;SEE IF THE 80 METERS ARE DONE BEQ /EOM DATES IN "TRM" ; ******************************************************************** ;NOW ADVANCE EOD & EOM JULIAN DATES IN "TRM". BUMP "TRMEDM" BY 1 ONLY ;IF EOD WAS JUST SCHEDULED (THAT IS, ONLY IS "TRMAED" HAS BIT #1 SET). ;THIS AVOIDS BUMPING A POST-DATED EOD. THE EOM DATE "TRMEMM" ;WILL BE RECALCULATED ONLY IF "TRMAED" HAS BIT #2 SET, INDICATING THAT ;AN EOM MESSAGE WENT OUT. TIMES AND DATES ARE ALWAYS KEPT IN TERM'S ZONE ;THEY ARE CONVERTED TO HUB TIME WHEN MAKING COMPARISONS LOWS ;CONVERT TO DOUBLE-PRECISION BINARY FROM INPUT ASCII STRING ; DESTINATION IS PRESET INTO R0 MTRNUM = 0 .REPT MXMTRS MTRNUM = MTRNUM+1 .WORD MSGBUF+HDRL+ELMTR+> .WORD ELMTRL .WORD MVCD51 .ENDM PAKEND .PAGE STATDR: ;DIRECTORY OF STAT LINE CONTROL PACKETS .WORD STAT60 ;USE #1: PRODUCT DISPOSAL .WORD STAT60 ;USE #2: FUELING TON FOR 30-SECOND WAIT... EODX30: .WORD 1 .BYTE TSEODR ;...THEN RE-QUEUE TASK .BYTE RES5 .WORD 0 EODX32: EODX34: ;TIME DELAY MODULE FOR WAITING FOR BUFFER .WORD 1 .BYTE 0 .BYTE 200+RES5 .WORD 0 ; EODX40: .ASCII "FIRST" .ASCII "LAST " EODX50: ;IMAGE OF SCHEDULER MODULE .WORD 1 .BYTE TASKNO .BYTE 200 ;USE REPEAT FEATURE EODX51: .WORD CFGC24 ;SKIP OUT OF LOOP: ALL DONE SOB R0,8$ ;LOOP FOR 10 METERS SOB R1,7$ ;LOOP FOR 3 AREAS PER SECTOR ;12-14-72 MOV #FILG2,R3 ;INIT FOR READING A TYPE II ;12-14-72 MOVB #2,CFFCL3 ;RESET TO READ TYPE II CELLS ;12-14-72 BR CFGC10 ;GO READ IN NEXT "MTR" CELL .PAGE CFGC24: ;NOW THAT MESSAGE IS BUILT, FORM A TYPE I AND AS MANY ;TYPE II CELEODC30: BITB #1,FILG1+TRMAED ;WAS THIS EOD? BEQ 4$ ;NO: JUST EOM MOV EODW15,EODW31 ;INIT EOD YEAR W/CURRENT YEAR MOV EODW18,R1 ;GET TODAY'S JULIAN DATE 01.27.73 INC R1 ;BUMP TO TOMORROW FOR NEW EOD DATE CMP R1,EODW24 ;NEW YEAR ROLL-OVER? BLE 2$ MOV #1,R1 INC EODW31 ;SHOW NEXT YEAR IN PRINTOUT 2$: MOV R1,FILG1+TRMEDM ;RESTO .WORD STAT10 ;USE #3: PRODUCT RETURN .WORD STAT70 ;USE #4: BULK RECEIPTS .WORD STAT30 ;USE #5: BULK DISPOSALS PRODIR: ;DIRECTORY FOR PRODUCT LINE CONTROL PACKETS .WORD PROD60 ;USE MODE #1 .WORD PROD60 ;#2 .WORD PROD10 ;#3 .WORD PROD70 ;#4 .WORD PROD30 ;#5 STAT10: ;STAT LINE FORMAT FOR I.D. =10 STAT30: STAT60: STAT7 0 ;WILL BE INITIALIZED TO QUARTER-HOUR .WORD 15. ;REPEAT EVERY QUARTER HOUR EODX60: ;SAVE BUFFER FOR NULL MESSAGE # TABLE IMAGE .BLKB FILAT-FILGL .PAGE EODOFM: ;OPEN FOLIO MESSAGE SKELETON ; MESSAGE SKELETON ; STDID ; HEADER HUBRTE ; DCRTE ; .ASCII /000/ ; .ASCII /0 / ; EODACT ; LS AS ARE NECESSARY; THEN ATTACH IT. ;01-17-73 ;FIRST REPLACE ALL TRAILING BLANKS IN EACH METER LINE WITH "DEL]'S, ;01-17-73 ;SO THAT THE "MOVE" WILL SQUEEZE THEM OUT AND AVOID NEEDLESS SPACING. ;01-17-73 MOV #10.,R3 ;# OF LINES TO PROCESS ;01-17-73 MOV #M1S1A+TRMSKX+4-8.+<8.*8.>,R0 ;POINTER ;01-17-73 10$: MOV R0,R1 ;RESET WORKING POINTER RE UPDATED EOD JULIAN 4$: BITB #2,FILG1+TRMAED ;WAS THIS ALSO EOM? BEQ EODC35 ;IF NOT, THEN BYPASS EOM UPDATE 01.27.73 MOV EODW17,R1 ;CURRENT MONTH INC R1 ;NEXT MONTH CMP R1,#12. BLE 6$ ;NO MOV #1,R2 ;INIT TO JAN 1 CMPB #1,FILG1+TRMEOM ;FIRST OF MONTH? BEQ 10$ ;YEAH: LEAVE IT MOV #31.,R2 ;INIT TO JAN0: PACK STLBGN+SXT1,C.INID,SXT1L,00 PACK STLBGN+SXT2,C.TRID,SXT2L,00 PACK STLBGN+SXT3,FMTZRO,SXT3L,00 01-31-73 PACK STLBGN+SXT4,C.CUSN,SXT4L,00 PACK STLBGN+SXT5,C.TRKN,SXT5L,00 PACK STLBGN+SXT6,C.CARN,SXT6L,00 PACK STLBGN+SXT7,C.DRVN,SXT7L,00 PACK STLBGN+SXT8,FMTZRO,SXT8L,00 01-31-73 PACK STLBGN+SXT9,C.DATE,SXT9L,00 PACK STL .BYTE EOR ; .ASCII "020" ;INPUT ID FOR OPEN, CLOSE FOLIO & NULL MSG RPT EODOF1: .ASCII " " ;TERMINAL I.D. EODOF2: .ASCII " " ;FOLIO # EODOF3: .ASCII " " ;OP CODE: 00 01 05 OR 07 EODOF4: .ASCII " " ;JULIAN DATE EODOF5: .ASCII " " ;HOUR EODOF6: .ASCII " " ;MINUTE EODOF7: .ASCII " " ;LAST MESSAGE NUMBER EODOF8 = . ;BEGIN OF FIELD 10: INDEFINITE LENGTH  ;01-17-73 20$: CMPB -(R1),#' ;BLANK? ;01-17-73 BNE 30$ ;NO: GO TO NEXT LINE ;01-17-73 MOVB #DEL,(R1) ;REPLACE WITH DELETE CHAR ;01-17-73 BR 20$ ;BACK TO CHECK NEXT CHAR ;01-17-73 ADD #71.,R0 ;ADVANCE POINTER TO [CR] AT END OF NEXT LINE ;01-17-73 30$: SOB R3,10$ ;DO NEXT LINE ;01-17- 31 BR 10$ 6$: CMPB #1,FILG1+TRMEOM ;FIRST OF MONTH? BNE 8$ ;NO: MUST BUMP BY # DAYS NEXT MONTH DEC R1 ;YES: USE #DAYS THIS MONTH 8$: MOVB EODCAL-1(R1),R2 ;# DAYS THIS/NEXT MONTH ADD FILG1+TRMEMM,R2 ;BUMP 10$: MOV R2,FILG1+TRMEMM ;RESTORE NEW EOM JULIAN .PAGE ; ******************************************************************** ; PREPARE DATA FOR TERMINAL'S EOD MESSAGE ; BGN+SXT10,C.TIME,SXT10L,00 PACK STLBGN+SXT11,FMTPTA+TRMFLN,SXT11L,54 ;CONVERT FOLIO # 01-31-73 PACK STLBGN+SXT12,SGNEOR+1,SXT12L,00 ;TIE OFF WITH EOR 01-31-73 PAKEND .PAGE ; CONTROL PACKETS FOR THE VARIOUS PRODUCT LINES PROD10: ;BULK RECEIPTS PROD30: ;BULK DISPOSALS ; DESTINATION PRESET INTO R0 BEFORE CALL PRNDX = 0 .REPT MXPR10 .WORD PIDASC+PIDIGS-BUK20L+ .EVEN ;ROUTINE DETERMINES END AND AFFIXES "ETX". EODP10: ;PACKET TO FORM I.D. 20 MESSAGE PACK MESG2,EODOFM,EODOF8-EODOFM,00 ;XFER SKELETON TO M/A PACK EODOF1-EODOFM+MESG2,FILG1+TRMID,EOD2L,00 ;TERMINAL I.D. PACK EODOF2-EODOFM+MESG2,FILG1+TRMFLN,EOD3L,14 ;FOLIO # .WORD EODOF3-EODOFM+MESG2 EODP11: .WORD 0 ;DYNAMIC SOURCE FOR OP-CODE .BYTE EOD4L,MVCD00 PACK EODOF4-EODOFM+MESG2,73 ;01-17-73 ;01-17-73 CLR CFIML6 ;INIT FOR FIRST CALL MOVEA TRMSKL,MESG2+HDRL,MESG3- ;FILL TYPE I CELL ;01-08-73 CFGC30: ;ENTER HERE TO FORMA AND ATTACH LISTING MESSAGES ;01-08-73 MOV #CFMORG,-(SP) ;01-11-73 JSR PC,CNVRTX ;SEE IF SE******************************************************************** ;CONVERT HUB TIME & DATE TO TERM TIME & DATE ;IN PREPARATION FOR MESSAGE TO TERMINAL ;FOR THE HOUR: HR(T) = HR(H) + Z(T) - Z(H) + DST(T) - DST(H) EODC35: MOV EODW10,R0 ;HUB HOUR MOVB FILG1+TRMTMZ,R1 ;TRM'S ZONE MOVB FILG1+TRMDST,R2 MOV EODW18,R3 ;INIT W/CURRENT JULIAN MOV EODW15,R4 ;CURRENT YEAR ADD R1,R0 ADD R2,R0  .WORD BUK20L .WORD MVCD00 .WORD TMPASC+TMPDGS-BUK21L+ .WORD BUK21L .WORD MVCD00 .WORD QTYASC+QTYDGS-BUK22L+ .WORD BUK22L .WORD MVCD00 .WORD SGNEOR .WORD 2 .WORD MVCD00 PAKEND PRNDX = PRNDX+1 ; ********** .ENDM .PAGE PROD60: PROD70: ; DESTINATION PRESET INTO R0 BEFORE CALL PRNDX =EODW18,EODOF5-EODOF4,12;JULIAN DATE PACK EODOF5-EODOFM+MESG2,EODW10,EODOF6-EODOF5,12;HOUR PACK EODOF6-EODOFM+MESG2,EODW11,EODOF7-EODOF6,12;MINUTE PACK EODOF7-EODOFM+MESG2,EODW30,EOD8L,12 ;LAST MESSAGE # PAKEND EODP14: ;CONVERT NULL MSG # TO ASCII & ATTACH IT TO MESSAGE ;01-23-73 PACK 0,EODW25,HDRLSE,12 ;01-23-73 PAKEND ;01-23-73 NDER IS A TERMINAL ;01-11-73 CMP (SP)+,#-1 ;IF HE IS, CHANGE HIS ACTION CODE ;01-11-73 BEQ 1$ ;OTHERWISE, LEAVE IT AS IS ;01-13-73 MOVB TRMACT+0,MESG2+HDRACT+0 ;01-11-73 MOVB TRMACT+1,MESG2+HDRACT+1 ;01-11-73 MOVB TRMACT+2,MESG2+HDRACT+2 ;01-11-73 1$: BIS #TYPF4,MESG1+TYPREC ;INHIBIT WRITE TO AUSUB #HUBZON+HUBDST,R0 BGE 2$ ADD #24.,R0 ;BRING TO TIME, 1 DAY EARLIER DEC R3 ;BACK UP DATE 2$: CMP R0,#23. BLE 4$ SUB #24.,R0 INC R3 ;ALREADY TOMORROW THERE CMP R3,EODW25 ;DID WE GO INTO NEXT YEAR? 01.27.73 BLE 6$ ;BRANCH IF NO 01.27.73 MOV #1,R3 ;YES WE DID - RESET TO JAN 1  0 .REPT MXPR60 .WORD PIDASC+PIDIGS-SXT20L+ .WORD SXT20L .WORD MVCD00 .WORD TMPASC+TMPDGS-SXT21L+ .WORD SXT21L .WORD MVCD00 .WORD QTYASC+QTYDGS-SXT22L+ .WORD SXT22L .WORD MVCD00 .WORD SGNEOR .WORD 2 .WORD MVCD00 PAKEND PRNDX = PRNDX+1 ; ********** .ENDM .END  .PAGE EODY00: ;SKELETON OF END-OF-DAY MSG TO TERMINAL STDID ;BEGIN HEADER HUBRTE EODY01: .BLKB HDRLTO ;DEST RTE CODE .ASCII " 000 1 " ;SEQ. # AND TRMAC1 ;TERMINAL ACTION CODE .ASCII .REPT EODFF .ASCII .ENDM .ASCII " *** TERMINAL SUMMARY ***" .ASCII " DATE = " EODY11: .ASCII " -" DIT TRAIL ;01-13-73 FILEF MSAT,CFIML,,,#0 ;FORM THE TYPE I CELL ;01-09-73 TSTB TLSTFG ;REQUIRE MULTIPLE "FORMS"? ;01-08-73 BNE CFGC40 ;NO - BYPASS FURTHER "FORMS" ;01-08-73 MOV #TRMSKL+MESG3-,4$ ;INIT MOVE SOURCE ADDR ;01-08-73 MOV #TXTEND-TRMSKL->,R5 ;# CHARS LEFT ;01-08-73 BLE CFGC40 2$: JSR R5,MOVA ;MOVE NEXT BLOCK INTO  01.27.73 INC R4 ;AND INCREMENT THE YEAR COUNTER 01.27.73 BR 6$ ;THEN GO STORE IT 01.27.73 4$: TST R3 BNE 6$ MOV #365.,R3 DEC R4 ;BACK UP YEAR BIT #3,R4 BNE 6$ INC R3 ;LAST YEAR WAS LEAP 6$: MOV R0,EODW25 ;SAVE TERM'S HOUR MOV R4,EODW27 ;TERM'S YEAR MOV R3;MONTH EODY12: .ASCII " -" ;DATE EODY13: .ASCII " " ;YEAR .ASCII " TIME = " EODY14: .ASCII " " ;HOUR EODY15: .ASCII " " ;MINUTE .ASCII "TERM ID = " EODY16: .ASCII " FOLIO = " ;TERM I.D. EODY17: .ASCII " INPUT NO = " ;FOLIO NO EODY18: .ASCII " OUTPUT NO = " ;INPUT NO EODY19: .ASCII " " ;OUTPUT NO .ASCII "EOD DAY = " EODY20: .ASCII " EOD(JULN) = " ;EOD DAY TYPE II AREA ;01-08-73 4$: .WORD 0 ;SOURCE ADDRESS ;01-08-73 .WORD MESG3 ;DESTINATION ADDRESS ;01-08-73 .WORD MESG4-MESG3 ;FILL TYPE II AREA ;01-08-73 FILEF MSAT,CFIML,,,#2 ;FORM TYPE II CELL ;01-09-73 ADD #MESG4-MESG3,4$ ;BUMP MOVE SOURCE POINTER ;01-08-73 SUB #MESG4-MESG3,R5 ;COUNT OFF # CHARS LEFT BGT ,EODW26 ;TERM(S JULIAN DATE ;NOW CALC CURRENT MONTH AND DAY OF MONTH FOR TERMINAL MOV #EODCAL,R5 ;LOAD ADDRESS OF CALENDAR 01.31.73 CLR R1 CLR R2 7$: INC R1 MOVB (R5)+,R4 ;DAYS IN SUCCESSIVE MONTHS SUB R4,R3 ;TRYING TO FIND WHICH MONTH IT'S IN BGT 7$ ADD R4,R3 ;FOUND IT: RESTORE FOR DAY OF MONTH MOV R3,EODW31 MOV R1,EODW32 ;NOW CALC EOD DRPT ;"ATTACH" MESSAGE ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * JMP EODRPT ;BACK TO TRY AGAIN .PAGE .SBTTL LOCAL SUBROUTINES EODS10: ;SUBROUTINE TO CHECK IF IT IS TIME FOR EOM/EOD [EO!] ;(R0)=JULIAN TARGET (EOM OR EOD); (R4)=FLAG FOR ASSOCIATED FUNCTION MOV EODW18,R1 ;TODAY'S JULIAN CMP R0,R1 ;TARG:NOW BEQ 4$ ;GO CHECK TIME BGT 6$ EODY22: .ASCII " EOD TIME = " ;EOD JULIAN DATE EODY23: .ASCII " EOM DAY = " EODY24: .ASCII " " ;"FIRST" OR "LAST" .REPT EODFF .ASCII .ENDM .ASCII EODY25: .EVEN .PAGE EODP20: ;PACKET STRING TO BUILD E-O-D MESSAGE FOR TERMINAL EODPC1 = MESG2-EODY00 ;CONSTANT OFFSET TO MESSAGE AREA PACK EODY01,FILG1+TRMRTE,HDRLTO,00 ;PUT DEST RTE CODE IN HDR PACK  2$ ;STILL MORE FOR ANOTHER TYPE II CELL CFGC40: FILEF MSAT,CFIML,,,#3 ;NOW ATTACH THE BEGGAR ;01-09-73 12$: JMP CFGA10 ;BACK FOR NEXT LINE (IF ANY) CFGC80: ;ROUTINE CONVERTS AND STORES ASCII FOR METER DATA LISTNG JSR R5,BASCNV ;CONVERT BINARY TO ASCII .WORD TMPW01 ;WE STORE THE BINARY VALUE HERE, FIRST MTASAD: .WORD 0 ;DESTINATION ADDRESS STORED HERE MTRCNT: .WORD 0 ;COUNT OF 1 OR 2 DIGITS DAY FROM EOD JULIAN DATE: MOV #EODCAL,R0 MOV FILG1+TRMEDM,R1 ;JULIAN EOD 8$: MOVB (R0)+,R2 ;#DAYS IN INDEXED MONTH SUB R2,R1 ;KEEP GOING UNTIL RUN OUT BGT 8$ ADD R2,R1 ;STICK LAST ONE BACK IN MOV R1,EODW28 ;SAVE FOR CONVERSION TO ASCII FOR MSG MOVB FILG1+TRMEOM,R1 ;"1" OR "2" FOR EOM DAY MUL #5,R1 ;MUST GET "FIRST" OR "LAST" ADD #EOD ;TOO SOON, UNLESS OUTTAGE DURING NEW YEAR CMP EODW17,#12. ;IS IT DECEMBER OUTSIDE? BNE 2$ ;NO: ASSUME BYPASSED DUE TO OUTTAGE CMP R0,#31. ;EO! DURING JAN? BLE 8$ ;YES: ASSUME POSTDATED 2$: BISB R4,FILG1+TRMAED ;MARK FOR EO! BR 8$ 4$: CMP EODW12,EODW14 ;TODAY IS DAY: CHECK TIME BGE 2$ BR 8$ 6$: SUB R1,R0 ;GET # DAYS FUTURE DELAYMESG2,EODY00,-1,00 ;XFER SKELETON TO MESSAGE AREA PACK EODY11+EODPC1,EODW32,2,12 PACK EODY12+EODPC1,EODW31,2,12 PACK EODY13+EODPC1,EODW26,2,12 PACK EODY14+EODPC1,EODW25,2,12 PACK EODY15+EODPC1,EODW11,2,12 PACK EODY16+EODPC1,FILG1+TRMID,7,00 PACK EODY17+EODPC1,FILG1+TRMFLN,2,14 PACK EODY18+EODPC1,EODW29,3,12 PACK EODY19+EODPC1,EODW30,3,12 PACK EODY20+EODPC1,EODW28,2,12  RTS PC DSTTAB: .ASCII "STD" .ASCII "DST" EMDYTB: .ASCII "FIRST" .ASCII "LAST " .PAGE .SBTTL OP CODE 04 CFGE00: ;OP CODE 04: "LIST ROUTING CODES" ;WILL PRINT ONE LINE FOR EACH INDEX SPACE IN "RTE", WHETHER OR NOT ZERO. ;IF THE ROUTE CODE IS ZERO, ONLY THE INDEX WILL PRINT. ;01-13-73 ;IF THE ROUTE CODE IS NOT ZERO, THAT CODE WILL BE PRINTED. ;01-13-73 ;THE TERMINAL ID WILL BE PRINTED ONLY IF THAT ELX40-5,R1 MOV R1,EODP21 ;LOAD SOURCE ADDRESS INTO TRANSFER PAKET MOV EODW13,R1 ;TERM'S INDEX MUL #OUTL,R1 ;MULTIPLY BY THE NUMBER OF BYTES 01.27.73 ;PER 'OUT' TABLE ENTRY 01.27.73 ADD #OUT+2,R1 MOV (R1)+,R0 MOV R0,EODW29 ;SAVE FOR CONVERSION MOV (R1),EODW30 ;OUTPUT SEQ # ;THIS ONE CALL - IN A SINGLE STROKE - MOVES THE MESSAGE  CMP R0,#EODMDY ;MAXIMUM DELAY BLE 2$ 8$: RTS PC .PAGE EODS20: ;DELAY 1 SEC SUBROUTINE MOV #EODX34,-(SP) MOV #1,-(SP) EMT QTIME TST (SP)+ BEQ 2$ MOV #4000,R0 SOB R0,. BR EODS20 2$: RTS PC .PAGE ;THIS SUBROUTINE CONVERTS THE TERMINAL'S EOM & EOD TIME TO HUB TIME. ;IN THE PROCESS IT ADJUSTS THE EOD DAY IN ALLOWING FOR PACK EODY22+EODPC1,EODW20,3,12 PACK EODY23+EODPC1,EODW14,2,14 PACK EODY23+2+EODPC1,EODW14+1,2,14 .WORD EODY24 EODP21: .WORD 0 ;"FIRST" OR "LAST" .BYTE 5,0 PAKEND .PAGE EODEM0: ;SKELETON FOR EOD ERROR MESSAGE TO HUB CONSOLE INTID HUBRTE .ASCII /000/ .ASCII /0 / EODACT .ASCII .ASCII "EOD ERROR # " EODEM1: .ASCII " " .EVEEMENT EXISTS IN "TRM". ;01-13-73 MOVEC " ,MESG2,MESG3-MESG2 ;CLEAR MESSAGE BUFFER W/SPACES MOVE PAKE01 ;PUT TITLE LINE IN MESSAGE BUFFER MOV #RTEST,R2 ;BGN OF "RTE" TABLE CLR TRMNDX 2$: CMP (R2),#-1 ;END? BEQ 6$ ;GO PRINT IT MOV R0,R3 ;SAVE DEST POINTER MOVEC " ,RTELN2,RTEL2L ;RESET SKELETON WITH BLANKS ;01-14-73 MOVE PAKE02 ;CONVERT INDSKELETON TO THE ;MESSAGE BUFFER, THEN FILLS IT WITH ALL DATA NEEDED FROM THE "TRM" FILE ;AND FROM THE INITIALIZED LOCAL BINARY STORAGE. CONVERSION TO ASCII IS ;SPECIFIED AS NEEDED IN THE TRANSFER PACKET STRING, AND IS MADE PRIOR TO ;THE TRANSFER OF THAT PARTICULAR DATUM. MOVE EODP20 ; ******************************************************************** ; OUTPUT THE EOD MESSAGE TO THE TERMINAL ; ********************************************************************  TIME ZONE ;DIFFERENCES EITHER WAY, FOR DIFFERENCES IN DAYLIGHT SAVINGS TIME STATUS ;FOR GOING BACKWARD OR FORWARD THROUGH MIDNIGHT, AND FOR GOING BACKWARD ;OR FORWARD THROUGH NEW YEAR'S. THE BASIC CONVERSION FORMULA IS: ; HOUR(H) = HOUR(T) + ZONE(H) - ZONE(T) + DST(H) - DST(T) ;CONDITIONS UPON ENTRY: (R0) = JULIAN DATE FOR TERM'S EOD OR EOM EODS30: MOVB FILG1+TRMEOD+1,R1 ;TERM'S EOD TIME (HOUR) MOVB FILG1+TRMTMZ,R2 ;TERM'S TIME ZONE MON EODP30: ;PACKET STRING TO FILL AND XFER ERROR MESSAGE PACK EODEM1,ERRORX,2,12 ;CONVERT ERROR NUMBER PACK MESG2,EODEM0,-1,00 PAKEND .END @R7I&I0@ O @R7I&I0@ D @R7I&I0@ D @R7I&I0@ EX & STORE INTO SKELETON ;01-11-73 TST (R2) ;IS "RTE" ENTRY EMPTY? ;01-11-73 BEQ 4$ ;YES: LINE WILL CONTAIN ONLY INDEX # ;01-11-73 MOV R2,PKE3SR ;SET UP DYNAMIC SOURCE POINTER ;01-11-73 MOVE PAKE03 ;STORE ROUTE CODE INTO SKELETON ;01-11-73 JSR PC,INTRMU ;READ IN "TRM" WITHOUT LOCK ;01-11-73 BR 4$ ;THERE OUGHT TO BE AN ELEMENT  EODC40: ;01-23-73 CLR EODV10+MSPSVC FILEF MSAT,EODV10,,,#0 ;FORM TYPE I CELL FILEF MSAT,EODV10,,,#3 ;ATTACH TO EOD "INPUT" QUEUE ; ******************************************************************** ; WRITE UPDATED "TRM" BACK TO DISC ; ******************************************************************** ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * VB FILG1+TRMDST,R3 ;DAYLIGHT TIME INDICATOR ADD #HUBZON+HUBDST,R1 ;ADD IN HUB'S ZONE & DST SUB R2,R1 SUB R3,R1 BGE 2$ ADD #24.,R1 ;HOUR WENT BELOW 00 DEC R0 ;EOD @ TERM HAPPENS DAY BEYOND DAY AT HUB 2$: CMP R1,#23. BLE 4$ SUB #24.,R1 ;HUB'S ALREADY IN NEW DAY @ TIME OF TERM EOD INC R0 ;IN HUB TIME, IT IS NEXT DAY 4$: TST R0 @R7I&I0@ @R7I&I0@ FOR NON-ZERO CODE;01-11-73 MOVE PAKE04 ;STORE TERMINAL ID INTO SKELETON ;01-11-73 4$: MOVB #CR,(R0)+ ;TIE OFF LINE IN SKELETON ;01-11-73 MOVB #LF,(R0)+ ;01-13-73 MOVB #EOR,(R0)+ ;CAUSES XFER TO MSG BUF TO TERMINATE ;01-11-73 MOV R3,R0 ;RESTORE POINTER TO MSG BUF ;01-11-73 MOVE PAKE05,,A ;XFER LINE UP TO EOR TERMINATOR ;* * * * FILEF FLWR,EODV20,R0,#0,#0 ;WRITE BACK UPDATED "TRM" ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * .PAGE ; ******************************************************************** ;NOW RESTORE ZEROED IMAGE OF NULL M.N.T. TO THE FILE WORK AREA. THE ;POINT OF USING "MOVEA" IS TO TRANSFER THE HEADER. ; ******************************************************************** MOVEA EODX60,FILGL,FILAT-FILGL ; * * * * * * * * BNE 6$ MOV EODW24,R0 ;JULIAN WENT BACK TO ZERO: REPLACE WITH ; LAST DAY OF CURRENT YEAR: WILL WORK FOR BOTH POSTDATED EOD'S AND ;BYPASSED EOD'S OR EOM'S 6$: CMP R0,EODW24 ;GO PAST END OF YEAR? BLE 8$ MOV #1,R0 ;INIT TO FIRST OF NEXT 8$: SWAB R1 ;NOW FORM HOUR:MIN WORD BISB FILG1+TRMEOD,R1 ;EOD/EOM TIME IN HUB TIME MOV R1,EODW14 ;SAVE IT MOV R0,EODW20 ;SAV 0 6012 0564500 7*0401 RYNT ESD LTOS NTOI POW;N 4 ,RR0 V MO 4 0010 0544500 6*0401 D!UNFO; 5*0401 4*0401 O ;N D4MOSR E BN 7 3601 0524500 3*0401 020000  2 0000 0  ? CHAT MMENAF-AL HNDCOSE: ES;Y ) R02(),R42( P CM 0 4626 0444500 2*0401 O ;N D4MOSR E BN 3 3701 0424500 1*0401 ? CHAT MMENAF-AL HSTIR;F ) R0,(4)(R P CM: D3MOSR0 4121 0404500 0*0401 D1C01-17-73 DEC R0 ;BACK POINTER OVER EOR (DON'T SEND IT) ;01-11-73 INC TRMNDX ;NEXT INDEX # ;01-11-73 ADD #RTEL,R2 ;GET TO NEXT ENTRY IN "RTE" ;01-11-73 BR 2$ 6$: MOVB #ETX,(R0)+ ;TIE OFF MESSAGE MOVB #1,TLSTFG ;PREVENT MULTIPLE "FORMS" ;01-08-73 JMP CFGC30 ;...AND GO OUTPUT IT ;01-08-73 .SBTTL * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLWR,EODV30,R0,#0,#0 ;WRITE NULL M.N.T. BACK, CLEARE ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; ******************************************************************** ; CLEAR OUT THE "MESSAGE NUMBER TABLE" ; ******************************************************************** EODC80: ;NOW CLEAR MESSAGE NUMBER TABLE AND CLEAN UP ;01-23-73 MOV #MNT,EODV30+E EOD DATE RTS PC .PAGE EODS40: ;THIS SUBROUTINE BUILDS AN I.D. 20 MESSAGE IN THE ;MESSAGE BUFFER AREA, AND FILLS IT WITH THE PROPER OP-CODE. ;IT ALSO STICKS IN THE "LAST MESSAGE #", TAKEN FROM THE "OUT" ;TABLE. THE OP-CODE TO USE IS SPECIFIED BY THE NUMBER ON THE ;STACK, WHICH IS USED TO INDEX INTO A LIST OF OP-CODES. ;IT IS ASSUMED THAT THE TERMINAL'S "RTE" INDEX IS AVAILABLE ;IN "EODW13". JSR MOSR BR 2 7600 0364500 9*0301 120000  OD MJB OANT NO ; R0M,SYBP # DD A4:ODRM S0027062 5304 0 * 3810 0 E?AM SMENAS IS:YE ; 3 ODRM S EQ B 0314000 5304 0 * 3710 05 0000 0  000000  ? MENAD MOJ OBN ARYNG EISTH);R01(S+AGFLN,JMOB # B MP C2:ODRM S6027122 5204 0 * 3610 0C P TS R 0702000 5204 0 * 3510 02 0000 0  " NDOU FOT"NR FON URET RERLT;A ) SP,(#2 D AD 6 7162 0144500 4*0301 ! NDOU FOT;N ?OP CODE 05 CFGF00: ;OP CODE 05: DELETE "TRM" ELEMENT MOV TRMNDX,R1 BPL 2$ ERR ;NO DELETE IF DOESN'T EXIST 2$: MUL #RTEQNM*2/2,R1 ;INDEX TO "RTE" ;01-13-73 ADD #RTEST,R1 CLR (R1)+ ;WIPE OUT THIS ENTRY CLR (R1)+ CLR (R1)+ MOV #NAMLST,R4 4$: MOV (R4)+,CFFCL1 ;NEXT FILE'S NAME BEQ 8$ ;END OF LISTFLPNAM ;READ IN CLR EODV30+FLPSVC ; MESSAGE SEQUENCE ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLSNT,EODV30,R0,#2,#0 ; NUMBER TABLE ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * MOV #FILG1,R0 ;WILL CLEAR ENTIRE MNT... MOV #MNTTSZ,R1 ;...IN PREP FOR WRITE-BACK 2$: CLR (R0)+ SOB R1,2$ ; * * * * * * * * * * * * R0+,P)(S V MO 0 6012 0124500 3*0301 ET YOT;N D2MOSR O BL 4 4003 1104500 2*0301 144000  ? ESINEF DOFD END HEACRE ; MESY0, R MP C1:ODRM S6700024 5004 0 * 3110 00 0211 0  D LSF ORTTA;S R0N,BGSD#L V MO 0'7012 0004500 0*0301 ITE AV;S P)(S,-R0 V MO 6 0410 0764400 9*0201 8*0201 NDOU FOT;N BR B ; 7*0201 NDOU;F AR B ; - EXIT ;01-09-73 MOV #2,CFFCL2 ;WRITE LOCK CLR CFFCL6 ;1ST TIME FILEF FLSNT,,,,,6$ ;NO DETACH IF NOT FOUND FILEF FLDT ;DETACH FILE ELEMENT 6$: BR 4$ ;LOOP BACK FOR NEXT FILE ;01-09-73 8$: JMP CFGA10 ;BACK FOR NEXT LINE ;01-09-73 .PAGE .SBTTL OP CODE 20 .ENABL LSB CFGG00: ;OP CODE 20: U* * * * * * * * * * * * * * * * * * * * FILEF FLWR,EODV30,R0,#0,#0 ;WRITE MNT BACK, CLEARED ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * .IF NE .CITGO ;NOW WE'LL FORMAT AND SEND A 'REQUEST 01.31.73 ;TO PRINT TOTALS' MESSAGE TO THE HUB 01.31.73 MOVE EODP40 ;SOFTWARE 01.31.73 FILEF MSAT,EODV10,R0,#0,#0 ;SEND TH 0@&I7I@R @ I0I&R7 @ 0@&I7I@R D 8 ; 6*0201 DNMOSRC, PSR J : LLCA ; 5*0201 NDOU FOT NIFD GEANCHUN4 R ; 4*0201 D)UNFOF (ID LSN IMENAO TTSINPO4 RT:PUUT O ; 3*0201 MENA0 D5RAO TTSINPO4 R: UTNP I ; 2*0201 MENAE ULOD M AOR FSD LOFN IOCTSED NEFIDEH RCEA;S : DNMOSR 1*0201 507::3231: 02 -7294- 1 4 E AGP  E AG.P 7PDATE "TRM" INVOICE DATA ;INCLUDES TERMINAL ID, SHIPPED-FROM DESCRIPTION, ETC. ;01-13-73 JSR PC,DCHECK ;SEE IF SENDER IS THE DATA CENTER ;01-14-73 BR 10$ ;NO DICE ;01-14-73 JSR PC,INTRML ;READ IN "TRM" WITH LOCK BR 4$ ;NOT FOUND MOVE PAKG01,8$ ;XFR DATA FROM MSGBUF TO "TRM" IMAGE ;01-17-73 CFGG10: JSR PC,OUTTRM ;WRITE "TRM" BACK OUT E MESSAGE 01.31.73 FILEF MSAT,EODV10,R0,#0,#3 01.31.73 JMP EODC10 ;BACK FOR MORE .PAGE .SBTTL PHASE #3 ; ******************************************************************** EODD00: ;ENTRY POINT AFTER 2ND 30-SEC DELAY ; ******************************************************************** DEBUG 100 MOV #RTEST-RTEL,R5 ;INIT PNTR TO "RTE" EODD10: ADD #RTEL, 0@&I7I@R D 0@&I7I@R O 0@&I7I@R ND.E C ND.E 731..301 NDKEPA 731..301 0 ,0LSTATOX-ALOT,TLSTATO2,SGME CKPA 731..301 : 404 0*0201 761500  RTRPERC, P SR J 6747002 4704 0 * 1910 06 0200 0  " S!LKFO, LL A'SATTHH--TTH "W:LORFVE;O R46,#2 V MO: 26ERLD4 7012 0664400 8*0101 PC S RT 7 2000 0644400 7*0101 D HEACRED ENE BLTAL BOYM;S 26ERLD I BH 1 0001 1624400 6*0101 264701  4 0604 0  M SYBPD-ENSD#LE,YMUS P CM 7'7226 0544400 5*0101 OWFLEROVE BLTAL BOYM SOR FCKHE;C : VFMOSY 3 JMP CFGA10 ;BACK FOR NEXT LINE (IF ANY) 4$: ERR ;"TRM" NOT FOUND 8$: ERR ;CHAR CHECK FAILURE 10$: ERR ;SENDER WAS NOT THE DATA CENTER ;01-14-73 .DSABL LSB .PAGE .SBTTL OP CODE 21 CFGH00: ;OP CODE 21: UPDATE "TRM" PROD-GRAV GRP TABLE JSR PC,DCHECK ;SEE IF SENDER IS THE DATA CENTER ;01-14-73 BR 34$ ;NO SOAP R5 MOV RTEID(R5),R0 BEQ EODD10 ;NULL ENTRY CMP R0,#-1 BNE EODD14 CLR SYDST+SYDED1 ;RESET COMMON CORE ENTRY-POINT FLAG JMP EODRPT ;AND RESTART IN CASE MORE MESSAGES IN ; ******************************************************************** EODD14: ;FOR EACH TERMINAL THAT HAD AN EOD, CLEAR THAT FLAG IN ;ITS FACILITY TABLE & RELEASE THE INHIBIT OF ITS INPUT ; ****************DPEO 731..301 GOIT.C E FN.I NDKEPA 001,,-M0DEEO2,SGME CKPA R BEUM NORRR ERTVEON;C 122,X,ORRR,EM1DEEO CKPA E AGSSMER ROERR FE XND ALLFIO TNGRISTT KEAC;P : 30DPEO N VE.E X>ET < "" IISC.A: M1DEEO " #ORRR EOD"E IISC.A > OR TX LF> LF> OR ;SAVE REGISTERS ON STACK: JSR R5,SAVREG MOV R'X,-(SP) .ENDM JMP (R5) RESREG: TST (SP)+ ;CURRENT VALUE OF R5 NOT RELEVANT .IRP X,<0,1,2,3,4> ;POP STACK INTO REGS: JSR R5,RESREG MOV (SP)+,R'X .ENDM RTS R5 .PAGE 01.27.73 ;***********************************************************************01.27.,10.#6 B SU 737..201 K OREY'HE T -ES YIFH NCRA;B 00JAAD T BL 737..201 ? 60= >ESUTIN MRE;A 0.#6),SP.(10 P CM 737..201 R1D AN0 R; P)(S,-R0 V MO 737..201 S ERSTGIREE AV;S P)(S,-R1 V MO 737..201 : STJUAD 737..201 .N M ND.E RXROER CBIN -1RNROER = RNROER UMRNER T EP.R ME T IS.L 738--001 ; G.INSTLIM RAOGPRN AI MHE TIN" UMRNER;" 738--001 ;F OUEAL VHE TASR BEUM NTS ITECALO, ORRR EHE TOFE RCOU SHE TTECALOO ;T ":DELI"SS HI TGHOUHR TNGSIESOCPRR ROERR TEENS GESAES MORRR ELL;A +1UMRNER = RNROER ORRR EDECOP ;O R ER: RRCEOP 739--001 ; . ALINRMTEA S IERNDSEE THF IERNDSEE THO TND;A 739--001E;OL:TE LOCK OFF. ;A GOOD READ RETURNS TO CALL+4; A NO-FILE ERROR RETURNS TO CALL +2. ;01-08-73 ;ANY OTHER ERROR ABORTS HERE WITH AN ERROR MESSAGE OUTPUT. INTRMU: CLRB CFFCL2 ;WRITE UNLOCK BR INTRM1 INTRML: MOVB #2,CFFCL2 ;WRITE LOCK INTRM1: MOVB #1,CFFCL3 ;READ TYPES I & II MOV #TRM,CFFCL1 ;INIT FILE NAME MOV R0,-(SP) ;01-13-73 CLR CFFCL6 ;FIRST TIME ;73 ;* **01.27.73 ;* A D J U S T **01.27.73 ;* **01.27.73 ;* THIS SUBROUTINE CHECKS THE TIME/DAY ON THE STACK AND CORRECTS **01.27.73 ;* THE VALUES IS ANY ARE BEYOND THEIR ALLOWABLE MAXIMUMS. **01.27.73 ;* FOR EXAMPLE, IF MINUTES = 75, THEN 60 IS SUBTRACTED FROM THE **01.27.73 ;* MINUTE ; 731..301**********************************************************************;* 731..301** ;* 737..201** D.VESAE ARS ERSTGIRE. 17DWEO LEABRIVA ;* 737..201** HE TIND RETO SAS, THON MNTREUR CHE TESUSE INUTROUB SISTH ;* 737..201** ;* 737..201** S TENUMID TEUSDJ;A TENUMI+,P)(S V MO ;* 737..201** NSCOB HUE THO TUTTPOUN HE TISE AGSSMES HI TE.AGSSMER ROERE THO NT;I 739--001 ; EDORSTD ANI CIASO TEDRTVEON CISR BEUM NORRR EHE TG:INSSCERO PORRR;E NGSIESOCPRR ROER TLBT.S E AG.P 738--001 ; B LS BLSA.D 734--101 ; PC S RT : 2$ 739--001 ; ITH ACTT;A $ ,22$3,,#,,MLFI,CATMS F LEFI 739--001 ; E AGSSMEM OR;F $ ,22$0,,#,,MLFI> FILEF FLSNT,,,,,2$ ;ERR RETURN GOES TO CALL + 2 ADD #2,2(SP) ;SUCCESSFUL RETURN GOES TO CALL+4 ;01-13-73 2$: MOV (SP)+,R0 ;01-13-73 RTS PC ;*********************************************************************** OUTTRM: ;ROUTINE TO WRITE "TRM" BACK TO DISC CLRB CFFCL2 ;RELEASE LOCK AFTER WRITE IS DONE FILEF FLWR ;WRITE OUT "TRM" TO UPDATE AND/OR RELEASE LOCK?S VALUE (LEAVING 15), THE HOUR IS INCREMENTED AND **01.27.73 ;* COMPARED TO ITS MAXIMUM VALUE. THIS LOGIC EXTENDS UP TO **01.27.73 ;* AND INCLUDING THE YEAR. **01.27.73 ;* **01.27.73 ;* THE LINKAGE TO SUBROUTINE ADJUST IS: **01.27.73 ;* **01.27.73 ;* MOV MINUTE,-(SP) URHOD TEUSDJ;A URHO+,P)(S V MO ;* 737..201** Y DAD TEUSDJ;A Y DA+,P)(S V MO ;* 737..201** ERULEDCH SOR FATRMFOD KEAC PET;G EDCKPA+,P)(S V MO ;* 737..201** ;* 737..201** : OFT ISNSCO ;* 737..201** ENTHD ULWOP NUEACLK ACST K.ACSTE THO NT OEDSHPUD AN ;* 737..201** T MAOR FERULEDCH,CATMS F LEFI E IM TSTIR;F L6IMCF R CL 731--101 ;L AITRT DIAUO TTERI WITIBNH;I C REYP+TG1ES,MF4YP#T S BI ESAGSSMER ROERE THR FOT INPOY TRENO LS AISS HI;T : T2REOK E AGSSME" OK "HE TLDUI;B 90KXPA VEMO E OLNSCOB HUE THO TGESAES M.".K"OE THD EN;S : TNREOK 738--001 ; B LS BLNA.E E AG.P ********************************************************************** RTS PC ;UNCONDITIONAL RETURN ;*********************************************************************** .PAGE ;01-14-73 RLSEFL: ;SUBROUTINE TO RELEASE RESIDENT FILE IF STILL WRITE-LOCKED CMPB CFFCL2,#2 ;STILL WRITE LOCKED? BNE 2$ ;NO CLRB CFFCL2 ;RELEASE LOCK FILEF FLSNT,,,,,2$,2$,2$ ;SCAN CAUSES LOCK RELEASE 2$: RTS PC ;* **01.27.73 ;* MOV HOUR,-(SP) **01.27.73 ;* MOV DAY,-(SP) **01.27.73 ;* JSR PC,ADJUST **01.27.73 ;* **01.27.73 ;* CORRECTED VALUES ARE LEFT ON THE STACK. IN ADDITION, THE **01.27.73 ;* DAY/HOUR/MINUTE VALUES ARE PACKED IN THE S