wormy/wormedit 0.94.1422
[wormy.git] / wormedit.pas
index 22918c0b449c99f2b9145b56af43d2df5e00278b..016174a0541c4859acec0ece6df8369dd788dcde 100644 (file)
@@ -1,5 +1,28 @@
 USES CRT,SHIAR;
 
+TYPE ONELEVEL = RECORD
+       NAME:STRING[22];
+       SIZE:BYTE;
+       PEAS,DELAY:BYTE;
+       GROWTH,BSIZE:BYTE;
+       SPRSIZE:BYTE;
+       SPRITE:ARRAY[1..8]OF BYTE;
+       NRBALLS:BYTE;
+       BALLS:ARRAY[1..32]OF RECORD
+        Y,X,D:BYTE; {Z:%00=right+down, %11=left+up}
+       END; {BALLS}
+       W:ARRAY[1..4]OF RECORD
+        D,Y,X:BYTE;
+       END; {W(ORMS)}
+       FIELDX,FIELDY:BYTE;
+       FLAG1Y,FLAG1X:BYTE;
+       FLAG2Y,FLAG2X:BYTE;
+       NROBJ:BYTE;
+       OBJ:ARRAY[1..32]OF RECORD
+        TYP:SHORTINT;X1,Y1,X2,Y2:BYTE;
+       END; {OBJ}
+     END; {ONELEVEL}
+
 CONST GAMETYPE:ARRAY[1..8]OF STRING[12] =
        ('SINGLEPLAYER','PEAWORM','TRON','DEATHMATCH',
         'FOODMATCH','LINKPLAY','RACE','CTF');
@@ -7,15 +30,15 @@ CONST GAMETYPE:ARRAY[1..8]OF STRING[12] =
       OBJTYPE:ARRAY[0..4]OF STRING[8] =
        ('NONE','LINE','FAT LINE','BAR','CIRCLE');
 
-      ENDTYPE:ARRAY[-1..0]OF STRING[8] =
-       ('MESSAGE','NONE');
+      ENDTYPE:ARRAY[0..1]OF STRING[8] =
+       ('NONE','MESSAGE');
 
       HEAD86S:STRING[53] =
        ('**TI86**'+#$1A+#$A+#0+ {HEADER}
-        'Levelfile for Worm 0�93 made with WormEdit'); {COMMENT}
+        'Levelfile for Worm 0�94 made with WormEdit'); {COMMENT}
 
-      HEADEDIT = ('WormEdit�93'+#0+'LVL');
-      HEADVERSION = 93;
+      HEADEDIT = ('WormEdit�94'+#0+'LVL');
+      HEADVERSION = 94;
 
       B:RECORD
        HEAD:ARRAY[1..15]OF CHAR;
@@ -28,20 +51,23 @@ CONST GAMETYPE:ARRAY[1..8]OF STRING[12] =
        SPRITE:ARRAY[1..8]OF BYTE;
        ENDTYPE:INTEGER;
        ENDDATA:STRING[255];
+        HINAME:ARRAY[1..3]OF CHAR;
       END {B} =
        (HEAD:HEADEDIT;
         VERSION:HEADVERSION;
         NAME:'Custom Worm Level';
         LSINGLE:0; LMULTI:0; LCTF:0; LTOTAL:0;
-        LFROM:(1,0,0,0,0,0,0,0);
-        LTO:(1,0,0,0,0,0,0,0);
+        LFROM:(0,0,0,0,0,0,0,0);
+        LTO:(0,0,0,0,0,0,0,0);
         SPRSIZE:4;
         SPRITE:(6*16,15*16,15*16,6*16,0,0,0,0);
           {01100000
            11110000
            11110000
            01100000}
-        ENDTYPE:0);
+        ENDTYPE:1;
+        ENDDATA:'';
+        HINAME:'WOR');
 
       LVLPOS:BYTE = 1;
       OBJPOS:BYTE = 1;
@@ -52,41 +78,22 @@ VAR I,I2:WORD;
     S:STRING;
     F,FF:FILE;
 
-    L:ARRAY[1..64]OF RECORD
-      NAME:STRING[22];
-      SIZE:BYTE;
-      PEAS,DELAY:BYTE;
-      GROWTH,BSIZE:BYTE;
-      SPRSIZE:BYTE;
-      SPRITE:ARRAY[1..8]OF BYTE;
-      NRBALLS:BYTE;
-      BALLS:ARRAY[1..32]OF RECORD
-        Y,X,D:BYTE; {Z:%00=right+down, %11=left+up}
-      END; {BALLS}
-      W:ARRAY[1..4]OF RECORD
-        D,Y,X:BYTE;
-      END; {W(ORMS)}
-      FIELDX,FIELDY:BYTE;
-      FLAG1Y,FLAG1X:BYTE;
-      FLAG2Y,FLAG2X:BYTE;
-      NROBJ:BYTE;
-      OBJ:ARRAY[1..32]OF RECORD
-        TYP,X1,Y1,X2,Y2:BYTE;
-      END; {OBJ}
-    END; {L}
+    L:ARRAY[1..64]OF ONELEVEL;
+    LTEMP:ONELEVEL;
 
     FILENAME:STRING[8];
+    LVLDISP:BYTE;
 
 PROCEDURE MAINTITLE;
 BEGIN
-  SETTEXT; CLRSCR;
+  SETTEXT; WINDOW(1,1,80,25); {TEXTBACKGROUND(0);} CLRSCR;
   TEXTCOLOR(1); WRITE('���������������������������<');
   TEXTCOLOR(14); WRITE(' WormEdit � ');
   TEXTCOLOR(15); WRITE(' by SHIAR ');
   TEXTCOLOR(1); WRITE('>�����������������������������');
   WINDOW(41,2,41,25); TEXTCOLOR(7); TEXTBACKGROUND(0); WRITE(CC('�',23));
   WINDOW(1,25,80,25); TEXTBACKGROUND(1); CLRSCR;
-  GOTOXY(75,1); TEXTCOLOR(0); WRITE('v0.93'); TEXTBACKGROUND(0);
+  GOTOXY(75,1); TEXTCOLOR(0); WRITE('v0.94'); TEXTBACKGROUND(0);
 END; {MAINTITLE}
 
 PROCEDURE CIRCLE(X,Y,Z,COL:BYTE);
@@ -118,7 +125,7 @@ BEGIN
       LINE(L[II].OBJ[OBJ].X1,L[II].OBJ[OBJ].Y1+1,L[II].OBJ[OBJ].X2,L[II].OBJ[OBJ].Y2+1,COL,VGA);
     END; {FATLINE}
     3:BEGIN
-      FOR Y:=L[II].OBJ[OBJ].Y1 TO L[II].OBJ[OBJ].Y1+L[II].OBJ[OBJ].Y2 DO
+      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,VGA);
     END; {BOX}
     4:CIRCLE(L[II].OBJ[OBJ].X1,L[II].OBJ[OBJ].Y1,L[II].OBJ[OBJ].X2,COL);
@@ -159,15 +166,19 @@ BEGIN
     1:WRITE('PRESS <F1> OR <H> FOR HELP');
     2:WRITE('YOU UNDERSTAND EVERYTHING');
     3:WRITE('THIS AIN''T A BUG, IT A FEATURE!');
+    4:WRITE('ALL YOUR WORMS ARE BELONG TO US!');
+    5:WRITE('PRESS UP AND DOWN TO VIEW ALL LEVELS');
   END; {TEXT TO DISPLAY}
 END; {HELPBAR}
 
 PROCEDURE DISPLEVELS;
 BEGIN
-  WINDOW(42,3,80,13); TEXTBACKGROUND(0); CLRSCR;
+  WINDOW(42,3,80,13); TEXTCOLOR(7); TEXTBACKGROUND(0); CLRSCR;
   IF B.LTOTAL<1THEN WRITELN('NONE PRESENT')ELSE
     FOR II:=LVLPOS TO MIN(B.LTOTAL,LVLPOS+9)DO BEGIN
-      WRITE(II); TEXTCOLOR(3); WRITELN(': '+L[II].NAME); TEXTCOLOR(7);
+      IF LVLDISP=1THEN WRITE(II) {CONTINOUS}
+      ELSE IF II>B.LSINGLE THEN WRITE(II-B.LSINGLE)ELSE WRITE(II); {SEPERATE}
+      TEXTCOLOR(3); WRITELN(': '+L[II].NAME); TEXTCOLOR(7);
     END; {DISP LEVELS}
 END; {DISPLEVELS}
 
@@ -176,23 +187,29 @@ VAR EDITOK:SHORTINT;
 BEGIN
   EDITOK:=0; REPEAT
     WINDOW(39,1,39,1); GOTOXY(1,1); REPEAT UNTIL KEYPRESSED; C:=READKEY;
-    IF C=' 'THEN EDITOK:=10; {10}
-    IF(C>='1')AND(C<=CHR(EDITMENUMAX+48))THEN EDITOK:=ORD(C)-48; {1..<=9}
-    IF(C=#27)OR(C='-')OR(C='+')THEN EDITOK:=-1; {EXIT}
+    IF C=' 'THEN EDITOK:=10 {10} ELSE
+    IF(C>='1')AND(C<=CHR(EDITMENUMAX+48))THEN EDITOK:=ORD(C)-48 {1..<=9} ELSE
+    IF(C=#27)OR(C='-')OR(C='+')THEN EDITOK:=-1 {EXIT} ELSE
+    IF UPCASE(C)='H'THEN HELPBAR(HELPPAGE) ELSE
     IF C=#0THEN BEGIN  C:=READKEY;
-      IF(C=#80)AND(LVLPOS<B.LTOTAL-9)THEN BEGIN INC(LVLPOS); DISPLEVELS; END; {DOWN}
-      IF(C=#72)AND(LVLPOS>1)THEN BEGIN DEC(LVLPOS); DISPLEVELS; END; {DOWN}
+      IF HELPPAGE=5THEN BEGIN
+        IF(C=#80)AND(LVLPOS<B.LTOTAL-9)THEN BEGIN INC(LVLPOS); DISPLEVELS; END {DOWN} ELSE
+        IF(C=#72)AND(LVLPOS>1)THEN BEGIN DEC(LVLPOS); DISPLEVELS; END {UP} ELSE
+      END; {LEVELS DISPED}
       IF C=#59THEN HELPBAR(HELPPAGE);
     END; {EXTENDED}
-    IF UPCASE(C)='H'THEN HELPBAR(HELPPAGE);
   UNTIL EDITOK<>0; EDITMENU:=EDITOK;
 END; {EDITMENU}
 
 FUNCTION COMPSIZE:WORD;
 BEGIN
-  I:=$32+B.SPRSIZE+ORD(B.NAME[0])+
-     2*(1+(B.LTO[2]-B.LFROM[2])+(B.LTO[3]-B.LFROM[3]));
-  FOR II:=1TO B.LTOTAL DO INC(I,L[II].SIZE);
+  I:=$32+B.SPRSIZE+ORD(B.NAME[0])+5;
+  IF B.LFROM[2]>0THEN I:=I+((1+B.LTO[2]-B.LFROM[2])*5);
+  IF B.LFROM[3]>0THEN I:=I+((1+B.LTO[3]-B.LFROM[3])*5);
+  FOR II:=1TO B.LTOTAL DO BEGIN
+    INC(I,L[II].SIZE);
+    FOR I4:=1TO L[II].NROBJ DO IF L[II].OBJ[I4].TYP<=0THEN DEC(I,5);
+  END; {CALC LEVELS}
   COMPSIZE:=I;
 END; {COMPSIZE}
 
@@ -204,21 +221,22 @@ BEGIN
   TEXTCOLOR(15); TEXTBACKGROUND(1);
   CASE BAR OF
     1:BEGIN
-      WRITE('LEVELS',' ':39-6); DISPLEVELS;
+      WRITE('LEVELS',' ':39-6); LVLDISP:=1; DISPLEVELS;
     END; {1:SINGLVLS}
     2:BEGIN
       WRITE('LEVEL OBJECTS',' ':39-13); TEXTCOLOR(7); TEXTBACKGROUND(0);
       IF L[II].NROBJ<1THEN WRITELN('NONE')ELSE
        FOR I4:=1TO L[II].NROBJ DO BEGIN
-         WRITE(I4); TEXTCOLOR(3); WRITE(': ',OBJTYPE[L[II].OBJ[I4].TYP]);
-         IF L[II].OBJ[I4].TYP>0THEN
+         WRITE(I4); TEXTCOLOR(3);
+         IF L[II].OBJ[I4].TYP>0THEN BEGIN
+           WRITE(': ',OBJTYPE[L[II].OBJ[I4].TYP]);
            WRITE(' (',L[II].OBJ[I4].X1,',',L[II].OBJ[I4].Y1,')-(');
-         CASE L[II].OBJ[I4].TYP OF
-           1,2:WRITELN(L[II].OBJ[I4].X2,',',L[II].OBJ[I4].Y2,')');
-           3:WRITELN(L[II].OBJ[I4].X2,',',L[II].OBJ[I4].Y1+L[II].OBJ[I4].Y2,')');
-           4:WRITELN(L[II].OBJ[I4].X2,')');
-         END; {TYPE}
-         TEXTCOLOR(7);
+           CASE L[II].OBJ[I4].TYP OF
+             1,2:WRITELN(L[II].OBJ[I4].X2,',',L[II].OBJ[I4].Y2,')');
+             3:WRITELN(L[II].OBJ[I4].X2,',',L[II].OBJ[I4].Y1+L[II].OBJ[I4].Y2,')');
+             4:WRITELN(L[II].OBJ[I4].X2,')');
+           END; {TYPE}
+          END {ENABLED} ELSE WRITELN(': DISABLED'); TEXTCOLOR(7);
        END; {DISP OBJS}
     END; {2:SINGLVLS}
     3:BEGIN
@@ -239,12 +257,7 @@ BEGIN
       WRITE(' BYTES');
     END; {4:FILE}
     5:BEGIN
-      WRITE('LEVELS',' ':39-6); TEXTCOLOR(7); TEXTBACKGROUND(0);
-      IF B.LTOTAL<1THEN WRITELN('NONE PRESENT')ELSE
-       FOR II:=1TO B.LTOTAL DO BEGIN
-         IF II>B.LSINGLE THEN WRITE(II-B.LSINGLE)ELSE WRITE(II);
-         TEXTCOLOR(3); WRITELN(': '+L[II].NAME); TEXTCOLOR(7);
-       END; {DISP LEVELS}
+      WRITE('LEVELS',' ':39-6); LVLDISP:=2; DISPLEVELS;
     END; {5:LEVELS}
   END; {BAR}
   WINDOW(1,2,40,24);
@@ -319,7 +332,7 @@ BEGIN
     TEXTCOLOR(7); WRITE('8: CTF '); TEXTCOLOR(3);
     IF B.LCTF=0THEN WRITE('(NO LEVELS)')ELSE WRITE('(',B.LCTF,')');
 
-    III:=EDITMENU(8,0);
+    III:=EDITMENU(8,5);
     IF III=1THEN BEGIN
       B.LFROM[1]:=INPUTINT('ENTER LEVELS TO SKIP','USE THIS TO TEMPORARILY REMOVE THE FIRSTFEW LEVELS',
        0,0,B.LSINGLE-1); INC(B.LFROM[1]);
@@ -341,36 +354,43 @@ BEGIN
   REPEAT
     TITLEBAR(2,'EDIT OBJECT #'+NR(I)+' IN LEVEL '+NR(II));
     TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITE(': OBJECT TYPE ');
-    III:=L[II].OBJ[I].TYP; TEXTCOLOR(3); WRITELN('(',III,')');
+    III:=L[II].OBJ[I].TYP; TEXTCOLOR(3); WRITELN('(',ABS(III),')');
     IF III<>0THEN BEGIN
-      TEXTCOLOR(14); WRITE('2'); TEXTCOLOR(7);
-      IF L[II].OBJ[I].TYP=4THEN WRITE(': OBJECT POSITION ')ELSE WRITE(': OBJECT BEGIN ');
-      TEXTCOLOR(3); WRITELN('(',L[II].OBJ[I].X1,',',L[II].OBJ[I].Y1,')');
-      TEXTCOLOR(14); WRITE('3'); TEXTCOLOR(7);
-      IF L[II].OBJ[I].TYP=4THEN WRITE(': OBJECT SIZE ')ELSE WRITE(': OBJECT END ');
+      IF L[II].OBJ[I].TYP>0THEN TEXTCOLOR(14)ELSE TEXTCOLOR(7); WRITE('2'); TEXTCOLOR(7);
+      IF ABS(L[II].OBJ[I].TYP)=4THEN WRITE(': OBJECT POSITION ')ELSE WRITE(': OBJECT BEGIN');
+      IF L[II].OBJ[I].TYP>0THEN BEGIN
+        TEXTCOLOR(3); WRITELN(' (',L[II].OBJ[I].X1,',',L[II].OBJ[I].Y1,')');
+      END {PRESENT} ELSE WRITELN;
+      IF L[II].OBJ[I].TYP>0THEN TEXTCOLOR(14)ELSE TEXTCOLOR(7); WRITE('3'); TEXTCOLOR(7);
+      IF ABS(L[II].OBJ[I].TYP)=4THEN WRITE(': OBJECT SIZE ')ELSE WRITE(': OBJECT END ');
       TEXTCOLOR(3); CASE L[II].OBJ[I].TYP OF
        3:WRITELN('(',L[II].OBJ[I].X2,',',L[II].OBJ[I].Y1+L[II].OBJ[I].Y2,')');
        4:WRITELN('(',L[II].OBJ[I].X2,')');
-        ELSE WRITELN('(',L[II].OBJ[I].X2,',',L[II].OBJ[I].Y2,')');
+        1..10:WRITELN('(',L[II].OBJ[I].X2,',',L[II].OBJ[I].Y2,')');
+        ELSE WRITELN;
       END; {TYPE}
-      TEXTCOLOR(14); WRITE('4'); TEXTCOLOR(7); WRITE(': PREVIEW');
+      TEXTCOLOR(14); WRITE('4'); TEXTCOLOR(7); WRITELN(': PREVIEW');
+      TEXTCOLOR(14); WRITE('5'); TEXTCOLOR(7);
+      IF L[II].OBJ[I].TYP<0THEN WRITE(': ENABLE')ELSE WRITE(': DISABLE');
     END; {OBJECT PROPERTIES}
 
-    IF III<>0THEN III:=EDITMENU(4,0)ELSE III:=EDITMENU(1,0);
+    IF III<>0THEN III:=EDITMENU(5,0)ELSE III:=EDITMENU(1,0);
     CASE III OF
       1:BEGIN
        S:=''; FOR I4:=0TO 4DO S:=S+NR(I4)+': '+OBJTYPE[I4]+CC(' ',37-ORD(OBJTYPE[I4,0]));
        L[II].OBJ[I].TYP:=INPUTINT('ENTER OBJECT TYPE',S,0,0,4);
-       S:='SCREEN=(0,0)-('+NR(L[II].FIELDX-2)+','+NR(L[II].FIELDY-2)+
+       S:='SCREEN=(2,2)-('+NR(L[II].FIELDX-3)+','+NR(L[II].FIELDY-3)+
          '); CENTER=('+NR((L[II].FIELDX-1)SHR 1)+','+NR((L[II].FIELDY-1)SHR 1)+')';
        IF L[II].OBJ[I].TYP=4 THEN BEGIN
-         L[II].OBJ[I].X1:=INPUTINT('ENTER X',S,2,(L[II].FIELDX-1)SHR 1,L[II].FIELDX-4);
-         L[II].OBJ[I].Y1:=INPUTINT('ENTER Y',S,2,(L[II].FIELDY-1)SHR 1,L[II].FIELDY-4);
-         L[II].OBJ[I].X2:=INPUTINT('ENTER SIZE',S,0,
-           MIN(L[II].FIELDY-4,L[II].FIELDX-4)SHR 2,MIN(L[II].FIELDY-4,L[II].FIELDX-4)SHR 1);
+         L[II].OBJ[I].X1:=INPUTINT('ENTER X',S+
+           '   DO NOT MAKE CIRCLES LEFT OF THE SCREEN!',0,(L[II].FIELDX-1)SHR 1,255);
+         L[II].OBJ[I].Y1:=INPUTINT('ENTER Y',S+
+           '   DON''T TRY Y<0: MIGHT CRASH CALC!!!',0,(L[II].FIELDY-1)SHR 1,255);
+         L[II].OBJ[I].X2:=INPUTINT('ENTER SIZE',S,3,
+           MIN(L[II].FIELDY-3,L[II].FIELDX-3)SHR 2,MIN(L[II].FIELDY-3,L[II].FIELDX-3)SHR 1);
          L[II].OBJ[I].Y2:=0;
        END {CIRCLE} ELSE IF L[II].OBJ[I].TYP>0THEN BEGIN
-         IF L[II].OBJ[I].TYP=3THEN I4:=4 ELSE I4:=3;
+         IF(L[II].OBJ[I].TYP=1)OR(L[II].OBJ[I].TYP=3)THEN I4:=2 ELSE I4:=3;
          L[II].OBJ[I].X1:=INPUTINT('ENTER X1',S,2,(L[II].FIELDX-1)SHR 1,L[II].FIELDX-I4);
          L[II].OBJ[I].Y1:=INPUTINT('ENTER Y1',S,2,(L[II].FIELDY-1)SHR 1,L[II].FIELDY-I4);
          L[II].OBJ[I].X2:=INPUTINT('ENTER X2',S,2,(L[II].FIELDX-1)SHR 1,L[II].FIELDX-I4);
@@ -385,30 +405,33 @@ BEGIN
        END; {NORMAL OBJECT}
       END; {TYPE}
       2:BEGIN
-       S:='SCREEN=(0,0)-('+NR(L[II].FIELDX-2)+','+NR(L[II].FIELDY-2)+
+       S:='SCREEN=(2,2)-('+NR(L[II].FIELDX-3)+','+NR(L[II].FIELDY-3)+
          '); CENTER=('+NR((L[II].FIELDX-1)SHR 1)+','+NR((L[II].FIELDY-1)SHR 1)+')';
        IF L[II].OBJ[I].TYP=4 THEN BEGIN
-         L[II].OBJ[I].X1:=INPUTINT('ENTER X',S,2,(L[II].FIELDX-1)SHR 1,L[II].FIELDX-3);
-         L[II].OBJ[I].Y1:=INPUTINT('ENTER Y',S,2,(L[II].FIELDY-1)SHR 1,L[II].FIELDY-3);
+         L[II].OBJ[I].X1:=INPUTINT('ENTER X',S+
+           '   BE CAREFUL DRAWING OFF-SCREEN!',0,L[II].OBJ[I].X1,255);
+         L[II].OBJ[I].Y1:=INPUTINT('ENTER Y',S,0,L[II].OBJ[I].Y1,255);
        END {CIRCLE} ELSE IF L[II].OBJ[I].TYP>0THEN BEGIN
-         IF L[II].OBJ[I].TYP=3THEN I4:=4 ELSE I4:=3;
-         L[II].OBJ[I].X1:=INPUTINT('ENTER BEGIN X',S,2,(L[II].FIELDX-1)SHR 1,L[II].FIELDX-I4);
-         L[II].OBJ[I].Y1:=INPUTINT('ENTER BEGIN Y',S,2,(L[II].FIELDY-1)SHR 1,L[II].FIELDY-I4);
          IF L[II].OBJ[I].TYP=3THEN
-            L[II].OBJ[I].Y2:=L[II].OBJ[I].Y2+(I4-L[II].OBJ[I].Y1);
+            L[II].OBJ[I].Y2:=L[II].OBJ[I].Y2+L[II].OBJ[I].Y1-3;
+         IF(L[II].OBJ[I].TYP=1)OR(L[II].OBJ[I].TYP=3)THEN I4:=2 ELSE I4:=3;
+         L[II].OBJ[I].X1:=INPUTINT('ENTER BEGIN X',S,2,L[II].OBJ[I].X1,L[II].FIELDX-I4);
+         L[II].OBJ[I].Y1:=INPUTINT('ENTER BEGIN Y',S,2,L[II].OBJ[I].Y1,L[II].FIELDY-I4);
+         IF L[II].OBJ[I].TYP=3THEN
+            L[II].OBJ[I].Y2:=L[II].OBJ[I].Y2-L[II].OBJ[I].Y1+3;
        END; {NORMAL OBJECT}
       END; {BEGIN}
       3:BEGIN
        IF L[II].OBJ[I].TYP=4 THEN BEGIN
-         L[II].OBJ[I].X2:=INPUTINT('ENTER SIZE','r',0,
-           MIN(L[II].FIELDY-3,L[II].FIELDX-3)SHR 2,MIN(L[II].FIELDY-3,L[II].FIELDX-3)SHR 1);
+         L[II].OBJ[I].X2:=INPUTINT('ENTER SIZE','CROSSING BOUNDARIES NOT CHECKED',
+           3,L[II].OBJ[I].X2,255{L[II].FIELDX-3)SHR 1});
          L[II].OBJ[I].Y2:=0;
        END {CIRCLE} ELSE IF L[II].OBJ[I].TYP>0THEN BEGIN
          S:='SCREEN=(0,0)-('+NR(L[II].FIELDX-2)+','+NR(L[II].FIELDY-2)+
            '); CENTER=('+NR((L[II].FIELDX-1)SHR 1)+','+NR((L[II].FIELDY-1)SHR 1)+')';
-         IF L[II].OBJ[I].TYP=3THEN I4:=4 ELSE I4:=3;
-         L[II].OBJ[I].X2:=INPUTINT('ENTER END X',S,2,(L[II].FIELDX-1)SHR 1,L[II].FIELDX-I4);
-         L[II].OBJ[I].Y2:=INPUTINT('ENTER END Y',S,2,(L[II].FIELDY-1)SHR 1,L[II].FIELDY-I4);
+         IF(L[II].OBJ[I].TYP=1)OR(L[II].OBJ[I].TYP=3)THEN I4:=2 ELSE I4:=3;
+         L[II].OBJ[I].X2:=INPUTINT('ENTER END X',S,2,L[II].OBJ[I].X2,L[II].FIELDX-I4);
+         L[II].OBJ[I].Y2:=INPUTINT('ENTER END Y',S,2,L[II].OBJ[I].Y2,L[II].FIELDY-I4);
          IF L[II].OBJ[I].TYP=3THEN BEGIN
            IF L[II].OBJ[I].Y2<L[II].OBJ[I].Y1 THEN BEGIN
               I4:=L[II].OBJ[I].Y2; L[II].OBJ[I].Y2:=L[II].OBJ[I].Y1;
@@ -419,6 +442,9 @@ BEGIN
        END; {NORMAL OBJECT}
       END; {END}
       4:DISPMAP(I);
+      5:BEGIN
+       L[II].OBJ[I].TYP:=-L[II].OBJ[I].TYP;
+      END; {DISABLE/ENABLE}
     END; {HANDLE}
   UNTIL III=-1; III:=0;
 END; {EDITOBJ}
@@ -568,12 +594,12 @@ BEGIN
       WRITELN('(',L[II].W[III].X,',',L[II].W[III].Y,')');
     END; {WORMS}
 
-    IF III=4THEN III:=EDITMENU(8,0)ELSE III:=EDITMENU(2,0);
+    IF III=4THEN III:=EDITMENU(8,4)ELSE III:=EDITMENU(2,4);
     CASE(III+1)OF
       2,4,6,8:BEGIN
-       I:=INPUTINT('ENTER WORM #'+NR(III SHR 1)+' STARTING DIRECTION',
-         '0=DOWN; 64=RIGHT; 128=UP; 192=LEFT',0,L[II].W[III SHR 1].D,255);
-       L[II].W[III SHR 1].D:=I;
+       I:=INPUTINT('ENTER WORM #'+NR(III SHR 1+1)+' STARTING DIRECTION',
+         '0=DOWN; 64=RIGHT; 128=UP; 192=LEFT',0,L[II].W[III SHR 1+1].D,255);
+       L[II].W[III SHR 1+1].D:=I;
       END; {DIR}
       3,5,7,9:BEGIN
        I:=INPUTINT('ENTER WORM #'+NR(III SHR 1)+' BEGIN X-POSITION',
@@ -641,7 +667,7 @@ BEGIN
        IF L[II].FIELDX<128THEN BEGIN
          INC(L[II].NROBJ); L[II].OBJ[L[II].NROBJ].X1:=L[II].FIELDX;
          L[II].OBJ[L[II].NROBJ].Y2:=255; L[II].OBJ[L[II].NROBJ].TYP:=3;
-         L[II].OBJ[L[II].NROBJ].X2:=255; L[II].OBJ[L[II].NROBJ].Y1:=0;
+         L[II].OBJ[L[II].NROBJ].X2:=127; L[II].OBJ[L[II].NROBJ].Y1:=0;
        END; {PUT BAR}
        L[II].FIELDY:=INPUTINT('ENTER FIELD HEIGHT','57=ONE SCREEN; MORE WILL SCROLL THE     SCREEN',5,L[II].FIELDY,255);
        IF L[II].FIELDY<57THEN BEGIN
@@ -666,14 +692,14 @@ BEGIN
     WRITE('1'); TEXTCOLOR(7); WRITELN(': EDIT LEVEL');
     IF B.LTOTAL>0THEN TEXTCOLOR(14)ELSE TEXTCOLOR(7);
     WRITE('2'); TEXTCOLOR(7); WRITELN(': COPY LEVEL');
-    IF B.LTOTAL>0THEN TEXTCOLOR(7)ELSE TEXTCOLOR(7);
+    IF B.LTOTAL>0THEN TEXTCOLOR(14)ELSE TEXTCOLOR(7);
     WRITE('3'); TEXTCOLOR(7); WRITELN(': MOVE LEVEL');
     IF B.LTOTAL>0THEN TEXTCOLOR(14)ELSE TEXTCOLOR(7);
     WRITE('4'); TEXTCOLOR(7); WRITELN(': DELETE LEVEL');
     TEXTCOLOR(14); WRITE('5'); TEXTCOLOR(7); WRITELN(': CREATE SINGLEPLAYER LEVEL');
     TEXTCOLOR(14); WRITE('6'); TEXTCOLOR(7); WRITELN(': CREATE MULTIPLAYER LEVEL');
     TEXTCOLOR(7); WRITE('7'); TEXTCOLOR(7); WRITELN(': CREATE CTF LEVEL');
-    TEXTCOLOR(7); WRITELN; III:=EDITMENU(6,0);
+    TEXTCOLOR(7); WRITELN; III:=EDITMENU(6,5);
 
     CASE III OF
       1:IF B.LTOTAL>0THEN BEGIN
@@ -697,6 +723,18 @@ BEGIN
          L[II].NAME:='Copy of '+L[II].NAME;
        END; {>0}
       END; {COPY}
+      3:IF B.LTOTAL>0THEN BEGIN
+       I:=INPUTINT('MOVE WHICH LEVEL','0=CANCEL',0,0,B.LTOTAL);
+        IF II<>0THEN BEGIN
+         II:=INPUTINT('NEW LEVEL NUMBER','ENTER 0 TO CANCEL',0,0,B.LTOTAL);
+         IF((I<=B.LSINGLE)AND(II<=B.LSINGLE))
+          OR((I>B.LSINGLE)AND(II>B.LSINGLE))THEN BEGIN
+           LTEMP:=L[I]; IF II>I THEN FOR I4:=I TO II-1DO L[I4]:=L[I4+1]
+             ELSE FOR I4:=I DOWNTO II+1DO L[I4]:=L[I4-1];
+           L[II]:=LTEMP;
+         END; {CONFIRMED}
+       END; {}
+      END; {MOVE}
       4:IF B.LTOTAL>0THEN BEGIN
        II:=INPUTINT('DELETE WHICH LEVEL','0=CANCEL',0,0,B.LTOTAL);
         IF II<>0THEN BEGIN
@@ -714,7 +752,8 @@ BEGIN
        END; {}
       END; {DELETE}
       5:BEGIN
-        INC(B.LSINGLE); INC(B.LTOTAL); II:=B.LSINGLE;
+       INC(B.LSINGLE); INC(B.LTOTAL); II:=B.LSINGLE;
+        IF B.LFROM[1]=0THEN B.LFROM[1]:=1;
        FOR I:=B.LTOTAL DOWNTO II+1DO L[I]:=L[I-1];
        L[II].NAME:='Level #'+NR(II);
        L[II].PEAS:=8; L[II].DELAY:=4; L[II].GROWTH:=15; L[II].BSIZE:=15;
@@ -741,79 +780,73 @@ BEGIN
   UNTIL III=-1; III:=0;
 END; {EDITLVL}
 
-PROCEDURE EDITDSPR;
-BEGIN
-  REPEAT
-    TITLEBAR(0,'EDIT DEFAULT SPRITE');
-    TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITE(': SPRITE SIZE ');
-    TEXTCOLOR(3); WRITELN('(',B.SPRSIZE,')');
-    FOR I:=1TO B.SPRSIZE DO BEGIN
-      TEXTCOLOR(14); WRITE(I+1); TEXTCOLOR(7); WRITE(': EDIT '); TEXTCOLOR(3);
-      WRITELN(BYTE2STR(B.SPRITE[I],B.SPRSIZE));
-    END; {DISP SPRITE}
-
-    III:=EDITMENU(1+B.SPRSIZE,0);
-    IF III=1THEN BEGIN
-      I:=INPUTINT('ENTER THE DEFAULT SPRITE SIZE','CAN BE CHANGED PER LEVEL',1,B.SPRSIZE,8);
-      IF I>B.SPRSIZE THEN FOR I4:=B.SPRSIZE+1TO I DO B.SPRITE[I4]:=0;
-      B.SPRSIZE:=I;
-    END {SIZE} ELSE IF III>1THEN BEGIN
-      S:=INPUTSTR('ENTER NEW LINE #'+NR(III-1)+' OF SPRITE','EXAMPLE: 100101 = X��X�X',
-        ZERO(BYTE2BIN(B.SPRITE[III-1]),8),8);
-      B.SPRITE[III-1]:=STR2BYTE(S);
-    END; {APP}
-  UNTIL III=-1; III:=0;
-END; {EDITDSPR}
-
-PROCEDURE EDITSPEND;
+PROCEDURE EDITSETS;
 BEGIN
   REPEAT
-    TITLEBAR(0,'SINGLEPLAYER ENDING');
-    TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITE(': END TYPE ');
-      TEXTCOLOR(3); WRITELN(' (',ENDTYPE[B.ENDTYPE],')'); TEXTCOLOR(14);
+    TITLEBAR(0,'CHANGE DEFAULTS');
+    TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITE(': HISCORE NAME ');
+      TEXTCOLOR(3); WRITELN('(',B.HINAME,')');
+    TEXTCOLOR(14); WRITE('2'); TEXTCOLOR(7); WRITE(': END TYPE ');
+      TEXTCOLOR(3); WRITELN('(',ENDTYPE[B.ENDTYPE],')');
     CASE B.ENDTYPE OF
-      -1:BEGIN
-        WRITE('2'); TEXTCOLOR(7); WRITE(': EDIT MESSAGE');
-        TEXTCOLOR(3); WRITE(' (',COPY(B.ENDDATA,1,18));
+      1:BEGIN
+        TEXTCOLOR(14); WRITE('3'); TEXTCOLOR(7); WRITE(': EDIT MESSAGE ');
+        TEXTCOLOR(3); WRITE('(',COPY(B.ENDDATA,1,18));
         IF LENGTH(B.ENDDATA)>18THEN WRITELN('...)')ELSE WRITELN(')');
       END; {MSG}
+      ELSE BEGIN TEXTCOLOR(7); WRITELN('3: CONFIGURE END'); END; {NOTN}
     END; {TYPE}
+    TEXTCOLOR(14); WRITE('4'); TEXTCOLOR(7); WRITE(': SPRITE SIZE ');
+    TEXTCOLOR(3); WRITELN('(',B.SPRSIZE,')');
+    FOR I:=1TO B.SPRSIZE DO BEGIN
+      TEXTCOLOR(14); WRITE(I+4); TEXTCOLOR(7); WRITE(': EDIT '); TEXTCOLOR(3);
+      WRITELN(BYTE2STR(B.SPRITE[I],B.SPRSIZE));
+    END; {DISP SPRITE}
 
-    III:=EDITMENU(2,0);
+    III:=EDITMENU(4+B.SPRSIZE,0);
     CASE III OF
       1:BEGIN
-       FOR II:=0TO 1DO WRITE(NR(II)+': '+ENDTYPE[-II]+CC(' ',40-ORD(ENDTYPE[-II,0])));
+        S:=INPUTSTR('DEFAULT NAME OF HISCORES','LENGTH 3 CHARS',B.HINAME,3);
+        FOR I:=1TO 3DO B.HINAME[I]:=S[I];
+      END; {HINAME}
+      2:BEGIN
+       FOR II:=0TO 1DO WRITE(NR(II)+': '+ENDTYPE[II]+CC(' ',40-ORD(ENDTYPE[II,0])));
        B.ENDTYPE:=INPUTINT('ENTER NEW END TYPE',S,0,0,1);
-       IF B.ENDTYPE=-1THEN B.ENDDATA:='Congratulations!!';
+       IF B.ENDTYPE=1THEN B.ENDDATA:='Congratulations!!';
       END; {TITLE}
-      2:IF B.ENDTYPE=-1THEN
+      3:IF B.ENDTYPE=1THEN
          B.ENDDATA:=INPUTSTR('ENTER NEW END MESSAGE','MAX 255 CHARS','Congratulations!!',255);
+      4:BEGIN
+        I:=INPUTINT('ENTER THE DEFAULT SPRITE SIZE','CAN BE CHANGED PER LEVEL',1,B.SPRSIZE,8);
+        IF I>B.SPRSIZE THEN FOR I4:=B.SPRSIZE+1TO I DO B.SPRITE[I4]:=0;
+        B.SPRSIZE:=I;
+      END; {SPRSIZE}
+      ELSE IF III>4THEN BEGIN
+        S:=INPUTSTR('ENTER NEW LINE #'+NR(III-4)+' OF SPRITE','EXAMPLE: 100101 = X��X�X',
+          ZERO(BYTE2BIN(B.SPRITE[III-4]),8),8);
+        B.SPRITE[III-4]:=STR2BYTE(S);
+      END; {SPREDIT}
     END; {HANDLE}
   UNTIL III=-1; III:=0;
-END; {EDITSPEND}
-
+END; {EDITSETS}
 
 PROCEDURE EDITMAIN;
 BEGIN
   REPEAT
     TITLEBAR(4,UPCS(B.NAME));
     TEXTCOLOR(14); WRITE('1'); TEXTCOLOR(7); WRITELN(': EDIT TITLE');
-    TEXTCOLOR(14); WRITE('2'); TEXTCOLOR(7); WRITE(': DEFAULT SPRITE');
-      TEXTCOLOR(3); WRITELN(' (',B.SPRSIZE,')');
+    TEXTCOLOR(14); WRITE('2'); TEXTCOLOR(7); WRITELN(': DEFAULTS');
     TEXTCOLOR(14); WRITE('3'); TEXTCOLOR(7); WRITELN(': GAME TYPES');
-    TEXTCOLOR(14); WRITE('4'); TEXTCOLOR(7); WRITE(': SP ENDING');
-      TEXTCOLOR(3); WRITELN(' (',ENDTYPE[B.ENDTYPE],')');
-    TEXTCOLOR(14); WRITE('5'); TEXTCOLOR(7); WRITE(': LEVELS');
+    TEXTCOLOR(14); WRITE('4'); TEXTCOLOR(7); WRITE(': LEVELS');
       TEXTCOLOR(3); WRITE(' (',B.LTOTAL,')');
 
-    III:=EDITMENU(5,3);
+    III:=EDITMENU(4,3);
     CASE III OF
       1:B.NAME:=INPUTSTR('ENTER NEW TITLE FOR THIS LEVELFILE','NOTE TI-86 DISPLAYS ONLY 22 CHARS ON THEFIRST LINE',
          B.NAME,32); {TITLE}
-      2:EDITDSPR;
+      2:EDITSETS;
       3:EDITGAME;
-      4:EDITSPEND;
-      5:EDITLVL;
+      4:EDITLVL;
     END; {HANDLE}
   UNTIL III=-1; III:=0;
 END; {EDITMAIN}
@@ -825,7 +858,8 @@ BEGIN
     TEXTCOLOR(15); WRITE('WARNING!! '); TEXTCOLOR(7);
     WRITELN('FAILED OPENING LEVEL FILE!'); WRITELN('RUNTIME ERROR #',I); HALT;
   END; {CAN'T OPEN}
-  {$I-} BLOCKREAD(F,B,SIZEOF(B)); BLOCKREAD(F,L,SIZEOF(L)); {$I+}
+  {$I-} BLOCKREAD(F,B,SIZEOF(B));
+        FOR I:=1TO B.LTOTAL DO BLOCKREAD(F,L[I],SIZEOF(L[I])); {$I+}
   IF(IORESULT<>0)OR(B.HEAD<>HEADEDIT)THEN BEGIN
     TEXTCOLOR(15); WRITE('WARNING!! '); TEXTCOLOR(7);
     WRITELN('ERROR READING LEVEL FILE!');
@@ -839,30 +873,51 @@ END; {OPENFILE}
 PROCEDURE FILESAVE;
 BEGIN
   ASSIGN(F,FILENAME+'.LVL'); REWRITE(F,1);
-  BLOCKWRITE(F,B,SIZEOF(B)); BLOCKWRITE(F,L,SIZEOF(L)); CLOSE(F);
+  BLOCKWRITE(F,B,SIZEOF(B));
+  FOR I:=1TO B.LTOTAL DO BLOCKWRITE(F,L[I],SIZEOF(L[I])); CLOSE(F);
 END; {FILESAVE}
 
 PROCEDURE FILECOMP;
 VAR ISTACK:WORD;
+PROCEDURE SAVELEVEL(SAVEWORMS:BYTE);
+BEGIN
+  BLOCKWRITE(FF,L[II].PEAS,1);
+  BLOCKWRITE(FF,L[II].DELAY,1);
+  BLOCKWRITE(FF,L[II].GROWTH,1);
+  BLOCKWRITE(FF,L[II].BSIZE,1);
+  BLOCKWRITE(FF,L[II].SPRSIZE,1);
+  BLOCKWRITE(FF,L[II].SPRITE,L[II].SPRSIZE);
+  BLOCKWRITE(FF,L[II].NRBALLS,1);
+  BLOCKWRITE(FF,L[II].BALLS,L[II].NRBALLS*3);
+  BLOCKWRITE(FF,L[II].W[1].D,3*SAVEWORMS); {D,X,Y}
+  BLOCKWRITE(FF,L[II].FIELDX,2); {FIELDX,FIELDY}
+  FOR I:=1TO L[II].NROBJ DO BEGIN
+    IF L[II].OBJ[I].TYP>0THEN BEGIN
+      BLOCKWRITE(FF,L[II].OBJ[I].TYP,4);
+      IF(L[II].OBJ[I].TYP=3)AND(L[II].OBJ[I].Y2+L[II].OBJ[I].Y1=255)THEN BEGIN
+        I4:=MAX(57,L[II].FIELDY)-L[II].OBJ[I].Y1; BLOCKWRITE(FF,I4,1);
+      END {OFFSCREEN} ELSE BLOCKWRITE(FF,L[II].OBJ[I].Y2,1);
+    END; {VALID}
+  END; {OBJS}
+  I:=0; BLOCKWRITE(FF,I,1); {LVL END}
+END; {COMMONSAVELEVEL}
 BEGIN
   ASSIGN(FF,FILENAME+'.86S'); REWRITE(FF,1);
 
   BLOCKWRITE(FF,HEAD86S[1],ORD(HEAD86S[0])); {86S-HEADER}
-  ISTACK:=$12+6+B.SPRSIZE+ORD(B.NAME[0])+24+2+
-    2*(1+(B.LTO[2]-B.LFROM[2])+(B.LTO[3]-B.LFROM[3]));
-  FOR II:=B.LFROM[1]TO B.LTOTAL DO INC(ISTACK,L[II].SIZE);
-  BLOCKWRITE(FF,ISTACK,2); {FILE LENGTH (x+$12)}
+  ISTACK:=COMPSIZE; BLOCKWRITE(FF,ISTACK,2); {FILE LENGTH (x+$12)}
   I:=$000C; BLOCKWRITE(FF,I,2); {STRING ID}
   DEC(ISTACK,$10); BLOCKWRITE(FF,ISTACK,2); {DATA LENGTH (x+2)}
 
   I:=$080C; BLOCKWRITE(FF,I,2); {STRING ID}
-  S:='wormlvl1'; BLOCKWRITE(FF,S[1],8); {PRGNAME}
+  S:=LOCS(FILENAME); BLOCKWRITE(FF,S[1],8); {PRGNAME}
   BLOCKWRITE(FF,ISTACK,2); {DATA LENGTH (x+2)}
   DEC(ISTACK,2); BLOCKWRITE(FF,ISTACK,2); {PROG LENGTH (x)}
 
   C:='w'; BLOCKWRITE(FF,C,1); {WORM ID}
   I:=HEADVERSION; BLOCKWRITE(FF,I,1); {VERSION}
-  BLOCKWRITE(FF,B.NAME[0],ORD(B.NAME[0])+1); {TITLE}
+  BLOCKWRITE(FF,B.NAME[1],ORD(B.NAME[0])); {TITLE}
+  I:=0; BLOCKWRITE(FF,I,1); {STRING TERMINATOR #0}
   I:=1+B.SPRSIZE+2; FOR II:=B.LFROM[1]TO B.LTOTAL DO I:=I+L[II].SIZE;
   BLOCKWRITE(FF,I,2); {SIZE}
 
@@ -888,45 +943,17 @@ BEGIN
   BLOCKWRITE(FF,B.SPRSIZE,1);
   BLOCKWRITE(FF,B.SPRITE,B.SPRSIZE);
 
-  FOR II:=B.LFROM[1]TO B.LSINGLE DO BEGIN
-    BLOCKWRITE(FF,L[II].PEAS,1);
-    BLOCKWRITE(FF,L[II].DELAY,1);
-    BLOCKWRITE(FF,L[II].GROWTH,1);
-    BLOCKWRITE(FF,L[II].BSIZE,1);
-    BLOCKWRITE(FF,L[II].SPRSIZE,1);
-    BLOCKWRITE(FF,L[II].SPRITE,L[II].SPRSIZE);
-    BLOCKWRITE(FF,L[II].NRBALLS,1);
-    BLOCKWRITE(FF,L[II].BALLS,L[II].NRBALLS*3);
-    BLOCKWRITE(FF,L[II].W[1].D,3); {D,X,Y}
-    BLOCKWRITE(FF,L[II].FIELDX,2); {FIELDX,FIELDY}
-    FOR I:=1TO L[II].NROBJ DO BEGIN
-      BLOCKWRITE(FF,L[II].OBJ[I].TYP,5);
-    END; {OBJS}
-    I:=0; BLOCKWRITE(FF,I,1); {LVL END}
-  END; {LEVELS SINGLEPL}
-
+  IF B.LFROM[1]>0THEN
+    FOR II:=B.LFROM[1]TO B.LSINGLE DO SAVELEVEL(1); {LEVELS SINGLEPL}
   I:=255; BLOCKWRITE(FF,I,1); {END}
   I:=$C9; BLOCKWRITE(FF,I,1); {RET}
 
-  FOR II:=B.LSINGLE+1TO B.LSINGLE+B.LMULTI DO BEGIN
-    BLOCKWRITE(FF,L[II].PEAS,1);
-    BLOCKWRITE(FF,L[II].DELAY,1);
-    BLOCKWRITE(FF,L[II].GROWTH,1);
-    BLOCKWRITE(FF,L[II].BSIZE,1);
-    BLOCKWRITE(FF,L[II].SPRSIZE,1);
-    BLOCKWRITE(FF,L[II].SPRITE,L[II].SPRSIZE);
-    BLOCKWRITE(FF,L[II].NRBALLS,1);
-    BLOCKWRITE(FF,L[II].BALLS,L[II].NRBALLS*3);
-    BLOCKWRITE(FF,L[II].W[1].D,3*4); {D,X,Y}
-    BLOCKWRITE(FF,L[II].FIELDX,2); {FIELDX,FIELDY}
-    FOR I:=1TO L[II].NROBJ DO BEGIN
-      BLOCKWRITE(FF,L[II].OBJ[I].TYP,5);
-    END; {OBJS}
-    I:=0; BLOCKWRITE(FF,I,1); {LVL END}
-  END; {LEVELS MULTIPL}
-
-  I:=0; FOR II:=1TO 1+(B.LTO[2]-B.LFROM[2])+(B.LTO[3]-B.LFROM[3])DO
-    BLOCKWRITE(FF,I,2); {HI}
+  IF B.LMULTI>0THEN
+    FOR II:=B.LSINGLE+1TO B.LSINGLE+B.LMULTI DO SAVELEVEL(4); {LEVELS MULTIPL}
+
+  I:=0; I2:=1; IF B.LFROM[2]>0THEN I2:=I2+1+B.LTO[2]-B.LFROM[2];
+  IF B.LFROM[3]>0THEN I2:=I2+1+B.LTO[3]-B.LFROM[3];
+  FOR II:=1TO I2 DO BEGIN BLOCKWRITE(FF,I,2); BLOCKWRITE(FF,B.HINAME,3); END; {HI}
 
   SEEK(FF,$37); I2:=0; I:=0;
   REPEAT INC(I,I2); BLOCKREAD(FF,I2,1,ISTACK); UNTIL ISTACK<>1;