!*! Updated on 03-Aug-90 at 3:52 PM by Steve Archuleta; edit time: 0:05:50
!
! SINWAV
!
++INCLUDE AMGSYM.BSI

MAP1 GCB,X,56000

MAP1    DSP'MAX,F,6,200
MAP1    DSP'ARRAY
       MAP2    DSP'COUNT,B,2
       MAP2    DSP'XY(200)
               MAP3    DSP'X,B,2
               MAP3    DSP'Y,B,2

MAP1    CLEAR'MAX,F,6,200
MAP1    CLEAR'ARRAY
       MAP2    CLEAR'COUNT,B,2
       MAP2    CLEAR'XY(200)
               MAP3    CLEAR'X,B,2
               MAP3    CLEAR'Y,B,2

MAP1    POINT'MAX,F,6,200
MAP1    POINT'ARRAY
       MAP2    POINT'COUNT,B,2
       MAP2    POINTS(200)
               MAP3    POINT'X,B,2
               MAP3    POINT'Y,B,2

MAP1    HOLD'X,B,2
MAP1    HOLD'Y,B,2

MAP1    STATUS,F                !Status retruned from AMIGOS calls
MAP1    RQLC$,S,80

MAP1    PI,F
       PI      =3.141592654

!***********************************************!
SINWAV:
       ON ERROR GOTO END'IT

       PRINT   TAB(-1,0);
       GOSUB   DO'OVERHEAD
       GOSUB   DO'BOX
       GOSUB   DO'WAVE
END'IT:
       XCALL   AMGSBR,G'CLWK,GCB,STATUS
       PRINT   TAB(1,1);
       END
!***********************************************!
DO'OVERHEAD:
! Open the workstation
       XCALL   AMGSBR,G'OPWK,GCB,"",STATUS
! Clear the workstation
       XCALL   AMGSBR,G'CLRW,GCB,STATUS
! Polymarker Overhead
!       XCALL   AMGSBR,G'SPMT,GCB,2,STATUS      ! type
!       XCALL   AMGSBR,G'SPMS,GCB,20,STATUS     ! style
!       XCALL   AMGSBR,G'SPMC,GCB,3,STATUS      ! color
! Polyline Overhead
       XCALL   AMGSBR,G'SPLT,GCB,1,STATUS      ! type
       XCALL   AMGSBR,G'SPLS,GCB,0,STATUS      ! width
       XCALL   AMGSBR,G'SPLC,GCB,1,STATUS      ! color
! Text Overhead
!       XCALL   AMGSBR,G'STXF,GCB,1004,STATUS   ! font
!       XCALL   AMGSBR,G'STXC,GCB,3,STATUS      ! color
!       XCALL   AMGSBR,G'SCHH,GCB,1500,STATUS   ! height
! Fill Area Overhead
!       XCALL   AMGSBR,G'SFAC,GCB,4,STATUS      ! color
!       XCALL   AMGSBR,G'SFAS,GCB,3,STATUS      ! style
!       XCALL   AMGSBR,G'SFAI,GCB,55,STATUS     ! index



       RETURN
!***********************************************!
DO'BOX:
       POINT'COUNT     =5

       XMIN    =2000
       XMAX    =30000
       YMIN    =1000
       YMAX    =21000

       POINT'X(1)      =XMIN
       POINT'Y(1)      =YMIN
       POINT'X(2)      =XMIN
       POINT'Y(2)      =YMAX
       POINT'X(3)      =XMAX
       POINT'Y(3)      =YMAX
       POINT'X(4)      =XMAX
       POINT'Y(4)      =YMIN
       POINT'X(5)      =POINT'X(1)
       POINT'Y(5)      =POINT'Y(1)

       XCALL   AMGSBR,G'SPLC,GCB,7,STATUS
       XCALL   AMGSBR,G'PL,GCB,POINT'ARRAY,STATUS

       POINT'COUNT     =2

       POINT'X(1)      =XMIN
       POINT'X(2)      =XMAX

       XCALL   AMGSBR,G'SPLC,GCB,15,STATUS

       IKTR    =0
       FOR I=(YMIN+2000) TO (YMAX-2000) STEP 2000
               POINT'Y(1)      =I
               POINT'Y(2)      =I

               IKTR    =IKTR+1
               IF IKTR # 5 THEN                                        &
                       XCALL   AMGSBR,G'PL,GCB,POINT'ARRAY,STATUS      &
               ELSE                                                    &
                       XCALL   AMGSBR,G'SPLT,GCB,2,STATUS              : &
                       XCALL   AMGSBR,G'SPLC,GCB,7,STATUS              : &
                       XCALL   AMGSBR,G'PL,GCB,POINT'ARRAY,STATUS      : &
                       XCALL   AMGSBR,G'SPLC,GCB,15,STATUS
                       XCALL   AMGSBR,G'SPLT,GCB,1,STATUS

       NEXT I

       POINT'Y(1)      =YMIN
       POINT'Y(2)      =YMAX

       IKTR    =0
       FOR I=(XMIN+2000) TO (XMAX-2000) STEP 2000
               POINT'X(1)      =I
               POINT'X(2)      =I
               IKTR    =IKTR+1
               IF IKTR # 7 THEN                                        &
                       XCALL   AMGSBR,G'PL,GCB,POINT'ARRAY,STATUS      &
               ELSE                                                    &
                       XCALL   AMGSBR,G'SPLT,GCB,2,STATUS              : &
                       XCALL   AMGSBR,G'SPLC,GCB,7,STATUS              : &
                       XCALL   AMGSBR,G'PL,GCB,POINT'ARRAY,STATUS      : &
                       XCALL   AMGSBR,G'SPLC,GCB,15,STATUS
                       XCALL   AMGSBR,G'SPLT,GCB,1,STATUS



       NEXT I



       RETURN
!***********************************************!
LOAD'POINTX:
       POINT'COUNT             =0
       FOR I=0 TO (2*PI) STEP ((2*PI)/100)
               POINT'COUNT             =POINT'COUNT+1
               POINT'X(POINT'COUNT)    =XAXIS
               XAXIS                   =XAXIS+XINC
       NEXT I
       POINT'COUNT     =POINT'COUNT-1
       RETURN

GET'POINTY:
       Y       =SIN(X)
       POINT'Y(PLT'KTR)=YAXIS+INT(Y*YINC)

       X       =X+((2*PI)/100)
       LOOP'KTR=LOOP'KTR+1
       IF LOOP'KTR>200 THEN EOF'FLAG=1

       RETURN
!***********************************************!
DO'WAVE:


       YAXIS   =(((YMAX-YMIN)/2)+YMIN)
       XAXIS   =XMIN
       YINC    =8000
       XINC    =(XMAX-XMIN)/100

       GOSUB   LOAD'POINTX
       POINT'MAX=POINT'COUNT

       PLT'KTR =POINT'MAX
       GOSUB   GET'POINTY
       CLR'KTR =0

WAVE'LOOP:
       PLT'KTR =PLT'KTR+1
       IF PLT'KTR > POINT'MAX THEN                     &
               POINT'Y(1)      =POINT'Y(POINT'MAX)     : &
               PLT'KTR=2

       GOSUB   GET'POINTY
       IF EOF'FLAG=1 THEN GOTO END'LOOP
       GOSUB   PLOT'WAVE
       GOSUB   CLEAR'WAVE
       GOTO    WAVE'LOOP
END'LOOP:
       RETURN
!***********************************************!
PLOT'WAVE:
       DSP'COUNT       =2
       DSP'X(1)        =POINT'X(PLT'KTR-1)
       DSP'Y(1)        =POINT'Y(PLT'KTR-1)
       DSP'X(2)        =POINT'X(PLT'KTR)
       DSP'Y(2)        =POINT'Y(PLT'KTR)

       XCALL   AMGSBR,G'SPLC,GCB,1,STATUS
       XCALL   AMGSBR,G'PL,GCB,DSP'ARRAY,STATUS

       IF PLT'KTR>(POINT'MAX-6)  THEN CLR'FLAG=1

       RETURN
!***********************************************!
CLEAR'WAVE:
       IF CLR'FLAG # 1 THEN RETURN

       CLR'KTR         =CLR'KTR+1

       DSP'COUNT       =2
       DSP'X(1)        =POINT'X(CLR'KTR-1)
       DSP'Y(1)        =POINT'Y(CLR'KTR-1)
       DSP'X(2)        =POINT'X(CLR'KTR)
       DSP'Y(2)        =POINT'Y(CLR'KTR)

       XCALL   AMGSBR,G'SPLC,GCB,0,STATUS
       XCALL   AMGSBR,G'PL,GCB,DSP'ARRAY,STATUS

       RETURN

!***********************************************!

!***********************************************!