home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume1 / 8711 / 6 < prev    next >
Internet Message Format  |  1990-07-13  |  57KB

  1. Path: uunet!husc6!bbn!rochester!udel!burdvax!bpa!cbmvax!vu-vlsi!devon!ncoast!allbery
  2. From: dmt@mtunb.ATT.COM (Dave Tutelman)
  3. Newsgroups: comp.sources.misc
  4. Subject: Printer Art and a Tool (1 of 2)
  5. Message-ID: <5323@ncoast.UUCP>
  6. Date: 8 Nov 87 21:42:27 GMT
  7. Sender: allbery@ncoast.UUCP
  8. Organization: AT&T Information Systems - Lincroft, NJ
  9. Lines: 1486
  10. Approved: allbery@ncoast.UUCP
  11. X-Archive: comp.sources.misc/8711/6
  12.  
  13. [Part 2 of this will be in comp.binaries.ibm.pc.  After I manage to convince
  14. the rest of the net that converting comp.binaries.ibm.pc was not a mistake
  15. made by my inews, that is.  ++bsa]
  16.  
  17. A week or so ago, there were a few requests on the net for samples of
  18. "printer art".  That reminded me of one of my first PC hacks, an editor
  19. to generate printer art.  Here's the source, and a number of examples
  20. of the printer art it can easily generate.
  21.  
  22. The first file in the shell archive is a README file for more information
  23. on what the program does.  You can read it without unSHARing the file.
  24.  
  25. The program is in Turbo Pascal 1.0 (circa January 1974) and runs on PCs with
  26. a CGA or compatible display (I use it on an AT&T PC 6300).  For those
  27. who don't have Turbo Pascal 1.0 (:->),  I'm also posting the
  28. arc-ed, uuencoded, .COM file in part 2 of this posting.
  29.  
  30. +---------------------------------------------------------------+
  31. |    Dave Tutelman                        |
  32. |    Physical - AT&T  -  Lincroft, NJ                |
  33. |    Logical -  ...ihnp4!mtuxo!mtunb!dmt            |
  34. |    Audible -  (201) 576 2442                    |
  35. +---------------------------------------------------------------+
  36.  
  37. -----------------  cut here  ----------------------------
  38. : This is a shar archive.  Extract with sh, not csh.
  39. : The rest of this file will extract:
  40. : readme paint.pas pixel.pas ptfancy.pas ptfile.pas ptutils.pas afghan.pic apple.pic logo.pic shoe.pic valentin.pic afghan.lst apple.lst logo.lst shoe.lst valentin.lst
  41. echo extracting - readme
  42. sed 's/^X//' > readme << '!EOR!'
  43. X                PAINT
  44. X
  45. X        A Printer-Art Editor for the PC
  46. X
  47. X            by Dave Tutelman
  48. X
  49. X
  50. XThis program, written in Turbo Pascal Version 1.0 (yup, real old),
  51. Xis a screen-based editor for generating "printer art" on a line printer.
  52. XYou use the program to generate or edit an on-screen, shaded-pixel
  53. Xrepresentation of a printer page (80 x 66).  You can then send a text
  54. Xversion to the printer, or to a .LST file for later printing.  The text
  55. Xversion substitutes printable ASCII characters (of greater or lesser
  56. Xdensity) for the shaded pixels.
  57. X
  58. XIncluded in this distribution is:
  59. X    README        This file.
  60. X    PAINT.PAS    The main Pascal file.
  61. X    PIXEL.PAS    "Included" file of Pascal graphics routines.
  62. X    PTUTILS.PAS    "Included" Pascal file.
  63. X    PTFILE.PAS    ditto
  64. X    PTFANCY.PAS    ditto
  65. X    *.PIC        A number of encoded (source) pictures for PAINT.
  66. X    *.LST        Printer-ready pictures for PAINT.
  67. X
  68. XThe program can be used either from the Turbo Pascal integrated environment
  69. Xor from the command line (as a .COM file).
  70. X
  71. X
  72. XINSTRUCTIONS
  73. X
  74. XThe PAINT screen consists of a "page area" of 66 x 80 "shaded pixels",
  75. Xand a "command menu area".
  76. X
  77. XTo use the PAGE AREA:
  78. X   -    The fast-blinking cursor is a "brush", one print-position in size.
  79. X   -    The brush can be moved in EIGHT directions, not just 4.  The
  80. X    cursor keys control horizontal and vertical movement; the other
  81. X    keys on the cursor keypad control diagonal movement.  (E.g. -
  82. X    the "Home" key moves the cursor up/left one position.)
  83. X   -    The brush can take one of 6 values:
  84. X        0    Neutral, or no-change.
  85. X        1    Blank.
  86. X        2    Light.
  87. X        3    Medium.
  88. X        4    Darker.
  89. X        5    Darkest.
  90. X    You can set the brush value by pressing a numeric key 0-5.
  91. X   -    As the brush is moved around in the page area, it paints its value
  92. X    on each print position it visits.  (If its value is zero, the
  93. X    brush leaves print positions unchanged.)
  94. X   -    Use the above instructions to paint a picture in the page area.
  95. X    (You can also use some fancier constructs from the command menu,
  96. X    like "mirror" and "fill".)
  97. X
  98. XTo use the COMMAND MENU:
  99. X   -    A command is selected by pressing the key corresponding to the
  100. X    capitalized letter in the menu.
  101. X   -    You are prompted for a confirmation and/or further information.
  102. X   -    In the "Fill" command, "darker" refers to the shade on the PRINT,
  103. X    not on the SCREEN.
  104. X   -    In the "Print" command, the default is to scroll the ASCII-text
  105. X    picture to the PC screen (CON:).  You can also send it to a file
  106. X    of arbitrary name, or to the printer (PRN:).
  107. X   -    The "Save" and "Load" commands deal with a "live" (editable)
  108. X    version of the picture, not a print-ready version.  However, it
  109. X    too is legal ASCII text, not a [more efficient] binary
  110. X    representation.
  111. X
  112. XI encourage you to play with the features for a few minutes before using
  113. Xthem on a "real" picture.
  114. X
  115. X                    Dave Tutelman
  116. X                    November 2, 1987
  117. !EOR!
  118. echo extracting - paint.pas
  119. sed 's/^X//' > paint.pas << '!EOR!'
  120. X{  paint a screen of "cells" of shades.
  121. X   The cells correspond to print positions, so the screen
  122. X   can be printed on a line printer (Low-res graphics)
  123. X}
  124. X
  125. X{$V-}    (* Allow small strings to be passed to procedures *)
  126. X
  127. Xconst  RIGHT = 75;     (* "effective" right edge of screen, 80 for good mon *)
  128. X       WinWidth = 20;
  129. X       WinHite = 19;   (* height of menu window *)
  130. X       MAXBRUSH = 15;
  131. Xtype   MenuItem = string [WinWidth];
  132. X       prompt = array [1..5] of MenuItem;
  133. X       filename = string [14];
  134. X       WinID = 1..2;
  135. X       PagArr = array [0..80, 0..70] of byte;
  136. X       palette = string [MAXBRUSH];
  137. Xconst  OldXlate : palette = ' .oXM';
  138. X                       (* translate from brush code to old character *)
  139. X       PXlate : palette = ' .:XM    |-+\/X';  (* print translation *)
  140. X       SXlate : palette = '123456789|-+\/X';  (* SFile translation *)
  141. X       FilMsg1 : prompt = ('fill to','Darker or Lighter','edge?','','');
  142. Xvar    line,page : integer;   (* columns & rows on print page *)
  143. X       xcell,ycell: integer;  (* # of pixels in a cell *)
  144. X       brush : integer;       (* code for painting a cell *)
  145. X                              (*  0 - no permanent effect
  146. X                                  1-5 progressively heavier tones
  147. X                                  6-9 currently unassigned
  148. X                                  10-15 = | - + \ / X
  149. X                              *)
  150. X       FillFlag : integer;    (* used to indicate the nature of the fill *)
  151. X       ErrMsg : MenuItem;
  152. X       fname, pname : filename;   (* file name & print device name *)
  153. X       x,y : integer;         (* col,row position of cursor *)
  154. X       bkgnd, inchar : char;
  155. X       screen : PagArr;       (* array of brush values *)
  156. X       linecount : array [1..2] of integer;
  157. X                              (* line counters for windows *)
  158. X
  159. Xprocedure blink; forward;
  160. X
  161. X
  162. X{$I pixel.pas }
  163. X{$i ptutils.pas }
  164. X{$I ptfile.pas }
  165. X
  166. X
  167. X
  168. Xprocedure blink;   {  blinks the cursor until key is pressed  }
  169. X    var   curs : integer;
  170. X    begin
  171. X        ResetWin (2);
  172. X        window (2, ErrMsg); (* print the most recent error message *)
  173. X        curs := 5;
  174. X        while not KeyPressed do   (* blink until next keystroke *)
  175. X        begin
  176. X            if curs=5 then curs:=1  else curs:=5;
  177. X            dab (x,y, curs);
  178. X            delay (60);
  179. X        end;
  180. X        ErrMsg := '                    ';
  181. X    end;
  182. X
  183. X{$I ptfancy.pas }
  184. X
  185. Xprocedure MenuDisp;  { displays the menu of commands }
  186. X    var    line : integer;
  187. X    begin
  188. X        linecount[1]:=4;   (* start menu on fourth line *)
  189. X        window (1, 'COMMANDS');
  190. X        window (1, ' ');
  191. X        window (1, 'Quit');
  192. X        window (1, 'Save');
  193. X        window (1, 'Load');
  194. X        window (1, 'Print');
  195. X        window (1, 'Mirror');
  196. X        window (1, 'Fill');
  197. X        window (1, 'Restore screen');
  198. X    end;
  199. X
  200. Xprocedure RestorScr;
  201. X    var    i,j : integer;
  202. X    begin
  203. X        HiRes;
  204. X        if bkgnd='W' then wpage (xcell*line, ycell*page)
  205. X        else            boxpage (xcell*line, ycell*page);
  206. X        MenuDisp;
  207. X        brush:=0;       (* start with dry brush *)
  208. X
  209. X        for j:=0 to (page-1) do
  210. X            for i:=0 to (line-1) do
  211. X                if screen [i,j]>1 then dab (i,j, screen [i,j]);
  212. X    end;
  213. X
  214. Xbegin
  215. X{ initialize parameters for the program }
  216. X    line:=79;
  217. X    page:=66;
  218. X    brush:=0;
  219. X    bkgnd:='B';
  220. X    ErrMsg:='                    ';
  221. X    linecount[2] := WinHite + 1;
  222. X    fname:='';  pname:='CON:';
  223. X
  224. X    xcell:=4; ycell:=3;
  225. X    for x:=0 to line do for y:=0 to page do  screen [x,y] := 1;
  226. X    x:=line div 2;  (* start in the middle of page *)
  227. X    y:=page div 2;
  228. X
  229. X    RestorScr;
  230. X
  231. X{ MAIN WORKING LOOP }
  232. X    repeat
  233. X        blink;
  234. X        read (kbd, inchar);
  235. X        case  inchar of
  236. X        ^[:  begin   (* ESC is cursor control *)
  237. X             if brush>0 then  screen[x,y] := brush;
  238. X             dab (x,y, screen[x,y]);   (* paint cell before leaving *)
  239. X             read (kbd, inchar);
  240. X             case inchar of
  241. X             'G':  (* up & left *)
  242. X                  if (x-1>=0) and (y-1>=0) then
  243. X                  begin  x := x-1;  y := y-1; end;
  244. X             'H':  (* up *)
  245. X                  if y-1>=0 then
  246. X                  y := y-1;
  247. X             'I':  (* up & right *)
  248. X                  if (x+1<line) and (y-1>=0) then
  249. X                  begin  x := x+1;  y := y-1;  end;
  250. X             'M':  (* right *)
  251. X                  if x+1<line then
  252. X                  x := x+1;
  253. X             'Q':  (* down & right *)
  254. X                  if (x+1<line) and (y+1<page) then
  255. X                  begin  x := x+1;  y := y+1;  end;
  256. X             'P':  (* down *)
  257. X                  if y+1<page then
  258. X                  y := y+1;
  259. X             'O':  (* down & left *)
  260. X                  if (x-1>=0) and (y+1<page) then
  261. X                  begin  x := x-1;  y := y+1;  end;
  262. X             'K':  (* left *)
  263. X                  if x-1>=0 then
  264. X                  x := x-1;
  265. X             end;
  266. X                inchar := ' ';   (* kill for Quit check *)
  267. X                if brush>0 then  screen[x,y] := brush;
  268. X             end;
  269. X
  270. X        '0':         (* turn off the brush *)
  271. X             brush := 0;
  272. X
  273. X        '1'..'9','|','-','+','\','/','X':  (* change the brush *)
  274. X             begin
  275. X                 brush := pos (inchar, SXlate);
  276. X                 screen [x,y] := brush;
  277. X             end;
  278. X
  279. X         'l','L':   (* load a file from disk *)
  280. X             if verify ('LOAD?') then
  281. X             begin
  282. X                 load (fname, screen, SXlate);
  283. X                 RestorScr;
  284. X             end;
  285. X
  286. X         's','S':   (* save in a file *)
  287. X             if verify ('SAVE?') then
  288. X             begin
  289. X                 fname := getname(fname, 0);
  290. X                 save (fname, screen, SXlate);
  291. X             end;
  292. X
  293. X         'p','P':   (* print on the line printer *)
  294. X             if verify ('PRINT?') then
  295. X             begin
  296. X                 pname := getname(pname, 0);
  297. X                 save (pname, screen, PXlate);
  298. X                 if pname='CON:' then  RestorScr;
  299. X             end;
  300. X
  301. X         'r','R':   (* restore a corrupted screen image *)
  302. X             RestorScr;
  303. X
  304. X         'm','M':   (* mirror the screen about an axis *)
  305. X             if verify ('MIRROR?') then
  306. X             begin
  307. X                 mirror;
  308. X             end;
  309. X
  310. X         'f','F':   (* fill an area *)
  311. X             if verify ('FILL?') then
  312. X             begin
  313. X                 ClrWin (2);
  314. X                 window (2, 'BRUSH value is');
  315. X                 window (2, SXlate [brush] );
  316. X                 window (2, 'OK?  (Y/N)');
  317. X                 read (kbd, inchar);
  318. X                 if (inchar='y') or (inchar='Y') then
  319. X                 begin
  320. X                     inchar := getchar (FilMsg1);
  321. X
  322. X                     case inchar of
  323. X                      'd','D': FillFlag := 4;
  324. X                      'l','L': FillFlag := 3;
  325. X                      else  FillFlag := 5;  (* assure that fill never starts *)
  326. X                     end;
  327. X
  328. X                     if FillFlag<5 then  fill (x,y);
  329. X                 end;
  330. X                 ClrWin (2);
  331. X             end;
  332. X
  333. X       { ADD NEW COMMANDS HERE }
  334. X
  335. X         'q','Q':   (* looks like QUIT, but let's check *)
  336. X             if not (verify ('QUIT???')) then inchar := ' ';
  337. X
  338. X         else  ErrMsg:= concat(inchar,': NO SUCH COMMAND');
  339. X         end;
  340. X
  341. X    until (inchar='Q') or (inchar='q');
  342. X
  343. X    Alfa;
  344. !EOR!
  345. echo extracting - pixel.pas
  346. sed 's/^X//' > pixel.pas << '!EOR!'
  347. X{  PIXEL is a set of low-level graphic primitives. }
  348. X
  349. Xprocedure HiRes;    { enter HiRes graphics mode }
  350. X    begin
  351. X        inline (       (* uses interupt 10H in BIOS *)
  352. X            $B8/$06/$00/   (* MOV  AX,6H   ;load fn # in A  *)
  353. X            $CD/$10        (* INT  10H                      *)
  354. X         );
  355. X    end;
  356. X
  357. Xprocedure Alfa;    { enter 80x25 alpha mode }
  358. X    begin
  359. X        inline (       (* uses interupt 10H in BIOS *)
  360. X            $B8/$02/$00/   (* MOV  AX,2H   ;load fn # in A  *)
  361. X            $CD/$10        (* INT  10H                      *)
  362. X         );
  363. X    end;
  364. X
  365. Xprocedure pixel ( x,y,val : integer );
  366. X                    { draw a pixel at <x,y>. If val=0,
  367. X                      then erase the pixel instead.    }
  368. X    type  mask = array [0..7] of byte;
  369. X    const MASK1: mask =($80,$40,$20,$10,$08,$04,$02,$01);
  370. X          MASK0: mask =($7F,$BF,$DF,$EF,$F7,$FB,$FD,$FE);
  371. X          PIXBASE = $B800;
  372. X    var   odd, bytA : integer;
  373. X          point : ^byte;
  374. X
  375. X    begin
  376. X        { First compute a pointer to the byte containing pixel }
  377. X        odd := y mod 2;    (* odd or even scan line? *)
  378. X        bytA:= y div 2 * 80  +  x div 8  +  8192*odd;
  379. X        point := ptr ( PIXBASE, bytA );
  380. X
  381. X        { Now write the pixel into the byte  }
  382. X        if  val=0  then point^ := point^ and MASK0 [x mod 8]
  383. X        else            point^ := point^ or  MASK1 [x mod 8];
  384. X    end;
  385. !EOR!
  386. echo extracting - ptfancy.pas
  387. sed 's/^X//' > ptfancy.pas << '!EOR!'
  388. X{ Routines to do fancy editing, like Mirror and Fill }
  389. X
  390. Xprocedure mirror;
  391. X
  392. X    const  msg1 : prompt = ('cursor on','mirror axis?','  (Y/N)','','');
  393. X           msg2 : prompt = ('keep','Top?  Bottom?','Right?  Left?','','');
  394. X    var    inchar, keep, H_or_V : char;
  395. X           offset, i, j, size : integer;
  396. X
  397. X    begin
  398. X        inchar := getchar (msg1);  (* cursor check *)
  399. X        if not((inchar='y') or (inchar='Y')) then
  400. X                (* didn't set up properly. ABORT! *)
  401. X        begin
  402. X            ClrWin (2);
  403. X            window (2, 'Aborting mirror');
  404. X        end
  405. X        else
  406. X        begin
  407. X
  408. X            keep := getchar (msg2);  (* orientation of mirror *)
  409. X
  410. X            offset:=0;  (* 1 only for even symmetry, not implemented *)
  411. X
  412. X            case keep of  (* MAIN WORKING CODE *)
  413. X
  414. X            'L','l':   (* keep the left part *)
  415. X                begin
  416. X                    if x < line-x then  size := x
  417. X                                  else  size := line-x;
  418. X                    for j:=0 to page do
  419. X                        for i:= 0 to size do
  420. X                        begin
  421. X                            screen [x+offset+i, j] := screen [x-i, j];
  422. X                            dab (x+offset+i, j, screen [x+offset+i, j]);
  423. X                        end;
  424. X                end;
  425. X
  426. X            'R','r':   (* keep the right part *)
  427. X                begin
  428. X                    if x < line-x then  size := x
  429. X                                  else  size := line-x;
  430. X                    for j:=0 to page do
  431. X                        for i:= 0 to size do
  432. X                        begin
  433. X                            screen [x-i, j] := screen [x+offset+i, j];
  434. X                            dab (x-i, j, screen [x-i,j]);
  435. X                        end;
  436. X                end;
  437. X
  438. X
  439. X            'T','t':   (* keep the top part *)
  440. X                begin
  441. X                    if y < page-y then  size := y
  442. X                                  else  size := page-y;
  443. X                    for i:=0 to line do
  444. X                        for j:= 0 to size do
  445. X                        begin
  446. X                            screen [i, y+offset+j] := screen [i, y-j];
  447. X                            dab (i, y+offset+j, screen [i, y+offset+j]);
  448. X                        end;
  449. X                end;
  450. X
  451. X            'B','b':   (* keep the bottom part *)
  452. X                begin
  453. X                    if y < page-y then  size := y
  454. X                                  else  size := page-y;
  455. X                    for i:=0 to line do
  456. X                        for j:= 0 to size do
  457. X                        begin
  458. X                            screen [i, y-j] := screen [i, y+offset+j];
  459. X                            dab (i, y-j, screen [i, y-j]);
  460. X                        end;
  461. X                end;
  462. X
  463. X            else
  464. X                begin
  465. X                    ClrWin (2);
  466. X                    window (2, 'Illegal option.');
  467. X                    window (2, 'Mirror aborted.');
  468. X                end;
  469. X            end;
  470. X        end;
  471. X    end;
  472. X
  473. X
  474. Xfunction check (x,y, n : integer) : boolean;
  475. X  {  this function is used by "fill" to test whether a cell is a candidate
  476. X     for the next step.  N identifies whether the test is for:
  477. X     0 - don't test for cell contents, just <x,y> in bounds.
  478. X     1 - test for exact match.
  479. X     2 - test for all but exact match.
  480. X     3 - test for screen > brush.
  481. X     4 - test for screen < brush.
  482. X  }
  483. X    begin
  484. X      check := FALSE;
  485. X      if (x >= 0) and (x < line) and (y >= 0) and (y < page) then
  486. X          case n of
  487. X          0:  check := TRUE;
  488. X          1:  if screen [x,y] = brush then check := TRUE;
  489. X          2:  if not (screen [x,y] = brush) then check := TRUE;
  490. X          3:  if screen [x,y] > brush then check := TRUE;
  491. X          4:  if screen [x,y] < brush then check := TRUE;
  492. X          end;
  493. X    end;
  494. X
  495. X
  496. Xprocedure fill (x,y : integer);
  497. X  { fills an area including the point <x,y>, up to a boundary of cells
  498. X      >= brush if FillFlag = 3
  499. X      <= brush if FillFlag = 4
  500. X  }
  501. X    begin
  502. X        screen [x,y] := brush;
  503. X        dab (x,y, brush);   (* this way, we watch it work *)
  504. X                            (* For speed, drop this line, & RestorScr *)
  505. X        if check (x+1,y, FillFlag)  then  fill (x+1,y);
  506. X        if check (x,y+1, FillFlag)  then  fill (x,y+1);
  507. X        if check (x-1,y, FillFlag)  then  fill (x-1,y);
  508. X        if check (x,y-1, FillFlag)  then  fill (x,y-1);
  509. !EOR!
  510. echo extracting - ptfile.pas
  511. sed 's/^X//' > ptfile.pas << '!EOR!'
  512. X{  This is a set of file-handling utilities,
  513. X  designed for PAINT, but perhaps with wider applicability  }
  514. X
  515. Xfunction getname ( oldname : filename; code : integer ) : filename;
  516. X  {  Queries for a file name, announcing "oldname" as default.
  517. X     If code > 0, file must already exist.
  518. X     Returns the file name. }
  519. X
  520. X    var    newname : filename;
  521. X           inchar : char;
  522. X           fprom : prompt;
  523. X           filemsg : string [20];
  524. X           fname : text;
  525. X    begin
  526. X        inchar:=' ';
  527. X        newname:=oldname;
  528. X        repeat
  529. X            ClrWin (2);
  530. X            window (2,'Current File Name');
  531. X            window (2,newname);
  532. X            window (2,'NAME OF FILE?');
  533. X            GoToXY (RIGHT-WinWidth, linecount [2]);
  534. X            ReadLn (newname);
  535. X            if newname='' then  newname:=oldname;
  536. X            Assign (fname, newname);
  537. X
  538. X            {$I-}  reset (fname)  {$I+} ;
  539. X            if  IOresult=0 then
  540. X            begin
  541. X                filemsg := 'File exists. OK?';
  542. X                close (fname);
  543. X            end
  544. X            else begin
  545. X                if code=0 then filemsg:= 'New file. OK?'
  546. X                else           filemsg:= 'No such file.'
  547. X            end;
  548. X
  549. X            inchar := ' ';
  550. X                ClrWin (2);
  551. X                window (2,newname);
  552. X                window (2,filemsg);
  553. X            if not (filemsg='No such file.') then
  554. X            begin
  555. X                window (2,'(Y/N)');
  556. X                GoToXY (RIGHT-WinWidth+6, linecount [2]-1);
  557. X                read (kbd, inchar);
  558. X            end
  559. X            else Delay (3000);
  560. X
  561. X        until (inchar='y') or (inchar='Y');
  562. X
  563. X        ClrWin (2);
  564. X        getname := newname;
  565. X    end;
  566. X
  567. Xprocedure load (var oldname : filename; var screen : PagArr; xlate : palette);
  568. X    const  abortmsg : prompt = ('NO SUCH FILE','ABORTING LOAD','','','');
  569. X    var    i,j, last : integer;
  570. X           pline : string [132];
  571. X           pfile : text;
  572. X           newname : filename;
  573. X    begin
  574. X        ClrWin (2);
  575. X        window (2,'Current File Name');
  576. X        window (2,oldname);
  577. X        window (2,'NAME OF FILE?');
  578. X        GoToXY (RIGHT-WinWidth, linecount [2]);
  579. X        ReadLn (newname);
  580. X        if newname='' then  newname:=oldname;
  581. X
  582. X        assign (pfile, newname);
  583. X        {$I-}  reset (pfile)  {$I+} ;
  584. X        if  not (IOresult=0) then   (* no such file *)
  585. X            flash (abortmsg)
  586. X        else begin       (* load line-by-line from pfile *)
  587. X            (* start by clearing old screen *)
  588. X            for j:=0 to page do  for i:=0 to line do  screen [i,j] := 1;
  589. X
  590. X            i:=0;      (* line counter *)
  591. X            while not EOF (pfile) do
  592. X            begin
  593. X                readln (pfile, pline);
  594. X                last := length (pline) -1;
  595. X
  596. X                (* construct a line of the screen *)
  597. X                for j:=0 to last do
  598. X                    screen [j,i] := pos (pline [j+1], xlate);
  599. X                              (* use "xlate" to get numeric brush values *)
  600. X                if last < line-1 then    (* fill rest of line with blanks *)
  601. X                    for j:=last+1 to line-1 do   screen [j,i] := 1;
  602. X
  603. X               i := i + 1;
  604. X            end;
  605. X
  606. X            close (pfile);
  607. X            oldname := newname;
  608. X        end;
  609. X    end;
  610. X
  611. X
  612. Xprocedure save (fname : filename; screen : PagArr; xlate : palette);
  613. X    var    i,j, last : integer;
  614. X           pline : string [132];
  615. X           pfile : text;
  616. X           reassure : prompt;
  617. X    begin
  618. X        if fname='CON:' then
  619. X            begin   Alfa; ClrScr;   end;
  620. X        assign (pfile, fname);
  621. X        rewrite (pfile);
  622. X        for i:=0 to page-1 do    (* for each line in turn *)
  623. X        begin
  624. X            (* find last non-blank on line *)
  625. X            last := line-1;
  626. X            while (screen [last,i] < 2) and (last >= 0) do
  627. X                last := last - 1;
  628. X
  629. X            (* construct a print line *)
  630. X            pline := '';
  631. X            if last >=0 then
  632. X              for j:=0 to last do
  633. X                pline := concat (pline, xlate [screen [j,i]]);
  634. X
  635. X            if (fname='CON:') and (line=80)
  636. X                then   write   (pfile, pline)   (* CR takes the 81st col *)
  637. X                else   writeln (pfile, pline);
  638. X        end;
  639. X        close (pfile);
  640. X        if fname='CON:' then repeat until KeyPressed
  641. X            else if not (fname='LST:') then
  642. X            begin
  643. X                reassure [1] := fname;
  644. X                reassure [2] := 'FILE SAVED.';
  645. X                reassure [3] := ''; reassure [4] := ''; reassure [5] := '';
  646. X                flash (reassure);
  647. X            end;
  648. X    end;
  649. !EOR!
  650. echo extracting - ptutils.pas
  651. sed 's/^X//' > ptutils.pas << '!EOR!'
  652. X{ this is a set of utilities (procedures) used by PAINT.
  653. X    Window (num, MenuItem)
  654. X    ResetWin (num)
  655. X    ClrWin (num)
  656. X    flash (prompt)
  657. X    getchar (prompt) --> char
  658. X    verify (MenuItem) --> boolean
  659. X
  660. X    dab (x,y, brush)
  661. X    wpage (width, height)
  662. X    boxpage (width, height)
  663. X}
  664. X
  665. Xprocedure window ( num : WinID; message : MenuItem);
  666. X    { write a message on the next line of the indicated window }
  667. X    begin
  668. X        GoToXY (RIGHT-WinWidth, linecount [num]);
  669. X        write (message);
  670. X        linecount [num] := linecount[num] +1;
  671. X    end;
  672. X
  673. Xprocedure ResetWin (num : WinID);
  674. X    begin
  675. X        if num=1 then linecount [1] := 1
  676. X            else      linecount [2] := WinHite + 1;
  677. X    end;
  678. X
  679. Xprocedure ClrWin (num : WinID);
  680. X    var    x,y, ymin,ymax : integer;
  681. X    begin
  682. X        if num=1 then begin  ymin:=1; ymax:=WinHite;  end
  683. X           else   begin  ymin:=WinHite+1; ymax:=25;  end;
  684. X        for y:=ymin to ymax do
  685. X        begin
  686. X            GoToXY (RIGHT-WinWidth, y);
  687. X            for x:=1 to WinWidth do  write (' ');
  688. X        end;
  689. X        linecount [2] := WinHite + 1;
  690. X    end;
  691. X
  692. Xprocedure flash (msg : prompt);
  693. X  { show a 5-line message in window 2 for  3 seconds }
  694. X    var    i : integer;
  695. X    begin
  696. X        ClrWin (2);
  697. X        for i:=1 to 5 do
  698. X            window (2, msg [i]);
  699. X        delay (3000);
  700. X        ClrWin (2);
  701. X    end;
  702. X
  703. Xfunction getchar (msg : prompt) : char;
  704. X  { puts a 5-line prompt on the screen, then waits for keystroke }
  705. X  { returns the result of the keystroke  }
  706. X    var    i : integer;
  707. X           inchar : char;
  708. X    begin
  709. X        ClrWin (2);
  710. X        ErrMsg := msg [1];  (* will be displayed by "blink" *)
  711. X        window (2, '');
  712. X        for i:=2 to 5 do
  713. X            window (2, msg [i]);
  714. X        blink;
  715. X        read (kbd, inchar);
  716. X        getchar := inchar;
  717. X    end;
  718. X
  719. Xfunction verify (msg : MenuItem) : boolean;
  720. X    var    inchar : char;
  721. X    begin
  722. X        ClrWin (2);
  723. X        window (2, msg);
  724. X        window (2, '  (Y/N)');
  725. X        read (kbd, inchar);
  726. X        if (inchar='y') or (inchar='Y') then verify := TRUE
  727. X                                        else verify := FALSE;
  728. X        ClrWin (2);
  729. X    end;
  730. X
  731. X
  732. Xprocedure dab (x,y,brush : integer);
  733. X    type   brushes = array [0..MAXBRUSH, 0..2] of byte;
  734. X           mask  =  array [0..1] of byte;
  735. X    const  b_palette : brushes = ((0,0,0),     (* brush = 0  *)
  736. X                                (0,0,0),     (*   "   " 1  *)
  737. X                                (8,0,2),     (*         2  *)
  738. X                                (10,5,10),   (*         3  *)
  739. X                                (7,11,13),   (*         4  *)
  740. X                                (15,15,15),  (*         5  *)
  741. X                                (0,0,0),     (*         6  *)
  742. X                                (0,0,0),     (*         7  *)
  743. X                                (0,0,0),     (*         8  *)
  744. X                                (0,0,0),     (*         9  *)
  745. X                                (2,2,2),     (*  10 = |    *)
  746. X                                (0,15,0),    (*  11 = -    *)
  747. X                                (2,15,2),    (*  12 = +    *)
  748. X                                (8,6,1),     (*  13 = \    *)
  749. X                                (1,6,8),     (*  14 = /    *)
  750. X                                (9,6,9));     (*  15 = X    *)
  751. X           half : mask = ($F0, $0F);
  752. X           shifter : mask = (16,1);
  753. X           PIXBASE = $B800;
  754. X    var    xodd, yodd, bytA : integer;
  755. X           xmap, ymap : integer;
  756. X           j : integer;
  757. X           point : ^byte;
  758. X    begin
  759. X        ymap := y*ycell;   (* ymap = row of raster *)
  760. X        xmap := x div 2;   (* xmap = byte in x-raster *)
  761. X        xodd := x mod 2;   (* left or right half of byte *)
  762. X        for j:=0 to 2 do
  763. X        begin
  764. X            (* get a pointer to the byte to be modified *)
  765. X            yodd := ymap mod 2;
  766. X            bytA := ymap div 2 * 80  +  yodd * 8192  +  xmap;
  767. X            point := ptr (PIXBASE, bytA);
  768. X
  769. X            (* now write the palette entry into the half-byte *)
  770. X            point^ := (point^ and half [1-xodd]) or
  771. X                        (b_palette [brush, j] * shifter [xodd]);
  772. X            ymap := ymap + 1;    (* bump the line counter *)
  773. X        end;
  774. X    end;
  775. X
  776. Xprocedure wpage (width, hite : integer);
  777. X    { wpage whites out the page for background color }
  778. X    const  PIXBASE = $B800;
  779. X    var    x,y : integer;
  780. X           bytA : ^byte;
  781. X    begin
  782. X        for x:=0 to (width div 8) do
  783. X            for y:=0 to (hite div 2) do
  784. X            begin
  785. X                bytA:=ptr(PIXBASE, y*80 + x);
  786. X                bytA^:=255;
  787. X                bytA:=ptr(PIXBASE, $2000 + y*80 +x);
  788. X                bytA^:=255;
  789. X            end;
  790. X    end;
  791. X
  792. Xprocedure boxpage (width, hite : integer);
  793. X    { boxpage takes a black-bkgnd page and outlines it }
  794. X    var    x,y : integer;
  795. X    begin
  796. X        for x:=0 to (width-1) do
  797. X        begin
  798. X            pixel (x, 0, 1);
  799. X            pixel (x, hite-1, 1);
  800. X        end;
  801. X        for y:=0 to (hite-1) do
  802. X        begin
  803. X            pixel (0, y, 1);
  804. X            pixel (width-1, y, 1);
  805. X        end;
  806. X    end;
  807. X
  808. !EOR!
  809. echo extracting - afghan.pic
  810. sed 's/^X//' > afghan.pic << '!EOR!'
  811. X3344455555444333322221111122223333444555554443333222211111222233334445555544433
  812. X3444555155544433332222111222233334445551555444333322221112222333344455515554443
  813. X4445551115554443333222212222333344455511155544433332222122223333444555111555444
  814. X4455511511555444333322222223333444555115115554443333222222233334445551151155544
  815. X4555115551155544433332222233334445551155511555444333322222333344455511555115554
  816. X5551155455115554443333222333344455511554551155544433332223333444555115545511555
  817. X5511554445511555444333323333444555115544455115554443333233334445551155444551155
  818. X5115544344551155544433333334445551155443445511555444333333344455511554434455115
  819. X11554433344551155544433333444555115544333445511555444333334445551155443334455
  820. X155443323344551155544433344455511554433233445511555444333444555115544332334455
  821. X5544332223344551155544434445551155443322233445511555444344455511554433222334455
  822. X5443322122334455115554444455511554433221223344551155544444555115544332212233445
  823. X5544332223344551155544434445551155443322233445511555444344455511554433222334455
  824. X155443323344551155544433344455511554433233445511555444333444555115544332334455
  825. X11554433344551155544433333444555115544333445511555444333334445551155443334455
  826. X5115544344551155544433333334445551155443445511555444333333344455511554434455115
  827. X5511554445511555444333323333444555115544455115554443333233334445551155444551155
  828. X5551155455115554443333222333344455511554551155544433332223333444555115545511555
  829. X4555115551155544433332222233334445551155511555444333322222333344455511555115554
  830. X4455511511555444333322222223333444555115115554443333222222233334445551151155544
  831. X4445551115554443333222212222333344455511155544433332222122223333444555111555444
  832. X3444555155544433332222111222233334445551555444333322221112222333344455515554443
  833. X3344455555444333322221111122223333444555554443333222211111222233334445555544433
  834. X3444555155544433332222111222233334445551555444333322221112222333344455515554443
  835. X4445551115554443333222212222333344455511155544433332222122223333444555111555444
  836. X4455511511555444333322222223333444555115115554443333222222233334445551151155544
  837. X4555115551155544433332222233334445551155511555444333322222333344455511555115554
  838. X5551155455115554443333222333344455511554551155544433332223333444555115545511555
  839. X5511554445511555444333323333444555115544455115554443333233334445551155444551155
  840. X5115544344551155544433333334445551155443445511555444333333344455511554434455115
  841. X11554433344551155544433333444555115544333445511555444333334445551155443334455
  842. X155443323344551155544433344455511554433233445511555444333444555115544332334455
  843. X5544332223344551155544434445551155443322233445511555444344455511554433222334455
  844. X5443322122334455115554444455511554433221223344551155544444555115544332212233445
  845. X5544332223344551155544434445551155443322233445511555444344455511554433222334455
  846. X155443323344551155544433344455511554433233445511555444333444555115544332334455
  847. X11554433344551155544433333444555115544333445511555444333334445551155443334455
  848. X5115544344551155544433333334445551155443445511555444333333344455511554434455115
  849. X5511554445511555444333323333444555115544455115554443333233334445551155444551155
  850. X5551155455115554443333222333344455511554551155544433332223333444555115545511555
  851. X4555115551155544433332222233334445551155511555444333322222333344455511555115554
  852. X4455511511555444333322222223333444555115115554443333222222233334445551151155544
  853. X4445551115554443333222212222333344455511155544433332222122223333444555111555444
  854. X3444555155544433332222111222233334445551555444333322221112222333344455515554443
  855. X3344455555444333322221111122223333444555554443333222211111222233334445555544433
  856. X3444555155544433332222111222233334445551555444333322221112222333344455515554443
  857. X4445551115554443333222212222333344455511155544433332222122223333444555111555444
  858. X4455511511555444333322222223333444555115115554443333222222233334445551151155544
  859. X4555115551155544433332222233334445551155511555444333322222333344455511555115554
  860. X5551155455115554443333222333344455511554551155544433332223333444555115545511555
  861. X5511554445511555444333323333444555115544455115554443333233334445551155444551155
  862. X5115544344551155544433333334445551155443445511555444333333344455511554434455115
  863. X11554433344551155544433333444555115544333445511555444333334445551155443334455
  864. X155443323344551155544433344455511554433233445511555444333444555115544332334455
  865. X5544332223344551155544434445551155443322233445511555444344455511554433222334455
  866. X5443322122334455115554444455511554433221223344551155544444555115544332212233445
  867. X5544332223344551155544434445551155443322233445511555444344455511554433222334455
  868. X155443323344551155544433344455511554433233445511555444333444555115544332334455
  869. X11554433344551155544433333444555115544333445511555444333334445551155443334455
  870. X5115544344551155544433333334445551155443445511555444333333344455511554434455115
  871. X5511554445511555444333323333444555115544455115554443333233334445551155444551155
  872. X5551155455115554443333222333344455511554551155544433332223333444555115545511555
  873. X4555115551155544433332222233334445551155511555444333322222333344455511555115554
  874. X4455511511555444333322222223333444555115115554443333222222233334445551151155544
  875. X4445551115554443333222212222333344455511155544433332222122223333444555111555444
  876. X3444555155544433332222111222233334445551555444333322221112222333344455515554443
  877. !EOR!
  878. echo extracting - apple.pic
  879. sed 's/^X//' > apple.pic << '!EOR!'
  880. X
  881. X
  882. X
  883. X
  884. X
  885. X
  886. X
  887. X
  888. X
  889. X
  890. X
  891. X
  892. X1111111111111111111111111111111111111111155
  893. X111111111111111111111111111111111111111155
  894. X11111111111111111111111111111111111111155
  895. X1111111111111111111111111111111111111155
  896. X1111111111111111111111111111111111111155
  897. X1111111111111111111111111111111111111155
  898. X1111111111111111111111111115555555555155115555555555
  899. X111111111111111111111155555555555555555555555555555555555
  900. X11111111111111111111555555555544444455555554444445555555555
  901. X1111111111111111115555554444444444444444444444444444444555555
  902. X11111111111111111555554444433333334444444444433333334444455555
  903. X111111111111111155555444433333333333333333333333333333444455555
  904. X1111111111111115555544443333333111333333333333333333333444455555
  905. X1111111111111115555544433333311111111333333333333333333344455555
  906. X11111111111111555554444333311111111133333333333333333333444455555
  907. X11111111111111555544443333331111111333333333333333333333344445555
  908. X11111111111111555544443333333331333333333333333333333333344445555
  909. X11111111111111555544443333333333333333333333333333333333344445555
  910. X11111111111111555554444333333333333333333333333333333333444455555
  911. X1111111111111115555544443333333333333333333333333333333444455555
  912. X1111111111111115555554444433333333333333333333333333344444555555
  913. X1111111111111115555554444444333333333333333333333334444444555555
  914. X111111111111111155555544444444444333333333333344444444444555555
  915. X111111111111111155555554444444444444433333444444444444445555555
  916. X11111111111111111555555544444444444444444444444444444445555555
  917. X1111111111111111115555555555554444444444444444444555555555555
  918. X111111111111111111155555555555555554444444445555555555555555
  919. X1111111111111111111115555555555555555555555555555555555555
  920. X1111111111111111111111115555555555555555555555555555555
  921. X1111111111111111111111111115555511155555555511155555
  922. X
  923. X
  924. X
  925. X1111111111111111111111111141114
  926. X111111111111111111111111111414
  927. X11111111111111111111111113314
  928. X1111111111111111111111133444
  929. X1111111111111111111113344
  930. X11111111111111111111344
  931. X111111111111111111134
  932. X11111111111111111134
  933. X11111111111111111133
  934. X1111111111111111133
  935. X1111111111111111133
  936. X1111111111111111133
  937. X1111111111111111143111111111111113333
  938. X11111111111111111143111111111133351153333
  939. X11111111111111111114333111133351111111115333
  940. X111111111111111111114443333511111111111111153
  941. X1111111111111111111111111111111111111111111153
  942. X1111111111111111111111111111111111111111111135
  943. X111111111111111111111111111111111111111113335
  944. X
  945. X
  946. !EOR!
  947. echo extracting - logo.pic
  948. sed 's/^X//' > logo.pic << '!EOR!'
  949. X
  950. X
  951. X
  952. X
  953. X
  954. X
  955. X
  956. X
  957. X
  958. X
  959. X
  960. X
  961. X
  962. X
  963. X
  964. X111111111111111111111111111111111155555555555
  965. X
  966. X111111111111111111111111155551111111555555555555555555
  967. X111111111111111111111155555555555555555555555555555555555
  968. X
  969. X1111111111111111115551111111111111111111555555555555555555555
  970. X111111111111111155555555555555555555555555555555555555555555555
  971. X
  972. X11111111111111551111111111111111111111111111115555555555555555555
  973. X111111111111155555555555555555555555555555555555555555555555555555
  974. X
  975. X1111111111115511111111111111111111111111111111155555555555555555555
  976. X1111111111115555555555555555555555555555555555555555555555555555555
  977. X
  978. X11111111111555111111111111111111111111111111111555555555555555555555
  979. X11111111111555555555555555555555555555555555555555555555555555555555
  980. X
  981. X11111111111555555511111111111111111111111115555555555555555555555555
  982. X11111111111555555555555555555555555555555555555555555555555555555555
  983. X
  984. X1111111111115555555555555111111111115555555555555555555555555555555
  985. X1111111111115555555555555555555555555555555555555555555555555555555
  986. X
  987. X111111111111155555555555555555555555555555555555555555555555555555
  988. X11111111111111555555555555555555555555555555555555555555555555555
  989. X
  990. X111111111111111155555555555555555555555555555555555555555555555
  991. X1111111111111111115555555555555555555555555555555555555555555
  992. X
  993. X111111111111111111111155555555555555555555555555555555555
  994. X111111111111111111111111155555555555555555555555555555
  995. X
  996. X111111111111111111111111111111111155555555555
  997. X
  998. X
  999. X
  1000. X2222222222222225555522222255555555555555222222222222225555555555555552222222222
  1001. X2222222222222225555522222222222255222222222222222222222222225522222222222222222
  1002. X2222222222222255515552222222222255222222225555552222222222225522222222222222222
  1003. X2222222222222255122552222222222255222222555522555522222222225522222222222222222
  1004. X2222222222222555222555222222222255222225555222222222222222225522222222222222222
  1005. X2222222222222552222255222222222255222222255552222222222222225522222222222222222
  1006. X2222222222225555555555522222222255222225555555525555222222225522222222222222222
  1007. X2222222222225522222225522222222255222255522225555222222222225522222222222222222
  1008. X2222222222255522222225552222222255222255222255255552222222225522222222222222222
  1009. X2222222222255222222222552222222255222225555552222555522222225522222222222222222
  1010. X
  1011. X
  1012. X
  1013. X
  1014. X
  1015. !EOR!
  1016. echo extracting - shoe.pic
  1017. sed 's/^X//' > shoe.pic << '!EOR!'
  1018. X
  1019. X
  1020. X
  1021. X
  1022. X
  1023. X
  1024. X
  1025. X
  1026. X
  1027. X
  1028. X
  1029. X
  1030. X
  1031. X
  1032. X
  1033. X
  1034. X
  1035. X
  1036. X
  1037. X
  1038. X
  1039. X
  1040. X
  1041. X
  1042. X
  1043. X
  1044. X111111111111111111111111111111111111144111111111111111111111111444
  1045. X111111111111111111111111111111111144433444444111111111111444444444
  1046. X1111111111111111111111111111114444113333333334444444444444444333344
  1047. X1111111111111111111111111144441333111333333333333333333333333333344
  1048. X11111111111111111111444444333111333111333333333333333333333333334444
  1049. X11111111111114444444333311133311133311133333333333333333333334444444
  1050. X11111114444443333333333331113331113331113333333333333333344444444444
  1051. X11111144444443333333333333111333111333111333333333333334444444444444
  1052. X1111144444444444333333333331113331113331113333333333334444444444444
  1053. X111114444444444443333333333311133311133311133333333334444444444444
  1054. X1111114444444444443333333333311133311133311135555555555555555555555
  1055. X1111111555555555555555555555555555555555555555555555555555555555555
  1056. X
  1057. X
  1058. X
  1059. X
  1060. X
  1061. X
  1062. X
  1063. X
  1064. X
  1065. X
  1066. X
  1067. X
  1068. X
  1069. X
  1070. X
  1071. X
  1072. X
  1073. X
  1074. X
  1075. X
  1076. X
  1077. X
  1078. X
  1079. X
  1080. X
  1081. X
  1082. X
  1083. X
  1084. !EOR!
  1085. echo extracting - valentin.pic
  1086. sed 's/^X//' > valentin.pic << '!EOR!'
  1087. X
  1088. X
  1089. X
  1090. X
  1091. X
  1092. X
  1093. X
  1094. X11111111111111|
  1095. X11111111111111||
  1096. X1111111111--\1\||
  1097. X11111111111--\1\||
  1098. X111111111111--\1\||
  1099. X1111111111111--\1\|
  1100. X11111111111111--\1\
  1101. X11111111111111111\1\
  1102. X111111111111111111\1\
  1103. X1111111111111111111\1\
  1104. X1111111111111111115555555551111111111111111111111111555555555
  1105. X11111111111111555555555555555555111111111111111555555555555555555
  1106. X11111111111555555544444444445555555111111111555555544444444445555555
  1107. X11111111555555444444444444444445555551111155555544444433333444444555555
  1108. X111111155555444444443333333344444455551115555444444333333333334444455555
  1109. X1111115555444444433333333333333344445551555444433333333333333333344445555
  1110. X11111555544444433333333333333333333444555444333333333332222233333334445555
  1111. X11111555444443333333333333333333333334444433333333322222222222333333444555
  1112. X111155544444333333333332222222333333333433333333222222111122222233334444555
  1113. X111155544443333333332222222222222233333333333222222211111111122223333444555
  1114. X111155544443333333322222222222222222233333222222211111111111112223333444555
  1115. X111155544443333333222222222222222222222322222222222211111111122223333444555
  1116. X111155544443333333222222222222222222222222222222222222111111122223333444555
  1117. X111155544443333333222222222222222222222222222222222222221111222223333444555
  1118. X111155544444333333222222222222222222222222222222222222222122222233334444555
  1119. X111155554444333333322222222222222222222222222222222222222222222233334445555
  1120. X11111555444433333333222222222222222222222222222222222222222222223333444555
  1121. X11111555544443333333322222222222222222222222222222222222222222233334445555
  1122. X1111115554444333333333322222222222222222222222222222222222222233333444555
  1123. X1111115555444433333333333222222222222222222222222222222222223333334445555
  1124. X111111155544444333333333333222222222222222222222222222222333333334444555
  1125. X111111155554444433333333333332222222222222222222222222333333333344445555
  1126. X11111111555544444333333333333333222222222222222222233333333333344445555
  1127. X1111111115555444443333333333333333322222222222223333333333333344445555
  1128. X111111111155554444443333333333333333332222222333333333333334444445555
  1129. X11111111111555544444444333333333333333322233333333333333444444445555
  1130. X111111111111155554444444443333333333333333333333\33334444444445555
  1131. X11111111111111155555444444444433333333333333333\1\44444444455555
  1132. X111111111111111111555555444444444443333333334444\1\4444555555
  1133. X1111111111111111111111555555444444444443444444444\1\55555
  1134. X11111111111111111111111111555555444444444444444555\1\
  1135. X111111111111111111111111111111555555444444455555511\1\
  1136. X1111111111111111111111111111111111555554555551111111\1\
  1137. X11111111111111111111111111111111111115555511111111111\1\111\
  1138. X111111111111111111111111111111111111115551111111111111\1\1\\
  1139. X11111111111111111111111111111111111111151111111111111\\\\\\\
  1140. X1111111111111111111111111111111111111111111111111111111\\\\\
  1141. X111111111111111111111111111111111111111111111111111111111\\\
  1142. X11111111111111111111111111111111111111111111111111111111111\
  1143. X
  1144. X
  1145. X
  1146. X
  1147. X
  1148. X
  1149. X
  1150. X
  1151. X
  1152. X
  1153. !EOR!
  1154. echo extracting - afghan.lst
  1155. sed 's/^X//' > afghan.lst << '!EOR!'
  1156. X::XXXMMMMMXXX::::....     ....::::XXXMMMMMXXX::::....     ....::::XXXMMMMMXXX::
  1157. X:XXXMMM MMMXXX::::....   ....::::XXXMMM MMMXXX::::....   ....::::XXXMMM MMMXXX:
  1158. XXXXMMM   MMMXXX::::.... ....::::XXXMMM   MMMXXX::::.... ....::::XXXMMM   MMMXXX
  1159. XXXMMM  M  MMMXXX::::.......::::XXXMMM  M  MMMXXX::::.......::::XXXMMM  M  MMMXX
  1160. XXMMM  MMM  MMMXXX::::.....::::XXXMMM  MMM  MMMXXX::::.....::::XXXMMM  MMM  MMMX
  1161. XMMM  MMXMM  MMMXXX::::...::::XXXMMM  MMXMM  MMMXXX::::...::::XXXMMM  MMXMM  MMM
  1162. XMM  MMXXXMM  MMMXXX::::.::::XXXMMM  MMXXXMM  MMMXXX::::.::::XXXMMM  MMXXXMM  MM
  1163. XM  MMXX:XXMM  MMMXXX:::::::XXXMMM  MMXX:XXMM  MMMXXX:::::::XXXMMM  MMXX:XXMM  M
  1164. X  MMXX:::XXMM  MMMXXX:::::XXXMMM  MMXX:::XXMM  MMMXXX:::::XXXMMM  MMXX:::XXMM
  1165. X MMXX::.::XXMM  MMMXXX:::XXXMMM  MMXX::.::XXMM  MMMXXX:::XXXMMM  MMXX::.::XXMM
  1166. XMMXX::...::XXMM  MMMXXX:XXXMMM  MMXX::...::XXMM  MMMXXX:XXXMMM  MMXX::...::XXMM
  1167. XMXX::.. ..::XXMM  MMMXXXXXMMM  MMXX::.. ..::XXMM  MMMXXXXXMMM  MMXX::.. ..::XXM
  1168. XMMXX::...::XXMM  MMMXXX:XXXMMM  MMXX::...::XXMM  MMMXXX:XXXMMM  MMXX::...::XXMM
  1169. X MMXX::.::XXMM  MMMXXX:::XXXMMM  MMXX::.::XXMM  MMMXXX:::XXXMMM  MMXX::.::XXMM
  1170. X  MMXX:::XXMM  MMMXXX:::::XXXMMM  MMXX:::XXMM  MMMXXX:::::XXXMMM  MMXX:::XXMM
  1171. XM  MMXX:XXMM  MMMXXX:::::::XXXMMM  MMXX:XXMM  MMMXXX:::::::XXXMMM  MMXX:XXMM  M
  1172. XMM  MMXXXMM  MMMXXX::::.::::XXXMMM  MMXXXMM  MMMXXX::::.::::XXXMMM  MMXXXMM  MM
  1173. XMMM  MMXMM  MMMXXX::::...::::XXXMMM  MMXMM  MMMXXX::::...::::XXXMMM  MMXMM  MMM
  1174. XXMMM  MMM  MMMXXX::::.....::::XXXMMM  MMM  MMMXXX::::.....::::XXXMMM  MMM  MMMX
  1175. XXXMMM  M  MMMXXX::::.......::::XXXMMM  M  MMMXXX::::.......::::XXXMMM  M  MMMXX
  1176. XXXXMMM   MMMXXX::::.... ....::::XXXMMM   MMMXXX::::.... ....::::XXXMMM   MMMXXX
  1177. X:XXXMMM MMMXXX::::....   ....::::XXXMMM MMMXXX::::....   ....::::XXXMMM MMMXXX:
  1178. X::XXXMMMMMXXX::::....     ....::::XXXMMMMMXXX::::....     ....::::XXXMMMMMXXX::
  1179. X:XXXMMM MMMXXX::::....   ....::::XXXMMM MMMXXX::::....   ....::::XXXMMM MMMXXX:
  1180. XXXXMMM   MMMXXX::::.... ....::::XXXMMM   MMMXXX::::.... ....::::XXXMMM   MMMXXX
  1181. XXXMMM  M  MMMXXX::::.......::::XXXMMM  M  MMMXXX::::.......::::XXXMMM  M  MMMXX
  1182. XXMMM  MMM  MMMXXX::::.....::::XXXMMM  MMM  MMMXXX::::.....::::XXXMMM  MMM  MMMX
  1183. XMMM  MMXMM  MMMXXX::::...::::XXXMMM  MMXMM  MMMXXX::::...::::XXXMMM  MMXMM  MMM
  1184. XMM  MMXXXMM  MMMXXX::::.::::XXXMMM  MMXXXMM  MMMXXX::::.::::XXXMMM  MMXXXMM  MM
  1185. XM  MMXX:XXMM  MMMXXX:::::::XXXMMM  MMXX:XXMM  MMMXXX:::::::XXXMMM  MMXX:XXMM  M
  1186. X  MMXX:::XXMM  MMMXXX:::::XXXMMM  MMXX:::XXMM  MMMXXX:::::XXXMMM  MMXX:::XXMM
  1187. X MMXX::.::XXMM  MMMXXX:::XXXMMM  MMXX::.::XXMM  MMMXXX:::XXXMMM  MMXX::.::XXMM
  1188. XMMXX::...::XXMM  MMMXXX:XXXMMM  MMXX::...::XXMM  MMMXXX:XXXMMM  MMXX::...::XXMM
  1189. XMXX::.. ..::XXMM  MMMXXXXXMMM  MMXX::.. ..::XXMM  MMMXXXXXMMM  MMXX::.. ..::XXM
  1190. XMMXX::...::XXMM  MMMXXX:XXXMMM  MMXX::...::XXMM  MMMXXX:XXXMMM  MMXX::...::XXMM
  1191. X MMXX::.::XXMM  MMMXXX:::XXXMMM  MMXX::.::XXMM  MMMXXX:::XXXMMM  MMXX::.::XXMM
  1192. X  MMXX:::XXMM  MMMXXX:::::XXXMMM  MMXX:::XXMM  MMMXXX:::::XXXMMM  MMXX:::XXMM
  1193. XM  MMXX:XXMM  MMMXXX:::::::XXXMMM  MMXX:XXMM  MMMXXX:::::::XXXMMM  MMXX:XXMM  M
  1194. XMM  MMXXXMM  MMMXXX::::.::::XXXMMM  MMXXXMM  MMMXXX::::.::::XXXMMM  MMXXXMM  MM
  1195. XMMM  MMXMM  MMMXXX::::...::::XXXMMM  MMXMM  MMMXXX::::...::::XXXMMM  MMXMM  MMM
  1196. XXMMM  MMM  MMMXXX::::.....::::XXXMMM  MMM  MMMXXX::::.....::::XXXMMM  MMM  MMMX
  1197. XXXMMM  M  MMMXXX::::.......::::XXXMMM  M  MMMXXX::::.......::::XXXMMM  M  MMMXX
  1198. XXXXMMM   MMMXXX::::.... ....::::XXXMMM   MMMXXX::::.... ....::::XXXMMM   MMMXXX
  1199. X:XXXMMM MMMXXX::::....   ....::::XXXMMM MMMXXX::::....   ....::::XXXMMM MMMXXX:
  1200. X::XXXMMMMMXXX::::....     ....::::XXXMMMMMXXX::::....     ....::::XXXMMMMMXXX::
  1201. X:XXXMMM MMMXXX::::....   ....::::XXXMMM MMMXXX::::....   ....::::XXXMMM MMMXXX:
  1202. XXXXMMM   MMMXXX::::.... ....::::XXXMMM   MMMXXX::::.... ....::::XXXMMM   MMMXXX
  1203. XXXMMM  M  MMMXXX::::.......::::XXXMMM  M  MMMXXX::::.......::::XXXMMM  M  MMMXX
  1204. XXMMM  MMM  MMMXXX::::.....::::XXXMMM  MMM  MMMXXX::::.....::::XXXMMM  MMM  MMMX
  1205. XMMM  MMXMM  MMMXXX::::...::::XXXMMM  MMXMM  MMMXXX::::...::::XXXMMM  MMXMM  MMM
  1206. XMM  MMXXXMM  MMMXXX::::.::::XXXMMM  MMXXXMM  MMMXXX::::.::::XXXMMM  MMXXXMM  MM
  1207. XM  MMXX:XXMM  MMMXXX:::::::XXXMMM  MMXX:XXMM  MMMXXX:::::::XXXMMM  MMXX:XXMM  M
  1208. X  MMXX:::XXMM  MMMXXX:::::XXXMMM  MMXX:::XXMM  MMMXXX:::::XXXMMM  MMXX:::XXMM
  1209. X MMXX::.::XXMM  MMMXXX:::XXXMMM  MMXX::.::XXMM  MMMXXX:::XXXMMM  MMXX::.::XXMM
  1210. XMMXX::...::XXMM  MMMXXX:XXXMMM  MMXX::...::XXMM  MMMXXX:XXXMMM  MMXX::...::XXMM
  1211. XMXX::.. ..::XXMM  MMMXXXXXMMM  MMXX::.. ..::XXMM  MMMXXXXXMMM  MMXX::.. ..::XXM
  1212. XMMXX::...::XXMM  MMMXXX:XXXMMM  MMXX::...::XXMM  MMMXXX:XXXMMM  MMXX::...::XXMM
  1213. X MMXX::.::XXMM  MMMXXX:::XXXMMM  MMXX::.::XXMM  MMMXXX:::XXXMMM  MMXX::.::XXMM
  1214. X  MMXX:::XXMM  MMMXXX:::::XXXMMM  MMXX:::XXMM  MMMXXX:::::XXXMMM  MMXX:::XXMM
  1215. XM  MMXX:XXMM  MMMXXX:::::::XXXMMM  MMXX:XXMM  MMMXXX:::::::XXXMMM  MMXX:XXMM  M
  1216. XMM  MMXXXMM  MMMXXX::::.::::XXXMMM  MMXXXMM  MMMXXX::::.::::XXXMMM  MMXXXMM  MM
  1217. XMMM  MMXMM  MMMXXX::::...::::XXXMMM  MMXMM  MMMXXX::::...::::XXXMMM  MMXMM  MMM
  1218. XXMMM  MMM  MMMXXX::::.....::::XXXMMM  MMM  MMMXXX::::.....::::XXXMMM  MMM  MMMX
  1219. XXXMMM  M  MMMXXX::::.......::::XXXMMM  M  MMMXXX::::.......::::XXXMMM  M  MMMXX
  1220. XXXXMMM   MMMXXX::::.... ....::::XXXMMM   MMMXXX::::.... ....::::XXXMMM   MMMXXX
  1221. X:XXXMMM MMMXXX::::....   ....::::XXXMMM MMMXXX::::....   ....::::XXXMMM MMMXXX:
  1222. !EOR!
  1223. echo extracting - apple.lst
  1224. sed 's/^X//' > apple.lst << '!EOR!'
  1225. X
  1226. X
  1227. X
  1228. X
  1229. X
  1230. X
  1231. X
  1232. X
  1233. X
  1234. X
  1235. X
  1236. X
  1237. X                                         MM
  1238. X                                        MM
  1239. X                                       MM
  1240. X                                      MM
  1241. X                                      MM
  1242. X                                      MM
  1243. X                           MMMMMMMMMM MM  MMMMMMMMMM
  1244. X                      MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  1245. X                    MMMMMMMMMMXXXXXXMMMMMMMXXXXXXMMMMMMMMMM
  1246. X                  MMMMMMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXMMMMMM
  1247. X                 MMMMMXXXXX:::::::XXXXXXXXXXX:::::::XXXXXMMMMM
  1248. X                MMMMMXXXX:::::::::::::::::::::::::::::XXXXMMMMM
  1249. X               MMMMMXXXX:::::::   :::::::::::::::::::::XXXXMMMMM
  1250. X               MMMMMXXX::::::        :::::::::::::::::::XXXMMMMM
  1251. X              MMMMMXXXX::::         ::::::::::::::::::::XXXXMMMMM
  1252. X              MMMMXXXX::::::       ::::::::::::::::::::::XXXXMMMM
  1253. X              MMMMXXXX::::::::: :::::::::::::::::::::::::XXXXMMMM
  1254. X              MMMMXXXX:::::::::::::::::::::::::::::::::::XXXXMMMM
  1255. X              MMMMMXXXX:::::::::::::::::::::::::::::::::XXXXMMMMM
  1256. X               MMMMMXXXX:::::::::::::::::::::::::::::::XXXXMMMMM
  1257. X               MMMMMMXXXXX:::::::::::::::::::::::::::XXXXXMMMMMM
  1258. X               MMMMMMXXXXXXX:::::::::::::::::::::::XXXXXXXMMMMMM
  1259. X                MMMMMMXXXXXXXXXXX:::::::::::::XXXXXXXXXXXMMMMMM
  1260. X                MMMMMMMXXXXXXXXXXXXXX:::::XXXXXXXXXXXXXXMMMMMMM
  1261. X                 MMMMMMMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXMMMMMMM
  1262. X                  MMMMMMMMMMMMXXXXXXXXXXXXXXXXXXXMMMMMMMMMMMM
  1263. X                   MMMMMMMMMMMMMMMMXXXXXXXXXMMMMMMMMMMMMMMMM
  1264. X                     MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  1265. X                        MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  1266. X                           MMMMM   MMMMMMMMM   MMMMM
  1267. X
  1268. X
  1269. X
  1270. X                          X   X
  1271. X                           X X
  1272. X                         :: X
  1273. X                       ::XXX
  1274. X                     ::XX
  1275. X                    :XX
  1276. X                   :X
  1277. X                  :X
  1278. X                  ::
  1279. X                 ::
  1280. X                 ::
  1281. X                 ::
  1282. X                 X:              ::::
  1283. X                  X:          :::M  M::::
  1284. X                   X:::    :::M         M:::
  1285. X                    XXX::::M               M:
  1286. X                                            M:
  1287. X                                            :M
  1288. X                                         :::M
  1289. X
  1290. X
  1291. !EOR!
  1292. echo extracting - logo.lst
  1293. sed 's/^X//' > logo.lst << '!EOR!'
  1294. X
  1295. X
  1296. X
  1297. X
  1298. X
  1299. X
  1300. X
  1301. X
  1302. X
  1303. X
  1304. X
  1305. X
  1306. X
  1307. X
  1308. X
  1309. X                                  MMMMMMMMMMM
  1310. X
  1311. X                         MMMM       MMMMMMMMMMMMMMMMMM
  1312. X                      MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  1313. X
  1314. X                  MMM                   MMMMMMMMMMMMMMMMMMMMM
  1315. X                MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  1316. X
  1317. X              MM                              MMMMMMMMMMMMMMMMMMM
  1318. X             MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  1319. X
  1320. X            MM                                 MMMMMMMMMMMMMMMMMMMM
  1321. X            MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  1322. X
  1323. X           MMM                                 MMMMMMMMMMMMMMMMMMMMM
  1324. X           MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  1325. X
  1326. X           MMMMMMM                         MMMMMMMMMMMMMMMMMMMMMMMMM
  1327. X           MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  1328. X
  1329. X            MMMMMMMMMMMMM           MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  1330. X            MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  1331. X
  1332. X             MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  1333. X              MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  1334. X
  1335. X                MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  1336. X                  MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  1337. X
  1338. X                      MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  1339. X                         MMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  1340. X
  1341. X                                  MMMMMMMMMMM
  1342. X
  1343. X
  1344. X
  1345. X...............MMMMM......MMMMMMMMMMMMMM..............MMMMMMMMMMMMMMM..........
  1346. X...............MMMMM............MM..........................MM.................
  1347. X..............MMM MMM...........MM........MMMMMM............MM.................
  1348. X..............MM ..MM...........MM......MMMM..MMMM..........MM.................
  1349. X.............MMM...MMM..........MM.....MMMM.................MM.................
  1350. X.............MM.....MM..........MM.......MMMM...............MM.................
  1351. X............MMMMMMMMMMM.........MM.....MMMMMMMM.MMMM........MM.................
  1352. X............MM.......MM.........MM....MMM....MMMM...........MM.................
  1353. X...........MMM.......MMM........MM....MM....MM.MMMM.........MM.................
  1354. X...........MM.........MM........MM.....MMMMMM....MMMM.......MM.................
  1355. X
  1356. X
  1357. X
  1358. X
  1359. X
  1360. !EOR!
  1361. echo extracting - shoe.lst
  1362. sed 's/^X//' > shoe.lst << '!EOR!'
  1363. X
  1364. X
  1365. X
  1366. X
  1367. X
  1368. X
  1369. X
  1370. X
  1371. X
  1372. X
  1373. X
  1374. X
  1375. X
  1376. X
  1377. X
  1378. X
  1379. X
  1380. X
  1381. X
  1382. X
  1383. X
  1384. X
  1385. X
  1386. X
  1387. X
  1388. X
  1389. X                                     XX                        XXX
  1390. X                                  XXX::XXXXXX            XXXXXXXXX
  1391. X                              XXXX  :::::::::XXXXXXXXXXXXXXXX::::XX
  1392. X                          XXXX :::   ::::::::::::::::::::::::::::XX
  1393. X                    XXXXXX:::   :::   ::::::::::::::::::::::::::XXXX
  1394. X             XXXXXXX::::   :::   :::   ::::::::::::::::::::::XXXXXXX
  1395. X       XXXXXX::::::::::::   :::   :::   :::::::::::::::::XXXXXXXXXXX
  1396. X      XXXXXXX:::::::::::::   :::   :::   ::::::::::::::XXXXXXXXXXXXX
  1397. X     XXXXXXXXXXX:::::::::::   :::   :::   ::::::::::::XXXXXXXXXXXXX
  1398. X     XXXXXXXXXXXX:::::::::::   :::   :::   ::::::::::XXXXXXXXXXXXX
  1399. X      XXXXXXXXXXXX:::::::::::   :::   :::   :MMMMMMMMMMMMMMMMMMMMMM
  1400. X       MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  1401. X
  1402. X
  1403. X
  1404. X
  1405. X
  1406. X
  1407. X
  1408. X
  1409. X
  1410. X
  1411. X
  1412. X
  1413. X
  1414. X
  1415. X
  1416. X
  1417. X
  1418. X
  1419. X
  1420. X
  1421. X
  1422. X
  1423. X
  1424. X
  1425. X
  1426. X
  1427. X
  1428. X
  1429. !EOR!
  1430. echo extracting - valentin.lst
  1431. sed 's/^X//' > valentin.lst << '!EOR!'
  1432. X
  1433. X
  1434. X
  1435. X
  1436. X
  1437. X
  1438. X
  1439. X              |
  1440. X              ||
  1441. X          --\ \||
  1442. X           --\ \||
  1443. X            --\ \||
  1444. X             --\ \|
  1445. X              --\ \
  1446. X                 \ \
  1447. X                  \ \
  1448. X                   \ \
  1449. X                  MMMMMMMMM                         MMMMMMMMM
  1450. X              MMMMMMMMMMMMMMMMMM               MMMMMMMMMMMMMMMMMM
  1451. X           MMMMMMMXXXXXXXXXXMMMMMMM         MMMMMMMXXXXXXXXXXMMMMMMM
  1452. X        MMMMMMXXXXXXXXXXXXXXXXXMMMMMM     MMMMMMXXXXXX:::::XXXXXXMMMMMM
  1453. X       MMMMMXXXXXXXX::::::::XXXXXXMMMM   MMMMXXXXXX:::::::::::XXXXXMMMMM
  1454. X      MMMMXXXXXXX:::::::::::::::XXXXMMM MMMXXXX::::::::::::::::::XXXXMMMM
  1455. X     MMMMXXXXXX::::::::::::::::::::XXXMMMXXX:::::::::::.....:::::::XXXMMMM
  1456. X     MMMXXXXX::::::::::::::::::::::::XXXXX:::::::::...........::::::XXXMMM
  1457. X    MMMXXXXX:::::::::::.......:::::::::X::::::::......    ......::::XXXXMMM
  1458. X    MMMXXXX:::::::::..............:::::::::::.......         ....::::XXXMMM
  1459. X    MMMXXXX::::::::..................:::::.......             ...::::XXXMMM
  1460. X    MMMXXXX:::::::.....................:............         ....::::XXXMMM
  1461. X    MMMXXXX:::::::....................................       ....::::XXXMMM
  1462. X    MMMXXXX:::::::......................................    .....::::XXXMMM
  1463. X    MMMXXXXX::::::....................................... ......::::XXXXMMM
  1464. X    MMMMXXXX:::::::.............................................::::XXXMMMM
  1465. X     MMMXXXX::::::::............................................::::XXXMMM
  1466. X     MMMMXXXX::::::::..........................................::::XXXMMMM
  1467. X      MMMXXXX::::::::::.......................................:::::XXXMMM
  1468. X      MMMMXXXX:::::::::::...................................::::::XXXMMMM
  1469. X       MMMXXXXX::::::::::::..............................::::::::XXXXMMM
  1470. X       MMMMXXXXX:::::::::::::.........................::::::::::XXXXMMMM
  1471. X        MMMMXXXXX:::::::::::::::...................::::::::::::XXXXMMMM
  1472. X         MMMMXXXXX:::::::::::::::::.............::::::::::::::XXXXMMMM
  1473. X          MMMMXXXXXX::::::::::::::::::.......::::::::::::::XXXXXXMMMM
  1474. X           MMMMXXXXXXXX::::::::::::::::...::::::::::::::XXXXXXXXMMMM
  1475. X             MMMMXXXXXXXXX::::::::::::::::::::::\::::XXXXXXXXXMMMM
  1476. X               MMMMMXXXXXXXXXX:::::::::::::::::\ \XXXXXXXXXMMMMM
  1477. X                  MMMMMMXXXXXXXXXXX:::::::::XXXX\ \XXXXMMMMMM
  1478. X                      MMMMMMXXXXXXXXXXX:XXXXXXXXX\ \MMMMM
  1479. X                          MMMMMMXXXXXXXXXXXXXXXMMM\ \
  1480. X                              MMMMMMXXXXXXXMMMMMM  \ \
  1481. X                                  MMMMMXMMMMM       \ \
  1482. X                                     MMMMM           \ \   \
  1483. X                                      MMM             \ \ \\
  1484. X                                       M             \\\\\\\
  1485. X                                                       \\\\\
  1486. X                                                         \\\
  1487. X                                                           \
  1488. X
  1489. X
  1490. X
  1491. X
  1492. X
  1493. X
  1494. X
  1495. X
  1496. X
  1497. X
  1498. !EOR!
  1499.