home *** CD-ROM | disk | FTP | other *** search
- C LOADCC: load nslib and set cc_display flag
- C VIDEO: load video drive file and get parmeters
- C SCREEN: set current display mode TEXT or GRAPHICS
- C CLSG: clear screen within graphics area
- C CLST: clear text area
- C LLIN: draw line in absroulate screen cordinate
- C LINE: draw line in mapping aspect ratio
- C WGRAP: set graphics limit area
- C WTEXT: set text limit area
- C QUIT: recover to normal display mode
- C CIRCLE: draw arc or circle
- C POS: read current cursor position
- C LOCATE: set current cursor position
- C RCORD: read current cordinary value
- C WCORD: set current cordinary value
- C INTO: return cursor to text area
- C SSTEP: set move cursor step and display cord value flag
- C DRAWC: draw cursor line
-
- C function key:
- C PgUp: increase step PgDn: decrease step
- C move cursor key: move cordinary axis line
-
-
- C CM---color max XM,YM: width and higth of screen
- C CHX,CHY: text colume and line number
- C XB,YB: aspect ratio GR: ground color
-
- INTEGER*2 C,XXA,YYA,XXB,YYB,XM,YM,CM,CHX,CHY,XB,YB,GR
- INTEGER*2 XW1,YW1,XW2,YW2,XCW1,YCW1,XCW2,YCW2,X00,Y00
- INTEGER*2 X0,Y0,R,TH1,TH2,CHLIN,CDX,CDY,CCX,CCY,XCC,YCC,CCC,FCC
- CHARACTER*10 CMD,CT1,CT11,CT2,CT22,CT3,CT33,CT4,CT44,CT5,CT55
- CHARACTER*10 CT6,CT66,CT7,CT77,CT8,CT88,CT9,CT99
- ICF=0
- CALL VIDEO(CM,GR,XM,YM,CHX,CHY,XB,YB)
- IF(CM.EQ.0) GOTO 1000
- WRITE(*,*)'0. not cc mode 1. small CC mode 2. large CC'
- READ(*,*)ICC
- IF(ICC.EQ.0) GOTO 111
- IF(ICC.EQ.2) THEN
- CALL SETLC
- GOTO 110
- ENDIF
- CALL LOADCC(ICC)
- IF(ICC.EQ.0) GOTO 1000
- 110 ICF=1
- 111 CHLIN=4+ICF*2
- YM=YM/8
- YM=YM*8
- TH1=0
- TH2=360
- CDX=20
- CDY=0
- XCC=0
- YCC=0
- C=1
- CALL SCREEN(C)
- CALL CLSG
- C=CM
- IF(GR.EQ.CM) C=C-1
- CCC=CM+256
- FCC=0
- XCOD=XM/2.
- YCOD=YM/2.
- CALL WCORD(XCOD,YCOD)
- XW1=0
- YW1=0
- XW2=XM
- YW2=YM-8*CHLIN-8
- CALL LLIN(XW1,YW2,XW2,YW2,C)
- CALL WGRAP(XW1,YW1,XW2,YW2)
- CALL CLSG
- CALL DRAWC
- XCW1=0
- YCW1=CHY-CHLIN
- XCW2=CHX
- YCW2=CHY
- CALL WTEXT(XCW1,YCW1,XCW2,YCW2)
- XSTEP=10.
- IPSX=CHX-25
- IPSY=0
- CALL SSTEP(XSTEP,1.,IPSX,IPSY)
- CT1='QUIT'
- CT11='quit'
- CT2='LINE'
- CT22='line'
- CT3='COLOR'
- CT33='color'
- CT4='CIRCLE'
- CT44='circle'
- CT5='CLS'
- CT55='cls'
- CT6='MOVE'
- CT66='move'
- CT7='DEMO'
- CT77='demo'
- CT8='ROTATE'
- CT88='rotate'
- CT9='ADD'
- CT99='add'
- IF(ICF.EQ.0) WRITE(*,*)'FORTRAN77 graphics example.'
- IF(ICF.NE.0) WRITE(*,*)'FORTRAN77 ╗µ═╝╩╛╖╢▒φ╤▌.'
- 10 IF(ICF.EQ.0) WRITE(*,'(1X,9HCommand: ,\)')
- IF(ICF.NE.0) WRITE(*,'(1X,10H╩Σ╚δ├ⁿ┴ε: ,\)')
- FCC=1
- READ(*,'(20A)')CMD
- IF(CMD.EQ.CT1.OR.CMD.EQ.CT11) GOTO 200
- IF(CMD.EQ.CT2.OR.CMD.EQ.CT22) GOTO 100
- IF(CMD.EQ.CT3.OR.CMD.EQ.CT33) GOTO 400
- IF(CMD.EQ.CT4.OR.CMD.EQ.CT44) GOTO 500
- IF(CMD.EQ.CT5.OR.CMD.EQ.CT55) GOTO 600
- IF(CMD.EQ.CT6.OR.CMD.EQ.CT66) GOTO 700
- IF(CMD.EQ.CT7.OR.CMD.EQ.CT77) GOTO 800
- IF(CMD.EQ.CT8.OR.CMD.EQ.CT88) GOTO 850
- IF(CMD.EQ.CT9.OR.CMD.EQ.CT99) GOTO 710
- GOTO 300
- 100 WRITE(*,'(1X,12HFirst point:\)')
- READ(*,*)X1,Y1
- CALL RCORD(XLN,YLN,IFF)
- IF(IFF.NE.0) THEN
- X1=XLN
- Y1=YLN
- ENDIF
- WRITE(*,'(1X,13HSecond point:,\)')
- READ(*,*)X2,Y2
- CALL RCORD(XLN,YLN,IFF)
- IF(IFF.NE.0) THEN
- X2=XLN
- Y2=YLN
- ENDIF
- XXA=X1
- YYA=Y1
- XXB=X2
- YYB=Y2
- CALL LINE(XXA,YYA,XXB,YYB,C)
- GOTO 10
- 400 WRITE(*,'(1X,22HSelect color (0-255): ,\)')
- READ(*,*)CO
- C=CO
- GOTO 10
- 500 WRITE(*,'(1X,15HInput X0,Y0,R: ,\)')
- READ(*,*)XC,YC,RC
- X0=XC
- Y0=YC
- R=RC
- CALL CIRCLE(X0,Y0,R,TH1,TH2,C)
- GOTO 10
- 600 CALL CLSG
- CALL DRAWC
- GOTO 10
- 700 XCC=XCC+10
- IF(XCC.GE.XW2) XCC=XW1
- GOTO 10
- 710 C=C+256
- IR=YM*XB/YB*.2
- X0=XM/2-IR
- Y0=YM*XB/YB/2+20
- Y00=Y0-.866*IR
- R=IR
- CALL CIR(X0,Y0,R,C)
- C=C+1
- X0=X0+IR/2
- CALL CIR(X0,Y00,R,C)
- C=C+1
- X0=X0+IR/2
- CALL CIR(X0,Y0,R,C)
- C=C-256
- GOTO 10
- 800 IR=YM*XB/YB*.38
- Y0=10+IR
- X0=XM/2
- DO 820 I=0,15
- C=255-I
- JR=IR
- DO 830 J=1,JR
- R=J
- CALL CIRCLE(X0,Y0,R,TH1,TH2,C)
- 830 CONTINUE
- ir=ir-3
- 820 continue
- goto 10
- 850 R=YM*XB/YB*.1
- X0=20+R
- Y0=YM*XB/YB/2
- X00=X0
- Y00=Y0
- C=C+256
- CALL CIRCLE(X0,Y0,R,TH1,TH2,C)
- X0=X0+1
- JK=(XM-2*R-40)/2
- DO 855 I=1,JK
- CALL CIRCLE(X00,Y0,R,TH1,TH2,C)
- CALL CIRCLE(X0,Y0,R,TH1,TH2,C)
- X00=X0
- X0=X0+2
- 855 CONTINUE
- C=C-256
- GOTO 10
- 300 IF(ICF.EQ.0)WRITE(*,*)'Error command,repeat input please'
- IF(ICF.NE.0)WRITE(*,*)'├ⁿ┴ε┤φ, ╟δ╓╪╩Σ╚δ !'
- GOTO 10
- 200 C=0
- CALL SCREEN(C)
- CALL QUIT
- 1000 STOP
- END
- SUBROUTINE CIR(XC,YC,RC,CC)
- INTEGER*2 XC,YC,RC,CC,X1,Y1,X2,Y2
- IP=RC
- Y1=YC+RC
- Y2=YC-RC
- CALL LINE(XC,Y1,XC,Y2,CC)
- DO 1010 I=1,IP
- YL=RC*RC-I*I
- YL=SQRT(YL)
- Y1=YC+YL
- Y2=YC-YL
- X1=XC-I
- X2=XC+I
- CALL LINE(X1,Y1,X1,Y2,CC)
- CALL LINE(X2,Y1,X2,Y2,CC)
- 1010 CONTINUE
- RETURN
- END