22FL #LIS K0FINISH>K0ALLGEO>K0GREATGEO>K0COMMAND 22PD ... SEG FINISH,867,SECTION CENT 22^= ...[ 2394 ...[ 23DW ...[ (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1982 23NN ...[ 23YG [ THE ENTRY POINTS 24D6 [ THESE ENTRY POINTS MUST BE KEPT FIXED WITHIN THE SEGMENT 24XQ SEGENTRY K1FINISH,QENTRY1 25CB SEGENTRY K2FINISH,QENTRY2 25X2 [ 26BL FSHENTRY K3FINISH,,QENTRY3,QENTRY3 26W= FSHENTRY K4FINISH,,QENTRY4,QENTRY4 27*W FSHENTRY K5FINISH,,QENTRY5,QENTRY5 27TG FSHENTRY K7FINISH,QENTRY7,,QENTRY7 28*6 SEGENTRY K8FINISH,NOPAR 28SQ SEGENTRY K9FINISH,PHAST 29#B SEGENTRY K10FINISH,WAIT 29S2 FSHENTRY K11FINISH,,QENTRY11,QENTRY11 2=?L FSHENTRY K12FINISH,,QENTRY12,QENTRY12 2=R= FSHENTRY K13FINISH,,QENTRY13,QENTRY13 2?=W [ 2?QG [ SEGENTRY K14FINISH IS MENDING POINT FOR MACRO FNDELE 2#=6 [ 2#PQ [ 2*9B # THIS SEGMENT IMPLEMENTS THE FINISH COMMAND (SURPRISE! SURPRISE!) 2*P2 # THERE ARE 3 CASES:- 2B8L # 1) PARAMETER =NOW 2BN= # ALL JOBS ARE ABANDONED ,ALL LF/IN STOPPED 2C7W # 2) PARAMETER =TIME 2CMG # ALL JOBS ABANDONED AFTER SPECIFIED TIME. NO MORE JOBS MADE 2D76 # FULLY STARTED DURING TIME, LF/IN ALLOWED TO FINISH 2DLQ # 3) PARAMETER MISSING 2F6B # NO MORE JOBS MADE FULLY STARTED 2FL2 # 2G5L # IN ALL CASES NO NEW JOBS ARE ACCEPTED AFTER FINISH 2GK= # 2H4W # WORD IN FIXED USED AS MARKER TO OTHER ACTIVITIES ON STATE OK 2HJG # FINISH COMMAND :- 2J46 # B0=1 FINISH COMMAND BEEN GIVEN 2JHQ # B1=1 TIME UP 2K3B # B2=1 FINISH NOW 2KH2 # B3=1 ALL BUT SYSTEM ISSUED JOBS HAVE FINISHED 2L2L # B4-23 TIME LEFT IN CASE 2 2LG= # 2NDQ XIN 4HIN 2NYB NOW 4HNOW 2PD2 TIME 4HSECS 2PXL 4HMINS 2QC= 4HHRS 2QWW TLIMH +73 2RBG TLIMM +4321 2RW6 TLIMS +259201 2S*Q XBACTRING +BACT+ACTRING 2STB STOPPED #52700002 [STOPPED FOR ABANDON BITS IN JOBEVENT 2T*2 [ 2TSL # 2X?G # 2XR6 [ S/R TO UNSET THE 'CURRENT FINISH ACTIVITY' BIT. FIRST IT TEST THAT 2Y=Q [ THE BIT IS SET. 2YQB UNSET STO 0 GL2 2^=2 LDCT 0 #20 2^PL ANDX 0 EXT+11(2) 329= BNZ 0 X1 [ IF ZERO, THE BIT IS UNSET 32NW GEOERR 0,OOPS! 338G X1 ERS 0 EXT+11(2) 33N6 BRN (GL2) 347Q [ 34MB [ S/R TO STOP A FINISH ACTIVITY BY FORCING AN ENDCOM. IT LOADS THE 3572 [ ENDCOM LINK INTO THE ACTIVITY BLOCK AND THEN PUTS THE BLOCK ON 35LL [ THE ACTIVITY LIST SO THAT IT CAN END ITSELF TIDILY. THIS ALLOWS 366= [ FINISH TO BE ISSUED FROM A MACRO. THE S/R ALSO UNSETS THE 36KW [ 'CURRENT FINISH ACTIVITY' BIT 375G NL ENDCOM 37K6 STOPFIN 384Q STO 1 GL1 38JB LDX 2 3 3942 LDX 1 FX1 39HL LINKSET 2,NL+1(1) [ PUTS ENDCOM LINK IN ACTIVITY 3=3= CALL 0 UNSET 3=GW FPUT [ PUTS ACTIVITY ON ACTIVITY LIST 3?2G BRN (GL1) 3?^Q # 3#FB # 3#^2 # S/R TO STOP A JOB. CHECKS WHY NOT STOPPABLE (IF THIS IS THE 3*DL # CASE) AND UPDATES X7 EVERY TIME FINDS A JOB NOT CURRENTLY 3*Y= # STOPPABLE 3BCW STOP2 SBX 5 FX1 [STOP JOB FOR WHENEVER ONLY 3BXG DOWN PROCONTX,7 3CC6 BRN WHY [NOT STOPPABLE 3CWQ BRN STOP3 [STOPPED 3DBB STOP SBX 5 FX1 [STOP JOB 3DW2 DOWN PROCONTX,2 3F*L BRN WHY [NOT STOPPABLE 3FT= BRN XGER [SYS ISS 3G#W STOP3 3GSG JOBLOCK 6,3 [OK 3H#6 BNG 3 TOURA 3HRQ XIT ADX 5 FX1 3J?B EXIT 5 1 [EXIT +1 IF STOPPED 3JR2 WHY JOBLOCK 6,3 [CHECK WHY 3K=L BPZ 3 PHOUND 3KQ= TOURA 3L9W LDN 3 BJOBQ 3LPG TOUR LDX 3 FPTR(3) 3M96 TXU 3 CXJO 3MNQ BCC REND 3N8B BXGE 6 JOBNUM(3),TOUR 3NN2 REND LDX 3 BPTR(3) [THUS RIGHT ADDRESS WILL BE PICKED 3P7L BRN XIT [UP NEXT TIME THRU LOOP 3PM= PHOUND 3Q6W HLSAV 3,SET,SAVING,JOBQ,XINHIB 3QLG FCAJO 2,3 3R66 #SKI K6FINISH>199-199 3RKQ TRACE JOBEVENTS(2),YNOTSTOP 3S5B LDX 0 JOBEVENTS(2) 3SK2 LDX 2 FX2 3T4L BPZ 0 XINHIB [J IF INHIBIT 3TJ= ANDX 0 STOPPED(1) [J IF ALREADY BEING ABANDONED 3W3W BNZ 0 XIT 3WHG XINHIB 3X36 ADX 5 FX1 3XGQ EXIT 5 0 [EXIT +0 IF NOT STOPPABLE 3Y2B # SUBROUTINE TO CHECK BG JOBS: LINK X5 3YG2 # EXITS 0 IF STILL SOME LEFT, WITH X7 -VE 3Y^L # EXITS 1 IF DONE, WITH X7= NO OF MOP JOBS 3^F= WHATBG 44WL HUNTMISB 3,JWELL 45B= LDEX 7 JOBENTS+JOBCTS(3) 45TW NGX 7 7 47SB BZE 7 XIT1A 4J32 LDN 3 BHLSQ [NOW TAKE OFF NO OF SAVED JOBS! 4JGL SEARCH [AS THESE WILL STAY OVER A SYSTEM 4K2= LDX 3 FPTR(3) [BREAK AND BE RESTARTED 4KFW TXU 3 CXHL 4K^G BCC QENDX [J IF END OF QUEUE 4LF6 HLSAV 3,CLEAR,SAVED,HLSQ,SEARCH 4LYQ ADN 7 1 [REDUCE (NEGATIVE) COUNT IF SAVED. 4MDB BRN SEARCH 4MY2 QENDX 4NCL BZE 7 XIT1A [ZERO IF ONLY MOP LEFT 4NX= #SKI K6FINISH>199-199 4PBW TRACE 7,JOBSLEFT 4PWG EXIT 5 0 4S#L XIT1A HUNTMISB 3,JWELL 4SS= LDEX 7 JWENTRY+JOBENTS+JOBCTS(3) 4Y9L XIT1 EXIT 5 1 5SHW # 5W2Q # SUBROUTINE TO FIND CPA FOR CANCEL OR SECOND FINISH 5WGB SEEKCPA 5X22 LDN 2 BACT+ACTRING 5XFL XLOOP9 5X^= LDX 2 FPTR(2) 5YDW TXU 2 XBACTRING(1) 5YYG BCC QEND9 5^D6 LDX 3 2 5^XQ SBN 3 ACTRING [ADJUST TO START OF BLOCK 62CB LDCH 0 ATYPE(3) 62X2 SBN 0 CPAT/64 63BL BNZ 0 XLOOP9 63W= LDCT 0 #20 64*W ANDX 0 EXT+11(3) [TEST IF FINISH 64TG BZE 0 XLOOP9 [J IF NOT 65*6 LDX 2 FX2 [RESET X2 65SQ EXIT 6 1 66#B QEND9 EXIT 6 0 [EXIT 0 IF NOT FOUND 66S2 # 67R= # 68=W QENTRY1 68QG #SKI K6FINISH>99-99 69=6 TRACE FINISH,FINISH 6=P2 LDX 6 FINISH 6?8L BPZ 6 PHIRST [J IF NOT A SECOND FINISH 6?N= LDCT 0 #200 6#7W ANDX 0 6 6#MG BNZ 0 TOOLATE [J IF PAST TIME 6*76 BRN NOMARK 6*LQ PHIRST 6B6B LDCT 0 #20 6BL2 ORS 0 EXT+11(2) [SET FINISH ACTIVITY MARKER 6DJG NOMARK 6G3B NOTWRMC 6GH2 LDN 4 0 [SET ZERO 6H2L LDN 7 0 [MARKER FOR NO PARAMETER 6HG= PARAPASS 6H^W MHUNT 3,CPB,CUNI 6JFG LDX 0 ANUM(3) 6J^6 BNG 0 SLOW [J IF NO PARAM 6KDQ BZE 0 NULL [ERROR IF NULL 6KYB NGN 7 1 [MARKER FOR NOW 6LD2 LDX 0 APARA(3) 6LXL TXU 0 NOW(1) 6MC= BCC SLOW [J IF NOW 6S?G LDN 7 1 [MARKER FOR TIME 6SR6 PARSPLIT 5 [CONVERT TIME 6T=Q STO 5 AWORK2(2) [SAVE MARKER ON WHETHER UNITS SPEC 6TQB LDX 3 ACOMMUNE1(2) 6W=2 BZE 5 MINS [J IF NO CHAR STRING= MINS 6WPL ... BPZ 5 XEND [ERROR OTHERWISE 6X9= TXU 5 TIME(1) 6XNW BCC SECS 6Y8G TXU 5 TIME+1(1) 6YN6 BCC MINS 6^7Q TXU 5 TIME+2(1) 6^MB BCS WOOPS 7272 LDN 5 60 72LL TXL 3 TLIMH(1) 736= BCC YUK [TOO LONG A TIME 73KW MPY 3 5 745G LDX 3 4 74K6 MINS LDN 5 60 754Q TXL 3 TLIMM(1) 75JB BCC YUK 7642 MPY 3 5 76HL BRN SECS1 773= SECS LDX 4 3 77GW BZE 4 NOTIM [J IF TIME ZERO 782G TXL 3 TLIMS(1) 78G6 BCC YUK 78^Q STOZ 3 79FB ADN 4 FONINTP-1 [IN CASE TIME A WE FN HAS BEEN GIVEN 94J2 # B17 OF EXT+11=1 => RUN OF END OF JD FILE, IF SET DO NOT DO STOPJOB 953L # FOR WE FN,EVEN IF B14 IS SET 95H= LDN 0 #1100 [TEST IF WE FN OR WAITING: E.O.F 962W ANDX 0 EXT+11(2) [THE END OF ITS JDF FILE,IT CAN HAVE 96GG BZE 0 XLOOP8 [IF NO WE FN OR WAITING E.O.F 9726 ERN 0 #1000 [CLEAR OUT WE FINISH BIT 97FQ BNZ 0 XLOOP8 97^B [IN CASE WE WANT TO ABANDON IT LATER 98F2 BPZ 7 STOP4 [J IF NOT NOW CASE 98YL SPRIVTEST JSISSUE,3,XLOOP8 99D= STOP4 CALL 5 STOP2 99XW BRN XLOOP8 9=CG BRN XLOOP8 9=X6 QEND8 9B#G FON #33 [WAKE HLS ACT (IF ASLEEP) 9BS6 BZE 7 NOPAR [J IF NO PARAM 9C?Q BPZ 7 WAIT [J IF TIME 9CRB PHAST 9MKB LDCT 0 #300 9N52 ORS 0 FINISH [SET OTHER BITS 9R2Q SNOTRETINA 9RGB # THIS SECTION ATTEMPTS TO ABANDON ALL USER JOBS IN THE JOB QUEUE 9S22 # THIS LOOP WILL WAIT FOR NOUSER INPUT JOBS WHILE THERE ARE NON-SAVED 9SFL # USER-JOBS (ACCORDING TO JOBCOUNT) IN CASE THESE INPUTS TURN OUT TO 9S^= # BE JOBS - BUT NOT IN THE NOUSER-NOJOBBLOCL CASE, WHERE IT MIGHT FAIL. 9TDW # IN BOTH CASES IT NEEDS REWRITING - PARTLY BECAUSE OF THE WAY IT DECIDE 9TYG # TO RERUN THE LOOP. 9WD6 XCOM LDN 4 0 9WXQ LDN 3 BJOBQ 9XCB XLOOP LDX 3 FPTR(3) 9XX2 TXU 3 CXJO 9YBL BCC QEND [J IF END OF JOB QUEUE =4?L LDX 6 JOBNUM(3) =?L2 SPRIVJUMP JSISSUE,3,XLOOP [J IF SYS ISSUED =#5L STOP1 CALL 5 STOP [STOP JOB =#K= ADN 4 1 [INCREMENT COUNT OF UNSUCCESFUL ABAND =*4W BRN XLOOP =*JG QEND CALL 5 WHATBG =B46 BRN WAITF =BHQ BZE 7 XDONE =C3B WAITF COOR3 #62 [WAIT FOR A FONINT =CH2 BNZ 4 XCOM [REPEAT LOOP IF SOME ABANS UNSUCCESSF =D2L BRN QEND =DG= XDONE =FFG LONGON #145 [FOR MOP WELL JOBS =F^6 # NOW WE CHECK LF AND IN AND THEN SYS ISS JOBS =GDQ # =GYB # THIS NEXT SECTION CAN BE REWRITTEN TO BE MUCH MORE EFFICIENT AS =HD2 # SOON AS BOTH IDENTIFIERS ARE SET =HXL # =JC= LDN 4 0 =QQB QEND1 LDN 3 BACT+ACTRING =R=2 XLOOP2 =RPL LDX 3 FPTR(3) [SEARCH ACTIVITY RING FOR LFS =S9= TXU 3 XBACTRING(1) =SNW BCC QEND2 =T8G LDX 2 3 =TN6 SBN 2 ACTRING =W7Q LDCH 0 ATYPE(2) =WMB SBN 0 ACTLF/64 =Y6= SBN 0 CPAT-ACTLF/64 =YKW BNZ 0 XLOOP2 =^5G LDN 0 #2000 =^K6 ANDX 0 EXT+11(2) ?24Q BZE 0 XLOOP2 ?6FB XADDONE ?8CW BZE 0 QEND2 ?8XG ADN 4 1 [UPDATE CT IF LF ?9C6 QEND2 ?H7L LFNOTFIN QEND4 ?HM= XCHEKIN ?J6W BZE 4 XLFIN ?JLG QEND4 ?K66 #SKI K6FINISH>199-199 ?KKQ TRACE 4,LFINDONE ?L5B COOR3 #62 [WAIT A FEW SECONDS ?LK2 BRN XDONE [TRY AGAIN ?M4L XLFIN ?Q2B MONOUT HDONE [TELL OPS ALL USER JOBS DONE #3QW QENTRY5 #4=G LDCT 0 #40 #4Q6 ORS 0 FINISH [SET FINISHED BIT #8M6 # 'FINISHED' HAS OCCURRED SO WE MUST TELL SYS.ISSUED JOBS #96Q SYSIS #9LB LDN 7 1 #=62 REPEAT #=KL LDN 3 BJOBQ #?5= XLOOP3 [NOW CHECK SYS ISSUED JOBS #?JW LDX 3 FPTR(3) ##4G TXU 3 CXJO ##J6 BCC QEND3 #C^G SPRIVTEST JSISSUE,3,XLOOP3 #HWG ADN 4 1 #JB6 BZE 7 XLOOP3 [DONT STOP JOB IF NON-FIRST PASS OF J #JTQ LDX 6 JOBNUM(3) #K*B RETRY CALL 5 STOP2 #KT2 BRN ODEAR #L#L BRN XLOOP3 #LS= QEND3 BZE 4 XFIN #MRG COOR3 ASIFIN #N?6 NOT3INB #PQ2 TIS4INB #Q9L LDN 4 0 #QP= LDN 7 0 #R8W BRN REPEAT [TRY AGAIN #RNG XFIN #S86 QENTRY11 #TM2 LDXC 0 AWORK4(2) [ #W6L BCS NOWAKEDUMP [ DON'T WAKE DUMPER IF 'FN LK' ELSE #WL= FON ADUMPWAIT [MAKE SURE DUMPER HAS A GO #X5W NOWAKEDUMP #^4B PERCOUNT ALL *?#G ... MONOUT HDONE1,,NONAUT [O/P EVERYTHING CONE MESSAGE *F82 WEND *FML LDX 2 FX2 *G7= LDCT 0 #20 [ ENSURE THAT THE 'CURRENT FINISH *GLW ORS 0 EXT+11(2) [ ACTIVITY' BIT *H6G ERS 0 EXT+11(2) [ IS UNSET *HL6 [ *J5Q [ NB FNDELE ASSUMES THAT ACROSS AND ENDCOM *JKB [ ARE THE SAME LENGTH (AT PRESENT 2 WORDS) *K52 [ MENDING POINT FOR MACRO FNDELE *KJL SEGENTRY K14FINISH *L4= ENDCOM *L9D ...[ *LBL ...[ *LHW ODEAR COOR3 #62 [WAIT A WHILE *M3G BRN RETRY [TRY AGAIN *M8N ...[ *M*W ...[ *MH6 # THIS SECTION IMPLEMENTS THE TIME CASE OF FINISH *N2Q WAIT STOZ AWORK1(2) [CLEAR MARKER *NGB WAIT1 OUTBLOCN 8 *P22 #SKI K0FINISH>199-199 *PFL TRACE 4,FINTIME *P^= BNZ 4 XTIME [J IF NOT ZERO *QDW OUTMESS HNOW *QYG BRN XBBC *RD6 XTIME LDX 5 AWORK2(2) *X*6 SPARANOT 1 *XSQ LDN 6 XIN(1) [MOVE IN 'IN' *Y#B LDN 7 ACOMMUNE1(2) *YS2 MVCH 6 3 *^?L MHUNT 3,CPB,CUNI *^R= LDX 2 ANUM(3) B2=W ANDN 2 4095 B2QG LDN 6 APARA(3) B3=6 MVCH 6 0(2) [MOVE IN TIME B3PQ BNZ 5 SPEC B49B LDN 5 #20 B4P2 LDX 2 7 [IF NOT SPEC =MINS SO MOVE B58L DCH 5 0(2) [IN 'MINS' B5N= BCHX 7 £ B67W LDN 6 TIME+1(1) B6MG MVCH 6 4 B776 SPEC LDX 2 FX2 B7LQ SBN 7 ACOMMUNE1(2) B86B SLC 7 2 B8L2 OUTPARAM 7,ACOMMUNE1 B95L XBBC OUTPAR TIMENOW [ O/P TIME B9K= LDX 0 AWORK1(2) B=4W BNZ 0 OPSINF [J IF TO TELL OPS B*2L BROADCAST HWARN BDXL STO 1 AWORK1(2) [SET MARKER BFC= BRN WAIT1 BFWW OPSINF BJSL INFORM 3,HWARN,1 [TELL OPS BNPL BNZ 4 SOME BY42 LDCT 0 #200 [IF TIME ZERO BYHL ORS 0 FINISH [SET TIME UP BIT B^3= BRN XCOM [AND JOIN MAIN ROUTINE B^GW # IN THIS SECTION X7 IS SET AS FOLLOWS:- C22G # X7= 0 IF ALL JOBS FINISHED C2G6 # X7 +VE IF ALL BG JOBS FINISHED C2^Q # X7 -VE IF STILL SOME BG JOBS LEFT C3FB SOME NGN 7 1 C3^2 XLOOP4 C4DL BPZ 7 WHILE C4Y= CALL 5 WHATBG [CHECK BG JOBS C5CW BRN WHILE [J IF SOME LEFT C5XG BZE 7 WHILE [J IF NO JOBS LEFT C6C6 OUTNUM 7,0 C6WQ MONOUT HDONEBG [O/P 'ALL BG JOBS DONE' MESSAGE C7BB WHILE LONGWAIT XBRK,#62 CBNQ LDN 0 1 CC8B SBS 0 FINISH [UPDATE TIME IN FINISH CCN2 SUBFINB CD7L BCT 4 XLOOP4 CT*G LDCT 0 #200 [WAIT FINISHED CTT6 ORS 0 FINISH [SET TIME UP BIT CW#Q XYNSETA CWSB BZE 7 XDONE CX#2 CALL 5 WHATBG CXRL BRN XCOM [JOIN ABANDON ROUTINE IF JOBS LEFT CY?= BZE 7 XDONE CYQW OUTNUM 7,0 C^=G MONOUT HDONEBG [O/P MESSAGE C^Q6 BRN XCOM D29Q # THIS SECTION IMPLEMENTS THE CASE WHEN THERE ARE NO PARAMETERS D2PB NOPAR LDN 4 1 [MARKER D392 NOPAR1 D3NL OUTMESS HSOON D48= OUTPAR TIMENOW [ O/P TIME D4MW BZE 4 OPS [J TO TELL OPS D7KL BROADCAST HWARN [O/P WARNING TO MOP JOBS D?GL LDN 4 0 D#2= BRN NOPAR1 D#FW OPS DCCL INFORM 3,HWARN,1 DH#L TESTBG DHS= CALL 5 WHATBG [CHECK BG JOBS DJ?W BRN TARRY [J IF STILL SOME LEFT DJRG BZE 7 NOMORE [J IF NO JOBS LEFT. DK?6 BNZ 4 TARRY [J IF MESS ALREADY O/P DKQQ OUTNUM 7,0 DNNG MONOUT HDONEBG [O/P B.G JOBS DONE MESSAGE DSKG LDN 4 1 DT56 TARRY COOR3 #44 [WAIT DTJQ BRN TESTBG DW4B NOMORE F6TL LDCT 0 #200 F7*= ORS 0 FINISH F=?2 BRN XDONE F=QL SECOND F?== ACROSS FINISHB,4 F?PW QENTRY2 [ 'CANCEL FINISH' ENTRY POINT F#9G ACROSS FINISHB,5 FMYG XBRK FND6 XGER FNXQ GEOERR 1,FINWRONG FPCB XMDF CALL 1 ZERROR FPX2 +HNEMDF FQBL TOOLATE FQW= CALL 1 ZERROR FR*W +HTOOLATE FRTG WOOPS CALL 1 ZERROR FS*6 +APFERR FSSQ NULL CALL 1 ZERROR FT#B +JPARNULL FTS2 YUK CALL 1 ZERROR FW?L +JTOOLONG FWR= ZERROR FX=W COMERRX 0(1) FX#S ...[ FXBQ ...XEND FXDN ...[ PARAMETER ERROR FOUND, AND REPORTED, BY PARSPLIT FXGL ... BC 2,EXFINACT [CLEAR "CURRENT FINISH ACTIVITY" FXJJ ...[ BIT IN EXT+11 FXLG ... ENDCOM FXND ...[ FXQG MENDAREA 30,K99FINISH FY=6 #END ^^^^ ...156230530001