[alt.sources] showfc11, a face file viewer for the PC, version 1.1

nelson@image.soe.clarkson.edu (Russ Nelson) (10/07/90)

Note that EGA or VGA is required.
Note that showface.com is uuencoded.

#!/bin/sh
# shar:	Shell Archiver  (v1.22)
#
#	Run the following text with /bin/sh to create:
#	  COPYING
#	  README
#	  chrout.asm
#	  decout.asm
#	  digout.asm
#	  getdig.asm
#	  getnum.asm
#	  pixel.asm
#	  showface.asm
#	  showface.com
#	  skipblk.asm
#
echo "x - extracting COPYING (Text)"
sed 's/^X//' << 'SHAR_EOF' > COPYING &&
XRussell Nelson, Clarkson University.
XCopyright, 1989, 1990, Russell Nelson
X
XThis program is free software; you can redistribute it and/or modify
Xit under the terms of the GNU General Public License as published by
Xthe Free Software Foundation, version 1.
X
XThis program is distributed in the hope that it will be useful,
Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
XGNU General Public License for more details.
X
XYou are assumed to be able to find a copy of the GNU General Public
XLicense; if not, write to the Free Software Foundation, Inc., 675
XMass Ave, Cambridge, MA 02139, USA.
X
SHAR_EOF
chmod 0644 COPYING || echo "restore of COPYING fails"
echo "x - extracting README (Text)"
sed 's/^X//' << 'SHAR_EOF' > README &&
XThis is the readme file for showface, a PC program for viewing
XFaceSaver(tm) format files as found on uunet.uu.net.  It requires
Xan EGA or VGA.
X
XThere is no documentation -- showface does what you expect.  If you try
Xsomething, and it doesn't work the way you would expect, send me mail
X<nelson@sun.soe.clarkson.edu>.
X
XVersion 1.0: initial release
X
XVersion 1.1: split out graphics code into pixel.asm, added code to deal
Xwith newline terminated files, added code to require presence of a
XPicData header line, fixed a bug that caused only the first file to be
Xdisplayed when using an EGA.
X
X
XFaceSaver is a trademark of Metron Computerware, Ltd.
SHAR_EOF
chmod 0644 README || echo "restore of README fails"
echo "x - extracting chrout.asm (Text)"
sed 's/^X//' << 'SHAR_EOF' > chrout.asm &&
X;put into the public domain by Russell Nelson, nelson@clutx.clarkson.edu
X
X	public	chrout
Xchrout:
X	push	ax			;print the char in al.
X	push	dx
X	mov	dl,al
X	mov	ah,2
X	int	21h
X	pop	dx
X	pop	ax
X	ret
SHAR_EOF
chmod 0644 chrout.asm || echo "restore of chrout.asm fails"
echo "x - extracting decout.asm (Text)"
sed 's/^X//' << 'SHAR_EOF' > decout.asm &&
X;put into the public domain by Russell Nelson, nelson@clutx.clarkson.edu
X
X	public	decout
Xdecout:
X	mov	si,ax			;get the number where we want it.
X	mov	di,dx
X	or	ax,dx			;is the number zero?
X	jne	decout_nonzero
X	mov	al,'0'			;yes - easier to just print it, than
X	jmp	chrout			;  to eliminate all but the last zero.
Xdecout_nonzero:
X
X	xor	ax,ax			;start with all zeroes in al,bx,bp
X	mov	bx,ax
X	mov	bp,ax
X
X	mov	cx,32			;32 bits in two 16 bit registers.
Xdecout_1:
X	shl	si,1
X	rcl	di,1
X	xchg	bp,ax
X	call	addbit
X	xchg	bp,ax
X	xchg	bx,ax
X	call	addbit
X	xchg	bx,ax
X	adc	al,al
X	daa
X	loop	decout_1
X
X	mov	cl,'0'			;prepare to eliminate leading zeroes.
X	call	byteout			;output the first two.
X	mov	ax,bx			;output the next four
X	call	wordout			;output the next four
X	mov	ax,bp
X	jmp	wordout
X
Xaddbit:	adc	al,al
X	daa
X	xchg	al,ah
X	adc	al,al
X	daa
X	xchg	al,ah
X	ret
X
SHAR_EOF
chmod 0644 decout.asm || echo "restore of decout.asm fails"
echo "x - extracting digout.asm (Text)"
sed 's/^X//' << 'SHAR_EOF' > digout.asm &&
X;put into the public domain by Russell Nelson, nelson@clutx.clarkson.edu
X
X	public	dwordout, wordout, byteout, digout
Xdwordout:
X	mov	cl,'0'			;prepare to eliminate leading zeroes.
X	xchg	ax,dx			;just output 32 bits in hex.
X	call	wordout			;output dx.
X	xchg	ax,dx
Xwordout:
X	push	ax
X	mov	al,ah
X	call	byteout
X	pop	ax
Xbyteout:
X	mov	ah,al
X	shr	al,1
X	shr	al,1
X	shr	al,1
X	shr	al,1
X	call	digout
X	mov	al,ah
Xdigout:
X	and	al,0fh
X	add	al,90h	;binary digit to ascii hex digit.
X	daa
X	adc	al,40h
X	daa
X	cmp	al,cl			;leading zero?
X	je	digout_1
X	mov	cl,-1			;no more leading zeros.
X	jmp	chrout
Xdigout_1:
X	ret
SHAR_EOF
chmod 0644 digout.asm || echo "restore of digout.asm fails"
echo "x - extracting getdig.asm (Text)"
sed 's/^X//' << 'SHAR_EOF' > getdig.asm &&
X;put into the public domain by Russell Nelson, nelson@clutx.clarkson.edu
X
X	public	get_digit
Xget_digit:
X;enter with al = character
X;return nc, al=digit, or cy if not a digit.
X	cmp	al,'0'			;decimal digit?
X	jb	get_digit_1		;no.
X	cmp	al,'9'			;. .?
X	ja	get_digit_2		;no.
X	sub	al,'0'
X	clc
X	ret
Xget_digit_2:
X	cmp	al,'a'			;hex digit?
X	jb	get_digit_3
X	cmp	al,'f'			;hex digit?
X	ja	get_digit_3
X	sub	al,'a'-10
X	clc
X	ret
Xget_digit_3:
X	cmp	al,'A'			;hex digit?
X	jb	get_digit_1
X	cmp	al,'F'			;hex digit?
X	ja	get_digit_1
X	sub	al,'A'-10
X	clc
X	ret
Xget_digit_1:
X	stc
X	ret
X
X
SHAR_EOF
chmod 0644 getdig.asm || echo "restore of getdig.asm fails"
echo "x - extracting getnum.asm (Text)"
sed 's/^X//' << 'SHAR_EOF' > getnum.asm &&
X;put into the public domain by Russell Nelson, nelson@clutx.clarkson.edu
X
X	public	get_number
Xget_number:
X	mov	bp,10			;we default to 10.
X	jmp	short get_number_0
X
X	public	get_hex
Xget_hex:
X	mov	bp,16
X;get a hex number, skipping leading blanks.
X;enter with si->string of digits,
X;	di -> dword to store the number in.  [di] is not modified if no
X;		digits are given, so it acts as the default.
X;return cy if there are no digits at all.
X;return nc, bx:cx = number, and store bx:cx at [di].
Xget_number_0:
X	call	skip_blanks
X	call	get_digit		;is there really a number here?
X	jc	get_number_3
X	or	al,al			;Does the number begin with zero?
X	jne	get_number_4		;no.
X	mov	bp,8			;yes - they want octal.
Xget_number_4:
X
X	xor	cx,cx			;get a hex number.
X	xor	bx,bx
Xget_number_1:
X	lodsb
X	cmp	al,'x'			;did they really want hex?
X	je	get_number_5		;yes.
X	cmp	al,'X'			;did they really want hex?
X	je	get_number_5		;yes.
X	call	get_digit		;convert a character into an int.
X	jc	get_number_2		;not a digit (neither hex nor dec).
X	xor	ah,ah
X	cmp	ax,bp			;larger than our base?
X	jae	get_number_2		;yes.
X
X	push	ax			;save the new digit.
X
X	mov	ax,bp			;multiply the low word by ten.
X	mul	cx
X	mov	cx,ax			;keep the low word.
X	push	dx			;save the high word for later.
X	mov	ax,bp
X	mul	bx
X	mov	bx,ax			;we keep only the low word (which is our high word)
X	pop	dx
X	add	bx,dx			;add the high result from earlier.
X
X	pop	ax			;get the new digit back.
X	add	cx,ax			;add the new digit in.
X	adc	bx,0
X	jmp	get_number_1
Xget_number_5:
X	mov	bp,16			;change the base to hex.
X	jmp	get_number_1
Xget_number_2:
X	dec	si
X	mov	[di],cx			;store the parsed number.
X	mov	[di+2],bx
X	clc
X	jmp	short get_number_6
Xget_number_3:
X	cmp	al,'?'			;did they ask for the default?
X	stc
X	jne	get_number_6		;no, return cy.
X	add	si,2			;skip past the question mark.
X	mov	cx,-1
X	mov	bx,-1
X	jmp	get_number_2		;and return the -1.
Xget_number_6:
X	ret
SHAR_EOF
chmod 0644 getnum.asm || echo "restore of getnum.asm fails"
echo "x - extracting pixel.asm (Text)"
sed 's/^X//' << 'SHAR_EOF' > pixel.asm &&
X; code to do graphics at 320x200x256 on both EGAs and VGAs.
X
Xaddress_list	label	word
X;can't change es, di, dx, or ah.
X;al and bx will get trashed, but they need not be preserved.
Xopen_vid	dw	?
Xmove_right	dw	?
Xmove_up		dw	?
Xmove_down	dw	?
Xset_bit		dw	?
Xclose_vid	dw	?
Xuninit_vid	dw	?
Xaddress_end	label	word
X
Xega_adrs	dw	init_vid_ega, open_vid_ega, move_right_ega
X		dw	move_up_ega, move_down_ega, set_bit_ega, close_vid_ega
X		dw	uninit_vid_ega
X
Xvga_adrs	dw	init_vid_vga, open_vid_vga, move_right_vga
X		dw	move_up_vga, move_down_vga, set_bit_vga, close_vid_vga
X		dw	uninit_vid_vga
X
X
Xinit_vid:
X;test for VGA.
X	mov	ax,1a00h
X	int	10h
X	cmp	al,1ah
X	mov	si,offset vga_adrs
X  ifndef FORCE_EGA
X	je	have_vga
X  endif
X	mov	si,offset ega_adrs
Xhave_vga:
X	lodsw				;get the init_vid_* routine.
X	push	ds
X	pop	es
X	mov	di,offset address_list
X	mov	cx,(offset address_end - offset address_list) / 2
X	rep	movsw
X	jmp	ax			;jump to the proper init_vid routine.
X
X
Xinit_vid_vga:
X	mov	ax,13h			;put the screen into vga mode.
X	int	10h
X
X	call	pal_save		;save the palette
X	call	pal_setgrey		;set to a gray palette.
X
X	ret
X
Xuninit_vid_vga:
X	call	pal_restore
X
X	mov	ax,3h			;put the screen into text mode.
X	int	10h
X
X	ret
X
X
Xinit_vid_ega:
X	mov	ax,10h			;put the screen into ega mode.
X	int	10h
X
X	mov	ax,1000h		;change the palette entry for 7
X	mov	bx,77Q*256 + 7		;  to 77 octal.
X	int	10h
X
X	mov	ax,1000h
X	mov	bx,007Q*256 + 08h
X	int	10h
X
X	mov	ax,1000h
X	mov	bx,010Q*256 + 09h
X	int	10h
X
X	mov	ax,1000h
X	mov	bx,020Q*256 + 0ah
X	int	10h
X
X	mov	ax,1000h
X	mov	bx,030Q*256 + 0bh
X	int	10h
X
X	mov	ax,1000h
X	mov	bx,040Q*256 + 0ch
X	int	10h
X
X	mov	ax,1000h
X	mov	bx,050Q*256 + 0dh
X	int	10h
X
X	mov	ax,1000h
X	mov	bx,060Q*256 + 0eh
X	int	10h
X
X	mov	ax,1000h
X	mov	bx,070Q*256 + 0fh
X	int	10h
X
X	ret
X
X
Xuninit_vid_ega:
X	mov	ax,3h			;put the screen into text mode.
X	int	10h
X
X	ret
X
X
Xpal_save:
X;Save existing palette
X	mov	ax,1017h		;get all palette registers.
X	mov	bx,0			;first palette register.
X	mov	cx,256			;read all palette registers.
X	push	ds
X	pop	es
X	mov	dx,offset save_dacs
X	int	10h
X
X	ret
X
X
Xpal_setgrey:
X	mov	di,offset gray_dacs
X	mov	al,0
Xpal_setgrey_1:
X	mov	cx,3 * 256 / 64		;3 colors, 256 grays, 64 slots.
X	rep	stosb
X
X	inc	al
X	cmp	al,64
X	jb	pal_setgrey_1
X
X	mov	dx,offset gray_dacs
X	jmp	short pal_set
X
Xpal_restore:
X	mov	dx,offset save_dacs
Xpal_set:
X	mov	ax,1012h		;set all palette registers.
X	mov	bx,0			;first palette register.
X	mov	cx,256			;read all palette registers.
X	push	ds
X	pop	es
X	int	10h
X
X	ret
X
X
Xopen_vid_vga:
X;enter with cx,dx = point on screen.
X;exit with es:di,ah -> byte/bit on screen.
X	mov	ax,0a000h
X	mov	es,ax
X	mov	ax,320			;width of screen.
X	mul	dx
X	add	ax,cx			;add the offset in.
X	mov	di,ax			;remember our pointer.
X	ret
X
X
Xmove_right_vga:
X	inc	di
X	ret
X
Xmove_up_vga:
X	sub	di,320			;width of screen.
X	ret
X
Xmove_down_vga:
X	add	di,320			;width of screen.
X	ret
X
Xset_bit_vga:
X	mov	es:[di],al
X	ret
X
Xclose_vid_vga:
X	ret
X
X
Xopen_vid_ega:
X;enter with cx,dx = point on screen.
X;exit with es:di,ah -> byte/bit on screen.
X	mov	ax,0a000h
X	mov	es,ax
X	mov	ax,640/8*2		;bytes per scan line * scan lines per pixel
X	mul	dx
X	mov	di,ax
X	mov	ax,cx			;/8*2
X	shr	ax,1
X	shr	ax,1
X	add	di,ax
X
X	mov	dx,03ceh		;graphics controller
X	mov	ax,0205h		;write mode 2.
X	out	dx,al
X	inc	dx
X	mov	al,ah
X	out	dx,al
X	dec	dx
X	mov	al,08h			;select bitmap register.
X	out	dx,al
X	inc	dx
X
X	shl	cx,1			;compute the bit.
X	and	cl,7
X	mov	ah,80h
X	shr	ah,cl
X	ret
X
X
Xmove_right_ega:
X	shr	ah,1			;move right by a bit.
X	ror	ah,1			;move right by another bit,
X	adc	di,0			;  and handle byte increment.
X	ret
X
X
Xmove_up_ega:
X	sub	di,80*2			;width of screen.
X	ret
X
X
Xmove_down_ega:
X	add	di,80*2			;width of screen.
X	ret
X
X
Xset_bit_ega:
X	mov	bl,al
X	xor	bh,bh
X
X	mov	al,ah
X	out	dx,al
X	mov	al,ulpal[bx]
X	xchg	es:[di],al		;store the palette value.
X	mov	al,llpal[bx]
X	xchg	es:[di+80],al		;store the palette value.
X
X	shr	ah,1			;move right by a bit.
X
X	mov	al,ah
X	out	dx,al
X	mov	al,urpal[bx]
X	xchg	es:[di],al		;store the palette value.
X	mov	al,lrpal[bx]
X	xchg	es:[di+80],al		;store the palette value.
X
X	shl	ah,1			;restore the bit.
X
X	ret
X
X
Xclose_vid_ega:
X	mov	al,0ffh			;mask = all ones.
X	out	dx,al
X	dec	dx
X	mov	ax,0005h		;write mode 0
X	out	dx,al
X	inc	dx
X	mov	al,ah
X	out	dx,al
X
X	ret
X
Xulpal	db	20 dup(00h)
X	db	20 dup(09h)
X	db	20 dup(0bh)
X	db	20 dup(0fh)
X	db	20 dup(0fh)
X	db	20 dup(0fh)
X	db	20 dup(0fh)
X	db	20 dup(08h)
X	db	20 dup(08h)
X	db	20 dup(07h)
X	db	20 dup(07h)
X	db	20 dup(07h)
X	db	20 dup(07h)
Xurpal	db	20 dup(00h)
X	db	20 dup(00h)
X	db	20 dup(0ch)
X	db	20 dup(0eh)
X	db	20 dup(0fh)
X	db	20 dup(08h)
X	db	20 dup(08h)
X	db	20 dup(08h)
X	db	20 dup(08h)
X	db	20 dup(08h)
X	db	20 dup(08h)
X	db	20 dup(08h)
X	db	20 dup(07h)
Xllpal	db	20 dup(00h)
X	db	20 dup(0ch)
X	db	20 dup(0ch)
X	db	20 dup(0dh)
X	db	20 dup(0fh)
X	db	20 dup(0fh)
X	db	20 dup(08h)
X	db	20 dup(08h)
X	db	20 dup(08h)
X	db	20 dup(08h)
X	db	20 dup(08h)
X	db	20 dup(07h)
X	db	20 dup(07h)
Xlrpal	db	20 dup(00h)
X	db	20 dup(0ah)
X	db	20 dup(0bh)
X	db	20 dup(0bh)
X	db	20 dup(0fh)
X	db	20 dup(0fh)
X	db	20 dup(0fh)
X	db	20 dup(0fh)
X	db	20 dup(08h)
X	db	20 dup(08h)
X	db	20 dup(07h)
X	db	20 dup(07h)
X	db	20 dup(07h)
X
Xsave_dacs	db	256 * 3 dup(?)
Xgray_dacs	db	256 * 3 dup(?)
X
X
SHAR_EOF
chmod 0644 pixel.asm || echo "restore of pixel.asm fails"
echo "x - extracting showface.asm (Text)"
sed 's/^X//' << 'SHAR_EOF' > showface.asm &&
X;History:277,1
X
XMAJVER	EQU	1	;1.0
XVERSION	EQU	1
X
X;  Russell Nelson, Clarkson University.  December 24, 1989
X;  Copyright, 1989, Russell Nelson
X
X;   This program is free software; you can redistribute it and/or modify
X;   it under the terms of the GNU General Public License as published by
X;   the Free Software Foundation, version 1.
X;
X;   This program is distributed in the hope that it will be useful,
X;   but WITHOUT ANY WARRANTY; without even the implied warranty of
X;   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
X;   GNU General Public License for more details.
X;
X;   You should have received a copy of the GNU General Public License
X;   along with this program; if not, write to the Free Software
X;   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
X
Xcode	segment	byte public
X	assume	cs:code, ds:code
X
XHT	equ	09h
XCR	equ	0dh
XLF	equ	0ah
X
Xfont_struc	struc
Xascent	dw	?			;number of pixels above base line
Xdescent	dw	?			;number of pixels below base line
XwidMax	dw	?			;number of pixels wide
Xleading	dw	?			;number of pixels below descent and above ascent
Xfont_struc	ends
X
Xsegmoffs	struc			; defines offs as 0, segm as 2
Xoffs		dw	?
Xsegm		dw	?
Xsegmoffs	ends
X
X	org	80h
Xphd_dioa	label	byte
X
X	org	100h
Xstart:
X	jmp	start_1
X
Xno_ega_msg	db	"showface: You must have an EGA or VGA display.",CR,LF,'$'
Xcopyleft_msg	label	byte
X db "Face viewer version ",'0'+majver,".",'0'+version," Copyright 1990, Russell Nelson.",CR,LF
X db "This program is free software; see the file COPYING for details.",CR,LF
X db "NO WARRANTY; see the file COPYING for details.",CR,LF
Xcrlf_msg	db	CR,LF,'$'
X
Xprompt_msg	db	"Filename: ",'$'
X
Xfile_not_found	db	"File not found",'$'
Xread_trouble	db	"Trouble reading the file",'$'
Xread_too_much	db	"The file is too large",'$'
Xno_picdata	db	"This file doesn't have a PicData header, which means it probably isn't a face.",CR,LF,'$'
Xbad_picdata	db	"This file has a PicData with x = 0 or x >320, or y = 0 or y >200, or z != 8",CR,LF,'$'
X
Xfirstn	db	"FirstName",0
Xlastn	db	"LastName",0
Xpicdata	db	"PicData",0
Xfacedat	db	0
Xxsize	dw	?,?
Xysize	dw	?,?
Xdepth	dw	?,?
X
Xffblk	label	byte
Xff_reserved	db	21 dup(?)
Xff_attrib	db	?
Xff_ftime	dw	?
Xff_fdate	dw	?
Xff_fsize	dd	?
Xff_name		db	13 dup(?)
X
Xour_fn		db	64 dup(?)
X
X	include	pixel.asm
X
Xerror:
X	mov	ah,9
X	int	21h
X	mov	ax,4c0ah		; give errorlevel 10
X	int	21h
X
Xstart_1:
X	mov	dx,offset copyleft_msg
X	mov	ah,9
X	int	21h
X
X	mov	ax,1200h		;test for an EGA
X	mov	bx,10h
X	mov	cx,-1
X	int	10h
X	cmp	cx,-1
X	jne	start_4			;go if we've got an EGA (or VGA).
X	mov	dx,offset no_ega_msg
X	jmp	error
Xstart_4:
X
X	mov	dx,offset ffblk		;set up for wildcards.
X	mov	ah,1ah
X	int	21h
X
X	cld
X	mov	si,offset phd_dioa+1
X	call	skip_blanks		;end of line?
X	cmp	al,CR
X	je	start_2
X
X	call	find_files		;find all the files that match this spec.
X	jc	error
X
X	jmp	short start_3		;all done.
X
Xstart_2:
X	mov	phd_dioa[0],128		;get set for a line input dos call.
X	mov	phd_dioa[1],0
X	mov	phd_dioa[2],CR
X
X	mov	dx,offset prompt_msg	;prompt them for a filename.
X	mov	ah,9
X	int	21h
X
X	mov	dx,offset phd_dioa	;read the line.
X	mov	ah,0ah
X	int	21h
X
X	mov	al,LF			;obligingly line feed for them.
X	call	chrout
X
X	mov	si,offset phd_dioa+2
X	call	skip_blanks		;end of line?
X	cmp	al,CR			;if so, we're done.
X	je	start_3
X
X	call	find_files		;find all the files that match.
X	jnc	start_5
X	mov	ah,9			;print the error message.
X	int	21h
Xstart_5:
X	jmp	start_2
X
Xstart_3:
X	mov	ax,4c00h		;terminate.
X	int	21h
X
X
Xfind_files:
X;enter with si -> list of filenames (possibly w/ wildcards) to show.
X;exit with cy, dx -> error message if we couldn't find one of the files.
Xfind_name_end:
X	push	ds
X	pop	es
X	mov	di,offset our_fn
X	mov	dx,di
Xfind_name_end_1:
X	lodsb				;find the end of the filename.
X	stosb
X	cmp	al,'/'			;whenever we encounter a pathname char,
X	je	find_name_end_4		;  remember it.
X	cmp	al,'\'
X	jne	find_name_end_3
Xfind_name_end_4:
X	mov	dx,di			;found a path char, remember it.
Xfind_name_end_3:
X	cmp	al,' '
X	je	find_name_end_2
X	cmp	al,HT
X	je	find_name_end_2
X	cmp	al,CR
X	jne	find_name_end_1
Xfind_name_end_2:
X	dec	si			;point si to terminator.
X	push	si			;->end of filename in input.
X	mov	byte ptr [di-1],0	;terminate pathname in our_fn.
X	mov	di,dx			;->end of pathname in our_fn.
X	call	skip_blanks
X
X	mov	dx,offset our_fn
X	mov	ah,4eh			;find the first file.
X	mov	cx,0			;no special files
Xfind_one_file:
X	int	21h			;find a file.
X	jc	find_files_done
X
X	push	di
X	mov	si,offset ff_name	;append the found name to the pathname.
Xfind_one_file_1:
X	lodsb
X	stosb
X	or	al,al
X	jne	find_one_file_1
X
X	mov	dx,offset our_fn	;show a single file.
X	call	show_face
X
X	pop	di
X	jc	find_files_error
X
X	mov	ah,4fh			;find next file.
X	jmp	find_one_file
X
Xfind_files_done:
X	pop	si			;restore the terminator.
X	call	skip_blanks		;end of line?
X	cmp	al,CR
X	jne	find_name_end		;no, more files to do.
X
X	clc
X	ret
Xfind_files_error:
X	pop	si			;give up now if we can't find it.
X	ret
X
X
Xshow_face:
X;read the face info. from the file named in [dx].
X;return cy, dx -> error message if something went wrong.
X
X	call	read_file
X	jnc	show_face_1
X	ret
Xshow_face_3:
X	mov	dx,offset no_picdata
X	stc
X	ret
Xshow_face_2:
X	mov	dx,offset bad_picdata
X	stc
X	ret
Xshow_face_1:
X
X	mov	di,offset picdata	;get the size of the image.
X	call	find_header
X	jc	show_face_3
X
X	mov	di,offset xsize		;get their image size.
X	call	get_number
X
X	mov	di,offset ysize
X	call	get_number
X
X	mov	di,offset depth
X	call	get_number
X
X	cmp	xsize,0			;incredibly small?
X	je	show_face_2
X	cmp	xsize,320		;too wide?
X	ja	show_face_2
X
X	cmp	ysize,0			;incredibly small?
X	je	show_face_2
X	cmp	ysize,200		;too high?
X	ja	show_face_2
X
X	cmp	depth,8			;we can only handle 8 bits per pixel.
X	jne	show_face_2
X
X	call	init_vid
X
X	mov	di,offset firstn	;get their first name.
X	call	find_header
X	jc	show_face_4
X
X	mov	cx,xsize		;put it to the screen.
X	add	cx,30
X	mov	dx,10
X	call	show_line
X
Xshow_face_4:
X
X	mov	al,' '			;put a space between first and last names.
X	call	show_char
X
X	push	cx			;now find the last name (but remember
X	push	dx			;  the xy position this time.
X	mov	di,offset lastn
X	call	find_header
X	pop	dx
X	pop	cx
X	jc	show_face_5
X
X	call	show_line		;put the last name to the screen.
X
Xshow_face_5:
X
X	mov	di,offset facedat	;now put the face up.
X	call	find_header
X
X	mov	dx,ysize
X	mov	cx,0
X	call	open_vid
X
X	mov	cx,ysize
Xvga_line:
X	push	cx
X	push	ax
X	push	di
X	mov	cx,xsize
Xvga_pel:
X	mov	bh,ah			;preserve ah.
X	call	get_byte
X	mov	ah,bh
X	call	set_bit
X	call	move_right
X	loop	vga_pel
X	pop	di
X	pop	ax
X	call	move_up
X	pop	cx
X	loop	vga_line
X
X	mov	ah,7			;wait for a key.
X	int	21h
X
X	call	close_vid
X
X	call	uninit_vid
X
X	clc
X	ret
X
X
Xshow_line:
X;enter with si -> CR or LF terminated string to be printed, CX = x, DX = y.
Xshow_line_0:
X	lodsb
X	cmp	al,CR
X	je	show_line_1
X	cmp	al,LF
X	je	show_line_1
X	push	si
X	call	show_char
X	pop	si
X	jmp	show_line_0
Xshow_line_1:
X	ret
X
X
Xchar_number	db	?		;ASCII value of this character.
Xchar_height	dw	?		;height of this character
Xchar_width	db	?		;width of this character in pixels.
Xchar_color	db	0ffh		;color to paint this character.
X
Xshow_char:
X;enter with cx,dx=position, al = character.
X	push	cx
X	push	dx
X	push	es
X	mov	char_number,al
X
X	mov	ax,system_font.ascent	;compute height of character.
X	add	ax,system_font.descent
X	mov	char_height,ax		;save it.
X
X	mov	si,offset system_font + (size font_struc)
Xuse_font_1:
X	lodsw
X	xchg	ah,al			;get the number (AH) and width (AL).
X
X	or	al,al			;zero width?
X	je	use_font_3		;yes, end of the font.
X	cmp	ah,char_number		;is this the character?
X	je	use_font_2		;Yes, use it.
X	mov	ah,0
X	add	ax,7			;round up to next nearest byte.
X	shr	ax,1			;and convert pixels
X	shr	ax,1			; to
X	shr	ax,1			; bytes.
X	push	dx
X	mul	char_height		;find the size.
X	pop	dx
X	add	si,ax			;move ahead by this size.
X	jmp	use_font_1
Xuse_font_3:
X	pop	es
X	pop	dx
X	pop	cx
X	stc
X	ret
Xuse_font_2:
X	mov	char_width,al		;remember the width of the font.
X
X	call	open_vid
X
X	mov	cx,char_height
Xshow_char_4:
X	push	cx
X	push	ax
X	push	di
X	mov	cl,char_width
X	xor	ch,ch
X	mov	al,80h
X	jmp	short show_char_6
Xshow_char_5:
X	ror	al,1			;move right in the source.
X	adc	si,0
X	call	move_right		;move right in the destination.
Xshow_char_6:
X	test	[si],al			;is this bit set?
X	je	show_char_7
X	push	ax
X	mov	al,0ffh
X	call	set_bit			;yes, set it.
X	pop	ax
Xshow_char_7:
X	loop	show_char_5
X	inc	si			;flush the rest of the bits in source.
X	pop	di
X	pop	ax
X	call	move_down
X	pop	cx
X	loop	show_char_4		;go do another line.
X	pop	es
X	pop	dx
X	pop	cx
X	inc	char_width
X	add	cl,char_width		;move over.
X	adc	ch,0
X	clc
X	ret
X
X
Xhandle	dw	?
X
Xread_file:
X;enter with dx -> filename.
X;return nc if all okay, or cy, dx -> error if any problems.
X	mov	ax,3d00h		;open for reading.
X	int	21h
X	jnc	read_file_found
X	mov	dx,offset file_not_found
X	stc
X	ret
X
Xread_file_found:
X	mov	handle,ax
X
X	mov	ah,3fh			;read the whole thing in.
X	mov	bx,handle
X	mov	cx,65535 - 200
X	sub	cx,offset face_buffer
X	mov	dx,offset face_buffer
X	int	21h
X	jnc	read_okay
X	mov	dx,offset read_trouble
X	stc
X	ret
Xread_okay:
X	cmp	ax,cx			;did we read all we asked for?
X	jne	read_enough
X	mov	dx,offset read_too_much
X	stc
X	ret
Xread_enough:
X	mov	ah,3eh			;close the file.
X	mov	bx,handle
X	int	21h
X
X	clc
X	ret
X
X
Xget_byte:
X;enter with si -> two hex digits (maybe some CR/LFs first...)
X;exit with al = the byte.
X	lodsb				;get a character.
X	cmp	al,CR			;ignore CR and LF.
X	je	get_byte
X	cmp	al,LF
X	je	get_byte
X	call	get_digit		;hex digits come in pairs.
X	shl	al,1
X	shl	al,1
X	shl	al,1
X	shl	al,1
X	mov	ah,al			;shift the first nibble over.
X	lodsb				;get the second nibble
X	call	get_digit
X	or	al,ah			;combine and store.
X	ret
X
Xfind_header_ptr	dw	?
X
Xfind_header:
X;enter with di -> header name
X;exit with nc,si -> header contents, or cy if not found.
X	mov	find_header_ptr,di	;remember the pointer to their header.
X	push	ds
X	pop	es
X	mov	si,offset face_buffer
Xfind_header_0:
X	mov	di,find_header_ptr
X	mov	cx,30			;no header name is >30 chars.
X	repe	cmpsb			;compare the header chars.
X	cmp	[si-1],byte ptr ':'	;if we didn't get as far as the colon,
X	jne	find_header_1		;  they didn't match.
X	cmp	[di-1],byte ptr 0	;if we didn't get as far as the null,
X	jne	find_header_1		;  they didn't match.
X	call	skip_blanks
X	ret
Xfind_header_1:
X;scan to the next LF.
X	lodsb
X	cmp	al,LF
X	jne	find_header_1
X	cmp	byte ptr [si],CR	;two crlf's in a row?
X	je	find_header_2		;yes, no more headers.
X	cmp	byte ptr [si],LF	;two lf's in a row?
X	jne	find_header_0		;yes, no more headers.
Xfind_header_2:
X	stc
X	ret
X
X	include	skipblk.asm
X	include	getdig.asm
X	include	getnum.asm
X	include	chrout.asm
X	include	decout.asm
X	include	digout.asm
X
Xsystem_font	label	byte
X	font_struc	<9, 3, 10, 1>
X
X	db	20h,6
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	21h,4
X	db	01100000b
X	db	11110000b
X	db	11110000b
X	db	11110000b
X	db	11110000b
X	db	11110000b
X	db	01100000b
X	db	00000000b
X	db	01100000b
X	db	01100000b
X	db	00000000b
X	db	00000000b
X
X	db	22h,7
X	db	00000000b
X	db	00000000b
X	db	11101110b
X	db	01100110b
X	db	11001100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	23h,6
X	db	00000000b
X	db	00000000b
X	db	01001000b
X	db	01001000b
X	db	11111100b
X	db	01001000b
X	db	11111100b
X	db	01001000b
X	db	01001000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	24h,6
X	db	00000000b
X	db	00000000b
X	db	00010000b
X	db	01111100b
X	db	11010000b
X	db	01111100b
X	db	00010110b
X	db	01111100b
X	db	00010000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	25h,6
X	db	00000000b
X	db	00000000b
X	db	11000000b
X	db	11001100b
X	db	00011000b
X	db	00110000b
X	db	01100000b
X	db	11001100b
X	db	00001100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	26h,6
X	db	00000000b
X	db	00000000b
X	db	01110000b
X	db	11011000b
X	db	11011000b
X	db	01110000b
X	db	11011100b
X	db	11011000b
X	db	01101100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	27h,4
X	db	00000000b
X	db	00000000b
X	db	00110000b
X	db	01100000b
X	db	11000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	28h,4
X	db	00000000b
X	db	00000000b
X	db	00110000b
X	db	01100000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	01100000b
X	db	00110000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	29h,4
X	db	00000000b
X	db	00000000b
X	db	11000000b
X	db	01100000b
X	db	00110000b
X	db	00110000b
X	db	00110000b
X	db	01100000b
X	db	11000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	2Ah,6
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00110000b
X	db	10110100b
X	db	01111000b
X	db	10110100b
X	db	00110000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	2Bh,6
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00110000b
X	db	00110000b
X	db	11111100b
X	db	00110000b
X	db	00110000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	2Ch,3
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	11100000b
X	db	11100000b
X	db	01100000b
X	db	11000000b
X	db	00000000b
X	db	00000000b
X
X	db	2Dh,6
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	11111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	2Eh,3
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	11100000b
X	db	11100000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	2Fh,7
X	db	00000000b
X	db	00000000b
X	db	00000110b
X	db	00001100b
X	db	00011000b
X	db	00110000b
X	db	01100000b
X	db	11000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	30h,7
X	db	01111100b
X	db	11001110b
X	db	11001110b
X	db	11010110b
X	db	11010110b
X	db	11010110b
X	db	11100110b
X	db	11100110b
X	db	01111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	31h,7
X	db	01100000b
X	db	11100000b
X	db	01100000b
X	db	01100000b
X	db	01100000b
X	db	01100000b
X	db	01100000b
X	db	01100000b
X	db	11110000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	32h,7
X	db	01111100b
X	db	10000110b
X	db	00000110b
X	db	00000110b
X	db	00001100b
X	db	00011000b
X	db	00110000b
X	db	01100000b
X	db	11111110b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	33h,7
X	db	11111100b
X	db	00001100b
X	db	00011000b
X	db	00110000b
X	db	00001100b
X	db	00000110b
X	db	00000110b
X	db	11000110b
X	db	01111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	34h,7
X	db	00011100b
X	db	00111100b
X	db	01101100b
X	db	11001100b
X	db	11001100b
X	db	11001100b
X	db	11111110b
X	db	00001100b
X	db	00001100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	35h,7
X	db	11111110b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11111100b
X	db	00000110b
X	db	00000110b
X	db	11000110b
X	db	01111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	36h,7
X	db	01111100b
X	db	11000110b
X	db	11000000b
X	db	11000000b
X	db	11111100b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	01111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	37h,7
X	db	11111110b
X	db	00000110b
X	db	00000110b
X	db	00001100b
X	db	00011000b
X	db	00110000b
X	db	00110000b
X	db	00110000b
X	db	00110000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	38h,7
X	db	01111100b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	01111100b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	01111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	39h,7
X	db	01111100b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	01111110b
X	db	00000110b
X	db	00000110b
X	db	11000110b
X	db	01111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	3Ah,3
X	db	00000000b
X	db	00000000b
X	db	11100000b
X	db	11100000b
X	db	00000000b
X	db	00000000b
X	db	11100000b
X	db	11100000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	3Bh,3
X	db	00000000b
X	db	00000000b
X	db	11100000b
X	db	11100000b
X	db	00000000b
X	db	00000000b
X	db	11100000b
X	db	11100000b
X	db	01100000b
X	db	11000000b
X	db	00000000b
X	db	00000000b
X
X	db	3Ch,7
X	db	00000000b
X	db	00000000b
X	db	00000110b
X	db	00011100b
X	db	01110000b
X	db	11000000b
X	db	01110000b
X	db	00011100b
X	db	00000110b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	3Dh,6
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	11111110b
X	db	00000000b
X	db	00000000b
X	db	11111110b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	3Eh,7
X	db	00000000b
X	db	00000000b
X	db	11000000b
X	db	01110000b
X	db	00011100b
X	db	00000110b
X	db	00011100b
X	db	01110000b
X	db	11000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	3Fh,6
X	db	01111100b
X	db	11000110b
X	db	00000110b
X	db	00001100b
X	db	00011000b
X	db	00110000b
X	db	00110000b
X	db	00000000b
X	db	00110000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	40h,6
X	db	00000000b
X	db	00000000b
X	db	00111000b
X	db	01101100b
X	db	11011100b
X	db	11010100b
X	db	11011100b
X	db	11000000b
X	db	01111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	41h,7
X	db	01111100b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11111110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	42h,7
X	db	11111100b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11111110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	43h,7
X	db	01111100b
X	db	11000010b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000010b
X	db	01111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	44h,7
X	db	11111100b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	45h,6
X	db	11111100b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11111000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	46h,6
X	db	11111100b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11111000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	47h,7
X	db	01111100b
X	db	11000100b
X	db	11000000b
X	db	11000000b
X	db	11001110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	01111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	48h,7
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11111110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	49h,2
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	4Ah,6
X	db	00001100b
X	db	00001100b
X	db	00001100b
X	db	00001100b
X	db	00001100b
X	db	00001100b
X	db	11001100b
X	db	11001100b
X	db	01111000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	4Bh,8
X	db	11000011b
X	db	11000110b
X	db	11001100b
X	db	11011000b
X	db	11110000b
X	db	11110000b
X	db	11011000b
X	db	11001100b
X	db	11000110b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	4Ch,6
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	4Dh,9
X	db	11000000b,10000000b
X	db	11100001b,10000000b
X	db	11110011b,10000000b
X	db	11011101b,10000000b
X	db	11001001b,10000000b
X	db	11000001b,10000000b
X	db	11000001b,10000000b
X	db	11000001b,10000000b
X	db	11000001b,10000000b
X	db	00000000b,00000000b
X	db	00000000b,00000000b
X	db	00000000b,00000000b
X
X	db	4Eh,8
X	db	10000001b
X	db	11000001b
X	db	11100001b
X	db	10110001b
X	db	10011001b
X	db	10001101b
X	db	10000111b
X	db	10000011b
X	db	10000001b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	4Fh,7
X	db	01111100b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	01111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	50h,7
X	db	11111100b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11111100b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	51h,7
X	db	01111100b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	01111100b
X	db	00000110b
X	db	00000000b
X	db	00000000b
X
X	db	52h,7
X	db	11111100b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11111100b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	53h,7
X	db	01111100b
X	db	11000010b
X	db	11100000b
X	db	01110000b
X	db	00111000b
X	db	00011100b
X	db	00001110b
X	db	10000110b
X	db	01111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	54h,6
X	db	11111100b
X	db	00110000b
X	db	00110000b
X	db	00110000b
X	db	00110000b
X	db	00110000b
X	db	00110000b
X	db	00110000b
X	db	00110000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	55h,7
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	01111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	56h,7
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000100b
X	db	11111000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	57h,10
X	db	11001100b,11000000b
X	db	11001100b,11000000b
X	db	11001100b,11000000b
X	db	11001100b,11000000b
X	db	11001100b,11000000b
X	db	11001100b,11000000b
X	db	11001100b,11000000b
X	db	11001100b,10000000b
X	db	11111111b,00000000b
X	db	00000000b,00000000b
X	db	00000000b,00000000b
X	db	00000000b,00000000b
X
X	db	58h,7
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	01111100b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	59h,6
X	db	11001100b
X	db	11001100b
X	db	11001100b
X	db	11001100b
X	db	01111000b
X	db	00110000b
X	db	00110000b
X	db	00110000b
X	db	00110000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	5Ah,8
X	db	11111111b
X	db	00000011b
X	db	00000110b
X	db	00001100b
X	db	00011000b
X	db	00110000b
X	db	01100000b
X	db	11000000b
X	db	11111111b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	5Bh,4
X	db	11110000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11110000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	5Ch,5
X	db	10000000b
X	db	10000000b
X	db	01000000b
X	db	01000000b
X	db	00100000b
X	db	00100000b
X	db	00010000b
X	db	00010000b
X	db	00001000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	5Dh,4
X	db	11110000b
X	db	00110000b
X	db	00110000b
X	db	00110000b
X	db	00110000b
X	db	00110000b
X	db	00110000b
X	db	00110000b
X	db	11110000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	5Eh,8
X	db	00000000b
X	db	00000000b
X	db	00010000b
X	db	00111000b
X	db	01101100b
X	db	11000110b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	5Fh,8
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	11111111b
X	db	00000000b
X	db	00000000b
X
X	db	60h,6
X	db	00000000b
X	db	00000000b
X	db	11000000b
X	db	01100000b
X	db	00110000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	61h,7
X	db	00000000b
X	db	00000000b
X	db	01111100b
X	db	10000110b
X	db	01111110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	01111110b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	62h,7
X	db	11000000b
X	db	11000000b
X	db	11111100b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	63h,6
X	db	00000000b
X	db	00000000b
X	db	01111000b
X	db	11000100b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000100b
X	db	01111000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	64h,7
X	db	00000110b
X	db	00000110b
X	db	01111110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	01111110b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	65h,7
X	db	00000000b
X	db	00000000b
X	db	01111100b
X	db	11000110b
X	db	11000110b
X	db	11111110b
X	db	11000000b
X	db	11000110b
X	db	01111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	66h,6
X	db	00111100b
X	db	01100000b
X	db	11110000b
X	db	01100000b
X	db	01100000b
X	db	01100000b
X	db	01100000b
X	db	01100000b
X	db	01100000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	67h,7
X	db	00000000b
X	db	00000000b
X	db	01111110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	01111110b
X	db	00000110b
X	db	10000110b
X	db	01111100b
X
X	db	68h,7
X	db	11000000b
X	db	11000000b
X	db	11111100b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	69h,2
X	db	11000000b
X	db	00000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	6Ah,5
X	db	00000000b
X	db	00000000b
X	db	00011000b
X	db	00000000b
X	db	00011000b
X	db	00011000b
X	db	00011000b
X	db	00011000b
X	db	00011000b
X	db	00011000b
X	db	10011000b
X	db	01110000b
X
X	db	6Bh,6
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11001100b
X	db	11011000b
X	db	11110000b
X	db	11110000b
X	db	11011000b
X	db	11001100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	6Ch,2
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	6Dh,10
X	db	00000000b,00000000b
X	db	00000000b,00000000b
X	db	11111111b,00000000b
X	db	11001100b,10000000b
X	db	11001100b,11000000b
X	db	11001100b,11000000b
X	db	11001100b,11000000b
X	db	11001100b,11000000b
X	db	11001100b,11000000b
X	db	00000000b,00000000b
X	db	00000000b,00000000b
X	db	00000000b,00000000b
X
X	db	6Eh,7
X	db	00000000b
X	db	00000000b
X	db	11111100b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	6Fh,7
X	db	00000000b
X	db	00000000b
X	db	01111100b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	01111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	70h,7
X	db	00000000b
X	db	00000000b
X	db	11111100b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11111100b
X	db	11000000b
X	db	11000000b
X	db	00000000b
X
X	db	71h,7
X	db	00000000b
X	db	00000000b
X	db	01111110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	01111110b
X	db	00000110b
X	db	00000110b
X	db	00000000b
X
X	db	72h,6
X	db	00000000b
X	db	00000000b
X	db	11011100b
X	db	11100000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	73h,6
X	db	00000000b
X	db	00000000b
X	db	01111000b
X	db	11000100b
X	db	11100000b
X	db	01111000b
X	db	00011100b
X	db	10001100b
X	db	01111000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	74h,4
X	db	01100000b
X	db	01100000b
X	db	11110000b
X	db	01100000b
X	db	01100000b
X	db	01100000b
X	db	01100000b
X	db	01100000b
X	db	00110000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	75h,7
X	db	00000000b
X	db	00000000b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	01111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	76h,7
X	db	00000000b
X	db	00000000b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000100b
X	db	11111000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	77h,10
X	db	00000000b,00000000b
X	db	00000000b,00000000b
X	db	11001100b,11000000b
X	db	11001100b,11000000b
X	db	11001100b,11000000b
X	db	11001100b,11000000b
X	db	11001100b,11000000b
X	db	11001100b,10000000b
X	db	11111111b,00000000b
X	db	00000000b,00000000b
X	db	00000000b,00000000b
X	db	00000000b,00000000b
X
X	db	78h,7
X	db	00000000b
X	db	00000000b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	01111100b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	79h,7
X	db	00000000b
X	db	00000000b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	11000110b
X	db	01111110b
X	db	00000110b
X	db	10000110b
X	db	01111100b
X
X	db	7Ah,6
X	db	00000000b
X	db	00000000b
X	db	11111100b
X	db	00001100b
X	db	00011000b
X	db	00110000b
X	db	01100000b
X	db	11000000b
X	db	11111100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	7Bh,8
X	db	00000000b
X	db	00000000b
X	db	00111000b
X	db	01100000b
X	db	01100000b
X	db	11000000b
X	db	01100000b
X	db	01100000b
X	db	00111000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	7Ch,2
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	11000000b
X	db	00000000b
X
X	db	7Dh,8
X	db	00000000b
X	db	00000000b
X	db	11100000b
X	db	00110000b
X	db	00110000b
X	db	00011000b
X	db	00110000b
X	db	00110000b
X	db	11100000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	7Eh,8
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	01100000b
X	db	10010010b
X	db	00001100b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X	db	00000000b
X
X	db	80h,0			;end of the font.
X
Xface_buffer	label	byte
X
Xcode	ends
X
X	end	start
SHAR_EOF
chmod 0644 showface.asm || echo "restore of showface.asm fails"
echo "x - extracting showface.com (Binary)"
sed 's/^X//' << 'SHAR_EOF' > s2_temp_.tmp &&
Xbegin 600 showface.com
XMZ?<-<VAO=V9A8V4Z(%EO=2!M=7-T(&AA=F4@86X@14=!(&]R(%9'02!D:7-P
XM;&%Y+@T*)$9A8V4@=FEE=V5R('9E<G-I;VX@,2XQ($-O<'ER:6=H="`Q.3DP
XM+"!2=7-S96QL($YE;'-O;BX-"E1H:7,@<')O9W)A;2!I<R!F<F5E('-O9G1W
XM87)E.R!S964@=&AE(&9I;&4@0T]064E.1R!F;W(@9&5T86EL<RX-"DY/(%=!
XM4E)!3E19.R!S964@=&AE(&9I;&4@0T]064E.1R!F;W(@9&5T86EL<RX-"@T*
XM)$9I;&5N86UE.B`D1FEL92!N;W0@9F]U;F0D5')O=6)L92!R96%D:6YG('1H
XM92!F:6QE)%1H92!F:6QE(&ES('1O;R!L87)G9214:&ES(&9I;&4@9&]E<VXG
XM="!H879E(&$@4&EC1&%T82!H96%D97(L('=H:6-H(&UE86YS(&ET('!R;V)A
XM8FQY(&ES;B=T(&$@9F%C92X-"B14:&ES(&9I;&4@:&%S(&$@4&EC1&%T82!W
XM:71H('@@/2`P(&]R('@@/C,R,"P@;W(@>2`](#`@;W(@>2`^,C`P+"!O<B!Z
XM("$](#@-"B1&:7)S=$YA;64`3&%S=$YA;64`4&EC1&%T80``````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````+P#9P25!)T$H@2G
XM!-0$"@2G`T<$5@18!%T$8@1F!+,#N``:S1`\&KY[`W0#OFL#K1X'OUT#N0<`
XM\Z7_X+@3`,T0Z&$`Z&\`P^B``+@#`,T0P[@0`,T0N``0NP<_S1"X`!"["`?-
XM$+@`$+L)",T0N``0NPH0S1"X`!"["QC-$+@`$+L,(,T0N``0NPTHS1"X`!"[
XM#C#-$+@`$+L/.,T0P[@#`,T0P[@7$+L``+D``1X'NO$(S1##O_$+L`"Y#`#S
XMJO[`/$!R];KQ"^L#NO$(N!(0NP``N0`!'@?-$,.X`*".P+A``??B`\&+^,-'
XMPX'O0`'#@<=``<,FB`7#P[@`H([`N*``]^*+^(O!T>C1Z`/XNLX#N`4"[D**
XMQ.Y*L`CN0M'A@.$'M(#2[,/0[-#,@]<`PX'OH`##@<>@`,.*V#+_BL3NBH?A
XM!":&!8J'Z08FAD50T.R*Q.Z*A^4%)H8%BH?M!R:&15#0Y,.P_^Y*N`4`[D**
XMQ.[#```````````````````````````)"0D)"0D)"0D)"0D)"0D)"0D)"0L+
XM"PL+"PL+"PL+"PL+"PL+"PL+#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/
XM#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/
XM#P\/#P\/#P\("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(
XM"`@(!P<'!P<'!P<'!P<'!P<'!P<'!P<'!P<'!P<'!P<'!P<'!P<'!P<'!P<'
XM!P<'!P<'!P<'!P<'!P<'!P<'!P<'!P<'!P<'!P<'!P<'!P<'!P<`````````
XM````````````````````````````````````````````#`P,#`P,#`P,#`P,
XM#`P,#`P,#`P.#@X.#@X.#@X.#@X.#@X.#@X.#@\/#P\/#P\/#P\/#P\/#P\/
XM#P\/"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(
XM"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(
XM"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(
XM"`@("`@("`@'!P<'!P<'!P<'!P<'!P<'!P<'!P``````````````````````
XM````#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`T-
XM#0T-#0T-#0T-#0T-#0T-#0T-#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/
XM#P\/#P\/#P\/#P\/#P@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(
XM"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(
XM"`@("`@("`@("`@("`@("`@("`@("`@'!P<'!P<'!P<'!P<'!P<'!P<'!P<'
XM!P<'!P<'!P<'!P<'!P<'!P<'```````````````````````````*"@H*"@H*
XM"@H*"@H*"@H*"@H*"@L+"PL+"PL+"PL+"PL+"PL+"PL+"PL+"PL+"PL+"PL+
XM"PL+"PL+"PL/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/
XM#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/#P@(
XM"`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@'!P<'!P<'
XM!P<'!P<'!P<'!P<'!P<'!P<'!P<'!P<'!P<'!P<'!P<'!P<'!P<'!P<'!P<'
XM!P<'!P<'!P<`````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM``````````````````"T"<TAN`I,S2&Z-`&T"<TAN``2NQ``N?__S1"#^?]U
XM!;H#`>O;NO("M!K-(?R^@0#HAP(\#70'Z$``<L3K-\8&@`"`Q@:!``#&!H(`
XM#;KB`;0)S2&Z@`"T"LTAL`KH\@*^@@#H5`(\#70+Z`T`<P2T"<TAZ\FX`$S-
XM(1X'OQT#B]>LJCPO=`0\7'4"B]<\('0(/`ET!#P-=>A.5L9%_P"+^N@6`KH=
XM`[1.N0``S2%R%U>^$`.LJ@K`=?JZ'0/H$P!?<@ZT3^OE7NCO`3P-=:OXPU[#
XMZ%<!<PO#NBL"^<.Z?`+YP[_=`NB>`7+NO^8"Z/H!O^H"Z/0!O^X"Z.X!@S[F
XM`@!TVH$^Y@)``7?2@S[J`@!TRX$^Z@+(`'?#@S[N`@AUO.AU\[_*`NA<`7(-
XMBP[F`H/!'KH*`.A8`+`@Z&D`45*_U`+H0`%:67(#Z$0`O^4"Z#,!BQ;J`KD`
XM`/\670.+#NH"45!7BP[F`HK\Z/D`BN?_%F4#_Q9?`^+O7UC_%F$#6>+?M`?-
XM(?\69P/_%FD#^,.L/`UT"SP*=`=6Z`D`7NOPPP````#_45(&HI00H;X2`P;`
XM$J.5$+[&$JV&X`K`=!LZ)I00=!JT``4'`-'HT>C1Z%+W)I406@/PZ]X'6EGY
XMPZ*7$/\670.+#I4045!7B@Z7$#+ML(#K"=#(@]8`_Q9?`X0$=`A0L/__%F4#
XM6.+I1E]8_Q9C`UGBT@=:6?X&EQ`"#I<0@-4`^,,``+@`/<TA<P6Z[0'YPZ,<
XM$;0_BQX<$;DW_X'I*ABZ*AC-(7,%NOP!^<,[P74%NA4"^<.T/HL>'!'-(?C#
XMK#P-=/L\"G3WZ%$`T.#0X-#@T."*X*SH0P`*Q,,``(D^=A$>![XJ&(L^=A&Y
XM'@#SIH!\_SIU"H!]_P!U!.@2`,.L/`IU^X`\#70%@#P*==CYPZP\('3[/`ET
XM]T[#/#!R(#PY=P0L,/C#/&%R"#QF=P0L5_C#/$%R"#Q&=P0L-_C#^<.]"@#K
XM`[T0`.C$_^C,_W)&"L!U`[T(`#/),]NL/'AT*#Q8="3HL_]R)#+D.\5S'E"+
XMQ??AB\A2B\7WXXO86@/:6`/(@],`Z].]$`#KSDZ)#8E=`OCK$#P_^74+@\8"
XMN?__N___Z^?#4%**T+0"S2%:6,.+\(OZ"\)U!+`PZ^DSP(O8B^BY(`#1YM'7
XME>@:`)63Z!4`DQ+`)^+ML3#H(P"+P^@7`(O%ZQ.0$L`GAL02P">&Q,.Q,)+H
XM`0"24(K$Z`$`6(K@T.C0Z-#HT.CH`@"*Q"0/!)`G%$`G.L%T!+'_ZX;#"0`#
XM``H``0`@!@```````````````"$$8/#P\/#P8`!@8```(@<``.YFS```````
XM```C!@``2$C\2/Q(2````"0&```0?-!\%GP0````)08``,#,&#!@S`P````F
XM!@``<-C8<-S8;````"<$```P8,``````````*`0``#!@P,#`8#`````I!```
XMP&`P,#!@P````"H&````,+1XM#``````*P8````P,/PP,``````L`P``````
XM`.#@8,```"T&``````#\````````+@,`````````X.`````O!P``!@P8,&#`
XM`````#`'?,[.UM;6YN9\````,0=@X&!@8&!@8/`````R!WR&!@8,&#!@_@``
XM`#,'_`P8,`P&!L9\````-`<</&S,S,S^#`P````U!_[`P,#\!@;&?````#8'
XM?,;`P/S&QL9\````-P?^!@8,&#`P,#`````X!WS&QL9\QL;&?````#D'?,;&
XMQGX&!L9\````.@,``.#@``#@X``````[`P``X.```.#@8,```#P'```&''#`
XM<!P&````/08```#^``#^```````^!P``P'`<!AQPP````#\&?,8&#!@P,``P
XM````0`8``#ALW-3<P'P```!!!WS&QL;^QL;&Q@```$('_,;&QO[&QL;\````
XM0P=\PL#`P,#`PGP```!$!_S&QL;&QL;&_````$4&_,#`P/C`P,#\````1@;\
XMP,#`^,#`P,````!'!WS$P,#.QL;&?````$@'QL;&QO[&QL;&````20+`P,#`
XMP,#`P,````!*!@P,#`P,#,S,>````$L(P\;,V/#PV,S&````3`;`P,#`P,#`
XMP/P```!-"<"`X8#S@-V`R8#!@,&`P8#!@````````$X(@<'AL9F-AX.!````
XM3P=\QL;&QL;&QGP```!0!_S&QL;\P,#`P````%$'?,;&QL;&QL9\!@``4@?\
XMQL;&_,;&QL8```!3!WS"X'`X'`Z&?````%0&_#`P,#`P,#`P````50?&QL;&
XMQL;&QGP```!6!\;&QL;&QL;$^````%<*S,#,P,S`S,#,P,S`S,#,@/\`````
XM````6`?&QL;&?,;&QL8```!9!LS,S,QX,#`P,````%H(_P,&#!@P8,#_````
XM6P3PP,#`P,#`P/````!<!8"`0$`@(!`0"````%T$\#`P,#`P,##P````7@@`
XM`!`X;,8```````!?"````````````/\``&`&``#`8#``````````80<``'R&
XM?L;&QGX```!B!\#`_,;&QL;&_````&,&``!XQ,#`P,1X````9`<&!G[&QL;&
XMQGX```!E!P``?,;&_L#&?````&8&/&#P8&!@8&!@````9P<``'[&QL;&QGX&
XMAGQH!\#`_,;&QL;&Q@```&D"P`#`P,#`P,#`````:@4``!@`&!@8&!@8F'!K
XM!L#`P,S8\/#8S````&P"P,#`P,#`P,#`````;0H`````_P#,@,S`S,#,P,S`
XMS,````````!N!P``_,;&QL;&Q@```&\'``!\QL;&QL9\````<`<``/S&QL;&
XMQOS`P`!Q!P``?L;&QL;&?@8&`'(&``#<X,#`P,#`````<P8``'C$X'@<C'@`
XM``!T!&!@\&!@8&!@,````'4'``#&QL;&QL9\````=@<``,;&QL;&Q/@```!W
XM"@````#,P,S`S,#,P,S`S(#_`````````'@'``#&QL9\QL;&````>0<``,;&
XMQL;&QGX&AGQZ!@``_`P8,&#`_````'L(```X8&#`8&`X````?`+`P,#`P,#`
XCP,#`P`!]"```X#`P&#`PX````'X(````8)(,````````@```
X`
Xend
SHAR_EOF
echo "uudecoding file showface.com"
uudecode < s2_temp_.tmp && rm -f s2_temp_.tmp &&
chmod 0644 showface.com || echo "restore of showface.com fails"
echo "x - extracting skipblk.asm (Text)"
sed 's/^X//' << 'SHAR_EOF' > skipblk.asm &&
X;put into the public domain by Russell Nelson, nelson@clutx.clarkson.edu
X
X	public	skip_blanks
Xskip_blanks:
X	lodsb				;skip blanks.
X	cmp	al,' '
X	je	skip_blanks
X	cmp	al,HT
X	je	skip_blanks
X	dec	si
X	ret
X
SHAR_EOF
chmod 0644 skipblk.asm || echo "restore of skipblk.asm fails"
exit 0
--
--russ (nelson@clutx [.bitnet | .clarkson.edu])  Russ.Nelson@$315.268.6667
It's better to get mugged than to live a life of fear -- Freeman Dyson