AXR$ $(1) LIT. *** INFOR$ - INFOR TABLE HANDLERS *** $(2) LIT . ELT$ . DESIGNED AND IMPLEMENTED . . BY DEREK A. ZAVE . . THIS ROUTINE IS DESIGNED TO PERFORM STANDARD OPERATIONS . ON THE INFOR TABLE WHICH IS PRESENTED TO PROCESSORS BY . READ$. THE CODE IS I-BANK RE-ENTRANT AND QUARTER/THIRD-WORD . INSENSITIVE. . . AVAILABLE ROUTINES: . . RINF$ - READ THE INFOR TABLE . . SINF$ - SEARCH FOR A SPECIFICATION . . SELT$ - SEARCH FOR ELEMENT OR FILE NOTATION . . DUSE$ - PERFORM A DYNAMIC @USE . / . . RINF$ - READ THE INFOR TABLE . . CALL: LMJ X11,RINF$ . . . . WITH A0 = LENGTH,LOCATION OF THE INFOR BUFFER . . UPON NORMAL RETURN THE INFOR TABLE HAS BEEN READ INTO THE . USER BUFFER IMMEDIATLY FOLLOWED BY A WORD OF ZERO. . THE PARAMETER SUPPLIED IS SAVED IN THE CELL INFOR$. TO . AVOID ACCIDENTAL OVERSTORES, THE BUFFER LENGTH SHOULD . BE OF THE FORM 27*N+1. . . UPON AN ERROR RETURN, A0 CONTAINS THE PRINT CONTROL WORD . FOR AN APPROPRIATE ERROR MESSAGE AND A1 CONTAINS THE ERROR . NUMBER. POSSIBLE VALUES ARE . . 1 - NO INFOR TABLE . . 2 - ABNORMAL RETURN FROM READ$ . . 3 - INFOR TABLE TOO LARGE . RINF$* SA A0,INFOR$ SAVE THE PARAMETER LA,U A1,,A0 A1 = BUFFER LOCATION AU,H1 A1,INFOR$ A2 = LAST BUFFER LOCATION+1 ANA,U A2,1 A2 = LAST BUFFER LOCATION LXI,U A1,RINF3 BUILD THE READ$ CONTROL WORD RINF1 LA A0,A1 A0 = A1 ER READ$ READ THE NEXT CHUNK OF INFOR AA,U A1,,A0 ADD THE AMOUNT JUST READ SZ 0,A1 CLEAR THE FOLLOWING LOCATION TOP A0,(1*/31) WAS IT INFOR ? J RINF2 NO, ERROR TOP A0,(1*/30) IS THERE MORE TO READ ? J 1,X11 NO, NORMAL RETURN LA,U A0,,A1 A0 = NEXT READ LOCATION TLE,U A0,,A2 ARE WE FULL ? J RINF1 NO, TRY AGAIN LA A0,PEM3 YES, A0 = ERROR MESSAGE CONTROL WORD LA,U A1,3 A1 = ERROR NUMBER J 0,X11 ERROR RETURN RINF2 LA A0,PEM1 A0 = ERROR MESSAGE PRINT CONTROL WORD LA,U A1,1 A1 = ERROR NUMBER J 0,X11 ERROR RETURN RINF3 LA A0,PEM2 A0 = ERROR MESSAGE PRINT CONTROL WORD LA,U A1,2 A1 = ERROR NUMBER J 0,X11 ERROR RETURN . / . . SINF$ - SEARCH THE INFOR TABLE . . CALL: LMJ X11,SINF$ . . . . WITH A0 = SPECIFICATION DESCRIPTION . . THE SPECIFICATION DESCRIPTION IS THE HIGH-ORDER HALF . OF THE CONTROL WORD FOR THE SPECIFICATION. UPON RETURN . . A0,A1 = SPECIFICATION (LJSF) . A2 = LOCATION OF THE CONTROL WORD . A3 = NUMBER OF CHARACTERS . SINF$* LA,H2 A2,INFOR$ A2 = LOCATION OF THE INFOR TABLE AA,U A2,1 POSITION TO THE NEXT SPEC TZ 0,A2 END OF THE INFOR TABLE ? TG,H1 A0,,A2 OR DID WE PASS THE SPECIFICATION ? J 0,X11 YES, NO FIND - RETURN TNE,H1 A0,,A2 IS IT THE SPECIFICATION ? J SINF1 YES, FINISH UP AA,S6 A2,,A2 MOVE UP ONE J SINF$+1 TRY AGAIN SINF1 LA,S6 A3,,A2 A3 = NUMBER OF WORDS SINF$* ANU,U A0,1 A1 = A0-1 LA A2,INFOR$ A2 = LOCATION OF THE INFOR TABLE SINF1 AA,U A2,1 POSITION TO THE NEXT SPEC TZ 0,A2 END OF THE TABLE ? TLE,H1 A1,,A2 OR DID WE PASS THE SPEC ? J SINF2 YES, BYPASS AA,S6 A2,,A2 ADD THE LENGTH OF THE SPEC J SINF1 TRY AGAIN SINF2 TE,H1 A0,,A2 IS THIS THE SPEC ? J 0,X11 NO, RETURN WITH NO FIND LA,S6 A3,,A2 A3 = NUMBER OF WORDS ANA,U A3,1 SUBTRACT ONE MSI,U A3,6 GET THE NUMBER OF CHARACTERS AA,S5 A3,,A2 ADD THE REMAINDER DL A0,1,A2 A0,A1 = THE SPECIFICATION TLE,U A3,7 LESS THAN TWO WORDS ? LA A1,(' ') YES, BLANK FILL J 1,X11 RETURN WITH THE FIND . / . . SELT$ - BUILD THE ELT$ TABLE . . CALL: LMJ X11,SELT$ . . . . WITH A0 = FIELD NUMBER . . THIS ROUTINE IS DESIGNED TO PICK UP A COMPLETE FIELF OF . EITHER FILE NOTATION OR ELEMENT NOTATION. IN ELEMENT . NOTATION, FILE CONTINUATION BY MEANS OF A LEADING '.' ON . THE ELEMENT NAME IS PROCESSED; THE ELEMENT CYCLE IS ALSO . EDITED TO BINARY. THE INFORMATION IS PLACED IN THE TABLE . ELT$ WHICH HAS THE FOLLOWING FORMAT: . . FQL +0,,S1 LENGTH OF QUALIFIER OR 0 . . FNL +0,,S2 LENGTH OF FILE NAME OR 0 . . FCL +0,,S3 LENGTH OF F-CYCLE OR 0 . . RKL +0,,S4 LENGTH OF READ KEY OR 0 . . WKL +0,,S5 LENGTH OF WRITE KEY OR 0 . . IQF +0,,S6 IMPLIED QUALIFIER FLAG . . ENL +1,,S1 LENGTH OF ELEMENT NAME OR 0 . . EVL +1,,S2 LENGTH OF ELEMENT VERSION OR 0 . . ECL +1,,S3 LENGTH OF ELEMENT CYCLE OR 0 . . CFN +1,,S4 CONTINUATION FIELD NUMBER OR 0 . . ECC +1,,S5 ELEMENT CYCLE SIGNAL CHARACTER . . BEC +1,,S6 BINARY ELEMENT CYCLE . . FQUAL +2 FILE QUALIFIER (TWO WORDS) . . FNAME +4 FILE NAME (TWO WORDS) . . FCYC +6 F-CYCLE . . RKEY +7 READ KEY . . WKEY +8 WRITE KEY . . ENAME +9 ELEMENT NAME (TWO WORDS) . . EVER +11 ELEMENT VERSION (TWO WORDS) . . ECYC +13 ELEMENT CYCLE . . NOTE 1: THE IMPLIED QUALIFIER FLAG WILL BE NON-ZERO . IF NO QUALIFIER WAS GIVEN BUT A '*' PRECEEDED . THE FILE NAME. . . NOTE 2: IF THE FILE NAME INFORMATION WAS TAKEN FROM . ANOTHER FIELD BY MEANS OF FILE NAME CONTINUATION . THEN CFN WILL CONTAIN THE NUMBER OF THAT FIELD; . OTHERWISE CFN WILL BE ZERO. . . NOTE 3: IF THE CYCLE FIELD IS NOT CODED THEN UPON RETURN . ECC = '-' AND BEC = 0. . . IF THE CYCLE FIELD IS CODED THEN THE NUMERIC . PORTION OF THE CYCLE WILL BE CONVERTED TO BINARY . AND THE RESULT WILL BE PLACED IN BEC. IF THE . CYCLE IS NOT NUMERIC, NUMERIC WITH A LEADING SIGN, . OR GREATER THAN 63, THE FIELD ECC WILL CONTAIN . 'E' AND THE CYCLE IS TO BE CONSIDERED IN ERROR; . OTHERWISE ECC WILL CONTAIN 0, '+', OR '-' IF THE . FIRST CHARACTER OF THE CYCLE IS NUMERIC, '+', OR . '-', RESPECTIVELY. . . NOTE 4: ELT$ IS NOT CLEARED. THE CHARACTER COUNTS MUST . THEREFORE BE EXAMINED TO DETERMINE WHICH FIELDS . CONTAIN MEANINGFUL INFORMATION. . . NOTE 5: UPON A NO FIND RETURN A0 CONTAINS THE LOCATION . OF THE WORD OF THE INFOR TABLE WHICH STOPPED . THE SEARCH. IF THIS WORD IS ZERO, THEN THE . REST OF THE INFOR TABLE IS EMPTY. . SELT$* LR,U R1,,A0 R1 = FIELD NUMBER LA,H2 A0,INFOR$ A0 = LOCATION OF THE INFOR TABLE AA,U A0,1 A0 = START OF THE INFOR SPECS LA,U A5,1 A5 = NUMBER OF FIRST FIELD SZ ELT$+1 CLEAR SOME FLAGS SELT1 LR,U R2,0 CLEAR THE FILE CONTINUATION FLAG TNZ 0,A0 END OF THE INFOR TABLE ? J SELT7 YES TNZ,S1 0,A0 DID WE REACH THE SPECS YET ? J SELT3 NO TE,S2 A5,,A0 DID WE PASS THE FIELD ? J SELT7 YES LA,S3 A1,,A0 A1 = SPECIFICATION TYPE TG,U A1,6 ELEMENT INFORMATION ? J SELT4 YES, BYPASS TE A5,CFN DO WE HAVE MORE FROM THIS FIELD ? SZ ELT$ NO, CLEAR THE FILE FLAGS SA A5,CFN STORE THE FIELD NUMBER SELT2 DL A2,1,A0 A2(AND MAYBE A3) = THE SPECIFICATION LA,S6 A4,,A0 A4 = SPECIFICATION LENGTH TNE,U A4,1 ONLY ONE WORD ? LA A3,(' ') YES, BLANK FILL EX SELTA-1,A1 STORE THE FIELD ANA,U A4,1 COMPUTE THE NUMBER OF CHARACTERS MSI,U A4,6 AA,S5 A4,,A0 EX SELTB-1,A1 STORE THE RESULT SELT3 AA,S6 A0,,A0 MOVE UP ONE AA,U A0,1 J SELT1+1 TRY AGAIN SELT4 TNE,U A5,1 IS THIS THE FIRST FIELD ? J SELT5 YES, NO FILE CONTINUATION LA,S4 A2,,A0 A2 = SPECIAL INFOR FIELD TNE,U A2,'.' FILE CONTINUATION ? LR,U R2,1 YES, SET THE FLAG SELT5 TE A5,R1 IS THIS THE FIELD WE'RE AFTER ? J SELT3 NO, IGNORE THE FIELD J SELT2 YES, PICK UP THE SPECIFICATION SELT6 TE A2,(' ') IMPLIED QUALIFIER ? SA A4,FQL NO, STORE THE CHARACTER COUNT TNE A2,(' ') IMPLIED QUALIFIER ? SA A5,IQF YES, SET THE FLAG J SELT3 GET BACK SELT7 TNZ R2 CONTINUATION ? TNE A5,CFN OR DID THE FILE COME FROM THIS FIELD ? J SELT8 YES, BYPASS SA A5,CFN STORE THE FIELD NUMBER SZ ELT$ CLEAR THE FILE FLAGS SELT8 TNE A5,R1 IS THIS THE FIELD WE WANT ? J SELT9 YES, BYPASS TNZ 0,A0 DID WE REACH THE END OF THE TABLE ? J 0,X11 YES, NO FIND - RETURN AA,U A5,1 INCREMENT THE FIELD POINTER J SELT1 LOOK SOME MORE AA,U A5,1 INCREMENT THE FIELD POINTER TZ 0,A1 END OF THE TABLE ? TZ 0,A0 END OF THE TABLE ? J SELT1 NO, TRY AGAIN SZ ELT$ YES, CLEAR THE FLAGS SZ ELT$+1 J 0,X11 RETURN WITH NO FIND SELT9 TNE A5,R1 IS THIS THE FIELD WE WANT ? SZ CFN NO, CLEAR THE CONTINUATION FIELD NUMBER DL A1,ELT$ A0,A1 = FLAGS DJZ A1,,X11 NO FIND - RETURN LA,U A0,'-' A0 = '-' SA A0,ECC STORE THE SIGNAL CHARACTER TNZ ECL WAS THE ELEMENT CYCLE CODED ? J 1,X11 NO, RETURN WITH A FIND LA A0,ECYC A0 = FIELDATA ELEMENT CYCLE LNA,U A2,0 A2 = -0 LA,U A3,0 A3 = 0 LA A4,ECL A4 = NUMBER OF CHARACTERS SELT10 JGD A4,SELT12 LOOP ON A4 TN A2 DID WE FIND SOME DIGITS ? TG,U A2,64 AND IS A2 IN RANGE ? SELT11 LA,U A3,'E' NO, INDICATE AN ERROR SA A2,BEC STORE THE BINARY CYCLE SA A3,ECC STORE THE SIGNAL CHARACTER J 1,X11 RETURN WITH A FIND SELT12 LA,U A1,0 A1 = 0 LDSC A0,6 A1 = NEXT CHARACTER TLE,U A1,'9'+1 IS A1 NUMERIC ? TLE,U A1,'0' J SELT13 NO, BYPASS TNZ A3 DO WE HAVE A SIGNAL CHARACTER ? LA,U A3,0100 NO, GET ONE ANA,U A1,'0' CONVERT A1 TO BINARY MSI,U A2,10 MULTIPLY BY 10 AA,U A2,,A1 BUILD THE RESULT J SELT10 LOOK SOME MORE SELT13 JNZ A3,SELT11 WE ALREADY HAVE A SIGNAL - ERROR TE,U A1,'+' IS A1 A SIGN ? TNE,U A1,'-' LA,U A3,,A1 YES, A3 = 1 JZ A3,SELT11 ILLEGAL CHARACTER J SELT10 LOOK SOME MORE . SELTA DS A2,FQUAL 1 - FILE QUALIFIER DS A2,FNAME 2 - FILE NAME SA A2,FCYC 3 - F-CYCLE SA A2,RKEY 4 - READ KEY SA A2,WKEY 5 - WRITE KEY DS A2,ENAME 6 - ELEMENT NAME DS A2,EVER 7 - ELEMENT VERSION SA A2,ECYC 8 - ELEMENT CYCLE . SELTB J SELT6 1 - FILE QUALIFIER SA A4,FNL 2 - FILE NAME SA A4,FCL 3 - F-CYCLE SA A4,RKL 4 - READ KEY SA A4,WKL 5 - WRITE KEY SA A4,ENL 6 - ELEMENT NAME SA A4,EVL 7 - ELEMENT VERSION SA A4,ECL 8 - ELEMENT CYCLE . / . . DUSE$ - PERFORM A DYNAMIC @USE . . CALL: LMJ X11,DUSE$ . . WITH A0,A1 = INTERNAL FILE NAME (LJSF) . . THIS ROUTINE EQUATES THE INTERNAL FILE NAME TO THE FILE NAME . DESCRIBED IN THE ELT$ TABLE. IF NO FILE NAME IS SPECIFIED, . THEN 'TPF$' IS ASSUMED. UPON RETURN THE FILE NAME MAY BE . FOUND NICELY EDITED IN THE 8-WORD AREA FILE$ AND . . A0 = STATUS BITS FROM CSF$ . DUSE$* LA,U A3,11 A3 = LOOP COUNT AND,U A1,077 A2 = LAST CHARACTER TNE,U A2,' ' IS IT A BLANK ? DSC A0,6 YES, MOVE IT TO THE TOP JGD A3,DUSE$+1 LOOP ON A3 DS A0,IFN STORE THE INTERNAL FILE NAME LA A0,(1,FILE$) A0 = WORD INDEX LA A1,(1,DUSET) A1 = CHARACTER INDEX LA,U A2,7 A2 = LOOP COUNT LA A3,(' ') A3 = BLANKS SA A3,FILE$,A2 BLANK THE IMAGE AREA JGD A2,$-1 LR R1,FQL R1 = QUALIFIER LENGTH DL A4,FQUAL A4,A5 = QUALIFIER LMJ A2,DUSEC INSERT THE QUALIFIER LA,U A5,'*' A5 = '*' TNZ FQL REAL QUALIFIER ? TZ IQF OR IMPLIED QUALIFIER ? EX 0,*A1 YES, INSERT THE CHARACTER LR R1,FNL R1 = FILE NAME LENGTH DL A4,FNAME A4,A5 = FILE NAME TZ R1 WAS A FILE NAME SPECIFIED ? J DUSE1 YES, BYPASS LA A4,('TPF$ ') NO, ASSUME TPF$ LR,U R1,4 DUSE1 LMJ A2,DUSEC INSERT THE FILE NAME LR R1,FCL R1 = F-CYCLE LENGTH TNZ R1 IS THERE AN F-CYCLE J DUSE2 NO, BYPASS LA,U A5,'(' INSERT A '(' EX 0,*A1 LA A4,FCYC A4 = F-CYCLE LMJ A2,DUSEC INSERT IT LA,U A5,')' INSERT A ')' EX 0,*A1 DUSE2 TNZ RKL READ KEY ? TZ WKL OR WRITE KEY ? J DUSE4 YES, BYPASS DUSE3 LA A0,(12,USE) A0 = @USE IMAGE DESCRIPTION ER CSF$ PERFORM THE @USE J 0,X11 RETURN DUSE4 LA,U A5,'/' INSERT A '/' EX 0,*A1 LR R1,RKL R1 = READ KEY LENGTH LA A4,RKEY A4 = READ KEY LMJ A2,DUSEC INSERT THE READ KEY LR R1,WKL R1 = WRITE KEY LENGTH TNZ R1 IS THERE A WRITE KEY ? J DUSE3 NO, GET BACK LA,U A5,'/' INSERT A '/' EX 0,*A1 LA A4,WKEY A4 = WRITE KEY LMJ A2,DUSEC INSERT IT J DUSE3 FINISH UP . DUSEC0 LDSC A4,6 POSITION THE NEXT CHARACTER EX 0,*A1 STORE IT DUSEC JGD R1,DUSEC0 LOOP ON R1 J 0,A2 RETURN . DUSET SA,S1 A5,,A0 CHARACTER STORE VECTOR SA,S2 A5,,A0 SA,S3 A5,,A0 SA,S4 A5,,A0 SA,S5 A5,,A0 LMJ A3,$+1 SA,S6 A5,,*A0 LXM,U A1,DUSET J 0,A3 . / . . ASSORTED DATA . EM1 'PROCESSOR CALL ERROR' PEM1 + 0100+$-EM1,EM1 . EM2 'ABNORMAL RETURN FROM READ$' PEM2 + 0100+$-EM2,EM2 . EM3 'TOO MANY SPECIFICATIONS' PEM3 + 0100+$-EM3,EM3 $(0) . INFOR$* + 0 RINF$ PARAMETER . USE '@USE ' @USE IMAGE IFN + 0D INTERNAL FILE NAME ', ' FILE$* RES 8 EDITED FILE NAME . ELT$* RES 14 ELEMENT NOTATION TABLE . END