      PROGRAM TWIMP16
C
C        Some (new) routines to test:
C           WPFTYP,  WPGTMS,  WPMNWS,  WPSTIC
C used in PolyMain,  HELPM5, Sprites,  SETCHO
C
C        set up the desk-top
      CALL SETUP
C        go into the wimp loop (without null calls)
      CALL WPLOOP(1)
C        that's all we can do here
      END
C
      SUBROUTINE SETUP
C        here we make the windows and icons
C        keep their handles in common
      COMMON/HANDLE/ IWH,ICH,ICM
      COMMON/MENUS/MENU1(19),MENU2(25)
      CHARACTER TITLE*16
      SAVE TITLE
C        initialise the wimp
      CALL WPINIT('TWIMP16')
C        make the window, 
      CALL WPMNWS(64,64)
      TITLE = 'Test Wimp #16'//CHAR(0)
      CALL WPMKNW(400,400,200,0,400,400,0,0,TITLE,IWH)
C        make the icon
      CALL WPADTI(IWH,16,-64,256,48,'Colour Me',0,ICH)
C        make a menu tree
      CALL WPMKMB('TW16,next,quit',MENU1)
      CALL WPMKMB('next,red,green,blue',MENU2)
      CALL WPAM2M(MENU2,MENU1,0)
C        put menu icon in window
      CALL WPADNI(IWH,320,-64,10,' ',ICM)
C        open the window
      CALL WPOPNW(IWH)
C        direct PolyData to WQRFIL
      CALL WPFTYP(?I0152)
      RETURN
      END
C
      SUBROUTINE WQCLIK(IWHAN,ICONH,IX,IY,IBUTT)
      COMMON/HANDLE/ IWH,ICH,ICM
      COMMON/MENUS/MENU1(19),MENU2(25)
C             flip the state of the sprites for demonstration
      IF(IWH.EQ.IWHAN) THEN
        IF(ICH.EQ.ICONH) THEN
C             forground colour
          KF = RND01()*16
          CALL WPSTIC(IWH,ICH,KF)
   10     KB = RND01()*16
          IF(KB.EQ.KF) GO TO 10
          CALL WPSTIC(IWH,ICH,KB+128)
        ELSE IF(ICM.EQ.ICONH) THEN
          CALL WPSHWM(MENU1,IX,IY)
        ENDIF
      ENDIF
      RETURN
      END
C
      SUBROUTINE WQCLSW(IWHAN)
      COMMON/HANDLE/ IWH,ICH,ICM
      IF(IWH.EQ.IWHAN) CALL WPQUIT
      RETURN
      END
C
      SUBROUTINE WQHELP(IWHAN,ICONH,IX,IY,SHELP)
      COMMON/HANDLE/ IWH,ICH,ICM
      COMMON/MENUS/MENU1(19),MENU2(25)
      DIMENSION ITEMS(3)
      CHARACTER SHELP*(*)
      IF(IWHAN.EQ.IWH) THEN
        SHELP = 'This is TestWimp 16'
        IF(ICM.EQ.ICONH) THEN
          SHELP = 'Click here for a menu'
        ENDIF
      ELSE IF(IWHAN.EQ.MENU1(1) .OR. IWHAN.EQ.MENU2(1)) THEN
        SHELP = 'This is a menu'
        CALL WPGTMS(ITEMS,NMENU)
        L = 14
        DO 10 I=1,NMENU
          WRITE(SHELP(L+1:),101)I,ITEMS(I)
  101     FORMAT('|Mmenu',I2,', entry',I2)
          L = L + 17
   10   CONTINUE
      ENDIF
      RETURN
      END
C
      SUBROUTINE WQMENU(MB,ITEMS,NMENU)
      COMMON/MENUS/MENU1(19),MENU2(25)
C            just do quit
      IF(MB.EQ.MENU1(1) .AND. NMENU.EQ.1 .AND. ITEMS.EQ.1) CALL WPQUIT
      RETURN
      END
C
      SUBROUTINE WQPLOT(IWHAN,IX1,IY1,IX2,IY2)
      COMMON/HANDLE/ IWH,ICH,ICM
      IF(IWH.EQ.IWHAN) THEN
        CALL WPTEXT(16,-128,'Try shrinking window')
        CALL WPTEXT(16,-192,'Double-click PolyData') 
      ENDIF
      RETURN
      END
C
      SUBROUTINE WQRFIL(IWH,ICH,ISIZ,ITYP,SFILE)
      CHARACTER*(*) SFILE*(*), TEXT*32
      IF(IWH.EQ.0 .AND. ICH.EQ.0 .AND. ITYP.EQ.?I0152) THEN
        L = LEN(SFILE)
        DO 10 I=L,1,-1
          IF(SFILE(I:I).EQ.'.') GO TO 20
   10   CONTINUE
        I = 0
   20   WRITE(TEXT,101)SFILE(I+1:L),ISIZ
  101   FORMAT('sent file ',A,', leng ',I5)
        CALL WPERR(1,TEXT,IDUM)
      ENDIF
      RETURN
      END
