DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T m

⟦c834ff42d⟧ TextFile

    Length: 1698 (0x6a2)
    Types: TextFile
    Names: »mov.f«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Empire/mov.f« 

TextFile

	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