|
|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 7808 (0x1e80)
Types: TextFile
Names: »GSX.PAS«
└─⟦a1337913c⟧ Bits:30002679 PGM1 - indeholder forskellige undervisningsprogrammer
└─⟦this⟧ »GSX.PAS«
(* FØLGENDE PROCEDURER ER FJERNET:
ARC,PIE,CIRCLE,CELLARRAY,TEXTFONT,SETCOLOR,INQCOLOR,INQTABLET.
*)
CONST
MAXINTIN = 80; (* Maximum number of input integers *)
MAXPTSIN = 4; (* Maximum number of input points *)
MAXINTOUT = 80; (* Maximum number of output integers *)
MAXPTSOUT = 2; (* Maximum number of output points *)
TYPE
COOR = RECORD
X,Y: INTEGER;
END;
STRINGIN = STRINGÆMAXINTINÅ;
STRINGOUT = STRINGÆMAXINTOUTÅ;
VAR
CONTRL : ARRAYÆ1..9Å OF INTEGER;
INTIN : ARRAYÆ1..MAXINTINÅ OF INTEGER;
PTSIN : ARRAYÆ1..MAXPTSINÅ OF COOR;
INTOUT : ARRAYÆ1..MAXINTOUTÅ OF INTEGER;
PTSOUT : ARRAYÆ1..MAXPTSOUTÅ OF COOR;
WSINTOUT : ARRAYÆ1..45Å OF INTEGER;
WSPTSOUT : ARRAYÆ1..6Å OF COOR;
ACTUAL : INTEGER;
(*$R-,K-*)
PROCEDURE GSX(VAR CTRL,INTI,PTSI,INTO,PTSO);
TYPE
GSXPB = RECORD
CTRLP,INTIP,PTSIP,INTOP,PTSOP: ^INTEGER;
END;
RPACK = RECORD
AX,BX,CX,DX,BP,SI,DI,DS,ES,FLAGS: INTEGER;
END;
VAR
PB: GSXPB;
RP: RPACK;
BEGIN
PB.CTRLP:=ADDR(CTRL);
PB.INTIP:=ADDR(INTI); PB.PTSIP:=ADDR(PTSI);
PB.INTOP:=ADDR(INTO); PB.PTSOP:=ADDR(PTSO);
RP.CX:=$473; RP.DX:=OFS(PB); RP.DS:=SEG(PB);
SWINT(224,RP);
END;
PROCEDURE GSXC(FUNC,NPTS,NINT: INTEGER);
BEGIN
CONTRLÆ1Å:=FUNC; CONTRLÆ2Å:=NPTS; CONTRLÆ4Å:=NINT;
GSX(CONTRL,INTIN,PTSIN,INTOUT,PTSOUT);
END;
PROCEDURE GSXP(FUNC,NPTS: INTEGER; VAR PTSIN);
BEGIN
CONTRLÆ1Å:=FUNC; CONTRLÆ2Å:=NPTS; CONTRLÆ4Å:=0;
GSX(CONTRL,INTIN,PTSIN,INTOUT,PTSOUT);
END;
PROCEDURE GSXI(FUNC,VALUE: INTEGER);
BEGIN
INTINÆ1Å:=VALUE; GSXC(FUNC,0,1); ACTUAL:=INTOUTÆ1Å;
END;
PROCEDURE GSXX(FUNC,VALUE: INTEGER);
BEGIN
PTSINÆ1Å.X:=VALUE; PTSINÆ1Å.Y:=0;
GSXC(FUNC,1,0); ACTUAL:=PTSOUTÆ1Å.X;
END;
PROCEDURE GSXY(FUNC,VALUE: INTEGER);
BEGIN
PTSINÆ1Å.X:=0; PTSINÆ1Å.Y:=VALUE;
GSXC(FUNC,1,0); ACTUAL:=PTSOUTÆ1Å.Y;
END;
PROCEDURE OPENWS(ID: INTEGER);
CONST
WSINTI: ARRAYÆ2..10Å OF INTEGER = (1,1,1,1,1,1,1,1,1);
BEGIN
INTINÆ1Å:=ID; MOVE(WSINTI,INTINÆ2Å,18);
CONTRLÆ1Å:=1; CONTRLÆ2Å:=0; CONTRLÆ4Å:=10;
GSX(CONTRL,INTIN,PTSIN,WSINTOUT,WSPTSOUT);
END;
PROCEDURE INITWS(VAR WSINTIN);
BEGIN
CONTRLÆ1Å:=1; CONTRLÆ2Å:=0; CONTRLÆ4Å:=10;
GSX(CONTRL,WSINTIN,PTSIN,WSINTOUT,WSPTSOUT);
END;
PROCEDURE CLOSEWS;
BEGIN
GSXC(2,0,0);
END;
PROCEDURE CLEARWS;
BEGIN
GSXC(3,0,0);
END;
PROCEDURE UPDATEWS;
BEGIN
GSXC(4,0,0);
END;
PROCEDURE POLYLINE(NPTS: INTEGER; VAR PTSIN);
BEGIN
GSXP(6,NPTS,PTSIN);
END;
PROCEDURE LINETYPE(TYP: INTEGER);
BEGIN
GSXI(15,TYP);
END;
PROCEDURE LINEWIDTH(WIDTH: INTEGER);
BEGIN
GSXX(16,WIDTH);
END;
PROCEDURE POLYMARK(NPTS: INTEGER; VAR PTSIN);
BEGIN
GSXP(7,NPTS,PTSIN);
END;
PROCEDURE MARKTYPE(TYP: INTEGER);
BEGIN
GSXI(18,TYP);
END;
PROCEDURE MARKSCALE(SCALE: INTEGER);
BEGIN
GSXY(19,SCALE);
END;
PROCEDURE BAR(X1,Y1,X2,Y2: INTEGER);
BEGIN
CONTRLÆ6Å:=1;
PTSINÆ1Å.X:=X1; PTSINÆ1Å.Y:=Y1;
PTSINÆ2Å.X:=X2; PTSINÆ2Å.Y:=Y2;
GSXC(11,2,0);
END;
PROCEDURE POLYFILL(NPTS: INTEGER; VAR PTSIN);
BEGIN
GSXP(9,NPTS,PTSIN);
END;
PROCEDURE FILLTYPE(TYP: INTEGER);
BEGIN
GSXI(23,TYP);
END;
PROCEDURE FILLSTYLE(INDEX: INTEGER);
BEGIN
GSXI(24,INDEX);
END;
PROCEDURE GTEXT(X,Y: INTEGER; S: STRINGIN);
VAR
I: INTEGER;
BEGIN
FOR I:=1 TO LEN(S) DO INTINÆIÅ:=ORD(SÆIÅ);
PTSINÆ1Å.X:=X; PTSINÆ1Å.Y:=Y; GSXC(8,1,LEN(S));
END;
PROCEDURE CHARHEIGHT(HEIGHT: INTEGER;
VAR CHARW,CHARH,CELLW,CELLH: INTEGER);
BEGIN
GSXY(12,HEIGHT);
CHARW:=PTSOUTÆ1Å.X; CHARH:=PTSOUTÆ1Å.Y;
CELLW:=PTSOUTÆ2Å.X; CELLH:=PTSOUTÆ1Å.Y;
END;
PROCEDURE CHARUPVEC(ANGLE: INTEGER);
CONST
F1800 = 0.001745329252; (* PI/1800 *)
BEGIN
INTINÆ1Å:=ANGLE;
INTINÆ2Å:=ROUND(100.0*COS(ANGLE*F1800));
INTINÆ3Å:=ROUND(100.0*SIN(ANGLE*F1800));
GSXC(13,0,3); ACTUAL:=INTOUTÆ1Å;
END;
PROCEDURE LINECOLOR(INDEX: INTEGER);
BEGIN
GSXI(17,INDEX);
END;
PROCEDURE MARKCOLOR(INDEX: INTEGER);
BEGIN
GSXI(20,INDEX);
END;
PROCEDURE TEXTCOLOR(INDEX: INTEGER);
BEGIN
GSXI(22,INDEX);
END;
PROCEDURE FILLCOLOR(INDEX: INTEGER);
BEGIN
GSXI(25,INDEX);
END;
PROCEDURE WRITEMODE(MODE: INTEGER);
BEGIN
GSXI(32,MODE);
END;
PROCEDURE INPUTMODE(DEVICE,MODE: INTEGER);
BEGIN
INTINÆ1Å:=DEVICE; INTINÆ2Å:=MODE; GSXC(33,0,2);
END;
PROCEDURE RQLOCATOR(DEVICE,XIN,YIN: INTEGER;
VAR STATUS,TERM,XOUT,YOUT: INTEGER);
BEGIN
INPUTMODE(1,1); INTINÆ1Å:=DEVICE;
PTSINÆ1Å.X:=XIN; PTSINÆ1Å.Y:=YIN;
GSXC(28,1,1);
STATUS:=CONTRLÆ5Å; TERM:=INTOUTÆ1Å;
XOUT:=PTSOUTÆ1Å.X; YOUT:=PTSOUTÆ1Å.Y;
END;
PROCEDURE SMLOCATOR(DEVICE: INTEGER;
VAR STATUS,XOUT,YOUT: INTEGER);
BEGIN
INPUTMODE(1,2); INTINÆ1Å:=DEVICE;
GSXC(28,0,1); STATUS:=CONTRLÆ5Å;
XOUT:=PTSOUTÆ1Å.X; YOUT:=PTSOUTÆ1Å.Y;
END;
PROCEDURE RQVALUATOR(DEVICE,VIN: INTEGER;
VAR STATUS,VOUT: INTEGER);
BEGIN
INPUTMODE(2,1); INTINÆ1Å:=DEVICE; INTINÆ2Å:=VIN;
GSXC(29,0,2); STATUS:=CONTRLÆ5Å; VOUT:=INTOUTÆ1Å;
END;
PROCEDURE SMVALUATOR(DEVICE: INTEGER;
VAR STATUS,VOUT: INTEGER);
BEGIN
INPUTMODE(2,2); INTINÆ1Å:=DEVICE;
GSXC(29,0,1); STATUS:=CONTRLÆ5Å; VOUT:=INTOUTÆ1Å;
END;
PROCEDURE RQCHOICE(DEVICE,CIN: INTEGER;
VAR STATUS,COUT: INTEGER);
BEGIN
INPUTMODE(3,1); INTINÆ1Å:=DEVICE; INTINÆ2Å:=CIN;
GSXC(30,0,2); STATUS:=CONTRLÆ5Å; COUT:=INTOUTÆ1Å;
END;
PROCEDURE SMCHOICE(DEVICE: INTEGER;
VAR STATUS,COUT: INTEGER);
BEGIN
INPUTMODE(3,2); INTINÆ1Å:=DEVICE;
GSXC(30,0,1); STATUS:=CONTRLÆ5Å; COUT:=INTOUTÆ1Å;
END;
PROCEDURE RQSTRING(DEVICE,MAXLEN,MODE: INTEGER;
VAR S: STRINGOUT);
VAR
I: INTEGER;
BEGIN
INPUTMODE(4,1); INTINÆ1Å:=DEVICE;
INTINÆ2Å:=MAXLEN; INTINÆ3Å:=MODE;
GSXC(31,0,3); SÆ0Å:=CHR(INTOUTÆ5Å);
FOR I:=1 TO CONTRLÆ5Å DO SÆIÅ:=CHR(INTOUTÆIÅ);
END;
PROCEDURE ESCP(FUNC,NPTS,NINT: INTEGER);
BEGIN
CONTRLÆ6Å:=FUNC; GSXC(5,NPTS,NINT);
END;
PROCEDURE ESCN(FUNC: INTEGER);
BEGIN
CONTRLÆ6Å:=FUNC; GSXC(5,0,0);
END;
PROCEDURE INQCELLS(VAR ROW,COL: INTEGER);
BEGIN
ESCN(1); ROW:=INTOUTÆ1Å; COL:=INTOUTÆ2Å;
END;
PROCEDURE ENTERGRAF;
BEGIN ESCN(2); END;
PROCEDURE EXITGRAF;
BEGIN ESCN(3); END;
PROCEDURE CURSORUP;
BEGIN ESCN(4); END;
PROCEDURE CURSORDOWN;
BEGIN ESCN(5); END;
PROCEDURE CURSORRIGHT;
BEGIN ESCN(6); END;
PROCEDURE CURSORLEFT;
BEGIN ESCN(7); END;
PROCEDURE CURSORHOME;
BEGIN ESCN(8); END;
PROCEDURE ERAEOS;
BEGIN ESCN(9); END;
PROCEDURE ERAEOL;
BEGIN ESCN(10); END;
PROCEDURE CURSOR(ROW,COL: INTEGER);
BEGIN
INTINÆ1Å:=ROW; INTINÆ2Å:=COL; ESCP(11,0,2);
END;
PROCEDURE CTEXT(S: STRINGIN);
VAR
I: INTEGER;
BEGIN
FOR I:=1 TO LEN(S) DO INTINÆIÅ:=ORD(SÆIÅ);
ESCP(12,0,LEN(S));
END;
PROCEDURE REVERSEON;
BEGIN ESCN(13); END;
PROCEDURE REVERSEOFF;
BEGIN ESCN(14); END;
PROCEDURE INQCURSOR(VAR ROW,COL: INTEGER);
BEGIN
ESCN(15); ROW:=INTOUTÆ1Å; COL:=INTOUTÆ2Å;
END;
PROCEDURE HARDCOPY;
CONST BIT : ARRAY(.0..7.) OF BYTE = ($01,$02,$04,$08,$10,$20,$40,$80);
VAR SCREEN : ARRAY(.0..34,BYTE.) OF INTEGER AT $D000:$0000;
DY : 0..7;
Y : 0..256;
X : 0..559;
ASC: BYTE;
BEGIN
WRITE(LST,@27,'>',@27,'T16',@27,'E');
Y:=0;
REPEAT
WRITE(LST,@27,'F0103',@27,'S0560');
FOR X:=0 TO 559 DO BEGIN
ASC:=0;
FOR DY:=0 TO 7 DO
IF (SCREEN(.X DIV 16,Y+DY.) SHL (X MOD 16)) AND $8000=$8000 THEN
ASC:=ASC+BIT(.DY.);
WRITE(LST,CHR(ASC))
END;
WRITELN(LST);
Y:=Y+8
UNTIL Y=256;
WRITE(LST,@27,'c1')
END;
PROCEDURE GCURSOR(X,Y: INTEGER);
BEGIN
PTSINÆ1Å.X:=X; PTSINÆ1Å.Y:=Y; ESCP(18,1,0);
END;
PROCEDURE REMGCUR;
BEGIN ESCN(19); END;
«eof»