+ LVLDISP:BYTE;
+
+PROCEDURE MAINTITLE;
+BEGIN
+ SETTEXT; SETPAL(3,44,44,32);
+ WINDOW(1,1,80,25); TEXTBACKGROUND(CB_TEXT); CLRSCR;
+ TEXTCOLOR(CB_BAR); WRITE('���������������������������<');
+ TEXTCOLOR(14); WRITE(' WormEdit � ');
+ TEXTCOLOR(15); WRITE(' by SHIAR ');
+ TEXTCOLOR(CB_BAR); WRITE('>�����������������������������');
+ WINDOW(41,2,41,25); TEXTCOLOR(C_TEXT); TEXTBACKGROUND(CB_TEXT); WRITE(CC('�',23));
+ WINDOW(1,25,80,25); TEXTBACKGROUND(CB_BAR); CLRSCR;
+ GOTOXY(75,1); TEXTCOLOR(0); WRITE('v0.94'); TEXTBACKGROUND(CB_TEXT);
+END; {MAINTITLE}
+
+PROCEDURE PUTPIXEL(X,Y:INTEGER;COL:BYTE;WHERE:POINTER);
+BEGIN {REPLACEMENT_PUTPIXEL}
+ MEM[SEG(WHERE^)+Y*20:OFS(WHERE^)+X]:=COL;
+END; {PUTPIXEL}
+
+PROCEDURE LINE(X,Y,XX,YY:INTEGER;COL:BYTE;WHERE:POINTER);
+VAR LINE1,LINE2,SX,SY,SXY,SYX,DX1,DX2,DY1,DY2:INTEGER;
+BEGIN {JUST_A_SIMPLE_LINE_PROCEDURE}
+ 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,COL,WHERE);
+ 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; {LINE}
+
+PROCEDURE DISPMAP(OBJ:INTEGER;WHERE:POINTER);
+VAR OBJ2:INTEGER;
+PROCEDURE CIRCLE(X,Y,Z,COL:BYTE);
+VAR XX,YY,ZZ:INTEGER;
+BEGIN
+ XX:=-1; YY:=Z; ZZ:=-Z;
+ REPEAT
+ INC(XX);
+ LINE(X-XX,Y+YY,X+XX,Y+YY,COL,WHERE);
+ LINE(X-XX,Y-YY,X+XX,Y-YY,COL,WHERE);
+ LINE(X-YY,Y+XX,X+YY,Y+XX,COL,WHERE);
+ LINE(X-YY,Y-XX,X+YY,Y-XX,COL,WHERE);
+ IF ZZ>=0 THEN BEGIN ZZ:=ZZ-(YY SHL 1)+2; DEC(YY); END;
+ ZZ:=ZZ+(XX SHL 1)+3;
+ UNTIL XX>=YY;
+END; {CIRCLE}
+PROCEDURE DRAW4PIX(D4X,D4Y:INTEGER;D4XSIZE,D4YSIZE,COL:BYTE);
+VAR D4LOOPX,D4LOOPY:BYTE;
+BEGIN
+ FOR D4LOOPX:=0TO D4XSIZE-1DO FOR D4LOOPY:=0TO D4YSIZE-1DO
+ PUTPIXEL(D4X+D4LOOPX,D4Y+D4LOOPY,COL,WHERE);
+END; {DRAW4PIX}
+PROCEDURE DISPOBJ(OBJ:INTEGER;COL:BYTE);
+VAR Y:BYTE;
+BEGIN
+ CASE L[II].OBJ[OBJ].TYP OF
+ 1:LINE(L[II].OBJ[OBJ].X1,L[II].OBJ[OBJ].Y1,L[II].OBJ[OBJ].X2,L[II].OBJ[OBJ].Y2,COL,WHERE);
+ 2:BEGIN
+ LINE(L[II].OBJ[OBJ].X1,L[II].OBJ[OBJ].Y1,L[II].OBJ[OBJ].X2,L[II].OBJ[OBJ].Y2,COL,WHERE);
+ LINE(L[II].OBJ[OBJ].X1+1,L[II].OBJ[OBJ].Y1,L[II].OBJ[OBJ].X2+1,L[II].OBJ[OBJ].Y2,COL,WHERE);
+ LINE(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,WHERE);
+ LINE(L[II].OBJ[OBJ].X1,L[II].OBJ[OBJ].Y1+1,L[II].OBJ[OBJ].X2,L[II].OBJ[OBJ].Y2+1,COL,WHERE);
+ END; {FATLINE}
+ 3:BEGIN
+ FOR Y:=L[II].OBJ[OBJ].Y1 TO L[II].OBJ[OBJ].Y1+L[II].OBJ[OBJ].Y2-1DO
+ LINE(L[II].OBJ[OBJ].X1,MIN(Y,191),L[II].OBJ[OBJ].X2,MIN(Y,191),COL,WHERE);
+ END; {BOX}
+ 4:CIRCLE(L[II].OBJ[OBJ].X1,L[II].OBJ[OBJ].Y1,L[II].OBJ[OBJ].X2,COL);
+ END; {OBJECT TYPE}
+END; {DISPOBJ}
+BEGIN {---}
+ I:=7; WHILE I<=255DO BEGIN LINE(I,0,I,191,2,WHERE); INC(I,8); END; {GRID}
+ I:=0; WHILE I<=191DO BEGIN LINE(0,I,255,I,2,WHERE); INC(I,8); END;
+ I:=127; WHILE I<=255DO BEGIN LINE(I,0,I,191,6,WHERE); INC(I,128); END;
+ I:=0; WHILE I<=191DO BEGIN LINE(0,I,255,I,6,WHERE); INC(I,56); END;
+
+ FOR I:=2TO L[II].FIELDX-2DO BEGIN
+ IF I MOD 2=0THEN PUTPIXEL(I,L[II].FIELDY SHR 1,4,WHERE)
+ ELSE PUTPIXEL(I,L[II].FIELDY SHR 1,2,WHERE);
+ END; {MID}
+ IF L[II].FIELDY MOD 2=0THEN
+ FOR I:=2TO L[II].FIELDX-2DO BEGIN
+ IF I MOD 2=1THEN PUTPIXEL(I,L[II].FIELDY SHR 1-1,4,WHERE)
+ ELSE PUTPIXEL(I,L[II].FIELDY SHR 1-1,2,WHERE);
+ END; {DOUBLEMID}
+ FOR I:=2TO L[II].FIELDY-2DO BEGIN
+ IF I MOD 2=0THEN PUTPIXEL(L[II].FIELDX SHR 1,I,4,WHERE)
+ ELSE PUTPIXEL(L[II].FIELDX SHR 1,I,2,WHERE);
+ END; {CENTER}
+ IF L[II].FIELDX MOD 2=0THEN
+ FOR I:=2TO L[II].FIELDY-2DO BEGIN
+ IF I MOD 2=1THEN PUTPIXEL(L[II].FIELDX SHR 1-1,I,4,WHERE)
+ ELSE PUTPIXEL(L[II].FIELDX SHR 1-1,I,2,WHERE);
+ END; {DOUBLECENTER}
+ IF(II>B.LSINGLE+B.LMULTI)AND(II<=B.LSINGLE+B.LMULTI+B.LRACE)THEN BEGIN
+ LINE(L[II].FLAG1Y,0,L[II].FLAG1Y,L[II].FLAG1X,22,WHERE);
+ LINE(L[II].FLAG1Y,L[II].FLAG1X,L[II].FLAG1Y,L[II].FIELDY-1,24,WHERE);
+ LINE(0,L[II].FLAG1X,L[II].FIELDX-1,L[II].FLAG1X,16,WHERE);
+ END; {RACE}
+ IF II<=B.LSINGLE THEN I:=1 ELSE I:=4;
+ FOR I:=1TO I DO BEGIN
+ CIRCLE(L[II].W[I].X,L[II].W[I].Y,2,14);
+ LINE(L[II].W[I].X,L[II].W[I].Y,L[II].W[I].X+ROUND(SIN(L[II].W[I].D/128*PI)*20),
+ L[II].W[I].Y+ROUND(COS(L[II].W[I].D/128*PI)*20),16,WHERE);
+ LINE(L[II].W[I].X,L[II].W[I].Y,L[II].W[I].X+ROUND(SIN((L[II].W[I].D-13)/128*PI)*15),
+ L[II].W[I].Y+ROUND(COS((L[II].W[I].D-13)/128*PI)*15),14,WHERE);
+ LINE(L[II].W[I].X,L[II].W[I].Y,L[II].W[I].X+ROUND(SIN((L[II].W[I].D+13)/128*PI)*15),
+ L[II].W[I].Y+ROUND(COS((L[II].W[I].D+13)/128*PI)*15),14,WHERE);
+ PUTPIXEL(L[II].W[I].X,L[II].W[I].Y,0,WHERE);
+ END; {WORMS}
+ IF II>B.LSINGLE+B.LMULTI+B.LRACE THEN BEGIN
+ IF L[II].SPRSIZE>0THEN I:=L[II].SPRSIZE ELSE I:=B.SPRSIZE;
+ DRAW4PIX(L[II].FLAG1X,L[II].FLAG1Y,I,I,22); {FLAGS}
+ DRAW4PIX(L[II].FLAG2X,L[II].FLAG2Y,I,I,24);
+ END; {DRAW FLAGS}
+ LINE(0,0,255,0,8,WHERE); LINE(0,1,255,1,8,WHERE); {BORDERS}
+ LINE(0,2,0,190-3,8,WHERE); LINE(1,2,1,190-3,8,WHERE);
+ LINE(MAX(126,L[II].FIELDX-2),2,MAX(126,L[II].FIELDX-2),L[II].FIELDY-1,8,WHERE);
+ LINE(MAX(127,L[II].FIELDX-1),2,MAX(127,L[II].FIELDX-1),L[II].FIELDY-1,8,WHERE);
+ LINE(0,L[II].FIELDY-2,L[II].FIELDX-1,L[II].FIELDY-2,8,WHERE);
+ LINE(0,L[II].FIELDY-1,L[II].FIELDX-1,L[II].FIELDY-1,8,WHERE);
+ FOR OBJ2:=1TO L[II].NROBJ DO IF OBJ2<>OBJ THEN DISPOBJ(OBJ2,10); {OBJS}
+ IF(OBJ>0)AND(OBJ<=L[II].NROBJ)THEN DISPOBJ(OBJ,12); {HIGHLIGHTED_OBJ}
+ FOR OBJ2:=1TO L[II].NRBALLS DO
+ DRAW4PIX(L[II].BALLS[OBJ2].X,L[II].BALLS[OBJ2].Y,2,2,12); {BOUNCIES}
+END; {DISPMAP}