Fortran: 06.03/P04

This is Fortran source code, based on the abstract design for this program. You may return to the documentation for the module containing this program, or to the entire hierarchical table of topics covered by the PVT.


C  *********************************************************
C  *                                                       *
C  *    TEST NUMBER: 06.03/04                              *
C  *    TEST TITLE : Update status of INPUT workstation    *
C  *                 transformation                        *
C  *                                                       *
C  *    PHIGS Validation Tests, produced by NIST           *
C  *                                                       *
C  *********************************************************

      COMMON /GLOBNU/ CTLHND, ERRSIG, ERRFIL, IERRCT, UNERR,
     1        TESTCT, IFLERR, PASSSW, ERRSW, MAXLIN,
     2        CONID, MEMUN, WKID, WTYPE, GLBLUN, INDLUN,
     3        DUMINT, DUMRL
      INTEGER         CTLHND, ERRSIG, ERRFIL, IERRCT, UNERR,
     1        TESTCT, IFLERR, PASSSW, ERRSW, MAXLIN,
     2        CONID, MEMUN, WKID, WTYPE, GLBLUN, INDLUN,
     3        DUMINT(20), ERRIND
      REAL    DUMRL(20)

      COMMON /GLOBCH/ PIDENT,    GLBERR,    TSTMSG,     FUNCID,
     1                DUMCH
      CHARACTER       PIDENT*40, GLBERR*60, TSTMSG*900, FUNCID*80,
     1                DUMCH(20)*20

C deferral mode
      INTEGER    PASAP,     PBNIG,     PBNIL,     PASTI,     PWAITD
      PARAMETER (PASAP = 0, PBNIG = 1, PBNIL = 2, PASTI = 3, PWAITD = 4)
C modification mode
      INTEGER    PNIVE,     PUWOR,     PUQUM
      PARAMETER (PNIVE = 0, PUWOR = 1, PUQUM = 2)
C update state
      INTEGER    PNPEND,     PPEND
      PARAMETER (PNPEND = 0, PPEND = 1)

      INTEGER    IWK, ONWK, OWKID, OCONID, OWTYPE, WTUPD, IDUM1,IX
      CHARACTER  OWCAT*1, MSG*300
      REAL       OCWIN(6), OCVWP(6), RQWIN(6), RQVWP(6)
      REAL       NWWIN(6), NWVWP(6), CUWIN(6), CUVWP(6)
      LOGICAL    RAREQ

      CALL INITGL ('06.03/04')

C open PHIGS
      CALL XPOPPH (ERRFIL, MEMUN)

C  Get list of accessible workstations of category INPUT,
C  one element at a time.  ONWK is number of elements in
C  list.
      CALL MULTWS (0, 'i', ONWK, OWKID, OCONID, OWTYPE, OWCAT)
      IF (ONWK .LE. 0) THEN
         CALL INMSG ('No INPUT workstations to be tested.')
         GOTO 666
      ENDIF

      CALL SETMSG ('15 20', 'For all workstations of category '       //
     1             'INPUT, the workstation transformation update '    //
     2             'state should always be NOTPENDING and reported '  //
     3             'as such.')

C  for each iwk in list of INPUT workstations:
      DO 100 IWK = 1,ONWK
         CALL MULTWS (IWK, 'i', IDUM1, OWKID, OCONID, OWTYPE, OWCAT)
         CALL POPWK (OWKID, OCONID, OWTYPE)

C  <Set display update state> to WAIT, NIVE to try to defer updates
         CALL PSDUS (OWKID, PWAITD, PNIVE)

C     <inquire workstation representation 3> to determine original
C        current state: ocwin = 3D window
C                       ocvwp = 3D viewport
         CALL PQWKT3 (WKID, ERRIND, WTUPD, RQWIN, OCWIN, RQVWP, OCVWP)
         CALL CHKINQ ('pqwkt3', ERRIND)

C  alter workstation transformation:
C  <set workstation window 3>   = nwwin = ocwin / 2
C  <set workstation viewport 3> = nwvwp = ocvwp / 2
         DO 300 IX=1,6
            NWWIN(IX) = OCWIN(IX) / 2.0
            NWVWP(IX) = OCVWP(IX) / 2.0
300      CONTINUE

C  <set workstation window 3>
         CALL PSWKW3 (WKID, NWWIN)
C  <set workstation viewport 3>
         CALL PSWKV3 (WKID, NWVWP)

C     <inquire workstation representation 3> to determine new
C        current state: wtupd = workstation transformation update state
C                       cuwin = current 3D window
C                       cuvwp = current 3D viewport
         CALL PQWKT3 (WKID, ERRIND, WTUPD, RQWIN, CUWIN, RQVWP, CUVWP)
         CALL CHKINQ ('pqwkt3', ERRIND)

         CALL PCLWK (OWKID)

         IF (WTUPD .NE. PNPEND) THEN
            CALL FAIL
            WRITE (MSG, '(A,I5)')
     1            'Update state not= NOTPENDING:', WTUPD
            CALL INMSG (MSG)
            GOTO 666
         ENDIF

         IF ( RAREQ(6, CUWIN,   NWWIN,  0.0, 0.0) .AND.
     1        RAREQ(6, CUVWP,   NWVWP,  0.0, 0.0) )  THEN
C           OK so far
         ELSE
            CALL FAIL
            CALL INMSG ('Current values not those most recently set.')
            GOTO 666
         ENDIF

C  next iwk
100   CONTINUE
      CALL PASS

C  done:
666   CONTINUE
      CALL ENDIT
      END