10 'UTILITY.GSX (LISTING 1 (PART 1)) 20 'COPYRIGHT CHARLES PULTENEY 30 'MERGE DATA PROGRAM FROM LINE 10000. DO NOT FORGET TO RETURN! 40 WIDTH 255:OPTION BASE 1:a$=CHR$(27):cls$=a$+CHR$(69) 45 bel$=CHR$(7):en.sta$=aS+"1":dis.sta$=a$+"0" 50 DIM ctrl%(6),pts.in%(151).pts.out%(12),int.in%(64),int.out%(45) 6O ON ERROR GOTO 9510:x.scale#=405:y.scale#=344.086 70 DEF FNpl.cur$(x,y)=aS+"Y"+CHR$(y+32)+CHR$(x+32):PRINT cls$ 80 PRINT FNpl.cur$(26,9)"Commands Available:" 90 PRINT FNpl.cur$(30,12)"1) Screen Output" 100 PRINT FNpl.cur$(30,14)"2) Draft Quality Output" 110 PRINT FNpl.cur$(30,16)"3) High Quality Output" 120 PRINT FNpl.cur$(26,19)"Enter Command: "bel$;: 130 b$=INPUT$(1):IF VAL(b$)<1 OR VAL(b$)>3 THEN GOTO 120 140 IF VAL(b$)=1 THEN ptr=1:dvc%=1 150 IF VAL(b$)=2 THEN ptr=1.2:dvc%=22 160 IF VAL(b$)=3 THEN ptr=1.2:dvc%=21 170 IF dvc>1 THEN PRINT clsSFNpl.curS(0,0)"Please Wait"; 180 IF dvc>1 THEN t$="Ready To Print: Load Printer And " 190 GOSUB 9000:GOSUB 9100:mes$=" ":x1=0:y1=93:hgt%=1:dir%=0 200 GOSUB 3000:GOSUB 10000 210 b$="":PRINT bel$ dis.sta$ FNpl.cur$(0,32)t$+"Press Any Key"; 220 t$="":b$=INPUT$(1):IF b$="" THEN 220 230 GOSUB 9400:PRINT en.sta$:PRINT FNpl.cur$(0,0);:LIST 10000-:END 1000 'DRAW POLYGON (AND FILL) 1010 '1ST CO-ORD=pts.in%(1),pts.in%(2):2ND CO-ORD=pts.in%(3),pts.in%(4) ETC 1020 'FOR FILL SET fill% TO 1 AND SPECIFY STYLE (sty%) AND INDEX (idx%) 1030 'SET NUMBER OF POINTS TO np% 1040 IF fill%=1 THEN GOSUB 8000 1050 ctrl%(1)=9:ctrl%(2)=np%:GOSUB 9200 1060 IF fill%=1 THEN sty%=0:idx%=1:GOSUB 8000 1070 np%=0:fill%=0:RETURN 2000 'DRAW RECTANGULAR BOX: LOWER LEFT=x1,y1 UPPER RIGHT=x2,y2 2010 'FOR FILL SET fill% TO 1 AND SPECIFY STYLE (sty%) AND INDEX (idx%) 2020 IF fill%=1 THEN GOSUB 8000 2030 pts.in%(1)=x.scale#*x1:pts.in%(2)=y.scale#*y1 2035 pts.in%(3)=x.scale#*x2:pts.in%(4)=y.scale#*y2 2040 ctrl%(1)=11:ctrl%(2)=2:ctrl%(6)=1:GOSUB 9200 2050 IF fill%=1 THEN sty%=0:idx%=1:GOSUB 8000 2060 fill%=0:RETURN 3000 'PLACE TEXT AT x1,y1 3010 'TEXT IN STRING VARIABLE mes$ 3020 'SET CHARACTER HEIGHT AS hgt% AND DIRECTION AS dir% 3040 GOSUB 8100:ctrl%(1)=8:ctrl%(2)=1:ctrl%(4)=LEN(mes$) 3045 pts.in%(1)=x.scale#*x1:pts.in%(2)=y.scale#*y1 3050 FOR t%=1 TO LEN(mes$) 3060 int.in%(t%)=ASC(MID$(mes$,t%,1)):NEXT t% 3080 GOSUB 9200:hgt%=1:dir%=0:GOSUB 8100:RETURN 4000 'DRAW POLYLINE FROM x1,y1 TO x2,y2 4010 'USE psty% TO SET POLYLINE STYLE 4040 GOSUB 8300:pts.in%(1)=x.scale#*x1:pts.in%(2)=y.scale#*y 1 4045 pts.in%(3)=x.scale#*x2:pts.in%(4)=y.scale#*y2 4050 ctrl%(1)=6:ctrl%(2)=2:GOSUB 9200 4060 psty%=0:GOSUB 8300:RETURN 5000 'PLOT POLYMARKER AT x1,y1 5010 'SET POLYMARKER TYPE AS tpe% AND SIZE AS sze% 5050 GOSUB 8200:pts.in%(1)=x.scale#*x1:pts.in%(2)=y.scale#*y1 5060 ctrl%(1)=7:ctrl%(2)=1:GOSUB 9200 5070 tpe%=1:sze%=1:GOSUB 8200:RETURN 8000 'SET FILL STYLE AND INDEX 8010 ctrl%(1)=23:ctrl%(2)=0:int.in%(1)=sty%:GOSUB 9200 8020 ctrl%(1)=24:ctrl%(2)=0:int.in%(1)=idx%:GOSUB 9200:RETURN 8100 'SET CHARACTER HEIGHT AND TEXT DIRECTION 8110 ctrl%(1)=12:ctrl%(2)=1:pts.in%(1)=0:pts.in%(2)=hgt%:GOSUB 9200 8120 ctrl%(1)=13:int.in%(1)=dir%*10:GOSUB 9300:RETURN 8200 'SET POLYMARKER TYPE AND SIZE 8210 ctrl%(1)=18:ctrl%(2)=0:ctrl%(4)=1:int.in%(1)=tpe%:GOSUB 9200 8220 ctrl%(1)=19:ctrl%(2)=1:pts.in%(1)=0:pts.in%(2)=sze%:GOSUB 9200:RETURN 8300 'SET POLYLINE STYLE 8310 ctrl%(1)=15:ctrl%(2)=0:ctrl%(4)=1:int.in%(1)=psty%:GOSUB 9200:RETURN 8400 'SET FILL COLOUR INDEX 8410 ctrl%(1)=25:ctrl%(2)=0:int.in%(1)=colour%:GOSUB 9200:RETURN 8500 'SET TEXT COLOUR INDEX 8510 ctrl%(1)=22:ctrl%(2)=0:int.in%(1)=colour%:GOSUB 9200:RETURN 8600 'SET POLYLINE COLOUR INDEX 8610 ctrl%(1)=17:ctrl%(2)=0:int.in%(1)=colour%:GOSUB 9200:RETURN 8700 'SET POLYMARKER COLOUR INDEX 8710 Ctrl%(1)=20:ctrl%(2)=0:int.in%(1)=colour%:GOSUB 9200:RETURN 8800 'FETCH CHARACTER HEIGHTS AND WIDTHS ETC 8810 ych.wth=pts.out%(1):ch.wth=pts.out%(3):ch.hgt=pts.out%(4):RETURN 9000 'SET UP 9010 GSX%=&H30:POKE GSX%+0,&H50:POKE GSX%+1,&H59 9020 POKE GSX%+2,&HE:P0KE GSX%+3,115:POKE GSX%+4,&HC3 9030 POKE GSX%+5,&H5:POKE GSX%+6,&H0:RETURN 9100 'OPEN WORKSTATION 9110 ctrl%(1)=1:ctrl%(2)=0:ctrl%(4)=10 9120 RESTORE 9140:FOR i%=2 TO 10:READ int.in%(i%):NEXT i% 9130 int.in%(1)=dvc%:GOSUB 9200:RETURN 9140 DATA 1,1,1,1,1,1,0,0,1 9200 REM*****CALL GSX***** 9210 CALL GSX%(GSX%,GSX%,ctrl%(1),int.in%(1),pts.in$(1),int.out%(1),pts.out%(1)) 9220 RETURN 9300 'CALL GSX WITH ONE PARAMETER 9310 ctrl%(2)=0:ctrl%(4)=1:GOSUB 9200:RETURN 9400 'CLOSE WORKSTATION 9410 ctrl%(1)=2:ctrl%(2)=0:GOSUB 9200:RETURN 9500 'SHUT DOWN GSX ON ERROR 9510 GOSUB 9400:ON ERROR GOTO 0:STOP