open-insight/SYSPROG/APPROW/SYSOBJ%003ASITRANS.RUN.json
2024-03-25 15:17:34 -07:00

205 lines
51 KiB
JSON
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"header": {
"version": 1,
"type": "record",
"approw-key": "SITRANS.RUN"
},
"body": {
"record1": {
"<1>": "\u0014"
},
"record2": {
"<1>": {
"<1,1>": {
"<1,1,1>": {
"<1,1,1,1>": {
"<1,1,1,1,1>": "´Ãd\u0000\u0000\u0000 \u0000p\bz\bˆ\t\n\u0002\u0000\u0010\u000e-\u0002\u0000\u0000\u0000-\u0002\u0000\u0002\u0000-\u0002\u0000\u0004\u0000-\u0002\u0000\u0006\u0000-\u0002\u0000\b\u0000-\u0002\u0000\n\u0000-\u0002\u0000\f\u0000-\u0002\u0000\u000e\u0000-\u0002\u0000\u0010\u0000-\u0002\u0000\u0012\u0000-\u0002\u0000\u0014\u0000-\u0002\u0000\u0018\u0000-\u0002\u0000\u001a\u0000-\u0002\u0000\u001c\u0000-\u0002\u0000\u001e\u0000-\u0002\u0000 \u0000-\u0002\u0000\"\u0000-\u0002\u0000$\u0000-\u0002\u0000&\u0000-\u0002\u0000¢\u0000-\u0002\u0000¬\n-\u0002\u0000¼\n-\u0002\u0000¶Ã-<\u0000d\u0000-Ð\u0007 \u0000-\n\u0000p\b-\u000e\u0001z\b-\u000e\u0001ˆ\t-\u0010\u0000\n-\n\u0000ª\n-\u0006\u0000´\n-È\u0000º\n-\u0006\u0000\u000b-\u0010\u0000ˆ\u000b-\u0010\u0000˜\u000b-\n\u0000¨\u000b-d\u0000¸\u000b-d\u0000\u001c\f-d\u0000€\f-d\u0000ä\f-d\u0000H\r-d\u0000¬\r-Ä\t\u0010\u000e-Ð\u0007Ô\u0017-Ð\u0007¤\u001f-@œt'-\u0010'´Ã\u0014¸\u000b\b\u0010\u0011\u0002\u0000H\r¬\r\u0014¸\u000b\b\u0010!\u0002\u0000H\r¬\r\u0014¸\u000b\b\u00101\u0002\u0000H\r¬\r\u0014¸\u000b\b \u0012\u0002\u0000º\n\u000b\u0014¸\u000b\b \"\u0002\u0000º\n\u000b\u0017´Ã\u0017´Ã4´Ã\u0013t't'\u0003\u0006\u0000\u0004\u000e\u0000\u0014´\n\u0002\r\n\u0004\u001c\u0000\u0004$\u0000>\r\u0001\nŒ\u0001\t$\u0000\np\u0001\u0013t't'\u000b„\u0001\r³\u0004\u000b\u0001\u0003\u0000\u0000\u0013t't'\n„\u0001\nŒ\u0001Bt'@\u000e?>?\u000e>\r",
"<1,1,1,1,2>": "\u0001\nî\u0001\u001b\u0001Þ\u0005\u0000\u0000\nÜ\u0001\nÙ\u0001\r\u0002\nÜ\u0001\u001b\u0001Þ\u0005\u0000\u0000\nÖ\u0001\nÓ\u0001\rÃ\u0002\nÖ\u0001\u001b\u0001Þ\u0005\u0000\u0000\nÐ\u0001\nÍ\u0001\rÜ\u0002\nÐ\u0001\u0003\u0000\u0000\nÖ\u0001\u0003\u0000\u0000\nÜ\u0001\u0003\u0000\u0000\nî\u0001\u0004\u0006\u0000\u001a\u0001Þ\nî\u0001\u0017t'\f\u0001\u0003\u0000\u0000\u0017t'@\u000e?>?\u000e>\rL\u0002\nH\u0002\u001a\u0001*\nH\u0002\rm\u0002\nH\u0002\u001a\u0001*\nH\u0002\r„\u0002\nH\u0002\u0013t'ä\f\u0014t'\u0001"
}
}
},
"<1,2>": "0\b\u0000\u0000\u00000\n\u0000\u0000\u0000\u0013Ô\u0017Ô\u0017\u0013¤\u001f¤\u001f\t\u0006\u0000\u000bC\u0002\u0003\u001c\u0000\u0003\u0000\u0000\nH\u0002@\u000e?>?\u000e>G\u0001*\ni\u0002\u0013\u001c\f\u001c\f\u0013ä\fä\f\u0013\u001c\f \u0000\u0013ä\f \u0000@\u000e?>?\u000e>G\u0001*\n€\u0002\u0014ä\f\u0001*\u0013ä\f \u0000@\u000e?>?\u000e>G\u0001",
"<1,3>": "\n—\u0002\u0014ä\f\u0001*\u0013ä\f \u0000@\u000e?>?\u000e>\u001a\u0001",
"<1,4>": "\n¿\u0002\u001a\u0001*\n·\u0002\t\u0006\u0000\n±\u0002\u0003\u0004\u0000\u0003\u0000\u0000\nº\u0002\u0003\u0000\u0000\n¿\u0002@\u000e?>?\u000e>\u001a\u0001",
"<1,5>": "\nØ\u0002\u001a\u0001*\nÐ\u0002\u0003\u0000\u0000\nØ\u0002@\u000e?>?\u000e>\u001a\u0001",
"<1,6>": "\n&\u0003\r*\u0003\n"
},
"<2>": "\u0002\rA\u0003\n",
"<3>": "\u0002\rd\u0003\n",
"<4>": {
"<4,1>": "\u0002\u001a\u0001",
"<4,2>": "\n"
},
"<5>": {
"<5,1>": "\u0002\fã\u0002\u0003\u0000\u0000\u0016t'\b\u0000\u0014t'\u0001",
"<5,2>": "\u0016t'\n\u0000\u0014t'\u0001",
"<5,3>": "\u0013t'¤\u001f\u0014t'\u0001",
"<5,4>": {
"<5,4,1>": "\u0013t'Ô\u0017@\u000e?>?\u000e>\u0013H\rH\rG\u0001",
"<5,4,2>": "\n=\u0003\u0013H\r \u0000@\u000e?>?\u000e>\u0013ª\nª\n\u001a\u0001",
"<5,4,3>": "\n`\u0003G\u0001",
"<5,4,4>": "\nX\u0003\u0013ª\n \u0000\u0003\u0000\u0000\n`\u0003@\u000e?>?\u000e>\u001a\u0001",
"<5,4,5>": "\nz\u0003\ns\u0003@>\fz\u0003\u0004\u0000\u0000?\u000e@\u000e?>8B´ÃF\u0004\r\\\u0004\nŠ\u0003@\u000e?>\fZ\u0004\r\\\u0004\n—\u0003@\u000e?>\fZ\u0004\u001b\u00032",
"<5,4,6>": "5\n§\u0003\u0003\u001c\u0000\u0003\u0000\u0000\nµ\u0003\r\\\u0004\nµ\u0003@\u000e?>\fZ\u0004\b\u0014\u0000¶Ã\u001a\u00013\n'\u0004\u001a\u0001",
"<5,4,7>": "\n'\u0004G\u0001",
"<5,4,8>": "\u0003\u0000\u0000\n'\u0004\u001a\u0001",
"<5,4,9>": "\n'\u0004G\u0001",
"<5,4,10>": "\u0003\u0000\u0000\n'\u0004\u001a\u0001",
"<5,4,11>": "\n'\u0004G\u0002",
"<5,4,12>": ""
},
"<5,5>": {
"<5,5,1>": "\u0003\u0000\u0000\n'\u0004\u001a\u0001",
"<5,5,2>": "\u000b"
}
}
},
"record3": {
"<1>": {
"<1,1>": "\u0003\u0003$\u0000\u0003\u0000\u0000\n'\u0004G\u0001",
"<1,2>": {
"<1,2,1>": "\u0003\u0000\u0000\n'\u0004\t¢\u0000\u000b\u0017\u0004\u0003$\u0000\u0003\u0000\u0000\n'\u0004\b¶Ã\u0014\u0000\r\\\u0004\n'\u0004@\u000e?>\fZ\u0004\rŠ\u0004\n4\u0004@\u000e?>\fZ\u0004\r\\\u0004\nA\u0004@\u000e?>\fZ\u0004\u0006\u0000012356\u0003\u0003œ\u0003º\u0003,\u00049\u0004?\u000e>\u0006\n\u0000\u0013Ô\u0017H\r\u0014Ô\u0017\u0001",
"<1,2,2>": "\u0013Ô\u0017ª\n\u0014Ô\u0017\u0001",
"<1,2,3>": "G\u0001"
},
"<1,3>": {
"<1,3,1>": "\n†\u0004\u0013Ô\u0017 \u0000\u0014Ô\u0017\u0001",
"<1,3,2>": "@\u000e?>?\u000e>\u0006\b\u0000\u0013¤\u001fH\r\u0014¤\u001f\u0001",
"<1,3,3>": "\u0014¤\u001f\u0001",
"<1,3,4>": "G\u0001"
},
"<1,4>": {
"<1,4,1>": "\n¯\u0004\u0013¤\u001f \u0000\u0014¤\u001f\u0001",
"<1,4,2>": "@\u000e?>?\u000e>\u0013´Ã´Ã\u0013´Ãt'\u0013t't'4´Ã\u0013´Ã´Ã\rF\f\n$\u0006\u0013´Ã´Ã\r(\u0006\n$\u0006\r†\u0011\n$\u0006\rŠ\u0012\n$\u0006\r\u0005\u0019\n$\u0006\rŸ\u001c\n$\u0006\t\u0004\u0000\n\u0000\u0005\rÛ\u001e\n\u0003\u0005\u0003\u0000\u0000\n$\u0006\rF\f\n$\u0006\t\b\u0000\n3\u0005\rí\u001e\n6\u0005\rz\u001f\n*\u0005\u0007\b\u0000\t\b\u0000\n*\u0005\f\u0018\u0005\u0003\u0000\u0000\rP \n6\u0005\u0003\u0000\u0000\n$\u0006\u0013´Ã´Ã\u0003\u0006\u0000\rF\f\n$\u0006\rp\u0011\n$\u00060 \u0000\u0000\u0000\rl \u0003\u0000\u0000\n\u0005\t\u0006\u0000\u000bg\u0005\r­5\u0003\u0000\u0000\n\u0005\rF\f\n\u0005\rp\u0011\n\u0005\u0004\u0006\u0000\r”8\n\u0005\fR\u0005\u0003\u0000\u0000\rè5\n$\u0006\u0003\u000e\u0000\r÷7\n$\u0006\u0013´Ã´Ã\u0003\u0006\u0000\rF\f\n$\u0006\rp\u0011\n$\u00060 \u0000\u0000\u0000\r\u001a9\u0003\u0000\u0000\né\u0005\t\u0006\u0000\u0005\u0000\u0000\nÂ\u0005\nÂ\u0005\nË\u0005\r­5\nÎ\u0005\u0003\u0000\u0000\né\u0005\rF\f\né\u0005\rp\u0011\né\u0005\u0004\u0006\u0000\r”8\né\u0005\f­\u0005\u0003\u0000\u0000\rö=\n$\u0006\rïA\n$\u0006\rUJ\n$\u0006\rÉK\n$\u0006\r-L\n$\u0006\rAN\n$\u0006\reN\n$\u0006\r-R\n$\u0006\rT\n$\u0006@\u000e?>?\u000e>\u0014t'\u0002* \u0013t'\u001c\f\u0014t'> Secondary index transaction builder for version 2.1 and above\u0017t'\u0017t'\u0014t'%* Invoked like a dictionary calculate\u0017t'\u0014t'9* Input: @MV = 0 for write, 1 for delete, 2 for clearfile\u0017t'\u0014t''* @ID = Record key for write and delete\u0017t'\u0014t'\u001c* @RECORD = Record for write\u0017t'\u0014t' * @ANS = data file file variable\u0017t'\u0014t'\u0012* RETURNS: nothing\u0017t'\u0017t'\u0014t'ƒCOMMON /%%SI%%/MAX.UPDATE.SIZE,INDEXES,INDEXES.FILEVAR,NO.PROTECT,OLD.REC,OLD.FLAG,OLD.FV,OLD.ID,DICT.FVS%,BATCH.MODE%,UPDATE.ITEM%\u0017t'\u0017t'\u0014t'\u0017EQU MARKS TO \\FCFBFEFF\\\u0017t'\u0014t'\u0014EQU VMARKS TO \\FDFD\\\u0017t'\u0014t'\u001aEQU DELETED.VALUE$ TO \\FC\\\u0017t'\u0014t'\u000eEQU TRUE$ TO 1\u0017t'\u0014t'\u000fEQU FALSE$ TO 0\u0017t'\u0014t'\u0014EQU READ.RECORD TO 1\u0017t'\u0014t'\u0015EQU WRITE.RECORD TO 3\u0017t'\u0014t'\u0016EQU DELETE.RECORD TO 4\u0017t'\u0014t'\u0012EQU SI.WRITE$ TO 0\u0017t'\u0014t'\u0013EQU SI.DELETE$ TO 1\u0017t'\u0014t'\u0016EQU SI.CLEARFILE$ TO 2\u0017t'\u0017t'\u0014t'-DECLARE SUBROUTINE MSG, BATCH.INDEXING, DELAY\u0017t'\u0014t'HDECLARE FUNCTION CALCULATE, CALCULATEX, RELATER, INDEX.OPEN, ESC.TO.EXIT\u0017t'\u0017t'\u0014t'@* @ANS contains SI.MFS file handle, parse into local variables. \u0017t'\u0014t'\u0017POS = 6 + @ANS[ 1, 5 ] \u0017t'\u0014t'\u0016TEMP = @ANS[ POS, 5 ] \u0017t'\u0014t'\tPOS += 5 \u0017t'\u0014t'6@DICT = @ANS[ POS, TEMP ] ;* used to be an index.open \u0017t'\u0014t'\u0015DICT.FILEVAR = @DICT \u0017t'\u0014t'\fPOS += TEMP \u0017t'\u0014t'\u0016TEMP = @ANS[ POS, 5 ] \u0017t'\u0014t'\tPOS += 5 \u0017t'\u0014t'\u001bIDX.FV = @ANS[ POS, TEMP ] \u0017t'\u0014t'\fPOS += TEMP \u0017t'\u0014t'\u0016TEMP = @ANS[ POS, 5 ] \u0017t'\u0014t'\tPOS += 5 \u0017t'\u0014t'\u001cFILEVAR = @ANS[ POS, TEMP ] \u0017t'\u0017t'\u0014t'\u0011FS = FILEVAR<1,1>\u0017t'\u0014t'\u0012NEXTFS = FS<1,1,1>\u0017t'\u0014t'\u001fFVAR = DELETE(FILEVAR, 1, 1, 0)\u0017t'\u0014t'\nSTATUS = 0\u0017t'\u0014t'\u0007FNAME =\u0014t'\u0002\"!\u0013t'ä\f\u0014t'\t\"[1,\"F*\"]\u0017t'\u0014t'\u0013IF BATCH.MODE% THEN\u0017t'\u0014t'\u0019 IDX.FV = INDEXES.FILEVAR\u0017t'\u0014t'\u0003END\u0017t'@\u000e?>?\u000e>\u001a\u0001Þ\nM\f\u0003\u0000\u0000\n¦\fG\u0001*\n¦\f\u0013ä\fä\f\u0013\u001c\f\u001c\f\u0013ä\f \u0000\u0013\u001c\f \u0000\rë\f\n¦\fG\u0001"
},
"<1,5>": "\n¦\f\u0013ä\f \u0000\u001a\u0001",
"<1,6>": "\n¦\f:\u0002\u0000´Ã\b\b\u0000\u0002\u0000\u001a\u0001",
"<1,7>": "\n¦\f:\u0002\u0000´Ã\b\n\u0000\u0002\u0000\u001a\u0001",
"<1,8>": {
"<1,8,1>": "\n¦\f@\u000e?>?\u000e>\u0013H\rH\r\u0013¬\r¬\rG\u0001",
"<1,8,2>": "\nç\f\u0013H\r \u0000\r\u0002\r\nç\f\u001a\u0001",
"<1,8,3>": "\nç\f\u0013ª\nª\nG\u0001",
"<1,8,4>": "\u0003\u0000\u0000\nç\f\u0013ª\n \u0000\u001a\u0001",
"<1,8,5>": "\nç\f@\u000e?>?\u000e>\u0013€\f€\f\r\u0019\r\n"
}
},
"<2>": {
"<2,1>": "\f\u0013€\fº\n@\u000e?>?\u000e>\u0013¬\r¬\r\r\u0019\r\n\u0015\r\u0013¬\rº\n@\u000e?>?\u000e>; \u0000\u0014 \u0000\u0001 \u0013 \u0000 \u0000\u0013º\nº\n\u0003&\u0000\rG\r\n;\r\u0004&\u0000\f/\r\u0003\u0000\u0000;´Ã@\u000e?>?\u000e>\t&\u0000\nV\r\r‡\r\nV\r@\u000e?>\r\u000e\n`\r@\u000e?>\u001b\u0001 \no\r\u0004\u0000\u0000?\u000e@\u000e?>9\u0002\u0000 \u0000\u0016º\n\u0002\u0000\u0007¼\n\u0003\u0000\u0000@\u000e?>?\u000e>\u0003\u0000\u0000\n“\r@>\fš\r\u0004\u0000\u0000?\u000e@\u000e?>8B \u0000t\u000e\u001a\u00010\n²\r\u0014º\n\u0004ZERO@\u000e?>\f”\u000e\u001a\u00011\nÆ\r\u0014º\n\u0003ONE@\u000e?>\f”\u000e\u001a\u00012\nÚ\r\u0014º\n\u0003TWO@\u000e?>\f”\u000e\u001a\u00013\nð\r\u0014º\n\u0005THREE@\u000e?>\f”\u000e\u001a\u00014\n\u0005\u000e\u0014º\n\u0004FOUR@\u000e?>\f”\u000e\u001a\u00015\n\u001a\u000e\u0014º\n\u0004FIVE@\u000e?>\f”\u000e\u001a\u00016\n.\u000e\u0014º\n\u0003SIX@\u000e?>\f”\u000e\u001a\u00017\nD\u000e\u0014º\n\u0005SEVEN@\u000e?>\f”\u000e\u001a\u00018\nZ\u000e\u0014º\n\u0005EIGHT@\u000e?>\f”\u000e\u001a\u00019\no\u000e\u0014º\n\u0004NINE@\u000e?>\f”\u000e\n\u00000123456789¢\r·\rË\rß\rõ\r\n\u000e\u001f\u000e3\u000eI\u000e_\u000e?\u000e>\u0003\u0000\u0000\n¢\u000e@>\f©\u000e\u0004\u0000\u0000?\u000e@\u000e?>8B \u0000ó\u000f\u001a\u0001!\n¿\u000e\u0014º\n\u0002EX@\u000e?>\f%\u0010\u001a\u0001@\nÒ\u000e\u0014º\n\u0002AT@\u000e?>\f%\u0010\u001a\u0001#\næ\u000e\u0014º\n\u0003NBR@\u000e?>\f%\u0010\u001a\u0001$\n",
"<2,2>": {
"<2,2,1>": "\u000e\u0014º\n\u0006DOLLAR@\u000e?>\f%\u0010\u001a\u0001%\n\u0012\u000f\u0014º\n\u0004PCNT@\u000e?>\f%\u0010\u001a\u0001^\n%\u000f\u0014º\n\u0002UP@\u000e?>\f%\u0010\u001a\u0001&\n9\u000f\u0014º\n\u0003AMP@\u000e?>\f%\u0010\u001a\u0001-\nN\u000f\u0014º\n\u0004DASH@\u000e?>\f%\u0010\u001a\u0001+\nc\u000f\u0014º\n\u0004PLUS@\u000e?>\f%\u0010\u001a\u0001=\nv\u000f\u0014º\n\u0002EQ@\u000e?>\f%\u0010\u001a\u0001/\nŠ\u000f\u0014º\n\u0003DIV@\u000e?>\f%\u0010\u001a\u0001<\n\u000f\u0014º\n\u0002LT@\u000e?>\f%\u0010\u001a\u0001>\n°\u000f\u0014º\n\u0002GT@\u000e?>\f%\u0010\u001a\u0001:\nÆ\u000f\u0014º\n\u0005COLON@\u000e?>\f%\u0010\u001a\u0001;\nÛ\u000f\u0014º\n\u0004SEMI@\u000e?>\f%\u0010\u001a\u0001_\nî\u000f\u0014º\n\u0002UL@\u000e?>\f%\u0010\u0010\u0000!@#$%^&-+=/<>:;_±\u000eÄ\u000e×\u000eë\u000e\u0002\u000f\u0017\u000f*\u000f>\u000fS\u000fh\u000f{\u000f\u000f¢\u000fµ\u000fË\u000fà\u000f?\u000e>8B´ÃZ\u0011\u001a\u00010\nH\u0010\u001a\u0001",
"<2,2,2>": "\nH\u0010G\u0001",
"<2,2,3>": "\nH\u0010\u001a\u0001",
"<2,2,4>": "\nH\u0010@\u000e?>\fn\u0011\u001a\u00011\nj\u0010\u001a\u0001",
"<2,2,5>": "\nj\u0010G\u0001",
"<2,2,6>": "\u0003\u0000\u0000\nj\u0010\u001a\u0001",
"<2,2,7>": "\nj\u0010@\u000e?>\fn\u0011\u001a\u00012\n¼\u0010\u001a\u0001",
"<2,2,8>": "\n¼\u0010\u001a\u00014\n‡\u0010\u001a\u0001",
"<2,2,9>": "\n‡\u0010\u000b\u0010\u001a\u00015\n\u0010\u001a\u0001",
"<2,2,10>": "\n\u0010\u000b·\u0010G\u0001",
"<2,2,11>": "\u0003\u0000\u0000\n·\u0010\u001a\u0001",
"<2,2,12>": "\n·\u0010G\u0001",
"<2,2,13>": "\u0003\u0000\u0000\n·\u0010\u001a\u0001",
"<2,2,14>": "\n·\u0010\n¼\u0010@\u000e?>\fn\u0011\u001a\u00013\n\u000b\u0011\u001a\u0001",
"<2,2,15>": "\n\u000b\u0011G\u0001",
"<2,2,16>": "\u0003\u0000\u0000\n\u000b\u0011\u001a\u0001",
"<2,2,17>": "\n\u000b\u0011G\u0001",
"<2,2,18>": "\u0003\u0000\u0000\n\u000b\u0011\u001a\u0001",
"<2,2,19>": "\n\u000b\u0011G\u0001",
"<2,2,20>": "\u0003\u0000\u0000\n\u000b\u0011\u001a\u0001",
"<2,2,21>": "\n\u000b\u0011G\u0001",
"<2,2,22>": "\u0003\u0000\u0000\n\u000b\u0011\u001a\u0001",
"<2,2,23>": "\n\u000b\u0011@\u000e?>\fn\u0011\u001a\u00015\n*\u0011\u001a\u0001",
"<2,2,24>": "\n*\u0011G\u0001",
"<2,2,25>": "\n*\u0011\u001a\u0001",
"<2,2,26>": "\n*\u0011@\u000e?>\fn\u0011\u001a\u00016\nU\u0011\u001a\u0001",
"<2,2,27>": "\nU\u0011G\u0001",
"<2,2,28>": "\nU\u0011\u001a\u0001",
"<2,2,29>": "\nU\u0011G\u0001",
"<2,2,30>": "\nU\u0011\u001a\u0001",
"<2,2,31>": "\nU\u0011@\u000e?>\fn\u0011\u0006\u0000012356.\u0010M\u0010o\u0010Á\u0010\u0010\u0011/\u0011?\u000e>G\u0001"
},
"<2,3>": "\u0003\u0000\u0000\n\u0011\u001a\u0001",
"<2,4>": {
"<2,4,1>": "\n\u0011@\u000e?>?\u000e>\u0017t'\u0014t' * CHECK FOR CLEAR-FILE OPERATION\u0017t'\u0017t'\u0014t'\u001cIF @MV EQ SI.CLEARFILE$ THEN\u0017t'\rF\f\n†\u0012\u0014t'\u0011 UPDATE.LIST = ''\u0017t'\u0014t'\u0014 @ID = '%%ALL.IDS%%'\u0017t'\t\n\u0000\nm\u0012\rp\u0011\nm\u0012\rª\f\na\u0012\r'\u0010\na\u0012\u0014t'\u0011 UPDATE.LIST := \"\u0013t'H\r\u0014t'\u0015\":@FM:@ID:@FM:@FM:@FM\u0017t'\f\u001c\u0012\u0003\u0000\u0000\rF\f\nm\u0012\f\u0010\u0012\u0003\u0000\u0000\u0014t'\bEND ELSE\u0017t'\u0013´Ã´Ã@\u000e?>?\u000e>\rF\f\n\u0001\u0019\rp\u0011\n\u0001\u0019\rª\f\n¦\u0012\r'\u0010\n¦\u0012\f—\u0012\u0003\u0000\u0000\t\u001c\u0000\n+\u0015\rF\f\n(\u0015\rp\u0011\n(\u0015\rª\f\nÊ\u0012\r'\u0010\nÊ\u0012\f»\u0012\u0003\u0000\u0000\u0017t'\u0014t'C* Get affected files data and dict filevars for reading the record,\u0017t'\u0014t'\"* doing the calculate, and locking\u0017t'\u0017t'\u0014t'\u000fIF INDEX.OPEN('\u0013t'ä\f\u0014t'\u0002',\u0013t'€\f\u0014t'\u0006) ELSE\u0017t'\u0014t'\u0003 * \u0013t'€\f\u0014t'\u0005 = ''\u0017t'\u0014t'\u0014 MSG(\"B441\",\"\",\"\", \"\u0013t'ä\f\u0014t'\n\"[1,\"F*\"])\u0017t'\u0014t'\u000e RETURN FALSE$\u0017t'\u0014t'\u0003END\u0017t'\u0014t'\u0010IF INDEX.OPEN('!\u0013t'ä\f\u0014t'\u0007',BANG.\u0013t'€\f\u0014t'\u0006) ELSE\u0017t'\u0014t'\b * BANG.\u0013t'€\f\u0014t'\u0005 = ''\u0017t'\u0014t'\u0015 MSG(\"B441\",\"\",\"\", \"!\u0013t'ä\f\u0014t'\n\"[1,\"F*\"])\u0017t'\u0014t'\u000e RETURN FALSE$\u0017t'\u0014t'\u0003END\u0017t'\u0014t'\u0014IF INDEX.OPEN('DICT.\u0013t'ä\f\u0014t'\u0007',DICT.\u0013t'€\f\u0014t'\u0006) ELSE\u0017t'\u0014t'\b * DICT.\u0013t'€\f\u0014t'\u0005 = ''\u0017t'\u0014t'\u0019 MSG(\"B441\",\"\",\"\", \"DICT.\u0013t'ä\f\u0014t'\n\"[1,\"F*\"])\u0017t'\u0014t'\u000e RETURN FALSE$\u0017t'\u0014t'\u0003END\u0017t'\f¯\u0012\u0003\u0000\u0000\u0003\u0000\u0000\n\u0001\u0019\u0013´Ã´Ã\rF\f\n\u0001\u0019\u0017t'\u0014t'8* Make sure the record is locked and lock it now if not.\u0017t'\u0014t'=* At lease the indexes will stay correct this way even if the\u0017t'\u0014t'+* caller does not lock records on a network\u0017t'\u0014t'\"* Skip locking if not on a network\u0017t'\u0014t'\u0014ITEM.LOCKED = FALSE$\u0017t'\u0014t'\u0015IF LEN(@STATION) THEN\u0017t'\u0014t'\u0011* IF INDEX.OPEN('\u0013t'ä\f\u0014t'\u0014',LOCK.FILEVAR) THEN\u0017t'\u0014t'\u0018* LOCK_FV = LOCK.FILEVAR\u0017t'\u0014t'\u000f* LOCK_ID = @ID\u0017t'\u0014t'\u0013* LOCK_MSG = 'B440'\u0017t'\u0014t'\u0012* PARA = @ID:@FM:\"\u0013t'\u001c\f\u0014t'\u0001\"\u0017t'\u0014t'\u0011* GOSUB LOCK_ITEM\u0017t'\u0014t'\u000f* IF ABORT THEN\u0017t'\u0014t'\u000f* RETURN FALSE$\u0017t'\u0014t'\u0005* END\u0017t'\u0014t'%* IF LOCKED AND NOT(SELF_LOCKED) THEN\u0017t'\u0014t'\u0015* ITEM.LOCKED = TRUE$\u0017t'\u0014t'\u0005* END\u0017t'\u0014t'\u0005* END\u0017t'\t\u001c\u0000\nê\u0018\u0013´Ã´Ã\u0003\u0006\u0000\rF\f\nç\u0018\rp\u0011\nç\u0018\rª\f\nÞ\u0018\t\u0006\u0000\nß\u0017\u001b\u00032",
"<2,4,2>": "5\u0005\u0000\u0000\nß\u0017\nß\u0017\u000bÒ\u0018\u0014t'\u000b LOCK_FV = \t\u0006\u0000\n\u0002\u0018\u0014t'\u0007FILEVAR\u000b\r\u0018\u0013t'€\f\u0003\u0000\u0000\nÏ\u0018\u0017t'\u0014t'\f LOCK_ID = \"\u0013t'H\r\u0014t'\u0007*INDEX\"\u0017t'\u0014t'\u0012 LOCK_MSG = 'B521'\u0017t'\u0014t'\t PARA = \"\u0013t'H\r\u0014t'\u0007*INDEX\"\u0014t'\u0006:@FM:\"\u0013t'\u001c\f\u0014t'\u0001\"\u0017t'\u0014t'\u0010 GOSUB LOCK_ITEM\u0017t'\u0014t'\u000e IF ABORT THEN\u0017t'\u0014t'\u000e RETURN FALSE$\u0017t'\u0014t'\u0004 END\u0017t'\u0003\u0000\u0000\nÞ\u0018\r'\u0010\nÞ\u0018\fÅ\u0017\u0003\u0000\u0000\u0004\u0006\u0000\f¹\u0017\u0003\u0000\u0000\u0003\u0000\u0000\n\u0001\u0019\u0014t'\u0003END\u0017t'\u0013´Ã´Ã@\u000e?>?\u000e>\u0017t'\u0014t'+* Check for old record cached by read logic\u0017t'\u0017t'\u0014t'3OPTIMIZED = FALSE$ ;* remember if old record cached\u0017t'\u0014t'\u0010IF OLD.FLAG THEN\u0017t'\u0017t'\u0014t'6 * If something cached, then ID and FILEVAR must match\u0017t'\u0017t'\u0014t'\u0016 IF OLD.ID EQ @ID THEN\u0017t'\u0014t'\u001a IF OLD.FV EQ FILEVAR THEN\u0017t'\u0017t'\u0014t'D * If something cached, then the record had better have been locked.\u0017t'\u0014t'5 * If not we will force another read later. This will\u0017t'\u0014t'D * keep the indexes in line with the data file but some user may not\u0017t'\u0014t'F * find the data he expects if he is sharing the file without locking.\u0017t'\u0017t'\u0014t'\u0015* IF ITEM.LOCKED ELSE\u0017t'\u0014t'- OPTIMIZED = TRUE$ ;* did not have to lock it\u0017t'\u0014t'\u0016 IF OLD.FLAG EQ 2 THEN\u0017t'\u0014t') NO.OREC = TRUE$ ;* Record does not exist\u0017t'\u0014t'\n OREC = ''\u0017t'\u0014t'\t END ELSE\u0017t'\u0014t'\u0019 TRANSFER OLD.REC TO OREC\u0017t'\u0014t'\u0011 NO.OREC = FALSE$\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0005* END\u0017t'\u0014t'0 OLD.FLAG = FALSE$ ;* Empty the cache on a match\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0003END\u0017t'@\u000e?>?\u000e>\u0017t'\u0014t'-* If old record wasn't cached then get it now\u0017t'\u0017t'\u0014t'\u0011IF OPTIMIZED ELSE\u0017t'\u0014t'< CALL @NEXTFS(READ.RECORD, FS, FVAR:'', @ID, '', OREC, FLAG)\u0017t'\u0014t'\r IF FLAG THEN\u0017t'\u0014t'\u0011 NO.OREC = FALSE$\u0017t'\u0014t'\t END ELSE\u0017t'\u0014t'\u001d IF @FILE.ERROR<1> # 100 THEN\u0017t'\u0014t')* IF @STATION NE '' AND ITEM.LOCKED THEN \u0017t'\u0014t'\u0018* ERR.SAVE = @FILE.ERROR\u0017t'\u0014t'$* UNLOCK LOCK.FILEVAR, @ID ELSE NULL\u0017t'\u0014t'\u0018* @FILE.ERROR = ERR.SAVE\u0017t'\u0014t'\u000f* FLAG = FALSE$\u0017t'\u0014t'\u0005* END\u0017t'\u0014t'6 RETURN FLAG ;* Error other than record does not exist\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\n OREC = ''\u0017t'\u0014t'\u0010 NO.OREC = TRUE$\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0003END\u0017t'@\u000e?>?\u000e>\rF\f\né\u001e\u0013´Ã´Ã@\u000e?>?\u000e>\u0017t'\u0014t'+* Protection of index on deletes and writes\u0017t'\u0017t'\u0014t'-IF @MV EQ SI.DELETE$ OR @MV EQ SI.WRITE$ THEN\u0017t'\u0014t'\u0013 IF NO.PROTECT ELSE\u0017t'@\u000e?>?\u000e>\rª\f\nL \u001a\u00015\nL \u001a\u0001",
"<2,4,3>": "\nL G\u0001",
"<2,4,4>": "\nL \u001a\u0001",
"<2,4,5>": "\nL \u0017t'\u0014t'\u0011 * Protect field \u0013t' \u0000\u0017t'\u0017t'\u0014t'\t @RECORD<\u0013t' \u0000\u0014t'\t> = OREC<\u0013t' \u0000\u0014t'\u0001>\u0017t'\u0014t'\u0019 IF @MV = SI.DELETE$ THEN\u0017t'\u0014t'\f IF @RECORD<\u0013t' \u0000\u0014t'\u001b> # '' THEN @MV = SI.WRITE$\u0017t'\u0014t'\u0004 END\u0017t'@\u000e?>?\u000e>\u0014t'\u0004 END\u0017t'\u0014t'\u0003END\u0017t'@\u000e?>?\u000e>\t\n\u0000\n¯!\b\"\u0000 \u0000\t\u0006\u0000\nÊ \rz\"\nÊ \b\u001e\u0000¶Ã\rª\f\n³ \u0006 \u0000\b\u0002\u0000 \u0000\u001f\u0002\u0000\u0013ˆ\u000bˆ\u000b\u0013ˆ\u000b\n\r¿\"\n³ \r'\u0010\n³ \f‰ \u0003\u0000\u0000\u0014t'\bEND ELSE\u0017t'\b¶Ã\u001e\u0000\u0003\u0000\u0000\n¯!\b \u0000\"\u0000\rª\f\n”!\t\u0006\u0000\nö \u0006 \u0000\b\u0002\u0000 \u0000\u001f\u0002\u0000\u0013ˆ\u000bˆ\u000b\u0013ˆ\u000b\n\u0003\u0000\u0000\n”!\r³!\n”!\t\u0006\u0000\n!\t\u0010\u0000\u000bA!\u0014t'\u001c CONVERT MARKS TO VMARKS IN \u0014t'\u0004OLD.\u0013t'ˆ\u000b\u0017t'\u0003\u0000\u0000\n!\t¬\n\u000bˆ!\u0014t'' CONVERT @LOWER.CASE TO @UPPER.CASE IN \u0014t'\u0004OLD.\u0013t'ˆ\u000b\u0017t'\u0003\u0000\u0000\n!\u0003\u0000\u0000\n”!\fÕ \u0003\u0000\u0000\t\u0006\u0000\n§!\u0014t'\u0003END\u0017t'\u0003\u0000\u0000\n¯!@\u000e?>?\u000e>8B´Ãd\"\u001a\u00010\nÎ!\u001a\u0001",
"<2,4,6>": "\nÎ!\rÈ#\nÎ!@\u000e?>\fx\"\u001a\u00011\nç!\u001a\u0001",
"<2,4,7>": "\nç!\rD$\nç!@\u000e?>\fx\"\b\u0018\u0000¶Ã\u001a\u00012\n\u0005\"\u001a\u0001",
"<2,4,8>": "\n\u0005\"\rE&\n\u0005\"@\u000e?>\fx\"\u001a\u00013\n!\"\u001a\u0001",
"<2,4,9>": "\n!\"\r"
}
}
},
"record4": {
"<1>": {
"<1,1>": {
"<1,1,1>": "%\n!\"\u0003\u0010\u0000@\u000e?>\fx\"\u001a\u00015\nC\"\u001a\u0001",
"<1,1,2>": "\nC\"G\u0001",
"<1,1,3>": "\u0003\u0000\u0000\nC\"\u001a\u0001",
"<1,1,4>": "\nC\"@\u000e?>\fx\"\u001a\u00016\n_\"\u001a\u0001",
"<1,1,5>": "\n_\"\rÒ$\n_\"\u0003\u0012\u0000@\u000e?>\fx\"\u0006\u0000012356º!Ó!ì!\n\"&\"H\"?\u000e>\t\u000e\u0000\n°\"\t\u0006\u0000\n§\"\u0014t'\u0019IF @MV EQ SI.DELETE$ THEN\u0017t'\u000b­\"\r[#\n°\"\u000b¶\"\r[#\n»\"@\u000e?>?\u000e>8B´ÃE#\r{#\nÎ\"@\u000e?>\fY#\r{#\nÛ\"@\u000e?>\fY#\r{#\nè\"@\u000e?>\fY#\u0014t'\u0001 \t\u000e\u0000\n\u0005#\u0014t'\u0004NEW.\u0013t'ˆ\u000b\u000b\u0018#\u0014t'\u0004OLD.\u0013t'ˆ\u000b\u0003\u0000\u0000\n)#\u0014t'\u0005 = ''\u0017t'@\u000e?>\fY#\u0003\u0000\u0000@\u000e?>\fY#\r{#\n@#@\u000e?>\fY#\u0006\u0000012356Æ\"Ó\"à\"í\".#8#?\u000e>\u0014t'\u000fIF NO.OREC THEN\u0017t'\u0003\u0000\u0000@\u000e?>?\u000e>\u0014t'\u0001 \t\u000e\u0000\n”#\u0014t'\u0004NEW.\u0013t'ˆ\u000b\u000b§#\u0014t'\u0004OLD.\u0013t'ˆ\u000b\u0003\u0000\u0000\nÄ#\u0014t'\u0011 = DELETED.VALUE$\u0017t'@\u000e?>?\u000e>G\u0001",
"<1,1,6>": "\n@$\u001a\u0001",
"<1,1,7>": "\n@$\u0014t'\u0001 \t\u000e\u0000\ní#\u0014t'\u0004NEW.\u0013t'ˆ\u000b\u000b\u0000$\u0014t'\u0004OLD.\u0013t'ˆ\u000b\u0003\u0000\u0000\n@$\u0014t'\u0003 = \t\u000e\u0000\n\u001b$\u0014t'\u0007@RECORD\u000b)$\u0014t'\u0004OREC\u0003\u0000\u0000\n@$\u0014t'\u0001<\u0013t' \u0000\u0014t'\u0001>\u0017t'@\u000e?>?\u000e>\u0014t'\u0001 \t\u000e\u0000\n]$\u0014t'\u0004NEW.\u0013t'ˆ\u000b\u000bp$\u0014t'\u0004OLD.\u0013t'ˆ\u000b\u0003\u0000\u0000\nÎ$\u0014t'\u0003 = #\n³$6\f\u0000\t\f\u0000\n£$\u0014t'\u000eFIELD(@ID,'*',\u0013t'p\b\u0014t'\u0001)\u000b°$\u0014t'\u0003@ID\u0003\u0000\u0000\n³$\u000bÀ$\u0014t'\u0003@ID\u0003\u0000\u0000\nÎ$\u0017t'\u001a\u0001",
"<1,1,8>": "\nÎ$@\u000e?>?\u000e>G\u0001",
"<1,1,9>": "\nó$\u001a\u0001",
"<1,1,10>": "\nó$\r÷$\nó$G\u0001",
"<1,1,11>": "\nó$\u001a\u0001",
"<1,1,12>": {
"<1,1,12,1>": "\nó$@\u000e?>?\u000e>\u0014t'\u001b IF DICT.FILEVAR NE '' THEN\u0017t'\u0014t'\u0001 \t\u000e\u0000\n2%\u0014t'\u0004NEW.\u0013t'ˆ\u000b\u000bE%\u0014t'\u0004OLD.\u0013t'ˆ\u000b\u0003\u0000\u0000\n",
"<1,1,12,2>": "%\u0014t'\u000f = CALCULATEX('\u0013t' \u0000\u0014t'\u0013',DICT.FILEVAR,@ID,\t\u000e\u0000\nˆ%\u0014t'\u0007@RECORD\u000b%\u0014t'\u0004OREC\u0003\u0000\u0000\n",
"<1,1,12,3>": "%\u0014t'\u0004,'')\u0017t'\u0014t'\t END ELSE\u0017t'\u0014t'\u0001 \t\u000e\u0000\nÌ%\u0014t'\u0004NEW.\u0013t'ˆ\u000b\u000bß%\u0014t'\u0004OLD.\u0013t'ˆ\u000b\u0003\u0000\u0000\n",
"<1,1,12,4>": "%\u0014t'\u0005 = ''\u0017t'\u0014t'\u0004 END\u0017t'@\u000e?>?\u000e>G\u0001"
},
"<1,1,13>": "\nA&\u001a\u0001",
"<1,1,14>": "\nA&\r÷$\nA&G\u0001",
"<1,1,15>": "\u0003\u0000\u0000\nA&\u001a\u0001",
"<1,1,16>": "\nA&G\u0001",
"<1,1,17>": "\u0003\u0000\u0000\nA&\u001a\u0001",
"<1,1,18>": "\nA&G\u0001",
"<1,1,19>": "\u0003\u0000\u0000\nA&\u001a\u0001",
"<1,1,20>": "\nA&@\u000e?>?\u000e>\t\u0006\u0000\nÝ&G\u0001",
"<1,1,21>": "\nÝ&\u001a\u0001",
"<1,1,22>": "\nÝ&\t\u000e\u0000\nŒ&\u0014t'\u0005 NEW.\u0013t'ˆ\u000b\u0014t'\u000e = CALCULATE('\u0013t'H\r\u0014t'\u0002')\u0017t'\u000bÚ&\u0014t'\u0005 OLD.\u0013t'ˆ\u000b\u0014t'\u000f = CALCULATEX('\u0013t'H\r\u0014t'\u001b',DICT.FILEVAR,@ID,OREC,'')\u0017t'\u0003\u0000\u0000\nÝ&\u000b„0\u000f¼\u000b)\nø&\u0010¼\u000b\nø&\b¶Ã\u0018\u0000\r'\u0010\nø&\u000b*0\u000fÌ\u000b*\n'0\b\u0018\u0000¶Ã\u0013º\nº\nG\u0001",
"<1,1,23>": "\n'0\u001a\u0001",
"<1,1,24>": "\n'0\u0013º\n \u0000\u0014º\n\u0001*G\u0001",
"<1,1,25>": "\u0003\u0000\u0000\n'0\u001a\u0001",
"<1,1,26>": "\n'0\u0013º\n \u0000\u000fÔ\u000b*\n'0\rª\f\n½'\u000f¼\u000b)\nV'\u0010¼\u000b\nV'\r'\u0010\nV'\u000b·'\u001a\u00012\n´'\u001a\u0001",
"<1,1,27>": "\n´'\u0013º\nº\nG\u0001",
"<1,1,28>": "\n´'\u001a\u0001",
"<1,1,29>": "\n´'\u0013º\n \u0000\u0014º\n\u0001*G\u0001",
"<1,1,30>": "\u0003\u0000\u0000\n´'\u001a\u0001",
"<1,1,31>": "\n´'\u0013º\n \u0000\u000fÔ\u000b)\n®'\u0010Ô\u000b\n¨'\u000fÌ\u000b*\n¨'\u0003\u0000\u0000\n®'\u0003\u0000\u0000\n´'\u0003\u0000\u0000\n½'\f='\u0003\u0000\u0000\b¶Ã\u0018\u0000\u0006 \u0000\b\u0002\u0000 \u0000\u001f\u0002\u0000\u0013˜\u000b˜\u000b\u0013˜\u000b\n\u0007 \u0000\t\u000e\u0000\n\u0001(G\u0001",
"<1,1,32>": "\u0003\u0000\u0000\n\u0001(\u001a\u0001",
"<1,1,33>": "\n\u0001(G\u0001",
"<1,1,34>": "\u0003\u0000\u0000\n\u0001(\u001a\u0001",
"<1,1,35>": {
"<1,1,35,1>": {
"<1,1,35,1,1>": "\n\u0001(\u000b\u0007(\r0\n'0\u0017t'\u0014t'0 * LOOP THROUGH ALL IDS, WE HAVE TO COMPUTE THE \t\u000e\u0000\nN(\u0014t'\u0003NEW\u000b[(\u0014t'\u0003OLD\u0003\u0000\u0000\n'0\u0014t'\u0016 VALUE FOR ALL OF THEM\u0017t'\u0017t'\u0014t'\u0016 ID.LEN = LEN(ID.LIST.\u0013t'˜\u000b\u0014t'\u0001)\u0017t'\u0014t'\u000b ID.COL = 1\u0017t'0\u0014\u0000\u0000\u0000\b\"\u0000 \u0000\u000fÌ\u000bA\u0014\u0000\t\u0014\u0000\n8)\u0010Ì\u000b\n/)\u0006 \u0000\b\u0002\u0000 \u0000\u001f\u0002\u0000\u0013ˆ\u000bˆ\u000b\u0013ˆ\u000b\n\t\u000e\u0000\n\u0007)\u0014t'\u0005 COL.\u0013t'ˆ\u000b\u0014t'\u0004 = 1\u0017t'\u000b,)\u0014t'\n OLD.LIST.\u0013t'ˆ\u000b\u0014t'\u0005 = ''\u0017t'\u0003\u0000\u0000\n/)\u0003\u0000\u0000\n8)\fÁ(\u0003\u0000\u0000\t\u000e\u0000\nU)\u0014t'\r NEXT.ID = ''\u0017t'\u0003\u0000\u0000\n'0\u0014t'\u001c LOOP WHILE ID.COL LE ID.LEN\u0017t'\u0014t'\u0013 NEXT.ID = ID.LIST.\u0013t'˜\u000b\u0014t'\f[ID.COL,@VM]\u0017t'\u0014t'\u0012 ID.COL = COL2()+1\u0017t'\u0017t'\u0014t'L * A special ID, '%%ALL.IDS%%' implies that all IDS are affected or at least\u0017t'\u0014t'@ * enough to warrant simply building the index over from scratch\u0017t'\u0017t'\u0014t'\u001f UNTIL NEXT.ID EQ '%%ALL.IDS%%'\u0017t'\u0017t'\u0014t': * Read the data record, check the other file cached first\u0017t'\u0017t'\u0014t'\u0017 IF NEXT.ID NE KEY THEN\u0017t'\u0014t'\u000e KEY = NEXT.ID\u0017t'\u0014t'\u0010 READ OREC FROM \u0013t'€\f\u0014t'\r,NEXT.ID THEN\u0017t'\u0014t'\u0011 NO.OREC = FALSE$\u0017t'\u0014t'\t END ELSE\u0017t'\u0014t'\b OREC=''\u0017t'\u0014t'\u0010 NO.OREC = TRUE$\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0004 END\u0017t'\u0017t'\u0014t'\u0010 IF NO.OREC THEN\u0017t'0\u0014\u0000\u0000\u0000\b \u0000\"\u0000\u000fÌ\u000bA\u0014\u0000\t\u0014\u0000\n>,\u0010Ì\u000b\n5,\u0006 \u0000\b\u0002\u0000 \u0000\u001f\u0002\u0000\u0013ˆ\u000bˆ\u000b\u0013ˆ\u000b\n\u0014t'\u0001 \t\u000e\u0000\n",
"<1,1,35,1,2>": "+\u0014t'\u0004NEW.\u0013t'ˆ\u000b\u000b\u001a,\u0014t'\tOLD.LIST.\u0013t'ˆ\u000b\u0014t'\u0004<-1>\u0003\u0000\u0000\n5,\u0014t'\u0011 = DELETED.VALUE$\u0017t'\u0003\u0000\u0000\n>,\f»+\u0003\u0000\u0000\u0014t'\t END ELSE\u0017t'0\u0014\u0000\u0000\u0000\b \u0000\"\u0000\u000fÌ\u000bA\u0014\u0000\t\u0014\u0000\nÓ-\u0010Ì\u000b\nÊ-\u0006 \u0000\b\u0002\u0000 \u0000\u001f\u0002\u0000\u0013ˆ\u000bˆ\u000b\u0013ˆ\u000b\n\u0014t'\u0001 \t\u000e\u0000\n•,\u0014t'\u0004NEW.\u000b£,\u0014t'\u0004OLD.\u0003\u0000\u0000\nÊ-\u0013t'ˆ\u000b\u0014t'\u000f = CALCULATEX('\u0013t'H\r\u0014t'\u0007',DICT.\u0013t'€\f\u0014t'\u0011,NEXT.ID,OREC,'')\u0017t'\u0014t'\u001c CONVERT MARKS TO VMARKS IN \t\u000e\u0000\n\u0019-\u0014t'\u0004NEW.\u000b'-\u0014t'\u0004OLD.\u0003\u0000\u0000\nÊ-\u0013t'ˆ\u000b\u0017t'\t¬\n\u000b-\u0014t'' CONVERT @LOWER.CASE TO @UPPER.CASE IN \t\u000e\u0000\nq-\u0014t'\u0004NEW.\u000b-\u0014t'\u0004OLD.\u0003\u0000\u0000\nŠ-\u0013t'ˆ\u000b\u0017t'\u0003\u0000\u0000\nÊ-\t\u000e\u0000\u000bÇ-\u0014t'\n OLD.LIST.\u0013t'ˆ\u000b\u0014t'\u0007<-1> = \u0014t'\u0004OLD.\u0013t'ˆ\u000b\u0017t'\u0003\u0000\u0000\nÊ-\u0003\u0000\u0000\nÓ-\f[,\u0003\u0000\u0000\u0014t'\u0004 END\u0017t'0\u0014\u0000\u0000\u0000\b \u0000\"\u0000\u000fÌ\u000bA\u0014\u0000\t\u0014\u0000\nG/\u0010Ì\u000b\n>/\u0006 \u0000\b\u0002\u0000 \u0000\u001f\u0002\u0000\u0013ˆ\u000bˆ\u000b\u0013ˆ\u000b\n\t\u000e\u0000\n8/\u0014t'\u0001 \u0014t'\u0004OLD.\u0013t'ˆ\u000b\u0014t'\u0003 = \u0014t'\tOLD.LIST.\u0013t'ˆ\u000b\u0014t'\u0005[COL.\u0013t'ˆ\u000b\u0014t'\u0005,@FM]\u0017t'\u0014t'\u0005 COL.\u0013t'ˆ\u000b\u0014t'\u000b = COL2()+1\u0017t'\u0014t'\u0004 IF \u0014t'\u0004NEW.\u0013t'ˆ\u000b\u0014t'\u0004 NE \u0014t'\u0004OLD.\u0013t'ˆ\u000b\u0014t'\u0005 THEN\u0017t'\u0014t'\u0001 \u0013t'€\f\u0014t'\t.UPD := '\u0013t'H\r\u0014t'\u0012':@FM:NEXT.ID:@FM:\u0014t'\u0004OLD.\u0013t'ˆ\u000b\u0014t'\u0005:@FM:\u0014t'\u0004NEW.\u0013t'ˆ\u000b\u0014t'\u0004:@FM\u0017t'\u0014t'\u0001 \u0013t'€\f\u0014t'\t.CNT += 1\u0017t'\u0014t'\u0004 END\u0017t'\u0003\u0000\u0000\n>/\u0003\u0000\u0000\nG/\fë-\u0003\u0000\u0000\u0014t'\u0007 REPEAT\u0017t'\t\u000e\u0000\n$0\u0014t'! IF NEXT.ID EQ '%%ALL.IDS%%' THEN\u0017t'0\u0014\u0000\u0000\u0000\b \u0000\"\u0000\u000fÌ\u000bA\u0014\u0000\t\u0014\u0000\n\u00160\u0010Ì\u000b\n\r0\u0006 \u0000\b\u0002\u0000 \u0000\u001f\u0002\u0000\u0013ˆ\u000bˆ\u000b\u0013ˆ\u000b\n\u0014t'\u0001 \u0013t'€\f\u0014t'\t.UPD := '\u0013t'H\r\u0014t'\u0019':@FM:NEXT.ID:@FM:@FM:@FM\u0017t'\u0014t'\u0001 \u0013t'€\f\u0014t'\t.CNT += 1\u0017t'\u0003\u0000\u0000\n\u00160\f/\u0003\u0000\u0000\u0014t'\u0004 END\u0017t'\n'0\u0003\u0000\u0000\n00\u0014\u0000\u0000\u0000\u000fÌ\u000bA\u0014\u0000\t\u0014\u0000\nT0\u0010Ì\u000b\nK0\u000f¼\u000b*\nK0\u0003\u0000\u0000\nT0\f20\u0003\u0000\u00000\u0014\u0000\u0000\u0000\u000fÔ\u000bA\u0014\u0000\t\u0014\u0000\n~0\u0010Ô\u000b\nu0\u000fÜ\u000b*\nu0\u0003\u0000\u0000\n~0\f\\0\u0003\u0000\u0000\u0003\u0000\u0000\n‰0@\u000e?>?\u000e>\u0003\u0000\u0000\u0014t'. * Get list of ID's affected in the other file\u0017t'\u0017t'\nÑ0@>\fØ0\u0004\u0000\u0000?\u000e@\u000e?>8B´Ã71\u001a\u00010\n\u00001\u001a\u0001"
}
},
"<1,1,36>": "\n\u00001G\u0001",
"<1,1,37>": "\n\u00001\u001a\u0001",
"<1,1,38>": "\n\u00001\rD1\n\u00001@\u000e?>\fB1\u001a\u00011\n\u00191\u001a\u0001",
"<1,1,39>": "\n\u00191\rÞ3\n\u00191@\u000e?>\fB1\u001a\u00012\n21\u001a\u0001",
"<1,1,40>": "\n21\rP4\n21@\u000e?>\fB1\u0003\u0000012à0\u00051\u001e1?\u000e>\u0014t'\t ID.LIST.\u0013t'˜\u000b\u0014t'\b = OREC<\u0013t' \u0000\u0014t'\u0001>\u0017t'\u0014t'\u001a IF @MV NE SI.DELETE$ THEN\u0017t'\u0014t'\u0017 NEW.ID.LIST = @RECORD<\u0013t' \u0000\u0014t'\u0001>\u0017t'\u0014t'\t END ELSE\u0017t'\u0014t'\u0011 NEW.ID.LIST = ''\u0017t'\u0014t'\u0004 END\u0017t'\rø1\nô1@\u000e?>?\u000e>\u0017t'\u0014t'8 * Watch out for ID.LIST changing from OLD to NEW record\u0017t'\u0017t'\u0014t'\f IF ID.LIST.\u0013t'˜\u000b\u0014t'\u0014 NE NEW.ID.LIST THEN\u0017t'\u0017t'\u0014t'2 * The list has been changed, now avoid duplicates\u0017t'\u0017t'\u0014t'\u001a ID.LEN = LEN(NEW.ID.LIST)\u0017t'\u0014t'\u000b ID.COL = 1\u0017t'\u0014t'\u001c LOOP WHILE ID.COL LE ID.LEN\u0017t'\u0014t'\" NEXT.ID = NEW.ID.LIST[ID.COL,@VM]\u0017t'\u0014t'\u0012 ID.COL = COL2()+1\u0017t'\u0014t'\u001b LOCATE NEXT.ID IN ID.LIST.\u0013t'˜\u000b\u0014t'\u001b USING @VM SETTING NUM ELSE\u0017t'\u0014t'\t ID.LIST.\u0013t'˜\u000b\u0014t'\u0010<1,-1> = NEXT.ID\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0007 REPEAT\u0017t'\u0014t'\u0004 END\u0017t'@\u000e?>?\u000e>\u0014t'\t ID.LIST.\u0013t'˜\u000b\u0014t'\u0003 = #\n146\f\u0000\t\f\u0000\n!4\u0014t'\u000eFIELD(@ID,'*',\u0013t'p\b\u0014t'\u0001)\u000b.4\u0014t'\u0003@ID\u0003\u0000\u0000\n14\u000b>4\u0014t'\u0003@ID\u0003\u0000\u0000\nL4\u0017t'\u001a\u0001",
"<1,1,41>": "\nL4@\u000e?>?\u000e>G\u0001",
"<1,1,42>": "\n©5\u001a\u0001",
"<1,1,43>": "\n©5\u0014t'\u001b IF DICT.FILEVAR NE '' THEN\u0017t'\u0014t'\t ID.LIST.\u0013t'˜\u000b\u0014t'\u000f = CALCULATEX('\u0013t' \u0000\u0014t'\u001b',DICT.FILEVAR,@ID,OREC,'')\u0017t'\u0014t'\u001a IF @MV NE SI.DELETE$ THEN\u0017t'\u0014t'\u001b NEW.ID.LIST = CALCULATEX('\u0013t' \u0000\u0014t'\u001e',DICT.FILEVAR,@ID,@RECORD,'')\u0017t'\u0014t'\t END ELSE\u0017t'\u0014t'\u0011 NEW.ID.LIST = ''\u0017t'\u0014t'\u0004 END\u0017t'\rø1\n©5\u0014t'\t END ELSE\u0017t'\u0014t'\t ID.LIST.\u0013t'˜\u000b\u0014t'\u0005 = ''\u0017t'\u0014t'\u0004 END\u0017t'@\u000e?>?\u000e>\u0014t'\u0003END\u0017t'0\u0014\u0000\u0000\u0000\u000f¼\u000bA\u0014\u0000\t\u0014\u0000\nß5\u0010¼\u000b\nÖ5\u000fÄ\u000b*\nÖ5\u0003\u0000\u0000\nß5\f½5\u0003\u0000\u0000@\u000e?>?\u000e>\u0017t'\u0014t'0* Time to actually do the record write or delete\u0017t'\u0017t'\u0014t'%INDEXES = TRUE$ ;* Set SC.XLATE.RESET\u0017t'\u0014t'\u0019IF @MV EQ SI.DELETE$ THEN\u0017t'\u0014t'4 CALL @NEXTFS(DELETE.RECORD,FS,FVAR,@ID,'','', FLAG)\u0017t'\u0014t'\bEND ELSE\u0017t'\u0014t'8 CALL @NEXTFS(WRITE.RECORD,FS,FVAR,@ID,'',@RECORD, FLAG)\u0017t'\u0014t'\u0003END\u0017t'\u0014t'\rIF FLAG ELSE \u0017t'\u0014t')* IF @STATION NE '' AND ITEM.LOCKED THEN \u0017t'\u0014t'\u0018* ERR.SAVE = @FILE.ERROR\u0017t'\u0014t'$* UNLOCK LOCK.FILEVAR, @ID ELSE NULL\u0017t'\u0014t'\u0018* @FILE.ERROR = ERR.SAVE\u0017t'\u0014t'\u000f* FLAG = FALSE$\u0017t'\u0014t'\u0005* END\u0017t'\u0014t'\f RETURN FLAG\u0017t'\u0014t'\u0003END\u0017t'@\u000e?>?\u000e>\u0017t'\u0014t'2* Loop through all files, compute new field values\u0017t'\u0017t'\u0013´Ã´Ã\rF\f\n†8\rp\u0011\n†8\rª\f\nW8\r'\u0010\nW8\fH8\u0003\u0000\u0000\u0013t'€\f\u0014t'\t.UPD = ''\u0017t'\u0013t'€\f\u0014t'\b.CNT = 0\u0017t'\f<8\u0003\u0000\u0000\u0013´Ã´Ã@\u000e?>?\u000e>\u0014t'\u0004IF (\u0013t'€\f\u0014t'\u0012 NE '') AND (DICT.\u0013t'€\f\u0014t'\f NE '') THEN\u0017t'\u0017t'\u0014t'$ * clear the other file record cache\u0017t'\u0017t'\u0014t'\t KEY = ''\u0017t'\u0003\u0000\u0000@\u000e?>?\u000e>\t\n\u0000\nÔ<\b\"\u0000 \u0000\t\u0006\u0000\nx9\rz\"\nx9\b\u001e\u0000¶Ã\rª\f\na9\u0006 \u0000\b\u0002\u0000 \u0000\u001f\u0002\u0000\u0013ˆ\u000bˆ\u000b\u0013ˆ\u000b\n\r¿\"\na9\r'\u0010\na9\f79\u0003\u0000\u0000\u0014t'\bEND ELSE\u0017t'\b¶Ã\u001e\u0000\u0003\u0000\u0000\nÔ<\b \u0000\"\u0000\rª\f\nD:\u0004\u0010\u0000\u0004\u0012\u0000\t\u0006\u0000\nª9\u0006 \u0000\b\u0002\u0000 \u0000\u001f\u0002\u0000\u0013ˆ\u000bˆ\u000b\u0013ˆ\u000b\n\u0003\u0000\u0000\nD:\r³!\nD:\t\u0006\u0000\n;:\t\u0010\u0000\u000bõ9\u0014t'\u001c CONVERT MARKS TO VMARKS IN \u0014t'\u0004NEW.\u0013t'ˆ\u000b\u0017t'\u0003\u0000\u0000\n;:\t¬\n\u000b8:\u0014t'+ CONVERT @LOWER.CASE TO @UPPER.CASE IN NEW.\u0013t'ˆ\u000b\u0017t'\u0003\u0000\u0000\n;:\u0003\u0000\u0000\nD:\fƒ9\u0003\u0000\u0000\t\u0006\u0000\nÌ<\u0014t'\u0003END\u0017t'\b¶Ã\u001e\u0000\b \u0000\"\u0000\rª\f\nÉ<\u0004\u0010\u0000\u0004\u0012\u0000\u001b\u00013\nv:\u0003\u0010\u0000\u0003\u0000\u0000\nÉ<\u001b\u00016\n…:\u0003\u0012\u0000\u0003\u0000\u0000\nÉ<\r'\u0010\nÉ<\u0006 \u0000\b\u0002\u0000 \u0000\u001f\u0002\u0000\u0013ˆ\u000bˆ\u000b\u0013ˆ\u000b\n\u0014t'\u0007IF NEW.\u0013t'ˆ\u000b\u0014t'\u0004 NE \u0014t'\u0004OLD.\u0013t'ˆ\u000b\u0014t'\u0005 THEN\u0017t'\t\u0012\u0000\nø;\u0014t'+ IF (DICT.FILEVAR EQ '') OR (@MV EQ 1) THEN\u0017t'\u0014t'\u0005 NEW.\u0013t'ˆ\u000b\u0014t'\u0005 = ''\u0017t'\u0014t'\t END ELSE\u0017t'\u0014t'\u0005 NEW.\u0013t'ˆ\u000b\u0014t'\u000f = CALCULATEX('\u0013t' \u0000\u0014t'\u001e',DICT.FILEVAR,@ID,@RECORD,'')\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\b IF NEW.\u0013t'ˆ\u000b\u0014t'\u000b NE '' THEN\u0017t'\u0014t'\u0001 \u0013t'€\f\u0014t'\t.UPD := '\u0013t'H\r\u0014t'\u0016':@FM:@ID:@FM:@FM:NEW.\u0013t'ˆ\u000b\u0014t'\u0004:@FM\u0017t'\u0003\u0000\u0000\nÉ<\t\u0010\u0000\n\n<\rØ<\n\n<\u0003\u0000\u0000\nÉ<\t\u0012\u0000\u000bq<\u0014t'\u0001 \u0013t'€\f\u0014t'\t.UPD := '\u0013t'H\r\u0014t'\u000e':@FM:@ID:@FM:\u0014t'\u0004OLD.\u0013t'ˆ\u000b\u0014t'\t:@FM:NEW.\u0013t'ˆ\u000b\u0014t'\u0004:@FM\u0017t'\u0003\u0000\u0000\nÉ<\u0014t'\u0001 \u0013t'€\f\u0014t'\t.CNT += 1\u0017t'\t\u0010\u0000\nŸ<\u0014t'\u0004 END\u0017t'\u0003\u0000\u0000\nÉ<\t\u0012\u0000\n¶<\u0014t'\u0004 END\u0017t'\u0003\u0000\u0000\nÉ<\u0014t'\u0003END\u0017t'\fa:\u0003\u0000\u0000\u0003\u0000\u0000\nÔ<@\u000e?>?\u000e>\u0017t'\u0014t'( * Optimize relational index transaction\u0017t'\u0017t'\u0014t'\u000e TRANSFER NEW.\u0013t'ˆ\u000b\u0014t'\b TO NEWX\u0017t'\u0014t'\u000e TRANSFER OLD.\u0013t'ˆ\u000b\u0014t'\b TO OLDX\u0017t'\u0014t'\u001a GOSUB OPTIMIZE_RELATIONAL\u0017t'\u0014t'\u0016 TRANSFER NEWX TO NEW.\u0013t'ˆ\u000b\u0017t'\u0014t'\u0016 TRANSFER OLDX TO OLD.\u0013t'ˆ\u000b\u0017t'\u0014t'\b IF NEW.\u0013t'ˆ\u000b\u0014t'\b NE OLD.\u0013t'ˆ\u000b\u0014t'\u0005 THEN\u0017t'\u0003\u0000\u0000@\u000e?>?\u000e>\u0013´Ã´Ã\rF\f\nëA\rp\u0011\nëA\rª\f\n\u0017>\r'\u0010\n\u0017>\f\b>\u0003\u0000\u0000\u0014t'\u0010UPDATE.LIST = ''\u0017t'\u0014t'\u0003IF \u0013t'€\f\u0014t'\u000f.UPD NE '' THEN\u0017t'\u0014t'\u0010 UPDATE.LIST := \u0013t'€\f\u0014t'\u0004.UPD\u0017t'\u0014t'\u0003END\u0017t'\t\u001c\u0000\nÞA\rF\f\nÛA\rp\u0011\nÛA\rª\f\n¢>\r'\u0010\n¢>\f“>\u0003\u0000\u0000\u0014t'\u0003IF \u0013t'€\f\u0014t'\u000f.UPD NE '' THEN\u0017t'\u0014t'\u0016 IF LEN(@STATION) THEN\u0017t'\u0014t'\u0010 LOCK_FV = BANG.\u0013t'€\f\u0017t'\u0014t'\u000e LOCK_ID = \"0\"\u0017t'\u0014t'\u0012 LOCK_MSG = 'B521'\u0017t'\u0014t'\t PARA = 0\u0014t'\u0007:@FM:\"!\u0013t'\u001c\f\u0014t'\u0001\"\u0017t'\u0014t'\u0010 GOSUB LOCK_ITEM\u0017t'\u0014t'\u000f IF ABORT THEN \u0017t'\u0014t'K* IF @STATION NE '' AND ITEM.LOCKED THEN UNLOCK LOCK.FILEVAR, @ID ELSE NULL\u0017t'\u0014t'\u000e RETURN FALSE$\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0018 READ F.TRANS FROM BANG.\u0013t'€\f\u0014t'\u0018, \"0\" ELSE F.TRANS = @FM\u0017t'\u0014t'\f F.TRANS := \u0013t'€\f\u0014t'\u0004.UPD\u0017t'\u0014t'( IF LEN(F.TRANS) GT MAX.UPDATE.SIZE THEN\u0017t'\u0014t'\u0016 NUM = F.TRANS[1, @FM]\u0017t'\u0014t'\u0017 F.TRANS[1,COL2()] = \"\"\u0017t'\u0014t'\t NUM += 1\u0017t'\u0014t'\u0001*\u0017t'\u0014t'# WRITE NUM + 1:@FM:F.TRANS TO BANG.\u0013t'€\f\u0014t'\u0018, NUM ELSE RETURN FALSE$\u0017t'\u0014t'\u0012 F.TRANS = NUM:@FM\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0017 WRITE F.TRANS TO BANG.\u0013t'€\f\u0014t'\u0018, \"0\" ELSE RETURN FALSE$\u0017t'\u0014t'# IF LEN(@STATION) THEN UNLOCK BANG.\u0013t'€\f\u0014t'\u000e,\"0\" ELSE NULL\u0017t'\u0014t'\u0003END\u0017t'\f‡>\u0003\u0000\u0000\u0003\u0000\u0000\nëA\u0013´Ã´Ã@\u000e?>?\u000e>\u0014t'\u0017* End of clearfile else\u0017t'\u0014t'\u0003END\u0017t'\u0014t'F* If updates to perform, check for trans rec and write out transaction\u0017t'\u0014t'O* If record is too big, write to the end of the linked list and clear record 0.\u0017t'\u0014t'>* Need to update record 0 no matter if split is needed or not.\u0017t'\u0014t'\u0013IF UPDATE.LIST THEN\u0017t'\u0014t'- IF BATCH.MODE% AND (UPDATE.ITEM% NE \"\") ELSE\u0017t'\u0014t'\u0016 IF LEN(@STATION) THEN\u0017t'\u0014t'\u0011 LOCK_FV = IDX.FV\u0017t'\u0014t'\u000e LOCK_ID = \"0\"\u0017t'\u0014t'\u0012 LOCK_MSG = 'B521'\u0017t'\u0014t'\t PARA = 0\u0014t'\n:@FM:FNAME\u0017t'\u0014t'\u0010 GOSUB LOCK_ITEM\u0017t'\u0014t'\u000e IF ABORT THEN\u0017t'\u0014t'K* IF @STATION NE '' AND ITEM.LOCKED THEN UNLOCK LOCK.FILEVAR, @ID ELSE NULL\u0017t'\u0014t'\u000e RETURN FALSE$\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0001*\u0017t'\u0014t'* READ TRANS.REC FROM IDX.FV, \"XTRANS\" THEN\u0017t'\u0014t'\f GOSUB PATCH\u0017t'\u0014t'\u001b IF FLAG ELSE RETURN FALSE$\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0001*\u0017t'\u0014t'( READ UPDATE.ITEM% FROM IDX.FV, \"0\" ELSE\u0017t'\u0014t'\u0013 UPDATE.ITEM% = @FM\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0001*\u0017t'\u0014t'\u0014 IF BATCH.MODE% THEN\u0017t'\u0014t'\u001a BATCH.MODE%<2> = TIME()+5\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u001c UPDATE.ITEM% := UPDATE.LIST\u0017t'\u0014t'A * Record over 1k bytes, will split and write to the end of list.\u0017t'\u0014t'- IF LEN(UPDATE.ITEM%) GT MAX.UPDATE.SIZE THEN\u0017t'\u0014t'\u000f RELINK = TRUE$\u0017t'\u0014t'\u001b NUM = UPDATE.ITEM%[1, @FM]\u0017t'\u0014t'\u001c UPDATE.ITEM%[1,COL2()] = \"\"\u0017t'\u0014t'\t NUM += 1\u0017t'\u0014t'\u0001*\u0017t'\u0014t'5 TRANS.REC = \"W\":@FM:NUM:@FM:NUM + 1:@FM:UPDATE.ITEM%\u0017t'\u0014t'2 CONVERT @FM:@VM:@SVM TO @VM:@SVM:@TM IN TRANS.REC\u0017t'\u0014t'' TRANS.REC := @FM:\"W\":@VM:0:@VM:NUM:@VM\u0017t'\u0014t'7 WRITE TRANS.REC TO IDX.FV, \"XTRANS\" ELSE RETURN FALSE$\u0017t'\u0014t'\u0001*\u0017t'\u0014t'A WRITE NUM + 1:@FM:UPDATE.ITEM% TO IDX.FV, NUM ELSE RETURN FALSE$\u0017t'\u0014t'\u0017 UPDATE.ITEM% = NUM:@FM\u0017t'\u0014t'\u0016 WRITE.UPDATES = TRUE$\u0017t'\u0014t'\t END ELSE\u0017t'\u0014t'\u0010 RELINK = FALSE$\u0017t'\u0014t'\u0014 IF BATCH.MODE% THEN\u0017t'\u0014t'+ WRITE.UPDATES = (TIME() GT BATCH.MODE%<2>)\u0017t'\u0014t'\t END ELSE\u0017t'\u0014t'\u0016 WRITE.UPDATES = TRUE$\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0016 IF WRITE.UPDATES THEN\u0017t'\u0014t'5 WRITE UPDATE.ITEM% TO IDX.FV, \"0\" ELSE RETURN FALSE$\u0017t'\u0014t'\u000f IF RELINK THEN\u0017t'\u0014t'+ DELETE IDX.FV, \"XTRANS\" ELSE RETURN FALSE$\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0016 IF LEN(@STATION) THEN\u0017t'\u0014t'\u001c UNLOCK IDX.FV,\"0\" ELSE NULL\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0012 UPDATE.ITEM% = \"\"\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0003END\u0017t'\u0014t'$* Skip final processing if clearfile\u0017t'\u0014t'\u001cIF @MV EQ SI.CLEARFILE$ ELSE\u0017t'@\u000e?>?\u000e>\u0017t'\u0014t'I * Unlock all the indexes that were \"logically\" locked before getting the\u0017t'\u0014t'\r * OLD VALUES\u0017t'\u0017t'\u0014t'\u0017 IF @STATION NE '' THEN\u0017t'\rF\f\nÅK\rp\u0011\nÅK\rª\f\n9K\u001b\u00032",
"<1,1,44>": "5\n*K\u0014t'\u0011 UNLOCK FILEVAR,'\u0013t'H\r\u0014t'\u0011*INDEX' ELSE NULL\u0017t'\u0003\u0000\u0000\n9K\r'\u0010\n9K\fêJ\u0003\u0000\u0000\rF\f\n»K\rp\u0011\n»K\u0014t'\u0004 IF \u0013t'€\f\u0014t'\u000b NE '' THEN\u0017t'\rª\f\nªK\r'\u0010\nªK\u0014t'\b UNLOCK \u0013t'€\f\u0014t'\u0002,'\u0013t'H\r\u0014t'\u0011*INDEX' ELSE NULL\u0017t'\fgK\u0003\u0000\u0000\u0014t'\u0004 END\u0017t'\f<K\u0003\u0000\u0000\u0013´Ã´Ã@\u000e?>?\u000e>\u0014t'\u0015* IF ITEM.LOCKED THEN\u0017t'\u0014t'#* UNLOCK LOCK.FILEVAR,@ID ELSE NULL\u0017t'\u0014t'\u0005* END\u0017t'\u0014t'\u0004 END\u0017t'@\u000e?>?\u000e>\u0003\u0006\u0000\rF\f\n=N\rp\u0011\n=N0 \u0000\u0000\u0000\rª\f\n3N\u0006 \u0000\b\u0002\u0000 \u0000\u001f\u0002\u0000\u0013ˆ\u000bˆ\u000b\u0013ˆ\u000b\n\u001b\u00013\n'N\u001a\u00013\n'N\u001a\u0001",
"<1,1,45>": "\n'N\t\u0006\u0000\nÏL\u0004\u0006\u0000\u0017t'\u0014t'M * Handle relation types specially: Try doing the relation update immediately\u0017t'\u0003\u0000\u0000\n'N\u0014t'\u0004 IF \u0014t'\u0004NEW.\u0013t'ˆ\u000b\u0014t'\u0004 NE \u0014t'\u0004OLD.\u0013t'ˆ\u000b\u0014t'\u0005 THEN\u0017t'G\u0001",
"<1,1,46>": "\n'N\u001a\u0001",
"<1,1,47>": "\n'NG\u0001",
"<1,1,48>": "\n'N\u001a\u0001",
"<1,1,49>": "\n'N\u0014t'\u0010 IF INDEX.OPEN('\u0013t' \u0000\u0014t'\u0016',D.FV) ELSE D.FV = ''\u0017t'G\u0001",
"<1,1,50>": "\n'N\u001a\u0001",
"<1,1,51>": "\n'N\u0013º\nº\n\u0013º\n \u0000G\u0001",
"<1,1,52>": "\n'N\u001a\u0001",
"<1,1,53>": "\n'N\u0014t'\u0013 IF D.FV NE '' THEN\u0017t'\u0014t'\u0019 IF RELATER( @ID:@FM:OLD.\u0013t'ˆ\u000b\u0014t'\t:@FM:NEW.\u0013t'ˆ\u000b\u0014t'\b, D.FV, \u0013t'º\n\u0014t'\u0003, '\u0013t' \u0000\u0014t'\f', IDX.FV, '\u0013t'H\r\u0014t'\u000f', 1) THEN NULL\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0004 END\u0017t'\u000b-N\r'\u0010\n3N\fBL\u0003\u0000\u0000\u0013´Ã´Ã@\u000e?>?\u000e>\u0014t'\u0003END\u0017t'\u0014t'\fRETURN TRUE$\u0017t'@\u000e?>?\u000e>\u0017t'\u0014t'\u0012*-----------------\u0017t'\u0014t'\nLOCK_ITEM:\u0017t'\u0014t'\u0010 LOCKED = FALSE$\u0017t'\u0014t'\u0015 SELF_LOCKED = FALSE$\u0017t'\u0014t'\u000f ABORT = FALSE$\u0017t'\u0014t'\f LOCKCNT = 1\u0017t'\u0014t'\u0010 LOCK_IMAGE = \"\"\u0017t'\u0014t'\u0005 LOOP\u0017t'\u0014t'\u0016 IF LOCKCNT = 200 THEN\u0017t'\u0014t'& MSG(LOCK_MSG, 'UB', LOCK_IMAGE, PARA)\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u001b LOCK LOCK_FV, LOCK_ID THEN\u0017t'\u0014t'\u000f LOCKED = TRUE$\u0017t'\u0014t'\t END ELSE\u0017t'\u0014t'\u0016 IF STATUS() EQ 1 THEN\u0017t'\u0014t'8 LOCKED = TRUE$ ;* OKAY if already locked by our station\u0017t'\u0014t'\u0014 SELF_LOCKED = TRUE$\u0017t'\u0014t'\t END ELSE\u0017t'\u0014t'7 DELAY(0.5) ;* Delay 1/2 sec to reduce network traffic \u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\r UNTIL LOCKED\u0017t'\u0014t'\u0015 BATCH.INDEXING(0,'')\u0017t'\u0014t'\r LOCKCNT += 1\u0017t'\u0014t'\u0016 IF ESC.TO.EXIT() THEN\u0017t'\u0014t'\t RESP = 1\u0017t'\u0014t'\u0019 MSG('B296','', RESP, '')\u0017t'\u0014t'\r IF RESP THEN\u0017t'\u0014t'\u000e ABORT = TRUE$\u0017t'\u0014t'( @FILE.ERROR = 421 ;* FS_SYS_USER_ABORT$\u0017t'\u0014t'\u001c STATUS() = 1 ;* FSPHYSICAL$\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\f UNTIL ABORT\u0017t'\u0014t'\u0007 REPEAT\u0017t'\u0014t'\u0018 IF LEN(LOCK_IMAGE) THEN\u0017t'\u0014t'\u001b MSG('','DB',LOCK_IMAGE,'')\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0007 RETURN\u0017t'@\u000e?>?\u000e>\u0017t'\u0014t'\u0012*-----------------\u0017t'\u0014t'\u0006PATCH:\u0017t'\u0014t'\b PIX = 1\u0017t'\u0014t'\r FLAG = TRUE$\u0017t'\u0014t'\u0005 LOOP\u0017t'\u0014t'\u001a WHILE LEN(TRANS.REC<PIX>)\u0017t'\u0014t'\u0016 PREC = TRANS.REC<PIX>\u0017t'\u0014t'- CONVERT @VM:@SVM:@TM TO @FM:@VM:@SVM IN PREC\u0017t'\u0014t'\u0015 PTYPE = PREC[1, @FM]\u0017t'\u0014t'\u0015 PREC[1, COL2()] = \"\"\u0017t'\u0014t'\u0014 PKEY = PREC[1, @FM]\u0017t'\u0014t'\u0015 PREC[1, COL2()] = \"\"\u0017t'\u0014t'\u0014 IF PTYPE = \"W\" THEN\u0017t'\u0014t'. WRITE PREC TO IDX.FV, PKEY ELSE FLAG = FALSE$\u0017t'\u0014t'\t END ELSE\u0017t'\u0014t'' DELETE IDX.FV, PKEY ELSE FLAG = FALSE$\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\t PIX += 1\u0017t'\u0014t'\u000b WHILE FLAG\u0017t'\u0014t'\u0007 REPEAT\u0017t'\u0014t'\r IF FLAG THEN\u0017t'\u0014t'\" DELETE IDX.FV, \"XTRANS\" ELSE NULL\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0007 RETURN\u0017t'\u0017t'@\u000e?>?\u000e>\u0014t'\u0011*----------------\u0017t'\u0014t'\u0014OPTIMIZE_RELATIONAL:\u0017t'\u0014t'\u0013 ID.LEN = LEN(OLDX)\u0017t'\u0014t'\u000b ID.COL = 1\u0017t'\u0014t'\u0011 OLD.ID.LIST = \"\"\u0017t'\u0014t'\u001c LOOP WHILE ID.COL LE ID.LEN\u0017t'\u0014t'\u001c NEXT.ID = OLDX[ID.COL, @VM]\u0017t'\u0014t'\u0014 ID.COL = COL2() + 1\u0017t'\u0014t'2 LOCATE NEXT.ID IN NEWX USING @VM SETTING NUM ELSE\u0017t'\u0014t'\u001c OLD.ID.LIST<1,-1> = NEXT.ID\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0007 REPEAT\u0017t'\u0014t'\u0001*\u0017t'\u0014t'\u0013 ID.LEN = LEN(NEWX)\u0017t'\u0014t'\u000b ID.COL = 1\u0017t'\u0014t'\u0011 NEW.ID.LIST = \"\"\u0017t'\u0014t'\u001c LOOP WHILE ID.COL LE ID.LEN\u0017t'\u0014t'\u001c NEXT.ID = NEWX[ID.COL, @VM]\u0017t'\u0014t'\u0014 ID.COL = COL2() + 1\u0017t'\u0014t'2 LOCATE NEXT.ID IN OLDX USING @VM SETTING NUM ELSE\u0017t'\u0014t'\u001c NEW.ID.LIST<1,-1> = NEXT.ID\u0017t'\u0014t'\u0004 END\u0017t'\u0014t'\u0007 REPEAT\u0017t'\u0014t'\u0001*\u0017t'\u0014t'\u001d TRANSFER NEW.ID.LIST TO NEWX\u0017t'\u0014t'\u001d TRANSFER OLD.ID.LIST TO OLDX\u0017t'\u0014t'\u0007 RETURN\u0017t'@\u000e?>?\u000e>!¨\u000b\u0003\u0000\u0000@\u000e?>?\u000e"
}
}
}
}
}