- LINE(0,56,255,56,8,VGA); LINE(0,113,255,113,8,VGA);
- LINE(0,170,255,170,8,VGA); {LINE(0,227,255,227,8,VGA);}
- LINE(127,0,127,170,8,VGA); LINE(255,0,255,170,8,VGA);
- LINE(0,0,255,0,15,VGA); LINE(0,1,255,1,15,VGA);
- LINE(0,2,0,190-3,15,VGA); LINE(1,2,1,190-3,15,VGA);
- LINE(L[II].FIELDX-2,2,L[II].FIELDX-2,L[II].FIELDY-1,15,VGA);
- LINE(L[II].FIELDX-1,2,L[II].FIELDX-1,L[II].FIELDY-1,15,VGA);
- LINE(0,L[II].FIELDY-2,L[II].FIELDX-1,L[II].FIELDY-2,15,VGA);
- LINE(0,L[II].FIELDY-1,L[II].FIELDX-1,L[II].FIELDY-1,15,VGA);
- FOR OBJ2:=1TO L[II].NROBJ DO IF OBJ2<>OBJ THEN DISPOBJ(OBJ2,7);
- IF(OBJ>0)AND(OBJ<=L[II].NROBJ)THEN DISPOBJ(OBJ,14);
- REPEAT UNTIL READKEY<>#0;
- MAINTITLE;
-END; {DISPMAP}
+ SETPAL(0,0,0,0); SETPAL(1,32,0,0); {BACK}
+ SETPAL(2,8,0,0); SETPAL(3,35,0,0); {SUBGRID}
+ SETPAL(4,12,0,0); SETPAL(5,38,0,0); {GRID}
+ SETPAL(6,20,0,0); SETPAL(7,40,0,0); {MID}
+ SETPAL(8,28,0,0); SETPAL(9,44,0,0); {MAINGRID}
+
+ SETPAL(12,48,32,0); SETPAL(13,44,0,0); {STLN}
+ SETPAL(14,48,48,0); SETPAL(15,52,0,0); {STARTPOS}
+ SETPAL(26,0,0,63); SETPAL(27,63,0,0); {FLAG1}
+ SETPAL(28,0,63,0); SETPAL(29,63,0,0); {FLAG2}
+
+ SETPAL(16,32,32,32); SETPAL(17,48,0,0); {HALFOBJ}
+ SETPAL(18,48,48,48); SETPAL(19,63,0,0); {OBJ}
+ SETPAL(20,63,63,20); SETPAL(21,63,16,0); {HL_OBJ}
+ SETPAL(22,63,63,63); SETPAL(23,63,0,0); {BORDER}
+END; {DISPMCGACOMMON}
+
+PROCEDURE DISP1MAP(OBJ:INTEGER);
+VAR MXX,MYY:WORD;
+ M1,M2:BOOLEAN;
+{TYPE SCRN = ARRAY[0..199,0..319]OF BYTE;
+VAR VIRT:^SCRN;
+ I1,I1X,I1Y:BYTE;
+BEGIN
+ NEW(VIRT);
+ FOR TI:=0 TO 199DO FOR I2:=0 TO 319DO VIRT^[I,I2]:=0; DISPMAP(OBJ,VIRT);
+ WINDOW(1,3,80,20);
+ FOR I:=0 TO 19DO FOR I2:=0 TO 79DO BEGIN
+ I1X:=ROUND(I2*L[II].FIELDX/80); I1Y:=ROUND(I*L[II].FIELDY/20);
+ CASE VIRT^[I1Y,I1X]OF
+ 0:TEXTCOLOR(0);
+ 1:TEXTCOLOR(8);
+ 2:TEXTCOLOR(7);
+ 3:TEXTCOLOR(15);
+ 4,5:TEXTCOLOR(14);
+ 6..9:TEXTCOLOR(9);
+ 10..12:TEXTCOLOR(12);
+ END;
+ WRITE('�');
+ END;
+ DISPOSE(VIRT);}
+BEGIN
+ DISPMCGACOMMON; DISPMAP(OBJ,PTR(VGA,0)); CLRKEY;
+ REPEAT
+ IF USEMOUSE THEN BEGIN
+ GETMOUSEPOS(MX,MY,M1,M2); MX:=MX SHR 1; {MY:=MY SHR 1;}
+ PUTPIXEL(MX,MY,GETPIXEL(MX,MY,VGA)XOR 1,PTR(VGA,0));
+ DELAY(10);
+ PUTPIXEL(MX,MY,GETPIXEL(MX,MY,VGA)XOR 1,PTR(VGA,0));
+ IF M1 THEN PPLINE(MXX,MYY,MX,MY,0);
+ IF M2 THEN PPLINE(MXX,MYY,MX,MY,1);
+ MXX:=MX; MYY:=MY;
+ END; {MOUSE}
+ UNTIL KEYPRESSED; WHILE KEYPRESSED DO READKEY; MAINTITLE;
+END; {DISP1MAP}
+
+PROCEDURE DISPMANYMAP(MAG:BYTE);
+TYPE SCRN = ARRAY[0..199,0..319]OF BYTE;
+VAR VIRT:^SCRN;
+PROCEDURE DISP1MANYMAP(OFFSETX,OFFSETY,MAG:BYTE);
+VAR I1,I1X,I1Y,I1XX,I1YY:BYTE;
+BEGIN
+ FOR I:=0 TO 199DO FOR I2:=0 TO 255DO VIRT^[I,I2]:=0; DISPMAP(0,VIRT);
+ FOR I:=0 TO 255 DIV MAG DO FOR I2:=0 TO 199 DIV MAG DO BEGIN
+ {I1X:=ROUND(I2*L[II].FIELDX/80); I1Y:=ROUND(I*L[II].FIELDY/20);}
+ I1:=0;
+ FOR I1XX:=I*MAG TO(I+1)*MAG-1 DO FOR I1YY:=I2*MAG TO(I2+1)*MAG-1DO
+ IF VIRT^[I1YY,I1XX]>I1 THEN I1:=VIRT^[I1YY,I1XX];
+ PUTPIXEL(OFFSETX+I,OFFSETY+I2,I1,PTR(VGA,0));
+ END;
+END; {DISP1MANYMAP}
+VAR MXX,MYY:WORD; M1,M2:BOOLEAN;
+BEGIN
+ DISPMCGACOMMON; NEW(VIRT);
+ MX:=255 DIV MAG+1; MY:=192 DIV MAG+1;
+ FOR II:=1TO MIN(B.LTOTAL,SQR(MAG))DO
+ DISP1MANYMAP(((II-1)MOD MAG)*MX,(II-1)DIV MAG*MY,MAG);
+ DISPOSE(VIRT); CLRKEY;
+ REPEAT
+ IF USEMOUSE THEN BEGIN
+ GETMOUSEPOS(MX,MY,M1,M2); MX:=MX SHR 1; {MY:=MY SHR 1;}
+ PUTPIXEL(MX,MY,GETPIXEL(MX,MY,VGA)XOR 1,PTR(VGA,0));
+ DELAY(10);
+ PUTPIXEL(MX,MY,GETPIXEL(MX,MY,VGA)XOR 1,PTR(VGA,0));
+ IF M1 THEN PPLINE(MXX,MYY,MX,MY,0);
+ IF M2 THEN PPLINE(MXX,MYY,MX,MY,1);
+ MXX:=MX; MYY:=MY;
+ END; {MOUSE}
+ UNTIL KEYPRESSED; WHILE KEYPRESSED DO READKEY; MAINTITLE;
+END; {DISP1MAP}
+
+PROCEDURE MAPOBJ(OBJ,OBJSUB:INTEGER);
+VAR M1,M2:BOOLEAN;
+ MXX,MYY:WORD;
+ XMIN,XDEF,XMAX,YMIN,YDEF,YMAX:INTEGER;
+BEGIN
+ DISPMCGACOMMON; DISPMAP(OBJ,PTR(VGA,0)); CLRKEY;
+ IF OBJSUB=0THEN BEGIN
+ XDEF:=L[II].OBJ[OBJ].X1; YDEF:=L[II].OBJ[OBJ].Y1;
+ END {FROM} ELSE BEGIN
+ XDEF:=L[II].OBJ[OBJ].X2; YDEF:=L[II].OBJ[OBJ].Y2;
+ END; {TO}
+ CASE L[II].OBJ[OBJ].TYP OF
+ 1:BEGIN XMIN:=2; XMAX:=L[II].FIELDX-3; YMIN:=2; YMAX:=L[II].FIELDY-3;
+ END; {LINE}
+ 2:BEGIN XMIN:=2; XMAX:=L[II].FIELDX-4; YMIN:=2; YMAX:=L[II].FIELDY-4;
+ END; {FATTY}
+ 3:BEGIN XMIN:=2; XMAX:=L[II].FIELDX-1; YMIN:=2; YMAX:=L[II].FIELDY-2;
+ IF OBJSUB=0THEN YMAX:=L[II].OBJ[OBJ].Y1+L[II].OBJ[OBJ].Y2-1
+ ELSE YMIN:=L[II].OBJ[OBJ].Y1+1;
+ END; {BOX}
+ 4:BEGIN XMIN:=0;
+ IF OBJSUB=0THEN BEGIN
+ XMAX:=255; YMIN:=0; YMAX:=255;
+ END {POS} ELSE BEGIN
+ XMAX:=120; XDEF:=ABS(INTEGER(L[II].OBJ[OBJ].X1)-L[II].OBJ[OBJ].X2);
+ YMIN:=L[II].OBJ[OBJ].Y1; YDEF:=L[II].OBJ[OBJ].Y1; YMAX:=L[II].OBJ[OBJ].Y1;
+ END; {SIZE}
+ END; {CIRCLE}
+ END; {TYPE}
+ MY:=YDEF;
+ IF USEMOUSE THEN BEGIN MX:=XDEF SHL 1; MOUSE(4,MX,MX,MX,MY); END; {INITMOUSE}
+ MX:=XDEF;
+ REPEAT
+ PPDISPOBJ(OBJ,0);
+ IF USEMOUSE THEN BEGIN
+ REPEAT GETMOUSEPOS(MX,MY,M1,M2);
+ UNTIL(MX<>MXX)OR(MY<>MYY)OR(M1)OR(M2)OR(KEYPRESSED);
+ MXX:=MX; MYY:=MY; MX:=MX SHR 1;
+ IF KEYPRESSED THEN BEGIN C:=READKEY;
+ IF(C=#13)OR(C=' ')THEN M1:=TRUE; IF(C=#27)OR(C='+')THEN M2:=TRUE;
+ END; {KEYS}
+ END {MOUSE} ELSE BEGIN
+ REPEAT UNTIL KEYPRESSED; C:=READKEY;
+ IF(C=#13)OR(C=' ')THEN M1:=TRUE ELSE M1:=FALSE;
+ IF(C=#27)OR(C='+')THEN M2:=TRUE ELSE M2:=FALSE;
+ IF C='2'THEN INC(MY); {DOWN} IF C='8'THEN DEC(MY); {UP}
+ IF C='4'THEN DEC(MX); {L} IF C='6'THEN INC(MX); {R}
+ IF C=#0THEN BEGIN C:=READKEY;
+ IF C=#80 THEN INC(MY); {DOWN} IF C=#72 THEN DEC(MY); {UP}
+ IF C=#75 THEN DEC(MX); {L} IF C=#77 THEN INC(MX); {R}
+ END; {EXTENDED}
+ END; {KEYB}
+ IF NOT M1 THEN BEGIN
+ IF MX<XMIN THEN MX:=XMIN; IF MX>XMAX THEN MX:=XMAX;
+ IF MY<YMIN THEN MY:=YMIN; IF MY>YMAX THEN MY:=YMAX;
+ IF M2 THEN BEGIN MX:=XDEF; MY:=YDEF; END; {R_BUTTON}
+ IF(USEMOUSE)AND((MX<>MXX)OR(MY<>MYY))THEN BEGIN
+ MX:=MX SHL 1; MOUSE(4,MX,MX,MX,MY); MX:=MX SHR 1;
+ END; {SET_NEW_MOUSE_POS}
+ PPDISPOBJ(OBJ,1);
+ IF OBJSUB=0THEN CASE L[II].OBJ[OBJ].TYP OF
+ 3:BEGIN
+ INC(L[II].OBJ[OBJ].Y2,L[II].OBJ[OBJ].Y1-MY);
+ L[II].OBJ[OBJ].X1:=MX; L[II].OBJ[OBJ].Y1:=MY;
+ END; {BOX}
+ ELSE BEGIN L[II].OBJ[OBJ].X1:=MX; L[II].OBJ[OBJ].Y1:=MY; END; {DEF}
+ END {FROM} ELSE CASE L[II].OBJ[OBJ].TYP OF
+ 3:BEGIN L[II].OBJ[OBJ].X2:=MX; L[II].OBJ[OBJ].Y2:=MY-L[II].OBJ[OBJ].Y1;
+ END; {BOX}
+ 4:BEGIN L[II].OBJ[OBJ].X2:=ABS(MX-INTEGER(L[II].OBJ[OBJ].X1)); L[II].OBJ[OBJ].Y2:=0; END; {CIRCLE}
+ ELSE BEGIN L[II].OBJ[OBJ].X2:=MX; L[II].OBJ[OBJ].Y2:=MY; END; {DEF}
+ END; {TO}
+ END; {K}
+ UNTIL M1; MAINTITLE;
+ IF USEMOUSE THEN WHILE(M1)OR(M2)DO GETMOUSEPOS(MX,MY,M1,M2);
+ WHILE KEYPRESSED DO C:=READKEY;
+ IF(L[II].OBJ[OBJ].TYP=3)AND(L[II].OBJ[OBJ].Y1<0)THEN BEGIN
+ I4:=L[II].OBJ[OBJ].Y1; L[II].OBJ[OBJ].Y1:=L[II].OBJ[OBJ].Y2;
+ L[II].OBJ[OBJ].Y1:=-I4;
+ END; {SWAP Y FOR BOX}
+END; {MAPOBJ}