.SBTTL SECTOR(S) OTHER THAN ADDRESSED SECTOR. .TITLE DDCAD1 DDC ADDRESS TEST #1: CHECKS FOR DATA ALTERATION IN ; DDC ADDRESS TEST #1 ; CHECKS FOR DATA ALTERATION IN SECTORS OTHER THAN ADDRESSED SECTOR. ; CLEAR ENTIRE DISC ; WRITE ALL ONES IN THE TEST SECTOR ; DO A WRITE CHECK ON REST OF DISC. ; IF ANY BUT THE TEST SECTOR SHOWS A WRITE CHECK ERROR, HALT. ; CLEAR TEST SECTOR, AND REPEAT 32 768 TIMES. ; (THE TEST SECTOR START&(  s.  x h!  .& j!h!ߋ eh!p.L xEf!f!x.r l!f!ߋ  n!/.  h! h! j!. ߋ5   f!Y.  n! h!eWt _. !eh!:'n!0 ,  x h!  ,& j!h!ߋ eh!u,L xEf!f!x,r l!f!ߋ  n!4,  h! h! j!, ߋ5   f!^,  n! h!eWt _ , !eh!:'n!,0!j!f!ߋ  x .SBTTL CHECKS FOR EXISTENCE OF ALL ADDRESSES ON DISC SURFACE .TITLE DDCAD2: DDC ADDRESS TEST #2 ; FOR THE 4-MEGABYTE DISC (32 768 SECTORS) ; THIS TEST RUNS TO SUCCESSFUL COMPLETION IN ___ SECONDS ON THE 11/45 ; CLEAR ENTIRE DISC ; WRITE EACH WORD IN A SECTOR WITH THAT SECTOR'S NUMBER. ; WHEN FINISHED WRITING ENTIRE DISC, WRITE-CHECK EACH SECTOR . R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 $SWR = 177570 $DCS = S WITH THE DATA IN CONSOLE SWITCHES 1-14) ; (IT IS INCREMENTED EACH CYCLE, UNLESS SWITCH #15 IS SET) ; GOOD HALT WITH ALL ONES IN DATA DISPLAY. R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 $SWR=177570 $DCS = 165300 $WC = 165302 $CMA = 165304 $DAR = 165306 $DER = 165310 ; DDC DISC PARAMETERS: ; SECTORS 100000 (32 768) ; TRACKS 1000 (512) ; .0!j!f!ߋ  x"V! f!  V! f!  165300 $WC = 165302 $CMA = 165304 $DAR = 165306 $DER = 165310 BUFBGN = 40000 ;CORE BUFFER: 100000 BYTES LONG .PAGE .ASECT .=30000 .ENABLE AMA START: RESET MOV #START,SP MOV #1,$SWR ; FIRST, CLEAR ENTIRE DISC MOV #BUFBGN,R0 MOV #40000,R1 ;# OF WORDS IN BUFFER AA: CLR (R0)+ ; ZERO THE BUFFER WORDS/SECTOR 100 (64) ; SECTORS/TRACK: 100 (64) ; WORDS/TRACK: 10000 (4096) .PAGE .ASECT .=20000 .ENABLE AMA ;DO ABSOLUTE ADDRESSING START: RESET MOV #START,SP MOV #1,$SWR MOV #400,$DCS ;RESET CLR SECTOR MOV #32.,R4 ;32 LOOPS OF CLEAR A: MOV #400,$DER ;CMA INH &(00c.00x@@ B~0 0.&0 0e0~x  0@q.L0@T~ ~ 0e0P'0xK.r00x@$.000ߋ  000,00x@@ B~0 0,&0 0e0~x  0@v,L0@T~ ~ 0e0P'0xP,r00x@),000ߋ  00 SOB R1,AA ; BUFFER: 100000 BYTES / 40000 WORDS / 400 SECTORS [ALL OCTAL] MOV #200,R0 ;LOOP COUNT MOV #3,COMAND ;SET UP FOR BOTH ZEROING AND INITING CLR SECTOR BB: JSR PC,GO ; ZERO 256 SECTORS ADD #400,SECTOR SOB R0,BB .PAGE ; NOW INIT ENTIRE DISC . EACH WORD IN A SECTOR IS THAT SECTOR'S NUMBER ; BUILD 400 (256) SECTORS AT A TIME AND WRITE THEM TO DISC ;  CLR $WC ;16 TRACKS (200000 WORDS) (1024 SECTORS) MOV #ZERO,$CMA MOV SECTOR,$DAR MOV #3,$DCS ;WRITE ZEROES TSTB $DCS BPL .-4 TST $DCS BPL .+4 HALT ;STATUS ERROR ADD #2000,SECTOR SOB R4,A .PAGE MOV #400,$DCS ;RESET DISC MOV #100000,R5 ;DO TEST FOR EACH SECTOR MOV $SWR,R0 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: THIS LOOP IS REPEATED ONCE TO PERFORM THE WRITE-CHECK MOV #2,$SWR ;PHASE #2 CC: MOV #128.,R5 ; 128 LOOPS OF INIT AND WRITE-CHECK CLR R1 ;SECTOR INIT # CLR SECTOR ;START SECTOR FOR ACTUAL OPERATION DD: MOV #256.,R3 ; 256 SECTOR-BLOCKS IN BUFFER MOV #BUFBGN,R4 EE: MOV #64.,R0 ;WORDS/SECTOR FF: MOV R1,(R4)+ ;INIT BUFFER SOB R0,FF INC  BIC #100000,R0 ;SELECTED START SECTOR MOV R0,TSTSEC B: MOV TSTSEC,$SWR ;UPDATE DISPLAY MOV #-64.,$WC MOV #400,$DER ;CMA INH MOV #ONES,$CMA MOV TSTSEC,$DAR MOV #3,$DCS ;WRITE ONE SECTOR TSTB $DCS BPL .-4 TST $DCS BPL .+4 HALT ;STATUS ERROR .PAGE ; NOW DO A WRITE CHECK ON THE ENTIRENG 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  R1 ; NEXT SECTOR INIT # SOB R3,EE JSR PC,GO ;WRITE OR WRITE-CHECK FOR 256 SECTORS ADD #400,SECTOR SOB R5,DD ;GO BACK FOR NEXT BUFFER-FULL UNTIL DONE CMP COMAND,#7 ;DONE WRITE-CHECK YET? BNE GG ;NOT YET MOV #-1,R0 MOV R0,$SWR HALT ;GOOD HALT BR .-2 GG: MOV #7,COMAND ;SET UP FOR WRITE- DISC, 16 TRACKS AT A TIME. ; IGNORE W-C ERROR ON TEST SECTOR. ELSE HALT. CLR FLAG ;SET WHEN WE HIT THE TEST SECTOR CLR SECTOR MOV #32.,R4 ; 32 LOOPS OF WRITE CHECK C: MOV #400,$DCS ;RESET MOV SECTOR,$DAR CLR $WC ;16 TRACKS AT A CRACK D: MOV #400,$DER ;CMA INH MOV #ZERO,$CMA MOV #7,$DCS ;WRITE CHECK TSTB $DCS BP****************************************************** * .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 * CHWCK MOV #3,$SWR ;ENTER PHASE #3 BR CC .PAGE GO: ;SUBROUTINE TO EXECUTE DISC FUNCTION MOV #400,$DCS ;DISC RESET MOV #BUFBGN,$CMA MOV #-40000,$WC MOV SECTOR,$DAR MOV COMAND,$DCS ;DO IT! TSTB $DCS BPL .-4 TST $DCS BPL GO1 MOV $DCS,R0 HALT ;ERROR HALT: INSPECT DISC REGISTERS L .-4 MOV $DCS,R1 BPL E ;NO ERROR BIT #20000,R1 ;W-C ERROR? BNE .+4 HALT ;HARD ERROR: NOT WRITE-CHECK MOV $DAR,R0 ;SECTOR IN ERROR DEC R0 ;JUST IN CASE (MAY HAVE TO NOP THIS) CMP R0,TSTSEC ;IS IT THE TEST SECTOR? BEQ .+4 ;YES: IGNORE HALT ;A REAL ERROR: HALT WITH DAR IN R0  ;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 MOV $DAR,R0 HALT BR .-2 GO1: RTS PC COMAND: 0 SECTOR: 0 ; M W K 17-MAY-73 .END START ! MOV #400,$DCS ;RESET THE W-C ERROR INC FLAG ;SHOW THAT WE GOT THE TEST SECTOR INC R0 ;SECTOR FOLLOWING TEST SECTOR MOV SECTOR,R1 ADD #2000,R1 ;START SECTOR OF NEXT BLOCK SUB R0,R1 ;# OF SECTORS REMAINING BEQ E ;WAS THE LAST ONE ASH #6,R1 ;GET REMAINING W/C NEG R1 MOV R1,$WC MOV R0,$DAR " ;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$* ; * * ; * 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 ADDR% BR D ;GO FINISH THIS BLOCK E: ADD #2000,SECTOR SOB R4,C ;CONTINUE FOR ALL OF 64 BLOCKS .PAGE ; NOW CLEAR TEST SECTOR AND PROCEED TO NEXT ONE. CMP FLAG,#1 ;DID WE SEE ONLY THE TEST SECTOR IN ERROR? BEQ F ;YEAH: O.K. MOV #125252,R0 HALT BR .-2 F: MOV #400,$DER ;CMA INH MOV #-64.,$WC MOV #ZERO,$CMA & 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(ESS. * ; * 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 NUMBE) MOV TSTSEC,$DAR MOV #3,$DCS ;WRITE ZEROES TO TEST SECTOR TSTB $DCS BPL .-4 TST $DCS BPL .+4 HALT TST $SWR BMI .+6 ;INHIBIT INCR OF TEST SECTOR INC TSTSEC DEC R5 BNE B ;TO NEXT TEST SECTOR MOV #-1,R0 HALT ;SUCCESSFUL HALT BR .-2 TSTSEC: 0 SECTOR: 0 ZERO: 0 *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 * ; **************************************,R OF BYTES TO * ; * 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: * ; * ONES: -1 FLAG: 0 ; M W K 17-MAY-73 .END START .F 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 ;01-08-73 .ENDM FILEF ;THE FORMAL PARAMETER "ENTRY" MUST BE BLANK, [A], OR [B]. SEE "MOVEX".;01-17-73 .MACRO MOVE PAKADR,ERROR,ENTRY ;CALL THE GENERAL "MOVE" RTNE;01-17-73 JSR R5,MOVEX'ENTRY PAKADR .IF /****************************** R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 EOR = 32 ETX = 3 ; R E F .GLOBL BASCNV,BADCNV,ABSCNV,ABDCNV ; D E F .GLOBL MOVEX,MOVEXA,MOVEXB,ETXFLG .ENABL LSB .PAGE BYPASS: TST (R4)+ ;INSERTED WHEN DST AND/OR SRC IS PRESET DSTINS: MOV (R4)+,R0 ;WHEN DST IS N0 * ; * BIT #7 = 0: CHARACTER TRANSFER MODE * ; * * ; * BITS 0-6 SPECIFY ALLOWED RANGES FOR CHECKING * ; * IF NONE OF THESE IS SET, NO VALIDITY CHECKS * ; * ARE MADE. OTHERWISE THEY SPECIFY THESE RANGES* ; * * ; * BIT #0: NUMERICS FROM1 R5,MOVEX'ENTRY PAKADR .IF B ERROR NOP .IFF BR ERROR .ENDC .ENDM MOVE .MACRO DEBUG BITPAT,?Y .IF NE DEBUG BIT #BITPAT,@#SWR BEQ Y BPT Y: .ENDC .ENDM DEBUG .MACRO ERR .LIST ME ERRNUM = ERRNUM+1 .NLIST ME ERR = ERR-4 JMP ERR .ENDM ERR .MACRO2 B ERROR ;01-17-73 NOP .IFF ;01-17-73 BR ERROR .ENDC ;01-17-73 .ENDM MOVE .MACRO FOLACT ;01-08-73 .ASCII ".NB" ;ACTION CODE FOR OPEN FOLIO MESSAGE ;01-08-73 .ENDM FOLACT 3OT PRESET SRCINS: MOV (R4)+,R1 ;WHEN SRC IS NOT PRESET MOVEXA: JSR PC,MOVSR1 ;ENTRY POINT WITH R0 PRESET MOV BYPASS,1$ ;INSERT BYPASS INSTRUCTION (DESTINATION) BR 11$ MOVEXB: JSR PC,MOVSR1 ;ENTRY POINT WITH R0 & R1 PRESET MOV BYPASS,1$ ;INSERT BYPASS INSTRUCTION(DESTINATION) MOV BYPASS,2$ ;INSERT BYPASS INSTRUCTION (SOURCE) BR 1$ MOVEX: JSR PC,MOVSR1 MOV DSTINS4 ZERO TO NINE * ; * BIT #1: ALPHAS FROM A TO Z * ; * BIT #2: SPACES * ; * BIT #3: THE 64 CHARACTERS FROM 40 TO 137 * ; * BIT :4: PRINT CONTROL CHARACTERS (11 TO 15) * ; * BIT #3-BIT #6: CURRENTLY UNASSIGNED * ; * THESE BITS MAY BE SPECIFIED IN ANY DESIRED COMBINATION* ; * 5 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 ; .ASCII /090 / ; .ENDM ; ; ;* * * ; ; MANUAL INPUT ACTION CODE MACRO DEF ; ;* * * ; ; INDICATES TO DC THAT TRANSACTION ORIGINATED AS A MANUAL ENTRY ; .MACRO DCMANA ; 6 ;01-08-73 .PAGE .MACRO ERR .LIST ME ERRNUM = ERRNUM+1 .NLIST ME ERR = ERR-4 ;01-19-73 JMP ERR .ENDM ERR .MACRO PACK DEST,SRCE,COUNT,CODE ;GENERATES "MOVE" PACKET .WORD DEST .WORD SRCE .BYTE COUNT .BYTE MVCD'CODE .ENDM PACK .MACRO DEBUG BITPAT,?Y .IF 7,1$ ;RESET DESTINATION INSRTUCTION 11$: MOV SRCINS,2$ ;RESET SOURCE INSTRUCTION ; THE FOLLOWING TWO INSTRUCTIONS MAY CONTAIN EITHER "MOV" OR "TST": ; 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 CLRB 17$ ;RESET THE CLRB 18$ ; PROGRAM SWITCHES CLR R2 H * ; * BIT #7 = 1: CONVERSION CONTROL MODE * ; * CONVERSION WILL BE PERFORMED AS SPECIFIED IN BITS 0-6:* ; * R E S E T / S E T * ; * BIT #0: ASCII-TO-BINARY / BINARY-TO-ASCII * ; * BIT #1: SINGLE PRECISION / DOUBLE PRECISION * ; * BIT #2: WORD SOURCE / BYTE SOURCE * ; * (BYTE SE .ASCII /.NC / ; .ENDM ; ; ; ;* * * ; ; END OF DAY ACTION CODE MACRO DEF ; ;* * * .MACRO EODACT ; .ASCII /.NB / ; .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 - PRIEODFNB BITPAT BIT #BITPAT,@#SWR BEQ Y BPT Y: .ENDC .ENDM DEBUG ;01-19-73 .PAGE .SBTTL LOCAL EQUATES TRMLID = 4 ;FIELD LENGTH FOR TERMINAL I.D. ;01-16-73 TSKLV = PRICNF ;PRIORITY LEVEL FOR "CONFIGURATION" MXOPCD = 27. ;MAXIMUM OP CODE ALLOWED FOR CONFIG MESSAGE CFLINE = 80. ;LINE SIZE FOR A CONFIGURATION LG BISB (R4)+,R2 ;CHAR COUNT BNE 13$ INCB 17$ ;COUNT = 0: CLOSE BO INCB 18$ ; TH SWITCHES BR 16$ ;MEANS TO XFER TO FIRST EOR OR ETX 13$: CMPB R2,#-1 BNE 16$ INCB 17$ ;TO FIRST ETX: CLOSE FIRST SWITCH ONLY 16$: CLR R3 BISB (R4),R3 ;TRANSFER CONTROL CODE BMI MOVEX5 ;CALLS FOR CONVERSION 4$: MOVB """""DADDB C4dA  )^A KA 4dA ^A  KA  $D?33"a ͋,L w:B8 ` 5 &  E >w   f5eU@  [*   & * G &( 8L'4e Q$ BBB"   U@ U e  "U%Gef. U U Bb 0 * B.&0 M &0 & I ; .PAGE ; MACRO REFERENCES .MCALL HEADR,MSPLST,FLPLST,MESGM,FILGM,IOPAC,IODLST .MCALL TSKRUN,JEQ,JNE,FILEC ; 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,CNVJINE 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)+ LOURCE FOR BINARY-TO-ASCII SINGLE PRECISION ONLY)* ; * BIT #3-BIT #6: CURRENTLY UNASSIGNED * ; * * ; * MODE WORD: UPPER BYTE: * ; * THE UPPER BYTE OF THE MODE WORD CONTROLS EARLY* ; * STOPS AND FAILURE ACTION WHILE IN THE * ; * CHRACTER TRANSFER MODE ONLY. THEY HAVE NO * ; * MRTX,CNVRTQ,SECHS,RTEST,OUT ; ;TASK PARAMETERS EXTIM = 80. PRI = 3 TSKNO = TSEODR FILEID = TSFLBS+TSEODR CSTAT = 200 STKSZ = 50. STRT2 = 0 START = EODRPT TSKFR = 0 TASKNO = TSKNO ; ; TASK EQUATES FLSL1 = 128. ; FLSL2 = 0 ; FLSL3 = 0 ; MSWL2 = 0 ; TSKLV = PRIEOD ; EODST = 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 EFFECT WHILE 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; * ; * QMESG2+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 ; ; THESE ARE THE TRANSFER-AND-CONVERT CODES USED BY "MOVE" .RRTHER "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 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 * UADIX 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) MVCD11V= 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 ; * WHEN 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 REPLAY = 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 ; TERMINAL ID EOD3 = EOD2+7 ; FOLIO NO. EOD4 = EOD3+3 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\CED * ; * 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 R] ; 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 ; EOD3L = 3 ; EOD4L = 2 ; EOD5L ^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 `1 POINT TO * ; * 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. a = 3 ; EOD6L = 2 ; EOD7L = 2 ; EOD8L = 3 ; EOD9L = 3 ; ; ; .PAGE ; .SBTTL TASK HEADER HEADR TSKNO,TSKFR,START,EXTIM,STKSZ ; TASK HEADER FOR ROS .PAGE .SBTTL TASK ROOT ERR = EODE00 ;INIT ERROR "SLIDE" TARGET ERRNUM = 0 ;ERROR NUMBER SIGNAL AND ERROR "SLIDE" LENGTH CONTROL ; 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 * ; * 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. e******************************************************************** ; CHECK SYSTEM IDLE ; RE-QUEUE SCHEDULER MODULE, IF NEEDED. ; ******************************************************************** EODRPT: ; ENTRY ; DEBUG 1 CLR ERRORX ;INIT ERROR NUMBER CELL FOR ERROR "SLIDE" BIT #SYDF2,SYDST+SYDIDL ;IS SYSTEM IDLE? BEQ 2$ ;NO MOV #SYDSK3,-(SP) ;YES: DE-QUEUE SCHEDULER MODULE f 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 * ; * * ; * REGISTERS ARE SAVED AND RESTORED, EXCEPT FOR R0 & R1, AS ABOVE* ; * * ; * PROGRAMMER: 52 * ; ******************************************************************** .PAGE R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 =i EMT DQSKED 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)+ ; OF DAY MOVB EODW10,EODW12+1 ; COMBINE MOVB EODW11,EODW12 ; HOUR AND MINUTE DATEG EODW15 ;FETCH AND STORE CURRENT DATE INFO MOV jCFIML+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 %4 R5 = %5 SP = %6 PC = %7 EOR = 32 ETX = 3 DEL = 177 ; R E F .GLOBL BASCNV,BADCNV,ABSCNV,ABDCNV ; D E F .GLOBL MOVEX,MOVEXA,MOVEXB,MOVEXC .GLOBL MVCD00,MVCD01,MVCD02,MVCD03,MVCD04,MVCD05,MVCD06 .GLOBL MVCD10,MVCD11,MVCD12,MVCD13,MVCD14,PAKEND .GLOBL DBIT,XBIT,RBIT,FBIT,CBIT .PAGE .ENABL LSB BYPASS: NOP ;INSERTED WHEN DST ANm #365.,EODW24 ;#DAYS THIS YEAR BICB #1,EODCAL+1 ;RESET FEB BIT #3,EODW15 ;LEAP? BNE EODRP9 ;NO BISB #1,EODCAL+1 ;YES - MAKE FEB = 29... INC EODW24 ;...AND TOTAL DAYS = 366 CMP SYDSK3,#1 ;DOES SCHEDULER MODULE NEED QUEUEING? BEQ EODRP9 ;NO: GO BRANCH TO PROPER PROGRAM PHASE MOV EODW11,R1 ;CURRENT MINUTE CLR 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 pD/OR SRC IS PRESET DSTINS: MOV (R4)+,R0 ;WHEN DST IS NOT PRESET SRCINS: MOV (R4)+,R1 ;WHEN SRC IS NOT PRESET MOVEXA: 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 PRESEqR0 DIV #15.,R0 MOV R0,R1 MUL #15.,R1 ;GET LAST QUARTER HOUR MOV R1,EODX51 ;INIT IMAGE OF MODULE MOVEA EODX50,SYDSK3,8. XFER TO COMMON CORE MODULE AREA EODRP8: MOV #SYDSK3,-(SP) EMT QSKED ;QUEUE THAT MUTHA TST (SP)+ ;ERROR? BEQ EODRP9 ;NO JSR PC,EODS10 ;GO DELAY... BR EODRP8 ;...AND TRY AGAIN ; ******************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 tT MOV BYPASS,1$ ;INSERT BYPASS INSTRUCTION(DESTINATION) 3$: MOV BYPASS,2$ ;INSERT BYPASS INSTRUCTION (SOURCE) 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 INSTRu************************************************** ; DETERMINE PROGRAM PHASE & JUMP TO PROPER SECTION ; ******************************************************************** 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 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 xUCTION GOES HERE 2$: .WORD 0 ;SET SRC ADDR INSTRUCTION GOES HERE MOV (R4)+,R2 ;CHAR COUNT TSTB (R4) ;CONVERSION MODE? 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 BIT #4000,(R4) ;SQUEEZE DEL'S? BNE 6$ ;NO y EODA00 ;INITIAL START ENTRY POINT EODC00 ;ENTRY POINT AFTER 1ST 30 SECOND DELAY EODD00 ;ENTRY POINT AFTER 2ND 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 ; ******z ;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-{;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 ; ******************************************************************* ; * PROGRAM IDENTIFICATION: "FORMAT" * ; * INPUT MESSAGE CONVERSION TASK * ; * * ; * PURPOSE: TO ACCEPT TRANSACTIO| 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 CLR R3 BISB (R4),R3 ;CHAR TYPE CODE BEQ 14$ ;NO BITS ON: BYPASS RANGE CHECKS MOV #CHRTAB,R5 ;CHAR LIMIT CHECK TABLE BR 12$ ;BEGIN 8$: DEC R}************************************************************** EODA00: ;INPUT A MESSAGE, IF ANY WAITING. ; WHEN QUEUE IS EMPTY, PROCEED TO 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 ; * * * * * * * * ~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 N MESSAGES FROM THE VARIOUS * ; * SOURCES: TERMINAL, DATACENTER, HUB; AND RE-FORMAT * ; * THEM INTO THE STANDARD INTERNAL MESSAGE FORMAT. * ; * ON AUTOMATIC ("ELITE" OR EXISTING EQUIPMENT) * ; * TRANSACTIONS, THIS INCLUDES ACCUMULATING AND LIMIT- * ; * CHECKING REPORTED FLOW AMOUNTS AND TEMPERATURES. * ; * * ; * METHOD: "FORMAT" IS 5 ;ADJUST CHECK POINTER... 10$: TST (R5)+ ;...FOR NEXT RANGE PAIR 12$: TST R3 ;HAVE WE EXHAUSTED ALLOWED CHECKS? BEQ 16$ ;YES: LEAVE FLAG AS FAILED AND SKIP OUT ASR R3 ;FIND NEXT ALLOWED RANGE BCC 10$ ;NOT THIS ONE CMPB (R0),(R5)+ ;LOW LIMIT OF ALLOWED RANGE BLO 8$ ;BELOW RANGE: THIS CHECK FAILED. MORE? CMPB (R0),(R5)+ * * * * * * * * * * * * * * * * * * * * * * * * * CLR EODW32 ;RESET TO FORCE SCAN OF ALL TERMINALS ;(SHUNT IS CLOSED AT END OF PHASE #1 IF NO TERMINALS REQUIRED SERVICE.) MOV #MESG1+HDRL,R1 ; IS THIS SERCH EODX10,SXT1L,SXT1L ; A FORMAT TST R1 ; 090? BEQ EODA50 ; YES - ; .PAGE ; ******************************************************************** ; ;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: .WPRIMARILY TABLE-DRIVEN, DEPENDING ON THE* ; * VERSATILE "MOVE" SUBROUTINE TO DISSECT RAW MESSAGES,* ; * PERFORM CONVERSIONS 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 * ; * SYST ;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),#EOR ;EOR? BEQ MOVEX4 ; SEND MESSAGE TO INTERCEPT (IT DIDN'T BELONG IN OUR QUEUE) ; ******************************************************************** ; 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 ; **************************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. CFEM AND LOCAL PROGRAM EQUATES. * ; * THERE IS ROOM TO EXPAND THE DRIVING TABLES TO * ; * INCORPORATE 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 * ; * 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 UNTIL COUNT EXPIRES MOVEX4: ;THIS IS THE SUCC****************************************** ; PROCESS TANK GAUGE TRANSACTION ; SET EOD-REQUIRED FLAG, IF WITHIN ONE HOUR OF EOD ; ******************************************************************** ; EODA50: CLR FLPSVC+EODV20 ; INIT CNXRTE MESG2+HDRFR,EODW13,EODA20 ; GET LOCATOR FROM TRML RTE ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLSNT,EODV20,R0,#2,#0,EODA20 ; GET TRM FILE ; * * * * * * 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 MESSAGE TO THE SENDER, ALONG WITH A CODE NUMBER * ; * IDENTIFYING THE TYPE OF ERROR. THIS ERROR MESSAGE * ; * IS ALSO ROUTED TO THE HUB CONSOLE. * ; * * ; * PROGRAMMER: 52 * ; ******************************************************************* .PAGE .TITLE FORMAT INPUT MESSAGE CONVERSION ;FOLLOWING AESSFUL 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$: CMP (R4),#-1 ;REACHED END OF PACKET STRING? BNE 1$ ;NOT YET ADD #2,12(SP) * * * * * * * * * * * * * * * * * * * * * * * * * * * JSR PC,EODS30 ;GET EOD TIME & DATE: CONVERT TO HUB TIM MOV EODW14,R1 ;TIME MOV EODW20,R0 ;DATE CMP R1,EODW12 ;EOD TIME :: NOW BGE 2$ ADD #24.*400,R1 ;REMOVE 24-HOUR MODULUS FROM EOD TIME DEC R0 ;... AND BRING EOD DATE BACK ONE DAY BNE 2$ MOV EODW24,R0 ;WAS SET FOR JAN 0: NEED LAST DAY OF YER 2$: 0 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,-1RE 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": 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 ;GOOD RETURN TO CALL+4 MOVEX9: ;THIS IS ALSO THE EXIT POINT FOR ERROR RETURN CMPB (R0)+,(R1)+ ;BUMP POINTERS TO NEXT CHARACTER PLACES 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 WORKS!) .DSABL LSB .PAGE MOV CMP EODW18,R0 ;IS IT FOR TODAY? BNE 4$ ;NO SUB EODW12,R1 ;GET OFFSET TO EOD CMP #1*400,R1 ;WITHIN ONE HOUR? BLE 4$ ;NO BISB #1,FILG1+TRMAED ;SET EOD-REQUIRED FLAG ; ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 4$: FILEF FLWR,EODV20,R0,#0,#0 ; WRITE TO DISC ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; ,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 A:TOC/LI:MEB ;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 ************************************************************ ; 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 EOM 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. ; ******************************************************************** EODBRST, 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 MVCD01 = 1 ;NUMBERIC ONLY MVCD02 = 10 ;ALPHA ONLY MVCD03 = 11 ;ALPHA AND NUMERIC MVCD04 = 1000 ;ALL 64 LEGAL ASCII MVCD05 = 100 ;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 PRECISITTSZ = 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 SYDEOD = 16. ;BEGIN OF ASSIGNED AREA IN SYSTEM COMMON SYDED1 = SYDEOD ;OFFSET IN COMMON FOR EOD PHASE FLAG SYDED2 = SYDEOD+2 ;OFFSET FOR EOD BUFFER ADDRESS MEMORY SYDED3 = SYDEOD+4 ;OFFSET FOR BEGIN OF SCHEDULER MODULE PAKEND = 16: CLR FLPSVC+EODV20 ; INIT FILE REQUEST ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLSNT,EODV20,R0,#2,#0 ;READ IN "TRM" ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;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 ISTRING 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 ON MVCD52 = 10000001 ;BINARY-TO-ASCII: SINGLE PRECISION MVCD53 = 10000011 ;BINARY-TO-ASCII: DOUBLE PRECISION MVCD54: = 10001001 ;BINARY-TO-ASCII: SINGLE BINARY BYTE .RADIX 8 ; 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 = -1 ;END-OF-PACKET KEY ; ; 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 = 11MPOSED: 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 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 CURR 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 .C40000 ;STOP TRANSFER UPON EOR MVCDX = 100000 ;STOP TRANSFER ON ETX PAKEND = -1 ;END-OF-PACKET KEY .PAGE ; "MTR" METER TABLE EQUATES MXPRL = 10. ;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" CO1 ;ALPHAS & NUMERICS & 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 ENT 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- ;DATED, BUT EOM IS DUE OR OVERDUE, EOM WILL COME OUT. IF BOTH ARE DUE, ;EOM WILL COME OUT. JSR PC,EODS20 ;CONVERT EOD TIME AND DATE TO HUB TIME MOV FILG1+TRMEDM,R0 ;EOD JULIAN MOV #1,R4 JSR PC,EODS10 ITGO 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,FINTROLLED 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 EL1HDL = 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 = THDS= EOD1+3 ; TERMINAL 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 EO ;SET FLAG IF EOD MOV FILG1+TRMEMM,R0 ;EOM JULIAN JSR PC,EODS20 ;CONVERT EOM TIME AND DATE TO HUB TIME 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 EODB26LG1+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,FITS ;ASR STATUS ELASRL = 1 ELSPA = ELASR+ELASRL ;SPACE ELSPAL = 1 ELACT = ELSPA+ELSPAL ;ACTION CODE ELACT = THDACT ;ACTION CODE ELACTL = 1 ELSP2 = 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 D2L = 7 ; EOD3L = 3 ; EOD4L = 2 ; EOD5L = 3 ; EOD6L = 2 ; EOD7L = 2 ; EOD8L = 3 ; EOD9L = 3 ; ; ; .PAGE ; .SBTTL TASK HEADER HEADR TSKNO,TSKFR,START,EXTIM,STKSZ ; TASK HEADER FOR ROS .PAGE .SBTTL TASK ROOT ERR = EODE00 ;NO - BYPASS EOD IF NO ACTIVITY .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 BPL 2$ ERR 2$: BIS #MSQF2,MSQIH(R0) ;INHIBLG1+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 ;JULIAN DATE ELJULL = 3 ELSP4 = ELJUL+ELJULL ;SPACE ELSP4L = 0 ELMSN = ELSP4+ELSP4L ;MESSAGE # ELMSN = THDMSN ;MESSAGE # ELMSNL = 3 ELLN1L = ELMSN+ELMSNL ;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 EL2ID = ;INIT ERROR "SLIDE" TARGET ERRNUM = 0 ;ERROR NUMBER SIGNAL AND ERROR "SLIDE" LENGTH CONTROL ; ******************************************************************** ; CHECK SYSTEM IDLE ; RE-QUEUE SCHEDULER MODULE, IF NEEDED. ; ******************************************************************** EODRPT: ; ENTRY ; CLR ERRORX ;INIT ERROR NUMBER CELL FOR ERROR "SLIDE" BIT #SYDF2,SYDST+SYDIDL ;IS SYSTEM IDLE? IT 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 ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#0,EODR10 ; OPEN FOLIO ; * * * * * * * * * * * 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 ELSPN+ELSPNL ;CARD I.D. 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 ;CUSTOMER CARD: ELLN3 = ELLN2+ELLN2L ;LINE #3 EL3HD = ELLN3 BEQ 2$ ;NO MOV #SYDST+SYDED3,-(SP) ;YES: DE-QUEUE SCHEDULER MODULE EMT DQSKED 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)+ ; OF DAY MOVB EODW10,EODW12+1 ; COMBINE MOVB EODW11,EODW12 * * * * * * * * * * * * * * * * * * * * * * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#3 ; TO DC ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * EODB26: FILEF FLWR,EODV20,R0,#0,#0 ;WRITE "TRM" BACK OUT ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * JMP EODB12 ; .PAGE 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 INP;LINE #3 HEADER EL3HDL = 2 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 ;DRIVER CARD: ELLN4 = ELLN3+ELLN3L ;LINE #4 EL4HD = ELLN4 ;LINE #4 HEADER EL4HDL = 2 EL4ID = EL4HD+EL4HDL ;CARD I.D. EL4IDL = 1 ; 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 EODRP9 ;NO BISB #1,EODCAL+1 ;YES - MAKE FEB = 29... INC EODW24 ;...AND TOTAL DAYS = 366 CMP SYDST+SYDED3,#1 ;DOES SCHEDULER MODULE NEED QUEUEING? BEQ EODRP9 ;NO: G ; ******************************************************************** ; 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 UT 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 ;******************************************* 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 ELMSGL = ELLN4L ;LENGTH OF ENTIRE MESSAGE (FIXED) ELMTR = 80. ;INDEX TO METER #1 DATA ELMTRL = 6 ;FIELD WIDTH FOR EACH METER ELTMP = 151. O BRANCH TO PROPER PROGRAM PHASE MOV EODW11,R1 ;CURRENT MINUTE CLR R0 DIV #15.,R0 MOV R0,R1 MUL #15.,R1 ;GET LAST QUARTER HOUR MOV R1,EODX51 ;INIT IMAGE OF MODULE MOVEA EODX50,SYDST+SYDED3,8. ;XFER TO COMMON CORE MODULE AREA EMT QSKED ;QUEUE THAT MUTHA ; ******************************************************************** ; DETERMINE PROGRAM PHASE & JUMP TO PROPER SECTION #1,SYDST+SYDED1 ;FLAG TO RESTART AT [EODC00] 4$: JSR R5,MOVA ; MOVE .WORD EODX30 ; TIMER .WORD SYDTM3 ; MODULE .WORD EODX32-EODX30 ; TO BUFFER 8$: MOV 6$,-(SP) ; QUEUE MOV #30.,-(SP) ; TIMER MODULE EMT QTIME ; FOR TST (SP)+ ; 30 SEC DELAY **************************** 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 TMPW08 ;INDEX TO TEMPERATURE #1 ELTMPL = 3 ;FIELD WIDTH FOR EACH TEMPERATURE .PAGE ; 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 = ; ******************************************************************** 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 DEL 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$ ;TRY AGAIN .PAGE .SBTTL PHASE #2 ; ******************************************************************** ; CHECK EACH TERMINAL FOR EOD/EOM SERVICING ; ,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 ;********************* 3 ;DRIVER 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 AY EODD00 ;ENTRY POINT AFTER 2ND 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 WAI******************************************************************** 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 EODC10: DEBUG 40 ADD #RTEL,R4 ; ADVANCE POINTER ************************************************** 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 = BUK06+BUK06L 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 ;EORTING. ; WHEN QUEUE IS EMPTY, PROCEED TO 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 TERMIN 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 #NMN,EODV30+FLPNAM ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;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 BUK25L = 0 ;- 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 ERR = FMTX00 ;AUTOMATIC TARGET FOR EACH ERR CONDITION ERRNUM = 0 FMTEXT: EMT EXIT ;AALS ;(SHUNT IS CLOSED AT END OF PHASE #1 IF NO TERMINALS REQUIRED SERVICE.) MOV #MESG1+HDRL,R1 ; IS THIS SERCH EODX10,SXT1L,SXT1L ; A FORMAT TST R1 ; 090? BEQ EODA50 ; YES - ; .PAGE ; ******************************************************************** ; SEND MESSAGE TO INTERCEPT (IT DIDN'T BELONG IN OUR QUEUE) ; ********************************************* * * 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) ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TSTB FILG1+TRMAED 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 ;*******************************************************LL EXIT HERE SYSERR: DEBUG ;SYSTEM FAULT: BETTER FIND OUT WHAT IT IS .SBTTL NEW MESSAGE & SEQUENCE ACCOUNTING ; ******************************************************************** ;FORMAT CONVERSION TASK ;MASSAGES ALL INCOMING MESSAGES TO CONFORM TO STANDARD ;INTERNAL TRANSACTION FORMAT ; ******************************************************************** FORMAT: DEBUG 1 TSKRUN FMTEXT CLRB************************ ; 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-REQUIRED F ; 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 # REPORT JSR PC,EODS40 ;BUILD I.D. 20 MESSAGE W/PROPER OP-CODE ;LEAVES R0 POI**************** ;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- 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 4$ JMP NTRCPT ;INVALID CODE: NO WAY TO RETURN MSG LAG, IF WITHIN ONE HOUR OF EOD ; ******************************************************************** ; EODA50: CLR FLPSVC+EODV20 ; INIT CNXRTE MESG2+HDRFR,EODW13,EODA20 ; GET LOCATOR FROM TRML RTE ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLSNT,EODV20,R0,#2,#0,EODA20 ; GET TRM FILE ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * JSR PC,EODS30 ;GET EOD TIME & DATE: NTING 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 R3 BCC 6$ ;NO NULL FOR THIS # MOV R2,EODW25 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 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 # 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 CONVERT TO HUB TIM MOV EODW14,R1 ;TIME MOV EODW20,R0 ;DATE CMP R1,EODW12 ;EOD TIME :: NOW BGE 2$ ADD #24.*400,R1 ;REMOVE 24-HOUR MODULUS FROM EOD TIME DEC R0 ;... AND BRING EOD DATE BACK ONE DAY BNE 2$ MOV EODW24,R0 ;WAS SET FOR JAN 0: NEED LAST DAY OF YER 2$: CMP EODW18,R0 ;IS IT FOR TODAY? BNE 4$ ;NO SUB EODW12,R;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 ;NEXT MSG # SOB R4,4$ BR 10$ ;DONE W/WORD 8$: ADD #16.,R2 ;SKIP ENTIRE WORD... 10$: TST (R5)+ ;BUMP TO NEXT ENTRY 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 ;SHIFT MARKER BIT TO PROPER POSITION ASL R0 ;MAKE A WORD INDEX BIT R3,FILG1(R0) ;HAS THIS MSG ALREADY COME IN? BEQ FORMT3 ;NO JSR PC,FORMT2 ;WARN THAT MSG #'S ARE OUT-OF-SEQUENCE .PAGE FORMT3: BIS R3,FILG1(R0) ;SET BIT FOR THIS MSG MOV FILG1+MNTLMN,R0 ;"LAST MSG #" INC R0 ;BUMP IT CMP R0,#MXMSGN ;OVE1 ;GET OFFSET TO EOD CMP #1*400,R1 ;WITHIN ONE HOUR? BLE 4$ ;NO BISB #1,FILG1+TRMAED ;SET EOD-REQUIRED FLAG ; ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 4$: FILEF FLWR,EODV20,R0,#0,#0 ; WRITE TO DISC ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; MOVEA EODX12,MESG2+HDRTO,HDRLTO ; SEND MOVEA EODX13,MESG2+HDRACT,HDRLAC ; TRANSACTION 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 OFF MESSAGE MOV #.+4,EODW25 ;RTN ADDR FOR DELAY RTNE IF MSG AREA FULL CLR EODV10+MSPSVC ;SEND ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * .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 R TOP? BLE 8$ MOV #1,R0 ;RESET 8$: CMP R0,R2 ;FILE + MSG #'S MUST AGREE BEQ 10$ JSR PC,FORMT2 ;WARN THAT MSG #'S ARE OUT-OF-SEQUENCE 10$: MOV R0,FILG1+MNTLMN ;NEW COUNT CLR FMFCL2 ;UNLOCK & TYPE I FILEF FLWR ;WRITE OUT MODIFIED MNT .PAGE .SBTTL FACILITY TABLE READ FORMT1: MOV #TRM,FMFCL1 ;INIT TO "TRM" FILE ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#0 ; TO DC ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * JMP EODA00 ;CONTINYUH ; ******************************************************************** ; CONDITIONAL TASK EXIT: ; IF MESSAGE QUEUE FOUND EMPTY AFTER TERMINAL RE-SCAN, EXIT. ; ELSE, PROCEED TO NEXT SECTION ; ***************************************** * 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 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 " CLR FMFCL6 ;1ST ACCESS FILEF FLSNT,,,#0,#0 ;READ IN TYPE I OF "TRM" MOVE TRMPAK ;SAVE IT MOV #MSGBUF+ELACT+HDRL+2,R0 ;ADDR OF 3RD CHAR CMPB (R0),#'A ;******** BEQ FMT.AA ;IS .AA CMPB (R0),#'B ;******** BEQ 12$ ;IS .AB JMP NTRCPT ;NEITHER: TO INTERCEPT DEC R0 **************************** EODA90: TST EODW32 ;IS EXIT SHUNT CLOSED? (@ EODB30) BEQ EODB10 ;NO - CONTINUE TO SCAN TERMINALS EODXIT: CLR SYDST+SYDED1 ;RESET PHASE FLAG FOR NEXT RUN 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. ; 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 "CLOSE ""PROD" .ENDC .IF NE .CITGO TXFB2: .ASCII " " TXFB3: .ASCII " ""PROD" .ENDC .ASCII " ID " TXPPD: .ASCII " " .ASCII " ""GRAV""GRP " TXGRV: .ASCII " " .ASCII " "" ;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 ANY MORE .PAGE .SBTTL PROCESS A TYPE ".AA" FMT.AA: ;THE ACTION CODE IS ".AA" MOVB MSGBUF+HDRL+ELACT,R0 ;TERMINAL ACTION CODE ******************************************************************** ;HERE AFTER ALL MESSAGES IN INPUT QUEUE HAVE BEEN SERVICED EODB10: ;CHECK EACH TERMINAL TO SEE IF IT'S TIME FOR E-O-D 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 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 ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#0,EODR10 ; CLOSE FOLIO ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *** " ;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 SUB #60,R0 ;MUST BE POS & NON-ZERO BGT 2$ ERR 2$: CMP R0,#MXTMAC ;MAX ALLOWED ACTION CODE BLE 4$ ERR 4$: ASL R0 MOVB R0,ACTCOD ;SAVE A/C AS A WORD INDEX MOV JMPTB1(R0),PC ;TRANSFER TO PROPER RTNE JMPTB1 = .-2 .WORD FMTA00 ;STANDARD AUTO .WORD FMTB00 ;AUDIT TRAIL .WORD FMTC00 ;EXISTING EQUIP .WORD FMTD00 ; GET FIRST WORD OF ENTRY BEQ EODB12 ;NULL ENTRY CMP #-1,R0 ; END OF LIST JEQ EODB30 ;YES - EXIT LOOP MOV R4,-(SP) JSR PC,CNVRTX ;GET TERMINAL RTE INDEX MOV (SP)+,EODW13 CLR EODW25 ;RESET ACTIVITY INDICATOR MOV #NMN,EODV30+FLPNAM CLR EODV30+FLPSVC ;FIRST TIME ; * * * * * * * * * * * * * * * * * * * * * * * * * * * *  FILEF MSAT,EODV10,R0,#0,#3 ; MESSAGE TO D/C ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * .PAGE ; ******************************************************************** ; UPDATE EOD/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 B .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 ;MANUAL TRANSACTION FMTB00: ;AUDIT TRAIL: CHECK BCC, THEN PROCEED AS IN STD AUTO MOV MSGETX,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 MOV #MSGBUF,R0 CLR CRCRM ;"CRC" ACCUM 2$: MOVB (R0)+,R4 ;NEXT CHAR JSR PC,CRC16 ;GO COMPUTE * * * * * FILEF FLSNT,EODV30,R0,#0,#0 ;READ IN NULL MSG # TABLE ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 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 ; * * * * * * * * * * * * * * * * * * * * * * * * * * UMPING 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 THIS 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 E = " 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 = " EOMDAYCRC WITH NEW CGAR CMP R0,R1 ;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 FMTC00: ERR ;EXISTING EQUIP NOT YET IMPLEMENTED FMTD00: ERR ;MANUAL TRANSACTION NOT YET IMPLEMENTED .PAGE .SBTTL STANDARD AUTOMATIC TRANSACTION .ENABL LS* * * * * * * FILEF FLSNT,EODV30,R0,#0,#0 ;READ IN MSG NUMBER TABLE ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 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-REQUIR 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 EODC30 ;BYPASS EOM UPDATE MOV EODW17,R1 ;CURRENT MONTH INC R1 ;NEXT MONTH CMP R1,#12. BLE 6$ ;NO MO : .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 " B 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 .DSABL LSB .PAGE ; NOW READ IN METE ED FLAG IF SO. ; CHECK IF TIME FOR [EOM] AND SET EOM-REQUIRED FLAG IF SO. ; IF EOM 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 ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * V #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 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,FIL ;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 R TABLE 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 * 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  FILEF FLSNT,EODV20,R0,#2,#0 ;READ IN "TRM" ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;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 THG1+TRMEMM ;RESTORE NEW EOM JULIAN .PAGE ; ******************************************************************** ; PREPARE DATA FOR TERMINAL'S EOD MESSAGE ; ******************************************************************** ;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#" ;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 #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 FMTA10: ;INCR FLAGS FOR NOISY METERS; ZERO OUT THESE FLOWS. ;NOTE THAT "MTRBIN" IS A DOUBLE-PRECISION TABLE MOV R1,MTRPTR ;SAVE POINTER TO METER DATA IN FILE W/A CLRB ZFLAG .IF NE TRMUSE ;ONLE FUTURE DELAY IS GREATER THAN SOME ;AMOUNT THAT IS MORE THAN HALF A YEAR. IN THIS CASE IT 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 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 DEC R3 ;BACK UP DATE 2$: CMP R0,#23. BLE 4$ SUB #24.,R0 INC R3 ;ALREADY TOMORROW THERE 4$: TST R3 BNE 6$  ;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 "INDY 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$ ;CLOSE THE MULTI- INCB 16$ ; USE SWITCHES  BE DELAYED. NOTE ;THAT "EOD" & "EOM" ARE TREATED INDEPENDENTLY: IF EOD IS FOUND POST- ;DATED, BUT EOM IS DUE OR OVERDUE, EOM WILL COME OUT. IF BOTH ARE DUE, ;EOM WILL COME OUT. JSR PC,EODS20 ;CONVERT EOD TIME AND DATE TO HUB TIME MOV FILG1+TRMEDM,R0 ;EOD JULIAN MOV #1,R4 JSR PC,EODS10 ;SET FLAG IF EOD MOV FILG1+TRMEMM,R0 ;EOM JULIAN JSR PC,EODS20 ;CONVERT EOM TIME AND DATE TO HUB TIME MOV  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(S 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 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 " " ;ROUTI .ENDC CLRB USE ;MULTI: RESET USE UNITL FOUND IN MTR TAB 2$: MOV #FMTMTR+,R3 ;PTR TO END OF BINARY FLOWS MOV #MXMTRS,R4 ;COUNT ADD #MXMTRS*4-4,R1 ;PTR TO LAST MTR ENTRY IN THIS SPOT 4$: TST -(R3) ;HI-ORDER OF FLOW BEQ 6$ TST -(R3) ;KEEP IN STEP BR 14$ 6$: TST -(R3) ;LO-ORDER BEQ 12$ ;TRUE ZERO  #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 .PAGE ; ******************************************************************** EODB20: ;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 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 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 LS BMI 14$ ;ABOVE NOISE LEVEL MOV #FMTTMP,R1 2$: CMP (R1),#LOTEMP BGE 6$ ;ABOVE LOW LIMIT 4$: ERR ;OUTSIDE LIMITS 6$: CMP (R1)+,#HITEMP BGT 4$ ;ABOVE HIGH LIMIT SOB R0,2$ .PAGE FMTA30: ;NOW ARRANGE PRODUCTS IN ORDER BY I.D. NUMBER AND ;ACCUMULATE TOTALS FOR LIKE PRODUCTS. ;FLOW TOTALS, TEMPERATURES, AND ASSOCIA  ;PREPARE OPEN FOLIO MESSAGE ; ******************************************************************** MOV EODW21,-(SP) ;CONVERT JSR PC,CNVRTQ ; RTE ADDR MOV (SP)+,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" ! ;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 ADDRESS 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 "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#TED I.D. ARE ;GROUPED IN FOUR-WORD BLOCKS IN THE "CUMTAB" 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: TEMP ASSOCIATED WITH LOWEST # METER ;FLOWING THIS PRODUCT ON THIS TRANSACTION ;ALL DATA IS IN BINARY .IF NE TRMUSE 8$: BR .+2 $ JSR PC,EODS40 ;BUILD I.D. 20 MESSAGE W/PROPER OP-CODE CLR EODV10+MSPSVC ;SEND MOV PC,EODW25 ;SAVE RTN ADDR FOR DELAY RTNE IF MSG AREA FULL ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#0,EODR10 ; OPEN FOLIO ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV1% #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 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 ; & 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+' ;SWITCH BR 10$ ;MULTI-USE .ENDC MOVB MTRTY(R1),R2 ;AREA TYPE (WHEN MULTI-USE) 10$: ASL R2 ;MAKE USE # A WORD INDEX CMP (R3),LOLIM(R2) ;LO FLOW FOR THIS AREA TYPE BGE 14$ ;ABOVE NOISE LEVEL INCB MTRNS(R1) ;FLAG & COUNT IN MTR TAB FOR NOISE REPR CLR (R3) ;CLEAR OUT NOISE 12$: CMP -(R1),-(R1) ;NEXT LOWER METER TAB ENTRY SOB (0,R0,#0,#3 ; TO DC ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * EODB26: FILEF FLWR,EODV20,R0,#0,#0 ;WRITE "TRM" BACK OUT ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * JMP EODB12 ; .PAGE ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; BEGIN FIRST 30-SEC DELAY PERIOD ; * * * * * * * * * * * * ) ******************************************************************** ; OUTPUT THE EOD MESSAGE TO THE TERMINAL ; ******************************************************************** 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 ; ***************************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 + R4,4$ ;BACK IF MORE TSTB ZFLAG ;ANY FLOWS FOUND? BNE 20$ ;NEED AT LEAST ONE ERR 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,* * * * * * * * * * * * * * * * * * * * * ; 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: MOV #1,SYDST+SYDED1 ;FLAG SO RESTART IS AT C00 EODB40: MOV #BUFPRI,-(SP) EMT GETBUF ;GET A BUFFER MOV (SP)+,6$ -****************************************** ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 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. ; ****************************. 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/$ ;YES ERR ;THIS METER'S USE # IS NOT = ALREADY-ESTABLISHED USE 18$: MOVB MTRTY(R1),USE ;ESTABLISH USE W/1ST REPORTED FLOW BR 12$ 20$: FILEF FLWR,,,#0 ;WRITE "MTR" FILE BACK OUT FMTA20: ;CHECK BINARY TEMPERATURES AGAINST LIMITS MOV #MXTMPS,R0 MOV #FMTMTR,R0 ;D/P BINARY FLOW TABLE MOV #FMTCUM,R1 ;BLOCKED ACCUMULATE TABLE MOV MTRPTR,R2 ;BGN OF METER DESCRIPTORS MO0 ; BUFFER MOV 6$,SYDST+SYDED2 ;SAVE BUFFER ADDRESS FOR RELEASE LATER BNE 4$ ; GOT ONE JSR PC,EODS20 ; DELAY... BR EODB40 ; ...AND TRY AGAIN 4$: JSR R5,MOVA ; MOVE .WORD EODX30 ; TIMER 6$: .WORD 0 ; MODULE .WORD EODX32-EODX30 ; TO BUFFER 8$: MOV 6$,-(SP) 1**************************************** MOVEA EODX60,FILGL,FILAT-FILGL ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLWR,EODV30,R0,#0,#0 ;WRITE NULL M.N.T. BACK, CLEARE ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; ******************************************************************** ; CLEAR OUT THE "MESSAGE NUMBER TABLE" ; ******************************************************************** 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 3V #MXMTRS,R3 ;LOOP ONCE PER METER 2$: MOVB MTRPD(R2),(R1)+ ;PROD # IN LO BYTE INC R1 MOV (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 TST (R2)+ ;SKIP OVER 2ND "MTR" WORD SOB R3,2$ ; NOW ALL FLOWS & TEMPS ARE STORED BUT NOT YET ACCUMUL4 ; QUEUE 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$ 5 EODC40: ;NOW CLEAR MESSAGE NUMBER TABLE AND CLEAN UP MOV #MNT,EODV30+FLPNAM ;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 WR6 ;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 7ATED MOV #FMTOTL,R0 MOV #MXMTRS*4,R1 4$: CLR (R0)+ ;CLEAR OUT TABLE SOB R1,4$ MOV #FMTCUM,R0 CLRB NPRODS MOV #FMTOTL,R1 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$ 8 ;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 AFTER FIRST 9ITE-BACK 2$: CLR (R0)+ SOB R1,2$ ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLWR,EODV30,R0,#0,#0 ;WRITE MNT BACK, CLEARED ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * .IF NE .CITGO QUEUE RON ;TASK TO SEND LIST OF TOTALS TO TERM ;*CITGO* .ENDC JMP EODC10 ;BACK FOR MORE .PAGE .SBTTL PHASE #3 ; ******: .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 ; ;GREATER: KEEP LOOKING UNTIL =, <, OR 0 CMP (R0)+,(R0)+ ;SKIP TO LO ORDER OF FLOW TST (R2)+ ;...AND POINT TO LO ORDER FOR TOTAL ADD (R0),(R2) ;ACCUMULATE 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 <30-SEC DELAY MOV SYDST+SYDED2,-(SP) ;FIRST RELEASE TIMER BUFFER EMT PUTBUF MOV #RTEST-RTEL,R4 ; GET ADDR OF ROUTING TABLE EODC10: 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) =************************************************************** EODD00: ;ENTRY POINT AFTER 2ND 30-SEC DELAY ; ******************************************************************** DEBUG 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>;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? 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 ;ANOTHER 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 @ JSR PC,CNVRTX ;GET TERM'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 ; GA ;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 ; ******************************************************************** MOV R5,-(SP) JSR PC,CNVRTX ;GET THIS TERM'S INDEX MOV (SP)+,EODW13 ; * * * * * * * * * * * * * * * * * * * * * 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 CFC 4 ;MOVE BLOCK UP MOV -(R1),-(R3) .ENDM CMP R1,R2 ;REACHED DESIRED "HOLE" YET? BHI 18$ ;NOT YET MOV R4,R1 ;RE-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 FMTA40: ;FLOWS & TEMPS NOW ORDERED & ACCUMULATDET ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLSNT,EODV20,R0,#0,#0 ; TABLE (TRM) ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TSTB FILG1+TRMAED ; EOD FLAG SET BEQ EODC10 ; NO - GET NEXT .PAGE ; ******************************************************************** ; REPORT NULL MESSAGES ; **********************************************E* * * * * * * * * * * FILEF FLSNT,EODV20,R0,#2,#0 ;READ IN "TRM" ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TSTB FILG1+TRMAED ;WAS 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 ;RESFGL00 ; 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 R1GED: ;MUST CHECK AGGREGATE TOTAL AGAINST HIGH LIMIT 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 ADC R4 ADD -(R0),R4 ADD #6,R0 ;SKIP TO NEXT I.D. CMP R0,R1 ;REACHED TOP? BLO 2$ ;NOT YET MOV #HILIM1,R0 ;LO ORDER MOV #HILH********************** EODC14: ;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 CLR EODW26 ;INT COUNT OF NULL MSG #'S REPORTED 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 IET EOD FLAG ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLWR,EODV20,R0,#0,#0 ;WRITE "TRM" BACK OUT ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * BR EODD10 ;BACK FOR MORE .PAGE .SBTTL ERROR PROCESSING ; ******************************************************************** ; ERROR PROCESSING: OUTPUT AN ERROR MESSAGE TO THE HUB CONSOLE ; INCLUDE IN IT AN ERROR NUMJ ;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 KIM2,R2 ;HI ORDER SUB R3,R0 ;D/P SUB SBC R2 SUB R4,R2 BLE FMTA50 ;TOTAL DID NOT EXCEED LIMIT ERR ;OVER LIMIT .PAGE 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 LWORD OF 16 MSG #'S BEQ 8$ 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 EODP11,1 ;CONVERT TO ASCII & TACK ON TO MSG NOP INC EODW26 ;BUMP MSG COUNT CMP EODW26,#100. ;MESSAGE CAN HOLD MAX 100 NUMBERS BEQ 12$ MBER FOR IDENTIFICATION ; ******************************************************************** ;ALL ERROR MESSAGES ENTER ERROR PROCESSING THROUGH THIS "SLIDE": .REPT ERRNUM INC 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 ; N ;"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 MOV #PIDIGS,8$ 2$: MOV R0,4$ MOV R2,6$ JSR R5,BASCNV ;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 #TMPP ;GO SEND IT NOW 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 COUNTQ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#0,EODRPT,EODR10 ;"FORM" TYPE I MSG ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#3,EODRPT,EODRPT ;"ATTACH" MESSAGE ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * JMP EODRPT ;BACK TO TRY AGAIN .PAGE 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 SASC,R2 MOV #TMPDGS,16$ 10$: MOV R0,12$ MOV R2,14$ JSR 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 T AND GET THE MESSAGE OFF MOVB #ETX,(R0)+ ;TIE OFF MESSAGE CLR EODV10+MSPSVC ;SEND MOV PC,EODW25 ;SAVE RTN ADDR FOR DELAY RTNE IF MSG AREA FULL ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#0,EODR10 ; NULL MESSAGE NUMBER ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * U.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$ ;TOO SOON, UNLESS OUTTAGE DURING NEW YEAR CMP EODW17,#12. ;IS IT DECEMBER OUTSIDE? BNE 2$ ;NO: ASSUME BYPASSED DUE TO OUV ;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 #QTYASC,R2 MOV #QTYDGS,24$ 18$: MOV R0,20$ MOV R2,22$ 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 .ENABL LSB ;NOW MUST MAKE SOME CHXFILEF 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 TST R1 ;IS LOOP STILL UNSATISFIED? BNE 6$ ;YEAH ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * EODC20: FILEF FLWR,EODV30,R0,#0,#0 ;WRITE NULL M.N.T. BACK, CLEARED ; YTTAGE 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 DELAY CMP R0,#EODMDY ;MAXIMUM DELAY BLE 2$ 8$: RTS PC .PAGE EODS20: ;DELAY 1 SEC SUBROUTINE MOV #EODX3ZGB20 ;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 [ECKS, FORM THE STANDARD HEADER & MESSAGE BODY FMTA60: MOVB USE,R4 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 ;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(R4),R1 MOV (R1)+,C.INID MOV \ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * .PAGE ; ******************************************************************** ; SEND "CLOSE FOLIO" MESSAGE TO DATACENTER ; ******************************************************************** 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$: ]4,-(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 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 ^ 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 _ (R1),C.INID+2 MOV #FMTPTA,R1 MOVE PAKA60 ;PICK UP TERMINAL I.D. FROM "TRM" MOV STATDR(R4),MOVAD1 ;SELECTS PROPER STAT LINE PACKET JSR R5,MOVEX ;MOVE IT 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 MOVA` JSR PC,EODS40 ;BUILD I.D. 20 MESSAGE W/PROPER OP-CODE CLR EODV10+MSPSVC ;SEND MOV PC,EODW25 ;SAVE RTN ADDR FOR DELAY RTNE IF MSG AREA FULL ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#0,EODR10 ; CLOSE FOLIO ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSATaTHROUGH 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 MOVB FILG1+TRMDST,R3 ;DAYLIGHT TIME INDICATOR ADD #HUBZON+HUBDST,R1 ;ADD IN HUB'S ZONE & DST SUB R2,R1 SUB R3,R1 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. cD2: .WORD 0 ;EACH PACKET MOVES ONE PRODUCT LINE NOP SOB R2,4$ MOVB #ETX,(R0)+ MOV #AUTOAC,R0 ;AUTO TRANS ACTION-CODE INDEX MOVB FMTACD(R0),MSGBUF+HDRACT+1 ;CHANGE ACTION CODE MOVB FMTACD+1(R0),MSGBUF+HDRACT+2 FILEF MSAT,FMIML,,,#3 ;RE-ATTACH MSG TO QUEUE JMP FORMAT .DSABL LSB .PAGE FORMT2: ;WARN HUB OPERATOR THAT MESSAGE NUMBERS d,EODV10,R0,#0,#3 ; MESSAGE TO D/C ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * .PAGE ; ******************************************************************** ; UPDATE EOD/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 e 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 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 ORf ;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 TYPESg;WERE FOUND OUT-OF-SEQUENCE MOVE PAKA10 ;FILL MSG AREA W/WARNING MESSAGE CLR FMIML6 ;INIT FOR FIRST TIME FILEF 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: hEOD. 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 THIS 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 i 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 ;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 PRj 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 ;GENERAL ERROR PROCESSING DEBUG 200 MOV #FMTACD+,PKA70S ;INIT SOURCE PNTR MOVE PAKA70 ;BUILD ERROR MESSAGE MOVE PAKA80,,A ;MOVE BACK ORIGINAL TEXT FILEF MSAT,FMIML,,,#3 JMP FORMAT .PAGE NTRCPT: ;HERE TO ROUTE CURRENT MESSAGE TO "INTERCEPT" .IRP X,<0,1,2> ;CHANGE HEADER CODE TO [???]... MOVB #'?,MESG2+X .ENDM CLR l 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 EODC30 ;BYPASS EOM UPDATE MOV EODW17,R1 ;CURRENT MONTH INC R1 ;NEXT MONTH CMP R1,#12. BLE 6$ ;NO MOV #1,R2 mOPER 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 R5,SAVREG MOV 16(SP),R0 ;THE STACKED INDEX ADD #EODX21,R0 MOV R0,EODP11 ;POINTER TO PROPER OP-CODE FOR "MOVE" n23 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 oFMIML6 ;1ST CALL CLR FMIML2 ;"FORM" TYPE I JSR R5,MSAT .WORD FMIML TSTB (SP)+ BNE FMTA99 ;IF IT DID'NT WORK.. FORGET IT 2$: MOVB #3,FMIML3 ;SET FOR ATTACH ********** JSR R5,MSAT .WORD FMIML TST (SP)+ ;CAN'T DO ANYTHING ABOUT AN ERROR NOW FMTA99: JMP FORMAT ;RETURN TO BEGIN FOR NEXT MSG, IF ANY .PAGE .Lp ;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 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 NqMOV 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 MOVE 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 rCFGC00: ;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 ;#sIST ME MLIST: ;MESSAGE LIST FMIML: MSPLST QUFORM ;GENERATE MESSAGE REQUEST LIST MESGM ;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: tEW EOM JULIAN .PAGE ; ******************************************************************** ; PREPARE DATA FOR TERMINAL'S EOD MESSAGE ; ******************************************************************** ;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 u .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, THEN 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 ;MESSAv 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" TAwFLPLST ,TRMNDX ;GENERATE FILE REQUEST LIST FILGM ;GENERATE FILE WORK AREA FMFCL1 = FMFCL+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 MXMTRSx 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 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 yGE BUFFERS NEVER BECOME AVAILABLE. SO WATCH IT! EODR10: ;AS IT IS WRITTEN ABOVE MOV #EODX34,-(SP) ;PREPARE TO SUSPEND MOV #5,-(SP) ;5 SECONDS 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: WHzBLE 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 {*2 ;METER DATA BINARY TABLE FMTTMP: .BLKW MXTMPS ;TEMPERATURE DATA BINARY TABLE FMTCUM: .BLKW MXMTRS*4 ;INTERMEDIATE 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 | 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(S 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 }AT 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,-(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. .LIS~ 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 ;...AN .ASCII "060 " ;LOAD RACK DISPOSAL (USE #1) .ASCII "060 " ;TRUCK FUELING (#2) .ASCII "010 " ;BULK RECEIPT (#3) .ASCII "070 " ;PRODUCT RETURN (#4) .ASCII "030 " ;BULK DISPOSAL (#5) LOLIM = .-2 ;TABLE OF LOW FLOW LIMITS FOR NOISE CHECKING .WORD LOLIM1 ;LOW FLOW LIMITS BY USE TYPE # .WORD LOLIM2 .WORD LOLIM3 .WORD LOLIM4 .WORD LOLIM5 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 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 ONT ME ; REQUEST LISTS ; EODV10: MSPLST QUEODR ; MESSAGE CONTROL LIST MESGM EODV20: FLPLST TRM,EODW13 ; TRM FILE CONTROL LIST (TERMINAL DESCRIPTOR) FILGM 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 ; MANUALD 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 .PAGE TMPW01: .WORD 0 ;TEMPORARY STORAGE LOCATIONS TMPW02: .WORD 0 TMPW03: .WORD 0 TMPW04: .WORD 0 TMPW05: .WORD 0 TMPW06: .WORD 0 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 E 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 ADDRESS 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  TRANSACTION TO DC ;CURRENT TIME: EODW10: .WORD 0 ; HOUR EODW11: .WORD 0 ; MIN EODW12: .WORD 0 ; HOUR+MIN EODW13: .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 -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  ;BINARY OF PSUEDO-BCC FOR AUDIT-TRAIL TMPASC: .BLKB MXMTRS*TMPDGS ;TEMPERATURE DATA ASCII TABLE PIDASC: .BLKB MXPRL*PIDIGS ;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 ;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 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 ; ****************** ; EOD SERVICED FLAG ; ; = 0 IF NO TERML HAD EOD ON SCAN EODW20: .WORD 0 ; TERMINAL EOD DATE (JULIAN) EODW21: .WORD 0 ; 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  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 '  ;>0 IF AT LEAST ONE VALID FLOW REPORTED MSGBUF: .BLKB MESG3-MESG2 ;LOCAL MESSAGE BUFFER STLBGN = MSGBUF+HDRL ;BEGIN 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. ;INP************************************************** ; WRITE UPDATED "TRM" BACK TO DISC ; ******************************************************************** ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLWR,EODV20,R0,#0,#0 ;WRITE BACK UPDATED "TRM" ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * .PAGE ; ******************************************************************** ; CLEAR OUT THE "MESSAGE ; TEMPORARY EODW28: .WORD 0 ; TEMPORARY EODW29: .WORD 0 ; TEMPORARY EODW30: .WORD 0 ; TEMPORARY EODW31: .WORD 0 ; TEMPORARY 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: .ASC ;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 PCUT I.D. C.MSGN: .BLKB 4. ;MESSAGE NUMBER C.RTCD: .BLKB 6. ;ROUTING CODE C.SPOT: .BLKB 2. ;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 CND MSG1PK: ;TRANSFERS ENTIRE MESSAGE TO LOCAL MESSAGE BUFFER PACK MSGBUF,MESG2,HDRL, NUMBER TABLE" ; ******************************************************************** EODC40: ;NOW CLEAR MESSAGE NUMBER TABLE AND CLEAN UP MOV #MNT,EODV30+FLPNAM ;READ IN CLR EODV30+FLPSVC ; MESSAGE SEQUENCE ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLSNT,EODV30,R0,#2,#0 ; NUMBER TABLE ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * MOV #FILG1,R0 II /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 SKELETON 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 ; EODX,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 04,05,06,R ;HEADER TO EOR PACK MSGBUF+HDRL,ELMSGL,03,06,X ;BODY TO ETX 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 ;XFE ;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 ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * .IF NE .CITGO QUEUE RON ;TASK TO SEND LIST OF TOTALS TO TERM ;*CITGO* .ENDC JMP 40: .ASCII "FIRST" .ASCII "LAST " EODX50: ;IMAGE OF SCHEDULER MODULE .WORD 1 .BYTE TASKNO .BYTE 200 ;USE REPEAT FEATURE EODX51: .WORD 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 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 CELR TERM I.D. LOCAL PAKEND PAKA70: ;PACKET 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. .BYTE HDRLAC,00 PACK FMTERN,ERRORX,2,14 ;CONVERT ERROR NUMBER PACK MESG2+HDRL,FMTEPH,FMTERL,00 ;XFER ERROR PHRASE TO W/A  EODC10 ;BACK FOR MORE .PAGE .SBTTL PHASE #3 ; ******************************************************************** EODD00: ;ENTRY POINT AFTER 2ND 30-SEC DELAY ; ******************************************************************** 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+SY ; HEADER HUBRTE ; DCRTE ; .ASCII /000/ ; .ASCII /0 / ; EODACT ; .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 EOLS 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  PAKEND FMTEPH: .ASCII "FORMAT ERROR #" FMTERN: .ASCII " " ;ERROR NUMBER GOES HERE FMTERL = .-FMTEPH ;LENGTH OF ERR MSG .EVEN .PAGE PAKA80: ;PACKET FOR TRANSFERRING ORIGINAL TEXT BEHIND ERR MSG PACK ,MSGBUF+HDRL,ELMSGL,00 PAKEND WRNTXT: ;TEXT FOR THE MESSAGE NUMBER OUT-OF-SEQUENCE WARNING STDID HUBRTE HUBRTE .ASCII "000 0 " ;SEQ # AND PRIORITY .ASCDED1 ;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 ; ******************************************************************** MOV R5,-(SP) JSR PC,CNVRTX ;GET THIS TERM'S INDEX MOV DOF5: .ASCII " " ;HOUR EODOF6: .ASCII " " ;MINUTE EODOF7: .ASCII " " ;LAST MESSAGE NUMBER EODOF8 = . ;BEGIN OF FIELD 10: INDEFINITE LENGTH .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-EODOF ;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-II ".HA" .ASCII "FORMAT WARN #1; TERM I.D.:" WRNTID: .BLKB HDRLFR .ASCII "; MSG #:" WRNMSG: .BLKB HDRLSE .BYTE ETX WRNMSL = .-WRNTXT ;LENGTH OF WARNING .PAGE TRMPAK: ;TRANSFERS TERMINAL FACILITY TABLE TO LOCAL WORK AREA PACK FMTPTA,FILG1,FLSL1,00 PAKEND AUTOPK: ;THIS IS THE STRING THAT DISSECTS THE RAW MESSAGE PACK C.RTCD,MSGBUF+ELRCD,ELRCDL,03 PACK C.ACOD,MSG (SP)+,EODW13 ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLSNT,EODV20,R0,#2,#0 ;READ IN "TRM" ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * TSTB FILG1+TRMAED ;WAS 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,MSM+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,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 .PAGE EODY00: ;SKELETON OF END73 ;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 SEBUF+ELACT,ELACTL,01 PACK C.MSGN,MSGBUF+ELMSN,ELMSNL,01 PACK C.DATE,MSGBUF+ELJUL,ELJULL,01 PACK C.TIME,MSGBUF+ELTIM,ELTIML,01 PACK C.SPOT,MSGBUF+ELSPN,ELSPNL,01 PACK C.CARN,MSGBUF+ELCAR,ELCARL,01 PACK C.TRKN,MSGBUF+ELTRK,ELTRKL,01 PACK C.CUSN,MSGBUF+ELCUS,ELCUSL,01 PACK C.DRVN,MSGBUF+ELDRV,ELDRVL,01 PACK C.SPTB,C.SPOT,ELELSPNL,50 ;SPOT # TO BINARY PAKEND .PAGE TEQIH(R0) ;CLEAR INHIBIT 10$: CLRB FILG1+TRMAED ;RESET EOD FLAG ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF FLWR,EODV20,R0,#0,#0 ;WRITE "TRM" BACK OUT ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * BR EODD10 ;BACK FOR MORE .PAGE .SBTTL ERROR .SBTTL ERROR PROCESSING ; ******************************************************************** ; ERRO-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 " -" ;MONTH EODY12: .ASCII " -" ;DATE EODY13: 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 AUMPAK: ;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+> .BYTE ELTMPL .BYTE MVCD50 .ENDM PAKEND .PAGE MTRPAK: ;PACKET STRING FOR CONVERT-AND-STORE OF REPORTED METER FLOWS ;CONVERT TO DOUBLE-PRECISION BINARY FROMR PROCESSING: OUTPUT AN ERROR MESSAGE TO THE HUB CONSOLE ; INCLUDE IN IT AN ERROR NUMBER FOR IDENTIFICATION ; ******************************************************************** ERRORN = 0 ;ALL ERROR MESSAGES ENTER ERROR PROCESSING THROUGH THIS "SLIDE": .LIST ME .REPT ERRNUM ERRORN = ERRORN+1 INC ERRORX .ENDM .NLIST ME EODE00: ;ENTRY TO ERROR PROCESSING ROUTINE MOVE EODP30 ;BUILD ERR MSG AND CONVE.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 EODY22: .ASCII " EOD TIME = " ;EOD JULDIT 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  INPUT ASCII STRING ; DESTINATION IS PRESET INTO R0 MTRNUM = 0 .REPT MXMTRS MTRNUM = MTRNUM+1 .WORD MSGBUF+HDRL+ELMTR+> .BYTE ELMTRL .BYTE MVCD51 .ENDM PAKEND .PAGE STATDR: ;DIRECTORY OF STAT LINE CONTROL PACKETS .WORD STAT60 ;FOR USE MODE #1 .WORD STAT60 ;USE #2 .WORD STAT10 ;USE MODE #3 .WORD STAT70 RT ERROR # TO ASCII NOP MOV PC,EODW25 ;SAVE 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 ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * FILEF MSAT,EODV10,R0,#0,#3,EODRPT,EOIAN 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 MESG2,EODY00,-1,00 ;XFER SKELETON TO MESSAGTYPE 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  ;USE #4 .WORD STAT30 ;USE #5 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: STAT70: PACK STLBGN+SXT1,C.INID,SXT1L,00 PACK STLBGN+SXT2,C.TRID,SXT2L,00 PACK STDRPT ;"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$ E 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 PACK EODY22+EODPC1,EODW20,3,12  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 LBGN+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+SXT9,C.DATE,SXT9L,00 PACK STLBGN+SXT10,C.TIME,SXT10L,00 PACK STLBGN+SXT11,FMTPTA+TRMFLN,1,00 PAKEND .PAGE ; CONTROL PACKETS FOR THE VARIOUS PRODUCT LINES PROD10: ;BULK RECEIPTS PROD30: ;BULK DISPOSALS ; DEST ;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 DELAYPACK 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 " " .EVEN EODP30: ;PACKET STRING TO FILL AND 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 ELINATION PRESET INTO R0 BEFORE CALL PRNDX = 0 .REPT MXPR10 .WORD PIDASC+PIDIGS-BUK20L+ .BYTE BUK20L .BYTE MVCD00 .WORD TMPASC+TMPDGS-BUK21L+ .BYTE BUK21L .BYTE MVCD00 .WORD QTYASC+QTYDGS-BUK22L+ .BYTE BUK22L .BYTE MVCD00 .WORD SGNEOR .BYTE 2 .BYTE MVCD00 PRNDX = PRNDX+1 ; ********** .E 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 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@ @R7I&I0@ EMENT 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 INDNDM PAKEND .PAGE PROD60: PROD70: ; DESTINATION PRESET INTO R0 BEFORE CALL PRNDX = 0 .REPT MXPR60 .WORD PIDASC+PIDIGS-SXT20L+ .BYTE SXT20L .BYTE MVCD00 .WORD TMPASC+TMPDGS-SXT21L+ .BYTE SXT21L .BYTE MVCD00 .WORD QTYASC+QTYDGS-SXT22L+ .BYTE SXT22L .BYTE MVCD00 .WORD SGNEOR .BYTE 2  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 MO @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 .BYTE MVCD00 PRNDX = PRNDX+1 ; ********** .ENDM PAKEND .END 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 S HAS HU TND AD,LS; 4*0501 HE TINE NC OLYONS ARPEAPT IS,NE OEDAM NHE TOFE ONS IONTIEC SHE TIF; 3*0501 E.ER HESLIY ITILABN IOCTSEL RONTCOS R'DEOA LHE TTOT REEC SHE;T 2*0501 1*0501 ) OD MBJ OOT(NE AM NALOBGLA R FOD LSH RCEA;S : OBGLPT 0*0501 300::4231: 02 -7294- 2 4 E AGP  E AG.P 9*0401 PC S RT 7 2000 0604500 8*0401 R0+,P)(S V MOGFOR 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 ; :.7 "7 7 ȀXZ*(>  5x*U*L 8& h x5 x *p5& 5@x5. 5x5 x >* _ 5@x O*R J FߋxD:6*ėx$   @ {*(  TEST LINE FOR 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 *LCOMBINED DMA PRINTER AND DISC EXERCI{*pSERABCDEFGHIJKLMNOPQRSTUVWXYZ1234567*890'(*)=,$.ABCDEFGHIJKLMNOPQRSTUVWXY=Z1234567890'(*)=,$.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 LIST0 n*|G*  7xp_*5 a`7*,55@ E7|C*Prlj7 f`dб@  X 7NЄ *tF.U@7 B72 : /*" % 5 *@  55ύ 1R5,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 MOVE EODP10 ;TRANSFERS SKELETON, THEN FILLS IMAGE WITH INFO NOP JSR R5,RESREG MOV (SP)+,(SP) ;P 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,7 N.W µ 0 0 4,&  C ` 7µ 30J0l0\ (  \*,r7 e 7 N 'W  &2&'  B M4 L *, &'|8 &' | , D B A w`D 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, THEN 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 ; 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 ,@   z-2 @   ,, ^&*&' Le 7 &*1,P   E   ,t  $7 7 ,7  X  z v  X {,s*  `0d7z`w w| h  * ,Z ^ fZ rf \ B_o 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 EMT QTIME ;SUSPEND TASK 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 EODR 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 fr,T 7 R & D   z$m"$$&v,(   6@B(,LE `BEC 3,pm  ! ! |""$&"2FXr2.2FX r 2,Xrwz  ee %Xrr,r  R 10 ;TRY HIM AGAIN: WHAT WORSE CAN HE SAY BUT "NO". 2$: MOV EODW25,R0 ;RETURN ADDRESS - 2 TST (R0)+ ;GET IT RIGHT MOV R0,PC ;AND AWAY WE GOOOO .PAGE 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 RELEVANT .IRP X,<0,1,2,3,4> ;POP STACK INTO REGS: JSR R5,RESREG MO4*0101 ******************************************************************** ; 3*0101 2*0101 PC S RT 7 2000 0524400 1*0101 344000  D ANMMCOD RLH IT WEDFICIPE SETFSOF ; R4T,SEFF O DD A 0467066 4404 0 * 1010 04 0204 0  RTTA SCKLO BXTTE@ C ;P R4C,RPCU D AD: C1TPGE4 7066 0424400 9*0001 020000  H TCFER TEAFS NTMERENC IPCE NCSI ; R42, # OV M 0427016 4304 0 * 0810 0O ER ZSEBAE ULOD/ ;01-14-73 JSR PC,INTRML ;READ IN "TRM" WITH LOCK BR 30$ MOVE PAKH01,32$ ;CVT INP PARAMS & STORE IN TEMP'Y AREA ;01-17-73 MOV TMPW02,R1 ;TEMP SEQ # BNE 4$ ;USED AS TABLE INDEX WHEN NON-ZERO MOV TMPW04,R0 ;OVERWRITE PRODUCT CODE. MOV #FILG1+TRMPPD,R1 ;INIT SEARCH POINTER ; WILL SEARCH TABLE FOR MATCHING PRODUCT CODE. ; A ZERO OVERWRITE CODE IMPLIES A SEARCH FOR 7r r , R7 ` <N ,F w DDm tDQ$ k,8 bw  Dd H w,\DQ$ nD D \Q$Dd , D BQ$DdD dD,Q$ 87 7 x W- l D,Dde&7!d  V 7 v ,ɥɥ H e8 ,   @V (SP)+,R'X .ENDM RTS R5 .PAGE .SBTTL LISTS, SKELETONS, ETC. ; REQUEST LISTS ; EODV10: MSPLST QUEODR ; MESSAGE CONTROL LIST MESGM EODV20: FLPLST TRM,EODW13 ; TRM FILE CONTROL LIST (TERMINAL DESCRIPTOR) FILGM EODV30: FLPLST NMN,EODW13 ; NMN FILE CONTROL LIST (NULL MSG NO) ; ; DATA AREA ; EODX10: TNKFID ; TANK GAUGE FORMAT ID EODX11: INTID ; INTERCEPT ID MADLOM RO FETFSOFH IT WRNTURE ; : PCET G * 0710 0 * 0610 01 PCET G R B 0204004 4304 0 * 0510 04 7777 1  PCUR CINY ADREALS RDWOD EA LOR FNTOUCC;A 4 ,R+2TSBYLD#- V MO 4 7012 0304400 4*0001 ROZEE BLTACALOREM RO FETFSOFS APCH IT WNSURET;R : CRTPGE 3*0001 ******************************************************************** ; 2*0001 1*0001 N RTD AN..;. R5 + AN OPEN (BLANK) CELL. MOV #TRMGPL,R2 ;INIT SEARCH COUNTER (LIST LENGTH) 2$: CMPB (R1),R0 ;MATCH? BEQ 6$ ;YES CMPB (R1)+,(R1)+ ;BUMP TO NEXT PROD CODE CELL SOB R2,2$ ERR ;LIST SEARCH FAILURE 4$: ASL R1 ;USE AS INDEX TO TABLE ADD #FILG1+TRMPPD-2,R1 ;ABSOLUTIZE POINTER 6$: MOVB TMPW03,(R1)+ ;NEW PRODUCT CODE MOVB TMPW01,(R1)+ ;NEW GRAVITY GROUP ,4     7  ,X  e! & e!,| @R P |1 R ,7 jX W 27W 4 X X }0. ' E# w f*;}G`,w8 W! W! sE;}G 8 ,W!  & 36EODX12: 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: .WORD 0 ; TERMINAL INDEX FOR USE AS FILE LOC EODW14: .WORD 0 ; TERMINAL EOD TIME EODW15: .WORD 0 ; CURRENT YEAR EODW16: .WORD 0 ; DAY EODW17S RT 5 2000 0264400 0*0001 R4+,P)(S V MO 4 6012 0244400 9*9900 R3+,P)(S V MO 3 6012 0224400 8*9900 R2+,P)(S V MO 2 6012 0204400 7*9900 R1+,P)(S V MO 1 6012 0164400 6*9900 ..S.ERTH ORETOES;R R0+,P)(S V MO 0 6012 0144400 5*9900 R5D DEEENN UOP;P + P)(S T TS 6 7205 0124400 4*9900 GS RRETOES;R : OPGPRE 3*9900 2*9900 N RTD AN..;. 5)(R P JM 'JSR PC,OUTTRM ;WRITE "TRM" BACK OUT JMP CFGA10 ;BACK FOR ANOTHER LINE 30$: ERR ;"TRM" NOT THERE 32$: ERR ;INPUT PARAM CONVERSION ERROR 34$: ERR ;SENDER WAS NOT THE DATA CENTER ;01-14-73 .PAGE .SBTTL OP CODE 22 CFGI00: ;OP CODE 22: UPDATE E-O-D & E-O-M TIMES JSR PC,INTRML ;READ IN "TRM" WITH LOCK BR 30$ MOVE PAKI01,32$ ;CONVERT INP.4 s ) 11$& ` $:<}(H,Z U11   4949 2,~77 ~w ,n7 wf* !7 pwhf* ,wfQ$ 2 H2 ,&f&M , mm-4: .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 ; 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: .W 5 1100 0104400 1*9900 P)(S,-R0 V MO 6 0410 0064400 0*9900 P)(S,-R1 V MO 6 1410 0044400 9*9800 P)(S,-R2 V MO 6 2410 0024400 8*9800 . ..STREE AV;S P)(S,-R3 V MO 6 3410 0004400 7*9800 " SR"JY BEDSHPU5 ;R P)(S,-R4 V MO: AVGSRE6 4410 0764300 6*9800 484::3231: 02 -7294- 0 4 E AGP  E AG.P 5*9800 16S0$P0!0000&116IPPR D OR.W 4 0000 0744300 4*9800 15S0$P0!0000#UT DATA TO BINARY ;01-17-73 ;FORM NEW EOD/EOM TIME MOV TMPW04,R0 ;EOD MINS CMP R0,#59. ;MINS INSIDE LIMIT? BLE 2$ ;YUP CLR R0 ;DEFAULT MINS 2$: MOV R0,R3 ;NEED TO ROUND TO NEXT LOWER 15 MINUTES CLR R2 DIV #15.,R2 SUB R3,R0 ;SUB OUT REMAINDER MOV TMPW03,R1 ;EOD HOURS CMP R1,#23. ;IS IT A GOOD NUMBER? BLE 4$  &,2  ~&7 e ,V e #0-&],z 7 #0- ,  E7~ee  , e '&~p, e p 4w N ^, e De N w  ,. w e 7!  #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 ; TEMPORARY EODW32: .WORD 0 ;FLAG TO EXIT AFTER MSG QUEUE IS EMPTY ERRORX: .WORD 0 ;ERROR NUMBER .PAGE EODCAL: ;CALENDAR .BYTE 31.,28.,31.,30.,&115IPPR D OR.W 4 0000 1724300 3*9800 14S0$P0!0000&114IPPR D OR.W 4 0000 1704300 2*9800 13S0$P0!0000&113IPPR D OR.W 4 0000 1664300 1*9800 12S0$P0!0000&112IPPR D OR.W 4 0000 0644300 0*9800 11S0$P0!0000&111IPPR D OR.W 4 0000 0624300 9*9700 10S0$P0!0000&110IPPR D OR.W 4 0000 0604300 8*9700 09S0$P0!0000&109IPPR D OR.W 4 0000 0564300 7*9700 08S0$P0!0000&108IPPR D OR.W 4 0000 0544300 6*9700 07S0$P0!0000&107IPPR D OR ;YEAH! CLR R1 ;DEFAULT HOURS 4$: SWAB R1 ;PUT HOURS IN UPPER BYTE BISB R0,R1 ;COMBINE HOURS AND MINUTES ;CALCULATE JULIAN FOR NEW E-O-M MOV CFMONB,R0 ;CURRENT MONTH MOVB CALTAB-1(R0),-(SP) ;SAVE # DAYS THIS MONTH ON STACK MOV CFDATB,R2 ;TODAY'S DATE DEC R2 NEG R2 ;# DAYS SPENT THIS MONTH ADD CFJULB,R2 ;JULIAN FOR FIRST OF THIS MONTH MOV ,R 2-7!e &fe ,v  !!!!!w n @` , 7 B w \ 7 ~, 77 ep\e  , MHb-F Z  > H g, R&"H, 7 Ht,* ? 5Ћ#Bw,N ` 7@50 2,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 SKELETON 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 BUF.W 4 0000 0524300 5*9700 06S0$P0!0000&106IPPR D OR.W 4 0000 1504300 4*9700 05S0$P0!0000&105IPPR D OR.W 4 0000 1464300 3*9700 04S0$P0!0000&104IPPR D OR.W 4 0000 0444300 2*9700 03S0$P0!0000&103IPPR D OR.W 4 0000 0424300 1*9700 02S0$P0!0000&102IPPR D OR.W 4 0000 1404300 0*9700 01S0$P0!0000&101IPPR D OR.W 4 0000 1364300 9*9600 8*9600 Y.OREM MTOIND DEOA LRE AEYTH ; 7*9600 EREVENWHE IZ SR2,R5 ;SAVE IT FOR BELOW MOV #1,R3 ;INIT TARGET DATE MOV TMPW01,R4 ;NEW E-O-M FLAG (1 OR 2) CMP R4,#1 BEQ 6$ ;IS "FIRST" MOV #2,R4 ;FORCE TO "LAST" IF NOT "FIRST" MOVB (SP),R3 ;CHANGE TARGET DATE TO END OF THIS MONTH ADD R3,R2 DEC R2 ;BUMP JULIAN E-O-M TO END OF THIS MONTH INC R0 ;NEXT MONTH, IN CASE WE PASSED E-O-M DATE & TIME 6$: MOVB r @ e 2 *, "ww` X   .  e L  (,   8w" tnX  n!,      ,( m2 *#e#! ,L  E m7],p 7eR  $FER .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 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 UMIMAX MHE TSTUEEQ RSTMUY HE TND AE,IZ SIND XEFI ; 6*9600 RE ANSIOITRTPAR EITH E.ICSLE-IM TOR NEDIX FOT N.,.E IC,MINADY ; 5*9600 ISY ITORRI PHE TIFT SES IIT BGNSIE TH Y.ITORRI PCHEAR FO ; 4*9600 S ZESI" GEPA "ORK OCBLE BLWALOALX MAF OLEAB;T : ABZTBS 3*9600 2*9600 1*9600 ****** R E D A O L F O D N E* ****;* ITEX T EM 4 0004 1344300 0*9600 UT R4,FILG1+TRMEOM ;LOAD TABLE WITH NEW E-O-M FLAG CMP R3,CFDATB ;E-O-M DATE :: TODAY'S DATE BGT 10$ ;BEYOND TODAY: NO NEED TO ALTER JULIAN BLT 8$ ;WE HAVE PASSED IT: MUST BUMP TO NEXT MONTH MOVB CFHORB,R4 ;TODAY: SEE IF WE'VE PASSED IT'S TIME SWAB R4 BISB CFMINB,R4 ;FORM CURRENT TIME IN HH:MM FORMAT CMP R4,R1 ;CURRENT TIME :: E-O-D BLE 10$ ;TIME HASN'T ARRIVED YET 8$:   R q,  #0 E   , w >Z J w .4ZJ , wR8 &Rj, D ^ D ,$ `' `yH    RR  EODOFM: ;OPEN FOLIO MESSAGE SKELETON ; MESSAGE SKELETON ; STDID ; HEADER HUBRTE ; DCRTE ; .ASCII /000/ ; .ASCII /0 / ; EODACT ; .BYTE EOR ; .ASCII "020" ;INPUT ID FOR OPEN, CLOSE FOLIO & NULL MSG RPT EODOF1: .ASCII " " ;TERMINAL I.D. EODOF2: .ASCII " " ;FOLIO # EODOF3: .ASCYOTT T EM 3 0104 1324300 9*9500 446300  P)(S,-STYLTT # OV M ' 4627016 3204 0 * 5809 02 0302 0  620001  GESAES MD"EN2 S AS"P ;F BUTY,TSG2MND # OV M ' 6727010 3204 0 * 5709 0 4 :1323::201 729--2 4 39 GEPA    GEPA . * 5609 00 L4OD L GE B 6423006 3104 0 * 5509 0? REMO ; 0 R EC D 0053004 3104 0 * 5409 0T IS LINO NF IORCTSET AS PMPBU ; )+R1,()+R1 (  MOVB CALTAB-1(R0),R0 ;# DAYS THIS/NEXT MONTH ADD R0,R2 ;BUMP JULIAN: FIRST OR LAST OF NEXT MONTH 10$: MOV R2,FILG1+TRMEMM ;FILL E-O-M JULIAN MOV R1,FILG1+TRMEOD ;FILL E-O-D TIME ; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;REGISTER STATUS: RO,R2, & R3 ARE FREE; ; R1 = EOD TIME; R4 = CURRENT TIME; R5 = JULIAN FOR FIRST OF THIS MONTH ; NOW WANT TO COMPUTE JULIAN FOR E-O-D DATE MOV (SP)+,R3 ;# D `z`@. , ROSLOD IIA # ROSLOD PASS #,1 END  ROSLOD PASS #2 BEGIN ,6 ROSLOD PASS #2 END ERROR #  Z | \},\ **** ROSLOD LOAD MAP **** BE,********** MODULE TITLE: "" SE,CTION ENTRY OFFSET SIZE TOTAL<,>  , II " " ;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 .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 MP C 2121022 3104 0 * 5309 06 1402 0  +2MENABF+,1)(R V MO 7 1612 0064300 2*9500 502100  E AM NLEDUMOJ OBT EX NTHWIT IS LLLFI ; E AMFN,B)+R1 ( OV M 6721012 3004 0 * 5109 00 1602 0  E ULOD MCTJEOB= E YP;T ATSTBF R CL 7 0605 0764200 0*9500 S OD MBJ OENTH, STIR FLEDUMOD OA LSELO;C OSCLBF T EM 1 0404 1744200 9*9400 526400  P)(S,-K1BLBF # OV M0:L4OD'L4627010 2704 0 * 4809 06 5410 0 AYS IN CURRENT MONTH MOV TMPW02,R0 ;E-O-D DATE CMP R0,CFDATB ;EODATE :: TODAY'S DATE BGT 14$ ;NOT ARRIVED YET BLT 12$ ;GONE, MAN, GONE CMP R4,R1 ;EOD IS FOR TODAY: SEE IF TIME HAS PASSED BLE 14$ ;HOUR HAS NOT YET ARRIVED 12$: ADD R3,R0 ;BUMP DAYS TO NEXT MONTH 14$: ADD R5,R0 ;JULIAN EOD FOR EITHER THIS OR NEXT MONTH DEC R0 ;COMPENSATE FOR FIRS !********** UNDEFINED REFERENCES  &,&\MR$J} F  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,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,EO  S MENAE ULOD MOFT IS;L R1F,BUAM#N V MO 1'7012 0644200 7*9400 104200  SELO CTOS NTMELE ELEDUMOT ECBJ OOF# ; R0T,CNOD M OV M 0067010 2604 0 * 4609 0 TSENLMLE EP"FU"BN PE OLL ASELO CTOE UR SBE: NTOI PITEXN MOOM;C 8:L2OD L * 4509 06 2002 0  LEDUMOD OA LINP UEDUSS ORCTSEF O;# E IZFS,BR1 V MO 7 1610 0544200 4*9400 3*9400 O GTOS ORCTSEE OR;M 30DLLO E BL 3 7503 0524200 2* T DAY BEING =1 ;01-14-73 MOV R0,FILG1+TRMEDM ;FILL TABLE IMAGE WITH IT... JSR PC,OUTTRM ;WRITE "TRM" BACK OUT JMP CFGA10 ;BACK FOR ANOTHER LINE 30$: ERR ;"TRM" NOT THERE 32$: ERR ;INPUT PARAM CONVERSION ERROR .PAGE .SBTTL OP CODE 23 CFGJ00: ;OP CODE 23: INIT FOLIO # & OPEN FOLIO JSR PC,INTRML ;READ IN "TRM" WITH LOCK BR 6$ x3 xsxx3 ~x 3~z, xNl* v 6 F6Z Bf*l*& JnBe@` E@l* `*`*':_NW3:_NW3rW:_NW3:_NW3:_NW3NW*:_NW3:_NW3   '͕ e uBF*r MՋ  W! DW30,EOD8L,12 ;LAST MESSAGE # PAKEND .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 9400 003300  ? ORCTSET AS LEDSSPAE WVEHA ; ECASTR0, R MP C 6700026 2404 0 * 4109 0 RSBEUM NORCTSEH OT BMPBU ; )+R1,()+R0 ( B MP C 2120124 2404 0 * 4009 06 5501 0  T"LSXT"TTHWIE ITWRR OADREO ;G O TIEX,TPC R JS 7 7604 0404200 9*9300 472200  TERI WTOT SE ; W R.XT T B NC I 6752104 2304 0 * 3809 00 2502 0  D.I.E IL FTERI;W D HEXT,TR2 V MO 7 2610 0304200 7*9300 662200  R TOEC ;01-08-73 TSTB FILG1+TRMFLN ;FOLIO # BEQ 4$ ;OLD # MUST BE ZERO, AND... 2$: ERR ;...NEW MUST BE 1-31 6$: ERR ;"TRM" NOT THERE ;01-08-73 4$: MOVE PAKJ01,2$ ;CONVERT FOLIO # TO BINARY ;01-17-73 MOV TMPW01,R0 ;AND HERE IT IS! BEQ 2$ CMP R0,#31. BHI 2$ MOVB R0,FILG1+TRMFLN JS p6F*& ˕ 㕀 pxsnx 0Zz*w$ &  4z, nx 0[g Kgw$7 k*KgWE g"geg"grFw"gk. ߕ!`*e2ad`*Jw  & & N`#N` NW3*W*RWW~WrWfWZWNWBW(WW~WrWfWZWNWBW6W&W" DATE = " EODY11: .ASCII " -" ;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 = " STERI WUPT SE ; ECTSTX1, R OV M 6701014 2204 0 * 3609 0 4 :5293::201 729--2 4 38 GEPA    6 5701 0  T"LSXT"TTHWIE ITWRR OADREO ;G O TIEX,TPC R JS 7 7604 0204200 5*9300 642200  0 0100 0  . .D IADREP UET;S EDTHTXD,HITC#B V MO 7 7612 0124200 4*9300 042300  ORCTSED EA RUPT SE ; ECTSTX0, R OV M 6700016 2004 0 * 3309 01 3002 0  ADREO TET;S .WTRTX R PC,OUTTRM ;WRITE "TRM" BACK OUT MOV TRMNDX,R1 MUL #OUTL,R1 ADD #OUTST+OUTRTV,R1 ;01-10-73 MOV R1,PAKJ2S ;ADDR OF LAST MSG # FOR CONVERSION ; NOW LOAD OUTPUT MSG AREA W/FILLED-IN SKELETON OF THE "OPEN FOLIO" ; MESSAGE, USING ASCII INFO FROM THE INPUT LINE, THE "TRM" TABLE, ; AND THE STORED DATE & TIME. MOVE PAKJ02 MOVB #1,TLSTFG ;PREVENT MULPIPLE "FORMS"  EODY20: .ASCII " EOD(JULN) = " ;EOD DAY 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,HDRBCL: 30DLLO7 0605 1024200 2*9300 060000  . .D ILEFIE ITWR ; 2 ,R3)(R 6 OV M 0263016 1704 0 * 3109 0 ORCTSEE ITWRE IVATEL RITIN ; 1 R LR C 0150004 1704 0 * 3009 00 2702 0  #ORCTSED EA RVETILARET NI;I 0 ,RCTSEBF V MO 0 7016 0704100 9*9200 000000  N RUO TDYEA ROWSH ; ) R1R(DEEA H LR C5:L2OD'L6150004 1604 0 * 2809 00 0000 0  D.I.E IL FANTHR HEAT RSE;U 1)(RFD,IR0 V MO 1'0610 0604100  ;01-08-73 JMP CFGC30 ;GO FORM, ATTACH, & EXIT TO TOP ;01-08-73 .PAGE .SBTTL OP CODE 24 CFGK00: ;OP-CODE 24: UPDATE METER TABLE MOVE PAKK01,2$ ;CONVERT ALL INPUT PARAMS TO BINARY ;01-17-73 MOV TMPW01,R0 ;SPOT # BNE 4$ 2$: ERR ;SPOT # OUTSIDE LIMITS 4$: CMP R0,#MXSPTN BGT 2$ MOV TMPW04,R1 ;METER # BNE 8$ 6$: ERR ;MET RLTO,00 ;PUT DEST RTE CODE IN HDR PACK MESG2,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,1 7*9200 000010  D.I.E IL FANTHR HEAT RFD IOWSH ; 0 ,R000010 # IS B 0027054 1504 0 * 2609 04 0000 0  D OR WFD;I R0),R34( V MO 0 3016 0504100 5*9200 . .D ILEFIE AVLE: EDRNTURED IFO ;N 25DLLO L BP 6 0000 1464100 4*9200 160000  ? EDSTUEEQ RFD IANS WA ; ) R0S(ATST H B ST T 6057102 1404 0 * 2309 00 0000 0  060000  D.I.E IL FITIN ; 1)(RFD,I3)(R 6 OV M ' 6163014 1304 0 * 2209 0 ER # INVALID 8$: CMP R1,#MXMTRN BGT 6$ ; NOW THAT METER # AND SPOT # HAVE BEEN CHECKED, FIND INDEX INTO "MTR": MOV R0,R3 ;SPOT # DEC R3 MUL #MXMTRN,R3 ADD R1,R3 ;INDEX: 1-80 MOV R3,R2 MOV #FILG1,R1 ;INIT POINTER TO TYPE I AREA MOV #MTR,CFFCL1 ;NOW PREPARE TO READ IN "MTR" MOV #2,CFFCL2 ;WRITE LOCK: TYPE I ONLY 10$: FILEF FLSNT ;READ 2 PACK EODY20+EODPC1,EODW28,2,12 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 "EODEXND IRDWOA W NO ; 1 R SL A 0163002 1304 0 * 2109 00 0000 0  AYRLVE OIN" ESAG"P# T NI;I) R1E(IZBS+,P)(S VBMO 1'6612 1264100 0*9200 000000  ) R1T(TAOS I B LR C ' 6150102 1204 0 * 1909 00 0000 0  USATSTK AS;T ) R1T(TATS RBCL 1'0605 1164100 8*9100 000000  TYRIIOPR ; ) R1Y(RTTP2, R B OV M ' 6102112 1104 0 * 1709 0 VEBO AEDFTHI SAS WTYRIIOPR ; 2 R SR A 0262000 1104 0 * 1609 0IN A "MTR" CELL SUB #MXMTRN*ARPSEC,R2 ;COUNT OFF FROM INDEX BLE 12$ ;WE HAVE THE CORRECT CELL IN CORE MOVB #2,CFFCL3 ;PREPARE FOR A TYPE II... MOV #FILG2,R1 ;...BY RE-INITING PAR AND BIAS BR 10$ ;GO READ ANOTHER ONE 12$: ADD #MXMTRN*ARPSEC-1,R2 ;RESTORE INDEX FOR THIS CELL ASL R2 ASL R2 ;*4 GIVES INDEX TO THIS METER'S ENTRY ADD R1,R2 ;ABSOLUTIZE IT ; ERROR # " EODEM1: .ASCII " " .EVEN EODP30: ;PACKET STRING TO FILL AND XFER ERROR MESSAGE PACK EODEM1,ERRORX,2,12 ;CONVERT ERROR NUMBER PACK MESG2,EODEM0,-1,00 PAKEND .END S YE ; 3 R3DE L NE B 5313006 1004 0 * 1509 02 0000 0  ? ORRR;E ) R32( TBTS 3 7605 1024100 4*9100 ******** ; 3*9100 EDINEF DLEFIT GEO ;G NEFIDE T EM 1 0504 1004100 2*9100 ******** ; 1*9100 P)(S,-R3 V MO 6 3410 0764000 0*9100 120000  NEFIDEO TRSTOEC SOF# ; ) R3.(105, R OV M 6305012 0704 0 * 0909 0 LEFIN IRSTOEC SOF# ; 5 R NC I  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ;NOW IT IS TIME TO FILL THE METER'S ENTRY WITH THE INPUT PARAMETERS. ; ANY OF THE FOLLOWING THREE PARAMETERS THAT IS ZERO WILL NOT BE STORED: MOV TMPW05,R1 ;PROBE # BEQ 14$ CMP R1,#MXPRBN BLE 13$ ERR ;PROBE # ABOVE LIMIT 13$: MOVB R1,(R2) ;FILL TABLE IMAGE 14$: INC R2 ;NEXT BYTE MOV TMPW03,R1 ;PROD # 0552000 0704 0 * 0809 04 3702 0  -1S ORCTSEF O #ET;G 5 ,RCTSEBF B SU 5 7066 1644000 7*9000 663400  N TEITWRR TOEC SALIN FOF# ; R5C,SERA T OV M 0567010 0604 0 * 0609 00 0100 0  160000  STLIO NT IPETYE IL FADLO ; 3)(R8.),R0S(ATST H B OV M 6360112 0504 0 * 0509 0 LEFIS RO" NEFIDE "TOY ADRE ; 2:L2OD L * 0409 0 6 :0263::201 729--2 4 37 GEPA    GEPA . BEQ 18$ CMP R1,#MXPRDN BLE 16$ ERR ;PROD # ABOVE LIMIT 16$: MOVB R1,(R2) ;FILL IMAGE 18$: INC R2 MOV TMPW02,R1 ;AREA USE # BEQ 22$ CMP R1,#MXUSEN BLE 20$ ERR ;USE # ABOVE LIMIT 20$: MOVB R1,(R2) ;FILL IMAGE 22$: INC R2 CLRB (R2) ;CLEAR NOISE BYTE CLRB CFFCL2 ;CLEAR LOCK AFTER WRITE FILEF FLWR ;WRI * 0309 0 * 0209 02 2202 0  ITEXD ANR ROERT INPRO ;G T PRRR,EPC R JS 7 7604 0464000 1*9000 TSMILIE IDTSOU# K AS;T P)(S,-R4 V MO: 30ERLD6 4410 0444000 0*9000 TSMILIE IDTSOUY ITORRI;P R4 C IN: 31ERLD4 2005 0424000 9*8900 K AS T/S TOR FORRR ERYNT EEQ XAX;M R4 C IN: 32ERLD4 2005 0404000 8*8900 ORRR EE"IL FNEFIDE;" R4 C IN: 33ERLD4 2005 0364000 7*8900 TYRIIOPRR FOG BIO TOE TE UPDATED METER TABLE BACK OUT JMP CFGA10 ;RETURN TO PROGRAM TOP .SBTTL OP CODE 26 .SBTTL OP CODE 25 CFGL00: ;OP-CODE 25: UPDATE "TMP" TABLE JMP OPCERR ;NOT IMPLEMENTED FOR CITGO ;!!!!!!! CFGM00: ;OP-CODE 26: UPDATE TIME ZONE INDICATORS JSR PC,INTRML ;READ IN "TRM" WITH LOCK BR 12$ ;01-0IZ SAMGRRO;P R4 C IN: 34ERLD4 2005 0344000 6*8900 D.I.E IL FALEGLL;I R4 C IN: 35ERLD4 2005 0324000 5*8900 PETYE IL FALEGLL;I R4 C IN: 36ERLD4 2005 0304000 4*8900 3*8900 ES;Y 22DLLO Q BE 1 4101 0264000 2*8900 050000  ? AYRLVE OANR FOL GALET IIS ; P TYOV#$5, R MP C 2705022 0204 0 * 9108 00 6077 1  N IG SEDNDTEEXF OID;R R51,7-17#- C BI 5 7042 0164000 0*89"8-73 MOVE PAKM01,10$ ;CONVERT TIME ZONE INDICATORS TO BINARY;01-17-73 MOV TMPW01,R0 ;TMZ (1-5) BEQ 2$ CMP R0,#5 BLE 4$ 2$: MOV #HUBZON,R0 ;DEFAULT ZONE IF INPUT PARAM WAS ILLEGAL 4$: MOV TMPW02,R1 ;STD/DST FLAG (1 OR 2) BEQ 6$ CMP R1,#2 BLE 8$ 6$: MOV #HUBDST,R1 ;DEFAULT DST FLAG IF INPUT PARAM WAS ILL 8$: MOVB R0,FILG1+TRMTMZ ;FILL "TRM" 00 160000  E YP TLEFID TEESQURE ; R5),R0S(ATST H B OV M 0560112 0104 0 * 8908 06 0000 0  T IS LTOIN. .D ILEFID OA;L 3)(R,6R5 V MO 3 5610 0064000 8*8800 35ERLD T BG 2 0103 0044000 7*8800 640700  D WELOALX MA=  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,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 ;*