home *** CD-ROM | disk | FTP | other *** search
- PROGRAM TGRAPHICS
- C tests all Graphics library
- C needs 'graphics' and 'utils' libraries
- COMMON/MTYPE/MONIT
- DIMENSION KPX(6),KPY(6)
- DIMENSION KFX(10),KFY(10)
- DIMENSION IBUF(32)
- CHARACTER*1 QUEST,COLR(32)
- C
- LOGICAL ANS, OSCLI
- C
- DATA KPX/300,400,500,600,500,400/
- DATA KPY/700,800,800,700,600,600/
- DATA KFX/ 0, 0,100,200,200,164,164,200,200, 0/
- DATA KFY/ 0,200,100,200,100,100, 64, 64, 0, 0/
- DO 5 I=1,16
- IBUF(I )=I-1
- IBUF(I+16)=I+15
- COLR(I )=CHAR(I-1)
- 5 COLR(I+16)=CHAR(I-1)
- 10 PRINT *,' Ordinary or Multisync monitor (O/M)'
- READ (*,101,ERR=10)QUEST
- 101 FORMAT(A)
- IF(QUEST.NE.'O'.AND.QUEST.NE.'M') GO TO 10
- IF(QUEST.EQ.'O') THEN
- M=12
- MONIT=0
- IX1=30
- IY1=31
- IX2=79
- IY2=28
- ELSE
- ANS=OSCLI('CO.MONITORTYPE 1')
- M=20
- IX1=20
- IY1=63
- IX2=79
- IY2=58
- MONIT=1
- ENDIF
- NCOLS=16
- CALL MODE(M)
- DO 12 I=8,NCOLS-1
- C set up colours
- IGRAY=16*I
- CALL VDU19(I,16,IGRAY,IGRAY,IGRAY)
- 12 CONTINUE
- CALL TAB(20,0)
- WRITE(*,*)'MODE ',M,' ',NCOLS,'Colours'
- CALL TWIND(IX1,IY1,IX2,IY2)
- WRITE(*,*)'Text window at ',IX1,IY1,IX2,IY2
- CALL COLOUR(2)
- WRITE(*,*)'cursor ON, press a key to turn it off'
- IF(IGET().EQ.27) STOP 'ESC'
- ANS=.FALSE.
- CALL CURSOR(ANS)
- WRITE(*,*)'Press a key to turn cursor on again'
- IF(IGET().EQ.27) STOP 'ESC'
- CALL COLOUR(7)
- ANS=.TRUE.
- CALL CURSOR(ANS)
- WRITE(*,*)'Press a key to test CLS'
- IF(IGET().EQ.27) STOP 'ESC'
- CALL CLS
- 14 WRITE(*,*)'Enter a number to test ModeVar(0-12)'
- READ(*,*,ERR=14)MVR
- IF(MVR.GT.12) GO TO 14
- IF(MVR.GT.-1) THEN
- CALL CLS
- PRINT *,' ModeVar(',MVR,')=',MODEVAR(-1,MVR)
- GO TO 14
- ENDIF
- 15 WRITE(*,*)'Enter a number to test MVDUVar(128-257)'
- READ(*,*,ERR=15)MVR
- IF(MVR.GT.257) GO TO 15
- IF(MVR.GT.127) THEN
- CALL CLS
- PRINT *,' MVDUVar(',MVR,')=',MVDUVAR(MVR)
- GO TO 15
- ENDIF
- WRITE(*,*)'Press a key to test FCOL16'
- IF(IGET().EQ.27) STOP 'ESC'
- C now test fcol16
- DO 16 IY=11,27
- CALL FCOL16(IY,IY ,16,1,IBUF(IY-10),1,COLR ,0)
- CALL FCOL16(IY,IY+32,16,1,IBUF(IY-10),1,CHAR(0),0)
- 16 CONTINUE
- C now test rectangles
- LX=200
- LY=100
- KOL=1
- CALL GCOL(0,KOL)
- CALL RECTAN(0,0,LX,LY,.FALSE.)
- CALL WOG(4,LY-32,'Outline rectangle')
- CALL WOC(4,32,KOL)
- KOL=2
- CALL GCOL(0,KOL)
- CALL ORIGIN(LX,LY)
- CALL RECTAN(0,0,LX,LY,.FALSE.)
- CALL WOG(4,LY-32,'Outline rectangle')
- CALL WOC(4,32,KOL)
- CALL MOVE(-LX+4,LY-4)
- WRITE(*,*)' Origin at ',LX,LY
- CALL ORIGIN(0,0)
- C test of move origin completed
- WRITE(*,*)'Press a key to continue'
- IF(IGET().EQ.27) STOP 'ESC'
- IS=74
- IX=40
- IY=1024-128
- CALL WOG(IX,IY+IS+32,'Filled rectangles')
- DO 20 I=0,NCOLS-1
- IF(I.GT.7)THEN
- C set up colours
- IGRAY=16*I
- CALL VDU19(I,16,IGRAY,IGRAY,IGRAY)
- ENDIF
- CALL GCOL(0,I)
- CALL RECTAN(IX,IY,IX+IS,IY+IS,.TRUE.)
- CALL MOVE(IX,IY-32)
- CALL GCOL(0,7)
- CALL VDU(5)
- WRITE(*,*)I
- CALL VDU(4)
- 20 IX=IX+IS
- WRITE(*,*)'Press a key to interchange colours 2 and 6'
- IF(IGET().EQ.27) STOP 'ESC'
- CALL VDU19(2,6,0,0,0)
- C changing physical and logical colours
- CALL VDU19(6,2,0,0,0)
- WRITE(*,*)'Press a key to continue'
- IF(IGET().EQ.27) STOP 'ESC'
- C now circles
- IX=200
- IY=300
- IR=96
- KOL=3
- CALL GCOL(0,KOL)
- CALL CIRCLE(IX,IY,IR,.FALSE.)
- CALL WOG(IX-IR+32,IY,'Outline circle')
- CALL WOC(IX-IR+32,IY-64,KOL)
- KOL=4
- CALL GCOL(0,KOL)
- IY=IY+IR+IR+8
- CALL CIRCLE(IX,IY,IR,.TRUE.)
- CALL GCOL(0,7)
- CALL WOG(IX-IR+32,IY,'Filled circle')
- CALL WOC(IX-IR+32,IY-64,KOL)
- C area fill general
- CALL ORIGIN(20,600)
- KOL=KOL+1
- CALL GCOL(0,7)
- CALL POLY(10,KFX,KFY,.FALSE.)
- CALL GCOL(0,KOL)
- CALL FILL(KFX(1)+20,KFY(1)+20)
- CALL GCOL(0,7)
- CALL WOG(0,+64,'Area fill')
- CALL WOC(0,32,KOL)
- CALL ORIGIN(0,0)
- C area fill with triangles
- KOL=KOL+1
- CALL GCOL(0,KOL)
- CALL POLY(6,KPX,KPY,.TRUE.)
- CALL GCOL(0,7)
- CALL WOG(KPX(1),KPY(1)-32,'Triangle fill')
- CALL WOC(KPX(1),KPY(1)-64,KOL)
- WRITE(*,*)'Press a key for graphics window'
- IF(IGET().EQ.27) STOP 'ESC'
- C make graphics window
- IX1=500
- IY1=300
- IX2=1200
- IY2=700
- CALL GWIND(IX1,IY1,IX2,IY2)
- CALL WOG(IX1+32,IY2-32,'Graphics window here')
- WRITE(*,*)'Press a key to test CLG'
- IF(IGET().EQ.27) STOP 'ESC'
- KOL=128+9
- CALL GCOL(0,KOL)
- C test CLG
- CALL CLG
- PRINT *,'Press a key to test LINE'
- IF(IGET().EQ.27) STOP 'ESC'
- C test LINE
- CALL GCOL(0,1)
- CALL LINE(IX1,IY1,IX2,IY2)
- PRINT *,'Press to test DRAW etc'
- IF(IGET().EQ.27) STOP 'ESC'
- CALL PLOT(4,IX1,IY2)
- CALL DRAW(IX2,IY1)
- CALL GCOL(3,7)
- CALL PLOT85(IX2,IY2)
- KOL=0
- CALL GCOL(0,KOL)
- C test SPOT
- WRITE(*,*)'Press a key to test SPOTS'
- IF(IGET().EQ.27) STOP 'ESC'
- DO 40 I=IX1+50, IX2-50, 50
- DO 40 J=IY1+50, IY2-50, 50
- 40 CALL SPOT(I,J)
- CALL VDU23(254,0,127,36,36,36,36,36,0)
- WRITE(*,102)254
- 102 FORMAT(' Printing a Pi here: ',A1)
- WRITE(*,*)'Press a key to test big characters'
- IF(IGET().EQ.27) STOP 'ESC'
- CALL GCOL(0,1)
- CALL WOGBIG(800,400,'BIG',4)
- WRITE(*,*)'Press a key to do 256 colours'
- IF(IGET().EQ.27) STOP 'ESC'
- 50 CALL TG256(MONIT)
- IF (MONIT.EQ.1) THEN
- ANS=OSCLI('CO.MONITORTYPE 4')
- CALL MODE(20)
- ENDIF
- STOP
- END
- SUBROUTINE TG256(MONIT)
- DIMENSION IBUF(512)
- CHARACTER*256 KOLOUR(2)
- DO 2 I=1,512
- IBUF(I)=I-1
- 2 CONTINUE
- CALL COLSET(KOLOUR)
- KOLOUR(2)=KOLOUR(1)
- IF(MONIT.EQ.1) THEN
- IYSIZ=2
- M=21
- ELSE
- IYSIZ=1
- M=15
- ENDIF
- CALL MODE(M)
- C**** TEST GCOLT HERE ****
- DO 5 I=0,60,4
- DO 5 J=0,3
- DO 5 IT=0,192,64
- CALL GCOLT(3,I+J,IT)
- CALL CIRCLE(I*20+40,J*64+IT*4+32,40,.TRUE.)
- 5 CONTINUE
- PRINT *,'Press a key to continue'
- IF(IGET().EQ.27) STOP 'ESC'
- CALL CLG
- CALL COLORT(42,128)
- PRINT 101,M
- 101 FORMAT(21X,'256 Colour mode',I3)
- DO 50 IB=0,3
- IYS=8*IB*IYSIZ
- CALL TAB(15,IYS+3*IYSIZ-2)
- CALL TXTCOL(0,0,IB,3)
- PRINT 102,IB
- 102 FORMAT('Blue =',I2)
- CALL COLORT(63,192)
- PRINT 103
- 103 FORMAT(' \Red'/' G')
- DO 10 IR=0,3
- CALL TXTCOL(IR,0,IB,3)
- CALL WOT(IR*20+12,IYS+3*IYSIZ-1,CHAR(IR+48))
- 104 FORMAT($,I1)
- 10 CONTINUE
- DO 40 IG=0,3
- CALL TXTCOL(0,IG,IB,3)
- CALL WOT(2,IYS+IYSIZ*IG+4*IYSIZ,CHAR(IG+48))
- IX=64
- IY=864-IB*256-IG*32
- DO 30 IR=0,3
- DO 20 IT=0,3
- CALL GRFCOL(0,IR,IG,IB,IT)
- CALL RECTAN(IX,IY,IX+64,IY+32,.TRUE.)
- 20 IX=IX+64
- 30 IX=IX+64
- 40 CONTINUE
- 50 CONTINUE
- CALL TAB(40,0)
- PRINT *,'Press a key to continue'
- IF(IGET().EQ.27) STOP 'ESC'
- NY=MODEVAR(-1,12)+1
- CALL CLG
- CALL FCOL256(0,0,512,NY,IBUF,0,KOLOUR,1)
- PRINT *,'Press a key to end'
- IF(IGET().EQ.27) STOP 'ESC'
- RETURN
- END
- SUBROUTINE WOC(IX,IY,KOL)
- CHARACTER*9 COLOUR
- DATA COLOUR(1:6)/'Colour'/
- C writes out colour number used KOL at position IX,IY
- WRITE(COLOUR(7:9),101)KOL
- 101 FORMAT(I3)
- CALL WOG(IX,IY,COLOUR)
- RETURN
- END
- SUBROUTINE COLSET(COLOUR)
- C sets default colours for FCL256
- CHARACTER*256 COLOUR
- DIMENSION IC(16),IND(64)
- C BLAC R G B
- C BR RR RG GG GB BB
- C BBG BGG GGG GGR GBR GRR RRR RRB RBB BBB
- C BBBG BBGG BGGG GGRB GGGR GGRR GRRR RRBG RRRB RRBB RBBB BBRG
- DATA IND/ 0, 4, 32, 8,
- + 12, 16, 36, 64, 40, 128,
- + 160, 72, 96, 68, 44, 48, 20, 24, 132, 136,
- + 168, 192, 104, 76, 100, 80, 52, 56, 28, 144, 140, 164,32*0/
- C
- DATA IC/0,0,0,1,2,5,11,21,33,45,55,61,64,65,65,65/
- C
- DO 10 I=1,32
- 10 IND(I+32)=252-IND(33-I)
- K=0
- DO 40 I=1,13
- DO 30 J=0,3
- J1=I+J
- IC1=IC(J1)
- IF(IC1.LE.0.OR.IC1.GT.64)GOTO30
- IC2=IC(J1+1)-1
- DO 20 I1=IC1,IC2
- K=K+1
- 20 COLOUR(K:K)=CHAR(IND(I1)+3-J)
- 30 CONTINUE
- 40 CONTINUE
- IF(K.NE.256)STOP 'K > 256'
- DO 60 I=1,255
- DO 50 J=I+1,256
- IF(COLOUR(I:I).EQ.COLOUR(J:J))
- 1 PRINT*,' GOof I,J,COLOUR',I,J,COLOUR(I:I)
- 50 CONTINUE
- 60 CONTINUE
- RETURN
- END
-
-