- GETMOUSEPOS(MX,MY,M1,M2); MX:=MX SHR 1; {MY:=MY SHR 1;}
- 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}
- 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));
- UNTIL(KEYPRESSED)OR(M1); MAINTITLE;
+ 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,M3: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 BEGIN
+ IF L[II].OBJ[OBJ].Y2<>0THEN YMAX:=L[II].OBJ[OBJ].Y1+L[II].OBJ[OBJ].Y2-1
+ END {X1,Y1} 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); M3:=KEYPRESSED;
+ UNTIL(MX<>MXX)OR(MY<>MYY)OR(M1)OR(M2)OR(M3);
+ MXX:=MX; MYY:=MY; MX:=MX SHR 1;
+ END; {MOUSE}
+ IF M3 THEN BEGIN
+ 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=#0 THEN 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; {KEYPRESSED}
+ 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}