Database section 3 - The TRAVEL table
C SECTION 3: TRAVEL TABLE. EACH LINE CONTAINS A LOCATION NUMBER (X), A SECOND
C LOCATION NUMBER (Y), AND A LIST OF MOTION NUMBERS (SEE SECTION 4).
C EACH MOTION REPRESENTS A VERB WHICH WILL GO TO Y IF CURRENTLY AT X.
C Y, IN TURN, IS INTERPRETED AS FOLLOWS. LET M=Y/1000, N=Y MOD 1000.
C IF N<=300 IT IS THE LOCATION TO GO TO.
C IF 300500 MESSAGE N-500 FROM SECTION 6 IS PRINTED,
C AND HE STAYS WHEREVER HE IS.
C MEANWHILE, M SPECIFIES THE CONDITIONS ON THE MOTION.
C IF M=0 IT'S UNCONDITIONAL.
C IF 0
So the "second location number", aka "Y" is M * 1000 + N and M is less than
or equal to ...
Now TRAVEL is computed by:
C THE STUFF FOR SECTION 3 IS ENCODED HERE. EACH "FROM-LOCATION" GETS A
C CONTIGUOUS SECTION OF THE "TRAVEL" ARRAY. EACH ENTRY IN TRAVEL IS
C NEWLOC*1000 + KEYWORD (FROM SECTION 4, MOTION VERBS), AND IS NEGATED IF
C THIS IS THE LAST ENTRY FOR THIS LOCATION. KEY(N) IS THE INDEX IN TRAVEL
C OF THE FIRST OPTION AT LOCATION N.
1030 READ(1,1031)LOC,NEWLOC,TK
1031 FORMAT(99G)
IF(LOC.EQ.0)GOTO 1030
C ABOVE KLUGE IS TO AVOID AFOREMENTIONED F40 BUG
IF(LOC.EQ.-1)GOTO 1002
IF(KEY(LOC).NE.0)GOTO 1033
KEY(LOC)=TRVS
GOTO 1035
1033 TRAVEL(TRVS-1)=-TRAVEL(TRVS-1)
1035 DO 1037 L=1,20
IF(TK(L).EQ.0)GOTO 1039
TRAVEL(TRVS)=NEWLOC*1000+TK(L)
NEWLOC * 1000 will overflow on the 1900. The solution is to replace that code
by:
C THE STUFF FOR SECTION 3 IS ENCODED HERE. EACH "FROM-LOCATION" GETS A
C CONTIGUOUS SECTION OF THE "TRAVEL" ARRAY. EACH ENTRY IN TRAVEL IS
C NEWLOC*1000 + KEYWORD (FROM SECTION 4, MOTION VERBS), AND IS NEGATED IF
C THIS IS THE LAST ENTRY FOR THIS LOCATION. KEY(N) IS THE INDEX IN TRAVEL
C OF THE FIRST OPTION AT LOCATION N.
C ICL1900 - WE CAN'T STUFF NEWLOC*1000+KEYWORD IN TRAVEL, IT'S TOO BIG.
C (WOULD WORK ON 32BIT, BUT WE HAVE ONLY 24BIT). STUFF NEWLOC IN TRAVEL
C AND KEYWORD IN TRAVL2.
1030 READ(1,1031)LOC,NEWLOC,TK
1031 FORMAT(99I0)
IF(LOC.EQ.-1)GOTO 1002
IF(KEY(LOC).NE.0)GOTO 1033
KEY(LOC)=TRVS
GOTO 1035
1033 TRAVEL(TRVS-1)=-TRAVEL(TRVS-1)
1035 DO 1037 L=1,20
IF(TK(L).EQ.0)GOTO 1039
TRAVEL(TRVS)=NEWLOC
TRAVL2(TRVS)=TK(L)
All questions to john@AtlanTech.com