home *** CD-ROM | disk | FTP | other *** search
- PROGRAM TUTILS
- C tests all the Utils library
- C needs the 'utils' library
- DIMENSION III(2),IREGS(0:7)
- CHARACTER*8 FRED
- CHARACTER*12 FILE
- CHARACTER*25 CDATE
- LOGICAL SWIF77
- DATA FRED/'FRED '/
- C tests the operations in utils assembler library
- C test CDATE
- WRITE (*,103)CDATE()
- 103 FORMAT(' today''s date/time is: ',A)
- C test IBITS
- WRITE(*,102)IBITS(?I12345678,4,10)
- 102 FORMAT(' 10-byte at 4 in &12345678 is ',Z8)
- C test LOC
- WRITE(*,*)' LOC(1),LOC(2) ',LOC(III(1)),LOC(III(2))
- C test LOCC
- WRITE(*,*)' F(RED) at ',LOCC(FRED(1:1)),
- + ', (FRE)D at ',LOCC(FRED(4:4))
- WRITE(*,*)' Testing LNBLNK'
- WRITE(*,*)' FRED is ',LNBLNK(FRED),
- +' bytes long, press a key to continue'
- I=IGET()
- C test SWIF77 with OS_GBPB to readĀ file names in library
- N=0
- IREGS(0)=9
- IREGS(1)=LOCC('$.LIBRARY'//?H00)
- IREGS(2)=LOCC(FILE)
- IREGS(3)=1
- IREGS(4)=0
- IREGS(5)=11
- IREGS(6)=0
- WRITE(*,*)' files in $.LIBRARY are:'
- 2 IF(SWIF77(?I0C,IREGS,IFLAG)) CALL ERROR
- IF(IREGS(4).LT.0.OR.IREGS(3).LE.0) GO TO 4
- N=N+1
- I=INDEX(FILE,?H00)
- WRITE(*,*)' ',FILE(1:I-1)
- GO TO 2
- 4 WRITE(*,*)' number of files = ',N
- WRITE(*,*)' now cause SWI error by reading from unopened file'
- CALL OSCLI('CLOSE')
- C file handle
- IREGS(1)=20
- IF(SWIF77(?I0A,IREGS,IFLAG)) CALL ERROR
- 10 WRITE(*,*)'press any legal key 0 to end'
- C test IGET
- J=IGET()
- WRITE(*,*)' ASCII value is ',J,' key is ',CHAR(J)
- IF(J.EQ.27) STOP'Escape'
- IF(J.NE.48)GOTO10
- C tes INKEY
- WRITE(*,*)' testing INKEY....'
- 20 J=INKEY(260)
- WRITE(*,*)CHAR(7)
- IF(J.GE.0)WRITE(*,*)' ASCII value is ',J,' key is ',CHAR(J)
- IF(J.NE.48)GOTO20
- C test -ve INKEYs and -256
- WRITE(*,*)' testing -ve INKEY...'
- 30 DO 36 I=1,124
- IF(INKEY(-I).NE.0)THEN
- WRITE(*,*)' key pressed I=',I
- IF(I.EQ.40)GOTO 38
- ENDIF
- 36 CONTINUE
- GOTO30
- 38 WRITE(*,*)' testing -256 ',INKEY(-256)
- READ(*,*)KMC
- C TEST Mouse 1st turn it on
- WRITE(*,101)12
- CALL OSCLI('POINTER')
- C CALL OSCLI('MOUSE ON')
- 40 CALL MOUSE(MX,MY,MBUTN)
- WRITE(*,101)31,0,0,Mx,My,MButn
- 101 FORMAT($,3A1,' Mouse Mx,My,MButn ',3I4)
- IF(INKEY(0).NE.48)GOTO40
- C now test the sorting
- CALL TSORT
- STOP 'OK'
- END
- SUBROUTINE ERROR
- CHARACTER*50 REPORT
- CALL SWIERR(IERR,REPORT,LEN)
- WRITE(*,*)' SWIF77 reports error ',IERR
- WRITE(*,101)REPORT(1:LEN)
- 101 FORMAT(1X,A)
- RETURN
- END
- SUBROUTINE TSORT
- PARAMETER(N2=10000,N=N2+N2)
- DOUBLE PRECISION D(N2)
- REAL R(N)
- INTEGER I(N),INDEX(N)
- EQUIVALENCE(D(1),R(1),I(1))
- DO 10 J=1,N
- 10 INDEX(J)=J
- PRINT 101,N2
- 101 FORMAT(/' creating',I6,' random double precision words')
- DO 20 J=1,N2,2
- D(J)=RND01()-0.5
- D(J+1)=D(J)+(RND01()-0.5)*5.D-6
- 20 CONTINUE
- PRINT *,' sorting'
- CALL QSORTD(D,INDEX,N2)
- PRINT *,' checking'
- DO 30 J=1,N2-1
- IF(D(INDEX(J)).GT.D(INDEX(J+1))) THEN
- PRINT 102,J,INDEX(J),INDEX(J+1),D(INDEX(J)),D(INDEX(J+1))
- 102 FORMAT(' sort failed ',3I6,2F18.15)
- ENDIF
- 30 CONTINUE
- PRINT 103,N
- 103 FORMAT(/' creating',I6,' random single precision words')
- DO 40 J=1,N
- R(J)=(RND01()-0.5)*10.
- 40 CONTINUE
- PRINT *,' sorting'
- CALL QSORTR(R,INDEX,N)
- PRINT *,' checking'
- DO 50 J=1,N-1
- IF(R(INDEX(J)).GT.R(INDEX(J+1))) THEN
- PRINT 104,J,INDEX(J),INDEX(J+1),R(INDEX(J)),R(INDEX(J+1))
- 104 FORMAT(' sort failed ',3I6,2F13.9)
- ENDIF
- 50 CONTINUE
- PRINT 105,N
- 105 FORMAT(/' sorting',I6,' random integer words')
- DO 60 J=1,N
- INDEX(J)=J
- 60 CONTINUE
- CALL QSORTI(I,INDEX,N)
- PRINT *,' checking'
- DO 70 J=1,N-1
- IF(I(INDEX(J)).GT.I(INDEX(J+1))) THEN
- PRINT 106,J,INDEX(J),INDEX(J+1),I(INDEX(J)),I(INDEX(J+1))
- 106 FORMAT(' sort failed ',3I6,2I12)
- ENDIF
- 70 CONTINUE
- RETURN
- END
-