+PROCEDURE PPLINE(X,Y,XX,YY:INTEGER;COL:BYTE);
+VAR LINE1,LINE2,SX,SY,SXY,SYX,DX1,DX2,DY1,DY2:INTEGER;
+BEGIN {SPECIAL LINE}
+ SX:=XX-X; SY:=YY-Y; DX1:=SGN(SX); DX2:=DX1; DY1:=SGN(SY); DY2:=0;
+ SXY:=ABS(SX); SYX:=ABS(SY);
+ IF SYX>SXY THEN BEGIN
+ DY2:=DY1; DX2:=0; LINE1:=SXY; SXY:=SYX; SYX:=LINE1;
+ END; {VERTICAL_LINE}
+ LINE1:=SXY SHR 1;
+ FOR LINE2:=0TO SXY DO BEGIN
+ PUTPIXEL(X,Y,GETPIXEL(X,Y,VGA)OR 1-COL,PTR(VGA,0));
+ LINE1:=LINE1+SYX;
+ IF LINE1<SXY THEN BEGIN
+ INC(X,DX2); INC(Y,DY2);
+ END {STRAIGT_AHEAD} ELSE BEGIN
+ LINE1:=LINE1-SXY;
+ INC(X,DX1); INC(Y,DY1);
+ END; {NEXT_STEP}
+ END; {DRAW_THE_LINE}
+END; {PPLINE}
+PROCEDURE PPCIRCLE(X,Y,Z,COL:BYTE);
+VAR XX,YY,ZZ:INTEGER;
+BEGIN
+ XX:=-1; YY:=Z; ZZ:=-Z;
+ REPEAT
+ INC(XX);
+ PPLINE(X-XX,Y+YY,X+XX,Y+YY,COL); PPLINE(X-XX,Y-YY,X+XX,Y-YY,COL);
+ PPLINE(X-YY,Y+XX,X+YY,Y+XX,COL); PPLINE(X-YY,Y-XX,X+YY,Y-XX,COL);
+ IF ZZ>=0 THEN BEGIN ZZ:=ZZ-(YY SHL 1)+2; DEC(YY); END;
+ ZZ:=ZZ+(XX SHL 1)+3;
+ UNTIL XX>=YY;
+END; {PPCIRCLE}
+
+PROCEDURE PPDISPOBJ(OBJ:INTEGER;COL:BYTE);
+VAR Y:BYTE;
+BEGIN
+ CASE L[II].OBJ[OBJ].TYP OF
+ 1:PPLINE(L[II].OBJ[OBJ].X1,L[II].OBJ[OBJ].Y1,L[II].OBJ[OBJ].X2,L[II].OBJ[OBJ].Y2,COL);
+ 2:BEGIN
+ PPLINE(L[II].OBJ[OBJ].X1,L[II].OBJ[OBJ].Y1,L[II].OBJ[OBJ].X2,L[II].OBJ[OBJ].Y2,COL);
+ PPLINE(L[II].OBJ[OBJ].X1+1,L[II].OBJ[OBJ].Y1,L[II].OBJ[OBJ].X2+1,L[II].OBJ[OBJ].Y2,COL);
+ PPLINE(L[II].OBJ[OBJ].X1+1,L[II].OBJ[OBJ].Y1+1,L[II].OBJ[OBJ].X2+1,L[II].OBJ[OBJ].Y2+1,COL);
+ PPLINE(L[II].OBJ[OBJ].X1,L[II].OBJ[OBJ].Y1+1,L[II].OBJ[OBJ].X2,L[II].OBJ[OBJ].Y2+1,COL);
+ END; {FATLINE}
+ 3:BEGIN
+ FOR Y:=L[II].OBJ[OBJ].Y1 TO L[II].OBJ[OBJ].Y1+L[II].OBJ[OBJ].Y2-1DO
+ PPLINE(L[II].OBJ[OBJ].X1,MIN(Y,191),L[II].OBJ[OBJ].X2,MIN(Y,191),COL);
+ END; {BOX}
+ 4:PPCIRCLE(L[II].OBJ[OBJ].X1,L[II].OBJ[OBJ].Y1,L[II].OBJ[OBJ].X2,COL);
+ END; {OBJECT TYPE}
+END; {DISPOBJ}
+