!*************************** AMUS Program Label ******************************
! Filename: GEARS.RUN Date: 7/23/91
! Category: GRAP Hash Code: 173-702-241-566 Version: 1.0
! Initials: LOW/AM Name: David Krecklow
! Company: Compu-Center Co., Inc. Telephone #: 8053251004
! Related Files: GEARS.DOC
! Min. Op. Sys.: ANY Expertise Level: INT
! Special: AM-72 or other graphic terminal used under AMIGOS
! Description: AMIGOS version of the popular graph drawing game that uses
! geared plastic parts to draw spiral graphs.
!
!*****************************************************************************
!
!
!
!GEARS - AMIGOS VERSION OF CLOID
!
! GEARS NOTICE
!
!
!
PROGRAM GEARS,1.0(000)
++INCLUDE AMGSYM.BSI ! get AMIGOS definitions
MAP1 GCB,X,32000 ! Define graphics control block
! Point array for polyline calls
MAP1 POINT'ARRAY
MAP2 POINT'COUNT,B,2
MAP2 POINTS(20)
MAP3 POINT'X,B,2
MAP3 POINT'Y,B,2
MAP1 STATUS,F ! Status retruned from AMIGOS calls
MAP1 DESCX$(2)
MAP2 DESC$,S,20
DESC$(1)="Epicycloid"
DESC$(2)="Hypocycloid"
XCNTR = 512 ! Center - X
YCNTR = 384 ! - Y
XOFF=16383 ! Offset - X
YOFF=12287 ! - Y
WINX=1024 ! Window - X
WINY=1024 ! - Y
CLOID:
ON ERROR GOTO END
! Open the workstation
XCALL AMGSBR,G'OPWK,GCB,"",STATUS
! Set workstation window
XCALL AMGSBR,G'SWKW,GCB,0+XOFF,0+YOFF,WINX+XOFF,WINY+YOFF,STATUS
! Get the workstation status
XCALL AMGSBR,G'QCHR,GCB,G'QCHR'MAP,STATUS
! ? GH'MXW,GH'MXH,GH'MXV,GH'MYV,GH'CLP
LOOKUP "GEARS.DAT",F'STAT
! see if last run data exists and read it
IF F'STAT<>0 THEN OPEN #1,"GEARS.DAT",INPUT : &
INPUT #1,A,B,TP,STP,NOSTP,COLOR : &
CLOSE #1
! display last run data
IF TP<>1 AND TP<>2 THEN TP=1 : DESC$(1)="NONE"
? "The last time GEARS ran "
? " the fixed circle radius was ";A
? " the rolling circle radius was ";B
? " the type of graph was ";DESC$(TP)
? " the step increment was ";STP
? " the number of steps was ";NOSTP
? " the color was ";COLOR
?
!! ? A,B,TP,STP,NOSTP,COLOR
! get new data or retain old
? "ENTER the radius of the fixed circle ";
INPUT A
? "ENTER the radius of the rolling circle ";
INPUT B
IF TP=1 THEN TYPE$="E" ELSE TYPE$="H"
? "ENTER E)picycloid or H)ypocycloid ";
INPUT TYPE$
TYPE$=UCS(TYPE$)
IF TYPE$="E" THEN TP=1 ELSE TP=2
? "ENTER the amount to increment the steps ";
INPUT STP
IF STP=0 THEN STP=1
? "ENTER the number of steps ";
INPUT NOSTP
IF NOSTP=0 THEN NOSTP=(5000*STP)
? "ENTER the color (0-63) ";
INPUT COLOR
! Write out the current data
OPEN #1,"GEARS.DAT",OUTPUT
? #1,A,B,TP,STP,NOSTP,COLOR
CLOSE #1
!! ? A,B,TP,STP,NOSTP,COLOR
! Clear the workstation & set color
XCALL AMGSBR,G'CLRW,GCB,STATUS
XCALL AMGSBR,G'SPLC,GCB,COLOR,STATUS
!turn off cursor
PRINT TAB(-1,29);
POINT'COUNT = 2
! do the graph - plot the points & draw lines
PLOT:
G=(A+B)/B
H=(A-B)/B
FOR Z=1 TO NOSTP STEP STP
P=Z-1
ON TP GOTO TP1, TP2
TP1:
X=(A+B)*COS(P) - B*COS(G*P)
Y=(A+B)*SIN(P) - B*SIN(G*P)
GOTO DRAW
TP2:
X=(A-B)*COS(P) + B*COS(H*P)
Y=(A-B)*SIN(P) - B*SIN(H*P)
DRAW:
! move last ending points to starting points
POINT'X(1)=X2 : POINT'Y(1)=Y2
X2=FIX(X+XCNTR+.5)+XOFF : Y2=FIX(Y+YCNTR+.5)+YOFF
! if first pass, don't draw, just load the values
IF Z=1 THEN GOTO NXT
POINT'X(2)=X2 : POINT'Y(2)=Y2
! plot the line with the point array
XCALL AMGSBR,G'PL,GCB,POINT'ARRAY,STATUS
NXT:
NEXT Z
END:
! turn on cursor
PRINT TAB(-1,28);
! don't print control C message
IF ERR(0)<>1 THEN ON ERROR GOTO 0
END