10 '*********************************
20 '********** GSX-Demo  3 **********
30 '***** Drucker - Ansteuerung *****
40 '* (C) 1986 M.Schloeter/M.Uphoff *
50 '*********************************
60 '
70 GOSUB 50000:REM Init GSX
80 cls$=CHR$(27)+"E"+CHR$(27)+"H"
90 con$=CHR$(27)+"e":coff$=CHR$(27)+"f":statusoff$=CHR$(27)+"0"
100 PRINT cls$;coff$;statusoff$;
110 device = 21 : GOSUB 50080: REM Open Workstation (Drucker)
120 '
130 REM Hier werden die Kaestchen gezeichnet
140 breite = 2340
150 x1 = breite/6 : x2 = x1 + breite*2/3 : y1 = 5000 : y2 = 15000
160 fillbase = 1 : fillstyle = 1
170 GOSUB 15000 : REM Set Fillstyle
180 GOSUB 14000 : REM Filled Box
190 x1 = breite*7/6 : x2 = x1 + breite*2/3
200 fillbase = 0 : fillstyle = 1
210 GOSUB 15000 : REM Set Fillstyle
220 GOSUB 14000 : REM Filled Box
230 FOR fillbase = 2 TO 3 
240   FOR fillstyle = 1 TO 6
250     GOSUB 15000 : REM Set Fillstyle
260     x1 = breite*7/6 + breite * (((fillbase - 2)* 6) +  fillstyle )
270     x2 = x1 + breite*2/3 
280     GOSUB 14000: REM Filled Box
290   NEXT fillstyle
300 NEXT fillbase
310 fillbase = 1: fillstyle = 1 : GOSUB 15000
320 '
330 REM Hier werden die Sonnenstrahlen gezeichnet
340 x1 = 16384 : y1 = 26400 
350 FOR linetype = 1 TO 6
360   GOSUB 11000 : REM Set Linetype
370   FOR i = 1 TO 5
380     x2 = RND * 32767
390     y2 = RND * 32767
400     GOSUB 10000 : REM Draw Line
410   NEXT i
420 NEXT linetype
430 REM Hier wird die Sonne gezeichnet
440 x1 = 16384 : y1 = 26400 : r = 1500
450 GOSUB 21000 : REM Filled Circle
460 '
470 REM Und hier kommt die Schrift
480 REM Grosse Unterschrift
490 size = 1600 : GOSUB 23000 : REM Set Text Size
500 x1 = 0 : y1 = 1800
510 outstr$ = "Drucker Grafik Demo" : GOSUB 16000 : REM Text Graphic Out
520 REM Text um Sonne
530 size = 600 : GOSUB 23000 : REM Set Text Size
540 x1 = 16384 : y1 = 26400 : outstr$=SPACE$(4)+outstr$
550 FOR angle = 0 TO 270 STEP 90
560   GOSUB 22000 : REM Set Text Direction
570   GOSUB 16000 : REM Text Graphic Out
580 NEXT angle
590 '
600 GOSUB 50210 : REM Update Workstation
610 END
620 '
10000 '********** Draw Line **********
10010 '* Inputparameter : x1,y1      *
10020 '*                  x2,y2      *
10030 '*******************************
10040 contrl%(1)=6:contrl%(2)=2
10050 ptsin%(1)=x1:ptsin%(2)=y1:ptsin%(3)=x2:ptsin%(4)=y2
10060 GOSUB 60000:RETURN
10070 '
11000 '********** Set Linetype **********
11010 '* Inputparameter : linetype      *
11020 '**********************************
11030 contrl%(1)=15:contrl%(2)=0
11040 intin%(1)=linetype
11050 GOSUB 60000:RETURN
11060 '
14000 '********** Filled Box **********
14010 '* Inputparameter : x1,y1       *
14020 '*                  x2,y2       *
14030 '********************************
14040 contrl%(1)=9:contrl%(2)=4
14050 ptsin%(1)=x1:ptsin%(2)=y1
14060 ptsin%(3)=x2:ptsin%(4)=y1
14070 ptsin%(5)=x2:ptsin%(6)=y2
14080 ptsin%(7)=x1:ptsin%(8)=y2
14090 GOSUB 60000:RETURN
14100 '
15000 '********** Set Fillstyle **********
15010 '* Inputparameter : fillbase       *
15020 '*                  fillstyle      *
15030 '***********************************
15040 contrl%(1)=23:contrl%(2)=0
15050 intin%(1)=fillbase
15060 GOSUB 60000
15070 contrl%(1)=24:contrl%(2)=0
15080 intin%(1)=fillstyle
15090 GOSUB 60000:RETURN
15100 '
16000 '********** Text Graphic Out ***********
16010 '* Inputparameter : outstr$            *
16020 '*                  x1,y1              *
16030 '***************************************
16040 contrl%(1)=8:contrl%(2)=1
16050 contrl%(4)=LEN(outstr$)
16060 ptsin%(1)=x1:ptsin%(2)=y1
16070 FOR i = 1 TO LEN(outstr$)
16080   intin%(i) = ASC(MID$(outstr$,i,1))
16090 NEXT i
16100 GOSUB 60000
16110 RETURN
16120 '
21000 '********** Filled Circle *********
21010 '* Inputparamter: x1,y1,r         *
21020 '**********************************
21030 i = 0
21040 FOR phi = 0 TO 6.28 STEP 0.2
21050   i = i + 1 : ptsin%(i) = COS(phi)*r  + x1
21060   i = i + 1 : ptsin%(i) = SIN(phi)*r + y1
21070 NEXT phi
21080 contrl%(1) = 9 : contrl%(2) = i/2
21090 GOSUB 60000
21100 RETURN
21110 '
22000 '***** Set Text-Direction *****
22010 '* Inputparameter angle       *
22020 '******************************
22030 contrl%(1) = 13: contrl%(2) = 0
22040 intin%(1) = angle*10 
22050 intin%(2) = COS(3.14*angle/180)*100
22060 intin%(3) = SIN(3.14*angle/180)*100
22070 GOSUB 60000
22080 RETURN
22090 '
23000 '***** Set Text-Size *****
23010 '* Inputparameter size   *
23020 '*************************
23030 contrl%(1) = 12 : contrl%(2) = 1
23040 ptsin%(1) = 0 : ptsin%(2) = size
23050 GOSUB 60000
23060 RETURN
23070 '
50000 '********** Init GSX
50010 DIM pb%(5),contrl%(10),intin%(255),ptsin%(100),intout%(45),ptsout%(100)
50020 gdos%=&HBDF0:MEMORY gdos%-1
50030 POKE gdos%,14:POKE gdos%+1,115:REM ld c,115
50040 POKE gdos%+2,195:POKE gdos%+3,5:POKE gdos%+4,0:REM jp 0005
50050 device=1:GOSUB 50080:REM Open Workstation (Screen)
50060 RETURN
50070 '
50080 '********** Open Workstation
50090 GOSUB 50170:REM Close Workstation
50100 contrl%(1)=1:contrl%(2)=0:contrl%(4)=10
50110 intin%(1)=device
50120 RESTORE 50150
50130 FOR i=2 TO 10:READ intin%(i):NEXT
50140 GOSUB 60000:RETURN
50150 DATA 1,1,1,1,1,1,2,6,1
50160 '
50170 '********** Close Workstation
50180 contrl%(1)=2:contrl%(2)=0
50190 GOSUB 60000:RETURN
50200 '
50210 '********** Update Workstation
50220 contrl%(1)=4:contrl%(2)=0
50230 GOSUB 60000:RETURN
50240 '
60000 '********** GDOS-Aufruf
60010 pb%(1)=UNT(VARPTR(contrl%(1)))
60020 pb%(2)=UNT(VARPTR(intin%(1)))
60030 pb%(3)=UNT(VARPTR(ptsin%(1)))
60040 pb%(4)=UNT(VARPTR(intout%(1)))
60050 pb%(5)=UNT(VARPTR(ptsout%(1)))
60060 CALL gdos%(gdos%,pb%(1))
60070 RETURN
)))
60040 pb%(4)=UNT(VARPTR(intout%(1)))
60050 pb%(5)=UNT(VARPTR(ptsout%(1)))
60060 CALL gdos%(gdos%,pb%(1))
60070 RET