{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: SAVEFILE860)}}
====== SAVEFILE860 ======
(George Source)
**Macros used:** [[george:macro:BACKSPACE|BACKSPACE]], [[george:macro:BS|BS]], [[george:macro:CHAIN|CHAIN]], [[george:macro:CHANGEACT|CHANGEACT]], [[george:macro:CHANGEFILE|CHANGEFILE]], [[george:macro:FCAJO|FCAJO]], [[george:macro:FILEMOVE|FILEMOVE]], [[george:macro:FINDACTNO|FINDACTNO]], [[george:macro:FREECORE|FREECORE]], [[george:macro:FREEZESAVE|FREEZESAVE]], [[george:macro:GEOERR|GEOERR]], [[george:macro:HUNT|HUNT]], [[george:macro:HUNTX|HUNTX]], [[george:macro:JBS|JBS]], [[george:macro:JOBLOCK|JOBLOCK]], [[george:macro:LOCK|LOCK]], [[george:macro:MHUNT|MHUNT]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:SAVETHAW|SAVETHAW]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETNCORE|SETNCORE]], [[george:macro:SETUPCORE|SETUPCORE]], [[george:macro:STEP|STEP]], [[george:macro:TOPFCB|TOPFCB]], [[george:macro:TRACE|TRACE]], [[george:macro:UNLOCK|UNLOCK]], [[george:macro:UP|UP]], [[george:macro:UPPLUS|UPPLUS]]
22FL ... SEG SAVEFILE,860,SECTION FILE,CLOSE
22^= ...#
23DW ...#
24XQ #
25CB # SAVES AND UNSAVES FILES OPEN TO A GIVEN ACTIVITY
25X2 # BUT NOT WORKFILES OR COMMUNICATION FILES (EXCEPT THE
26BL # MONITORING FILE, OPEN IN SYSTCOM MODE)
26W= # K1SAVEFILE IS THE SAVING ENTRY, FROM THE MACRO SAVEACTF
27*W # K2SAVEFILE IS THE UNSAVE ENTRY, FROM THE MACRO RESTACTF
27TG #
28*6 SEGENTRY K1SAVEFILE,XENT1
28SQ SEGENTRY K2SAVEFILE,XENT2
294J ...#
29#B SVB1 4H####
29S2 #
2=?L SVA [CHANGES THE SAVING FILE TO THE ACTIVITY BEING SAVED, & MAKES
2=R= [THAT THE CURRENT ACTIVITY
2?=W [SET UP A FUTILITY BLOCK TO HOLD THE CURRENT ACNUM, AND THE LINK
2?QG [PAIR OF THE ACTIVITY BEING SAVED, AND ITS ACCUMULATORS
2#=6 SBX 6 FX1
2#PQ SETNCORE 12,1,FI,FUTILITY
2*9B JOBLOCK ACOMMUNE4(2),3
2*P2 BPZ 3 OKJOB [J IF JOB BLOCK FOUND
2B8L GEOERR BRIEFPM,JOBLOCK?
2BN= OKJOB
2C7W FCAJO 3 [FIND THE CPA
2CMG MHUNTW 1,FI,FUTILITY [X1->FUTILITY
2D76 LDX 4 ACNUM(2)
2DLQ STO 4 A1(1) [NO. OF THE SAVING/UNSAVING ACTIVITY
2F6B LDN 4 ALINK1(3)
2FL2 LDN 5 A1+1(1)
2G5L MOVE 4 HLINK [LINK
2GK= LDN 4 ACC3(3)
2H4W LDN 5 A1+3(1)
2HJG MOVE 4 5 [PRESERVE THE ACCUMULATORS
2J46 LDX 4 AMFMS(3)
2JHQ STO 4 A1+8(1) [PRESERVE
2K3B STOZ AMFMS(3) [STOP ANY OP TO YET-UNSAVED MON FILE
2KH2 CHAIN 1,3 [AFTER LOCKED ACTIVITY
2L2L LOCK 3
2LG= CHANGEFILE 3,-1
2L^W UNLOCK 3
2MFG CHANGEACT 3
2M^6 ADX 6 FX1
2NDQ EXIT 6 0
2NYB #
2PD2 SVB [FINDS THE ORIGINAL ACTIVITY AND CHANGES THE SAVING FILE TO IT
2PXL [AND THEN MAKES IT THE CURRENT ACTIVITY
2QC= SBX 6 FX1
2QWW MHUNTW 1,FI,FUTILITY
2RBG LDX 7 A1(1)
2RW6 FINDACTNO 3,7 [X3->THE SAVING ACTIVITY
2S*Q CHAIN 1,3 [GIVE IT THE FUTILITY
2STB LOCK 3
2T*2 CHANGEFILE 3,,-1 [AND THE SAVING FILE
2TSL UNLOCK 3
2W#= CHANGEACT 3 [AND MAKE IT THE CURRENT ACTIVITY
2WRW ADX 6 FX1
2X?G EXIT 6 0
2XR6 #
2Y=Q SVSTEP [STEP APPENDS A RECORD TO THE SAVING FILE AND HUNTS THE BLOCK
2YQB [BEING SAVED.
2^=2 SBX 6 FX1
2^PL ADN 1 2 [RECORD LENGTH
329= LDX 4 1
32NW STEP -1,0(1)
338G LDX 1 4
33N6 STO 1 0(3) [INSERT RECORD HEADER
347Q SBN 1 2
34MB SLL 7 12 [BLOCK TYPE
3572 HUNTX 2,7
35LL BPZ 2 SVS1 [BRANCH IF FOUND
366= GEOERR 1,SAVEMISS
36KW SVS1
375G #SKI K6SAVEFILE>599-599
37K6 TRACE 7,SAVEBLOK
384Q ADX 6 FX1
38JB EXIT 6 0
3942 #
39HL SVMOVE [MOVES TO-BE-SAVED DATA INTO ITS SAVING RECORD
3=3= LDN 5 2(3)
3=GW MOVE 4 0(1)
3?2G SMO FX2
3?G6 LDX 1 AWORK1
3?^Q STO 1 1(3) [SET RECORD CATEGORY WORD
3#FB EXIT 6 0
3#^2 #
3*DL RSTEP [STEP READS FROM THE SAVING FILE. GOES UP IF NOT A FILE RECORD
3*Y= [AND UPPLUS1 IF EMPTY
3BCW #SKI K6SAVEFILE>599-599
3BXG TRACE ATYPE(2),REOPBLOK
3CC6 SBX 6 FX1
3CWQ STEP -1
3DBB BNZ 3 RST1 [J IF NOT AT END OF SAVING FILE
3DW2 LDN 5 0
3F*L BRN RST3
3FT= RST1 LDCT 0 #44
3G#W ANDX 0 1(3) [CATEGORY WORD
3GSG BNZ 0 RST2 [J IF A FILE RECORD
3H#6 LDN 5 1
3HRQ RST3 LDX 4 ACNUM(2) [THE BEING-UNSAVED ACTIVITY
3J?B HUNT 1,FILE,FABSNB
3JR2 FREECORE 1
3K=L CALL 6 SVB [CHANGE TO THE SAVING ACT
3KQ= FINDACTNO 2,4 [X2->THE BEING-UNSAVED ACTIVITY
3L9W MHUNTW 3,FI,FUTILITY
3LPG LDN 0 A1+1(3)
3M96 LDN 1 ALINK1(2)
3MNQ MOVE 0 HLINK [LINK
3N8B LDN 0 A1+3(3)
3NN2 LDN 1 ACC3(2)
3P7L MOVE 0 5
3PM= LDX 0 A1+8(3)
3Q6W STO 0 AMFMS(2) [RESTORE
3QLG FREECORE 3 [THE FUTILITY
3R66 BNZ 5 RST4 [J IF NOT AT END OF THE SAVING FILE
3RKQ UP
3S5B RST4 UPPLUS 1
3SK2 RST2 ADX 6 FX1
3T4L EXIT 6 0
3TJ= #
3W3W RMOVE [CLEARS THE NEWLY SET UP BLOCK,MOVES IN DATA FROM THE SAVING
3WHG [RECORD AND SETS A1
3X36 STO 4 A1(2)
3XGQ SBN 4 1
3Y2B LDX 7 4
3YG2 LDX 1 5
3Y^L RM1 STOZ 0(1)
3^F= ADN 1 1
3^YW BCT 4 RM1
42DG LDX 1 7
42Y6 LDN 4 2(3)
43CQ MOVE 4 0(1)
43XB EXIT 6 0
44C2 #
44WL # SAVEACTLF ENTRY
45B= # ON ENTRY, THE TOP LEVEL FILE OPEN TO THE SAVING ACTIVITY IS THE
45TW # SAVING FILE (LANGUAGE ####) AND ACOMMUNE1 CONTAINS THE
46*G # ADDRESS OF A LOCKED ACTIVITY WHICH IS BEING SAVED
46T6 # THE FILES OPEN TO THAT ACTIVITY ARE FROZEN AND CLOSED BY
47#Q # FREEZESAVE, WHICH LEAVES A 10 WORD FABSNB, AND A COPY OF THE
47SB # FILE'S FCA IN A FI/FCA BLOCK
48#2 # EACH FILE SAVED HAS A PAIR OF RECORDS IN THE SAVING FILE - FABSNB
48RL # AND FCA. EACH RECORD HAS A CATEGORY WORD AFTER THE HEADER -
49?= # BIT3 SET - THIS IS A FILE RECORD, BIT6 UNSET - THE FIRST OF
49QW # THE PAIR
4==G XENT1
4=Q6 CALL 6 SVA [CHANGE SAVING FILE AND ACTIVITY
4?9Q SV4 TOPFCB 3
4?PB #SKI K6SAVEFILE>599-599
4#92 TRACE FLOC1(3),SAVEFILE
4#NL LDX 0 FLAN(3)
4*8= SMO FX1
4*MW TXU 0 SVB1 [IDENTIFY SAVING FILE BY LANGUAGE
4B7G BCS SV1 [J IF NOT SAVING FILE
4BM6 CALL 6 SVB
4C6Q MHUNTW 1,FI,FUTILITY
4CLB FREECORE 1
4D62 UP
4DKL SV1 LDX 0 FCOMM(3)
4F5= ANDN 0 4
4FJW BZE 0 SV2 [J IF NOT CAREFUL
4G4G GEOERR BRIEFPM,CARESAVE
4GJ6 SV2
4H3Q FREEZESAVE [FREEZE THE TOP LEVEL FILE & CLOSE IT
4HHB # BLOCKS TO-BE-SAVED CHAINED AFTER CURRENT ACTIVITY
4J32 LDCT 1 #40 [BIT3 - CATEGORY WORD FOR FIRST
4JGL STO 1 AWORK1(2) [RECORD FOR THIS FILE
4K2= # SAVE THE FABSNB
4KFW LDN 1 FABSAVENO [NO OF WORDS TO MOVE
4K^G LDN 7 FILE+FABSNB
4LF6 CALL 6 SVSTEP [SET UP RECORD
4LYQ LDN 4 FABSAVE(2)
4MDB CALL 6 SVMOVE [MOVE USER AND LOCAL NAME
4MY2 FREECORE 2
4NCL LDCT 1 #44 [BITS3,6 - CATEGORY W-RD FOR FILE
4NX= STO 1 AWORK1(2) [RECORD NOT THE FIRST FOR THIS FILE
4PBW # SAVE THE FCA
4PWG LDN 1 FCASAVENO [NO OF WORDS TO MOVE
4QB6 LDN 7 FI+FCA
4QTQ CALL 6 SVSTEP [SET UP RECORD
4QX^ ... LDX 0 FIRB(2) [J IF FREADBLOCK -IVE
4R28 ... BNG 0 SV3
4R4C ... LDN 0 FBLKS
4R6L ... SBS 0 FIRB(2) [RELATIVISE FREADBLOCK
4R8T ...SV3
4R?4 ... BS 2,BFCASAVEREL [SET
4R*B LDN 4 FCASAVE(2)
4RT2 CALL 6 SVMOVE [SAVE FREADBLOCK - FGENE-AL2
4T?W FREECORE 2
4TRG BRN SV4
4W?6 #
4WQQ # RESTACTF ENTRY
4X=B # ON ENTRY, THE TOP LEVEL FILE OPEN TO THE UNSAVING ACTIVITY IS THE
4XQ2 # SAVING FILE, AND ACOMMUNE1 CONTAINS THE ADDRESS OF A LOCKED
4Y9L # ACTIVITY WHICH IS BEING UNSAVED. WE ARE POSITIONED ON THE
4YP= # SECOND FILE RECORD
4^8W # A FABSNB AND A FI/FCA ARE SET UP FROM EACH RECORD PAIR, THE MODE
4^NG # OF OPENING WHEN SAVED IS EXTRACTED FROM THE FCA AND THE FILE
5286 # IS REOPENED
52MQ XENT2
537B CALL 6 SVA [CHANGE SAVING FILE AND ACTIVITY
53M2 # SET UP FABSNB
546L BACKSPACE -1
54L= R1 LDN 4 FABSAVENO+1 [LOGICAL LENGTH
555W SETUPCORE 4,2,FILE,FABSNB
55KG CALL 6 RSTEP [NEXT RECORD
5656 HUNT 2,FILE,FABSNB
56JQ LDN 5 FABSAVE(2)
574B CALL 6 RMOVE [COMPLETE FABSNB
57J2 #SKI K6SAVEFILE>599-599
583L TRACE A1+4(2),REOPFILE
58H= # SET UP FCA BLOCK
592W LDN 4 FCASAVENO+1 [LOGICAL LENGTH
59GG SETUPCORE 4,2,FI,FCA
5=26 CALL 6 RSTEP [NEXT RECORD
5=FQ HUNT 2,FI,FCA
5=^B LDN 5 FCASAVE(2)
5?F2 CALL 6 RMOVE
5?K= ... JBS R4,2,BFCASAVEREL [J IF NEW RELATIVISED SAVED FORMAT
5?PG ... LDN 0 A1+2
5?TQ ... ADS 0 FIRB(2) [ADJUST FREADBLOCK
5#22 ... BRN R5
5#6= ...R4
5#=G ... LDX 0 FIRB(2)
5#BQ ... BNG 0 R5 [J IF FREADBLOCK -IVE
5#H2 ... LDN 0 FBLKS
5#M= ... ADS 0 FIRB(2) [ADJUST FREADBLOCK
5#RG ...R5
5#XW HUNT 1,FI,FCA
5*CG LDX 0 FG1(1) [EXTRACT MAIN MODE FROM FGENERAL1
5*X6 LDN 4 1
5BBQ LDN 5 7
5BWB R2 BNG 0 R3 [J IF READ MODE
5CB2 SLL 0 1
5CTL ADN 4 1 [MAIN MODE IS ADDITIVE
5D*= BCT 5 R2 [CHECK TOP 7 BITS
5DSW GEOERR BRIEFPM,MODE???
5F#G R3 SLL 4 9 [MAIN MODE IN BITS 12-14
5FS6 LDCT 0 #004
5G?Q ORX 4 0 [ERASING MODE
5GRB LDX 0 FG1(1)
5H?2 ANDX 0 BIT11
5HQL BZE 0 NOTCOM [J IF NOT OPEN FOR COMMUNICATION
5J== LDCT 0 #002 [THIS MUST BE THE MON. FILE
5JPW ORX 4 0 [SYSTCOM MODE
5K9G NOTCOM
5KP6 SAVETHAW SVBRK,4
5L8Q LDX 3 FILERING(2)
5LNB MHUNTW 2,FI,FCA
5M82 LDN 4 FCASAVE(2)
5MML LDN 5 FREADBLOCK(3)
5N7= LDN 1 FCASAVENO
5NLW MOVE 4 0(1) [RESTORE FREADBLOCK-FGENERAL2
5P6G FREECORE 2 [FCA
5PL6 FILEMOVE 0,-2 [KEEP THE ORIGINAL ORDER
5Q5Q MHUNT 1,FILE,FABSNB
5QKB FREECORE 1 [FABSNB
5R52 BRN R1
5RJL SVBRK GEOERR BRIEFPM,SAVEBRK
5SHW #END
^^^^ ...04547632000100000000