ūGRAFIKA PAS q­/ { PROCEDURA ZOBRAZI BOD O SOURADNICICH X,Y } { MODE JE PARAMETR URCUJICI DRUH ZAPISU VIZ TAB.: } { MODE XOR ... 0 } { OR ... 1 } { RESET ... 2 } { POINT ... 3 } { LZE JI POUZIT POUZE V REZIMU COMPILACE NA COM.FILE } { JINAK BY DOSLO K PREPSANI PROGRAMU PAMETI VRAM } PROCEDURE PLOT(X,Y,MODE:INTEGER); BEGIN INLINE($F3/$AF/$2A/Y/$11/$C8/$00/$ED/$52/$30/$67/$2A/X/$3A/$4C/$EE/$FE/$50); INLINE($11/$40/$01/$20/$03/$11/$80/$02/$ED/$52/$30/$53/$3A/MODE/$21/*+12); INLINE($85/$6F/$30/$01/$24/$7E/$D3/$CC/$18/$04/$2F/$4F/$6F/$CF); INLINE($ED/$5B/X/$2A/Y/$CB/$3A/$CB/$1B/$CB/$3A/$CB/$1B/$CB/$3A/$CB/$1B/$D5); INLINE($54/$5D/$29/$29/$19/$29/$29/$29/$3A/$4C/$EE/$FE/$50/$20/$01/$29/$D1); INLINE($19/$CB/$FC/$3A/X/$E6/$07/$06/$01/$28/$05/$CB/$10/$3D/$20/$FB); INLINE($DB/$E0/$70/$DB/$E1/$3E/$8F/$D3/$CC/$FB) END; { PROCEDURA ZOBRAZI SPOJNICI BODU O SOURADNICICH } { X1,Y1 A X2,Y2. PARAMETR MODU JE STEJNY JAKO U } { PROCEDURY PLOT } PROCEDURE LINE(X1,Y1,X2,Y2,MODE:INTEGER); VAR X,Y,DX,DY,XS,YS,D:INTEGER; F:BOOLEAN; BEGIN X:=X1; Y:=Y1; XS:=1; YS:=1; IF X1>X2 THEN XS:=-1; IF Y1>Y2 THEN YS:=-1; DX:=ABS(X2-X1); DY:=ABS(Y2-Y1); F:=DX>DY; IF DX=0 THEN D:=-1 ELSE D:=DX DIV 2; PLOT(X2,Y2,MODE); WHILE NOT ((X=X2) AND (Y=Y2)) DO BEGIN IF D<0 THEN BEGIN Y:=Y+YS; D:=D+DX; IF NOT(F) THEN PLOT(X,Y,MODE) END ELSE BEGIN X:=X+XS; D:=D-DY; IF F THEN PLOT(X,Y,MODE) END END END; { PROCEDURA ZOBRAZI OBDELNIK SE SOURADNICEMI PROTI- } { LEHLYCH ROHU X1,Y1 A X2,Y2. PARAMETR MODE MA STEJNY } { VYZNAM JAKO U PROCEDURY PLOT } PROCEDURE BOX(X1,Y1,X2,Y2,MODE:INTEGER); VAR X,Y:INTEGER; BEGIN IF X1>X2 THEN BEGIN X:=X1; X1:=X2; X2:=X END; IF Y1>Y2 THEN BEGIN Y:=Y1; Y1:=Y2; Y2:=Y END; FOR X:=X1 TO X2 DO BEGIN PLOT(X,Y1,MODE); PLOT(X,Y2,MODE) END; FOR Y:=Y1 TO Y2 DO BEGIN PLOT(X1,Y,MODE); PLOT(X2,Y,MODE) END END; { PROCEDURA VYKRESLI ELIPSU SE STREDEM O SOURADNICICH} { SX,SY A POLOOSAMI A,B V OSE X,Y } PROCEDURE ELIPSE(SX,SY,A,B,MODE:INTEGER); VAR SU,CU,SD,CD,DU:REAL; POCDU,U,X,Y,XI,YI,XII,YII, XIII,YIII,XIV,YIV,PXI,PYI, PXII,PYII,PXIII,PYIII,PXIV, PYIV:INTEGER; BEGIN POCDU:=((A+B) DIV 20)+2; DU:=90/POCDU; SU:=0; CU:=1; SD:=SIN(DU*PI/180); CD:=COS(DU*PI/180); PXI:=SX+A; PYI:=SY; PXII:=SX-A; PYII:=SY; PXIII:=SX-A; PYIII:=SY; PXIV:=SX+A; PYIV:=SY; FOR U:=0 TO POCDU DO BEGIN X:=ROUND(A*CU); Y:=ROUND(B*SU); SU:=SU*CD+CU*SD; CU:=CU*CD-SU*SD; XI:=SX+X; YI:=SY-Y; XII:=SX-X; YII:=SY-Y; XIII:=SX-X; YIII:=SY+Y; XIV:=SX+X; YIV:=SY+Y; LINE(XI,YI,PXI,PYI,MODE); LINE(XII,YII,PXII,PYII,MODE); LINE(XIII,YIII,PXIII,PYIII,MODE); LINE(XIV,YIV,PXIV,PYIV,MODE); PXI:=XI; PYI:=YI; PXII:=XII; PYII:=YII; PXIII:=XIII; PYIII:=YIII; PXIV:=XIV; PYIV:=YIV; END; END; { PROCEDURA VYPISE OBSAH OBRAZOVKY NA GRAFICKE TISKA- } { RNE RIDICI KOD VOLI 'K' PRO 40 ZNAKOVY MOD A KOD 'L'} { PRO 80 ZNAKOVY MOD. POKUD PARAMETR JE 0 PROVADI } { KLASICKE KOPIROVANI, POKUD JE 1 BUDOU MEZI RADKAMI } { BEZNE MEZERY } PROCEDURE HCOPY(TYP:BYTE); VAR PAS:ARRAY [1..8,1..80] OF BYTE; NPAS,DMOD:BYTE; PROCEDURE READPAS(NPAS,DMOD:BYTE); VAR ADRS:INTEGER; X,Y,POM:BYTE; BEGIN ADRS:=NPAS*DMOD*8+$8000; FOR Y:=1 TO 8 DO FOR X:=1 TO DMOD DO BEGIN INLINE($2A/ADRS/$F3/$DB/$E0/$46/$DB/$E1/$FB/$78/$32/POM); PAS[Y,X]:=POM; ADRS:=ADRS+1 END END; PROCEDURE PRINTPAS(DMOD:BYTE); VAR I,N,P,B,MASK:BYTE; BEGIN IF DMOD=80 THEN WRITE(LST,#27,'L',#128,#2) ELSE WRITE(LST,#27,'K',#64,#1); FOR I:=1 TO DMOD DO BEGIN FOR N:=0 TO 7 DO BEGIN P:=0; MASK:=1 SHL N; FOR B:=1 TO 8 DO IF PAS[B,I] AND MASK <>0 THEN P:=P+(128 SHR (B-1)); WRITE(LST,CHAR(P)) END END; IF TYP=0 THEN WRITE(LST,#27,'J',#14) ELSE WRITELN(LST) END; BEGIN DMOD:=MEM[$EE4C]; FOR NPAS:=0 TO 24 DO BEGIN READPAS(NPAS,DMOD); PRINTPAS(DMOD) END; WRITELN(LST) END; { NASTAVI BARVU OKRAJE OBRAZOVKY } PROCEDURE BORDER(COL:BYTE); BEGIN INLINE($3A/COL/$01/$CF/$06/$ED/$79) END; { NASTAVI BARVU KRSBY,TEXTU NA OBRAZOVCE } PROCEDURE INK(COL:BYTE); BEGIN PORT[$F0]:=$30 OR (COL AND $0F) END; { NASTAVI POZADI OBRAZOVKY POD KRESBOU,TEXTEM } PROCEDURE PAPER(COL:BYTE); BEGIN PORT[$F0]:=COL AND $0F END; { NASTAVI MOD 320 BODU / 40 ZNAKU NA RADCE } PROCEDURE MODE320; BEGIN WRITE(#14) END; { NASTAVI MOD 640 BODU / 80 ZNAKU NA RADCE } PROCEDURE MODE640; BEGIN WRITE(#29) END;