|
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 m
Length: 1698 (0x6a2) Types: TextFile Names: »mov.f«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Empire/mov.f«
FUNCTION MOV(I6,I7) C C RETURNS THE INDEX-1 INTO IARROW FOR THE DIRECTION OF THE MOVE C FROM I6 TO I7 C IMPLICIT INTEGER(A-Z) include 'common.h' C LOGICAL XMAJOR C IY6=(I6-1)/100 IY7=(I7-1)/100 IX6=I6-(100*IY6) IX7=I7-(100*IY7) IY=IY7-IY6 IX=IX7-IX6 C SCREEN OUT TRIVIAL CASES IF (IX.EQ.0) THEN DIR=SIGN(100,IY) GOTO 100 ENDIF IF (IY.EQ.0) THEN DIR=SIGN(1,IX) GOTO 100 ENDIF C THIS ATTEMPTS A LINE-OF-SIGHT APPROXIMATION C unfortunately a true LOS requires knowing where you came from comment C this routine currently tries to keep near a 3 to 1 ratio. DX=ABS(IX) comment GET DELTA X DY=ABS(IY) comment GET DELTA Y XMAJOR=.TRUE. comment ASSUME X IS MAJOR CHANGE IF (DY.GT.DX) THEN comment IF WRONG, SWITCH DX=DY DY=ABS(IX) XMAJOR=.FALSE. ENDIF C comment the divisor determines the slope C comment perfect case would be delta y at start IF (IFIX(FLOAT(DX)/3+.5).GT.DY) THEN comment IF MAJOR IS LONG, GO STRAIGHT IF (XMAJOR) THEN DIR=SIGN(1,IX) ELSE DIR=SIGN(100,IY) ENDIF ELSE comment OTHERWISE, TAKE DIAGONAL DIR=SIGN(100,IY)+SIGN(1,IX) ENDIF 100 DO 200 I=1,9 comment FIND THE INDEX 200 IF (IARROW(I).EQ.DIR) GOTO 300 300 MOV=I-1 comment FOR COMPATIBILITY (?) C OLD WAY: FOR HISTORIANS C THIS DOES NOT DO A "TRUE" LINE OF SIGHT, FAVORS DIAGONALS C IF ((IY.LT.0).AND.(IX.GT.0)) MOV=2 C IF ((IY.LT.0).AND.(IX.EQ.0)) MOV=3 C IF ((IY.LT.0).AND.(IX.LT.0)) MOV=4 C IF ((IY.EQ.0).AND.(IX.LT.0)) MOV=5 C IF ((IY.GT.0).AND.(IX.LT.0)) MOV=6 C IF ((IY.GT.0).AND.(IX.EQ.0)) MOV=7 C IF ((IY.GT.0).AND.(IX.GT.0)) MOV=8 C IF ((IY.EQ.0).AND.(IX.GT.0)) MOV=1 C IF ((IX.EQ.0).AND.(IY.EQ.0)) MOV=0 RETURN END