home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
misc
/
volume1
/
8711
/
6
< prev
next >
Wrap
Internet Message Format
|
1990-07-13
|
57KB
Path: uunet!husc6!bbn!rochester!udel!burdvax!bpa!cbmvax!vu-vlsi!devon!ncoast!allbery
From: dmt@mtunb.ATT.COM (Dave Tutelman)
Newsgroups: comp.sources.misc
Subject: Printer Art and a Tool (1 of 2)
Message-ID: <5323@ncoast.UUCP>
Date: 8 Nov 87 21:42:27 GMT
Sender: allbery@ncoast.UUCP
Organization: AT&T Information Systems - Lincroft, NJ
Lines: 1486
Approved: allbery@ncoast.UUCP
X-Archive: comp.sources.misc/8711/6
[Part 2 of this will be in comp.binaries.ibm.pc. After I manage to convince
the rest of the net that converting comp.binaries.ibm.pc was not a mistake
made by my inews, that is. ++bsa]
A week or so ago, there were a few requests on the net for samples of
"printer art". That reminded me of one of my first PC hacks, an editor
to generate printer art. Here's the source, and a number of examples
of the printer art it can easily generate.
The first file in the shell archive is a README file for more information
on what the program does. You can read it without unSHARing the file.
The program is in Turbo Pascal 1.0 (circa January 1974) and runs on PCs with
a CGA or compatible display (I use it on an AT&T PC 6300). For those
who don't have Turbo Pascal 1.0 (:->), I'm also posting the
arc-ed, uuencoded, .COM file in part 2 of this posting.
+---------------------------------------------------------------+
| Dave Tutelman |
| Physical - AT&T - Lincroft, NJ |
| Logical - ...ihnp4!mtuxo!mtunb!dmt |
| Audible - (201) 576 2442 |
+---------------------------------------------------------------+
----------------- cut here ----------------------------
: This is a shar archive. Extract with sh, not csh.
: The rest of this file will extract:
: 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
echo extracting - readme
sed 's/^X//' > readme << '!EOR!'
X PAINT
X
X A Printer-Art Editor for the PC
X
X by Dave Tutelman
X
X
XThis program, written in Turbo Pascal Version 1.0 (yup, real old),
Xis a screen-based editor for generating "printer art" on a line printer.
XYou use the program to generate or edit an on-screen, shaded-pixel
Xrepresentation of a printer page (80 x 66). You can then send a text
Xversion to the printer, or to a .LST file for later printing. The text
Xversion substitutes printable ASCII characters (of greater or lesser
Xdensity) for the shaded pixels.
X
XIncluded in this distribution is:
X README This file.
X PAINT.PAS The main Pascal file.
X PIXEL.PAS "Included" file of Pascal graphics routines.
X PTUTILS.PAS "Included" Pascal file.
X PTFILE.PAS ditto
X PTFANCY.PAS ditto
X *.PIC A number of encoded (source) pictures for PAINT.
X *.LST Printer-ready pictures for PAINT.
X
XThe program can be used either from the Turbo Pascal integrated environment
Xor from the command line (as a .COM file).
X
X
XINSTRUCTIONS
X
XThe PAINT screen consists of a "page area" of 66 x 80 "shaded pixels",
Xand a "command menu area".
X
XTo use the PAGE AREA:
X - The fast-blinking cursor is a "brush", one print-position in size.
X - The brush can be moved in EIGHT directions, not just 4. The
X cursor keys control horizontal and vertical movement; the other
X keys on the cursor keypad control diagonal movement. (E.g. -
X the "Home" key moves the cursor up/left one position.)
X - The brush can take one of 6 values:
X 0 Neutral, or no-change.
X 1 Blank.
X 2 Light.
X 3 Medium.
X 4 Darker.
X 5 Darkest.
X You can set the brush value by pressing a numeric key 0-5.
X - As the brush is moved around in the page area, it paints its value
X on each print position it visits. (If its value is zero, the
X brush leaves print positions unchanged.)
X - Use the above instructions to paint a picture in the page area.
X (You can also use some fancier constructs from the command menu,
X like "mirror" and "fill".)
X
XTo use the COMMAND MENU:
X - A command is selected by pressing the key corresponding to the
X capitalized letter in the menu.
X - You are prompted for a confirmation and/or further information.
X - In the "Fill" command, "darker" refers to the shade on the PRINT,
X not on the SCREEN.
X - In the "Print" command, the default is to scroll the ASCII-text
X picture to the PC screen (CON:). You can also send it to a file
X of arbitrary name, or to the printer (PRN:).
X - The "Save" and "Load" commands deal with a "live" (editable)
X version of the picture, not a print-ready version. However, it
X too is legal ASCII text, not a [more efficient] binary
X representation.
X
XI encourage you to play with the features for a few minutes before using
Xthem on a "real" picture.
X
X Dave Tutelman
X November 2, 1987
!EOR!
echo extracting - paint.pas
sed 's/^X//' > paint.pas << '!EOR!'
X{ paint a screen of "cells" of shades.
X The cells correspond to print positions, so the screen
X can be printed on a line printer (Low-res graphics)
X}
X
X{$V-} (* Allow small strings to be passed to procedures *)
X
Xconst RIGHT = 75; (* "effective" right edge of screen, 80 for good mon *)
X WinWidth = 20;
X WinHite = 19; (* height of menu window *)
X MAXBRUSH = 15;
Xtype MenuItem = string [WinWidth];
X prompt = array [1..5] of MenuItem;
X filename = string [14];
X WinID = 1..2;
X PagArr = array [0..80, 0..70] of byte;
X palette = string [MAXBRUSH];
Xconst OldXlate : palette = ' .oXM';
X (* translate from brush code to old character *)
X PXlate : palette = ' .:XM |-+\/X'; (* print translation *)
X SXlate : palette = '123456789|-+\/X'; (* SFile translation *)
X FilMsg1 : prompt = ('fill to','Darker or Lighter','edge?','','');
Xvar line,page : integer; (* columns & rows on print page *)
X xcell,ycell: integer; (* # of pixels in a cell *)
X brush : integer; (* code for painting a cell *)
X (* 0 - no permanent effect
X 1-5 progressively heavier tones
X 6-9 currently unassigned
X 10-15 = | - + \ / X
X *)
X FillFlag : integer; (* used to indicate the nature of the fill *)
X ErrMsg : MenuItem;
X fname, pname : filename; (* file name & print device name *)
X x,y : integer; (* col,row position of cursor *)
X bkgnd, inchar : char;
X screen : PagArr; (* array of brush values *)
X linecount : array [1..2] of integer;
X (* line counters for windows *)
X
Xprocedure blink; forward;
X
X
X{$I pixel.pas }
X{$i ptutils.pas }
X{$I ptfile.pas }
X
X
X
Xprocedure blink; { blinks the cursor until key is pressed }
X var curs : integer;
X begin
X ResetWin (2);
X window (2, ErrMsg); (* print the most recent error message *)
X curs := 5;
X while not KeyPressed do (* blink until next keystroke *)
X begin
X if curs=5 then curs:=1 else curs:=5;
X dab (x,y, curs);
X delay (60);
X end;
X ErrMsg := ' ';
X end;
X
X{$I ptfancy.pas }
X
Xprocedure MenuDisp; { displays the menu of commands }
X var line : integer;
X begin
X linecount[1]:=4; (* start menu on fourth line *)
X window (1, 'COMMANDS');
X window (1, ' ');
X window (1, 'Quit');
X window (1, 'Save');
X window (1, 'Load');
X window (1, 'Print');
X window (1, 'Mirror');
X window (1, 'Fill');
X window (1, 'Restore screen');
X end;
X
Xprocedure RestorScr;
X var i,j : integer;
X begin
X HiRes;
X if bkgnd='W' then wpage (xcell*line, ycell*page)
X else boxpage (xcell*line, ycell*page);
X MenuDisp;
X brush:=0; (* start with dry brush *)
X
X for j:=0 to (page-1) do
X for i:=0 to (line-1) do
X if screen [i,j]>1 then dab (i,j, screen [i,j]);
X end;
X
Xbegin
X{ initialize parameters for the program }
X line:=79;
X page:=66;
X brush:=0;
X bkgnd:='B';
X ErrMsg:=' ';
X linecount[2] := WinHite + 1;
X fname:=''; pname:='CON:';
X
X xcell:=4; ycell:=3;
X for x:=0 to line do for y:=0 to page do screen [x,y] := 1;
X x:=line div 2; (* start in the middle of page *)
X y:=page div 2;
X
X RestorScr;
X
X{ MAIN WORKING LOOP }
X repeat
X blink;
X read (kbd, inchar);
X case inchar of
X ^[: begin (* ESC is cursor control *)
X if brush>0 then screen[x,y] := brush;
X dab (x,y, screen[x,y]); (* paint cell before leaving *)
X read (kbd, inchar);
X case inchar of
X 'G': (* up & left *)
X if (x-1>=0) and (y-1>=0) then
X begin x := x-1; y := y-1; end;
X 'H': (* up *)
X if y-1>=0 then
X y := y-1;
X 'I': (* up & right *)
X if (x+1<line) and (y-1>=0) then
X begin x := x+1; y := y-1; end;
X 'M': (* right *)
X if x+1<line then
X x := x+1;
X 'Q': (* down & right *)
X if (x+1<line) and (y+1<page) then
X begin x := x+1; y := y+1; end;
X 'P': (* down *)
X if y+1<page then
X y := y+1;
X 'O': (* down & left *)
X if (x-1>=0) and (y+1<page) then
X begin x := x-1; y := y+1; end;
X 'K': (* left *)
X if x-1>=0 then
X x := x-1;
X end;
X inchar := ' '; (* kill for Quit check *)
X if brush>0 then screen[x,y] := brush;
X end;
X
X '0': (* turn off the brush *)
X brush := 0;
X
X '1'..'9','|','-','+','\','/','X': (* change the brush *)
X begin
X brush := pos (inchar, SXlate);
X screen [x,y] := brush;
X end;
X
X 'l','L': (* load a file from disk *)
X if verify ('LOAD?') then
X begin
X load (fname, screen, SXlate);
X RestorScr;
X end;
X
X 's','S': (* save in a file *)
X if verify ('SAVE?') then
X begin
X fname := getname(fname, 0);
X save (fname, screen, SXlate);
X end;
X
X 'p','P': (* print on the line printer *)
X if verify ('PRINT?') then
X begin
X pname := getname(pname, 0);
X save (pname, screen, PXlate);
X if pname='CON:' then RestorScr;
X end;
X
X 'r','R': (* restore a corrupted screen image *)
X RestorScr;
X
X 'm','M': (* mirror the screen about an axis *)
X if verify ('MIRROR?') then
X begin
X mirror;
X end;
X
X 'f','F': (* fill an area *)
X if verify ('FILL?') then
X begin
X ClrWin (2);
X window (2, 'BRUSH value is');
X window (2, SXlate [brush] );
X window (2, 'OK? (Y/N)');
X read (kbd, inchar);
X if (inchar='y') or (inchar='Y') then
X begin
X inchar := getchar (FilMsg1);
X
X case inchar of
X 'd','D': FillFlag := 4;
X 'l','L': FillFlag := 3;
X else FillFlag := 5; (* assure that fill never starts *)
X end;
X
X if FillFlag<5 then fill (x,y);
X end;
X ClrWin (2);
X end;
X
X { ADD NEW COMMANDS HERE }
X
X 'q','Q': (* looks like QUIT, but let's check *)
X if not (verify ('QUIT???')) then inchar := ' ';
X
X else ErrMsg:= concat(inchar,': NO SUCH COMMAND');
X end;
X
X until (inchar='Q') or (inchar='q');
X
X Alfa;
!EOR!
echo extracting - pixel.pas
sed 's/^X//' > pixel.pas << '!EOR!'
X{ PIXEL is a set of low-level graphic primitives. }
X
Xprocedure HiRes; { enter HiRes graphics mode }
X begin
X inline ( (* uses interupt 10H in BIOS *)
X $B8/$06/$00/ (* MOV AX,6H ;load fn # in A *)
X $CD/$10 (* INT 10H *)
X );
X end;
X
Xprocedure Alfa; { enter 80x25 alpha mode }
X begin
X inline ( (* uses interupt 10H in BIOS *)
X $B8/$02/$00/ (* MOV AX,2H ;load fn # in A *)
X $CD/$10 (* INT 10H *)
X );
X end;
X
Xprocedure pixel ( x,y,val : integer );
X { draw a pixel at <x,y>. If val=0,
X then erase the pixel instead. }
X type mask = array [0..7] of byte;
X const MASK1: mask =($80,$40,$20,$10,$08,$04,$02,$01);
X MASK0: mask =($7F,$BF,$DF,$EF,$F7,$FB,$FD,$FE);
X PIXBASE = $B800;
X var odd, bytA : integer;
X point : ^byte;
X
X begin
X { First compute a pointer to the byte containing pixel }
X odd := y mod 2; (* odd or even scan line? *)
X bytA:= y div 2 * 80 + x div 8 + 8192*odd;
X point := ptr ( PIXBASE, bytA );
X
X { Now write the pixel into the byte }
X if val=0 then point^ := point^ and MASK0 [x mod 8]
X else point^ := point^ or MASK1 [x mod 8];
X end;
!EOR!
echo extracting - ptfancy.pas
sed 's/^X//' > ptfancy.pas << '!EOR!'
X{ Routines to do fancy editing, like Mirror and Fill }
X
Xprocedure mirror;
X
X const msg1 : prompt = ('cursor on','mirror axis?',' (Y/N)','','');
X msg2 : prompt = ('keep','Top? Bottom?','Right? Left?','','');
X var inchar, keep, H_or_V : char;
X offset, i, j, size : integer;
X
X begin
X inchar := getchar (msg1); (* cursor check *)
X if not((inchar='y') or (inchar='Y')) then
X (* didn't set up properly. ABORT! *)
X begin
X ClrWin (2);
X window (2, 'Aborting mirror');
X end
X else
X begin
X
X keep := getchar (msg2); (* orientation of mirror *)
X
X offset:=0; (* 1 only for even symmetry, not implemented *)
X
X case keep of (* MAIN WORKING CODE *)
X
X 'L','l': (* keep the left part *)
X begin
X if x < line-x then size := x
X else size := line-x;
X for j:=0 to page do
X for i:= 0 to size do
X begin
X screen [x+offset+i, j] := screen [x-i, j];
X dab (x+offset+i, j, screen [x+offset+i, j]);
X end;
X end;
X
X 'R','r': (* keep the right part *)
X begin
X if x < line-x then size := x
X else size := line-x;
X for j:=0 to page do
X for i:= 0 to size do
X begin
X screen [x-i, j] := screen [x+offset+i, j];
X dab (x-i, j, screen [x-i,j]);
X end;
X end;
X
X
X 'T','t': (* keep the top part *)
X begin
X if y < page-y then size := y
X else size := page-y;
X for i:=0 to line do
X for j:= 0 to size do
X begin
X screen [i, y+offset+j] := screen [i, y-j];
X dab (i, y+offset+j, screen [i, y+offset+j]);
X end;
X end;
X
X 'B','b': (* keep the bottom part *)
X begin
X if y < page-y then size := y
X else size := page-y;
X for i:=0 to line do
X for j:= 0 to size do
X begin
X screen [i, y-j] := screen [i, y+offset+j];
X dab (i, y-j, screen [i, y-j]);
X end;
X end;
X
X else
X begin
X ClrWin (2);
X window (2, 'Illegal option.');
X window (2, 'Mirror aborted.');
X end;
X end;
X end;
X end;
X
X
Xfunction check (x,y, n : integer) : boolean;
X { this function is used by "fill" to test whether a cell is a candidate
X for the next step. N identifies whether the test is for:
X 0 - don't test for cell contents, just <x,y> in bounds.
X 1 - test for exact match.
X 2 - test for all but exact match.
X 3 - test for screen > brush.
X 4 - test for screen < brush.
X }
X begin
X check := FALSE;
X if (x >= 0) and (x < line) and (y >= 0) and (y < page) then
X case n of
X 0: check := TRUE;
X 1: if screen [x,y] = brush then check := TRUE;
X 2: if not (screen [x,y] = brush) then check := TRUE;
X 3: if screen [x,y] > brush then check := TRUE;
X 4: if screen [x,y] < brush then check := TRUE;
X end;
X end;
X
X
Xprocedure fill (x,y : integer);
X { fills an area including the point <x,y>, up to a boundary of cells
X >= brush if FillFlag = 3
X <= brush if FillFlag = 4
X }
X begin
X screen [x,y] := brush;
X dab (x,y, brush); (* this way, we watch it work *)
X (* For speed, drop this line, & RestorScr *)
X if check (x+1,y, FillFlag) then fill (x+1,y);
X if check (x,y+1, FillFlag) then fill (x,y+1);
X if check (x-1,y, FillFlag) then fill (x-1,y);
X if check (x,y-1, FillFlag) then fill (x,y-1);
!EOR!
echo extracting - ptfile.pas
sed 's/^X//' > ptfile.pas << '!EOR!'
X{ This is a set of file-handling utilities,
X designed for PAINT, but perhaps with wider applicability }
X
Xfunction getname ( oldname : filename; code : integer ) : filename;
X { Queries for a file name, announcing "oldname" as default.
X If code > 0, file must already exist.
X Returns the file name. }
X
X var newname : filename;
X inchar : char;
X fprom : prompt;
X filemsg : string [20];
X fname : text;
X begin
X inchar:=' ';
X newname:=oldname;
X repeat
X ClrWin (2);
X window (2,'Current File Name');
X window (2,newname);
X window (2,'NAME OF FILE?');
X GoToXY (RIGHT-WinWidth, linecount [2]);
X ReadLn (newname);
X if newname='' then newname:=oldname;
X Assign (fname, newname);
X
X {$I-} reset (fname) {$I+} ;
X if IOresult=0 then
X begin
X filemsg := 'File exists. OK?';
X close (fname);
X end
X else begin
X if code=0 then filemsg:= 'New file. OK?'
X else filemsg:= 'No such file.'
X end;
X
X inchar := ' ';
X ClrWin (2);
X window (2,newname);
X window (2,filemsg);
X if not (filemsg='No such file.') then
X begin
X window (2,'(Y/N)');
X GoToXY (RIGHT-WinWidth+6, linecount [2]-1);
X read (kbd, inchar);
X end
X else Delay (3000);
X
X until (inchar='y') or (inchar='Y');
X
X ClrWin (2);
X getname := newname;
X end;
X
Xprocedure load (var oldname : filename; var screen : PagArr; xlate : palette);
X const abortmsg : prompt = ('NO SUCH FILE','ABORTING LOAD','','','');
X var i,j, last : integer;
X pline : string [132];
X pfile : text;
X newname : filename;
X begin
X ClrWin (2);
X window (2,'Current File Name');
X window (2,oldname);
X window (2,'NAME OF FILE?');
X GoToXY (RIGHT-WinWidth, linecount [2]);
X ReadLn (newname);
X if newname='' then newname:=oldname;
X
X assign (pfile, newname);
X {$I-} reset (pfile) {$I+} ;
X if not (IOresult=0) then (* no such file *)
X flash (abortmsg)
X else begin (* load line-by-line from pfile *)
X (* start by clearing old screen *)
X for j:=0 to page do for i:=0 to line do screen [i,j] := 1;
X
X i:=0; (* line counter *)
X while not EOF (pfile) do
X begin
X readln (pfile, pline);
X last := length (pline) -1;
X
X (* construct a line of the screen *)
X for j:=0 to last do
X screen [j,i] := pos (pline [j+1], xlate);
X (* use "xlate" to get numeric brush values *)
X if last < line-1 then (* fill rest of line with blanks *)
X for j:=last+1 to line-1 do screen [j,i] := 1;
X
X i := i + 1;
X end;
X
X close (pfile);
X oldname := newname;
X end;
X end;
X
X
Xprocedure save (fname : filename; screen : PagArr; xlate : palette);
X var i,j, last : integer;
X pline : string [132];
X pfile : text;
X reassure : prompt;
X begin
X if fname='CON:' then
X begin Alfa; ClrScr; end;
X assign (pfile, fname);
X rewrite (pfile);
X for i:=0 to page-1 do (* for each line in turn *)
X begin
X (* find last non-blank on line *)
X last := line-1;
X while (screen [last,i] < 2) and (last >= 0) do
X last := last - 1;
X
X (* construct a print line *)
X pline := '';
X if last >=0 then
X for j:=0 to last do
X pline := concat (pline, xlate [screen [j,i]]);
X
X if (fname='CON:') and (line=80)
X then write (pfile, pline) (* CR takes the 81st col *)
X else writeln (pfile, pline);
X end;
X close (pfile);
X if fname='CON:' then repeat until KeyPressed
X else if not (fname='LST:') then
X begin
X reassure [1] := fname;
X reassure [2] := 'FILE SAVED.';
X reassure [3] := ''; reassure [4] := ''; reassure [5] := '';
X flash (reassure);
X end;
X end;
!EOR!
echo extracting - ptutils.pas
sed 's/^X//' > ptutils.pas << '!EOR!'
X{ this is a set of utilities (procedures) used by PAINT.
X Window (num, MenuItem)
X ResetWin (num)
X ClrWin (num)
X flash (prompt)
X getchar (prompt) --> char
X verify (MenuItem) --> boolean
X
X dab (x,y, brush)
X wpage (width, height)
X boxpage (width, height)
X}
X
Xprocedure window ( num : WinID; message : MenuItem);
X { write a message on the next line of the indicated window }
X begin
X GoToXY (RIGHT-WinWidth, linecount [num]);
X write (message);
X linecount [num] := linecount[num] +1;
X end;
X
Xprocedure ResetWin (num : WinID);
X begin
X if num=1 then linecount [1] := 1
X else linecount [2] := WinHite + 1;
X end;
X
Xprocedure ClrWin (num : WinID);
X var x,y, ymin,ymax : integer;
X begin
X if num=1 then begin ymin:=1; ymax:=WinHite; end
X else begin ymin:=WinHite+1; ymax:=25; end;
X for y:=ymin to ymax do
X begin
X GoToXY (RIGHT-WinWidth, y);
X for x:=1 to WinWidth do write (' ');
X end;
X linecount [2] := WinHite + 1;
X end;
X
Xprocedure flash (msg : prompt);
X { show a 5-line message in window 2 for 3 seconds }
X var i : integer;
X begin
X ClrWin (2);
X for i:=1 to 5 do
X window (2, msg [i]);
X delay (3000);
X ClrWin (2);
X end;
X
Xfunction getchar (msg : prompt) : char;
X { puts a 5-line prompt on the screen, then waits for keystroke }
X { returns the result of the keystroke }
X var i : integer;
X inchar : char;
X begin
X ClrWin (2);
X ErrMsg := msg [1]; (* will be displayed by "blink" *)
X window (2, '');
X for i:=2 to 5 do
X window (2, msg [i]);
X blink;
X read (kbd, inchar);
X getchar := inchar;
X end;
X
Xfunction verify (msg : MenuItem) : boolean;
X var inchar : char;
X begin
X ClrWin (2);
X window (2, msg);
X window (2, ' (Y/N)');
X read (kbd, inchar);
X if (inchar='y') or (inchar='Y') then verify := TRUE
X else verify := FALSE;
X ClrWin (2);
X end;
X
X
Xprocedure dab (x,y,brush : integer);
X type brushes = array [0..MAXBRUSH, 0..2] of byte;
X mask = array [0..1] of byte;
X const b_palette : brushes = ((0,0,0), (* brush = 0 *)
X (0,0,0), (* " " 1 *)
X (8,0,2), (* 2 *)
X (10,5,10), (* 3 *)
X (7,11,13), (* 4 *)
X (15,15,15), (* 5 *)
X (0,0,0), (* 6 *)
X (0,0,0), (* 7 *)
X (0,0,0), (* 8 *)
X (0,0,0), (* 9 *)
X (2,2,2), (* 10 = | *)
X (0,15,0), (* 11 = - *)
X (2,15,2), (* 12 = + *)
X (8,6,1), (* 13 = \ *)
X (1,6,8), (* 14 = / *)
X (9,6,9)); (* 15 = X *)
X half : mask = ($F0, $0F);
X shifter : mask = (16,1);
X PIXBASE = $B800;
X var xodd, yodd, bytA : integer;
X xmap, ymap : integer;
X j : integer;
X point : ^byte;
X begin
X ymap := y*ycell; (* ymap = row of raster *)
X xmap := x div 2; (* xmap = byte in x-raster *)
X xodd := x mod 2; (* left or right half of byte *)
X for j:=0 to 2 do
X begin
X (* get a pointer to the byte to be modified *)
X yodd := ymap mod 2;
X bytA := ymap div 2 * 80 + yodd * 8192 + xmap;
X point := ptr (PIXBASE, bytA);
X
X (* now write the palette entry into the half-byte *)
X point^ := (point^ and half [1-xodd]) or
X (b_palette [brush, j] * shifter [xodd]);
X ymap := ymap + 1; (* bump the line counter *)
X end;
X end;
X
Xprocedure wpage (width, hite : integer);
X { wpage whites out the page for background color }
X const PIXBASE = $B800;
X var x,y : integer;
X bytA : ^byte;
X begin
X for x:=0 to (width div 8) do
X for y:=0 to (hite div 2) do
X begin
X bytA:=ptr(PIXBASE, y*80 + x);
X bytA^:=255;
X bytA:=ptr(PIXBASE, $2000 + y*80 +x);
X bytA^:=255;
X end;
X end;
X
Xprocedure boxpage (width, hite : integer);
X { boxpage takes a black-bkgnd page and outlines it }
X var x,y : integer;
X begin
X for x:=0 to (width-1) do
X begin
X pixel (x, 0, 1);
X pixel (x, hite-1, 1);
X end;
X for y:=0 to (hite-1) do
X begin
X pixel (0, y, 1);
X pixel (width-1, y, 1);
X end;
X end;
X
!EOR!
echo extracting - afghan.pic
sed 's/^X//' > afghan.pic << '!EOR!'
X3344455555444333322221111122223333444555554443333222211111222233334445555544433
X3444555155544433332222111222233334445551555444333322221112222333344455515554443
X4445551115554443333222212222333344455511155544433332222122223333444555111555444
X4455511511555444333322222223333444555115115554443333222222233334445551151155544
X4555115551155544433332222233334445551155511555444333322222333344455511555115554
X5551155455115554443333222333344455511554551155544433332223333444555115545511555
X5511554445511555444333323333444555115544455115554443333233334445551155444551155
X5115544344551155544433333334445551155443445511555444333333344455511554434455115
X11554433344551155544433333444555115544333445511555444333334445551155443334455
X155443323344551155544433344455511554433233445511555444333444555115544332334455
X5544332223344551155544434445551155443322233445511555444344455511554433222334455
X5443322122334455115554444455511554433221223344551155544444555115544332212233445
X5544332223344551155544434445551155443322233445511555444344455511554433222334455
X155443323344551155544433344455511554433233445511555444333444555115544332334455
X11554433344551155544433333444555115544333445511555444333334445551155443334455
X5115544344551155544433333334445551155443445511555444333333344455511554434455115
X5511554445511555444333323333444555115544455115554443333233334445551155444551155
X5551155455115554443333222333344455511554551155544433332223333444555115545511555
X4555115551155544433332222233334445551155511555444333322222333344455511555115554
X4455511511555444333322222223333444555115115554443333222222233334445551151155544
X4445551115554443333222212222333344455511155544433332222122223333444555111555444
X3444555155544433332222111222233334445551555444333322221112222333344455515554443
X3344455555444333322221111122223333444555554443333222211111222233334445555544433
X3444555155544433332222111222233334445551555444333322221112222333344455515554443
X4445551115554443333222212222333344455511155544433332222122223333444555111555444
X4455511511555444333322222223333444555115115554443333222222233334445551151155544
X4555115551155544433332222233334445551155511555444333322222333344455511555115554
X5551155455115554443333222333344455511554551155544433332223333444555115545511555
X5511554445511555444333323333444555115544455115554443333233334445551155444551155
X5115544344551155544433333334445551155443445511555444333333344455511554434455115
X11554433344551155544433333444555115544333445511555444333334445551155443334455
X155443323344551155544433344455511554433233445511555444333444555115544332334455
X5544332223344551155544434445551155443322233445511555444344455511554433222334455
X5443322122334455115554444455511554433221223344551155544444555115544332212233445
X5544332223344551155544434445551155443322233445511555444344455511554433222334455
X155443323344551155544433344455511554433233445511555444333444555115544332334455
X11554433344551155544433333444555115544333445511555444333334445551155443334455
X5115544344551155544433333334445551155443445511555444333333344455511554434455115
X5511554445511555444333323333444555115544455115554443333233334445551155444551155
X5551155455115554443333222333344455511554551155544433332223333444555115545511555
X4555115551155544433332222233334445551155511555444333322222333344455511555115554
X4455511511555444333322222223333444555115115554443333222222233334445551151155544
X4445551115554443333222212222333344455511155544433332222122223333444555111555444
X3444555155544433332222111222233334445551555444333322221112222333344455515554443
X3344455555444333322221111122223333444555554443333222211111222233334445555544433
X3444555155544433332222111222233334445551555444333322221112222333344455515554443
X4445551115554443333222212222333344455511155544433332222122223333444555111555444
X4455511511555444333322222223333444555115115554443333222222233334445551151155544
X4555115551155544433332222233334445551155511555444333322222333344455511555115554
X5551155455115554443333222333344455511554551155544433332223333444555115545511555
X5511554445511555444333323333444555115544455115554443333233334445551155444551155
X5115544344551155544433333334445551155443445511555444333333344455511554434455115
X11554433344551155544433333444555115544333445511555444333334445551155443334455
X155443323344551155544433344455511554433233445511555444333444555115544332334455
X5544332223344551155544434445551155443322233445511555444344455511554433222334455
X5443322122334455115554444455511554433221223344551155544444555115544332212233445
X5544332223344551155544434445551155443322233445511555444344455511554433222334455
X155443323344551155544433344455511554433233445511555444333444555115544332334455
X11554433344551155544433333444555115544333445511555444333334445551155443334455
X5115544344551155544433333334445551155443445511555444333333344455511554434455115
X5511554445511555444333323333444555115544455115554443333233334445551155444551155
X5551155455115554443333222333344455511554551155544433332223333444555115545511555
X4555115551155544433332222233334445551155511555444333322222333344455511555115554
X4455511511555444333322222223333444555115115554443333222222233334445551151155544
X4445551115554443333222212222333344455511155544433332222122223333444555111555444
X3444555155544433332222111222233334445551555444333322221112222333344455515554443
!EOR!
echo extracting - apple.pic
sed 's/^X//' > apple.pic << '!EOR!'
X
X
X
X
X
X
X
X
X
X
X
X
X1111111111111111111111111111111111111111155
X111111111111111111111111111111111111111155
X11111111111111111111111111111111111111155
X1111111111111111111111111111111111111155
X1111111111111111111111111111111111111155
X1111111111111111111111111111111111111155
X1111111111111111111111111115555555555155115555555555
X111111111111111111111155555555555555555555555555555555555
X11111111111111111111555555555544444455555554444445555555555
X1111111111111111115555554444444444444444444444444444444555555
X11111111111111111555554444433333334444444444433333334444455555
X111111111111111155555444433333333333333333333333333333444455555
X1111111111111115555544443333333111333333333333333333333444455555
X1111111111111115555544433333311111111333333333333333333344455555
X11111111111111555554444333311111111133333333333333333333444455555
X11111111111111555544443333331111111333333333333333333333344445555
X11111111111111555544443333333331333333333333333333333333344445555
X11111111111111555544443333333333333333333333333333333333344445555
X11111111111111555554444333333333333333333333333333333333444455555
X1111111111111115555544443333333333333333333333333333333444455555
X1111111111111115555554444433333333333333333333333333344444555555
X1111111111111115555554444444333333333333333333333334444444555555
X111111111111111155555544444444444333333333333344444444444555555
X111111111111111155555554444444444444433333444444444444445555555
X11111111111111111555555544444444444444444444444444444445555555
X1111111111111111115555555555554444444444444444444555555555555
X111111111111111111155555555555555554444444445555555555555555
X1111111111111111111115555555555555555555555555555555555555
X1111111111111111111111115555555555555555555555555555555
X1111111111111111111111111115555511155555555511155555
X
X
X
X1111111111111111111111111141114
X111111111111111111111111111414
X11111111111111111111111113314
X1111111111111111111111133444
X1111111111111111111113344
X11111111111111111111344
X111111111111111111134
X11111111111111111134
X11111111111111111133
X1111111111111111133
X1111111111111111133
X1111111111111111133
X1111111111111111143111111111111113333
X11111111111111111143111111111133351153333
X11111111111111111114333111133351111111115333
X111111111111111111114443333511111111111111153
X1111111111111111111111111111111111111111111153
X1111111111111111111111111111111111111111111135
X111111111111111111111111111111111111111113335
X
X
!EOR!
echo extracting - logo.pic
sed 's/^X//' > logo.pic << '!EOR!'
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X111111111111111111111111111111111155555555555
X
X111111111111111111111111155551111111555555555555555555
X111111111111111111111155555555555555555555555555555555555
X
X1111111111111111115551111111111111111111555555555555555555555
X111111111111111155555555555555555555555555555555555555555555555
X
X11111111111111551111111111111111111111111111115555555555555555555
X111111111111155555555555555555555555555555555555555555555555555555
X
X1111111111115511111111111111111111111111111111155555555555555555555
X1111111111115555555555555555555555555555555555555555555555555555555
X
X11111111111555111111111111111111111111111111111555555555555555555555
X11111111111555555555555555555555555555555555555555555555555555555555
X
X11111111111555555511111111111111111111111115555555555555555555555555
X11111111111555555555555555555555555555555555555555555555555555555555
X
X1111111111115555555555555111111111115555555555555555555555555555555
X1111111111115555555555555555555555555555555555555555555555555555555
X
X111111111111155555555555555555555555555555555555555555555555555555
X11111111111111555555555555555555555555555555555555555555555555555
X
X111111111111111155555555555555555555555555555555555555555555555
X1111111111111111115555555555555555555555555555555555555555555
X
X111111111111111111111155555555555555555555555555555555555
X111111111111111111111111155555555555555555555555555555
X
X111111111111111111111111111111111155555555555
X
X
X
X2222222222222225555522222255555555555555222222222222225555555555555552222222222
X2222222222222225555522222222222255222222222222222222222222225522222222222222222
X2222222222222255515552222222222255222222225555552222222222225522222222222222222
X2222222222222255122552222222222255222222555522555522222222225522222222222222222
X2222222222222555222555222222222255222225555222222222222222225522222222222222222
X2222222222222552222255222222222255222222255552222222222222225522222222222222222
X2222222222225555555555522222222255222225555555525555222222225522222222222222222
X2222222222225522222225522222222255222255522225555222222222225522222222222222222
X2222222222255522222225552222222255222255222255255552222222225522222222222222222
X2222222222255222222222552222222255222225555552222555522222225522222222222222222
X
X
X
X
X
!EOR!
echo extracting - shoe.pic
sed 's/^X//' > shoe.pic << '!EOR!'
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X111111111111111111111111111111111111144111111111111111111111111444
X111111111111111111111111111111111144433444444111111111111444444444
X1111111111111111111111111111114444113333333334444444444444444333344
X1111111111111111111111111144441333111333333333333333333333333333344
X11111111111111111111444444333111333111333333333333333333333333334444
X11111111111114444444333311133311133311133333333333333333333334444444
X11111114444443333333333331113331113331113333333333333333344444444444
X11111144444443333333333333111333111333111333333333333334444444444444
X1111144444444444333333333331113331113331113333333333334444444444444
X111114444444444443333333333311133311133311133333333334444444444444
X1111114444444444443333333333311133311133311135555555555555555555555
X1111111555555555555555555555555555555555555555555555555555555555555
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
!EOR!
echo extracting - valentin.pic
sed 's/^X//' > valentin.pic << '!EOR!'
X
X
X
X
X
X
X
X11111111111111|
X11111111111111||
X1111111111--\1\||
X11111111111--\1\||
X111111111111--\1\||
X1111111111111--\1\|
X11111111111111--\1\
X11111111111111111\1\
X111111111111111111\1\
X1111111111111111111\1\
X1111111111111111115555555551111111111111111111111111555555555
X11111111111111555555555555555555111111111111111555555555555555555
X11111111111555555544444444445555555111111111555555544444444445555555
X11111111555555444444444444444445555551111155555544444433333444444555555
X111111155555444444443333333344444455551115555444444333333333334444455555
X1111115555444444433333333333333344445551555444433333333333333333344445555
X11111555544444433333333333333333333444555444333333333332222233333334445555
X11111555444443333333333333333333333334444433333333322222222222333333444555
X111155544444333333333332222222333333333433333333222222111122222233334444555
X111155544443333333332222222222222233333333333222222211111111122223333444555
X111155544443333333322222222222222222233333222222211111111111112223333444555
X111155544443333333222222222222222222222322222222222211111111122223333444555
X111155544443333333222222222222222222222222222222222222111111122223333444555
X111155544443333333222222222222222222222222222222222222221111222223333444555
X111155544444333333222222222222222222222222222222222222222122222233334444555
X111155554444333333322222222222222222222222222222222222222222222233334445555
X11111555444433333333222222222222222222222222222222222222222222223333444555
X11111555544443333333322222222222222222222222222222222222222222233334445555
X1111115554444333333333322222222222222222222222222222222222222233333444555
X1111115555444433333333333222222222222222222222222222222222223333334445555
X111111155544444333333333333222222222222222222222222222222333333334444555
X111111155554444433333333333332222222222222222222222222333333333344445555
X11111111555544444333333333333333222222222222222222233333333333344445555
X1111111115555444443333333333333333322222222222223333333333333344445555
X111111111155554444443333333333333333332222222333333333333334444445555
X11111111111555544444444333333333333333322233333333333333444444445555
X111111111111155554444444443333333333333333333333\33334444444445555
X11111111111111155555444444444433333333333333333\1\44444444455555
X111111111111111111555555444444444443333333334444\1\4444555555
X1111111111111111111111555555444444444443444444444\1\55555
X11111111111111111111111111555555444444444444444555\1\
X111111111111111111111111111111555555444444455555511\1\
X1111111111111111111111111111111111555554555551111111\1\
X11111111111111111111111111111111111115555511111111111\1\111\
X111111111111111111111111111111111111115551111111111111\1\1\\
X11111111111111111111111111111111111111151111111111111\\\\\\\
X1111111111111111111111111111111111111111111111111111111\\\\\
X111111111111111111111111111111111111111111111111111111111\\\
X11111111111111111111111111111111111111111111111111111111111\
X
X
X
X
X
X
X
X
X
X
!EOR!
echo extracting - afghan.lst
sed 's/^X//' > afghan.lst << '!EOR!'
X::XXXMMMMMXXX::::.... ....::::XXXMMMMMXXX::::.... ....::::XXXMMMMMXXX::
X:XXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX:
XXXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX
XXXMMM M MMMXXX::::.......::::XXXMMM M MMMXXX::::.......::::XXXMMM M MMMXX
XXMMM MMM MMMXXX::::.....::::XXXMMM MMM MMMXXX::::.....::::XXXMMM MMM MMMX
XMMM MMXMM MMMXXX::::...::::XXXMMM MMXMM MMMXXX::::...::::XXXMMM MMXMM MMM
XMM MMXXXMM MMMXXX::::.::::XXXMMM MMXXXMM MMMXXX::::.::::XXXMMM MMXXXMM MM
XM MMXX:XXMM MMMXXX:::::::XXXMMM MMXX:XXMM MMMXXX:::::::XXXMMM MMXX:XXMM M
X MMXX:::XXMM MMMXXX:::::XXXMMM MMXX:::XXMM MMMXXX:::::XXXMMM MMXX:::XXMM
X MMXX::.::XXMM MMMXXX:::XXXMMM MMXX::.::XXMM MMMXXX:::XXXMMM MMXX::.::XXMM
XMMXX::...::XXMM MMMXXX:XXXMMM MMXX::...::XXMM MMMXXX:XXXMMM MMXX::...::XXMM
XMXX::.. ..::XXMM MMMXXXXXMMM MMXX::.. ..::XXMM MMMXXXXXMMM MMXX::.. ..::XXM
XMMXX::...::XXMM MMMXXX:XXXMMM MMXX::...::XXMM MMMXXX:XXXMMM MMXX::...::XXMM
X MMXX::.::XXMM MMMXXX:::XXXMMM MMXX::.::XXMM MMMXXX:::XXXMMM MMXX::.::XXMM
X MMXX:::XXMM MMMXXX:::::XXXMMM MMXX:::XXMM MMMXXX:::::XXXMMM MMXX:::XXMM
XM MMXX:XXMM MMMXXX:::::::XXXMMM MMXX:XXMM MMMXXX:::::::XXXMMM MMXX:XXMM M
XMM MMXXXMM MMMXXX::::.::::XXXMMM MMXXXMM MMMXXX::::.::::XXXMMM MMXXXMM MM
XMMM MMXMM MMMXXX::::...::::XXXMMM MMXMM MMMXXX::::...::::XXXMMM MMXMM MMM
XXMMM MMM MMMXXX::::.....::::XXXMMM MMM MMMXXX::::.....::::XXXMMM MMM MMMX
XXXMMM M MMMXXX::::.......::::XXXMMM M MMMXXX::::.......::::XXXMMM M MMMXX
XXXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX
X:XXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX:
X::XXXMMMMMXXX::::.... ....::::XXXMMMMMXXX::::.... ....::::XXXMMMMMXXX::
X:XXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX:
XXXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX
XXXMMM M MMMXXX::::.......::::XXXMMM M MMMXXX::::.......::::XXXMMM M MMMXX
XXMMM MMM MMMXXX::::.....::::XXXMMM MMM MMMXXX::::.....::::XXXMMM MMM MMMX
XMMM MMXMM MMMXXX::::...::::XXXMMM MMXMM MMMXXX::::...::::XXXMMM MMXMM MMM
XMM MMXXXMM MMMXXX::::.::::XXXMMM MMXXXMM MMMXXX::::.::::XXXMMM MMXXXMM MM
XM MMXX:XXMM MMMXXX:::::::XXXMMM MMXX:XXMM MMMXXX:::::::XXXMMM MMXX:XXMM M
X MMXX:::XXMM MMMXXX:::::XXXMMM MMXX:::XXMM MMMXXX:::::XXXMMM MMXX:::XXMM
X MMXX::.::XXMM MMMXXX:::XXXMMM MMXX::.::XXMM MMMXXX:::XXXMMM MMXX::.::XXMM
XMMXX::...::XXMM MMMXXX:XXXMMM MMXX::...::XXMM MMMXXX:XXXMMM MMXX::...::XXMM
XMXX::.. ..::XXMM MMMXXXXXMMM MMXX::.. ..::XXMM MMMXXXXXMMM MMXX::.. ..::XXM
XMMXX::...::XXMM MMMXXX:XXXMMM MMXX::...::XXMM MMMXXX:XXXMMM MMXX::...::XXMM
X MMXX::.::XXMM MMMXXX:::XXXMMM MMXX::.::XXMM MMMXXX:::XXXMMM MMXX::.::XXMM
X MMXX:::XXMM MMMXXX:::::XXXMMM MMXX:::XXMM MMMXXX:::::XXXMMM MMXX:::XXMM
XM MMXX:XXMM MMMXXX:::::::XXXMMM MMXX:XXMM MMMXXX:::::::XXXMMM MMXX:XXMM M
XMM MMXXXMM MMMXXX::::.::::XXXMMM MMXXXMM MMMXXX::::.::::XXXMMM MMXXXMM MM
XMMM MMXMM MMMXXX::::...::::XXXMMM MMXMM MMMXXX::::...::::XXXMMM MMXMM MMM
XXMMM MMM MMMXXX::::.....::::XXXMMM MMM MMMXXX::::.....::::XXXMMM MMM MMMX
XXXMMM M MMMXXX::::.......::::XXXMMM M MMMXXX::::.......::::XXXMMM M MMMXX
XXXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX
X:XXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX:
X::XXXMMMMMXXX::::.... ....::::XXXMMMMMXXX::::.... ....::::XXXMMMMMXXX::
X:XXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX:
XXXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX
XXXMMM M MMMXXX::::.......::::XXXMMM M MMMXXX::::.......::::XXXMMM M MMMXX
XXMMM MMM MMMXXX::::.....::::XXXMMM MMM MMMXXX::::.....::::XXXMMM MMM MMMX
XMMM MMXMM MMMXXX::::...::::XXXMMM MMXMM MMMXXX::::...::::XXXMMM MMXMM MMM
XMM MMXXXMM MMMXXX::::.::::XXXMMM MMXXXMM MMMXXX::::.::::XXXMMM MMXXXMM MM
XM MMXX:XXMM MMMXXX:::::::XXXMMM MMXX:XXMM MMMXXX:::::::XXXMMM MMXX:XXMM M
X MMXX:::XXMM MMMXXX:::::XXXMMM MMXX:::XXMM MMMXXX:::::XXXMMM MMXX:::XXMM
X MMXX::.::XXMM MMMXXX:::XXXMMM MMXX::.::XXMM MMMXXX:::XXXMMM MMXX::.::XXMM
XMMXX::...::XXMM MMMXXX:XXXMMM MMXX::...::XXMM MMMXXX:XXXMMM MMXX::...::XXMM
XMXX::.. ..::XXMM MMMXXXXXMMM MMXX::.. ..::XXMM MMMXXXXXMMM MMXX::.. ..::XXM
XMMXX::...::XXMM MMMXXX:XXXMMM MMXX::...::XXMM MMMXXX:XXXMMM MMXX::...::XXMM
X MMXX::.::XXMM MMMXXX:::XXXMMM MMXX::.::XXMM MMMXXX:::XXXMMM MMXX::.::XXMM
X MMXX:::XXMM MMMXXX:::::XXXMMM MMXX:::XXMM MMMXXX:::::XXXMMM MMXX:::XXMM
XM MMXX:XXMM MMMXXX:::::::XXXMMM MMXX:XXMM MMMXXX:::::::XXXMMM MMXX:XXMM M
XMM MMXXXMM MMMXXX::::.::::XXXMMM MMXXXMM MMMXXX::::.::::XXXMMM MMXXXMM MM
XMMM MMXMM MMMXXX::::...::::XXXMMM MMXMM MMMXXX::::...::::XXXMMM MMXMM MMM
XXMMM MMM MMMXXX::::.....::::XXXMMM MMM MMMXXX::::.....::::XXXMMM MMM MMMX
XXXMMM M MMMXXX::::.......::::XXXMMM M MMMXXX::::.......::::XXXMMM M MMMXX
XXXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX
X:XXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX::::.... ....::::XXXMMM MMMXXX:
!EOR!
echo extracting - apple.lst
sed 's/^X//' > apple.lst << '!EOR!'
X
X
X
X
X
X
X
X
X
X
X
X
X MM
X MM
X MM
X MM
X MM
X MM
X MMMMMMMMMM MM MMMMMMMMMM
X MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
X MMMMMMMMMMXXXXXXMMMMMMMXXXXXXMMMMMMMMMM
X MMMMMMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXMMMMMM
X MMMMMXXXXX:::::::XXXXXXXXXXX:::::::XXXXXMMMMM
X MMMMMXXXX:::::::::::::::::::::::::::::XXXXMMMMM
X MMMMMXXXX::::::: :::::::::::::::::::::XXXXMMMMM
X MMMMMXXX:::::: :::::::::::::::::::XXXMMMMM
X MMMMMXXXX:::: ::::::::::::::::::::XXXXMMMMM
X MMMMXXXX:::::: ::::::::::::::::::::::XXXXMMMM
X MMMMXXXX::::::::: :::::::::::::::::::::::::XXXXMMMM
X MMMMXXXX:::::::::::::::::::::::::::::::::::XXXXMMMM
X MMMMMXXXX:::::::::::::::::::::::::::::::::XXXXMMMMM
X MMMMMXXXX:::::::::::::::::::::::::::::::XXXXMMMMM
X MMMMMMXXXXX:::::::::::::::::::::::::::XXXXXMMMMMM
X MMMMMMXXXXXXX:::::::::::::::::::::::XXXXXXXMMMMMM
X MMMMMMXXXXXXXXXXX:::::::::::::XXXXXXXXXXXMMMMMM
X MMMMMMMXXXXXXXXXXXXXX:::::XXXXXXXXXXXXXXMMMMMMM
X MMMMMMMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXMMMMMMM
X MMMMMMMMMMMMXXXXXXXXXXXXXXXXXXXMMMMMMMMMMMM
X MMMMMMMMMMMMMMMMXXXXXXXXXMMMMMMMMMMMMMMMM
X MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
X MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
X MMMMM MMMMMMMMM MMMMM
X
X
X
X X X
X X X
X :: X
X ::XXX
X ::XX
X :XX
X :X
X :X
X ::
X ::
X ::
X ::
X X: ::::
X X: :::M M::::
X X::: :::M M:::
X XXX::::M M:
X M:
X :M
X :::M
X
X
!EOR!
echo extracting - logo.lst
sed 's/^X//' > logo.lst << '!EOR!'
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X MMMMMMMMMMM
X
X MMMM MMMMMMMMMMMMMMMMMM
X MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
X
X MMM MMMMMMMMMMMMMMMMMMMMM
X MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
X
X MM MMMMMMMMMMMMMMMMMMM
X MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
X
X MM MMMMMMMMMMMMMMMMMMMM
X MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
X
X MMM MMMMMMMMMMMMMMMMMMMMM
X MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
X
X MMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMM
X MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
X
X MMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
X MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
X
X MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
X MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
X
X MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
X MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
X
X MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
X MMMMMMMMMMMMMMMMMMMMMMMMMMMMM
X
X MMMMMMMMMMM
X
X
X
X...............MMMMM......MMMMMMMMMMMMMM..............MMMMMMMMMMMMMMM..........
X...............MMMMM............MM..........................MM.................
X..............MMM MMM...........MM........MMMMMM............MM.................
X..............MM ..MM...........MM......MMMM..MMMM..........MM.................
X.............MMM...MMM..........MM.....MMMM.................MM.................
X.............MM.....MM..........MM.......MMMM...............MM.................
X............MMMMMMMMMMM.........MM.....MMMMMMMM.MMMM........MM.................
X............MM.......MM.........MM....MMM....MMMM...........MM.................
X...........MMM.......MMM........MM....MM....MM.MMMM.........MM.................
X...........MM.........MM........MM.....MMMMMM....MMMM.......MM.................
X
X
X
X
X
!EOR!
echo extracting - shoe.lst
sed 's/^X//' > shoe.lst << '!EOR!'
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X XX XXX
X XXX::XXXXXX XXXXXXXXX
X XXXX :::::::::XXXXXXXXXXXXXXXX::::XX
X XXXX ::: ::::::::::::::::::::::::::::XX
X XXXXXX::: ::: ::::::::::::::::::::::::::XXXX
X XXXXXXX:::: ::: ::: ::::::::::::::::::::::XXXXXXX
X XXXXXX:::::::::::: ::: ::: :::::::::::::::::XXXXXXXXXXX
X XXXXXXX::::::::::::: ::: ::: ::::::::::::::XXXXXXXXXXXXX
X XXXXXXXXXXX::::::::::: ::: ::: ::::::::::::XXXXXXXXXXXXX
X XXXXXXXXXXXX::::::::::: ::: ::: ::::::::::XXXXXXXXXXXXX
X XXXXXXXXXXXX::::::::::: ::: ::: :MMMMMMMMMMMMMMMMMMMMMM
X MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
!EOR!
echo extracting - valentin.lst
sed 's/^X//' > valentin.lst << '!EOR!'
X
X
X
X
X
X
X
X |
X ||
X --\ \||
X --\ \||
X --\ \||
X --\ \|
X --\ \
X \ \
X \ \
X \ \
X MMMMMMMMM MMMMMMMMM
X MMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMM
X MMMMMMMXXXXXXXXXXMMMMMMM MMMMMMMXXXXXXXXXXMMMMMMM
X MMMMMMXXXXXXXXXXXXXXXXXMMMMMM MMMMMMXXXXXX:::::XXXXXXMMMMMM
X MMMMMXXXXXXXX::::::::XXXXXXMMMM MMMMXXXXXX:::::::::::XXXXXMMMMM
X MMMMXXXXXXX:::::::::::::::XXXXMMM MMMXXXX::::::::::::::::::XXXXMMMM
X MMMMXXXXXX::::::::::::::::::::XXXMMMXXX:::::::::::.....:::::::XXXMMMM
X MMMXXXXX::::::::::::::::::::::::XXXXX:::::::::...........::::::XXXMMM
X MMMXXXXX:::::::::::.......:::::::::X::::::::...... ......::::XXXXMMM
X MMMXXXX:::::::::..............:::::::::::....... ....::::XXXMMM
X MMMXXXX::::::::..................:::::....... ...::::XXXMMM
X MMMXXXX:::::::.....................:............ ....::::XXXMMM
X MMMXXXX:::::::.................................... ....::::XXXMMM
X MMMXXXX:::::::...................................... .....::::XXXMMM
X MMMXXXXX::::::....................................... ......::::XXXXMMM
X MMMMXXXX:::::::.............................................::::XXXMMMM
X MMMXXXX::::::::............................................::::XXXMMM
X MMMMXXXX::::::::..........................................::::XXXMMMM
X MMMXXXX::::::::::.......................................:::::XXXMMM
X MMMMXXXX:::::::::::...................................::::::XXXMMMM
X MMMXXXXX::::::::::::..............................::::::::XXXXMMM
X MMMMXXXXX:::::::::::::.........................::::::::::XXXXMMMM
X MMMMXXXXX:::::::::::::::...................::::::::::::XXXXMMMM
X MMMMXXXXX:::::::::::::::::.............::::::::::::::XXXXMMMM
X MMMMXXXXXX::::::::::::::::::.......::::::::::::::XXXXXXMMMM
X MMMMXXXXXXXX::::::::::::::::...::::::::::::::XXXXXXXXMMMM
X MMMMXXXXXXXXX::::::::::::::::::::::\::::XXXXXXXXXMMMM
X MMMMMXXXXXXXXXX:::::::::::::::::\ \XXXXXXXXXMMMMM
X MMMMMMXXXXXXXXXXX:::::::::XXXX\ \XXXXMMMMMM
X MMMMMMXXXXXXXXXXX:XXXXXXXXX\ \MMMMM
X MMMMMMXXXXXXXXXXXXXXXMMM\ \
X MMMMMMXXXXXXXMMMMMM \ \
X MMMMMXMMMMM \ \
X MMMMM \ \ \
X MMM \ \ \\
X M \\\\\\\
X \\\\\
X \\\
X \
X
X
X
X
X
X
X
X
X
X
!EOR!