(George Source)
Macros used: ACROSS, BC, CANTNOW, CANTSAVE, CHAIN, CLOSE, COOR3, CREATEB, DERINGD, DOWN, ERASE, FCAJO, FILENUMB, FJOBLOCK, FJOCA, FLONGWAIT, FON, FREECORE, FSHCODE, FSHENTRY, FSHMOVE, FSHSKIP, GEOERR, HLSAV, HUNTW, JBC, JBS, JOBLOCK, LINK, LONGOFF, MFREE, MFREEW, MHUNTW, MONOUT, NAME, NOTALIEN, OPEN, OUTPAR, READY, SAVEACTF, SAVEBLOK, SAVECHN, SEGENTRY, SETNCORE, SHLSQ, SPRIVJUMP, SUICIDE, TESTREP, TRACE, TRANSBEG, TRANSFIN, UNQUEUE, UP, WKSFILE, WORKNUMB
22FL #LIS K0SAVEJOB>K0GREATGEO>K0ALLGEO 22^= #SEG SAVEJOB65 [RICHARD GRIMWADE 23DW 8HSAVEJOB 23YG SEGENTRY K1SAVEJOB,XK1 24D6 SEGENTRY K2SAVEJOB,XK2 24MY ... FSHENTRY K3SAVEJOB,,XK3,XK3 24RT ... FSHENTRY K4SAVEJOB,XBGONE,,XBGONE 24XQ SEGENTRY K100SAVEJOB 25CB #GAP 25 25X2 # THIS SEGMENT IMPLEMENTS THE SAVEJOB MACRO. FIRSTLY IT CHECKS THE 26BL # JOB CAN BE SAVED AND IF NOT,IT SETS AN APPROPRIATE REPLY AND GOES 26W= # UP.(IF IT HAS A CORE IMAGE IT GEOERRS INITIALLY). IT THEN SETS 27*W # UP A FILE TO CONTAIN THE SAVED RECORDS,AND APPENDS EACH 27TG # RELEVANT BLOCK.WHEN ALL SUCH BLOCKS HAVE BEEN SAVED,THE JOB BLOCK 28*6 # IS FREED AND A MARKER SET IN THE HLS QUEUE BLOCK TO SHOW THE JOB 28SQ # HAS BEEN SAVED 29#B REEL +0 [REEL NO 29S2 +1 [GEN NO 2=?L 4H#### 2=R= TBSTBBQBLK 2?=W #HAL BSTB+BQBLK,0 2?QG # THIS S/R FINDS THE HLSQ BLOCK WHOSE JOB NO IS IN X7. PTR IN X3 2#=6 SEARCH 2#PQ SHLSQ 7,3,NOBL 2*9B EXIT 6 0 2*P2 SJOBQ 2B8L JOBLOCK 7,1 2BN= EXIT 6 0 2C7W XK1 2CMG #SKI K6SAVEJOB>99-99 2D76 TRACE ACOMMUNE4(2),SAVEJNUM 2DLQ LDX 7 ACOMMUNE4(2) [JOB NUMBER 2F6B CALL 6 SEARCH 2FL2 HLSAV 3,SET,SAVED,HLSQ,UP 2G5L CALL 6 SJOBQ 2GK= JBC XCANT,1,JBOFFL [J IF MOP 2HJG SPRIVJUMP JSISSUE,1,XCANT [J IF SYSTEM 2J46 SPRIVJUMP JSSTART,1,XCANT [ISSUED OR STARTED 2JHQ ANDN 6 #777 2K3B BZE 6 RETRY [J IF NO CORE IMAGE 2KH2 GEOERR 1,COREIMAG 2L2L XK2 [EXTRACODE ENTRY 2LG= LDX 7 ACOMMUNE4(2) 2L^W #SKI K6SAVEJOB>99-99 2MFG TRACE 7,SAVEJNUM 2M^6 RETRY 2NDQ CALL 6 SJOBQ 2NNJ ... JBS WKSF,1,JBTEMP [J IF TEMP. DIR. EXISTS 2NYB FCAJO 3,1 2PD2 STO 1 5 2PXL WKSFILE 3,WKSF [J IF WELL KNOWN SYS FILES OPEN 2QC= WORKNUMB 0,3,3 2QWW BNZ 0 WKSF [J IF WORKFILES OPNE 2R2R ... SMO 5 [J TO WAIT IF MESSAGES STILL BEING 2R6N ... LDX 6 JMESS [OUTPUT 2R=K ... BNZ 6 WKSF 2RBG TOUR LDX 3 FPTR(3) 2RW6 LDX 0 ATYPE(3) 2S*Q TXL 0 CACT 2STB BCC PHIN 2T*2 SBX 0 TBSTBBQBLK(1) 2TSL BNZ 0 TOUR 2W#= ... COOR3 #41 2WRW ... BRN RETRY 2X?G PHIN 2XR6 CALL 6 SEARCH 2Y=Q NAME 3,ADATA,JSWAP 2YQB SETNCORE 10,3,FILE,FABSNB 2^=2 CALL 6 SJOBQ 2^PL LDN 0 10 329= STO 0 A1(3) 32NW LDN 5 JUSER(1) 338G LDN 6 A1+1(3) 33N6 MOVE 5 3 347Q LDN 5 JNAME(1) 34MB ADN 6 3 3572 MOVE 5 3 35LL SMO FX1 366= LDN 5 REEL 36KW ADN 6 3 [REEL NO,FGN & 375G MOVE 5 3 [LANGUAGE 37K6 CREATEB 384Q HUNTW 2,FILE,CREATE 38JB LDCT 0 #200 3942 STO 0 CEINF2(2) [SET TEMP FILE BIT 39HL OPEN XBRK,APPEND,CREATE,QUERY 3=3= TESTREP ALREADY,READY [J IF ALREADY SUCH A FILE 3=GW #SKI K6SAVEJOB>99-99 3?2G TRACE 2,OPENSFIL 3?2M ... FSHCODE AORB 3?2S ...( 3?2^ ...# SHARED FILESTORE: THIS CODE IS ONLY OBEYED ON 'A' AND IT IS 3?36 ...# USED TO 'FETCH' A 'B' MACHINE JOB INTO 'A' SO THAT THE SAVING 3?3? ...# PROCESS CAN BE CARRIED OUT 3?3D ...# 3?3K ... CALL 5 UNQUEUE [REMOVE THE TARGET CPAT FROM FLOWQ 3?3Q ...# 3?3X ... LDCT 0 #100 [CHECK IF BREAKIN IS REGISTERED 3?44 ... ANDX 0 JOBEVENTS(3) [IN THE TARGET ACTIVITY 3?49 ... BNZ 0 REV [REVERSE THE SAVING ACTION IF BREAKIN 3?4B ...# 3?4H ... NOTALIEN XHOME,3 [JIF TARGET IS RUNNING IN 'A' M/C 3?4N ...# 3?4T ... LDCT 0 #40 [STOP BREAKIN WHILE WE FIDDLE ABOUT!! 3?52 ... ORS 0 JOBEVENTS(3) 3?57 ...# 3?5# ...# WE ARE NOW GOING TO CHANGE TO THE TARGET ACTIVITY, BUT BEFORE WE 3?5F ...# DO, WE PROTECT CERTAIN WORDS IN THE ACTIVITY BLOCK (NOTABLY: 3?5L ...# THE 'ACC', 'AWORK','ALINK' AND 'ACOMMUNE' WORDS) 3?5R ...# 3?5Y ...# GET A BLOCK TO STORE THE DATA 3?65 ...# 3?6= ... SETNCORE ACOMMUNE9-ACC3+1,3,ADATA,CSTORE 3?6C ...# 3?6J ... CALL 6 SJOBQ [RELOCATE THE JOB BLOCK AND FROM IT 3?6P ... FCAJO 1,,N [FIND THE TARGET ACTIITY 3?6W ...# 3?73 ... LDN 4 ACC3(1) [ADDRESS OF DATA TO BE STORED 3?78 ... LDN 5 A1(3) [ADDRESS OF BLOCK TO STORE DATA 3?7* ... MOVE 4 ACOMMUNE9-ACC3+1 [MOVE DATA INTO BLOCK 3?7G ...# 3?7M ... LDX 6 ACTNUM(2) [REMEMBER 'SAVING' ACTIVITY'S NUMBER 3?7S ... CHANGEAC 1 [AND TRANSFER TO THE TARGET ACTIVITY 3?7^ ...# 3?86 ...# ============================================================== 3?8? ...# WE ARE NOW RUNNING IN THE ACTIVITY THAT WILL BE SAVED (TARGET) 3?8D ...# ============================================================== 3?8K ...# 3?8Q ...# 3?8X ... TRANSFREE [REMOVE ANY TRANSFER SYSTEM BLOCKS 3?94 ...# 3?99 ...# NOW WE CAN GO TO 'B' AND FETCH THE REST OF THE DATA BLOCKS FOR 3?9B ...# OUR JOB 3?9H ...# 3?9J ...# WE WILL FIRST CREATE AN ERROR RECOVERY BLOCK 3?9K ...# 3?9L ... SETNCORE 1,3,FSH,FSHAMBLES [SET UP ERROR RECOVERY BLOCK AND 3?9M ... LDX 0 X4SAVEJOB(1) [LINK IT TO THE ERROR ROUTINE 3?9N ... STO 0 FSHCDLINK(3) 3?9P ...# 3?9Q ... TRANSBEG FSHNOID,SAVEJOB,3,,,ACOMMUNE8,XBGONE 3?9R ...# 3?9S ... MFREEW FSH,FSHAMBLES [GET RID OF ERROR RECOVERY BLOCK 3?9T ...# 3?=2 ...# ON RETURN FROM 'B', OUR 'PAIR' WILL HAVE GONE AND WE MUST 3?=7 ...# REMOVE OUR TABLE ENTRY IN THE /FSHMARKER BLOCK 3?=# ...# 3?=F ... DOWN FSHTRANC,4 [USE STANDARD CODE TO REMOVE ENTRY 3?=L ...# 3?=R ... FSHMOVE END [DEAL WITH FILES THAT HAVE COME BACK 3?=Y ...# 3??5 ...# THE COPY JOB BLOCK FROM 'B' IS ALSO RETURNED AND WE MERELY EXTRACT 3??= ...# THE JOB TIME USED SO FAR 3??C ...# 3??J ... FJOCA 2,,N [FIND OUR 'A' M/C JOB BLOCK 3??P ... MHUNTW 1,JOBQE [AND THE JOB BLOCK FROM 'B' 3??W ... LDX 4 HTIMEJ(1) [PICK UP THE 'JOBTIME USED' FIELD 3?#3 ... LDX 5 HTIMEJ+1(1) 3?#8 ... STO 4 HTIMEJ(2) [AND STORE IT INTO THE 'A' JOB BLOCK 3?#* ... STO 5 HTIMEJ+1(2) 3?#G ... BC 2,JBFSHALIEN [CLEAR ALIEN MARKER IN JOB BLOCK 3?#M ... FREECORE 1 [RELEASE COPY JOB BLOCK FROM 'B' 3?#S ... BC 2,FSHALIEN [CLEAR ALIEN MARKER IN ACTIVITY 3?#^ ...# 3?*6 ...XCHANGEACT 3?*? ... FINDACTN 2,6 [FIND THE 'SAVING' ACTIVITY AGAIN 3?*D ... LDX 3 FX2 [REMEMBER THE ADDRESS OF TARGET CPAT 3?*K ... CHANGEAC 2 [GO BACK TO THE SAVING ACTIVITY 3?*Q ...# 3?*X ...# ====================================== 3?B4 ...# WE ARE NOW BACK IN THE SAVING ACTIVITY 3?B9 ...# ====================================== 3?BB ...# 3?BH ... MHUNTW 1,ADATA,CSTORE [NOW WE CAN RESTORE THE DATA IN THE 3?BN ... LDN 4 A1(1) [TARGET ACTIVITY 3?BT ... LDN 5 ACC3(3) 3?C2 ... MOVE 4 ACOMMUNE9-ACC3+1 [RESTORE DATA TO ACC,AWORK,ACOM ETC 3?C7 ... FREECORE 1 [RELEASE STORE BLOCK 3?C# ...# 3?CF ... LDCT 0 #40 [FINALLY WE CLEAR 'INHIBIT BREAK-IN' 3?CL ... ORS 0 JOBEVENTS(3) [IN THE TARGET CPAT 3?CR ... ERS 0 JOBEVENTS(3) 3?CY ...# 3?D5 ... LDXC 7 7 [CHECK IF REVERSE SAVE REQUIRED 3?D= ... BCS REV [JIF REVERSE SAVE IS REQUESTED 3?DC ...# 3?DJ ...XHOME 3?DP ... SAVEBLOK 0,1,7 [SAVE THE JOB BLOCK 3?DW ... CALL 6 SJOBQ [AND THEN RELOCATE THE TARGET CPAT 3?F3 ... FCAJO 3,1,N [FROM ITS JOB BLOCK 3?F8 ...) 3?F* ... FSHSKIP 3?FG ...( 3?G6 SAVEBLOK 0,1,7 3?J* ...#SKI JWPHASE4 3?LJ ...( 3?NR ... BRN XJOBQ 3?R2 ...WAIT COOR3 #41 3?T9 ...XJOBQ 3?XD ...) 3?^Q CALL 6 SJOBQ 3#FB FCAJO 3,1 3#^2 #SKI K6SAVEJOB>99-99 3*DL TRACE 3,SAVECPAT 3*Y= LDEX 0 ATYPE(3) 3*^^ ...#SKI JWPHASE4 3B3N ...( 3B5C ... SBN 0 #31 3B76 ... BZE 0 UNQ 3B8T ... BCT 0 WAIT 3B=J ...UNQ 3B#? ...) 3BB2 ...#SKI JWPHASE4<1$1 3BCW BZE 0 OFFQ [J IF NO WAITING STYLE 3BXG LDX 2 3 3CC6 UNQUEUE [REMOVE ACT FROM QUEUE 3CWQ OFFQ 3D3Y ...#SKI JWPHASE4 3D96 ... LONGOFF 3 [CLEAR LONG EVENT FIELD 3D?Q ...) 3DBB LDX 4 CONTEXT(3) 3DW2 ANDN 4 #4000 [ISOLATE F.ST. BIT 3F*L SAVEBLOK 0,2,7 3FGS ... FSHSKIP 3FN2 ...( 3FT= CALL 6 SEARCH 3G#W LDCT 5 #20 3GSG ANDX 5 HLSYONQ(3) 3H#6 CALL 6 SJOBQ 3HRQ FCAJO 3,1 3J?B BNZ 5 REV 3JR2 LDCT 0 #100 3K=L ANDX 0 JOBEVENTS(3) 3KQ= BNZ 0 REV [J IF BREAK IN (I.E JOB TO BE STOPPED 3L24 ...) 3L9W # 3LPG # FOR NOW STORE THE JOB NUMBER IN ACOMMUNE4 FOR SAVEACTF-IT WILL 3M96 # IGNORE THE PARAMETER-LATER THE MACRO SHOULD BE ALTERED 3MNQ SMO FX2 3N8B STO 7 ACOM4 3NN2 SAVEACTF 7 3P7L SAVECHN 7 3PM= LDX 0 EXEC3(2) [TEST REPLY 3Q6W BZE 0 POK1 3QLG GEOERR 1,AOLPTSAV 3R66 POK1 3RKQ ... FREEZESA [CLOSE AND FREEZE FILE 3S5B #SKI JNLSTART 3SK2 ( 3T4L OUTPAR TIMENOW 3TJ= MONOUT ASAVE,7,NONAUT [OUTPUT JOB SAVED TO SJ 3W3W ) 3WHG CALL 6 SJOBQ 3X36 LDX 2 1 3XGQ CALL 6 SEARCH 3Y2B LDX 0 JMISC(2) 3YG2 STO 0 HLSSTAT(3) [SAVE COPY OF JMISC 3Y^L BZE 4 TENT [J IF T.ST. JOB 3^F= LDCT 4 1 3^YW ORS 4 HLSSTAT(3) [SET F.ST. BIT 42DG TENT 42Y6 FJOBLOCK 2 [FREE JOB BLOCK 43CQ # 43XB # FREEING THE JOB BLOCK AND SETTING AND CLEARING ALL THE BITS IN 44C2 # THE HLSQ BLOCK SHOULD ALL OCCUR WITHIN ONE COORDINATION 44WL # 45B= HLSAV 3,CLEAR,SAVING,HLSQ 45TW HLSAV 3,SET,SAVED,HLSQ 46*G UP1 MFREE FILE,FABSNB 46T6 UP 47#Q #SKI K6SAVEJOB>199-199 47SB TRACE 7,SAVEDONE 48#2 WAKE LDCT 0 #20 48RL ANDX 0 HLSYONQ(3) 49?= BZE 0 UP2 [J IF REV SAVE BIT NOT SET 49QW ERS 0 HLSYONQ(3) [CLEAR BIT 4==G FON #34 [WAKE UP ACT WAITING TO UNSAVE 4=Q6 UP2 4?9Q ACROSS SUICIDE,1 [COMMIT SUICIDE 4?PB # THIS SECTION REVERESE THE PROCESS IF AN UNSAVE IS REQUESTED 4#92 # BEFORE THE MAIN LOOP IS ENTERED 4#NL XCANT CANTSAVE 3 [SET CANT BE SAVED BIT 4*8= BRN UNS1 4*MW REV 4B7G ERASE 4BM6 CLOSE [ERASE FILE 4C6Q CALL 6 SJOBQ 4CLB HLSAV 1,CLEAR,SAVING,JOBQ 4D62 # 4DKL # FRIG TO PUT THE CPA BACK ON THE QUEUE SO IT WILL GET WOKEN UP BY 4F5= # PROCONTX AND FPUT IN THE BREAKIN CASE - THIS MEANS THAT SAVING 4FJW # JOBS CAN ONLY OCCUR WHEN WAITING TO BE FULLY STARTED AT LEAST 4G4G # UNTIL FLONGWAITX 4GJ6 FCAJO 2,1 4GP# ... LDN 0 #32 4GWG ... DEX 0 CLONG1(2) 4H3N ... LDX 0 JOBNO(2) 4H8W ... STO 0 CLONG2(2) 4HB4 ... FLONGWAIT #32 4HHB CALL 6 SEARCH 4J32 NAME 3,ADATA,JUNSWAP [RENAME BLOCK 4JGL HLSAV 3,CLEAR,SAVING,HLSQ 4K2= BRN WAKE [J TO WAKE UP ACT. 4KFW WKSF CALL 6 SEARCH 4K^G BRN UNS 4LF6 READY CALL 6 SEARCH 4LYQ HLSAV 3,SET,SAFE,HLSQ,UP1 [-> UP1 IF ALREADY SAVED OR BEING SAV 4MDB NAME 3,ADATA,JUNSWAP [RENAME BLOCK 4MY2 UNS 4NCL CANTNOW 3 [IF NOT,CANT BE SAVED NOW 4NX= UNS1 CALL 6 SJOBQ [X1 -> JOBQ 4PBW HLSAV 1,CLEAR,SAVING,JOBQ [CLEAR MARKER SET BY SCHEDJOB 4PWG CALL 6 SEARCH 4QB6 HLSAV 3,CLEAR,SAVING,HLSQ 4QTQ BRN UP 4QW3 ... FSHCODE AORB 4QW# ...( 4QWK ...# SHARED FILESTORE: SOME ROUTINES THAT ARE CALLED FROM OTHER CODE 4QWW ...# ABOVE!! 4QX7 ...# 4QXD ...XBGONE ['B' MACHINE HAS FAILED 4QXH ...# 4QXL ...# TEMPORARY SOLUTION TO THE PROBLEM OF 'B' MACHINE FAILURE!!! 4QXP ...# 4QXS ... GEOERR 1,SAVEINB! 4QXX ...# 4QY2 ...X4SAVEJOB 4QY5 ... LINK SAVEJOB,4 4QY? ...# 4QYJ ...# 4QYT ...# THE FOLLOWING ROUTINE WILL 'UNQUEUE' THE TARGET CPAT FROM FLOWQ 4Q^6 ...# 4Q^C ...# IT IS NORMALLY ENTERED AT 'UNQUEUE' 4Q^N ...# 4Q^^ ...WAIT SBX 5 FX1 [PROCESS THE LINK WHILE WE WAIT 4R2= ... COOR3 #41 [LET OTHERS RUN!! 4R2H ... ADX 5 FX1 4R2S ...# 4R35 ...UNQUEUE 4R3B ... CALL 6 SJOBQ [FIND THE JOB BLOCK FOR TARGET JOB 4R3M ... FCAJO 3,1 [AND FROM THE JOB BLOCK FIND THE CPAT 4R3Y ... LDEX 0 ATYPE(3) [PICK UP THE WAITING STYLE OF THE 4R49 ... SBN 0 #31 [ACTIVITY & JIF WAITING IN OUR STYLE 4R4G ... BZE 0 UNQU 4R4R ... BCT 0 WAIT [JIF NOT WAITING IN STYLE #32 EITHER 4R54 ...# 4R5* ...UNQU LDX 2 3 4R5L ... UNQUEUE [REMOVE THE ACTIVITY FROM THE QUEUE 4R5X ... LONGOFF 3 [AND CLEAR ANY LONGWAIT INFORMATION 4R68 ... EXIT 5 0 [MISSION ACCOMPLISHED 4R6F ...# 4R6Q ...# 4R73 ...XK3 4R7# ...# 4R7K ...# THIS ENTRY POINT IS USED ON 'B' TO COLLECT ALL THE JOB'S DATA 4R7W ...# BLOCKS AND FILES SO THAT THEY CAN BE SAVED ON 'A' 4R87 ...# 4R8D ... MFREE FSH,FSHTERM [FREE /FSHTERM BLOCK TO ENSURE ALL 4R8P ...# [DATA IS RETURNED 4R92 ...# 4R9? ... FJOCA 3,2,N [GET THE JOB BLOCK ADDRESS 4R9J ... DERINGD AJBRING(3) [DERING THE JOB BLOCK AND RECHAIN 4R9T ... CHAIN 3,2 [IT IN THE ACTIVITY CHAIN 4R=6 ...# 4R=C ... FILENUMB 4 [COUNT ALL THE OPEN FILES AND PREPARE 4R=N ... FSHMOVE START,4 [THEM FOR RETURN TO 'A' 4R=^ ...# 4R?= ... STOZ JOBNO(2) [ACTIVITY DOESN'T OWN A JOB BLOCK NOW 4R?H ... TRANSFIN ,AUT [AUTONOMOUS TRANSFIN TO RETURN DATA 4R?S ...# [AND FILES TO 'A' 4R#5 ...# 4R#B ... SUICIDE [NOTHING ELSE LEFT TO DO NOW!!! 4R#M ...) 4R*B NOBL GEOERR 1,NO HLSQ 4RT2 XBRK GEOERR 1,SAVEBKIN 4S#L NOCPAT 4SS= GEOERR 1,NOACTBLK 4T?W #END ^^^^ ...26760176000100000000