|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T p
Length: 2059 (0x80b) Types: TextFile Names: »path.f«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Empire/path.f«
FUNCTION PATH(BEG,END,DIR,OKVECT,FLAG) C C PATH SUBROUTINE FOR EMPIRE C FINDS DIRECTION TO MOVE UNIT, FROM BEG TO END, OKVECT SPECIFIES OK TERRAIN. C IMPLICIT INTEGER(A-Z) include 'common.h' C character OKVECT(5) C BACKUP=1 TDIR=DIR comment GET A DIRECTION TO FIDDLE WITH DIR3=TDIR*3 Z6=BEG MAXMVE=(2 * IDIST(BEG,END))+1 comment COMPUTE MAX MOVES TO GET THERE MOVNUM=MAXMVE 100 DO 200 I=1,100 comment CLEAR G2 ARRAY G2(I)=0 200 CONTINUE C STRGHT: comment TRY STRAIGHT MOVE FIRST 300 MOOVE= MOV(Z6,END) Z62=Z6+IARROW(MOOVE+1) AB=EMAP(Z62) IF (COMPAR(AB,Z62,OKVECT).EQ.0) GOTO 900 comment IF NO GOOD, FOLLOW SHORE C OKSET: comment STRAGHT MOVE WORKING 400 BAKADR=1 C OKMOVE: 500 IF (Z6 .EQ. BEG) MOVE1=MOOVE Z6=Z62 IF (FLAG.GE.1000) CALL TEST4(Z6,FLAG,TDIR,MOVE1,MOVNUM,BEG, 1 END,G2,BAKADR) IF (Z6 .EQ. END) GOTO 800 comment IF Z6=END, WE'RE DONE C DOMORE: 600 MOVNUM=MOVNUM-1 IF (MOVNUM .EQ. 0) GOTO 700 comment REACHED MAX MOVES, TRY NEW DIRECTION C STRGHT, CHKNXT GOTO (300, 1300), BAKADR comment CONTINUE, IN SAME MANNER C TRYDIR:: 700 DIR3=-DIR3 comment NEGATE CURRENT DIRECTION TDIR=-TDIR IF (TDIR .EQ. DIR) GOTO 1200 comment GIVE UP IF BACK TO START MOVNUM=MAXMVE comment ELSE, TRY AGAIN BACKUP=1 Z6=BEG GOTO 100 C SUCCES: SUCCESS, RETURN 800 PATH=MOVE1 SUCCES=SUCCES+1 FLAG=1 RETURN C FOLSHR: FOLLOW THE SHORE 900 MOV1=ICORR(MOOVE-DIR3) comment TRY AGAIN Z62=Z6+IARROW(MOV1+1) AB=EMAP(Z62) IF (COMPAR(AB,Z62,OKVECT).EQ.1) MOV1=MOOVE comment ??? C STFOL: 1000 DO 1100 IVAR= MOV1,MOV1+7*TDIR,TDIR MOOVE=ICORR(IVAR) Z62=Z6+IARROW(MOOVE+1) IF (ORDER(Z62) .NE. 0) GOTO 1100 AB=EMAP(Z62) IF (COMPAR(AB,Z62,OKVECT).EQ.0) GOTO 1100 C OKSET2: BAKADR=2 GOTO 500 1100 CONTINUE C FAILUR: 1200 PATH=MOV(BEG,END) FAILUR=FAILUR+1 FLAG=0 RETURN C CHKNXT: 1300 T1=MOV(Z6,END) Z62=Z6+IARROW(T1+1) AB=EMAP(Z62) IF (COMPAR(AB,Z62,OKVECT).EQ.0) GOTO 900 DO 1400 IVAR=BACKUP,1,-1 IF (Z6 .EQ. G2(IVAR)) GOTO 900 1400 CONTINUE G2(BACKUP)=Z6 BACKUP=BACKUP+1 IF (BACKUP .LE. 100) GOTO 300 GOTO 700 END