412 lines
10 KiB
QBasic
412 lines
10 KiB
QBasic
REM THIS IS A DEMONSTRATION PROGRAM FOR
|
||
REM CBASIC GRAPHICS EXTENSIONS
|
||
REM
|
||
REM PROGRAM NAME: DEMOGRAF
|
||
REM
|
||
%INCLUDE GRAPHCOM.BAS
|
||
|
||
DEF PAUSE
|
||
REM UTILITY TO SUSPEND PROGRAM EXECUTION UNTIL CHARACTER IS
|
||
REM ENTERED AT CONSOLE, STOPPING PROGRAM IF CTRL-C IS ENTERED,
|
||
REM OTHERWISE RETURNING INTEGER VALUE OF CHARACTER ENTERED.
|
||
REM CHARACTER IS NOT DISPLAYED.
|
||
|
||
INTEGER PAUSE,CHOICE
|
||
|
||
CHOICE = INKEY
|
||
IF CHOICE = 3 THEN STOP
|
||
PAUSE = CHOICE
|
||
FEND
|
||
|
||
GRAPHIC OPEN 1
|
||
CLEAR
|
||
|
||
BEEM: GRAPHIC PRINT AT (0,.9): "BEAM STATEMENT"
|
||
SET BEAM "OFF"
|
||
PLOT (0,1),(1,1),(1,0),(0,0)
|
||
KEY% = PAUSE REM WAIT FOR CONSOLE INPUT
|
||
CLEAR
|
||
SET BEAM "ON"
|
||
PLOT (0,1),(1,1),(1,0),(0,0)
|
||
KEY% = PAUSE
|
||
|
||
REM ILLUSTRATE TECHNIQUE OF SQUARING A DISPLAY
|
||
|
||
BOWNDS: CLEAR
|
||
GRAPHIC PRINT AT (0,.9): "BOUNDS STATEMENT"
|
||
ASK DEVICE X.AXIS,Y.AXIS
|
||
PRINT "THE ASPECT RATIO IS = ";Y.AXIS;"/";X.AXIS
|
||
KEY% = PAUSE
|
||
PLOT (0,0),(0,1),(1,1),(1,0),(0,0)
|
||
KEY% = PAUSE
|
||
CLEAR
|
||
SET BOUNDS Y.AXIS,X.AXIS
|
||
PLOT (0,0),(0,1),(1,1),(1,0),(0,0)
|
||
SET BOUNDS 1,1
|
||
KEY% = PAUSE
|
||
|
||
REM DEMONSTRATE CONTROL OF GRAPHIC CHARACTER HEIGHT
|
||
REM AND MINIMUM HEIGHT FOR GRAPHIC CHARACTERS
|
||
|
||
HIGH: CLEAR
|
||
SET CHARACTER HEIGHT 0
|
||
GRAPHIC PRINT AT (0,.9): "CHARACTER HEIGHT STATEMENT"
|
||
SET CHARACTER HEIGHT .1
|
||
GRAPHIC PRINT AT (0,.7): "10 PERCENT"
|
||
KEY% = PAUSE
|
||
SET WINDOW 0,100,0,100
|
||
SET CHARACTER HEIGHT 15
|
||
GRAPHIC PRINT AT (0,40): "15 PERCENT"
|
||
KEY% = PAUSE
|
||
SET CHARACTER HEIGHT 0
|
||
ASK CHARACTER HEIGHT CH
|
||
PRINT "MINIMUM CHARACTER HEIGHT IS = "; CH
|
||
GRAPHIC PRINT AT (0,20): "MINIMUM HEIGHT"
|
||
|
||
REM DISPLAY SEVERAL RANDOM LINES ON SCREEN, THEN MAKE
|
||
REM THEM DISAPPEAR VIA "CLEAR" STATEMENT
|
||
|
||
INPUT ""; LINE SEED$
|
||
RANDOMIZE
|
||
CLR: CLEAR
|
||
GRAPHIC PRINT AT (0,90): "CLEAR STATEMENT"
|
||
SET WINDOW 0,1,0,1
|
||
FOR I.INT% = 1 TO 10
|
||
PLOT (RND,RND),(RND,RND)
|
||
NEXT I.INT%
|
||
KEY% = PAUSE
|
||
CLEAR
|
||
|
||
REM ILLUSTRATE EFFECT OF AUTOMATIC CLIPPING WHEN FIGURE
|
||
REM EXCEEDS ALLOWABLE BOUNDARIES
|
||
|
||
CLP: SET WINDOW 0,100,0,100
|
||
GRAPHIC PRINT AT (0,90): "CLIP STATEMENT"
|
||
PLOT (25,10),(50,150),(75,10),(25,10)
|
||
KEY% = PAUSE
|
||
|
||
REM DRAW BORDER IN EACH AVAILABLE COLOR (NUMBER OF
|
||
REM COLORS VARIES WITH RESOLUTION)
|
||
|
||
COLR: CLEAR
|
||
GRAPHIC PRINT AT (0,90): \
|
||
"COLOR AND COLOR COUNT STATEMENTS"
|
||
SET WINDOW 0,1,0,1
|
||
ASK COLOR COUNT CT%
|
||
FOR I.INT% = 1 TO CT%
|
||
SET COLOR I.INT%
|
||
PLOT (0,0),(0,1),(1,1),(1,0),(0,0)
|
||
KEY% = PAUSE
|
||
NEXT I.INT%
|
||
|
||
REM RETRIEVE AND DISPLAY SPECIFICATIONS FOR CURRENT DEVICE
|
||
|
||
DEVC: CLEAR
|
||
SET CHARACTER HEIGHT 0
|
||
SET COLOR 1
|
||
GRAPHIC PRINT AT (0,.8): "DEVICE STATEMENT"
|
||
ASK DEVICE X.AXIS,Y.AXIS
|
||
PRINT "THE VERTICAL AXIS IS "; \
|
||
Y.AXIS*100.0/X.AXIS;"PERCENT OF THE";
|
||
PRINT " HORIZONTAL AXIS"
|
||
PRINT "X= ";X.AXIS;" Y= ";Y.AXIS
|
||
KEY% = PAUSE
|
||
|
||
REM MENTION "GRAPHIC CLOSE" STATEMENT
|
||
|
||
GCLOSE: CLEAR
|
||
GRAPHIC PRINT AT (0,.9): "GRAPHIC CLOSE STATEMENT"
|
||
GRAPHIC PRINT AT (0,.5): "GRAPHIC CLOSE HAS NO DEMO"
|
||
KEY% = PAUSE
|
||
|
||
REM ILLUSTRATE GRAPHIC INPUT VIA CURSOR POSITIONING
|
||
|
||
GIN: CLEAR
|
||
SET WINDOW 0,100,0,100
|
||
SET CHARACTER HEIGHT 0
|
||
GRAPHIC PRINT AT (0,80): "GRAPHIC INPUT STATEMENT"
|
||
GRAPHIC PRINT AT (0,25): "OPTION 1 ."
|
||
SET COLOR 2
|
||
GRAPHIC PRINT AT (0,50): "OPTION 2 ."
|
||
SET COLOR 3
|
||
GRAPHIC PRINT AT (0,75): "OPTION 3 ."
|
||
GRAPHIC INPUT X.AXIS,Y.AXIS,A$
|
||
N = INT((Y.AXIS+5)/25)
|
||
IF N = 0 THEN N = 1 REM NO OPTION ZERO
|
||
IF N > 3 THEN N = 3 REM ONLY THREE OPTIONS
|
||
PRINT "THE CURSOR WAS POSITIONED AT: "; X.AXIS,Y.AXIS
|
||
PRINT "YOU SELECTED OPTION: "; N
|
||
PRINT "THE TERMINATING KEY WAS: "; A$
|
||
KEY% = PAUSE
|
||
|
||
REM MENTION "GRAPHIC OPEN" STATEMENT
|
||
|
||
GOPEN: CLEAR
|
||
SET COLOR 1
|
||
SET CHARACTER HEIGHT 0
|
||
GRAPHIC PRINT AT (0,90): "GRAPHIC OPEN STATEMENT"
|
||
GRAPHIC PRINT AT (0,50): \
|
||
"THE GRAPHIC OPEN HAS NO DEMONSTRATION"
|
||
KEY% = PAUSE
|
||
|
||
REM DEMONSTRATE CENTERING AND JUSTIFICATION
|
||
|
||
GPRT: CLEAR
|
||
SET WINDOW 0,1,0,1
|
||
SET CHARACTER HEIGHT 0
|
||
GRAPHIC PRINT AT (0,.9): "GRAPHIC PRINT STATEMENT"
|
||
SET JUSTIFY 0,0
|
||
GRAPHIC PRINT AT (.5,.5): "BEGINS AT CENTER"
|
||
KEY% = PAUSE
|
||
SET JUSTIFY .5,0
|
||
GRAPHIC PRINT AT (.5,.3): "THIS IS CENTERED"
|
||
KEY% = PAUSE
|
||
SET JUSTIFY .5,.5
|
||
GRAPHIC PRINT AT (.5,.3): "THIS IS CENTERED"
|
||
KEY% = PAUSE
|
||
SET JUSTIFY 1.0,1.0
|
||
GRAPHIC PRINT AT (.5,.5): "ENDS AT CENTER"
|
||
KEY% = PAUSE
|
||
JUST: CLEAR
|
||
SET JUSTIFY 0,0
|
||
SET WINDOW 0,100,0,100
|
||
SET CHARACTER HEIGHT 0
|
||
GRAPHIC PRINT AT (0,90): "JUSTIFY STATEMENT"
|
||
PLOT (20,80),(20,20),(80,20)
|
||
PLOT (15,40),(20,40)
|
||
PLOT (15,60),(20,60)
|
||
PLOT (15,80),(20,80)
|
||
PLOT (40,15),(40,20)
|
||
PLOT (60,15),(60,20)
|
||
PLOT (80,15),(80,20)
|
||
SET JUSTIFY 1,.5
|
||
GRAPHIC PRINT AT (14,20): "20"
|
||
GRAPHIC PRINT AT (14,40): "40"
|
||
GRAPHIC PRINT AT (14,60): "60"
|
||
GRAPHIC PRINT AT (14,80): "80"
|
||
SET JUSTIFY .5,1
|
||
GRAPHIC PRINT AT (20,14): "20"
|
||
GRAPHIC PRINT AT (40,14): "40"
|
||
GRAPHIC PRINT AT (60,14): "60"
|
||
GRAPHIC PRINT AT (80,14): "80"
|
||
KEY% = PAUSE
|
||
|
||
REM EXHIBIT VARIATION OF LINE STYLE
|
||
|
||
STYL: CLEAR
|
||
SET JUSTIFY 0,0
|
||
SET WINDOW 0,1,0,1
|
||
GRAPHIC PRINT AT (0,.9): "LINE STYLE STATEMENT"
|
||
SET LINE STYLE 3
|
||
SET JUSTIFY 1,0
|
||
GRAPHIC PRINT AT (.5,.5): "Sign here"
|
||
PLOT (0.5,0.5),(0.8,0.5)
|
||
KEY% = PAUSE
|
||
|
||
REM ILLUSTRATE VARIATION IN SIZE OF MARKERS
|
||
|
||
MHIGH: CLEAR
|
||
SET WINDOW 0,1,0,1
|
||
SET CHARACTER HEIGHT 0
|
||
SET LINE STYLE 1
|
||
SET JUSTIFY 0,0
|
||
GRAPHIC PRINT AT (0,.9): "MARKER HEIGHT STATEMENT"
|
||
DIM MX(5)
|
||
DIM MY(5)
|
||
MX(0) = .3 : MY(0) = .7
|
||
MX(1) = .7 : MY(1) = .7
|
||
SET MARKER HEIGHT .1
|
||
MAT MARKER 1: MX,MY
|
||
SET WINDOW 0,100,0,100
|
||
MX(0) = 30 : MY(0) = 50
|
||
MX(1) = 70 : MY(1) = 50
|
||
SET MARKER HEIGHT 15
|
||
MAT MARKER 1: MX,MY
|
||
SET MARKER HEIGHT 0
|
||
ASK MARKER HEIGHT MK
|
||
PRINT "MINIMUM MARKER HEIGHT IS = "; MK
|
||
KEY% = PAUSE
|
||
|
||
REM DEMONSTRATE ALL MARKER SHAPES
|
||
|
||
MTYPE: CLEAR
|
||
SET WINDOW 0,1,0,1
|
||
SET MARKER HEIGHT 0
|
||
GRAPHIC PRINT AT (0,.9): "MARKER TYPE STATEMENT"
|
||
MX(0) = .5 : MY(0) = .7
|
||
FOR I.INT% = 1 TO 5
|
||
SET MARKER TYPE I.INT%
|
||
MAT MARKER 0: MX,MY
|
||
MY(0) = MY(0) - .1
|
||
NEXT I.INT%
|
||
KEY% = PAUSE
|
||
|
||
REM DEMONSTRATE FILLED POLYGON
|
||
|
||
MFILL: CLEAR
|
||
SET LINE STYLE 1
|
||
SET JUSTIFY 0,0
|
||
GRAPHIC PRINT AT (0,.9): "MAT FILL STATEMENT"
|
||
SET WINDOW 0,100,0,100
|
||
SET CHARACTER HEIGHT 0
|
||
SET COLOR 1
|
||
DIM X.ARRAY(10)
|
||
DIM Y.ARRAY(10)
|
||
X.ARRAY(0) = 40 : Y.ARRAY(0) = 10
|
||
X.ARRAY(1) = 35 : Y.ARRAY(1) = 25
|
||
X.ARRAY(2) = 50 : Y.ARRAY(2) = 40
|
||
X.ARRAY(3) = 65 : Y.ARRAY(3) = 25
|
||
X.ARRAY(4) = 60 : Y.ARRAY(4) = 10
|
||
MAT FILL 4: X.ARRAY,Y.ARRAY
|
||
KEY% = PAUSE
|
||
|
||
REM ILLUSTRATE POSITIONING OF MARKERS VIA AN ARRAY
|
||
|
||
MMARK: CLEAR
|
||
SET WINDOW 0,100,0,100
|
||
GRAPHIC PRINT AT (0,90): "MAT MARKER STATEMENT"
|
||
SET MARKER HEIGHT 0
|
||
SET MARKER TYPE 1
|
||
SET COLOR 1
|
||
MAT MARKER 4: X.ARRAY,Y.ARRAY
|
||
KEY% = PAUSE
|
||
|
||
REM DEMONSTRATE DRAWING POLYGON OUTLINE VIA AN ARRAY
|
||
|
||
MPLOT: CLEAR
|
||
GRAPHIC PRINT AT (0,90): "MAT PLOT STATEMENT"
|
||
SET COLOR 1
|
||
SET WINDOW 0,1,0,1
|
||
SET CHARACTER HEIGHT 0
|
||
FOR I.INT% = 0 TO 4
|
||
X.ARRAY(I.INT%) = .01 * X.ARRAY(I.INT%)
|
||
Y.ARRAY(I.INT%) = .01 * Y.ARRAY(I.INT%)
|
||
NEXT I.INT%
|
||
X.ARRAY(5) = .40 : Y.ARRAY(5) = .10
|
||
SET BEAM "OFF"
|
||
MAT PLOT 4: X.ARRAY,Y.ARRAY
|
||
KEY% = PAUSE
|
||
CLEAR
|
||
MAT PLOT 5: X.ARRAY,Y.ARRAY
|
||
KEY% = PAUSE
|
||
|
||
REM DO POLYGON VIA "PLOT" STATEMENTS
|
||
|
||
PLT: CLEAR
|
||
SET WINDOW 0,100,0,100
|
||
SET CHARACTER HEIGHT 0
|
||
SET COLOR 1
|
||
GRAPHIC PRINT AT (0,90): "PLOT STATEMENT"
|
||
PLOT (40,10),(35,25);
|
||
SET COLOR 2
|
||
PLOT (35,25),(50,40);
|
||
SET LINE STYLE 2
|
||
PLOT (50,40),(65,25);
|
||
SET LINE STYLE 1
|
||
SET COLOR 3
|
||
PLOT (65,25),(60,10),(40,10)
|
||
KEY% = PAUSE
|
||
|
||
REM EXERCISE ARBITRARY POSITIONING OF GRAPHIC BEAM
|
||
|
||
POSIT: CLEAR
|
||
GRAPHIC PRINT AT (0,90): "POSITION STATEMENT"
|
||
SET BEAM "OFF"
|
||
SET POSITION 50,50
|
||
SET POSITION 50,100
|
||
SET BEAM "ON"
|
||
SET POSITION 0,0
|
||
SET POSITION 50,50
|
||
KEY% = PAUSE
|
||
|
||
REM SHOW ALL LINE STYLES
|
||
|
||
STCNT: CLEAR
|
||
GRAPHIC PRINT AT (0,90): "STYLE COUNT STATEMENT"
|
||
SET WINDOW 0,100,0,100
|
||
SET CHARACTER HEIGHT 0
|
||
ASK STYLE COUNT ST%
|
||
PRINT "THE NUMBER OF LINE STYLES IS: "; ST%
|
||
FOR I.INT% = 1 TO ST%
|
||
SET LINE STYLE I.INT%
|
||
SET BEAM "OFF"
|
||
PLOT (10*I.INT%,10),(10*I.INT%,90)
|
||
NEXT I.INT%
|
||
KEY% = PAUSE
|
||
SET LINE STYLE 1
|
||
|
||
REM DEMONSTRATE ROTATION OF TEXT
|
||
|
||
ANGEL: CLEAR
|
||
GRAPHIC PRINT AT (0,90): "TEXT ANGLE STATEMENT"
|
||
SET WINDOW 0,1,0,1
|
||
SET CHARACTER HEIGHT 0
|
||
PI = 3.1415926
|
||
RAD = PI*2
|
||
DEG = RAD/360
|
||
FOR I.INT% = 90 TO 360 STEP 90
|
||
SET TEXT ANGLE I.INT%*DEG
|
||
GRAPHIC PRINT AT (.5,.5): "ROTATE ME"
|
||
NEXT I.INT%
|
||
KEY% = PAUSE
|
||
SET TEXT ANGLE 0
|
||
|
||
REM ILLUSTRATE EFFECT OF VARYING VIEWPORT
|
||
|
||
VYOU: CLEAR
|
||
GRAPHIC PRINT AT (0,.9): "VIEWPORT STATEMENT"
|
||
X.ARRAY(0) = 0 : Y.ARRAY(0) = 0
|
||
X.ARRAY(1) = 0 : Y.ARRAY(1) = 100
|
||
X.ARRAY(2) = 100 : Y.ARRAY(2) = 100
|
||
X.ARRAY(3) = 100 : Y.ARRAY(3) = 0
|
||
X.ARRAY(4) = 0 : Y.ARRAY(4) = 0
|
||
SET VIEWPORT 0,1,0,1
|
||
SET WINDOW 0,100,0,100
|
||
SET CHARACTER HEIGHT 0
|
||
MAT PLOT 4: X.ARRAY,Y.ARRAY
|
||
SET VIEWPORT .1,.9,.1,.9
|
||
MAT PLOT 4: X.ARRAY,Y.ARRAY
|
||
SET VIEWPORT .2,.8,.2,.8
|
||
MAT PLOT 4: X.ARRAY,Y.ARRAY
|
||
SET VIEWPORT .3,.5,.3,.5
|
||
MAT PLOT 4: X.ARRAY,Y.ARRAY
|
||
SET VIEWPORT .5,.7,.5,.7
|
||
MAT PLOT 4: X.ARRAY,Y.ARRAY
|
||
KEY% = PAUSE
|
||
|
||
REM ILLUSTRATE EFFECT OF VARYING WINDOW
|
||
|
||
WINDW: CLEAR
|
||
SET VIEWPORT 0,1,0,1
|
||
SET WINDOW 0,100,0,100
|
||
SET CHARACTER HEIGHT 0
|
||
GRAPHIC PRINT AT (0,90): "WINDOW STATEMENT"
|
||
PLOT (0,0),(60,60),(60,0),(0,0)
|
||
SET WINDOW 0,200,0,200
|
||
SET CHARACTER HEIGHT 0
|
||
PLOT (0,0),(60,60),(60,0),(0,0)
|
||
SET VIEWPORT 0,.5,.5,1.0
|
||
PLOT (0,0),(60,60),(60,0),(0,0)
|
||
KEY% = PAUSE
|
||
|
||
REM FINISH DEMONSTRATION AND END PROGRAM
|
||
|
||
FIN: CLEAR
|
||
SET WINDOW 0,100,0,100
|
||
SET CHARACTER HEIGHT 0
|
||
SET VIEWPORT 0,1,0,1
|
||
SET COLOR 1
|
||
FOR I.INT% = 1 TO CT%
|
||
SET COLOR I.INT%
|
||
MAT PLOT 5: X.ARRAY,Y.ARRAY
|
||
SET VIEWPORT .01*I.INT%,1-(I.INT%*.01), \
|
||
.01*I.INT%,1-(I.INT%*.01)
|
||
NEXT I.INT%
|
||
SET JUSTIFY .5,.5
|
||
SET COLOR 1
|
||
SET VIEWPORT 0,1,0,1
|
||
GRAPHIC PRINT AT (50,50): "THANKS FOR THE VIEWING"
|
||
KEY% = PAUSE
|
||
STOP
|
||
END
|
||
|