FTN4 PROGRAM TGP7(5), 92080-1X366 REV.2026 800422 C C SOURCE 92080-18366 C C C C ************************************************************** C * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * C * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- * C * PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH- * C * OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * C ************************************************************** C C C C@ TGP - SEG#7 . COMPILE FORM . 10/AUG/77 . *JCM* C C PRGMR : JEAN CHARLES MIARD (HPG) C C C********************************************************************* C* * C* THIS IS A SEGMENT OF THE TGP PROGRAM WHICH * C* COMPILES THE SOURCE USER'S ANSWERS STORED IN IFORM,JFORM,MFORM * C* LFORM BUFFERS INTO A BINARY CODE DIRECTLY USABLE BY THE TMP * C* PROGRAM TO DRIVE THE TRANSACTIONS. THIS BINARY CODE IS STORED * C* IN KFORM . * C* * C* ACCORDING TO INDIC VALUE DIFFERENT TASKS ARE PERFORMED : * C* * C* INDIC = 0 : NORMAL PATH . START COMPILATION . * C* 2 : RETURN FROM TGP11 , IMAGE ADD STORAGE * C* SUCCESSFULLY PROCESSED * C* * C* * C********************************************************************* C C C DECLARATIONS COMMON VARIABLES ***************** C COMMON ILU,ISCRN,IQST,ISKIP,INDIC COMMON IFORM(780) COMMON JFORM(1700) COMMON MFORM(28) COMMON LFORM(42) COMMON ITT COMMON IKEY(26,3) COMMON IUMAX,IMMAX COMMON IMODB COMMON ILITE(15) COMMON IMAI(45,5) COMMON IMFLG,IMAS,IMDT,IMKY COMMON KFORM(2844) COMMON ILIBR(67) COMMON NIMAG COMMON IBASE(10) C C LOCAL VARIABLES ********** C DIMENSION ITGP4(3),ITGP11(3),ITGP6(3),ISUM(4,2),JSUM(4,2) DIMENSION IDUMP(17),IREAL(2),LISTOF(520),IBUF(52) C LOGICAL INUM,ISSPA,ISBIT,RNUM,CMPB C EQUIVALENCE(LISTOF(1),KFORM(2185)) EQUIVALENCE(LCTR,NIMAG) EQUIVALENCE(LW,IMODB) EQUIVALENCE(N2,KFORM(1059)) EQUIVALENCE(IREAL,XREAL) C DATA ITGP4/2HTG,2HP4,2H / DATA ITGP11/2HTG,2HPI,2H1 / DATA ITGP6/2HTG,2HP6,2H / DATA JBYTE/170/ DATA JWORD/85/ C C********************************************************************** C C ACCORDING INDIC VALUE GO TO THE REQUIRED PORTION OF TGP7 C C********************************************************************** C IF(INDIC.EQ.2) GO TO 740 C C********************************************************************** C C INDIC=0 COMPILE !!!! C C********************************************************************** C C INITIALISE KFORM C DO 100 I=1,1058 100 KFORM(I)=0 C-----ISUMN & JSUMN ARE GLOBAL VARIABLES(DON'T USE LOCALLY) ISUMN=0 JSUMN=0 C C IF TRANSACTION ACCESS AN IMAGE DATA BASE, GET DATA-BASE-CRC C AND STORE IT INTO THE FIRST WORD OF THE SOURCE SPEC. C 102 IF(.NOT.ISBIT(ITT,1)) GO TO 105 CALL DBCRC(IBASE,I,J,K,ISTAT) IF(ISTAT .NE. 0) PAUSE 0705 CALL MOVEW(IFORM(38),IFORM,3) IFORM(4)=I C C*********************************************************************** C C BUILD FORM HEADER (37 WORDS) C C*********************************************************************** C 105 CALL MOVEW(IFORM(29),KFORM(2),3) IF(INUM(IFORM,63,4,KFORM(5))) STOP 1 IF(INUM(IFORM,67,6,KFORM(6))) STOP 2 KFORM(7)=IOR(IALF2(IUMAX),IMMAX) C C-----WORD 10 C C -CRT? IF(ISBIT(ITT,13)) CALL SETBT(KFORM(10),0,1) C -WND (BAR CODE READER)? IF(ISBIT(ITT,9)) CALL SETBT(KFORM(10),1,1) C -MSR (MAG STRIPE READER)? IF(ISBIT(ITT,12)) CALL SETBT(KFORM(10),2,1) C -ATC (AUTO-COMPLETING TS)? IF(IGET1(IFORM,1545).EQ.1HX) CALL SETBT(KFORM(10),15,1) C C-----WORD 11, GET THE FOLLOWING BITS: UP,DB,ADS,AKB,BG5,BG3, C PRT,LOG,TM,CLK KFORM(11)=IAND(ITT,6377B) C C-----DETERMINE MAX LIGHT NUMBER. C DO 112 I=14,1,-1 IF(ILITE(I).NE.0) GO TO 114 112 CONTINUE 114 KFORM(12)=I C C-----WORD 14 C KFORM(14)=0 IF(.NOT.ISBIT(ITT,8)) GO TO 1141 C -LIGHT # TO STAY LIT DURING ENTIRE TS. IF(INUM(IFORM,1546,2,KFORM(14))) PAUSE 7106 C -BLANK OUT DB FIELD 1ST IN CASE NO DB IS SPECIFIED. 1141 CALL BLAN(KFORM,41,6) C -DATA BASE USED? IF(.NOT.ISBIT(ITT,1)) GO TO 116 C -YES. MOVE DATA BASE NAME TO HEADER CALL MOVEW(IFORM(38),KFORM(21),3) C -MOVE DB SECURITY CODE TO HEADER. IF(INUM(IFORM,81,5,KFORM(24))) PAUSE 7107 C -MOVE CR# TO HEADER. IF(.NOT.INUM(IFORM,1534,5,KFORM(25))) GO TO 115 KFORM(25)=IGET2(IFORM,1534) C -MOVE CRC TO HEADER. 115 KFORM(27)=IFORM(4) C -MOVE HIGHEST LEVEL ACCESS WORD TO HEADER CALL MOVEW(IFORM(770),KFORM(28),3) C*********************************************************************** C C BUILD DUMMY STATE SQ=0 SFK DEFINITION C C*********************************************************************** C C N2 = KFORM ADDRESS OF 1ST WORD OF THIS STATE C N3 = CURRENT KFORM ADDRESS (INCREMENTED AS STATE IS BUILT) C C -SET ADDRESS POINTERS. 116 N2=38 N3=N2+3 C -MOVE ERROR LABEL TO KFORM. CALL MOVCA(IFORM,1520,KFORM,N3*2-1,12) N3=N3+6 C -GET PREFIX KEY # JPREFX=0 DO 118 I=1,26 IF(IKEY(I,1).EQ.10) GO TO 120 118 CONTINUE GO TO 130 120 JPREFX=I*2048 130 KFORM(N3)=JPREFX C -GET MAX KEY# DO 134 MAXKEY=26,1,-1 IF(IKEY(MAXKEY,1).NE.0) GO TO 136 2 IF(IKEY(MAXKEY,3).NE.0) GO TO 136 134 CONTINUE 136 KFORM(N3)=IOR(KFORM(N3),MAXKEY) MAX12=MAXKEY*256 KFORM(12)=IOR(KFORM(12),MAX12) C C C SET SFK TERMINATOR BITS FOR KEYS 1-16 C N3=N3+1 DO 160 I=1,16 IF(IKEY(I,2).EQ.1) CALL SETBT(KFORM(N3),(I-1),1) 160 CONTINUE C -SET SFK TERMINATOR BITS FOR KEYS 17-26 N3=N3+1 DO 165 I=17,26 IF(IKEY(I,2).EQ.1) CALL SETBT(KFORM(N3),(I-17),1) 165 CONTINUE N3=N3+1 C C IPNTR IS CURRENT POINTER TO STRING VALUE * IPNTR=1 IS WORD 39 OF KFORM C I = CURRENT SFK NUMBER (2 21) C J = 1 IS NORMAL SFK * J=3 IS PREFIXED SFK (SEE IKEY DEFINITION :ANSWR) C IX = CURRENT POINTER (BYTE) C K = REAL SFK NUMBER (2/11) C L = CURRENT POINTER IN IFORM (1 THRU MAX OF 36) C C POINTER DEFINITION : (BYTE) C -SFK=0 : SFK NOT DEFINED C -SFK=IPNTR : SFK IS A STRING C -SFK FOR A FUNCTION : C -BIT 7=1 C -BIT 6=1 IF A VALIDITY CHECK IS TO BE PERFORMED C ON THE FUNCTION C -BITS 0/5 :FUNCTION # C C-----CALCULATE WHERE THE "VALUE STRING OR FUNCTION LABEL" STORAGE WILL C BEGIN & STORE IT INTO IPNTR. IPNTR=12+(MAXKEY+1)/2 C -ADD 5 MORE WORDS (FOR 10 KEYS) IF PREFIX KEY IS DEFINED. IF(JPREFX.NE.0) IPNTR=IPNTR+5 C -INCREMENT LOOP COUNT BY 10 IF PREFIX KEY IS DEFINED. LOOPCT=MAXKEY IF(JPREFX.NE.0) LOOPCT=MAXKEY+10 C-----LOOP 230 GOES THRU THE TABLE OF KEYS(IKEY) & DOES THE FOLLOWING: C 1. SETS UP THE TABLE OF POINTERS WHICH COMES AFTER THE TERMINATOR C BIT WORDS. CURRENTLY THIS TABLE STARTS AT KFORM(50). C 2. STORES THE APPROPRIATE STRING (VALUE STRING OR FUNCTION LABEL) C USING THE FORMAT SPECIFIED IN THE IMS WHERE THE POINTER IN (1) SAYS C IT IS. C 3. THIS IS DONE MAXKEY TIMES. REMEMBER MAXKEY MAY HAVE BEEN INCREMENTED C BY 10 IF A PREFIX KEY IS DEFINED. C ISFKNO=87 ITEXT=89 ILABEL=108 DO 230 K=1,LOOPCT I=K J=1 C -180 WHILE NON-PREFIXED KEYS. IF(K.LE.MAXKEY) GO TO 180 C -SWITCH TO PREFIXED KEYS. I=K-MAXKEY J=3 ISFKNO=945 ITEXT=947 ILABEL=966 C -GET READY TO STORE THE POINTER. 180 IX=IPNTR C -ZERO THE POINTER IF SFK IS NOT DEFINED. IF(IKEY(I,J).EQ.0) IX=0 C -STORE THE POINTER IN LEFT OR RIGHT BYTE DEPENDING ON WHETHER KEY # C IS ODD OR EVEN. IF(IAND(K,1).EQ.0) GO TO 182 C -LEFT BYTE. N3=50+(K-1)/2 KFORM(N3)=IALF2(IX) GO TO 184 C -RIGHT BYTE. 182 KFORM(N3)=IOR(KFORM(N3),IX) C -SKIP REST OF LOOP IS SFK IS NOT DEFINED. 184 IF(IX.EQ.0) GO TO 230 C -SET UP FOR SEARCH OF IFORM FOR KEY # N1=1 N6=MAXKEY C -190 WHILE DOING NON-PREFIXED KEYS. IF(J.EQ.1) GO TO 190 N1=MAXKEY+1 N6=MAXKEY+10 C -LOOP 199 SEARCHES IFORM UNTIL FINDING THE CORRECT KEY#, THEN C 1. IF IT'S A FUNCTION KEY, GET IT'S LABEL & STORE IT IN KFORM C 2. IF IT'S A VALUE KEY, GET THE STRING VALUE & STORE IN KFORM. 190 DO 199 L=N1,N6 C -GET KEY # & CONVERT IT TO INTEGER. IF(INUM(IFORM,(ISFKNO+(L-N1)*33),2,IZ)) PAUSE 260 C -CORRECT KEY # ? IF(IZ.NE.I) GO TO 199 C -IS THIS A VALUE KEY OR FUNCTION KEY? IF(IKEY(I,J).NE.-1) GO TO 195 C -VALUE KEY. CALCULATE THE STRING LENGTH DROPPING TRAILING BLANKS. IL=LNCAR(IFORM,(ITEXT+(L-N1)*33),16) C -STORE THE LENGTH IN LEFT BYTE. KFORM(N2+IPNTR)=IL*256 C -STORE THE STRING STARTING IN THE RIGHT BYTE. CALL MOVCA(IFORM,(ITEXT+(L-N1)*33),KFORM,((N2+IPNTR)*2),IL) C -UPDATE IPNTR TO NEXT STRING ADDRESS. IPNTR=IPNTR+1+(IL/2) GO TO 199 C -FUNCTION KEY. CALCULATE STRING LENGTH OF LABEL(OMIT TRAILING BLANKS). 195 IL=LNCAR(IFORM,(ILABEL+(L-N1)*33),12) C -SET FS BIT & MERGE IT WITH THE FUNCTION NUMBER. IX=200B+IKEY(I,J) C -SET EC BIT IF VALIDITY CHECK REQUIRED. IF((IKEY(I,J).GT.4).AND.(IKEY(I,J).NE.10)) IX=IX+100B IF(IKEY(I,J).EQ.14) CALL SETBT(IX,6,0) C -STORE THE FS/EC/FUNCTION NUMBER IN LEFT BYTE & LENGTH IN RIGHT BYTE. KFORM(N2+IPNTR)=IL+IALF2(IX) C -STORE THE LABEL STARTING IN NEXT WORD. IF(IAND(IL,1).EQ.1) IL=IL+1 CALL MOVCA(IFORM,(ILABEL+(L-N1)*33),KFORM, * ((N2+IPNTR+1)*2-1),IL) C -UPDATE IPNTR TO NEXT STRING ADDRESS. IPNTR=IPNTR+1+(IL/2) 220 GO TO 230 199 CONTINUE 230 CONTINUE C -ERROR IF TOTAL LENGTH OF STATE MINUS 3 WORDS IS .GT. 256 IF(IPNTR.GT.259) STOP 3 C -CALCULATE TRUE LENGTH MINUS 3. IX=IPNTR-3 N1=N2 C -SPLIT THE STATE IF NECESSARY. CALL SPLT(N1,IPNTR,KFORM,0) C -STORE TOTAL LENGTH OF STATE MINUS 3. KFORM(N2+2)=IX C -STORE SAME LENGTH INTO TS HEADER KFORM(13)=IX C -NOW UPDATE TS TOTAL LENGTH IN TS HEADER. KFORM(1)=N1 C C C C********************************************************************** C C CONSTRUCTION OF AN U OR M STATE C C*********************************************************************** C C HERE BEGINS THE CONSTRUCTION OF AN U OR M STATE . C GENERAL PARAMETERS : C N : CURRENT POINTER IN IMAI ARRAY C N1 : CURRENT STATE # FIRST IS 1 C N2 : WORD ADDRESS OF FIRST WORD OF CURRENT STATE C N3 : CURRENT ADDRESS IN KFORM C N4 : CURRENT RELATIVE ADDRESS IN DATA OUTPUT BUFFER C N5 : CURRENT OFFSET (WORDS) OF THE BEGINING OF STATE C IN JFORM C N6 : LOCAL PARAMETER C N7 : INPUT STRING LENGTH C N8 : CURRENT OFFSET (CHARACTERS) OF THE BEGINING OF C STATE IN JFORM C IAT : CURRENT ANSWER TYPE C IX : LOCAL PARAMETER C IY : LOCAL PARAMETER C JBYTE : # BYTES PER RECORD IN JFORM (CURRENTLY 170) C JWORD : # WORDS PER RECORD IN JFORM (CURRENTLY 85) C LW : WORD POINTER IN LISTOF WHICH HOLDS THE DATA C FOR THE OFF-LINE PRINT-OFF. C LCTR : COUNTER FOR THE TOTAL # OF OFF-LINE PRINT-OFF'S C C C INITIALISE PARAMETERS C 260 N1=1 N2=KFORM(1) IFAF=0 ISUMN=0 LW=1 LCTR=0 C C RESERVE PLACE FOR SYSTEM ADDED INFORMATION C N4=1 IF(IGET1(MFORM,1).NE.1HX) GO TO 261 IMAI(41,5)=N4 N4=N4+2 261 IF(IGET1(MFORM,2).NE.1HX) GO TO 262 IMAI(42,5)=N4 N4=N4+1 262 IF(IGET1(MFORM,3).NE.1HX) GO TO 263 IMAI(43,5)=N4 N4=N4+3 263 IF(IGET1(MFORM,4).NE.1HX) GO TO 265 IMAI(44,5)=N4 N4=N4+2 C C C========================================================================= C C HERE BEGINS THE LOOP C EACH LOOP BUIDS A STATE CORRESPONDING TO A QUESTION C C 265 IF(N1.GT.(IUMAX+IMMAX)) GO TO 625 N=2*N1-1 C -GO BUILD FAF RECORD IF NECESSARY. IF(.NOT.(ISBIT(IMAI(N,2),9))) GO TO 271 IF(IFAF.EQ.0) GO TO 654 C C************************************************************************* C C BUILD STATE GENERAL INFORMATION C C************************************************************************ C 271 N5=(N1-1)*JWORD N8=(N1-1)*JBYTE IAT=JFORM(50+N5) C C INCLUDE FLAGS FOR DISPLAY,DEFAULT VALUE,INPUT FROM CARD READER ... C IMAGE DELETE FLAG,LAST QUESTION STATE FLAG C INCLUDES ALSO STATE QUALIFIER ,STATE INDEX... C C -DF. IF(IGET1(JFORM,2+N8).EQ.1HX) KFORM(N2+1)=100000B C -DVF. IF(IGET1(JFORM,103+N8).EQ.1HX) KFORM(N2+1)=IOR(KFORM(N2+1),20000B) C -DEL. IF(ISBIT(IMFLG,2)) KFORM(N2+1)=IOR(KFORM(N2+1),400B) C -LST. IF(N1.EQ.IUMAX+IMMAX) KFORM(N2+1)=IOR(KFORM(N2+1),1000B) C C STATE INDEX AND STATE QUALIFIER C IF(N1.LE.IUMAX) KFORM(N2+1)=KFORM(N2+1)+40B+N1 IF(N1.GT.IUMAX) KFORM(N2+1)=KFORM(N2+1)+100B+(N1-IUMAX)+IFAF C C ITEM TYPE AND STRING LENGTH (IN CHARS. 2 FOR INTEGERS,4 REALS) C KFORM(N2+2)=IAT IF(IAT.NE.0) GO TO 270 N7=JFORM(25+N5) KFORM(N2+2)=IOR(KFORM(N2+2),16*N7) 270 IF(IAT.EQ.1) KFORM(N2+2)=IOR(KFORM(N2+2),40B) IF(IAT.EQ.2) KFORM(N2+2)=IOR(KFORM(N2+2),100B) C C-----CRT OR PRINTER OR ALPHA DISPLAY USED? C IF(.NOT.ISSPA(JFORM,N8+6,5) .AND. .NOT.ISBIT(ITT,7)) GO TO 280 C C-----IF CRT IS TO BE USED, SET LSC,SCL,OLD AS REQD. C IF(IGET1(JFORM,N8+6) .EQ. 1H ) GO TO 2711 IF(IGET1(JFORM,N8+6).EQ.1HL) CALL SETBT(KFORM(N2+6),15,1) IF(IGET1(JFORM,N8+7).EQ.1HS) CALL SETBT(KFORM(N2+6),14,1) C C-----IF PRINTER IS USED, SET ANS,ONP IN HDR AS REQD. C 2711 IF(IGET1(JFORM,N8+9).EQ.1H ) GO TO 272 CALL SETBT(KFORM(N2+2),14,1) KFORM(11)=IOR(KFORM(11),400B) C C-----SET OUTPUT DEVICE: 1=CRT, 2=PRINTER, 3=BOTH. C 272 IF(ISSPA(JFORM,N8+6,2)) CALL SETBT(KFORM(N2+6),0,1) IF(ISSPA(JFORM,N8+9,1)) CALL SETBT(KFORM(N2+6),1,1) C C-----IF THERE IS A LABEL FOR THE QUESTION, SET TTL & MOVE C LABEL TO KFORM. C 273 IF(.NOT.ISSPA(JFORM,N8+11,16)) GO TO 274 C -YES. SET TTL & MOVE TITLE TO KFORM. KFORM(N2+2)=IOR(KFORM(N2+2),100000B) LNGT=LNCAR(JFORM,N8+11,16) IF(ISBIT(LNGT,0)) LNGT=LNGT+1 CALL MOVCA(JFORM,N8+11,KFORM,(N2+8)*2-1,LNGT) KFORM(N2+7)=(LNGT/2)+1 C C-----IF SUMMARY (IE, OFF-LINE PRINT-OUT AT END OF TRANSACTION) GET TITLE? C 274 IF(IGET1(JFORM,N8+10).NE.1HX) GO TO 280 C SET TTL & STORE NO. OF BYTES IN LISTOF C -LABEL FOR ANSWER? 276 IF(.NOT.ISSPA(JFORM,N8+11,16)) GO TO 280 C -YES. GET # BYTES TO STORE. LNGT=LNCAR(JFORM,N8+11,16) IF(ISBIT(LNGT,0)) LNGT=LNGT+1 LISTOF(LW)=LNGT*16 LISTOF(LW)=IOR(LISTOF(LW),100000B) LW=LW+1 C MOVE TITLE TO LISTOF. CALL MOVCA(JFORM,N8+11,LISTOF,LW*2-1,LNGT) LW=LW+LNGT/2 LCTR=LCTR+1 C C U QUESTION SEQUENCE STORAGE LENGTH ,QUESTION LIGHT,ITEM ADDRESS C IX IS QUESTION LIGHT C 280 IF(N1.EQ.(IUMAX+1)) KFORM(8)=N4-1 IF(INUM(JFORM,N8+3,2,IX)) STOP 4 C -QUESTION LIGHT #. KFORM(N2+3)=IX*4096 IOFT=N4 IF(IAT.EQ.0) N4=N4+(N7+1)/2 IF(IAT.EQ.1) N4=N4+1 IF(IAT.EQ.2) N4=N4+2 C C-----THIS SECTION DOES THE NON-KEYBOARD INPUT DEVICES. C C WORD 5 (N2+4) C C-----IF NOT NON-KEYBOARD INPUT, JMP TO 290. C IF(IGET1(JFORM,N8+5).NE.1HX) GO TO 290 ILN=2 C C-----PROCESS USER WRITTEN INPUT MODULE. C IF(.NOT.ISSPA(JFORM,N8+153,5)) GO TO 281 KFORM(N2+4)=31 GO TO 290 C C-----PROCESS TYPE V BADGE. C 281 IF(.NOT.ISSPA(JFORM,N8+44,4)) GO TO 282 KFORM(N2+4)=2 IF(ISBIT(JFORM(N5+24),0)) CALL SETBT(KFORM(N2+4),15,1) ISTART=44 IEND=46 IF(ISSPA(JFORM,N8+43,1)) CALL SETBT(KFORM(N2+4),11,1) IF(IGET1(JFORM,N8+43).EQ.1HN) CALL SETBT(KFORM(N2+4),15,1) GO TO 288 C C-----PROCESS TYPE III BADGE & CARDS. C 282 IF(IGET1(IFORM,1518).NE.1HX) GO TO 286 C -YES. INIT THE CARD SPEC BITS. KFORM(N2+4)=IAND(KFORM(N2+4),7777B) KFORM(N2+4)=KFORM(N2+4)+1 C -NEW CARD? IF(.NOT.ISSPA(JFORM,N8+35,4)) GO TO 284 C -YES. SET NEW CARD FLAG (CRD) & GET REST OF NEW SPECS. CALL SETBT(KFORM(N2+4),11,1) C -GO SET CAO IF NC (NO CLOCK MARKS). IF(IGET2(JFORM,N8+37).EQ.2HNC) GO TO 283 C -SET CNC. CALL SETBT(KFORM(N2+4),12,1) C -SET CAO IF CA (CLOCK AFTER DATA). IF(IGET2(JFORM,N8+37).EQ.2HCA) CALL SETBT(KFORM(N2+4),13,1) GO TO 283 C -SET CAO. 283 CALL SETBT(KFORM(N2+4),13,1) C -IF MARKS, SET MH. 284 IF(IGET1(JFORM,N8+36).EQ.1HM) CALL SETBT(KFORM(N2+4),14,1) C -IF ASCII, SET AI (EVEN IF NOT A NEW CARD). 285 IF(ISBIT(JFORM(N5+24),0)) CALL SETBT(KFORM(N2+4),15,1) ISTART=39 IEND =41 GO TO 288 C C-----PROCESS BAR CODE READER. C 286 IF(.NOT.ISSPA(JFORM,N8+158,5)) GO TO 287 KFORM(N2+4)=3 ISTART=159 IEND=161 ICODE=IGET1(JFORM,N8+158) IF(ICODE.EQ.1HI) IWAND=0 IF(ICODE.EQ.1HM) IWAND=1 IF(ICODE.EQ.1HC) IWAND=2 IF(ICODE.EQ.1HU) IWAND=3 KFORM(N2+4)=KFORM(N2+4)+IWAND*256 IF(IGET1(JFORM,N8+158).NE.1H ) CALL SETBT(KFORM(N2+4),11,1) IF(IGET1(JFORM,N8+170).EQ.1HX) CALL SETBT(KFORM(N2+4),7,1) GO TO 288 C C-----IT WASN'T ANY OF THE ABOVE SO DEFAULT TO MAGSTRIPE READER. C 287 KFORM(N2+4)=4 IF(IGET1(JFORM,N8+163).NE.1H ) CALL SETBT(KFORM(N2+4),11,1) ISTART=164 IEND=167 ILN=3 C C-----GET STARTING & ENDING COLUMNS. C 288 IF(INUM(JFORM,N8+ISTART,ILN,IS)) PAUSE 276 IF(INUM(JFORM,N8+IEND,ILN,IE)) PAUSE 277 C C-----CALCULATE LENGTH. IF IMAGE CARD, TRANSLATE CARD COL TO BYTES. C IF(ISBIT(KFORM(N2+4),15)) GO TO 289 INDEV=IAND(KFORM(N2+4),37B) IF(INDEV.NE.1 .AND. INDEV.NE.2) GO TO 289 IS=IS+IS-1 IE=IE+IE C C-----STORE CARD FIELD LENGTH & STARTING BYTE. C 289 ILENTH=IE-IS+1 KFORM(N2+5)=IS KFORM(N2+5)=KFORM(N2+5)+ILENTH*256 C 290 CONTINUE C C C************************************************************************ C C THIS SECTION BUILDS THE DISPLAY INFORMATION PART OF C THE STATE. C C************************************************************************ C C PRINT ?,STRING LENGTH,DISPLAYED ITEM TYPE C IX IS ITEM TYPE C IY IS DISPLAYED STRING LENGTH C IZ IS A VARIABLE LOCAL TO THE DISPLAY INFORMATION ROUTINE. C IZ=0 NO TOTAL DISPLAY ON THIS ITEM. C IZ=1 SUM ITEM, BUT QUES.NE.DISPLAY C IZ=2 SUM ITEM, AND QUES.EQ.DISPLAY C C-----1ST, SET CURRENT ADDRESS IN KFORM INTO N3. C N3=N2+7 IF(ISBIT(KFORM(N2+2),15)) N3=N3+KFORM(N2+7) C IF NO DISPLAY STORE ITEM OFFSET IN OUTPUT BUFFER IZ=0 C -DISPLAY? IF(IAND(KFORM(N2+1),100000B).NE.0) GO TO 291 C -NO. NOW STORE ITEM RELATIVE ADDRESSES IN DATA OUTPUT BUFFER. IF(IAT.NE.3) KFORM(N2+3)=KFORM(N2+3)+IOFT IF(IAT.NE.3) IMAI(N,5)=IOFT C -IF OFF-LINE PRINT-OUT (IE, SUMMARY) WILL BE DONE AT THE END OF C THIS TRANSACTION, MOVE THE LENGTH, TYPE, & OUTPUT BUFFER C ADDRESS TO THE LIST-OFF SAVE BUFFER. IF(IGET1(JFORM,N8+10).NE.1HX) GO TO 320 2901 LISTOF(LW)=IAND(KFORM(N2+2),7777B) LW=LW+1 LISTOF(LW)=IAND(KFORM(N2+3),7777B) LW=LW+1 LCTR=LCTR+1 GO TO 320 C C IMAGE DISPLAY GET ITEM LENGTH AND TYPE C 291 IF(IMAI(N+1,1).EQ.0) GO TO 292 IX=IAND(IMAI(N+1,2),30000B)/4096 IY=IAND(IMAI(N+1,4),377B) C -WILL A TOTAL BE DONE ON THIS DISPLAY ITEM? IF(IGET1(JFORM,N8+146).EQ.1HX) GO TO 2911 C -NO. SET IDF BIT. CALL SETBT(KFORM(N3),13,1) GO TO 293 C -YES. QUES ITEM = DISPLAY ITEM? 2911 IZ=1 IF(CMPB(JFORM,N8+27,JFORM,N8+134,6)) IZ=2 GO TO 293 C C NON IMAGE DISPLAY C -DISPLAY ITEM TYPE. 292 IY=IGET1(JFORM,133+N8) IF(IY.EQ.2HS ) IX=0 IF(IY.EQ.2HI ) IX=1 IF(IY.EQ.2HR ) IX=2 C -DISPLAYED ITEM LENGTH. IY=JFORM(N5+66) C -UDR 293 IF(IMAI(N+1,1).NE.0) GO TO 295 IF(ISSPA(JFORM,N8+126,5)) CALL SETBT(KFORM(N3),15,1) C -SUM. 295 IF(IZ.NE.0) CALL SETBT(KFORM(N3),12,1) C -NEXT WORD. N3=N3+1 C -SET TTL IF A TITLE FOR THE DISPLAY WILL BE PRINTED. C IF(ISSPA(JFORM,N8+104,2)) GO TO 298 297 IF(ISSPA(JFORM,N8+107,16)) CALL SETBT(KFORM(N3),15,1) C -PRT. 298 IF(IGET1(JFORM,N8+105).EQ.1HX) CALL SETBT(KFORM(N3),14,1) C -DISPLAYED ITEM TYPE. KFORM(N3)=KFORM(N3)+IX C -DISPLAYED ITEM LENGTH. IF(IX.EQ.0) KFORM(N3)=IOR(KFORM(N3),IY*16) IF(IX.EQ.1) KFORM(N3)=IOR(KFORM(N3),40B) IF(IX.EQ.2) KFORM(N3)=IOR(KFORM(N3),100B) C C DISPLAY LIGHT #, DISPLAY ITEM ADDRESS C C -NEXT WORD. 300 N3=N3+1 IF(INUM(JFORM,101+N8,2,KFORM(N3))) STOP 5 KFORM(N3)=(KFORM(N3)*4096) KFORM(N3)=KFORM(N3)+IOFT IMAI(N+1,5)=IOFT C -SET ONP IN TS HEADER IF ON-LINE DISPLAY OR PRINT-OUT WILL BE DONE. IF(ISSPA(JFORM,N8+104,2)) KFORM(11)=IOR(KFORM(11),400B) C 302 N3=N3+1 IF(IX.EQ.0) INC=(IY+1)/2 IF(IX.EQ.1) INC=1 IF(IX.EQ.2) INC=2 N4=N4+INC C C STORE NOW QUESTION OFFSET IN OUTPUT BUFFER C KFORM(N2+3)=KFORM(N2+3)+IOFT+INC IMAI(N,5)=IOFT+INC C C-----IF OFF-LINE PRINT-OUT (IE, SUMMARY) WILL BE DONE AT THE END OF C THIS TRANSACTION FOR THIS DISPLAY ITEM, MOVE THE TITLE (IF ANY) C OF THE PRINT-OUT, ITEM LENGTH, TYPE, & ADDRESS IN OUTPUT BUFFER C INTO THE LIST-OFF SAVE BUFFER. IF(IGET1(JFORM,N8+10).NE.1HX) GO TO 304 C -SAVE THE ANSWER ADDRESSES AT THIS TIME. 303 LISTOF(LW)=IAND(KFORM(N2+2),7777B) LW=LW+1 LISTOF(LW)=IAND(KFORM(N2+3),7777B) LW=LW+1 LCTR=LCTR+1 304 IF(IGET1(JFORM,N8+106).NE.1HX) GO TO 309 307 IF(.NOT.ISSPA(JFORM,N8+107,16)) GO TO 308 C -SAVE THE DISPLAY TITLE. LNGT=LNCAR(JFORM,N8+107,16) IF(ISBIT(LNGT,0)) LNGT=LNGT+1 LISTOF(LW)=LNGT*16 LISTOF(LW)=IOR(LISTOF(LW),100000B) LW=LW+1 CALL MOVCA(JFORM,N8+107,LISTOF,(LW*2-1),LNGT) LW=LW+LNGT/2 LCTR=LCTR+1 C -SAVE THE DISPLAY ITEM ADDRESS. 308 LISTOF(LW)=IAND(KFORM(N3-2),7777B) LW=LW+1 LISTOF(LW)=IAND(KFORM(N3-1),7777B) LW=LW+1 LCTR=LCTR+1 C C FOR NON IMAGE DISPLAY INCLUDE DISPLAY PROGRAM NAME C 309 IF(IMAI(N+1,1).NE.0) GO TO 310 CALL MOVCA(JFORM,126+N8,KFORM,(N3*2-1),5) CALL PUTCA(KFORM,1H ,N3*2+4) C -NEXT FIELD. N3=N3+4 GO TO 318