Metropoli BBS
VIEWER: 12-04.for MODE: TEXT (ASCII)
$INCLUDE: 'C:\FG\INTRFACE.FOR'

      PROGRAM MAIN

      INTEGER*2 VISUAL, HIDDEN
      PARAMETER (VISUAL=0)
      PARAMETER (HIDDEN=1)

      INTEGER*2 XMIN(0:11), YMAX(0:11)
      INTEGER*2 NEW_MODE, OLD_MODE
      INTEGER*2 FRAME, OFFSET
      INTEGER*2 I, X, Y
      INTEGER*2 STATUS
      INTEGER*2 FG_ALLOCATE, FG_FREEPAGE
      INTEGER*2 FG_BESTMODE, FG_GETMODE

      DATA XMIN / 0, 96,192,  0, 96,192,  0, 96,192,  0, 96,192/
      DATA YMAX /49, 49, 49, 99, 99, 99,149,149,149,199,199,199/

C  initialize the video environment

      NEW_MODE = FG_BESTMODE(320,200,2)
      IF (NEW_MODE .LT. 0 .OR. NEW_MODE .EQ. 12) THEN
         STOP 'This program requires a 320 x 200 color graphics mode.'
      END IF
      OLD_MODE = FG_GETMODE()
      CALL FG_SETMODE(NEW_MODE)
      STATUS = FG_ALLOCATE(HIDDEN)

C  draw the background in the upper left corner

      CALL FG_SETPAGE(HIDDEN)
      CALL FG_SETCOLOR(1)
      CALL FG_RECT(0,95,0,49)
      CALL FG_SETCOLOR(15)
      CALL FG_MOVE(48,25)
      CALL FG_ELLIPSE(20,20)

C  display the animated object against each background

      CALL FG_SETCOLOR(10)
      OFFSET = -10
      DO 10 I = 1,11
         X = XMIN(I)
         Y = YMAX(I)
         CALL FG_TRANSFER(0,95,0,49,X,Y,HIDDEN,HIDDEN)
         CALL FG_SETCLIP(X,X+95,0,199)
         CALL FG_CLPRECT(X+OFFSET,X+OFFSET+19,Y-29,Y-20)
         OFFSET = OFFSET + 10
10    CONTINUE

C  slide the object across the background three times

      DO 20 I = 0,35
         FRAME = MOD(I,12)
         X = XMIN(FRAME)
         Y = YMAX(FRAME)
         CALL FG_TRANSFER(X,X+95,Y-49,Y,112,124,HIDDEN,VISUAL)
         CALL FG_WAITFOR(2)
20    CONTINUE

C  restore the original video mode and return to DOS

      STATUS = FG_FREEPAGE(HIDDEN)
      CALL FG_SETMODE(OLD_MODE)
      CALL FG_RESET

      STOP ' '
      END

[ RETURN TO DIRECTORY ]