SAVEJOB865

(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

SAVEJOB865.txt
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