[comp.sources.misc] v07i088: command -- run programs in windows

allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc) (07/22/89)

Posting-number: Volume 7, Issue 88
Submitted-by: ins_anmy@JHUNIX.BITNET (Norman M Yarvin)
Archive-name: command

[...and whatever happened to "windy"?  ++bsa]

Command is a program for the AT&T Unix PC.  It is my replacement for the
functionality I use in the User Agent software provided with the Unix PC.
That is, it starts up new shells (actually, any program you want) in any
size/any position window.
     
                                        Norman Yarvin
        yarvin@cs.jhu.edu, (seismo!umcp-cs | allegra!hopkins) !jhunix!ins_anmy
     
#--------------------------------CUT HERE-------------------------------------
#! /bin/sh
#
# This is a shell archive.  Save this into a file, edit it
# and delete all lines above this comment.  Then give this
# file to sh by executing the command "sh file".  The files
# will be extracted into the current directory owned by
# you with default permissions.
#
# The files contained herein are:
#
# -rw-r--r--  1 norman  people     2220 Jun 29 05:07 README
# -rw-r--r--  1 norman  people     5421 Jun 30 18:57 command.doc
# -rw-r--r--  1 norman  people      287 Jun 30 18:53 makefile
# -rw-r--r--  1 norman  people     1578 Jun 29 03:10 alias.c
# -rw-r--r--  1 norman  people     2053 Jun 29 03:10 command.c
# -rw-r--r--  1 norman  people     2223 Jun 29 03:10 edit.c
# -rw-r--r--  1 norman  people      670 Jun 29 03:10 internal.c
# -rw-r--r--  1 norman  people     1192 Jun 29 03:10 mouse.c
# -rw-r--r--  1 norman  people     2347 Jun 29 03:10 parse.c
# -rw-r--r--  1 norman  people     4150 Jun 29 03:10 window.c
# -rw-r--r--  1 norman  people     1513 Jun 29 14:24 config.h
# -rw-r--r--  1 norman  people     1310 Jun 29 03:10 mouse.h
# -rw-r--r--  1 norman  people      657 Jun 29 14:07 .cmdrc
# -rw-r--r--  1 norman  people      690 Jun 29 14:07 .cmdrc2
# -rw-r--r--  1 norman  people      123 Jun 29 03:16 mice/fighter.m
# -rw-r--r--  1 norman  people      590 Jun 29 03:16 mice/moron.m
# -rw-r--r--  1 norman  people      146 Jun 29 03:16 mice/mouse.m
# -rw-r--r--  1 norman  people     1061 Jun 29 03:16 mice/series.m
# -rw-r--r--  1 norman  people      214 Jun 29 03:16 mice/small.m
# -rw-r--r--  1 norman  people      480 Jun 29 03:16 mice/target.m
# -rw-r--r--  1 norman  people     1056 Jun 29 03:16 mice/target2.m
# -rw-r--r--  1 norman  people      659 Jun 29 03:16 mice/unix.m
# -rw-r--r--  1 norman  people    19563 Jun 29 03:18 36x102.font
#
echo 'x - README'
if test -f README; then echo 'shar: not overwriting README'; else
sed 's/^X//' << '________This_Is_The_END________' > README
XThis is version 1.0 of "command", a command interpreter for the Unix PC.
XNote that the Unix PC is a specific 68000-based unix machine made by AT&T,
Xnot a PC-compatible running Unix.  Command contains much Unix PC specific
Xcode.
X
XCommand works in the following manner: it continually reads command lines
Xfrom the current window, and executes them.  Command lines usually tell
Xcommand to make another window, and execute a program in the new window.
XCommand has a limited alias feature.
X
XOn initialization, command reads in the file $HOME/.cmdrc, and processes it
Xas if it had been typed in on the command line.
X
XCommand was written by me, Norman Yarvin, for my own use.  It has very
Xlittle error checking, and probably a few bugs.  It reflects my own
Xidiosyncrasies both in programming style and in its operation.  However, it
Xis very flexible, and should, with a little effort, suit most people just
Xfine.  I am releasing it into the public domain; if anybody tries to make a
Xbuck off selling public domain software for the Unix PC, they will go out of
Xbusiness anyway.
X
XTo set up command, you should modify config.h as you desire, then run make.
XDocumentation is in command.doc.
X
XIf you want to modify command, be warned: the statement at the head of
Xcommand.c is only half in jest.  Clarity has been sacrificed at the altar of
Xefficiency.
X
XI have included the 36x102 font in this posting.  I got this font over the
Xnet, and have made some modifications.  I have also included two sample
X.cmdrc files: the first is the one I use, and is intended for the 36x102
Xfont; the other is for the standard 24x80 font.
X
XIf you want to use the 36x102 font, do it as follows.  Convert the
X36x102 font to binary form, and install it in /usr/lib/wfont:
X
X# cfont 36x102.font >36x102.ft
X# mv 36x102.ft /usr/lib/wfont
X
XThen, either (1) add the statement
X
X       sfont -s /usr/lib/wfont/36x102.ft 0
X
Xin /etc/.fontload (this makes it the default system font), or (2) define the
Xshell function
X
X       $ setfont() { setf 6; setf $1 6; setf 0; setf $1 0; }
X
Xand then run
X
X       $ setfont /usr/lib/wfont/36x102.ft
X
Xin each new window you create.  The latter won't work properly with
Xcommand's line-and-column automatic setup, though.  Maybe in version 1.1.
X
________This_Is_The_END________
if test `wc -l < README` -ne 55; then
        echo 'shar: README was damaged during transit (should have been 55 bytes
fi
fi              ; : end of overwriting check
echo 'x - command.doc'
if test -f command.doc; then echo 'shar: not overwriting command.doc'; else
sed 's/^X//' << '________This_Is_The_END________' > command.doc
XThis is documentation for version 1.0 of "command", a command interpreter
Xfor the Unix PC.  Note that the Unix PC is a specific 68000-based unix
Xmachine made by AT&T, not a PC-compatible running Unix.  Command is for the
XUnix PC only.
X
XOPERATION
X
X       Command works in the following manner: it continually reads command
X       lines from the current window, and executes them.  Command lines
X       usually tell command to make another window, and execute a program
X       in the new window.
X
X       On initialization, command reads in the file $HOME/.cmdrc, and
X       processes it as if it had been typed in on the command line.
X
XEDITING
X
X       When it is being typed in, the command line is displayed on the
X       bottom of the screen.  Text typed in will be inserted at the cursor
X       position; in addition, the following emacs style editing keys are
X       recognized:
X
X               ^a              go to beginning of line
X               ^b              go backward a character
X               ^d              delete next character
X               ^e              go to end of line
X               ^f              fo forward a character
X               ^h or delete    delete previous character
X               ^k              kill to end of line
X               ^z <Msg>        copy shell alias, execute command line
X               ^m <Return>     execute command line
X
X       Command designates itsself the "system manager window", unless
X       compiled without that option (see config.h).  This just means that
X       whenever <Msg> is pressed, command gets it, even if command is not
X       the currently active window.  When command reads the Msg key, it
X       immediately executes a special alias called the shell alias (see the
X       description of the alias internal command.).
X
X       If ^d is pressed when there is no text on the command line, then
X       command exits.  This is meant to log you out, so the window is left
X       in raw mode.
X
XTHE COMMAND LINE
X
X       A command line consists of the following:
X
X               a set of window parameters, enclosed in brackets (optional)
X
X               a program name, followed by a list of blank-separated
X               parameters to be passed to the program. (also optional)
X
X       Any text after a hash mark (#) is a comment, and is ignored.
X
XWINDOW PARAMETERS
X
X       Command keeps a set of current window parameters.  This set is used
X       to make all new windows.  Each time window parameters are included on
X       the command line, each command line window parameter overwrittes
X       the corresponding current window parameter.
X
X       Window parameters are any of the following:
X
X               x<integer>      set x coordinate of the upper left hand
X                               window corner to <integer>
X               y<integer>      set y coordinate of the upper left hand
X                               window corner to <integer>
X               w<integer>      set width of the upper left hand
X                               window corner to <integer>
X               h<integer>      set height of the upper left hand
X                               window corner to <integer>
X               b               toggle window border flag
X               v               toggle window variable character spacing flag
X               u               toggle window vertical scroll icon flag
X               s               toggle window horizontal scroll icon flag
X               e               toggle window help icon flag
X               c               toggle window cancel icon flag
X               r               toggle window resize icon flag
X               m               toggle window border move flag
X
X       Any other characters are ignored.
X
XINTERNAL COMMANDS
X
X       A program name is either the name of an internal command, or a full
X       path name of an executable file (not a shell script).  There are
X       three internal commands in command v1.0: they are as follows:
X
X       mouse mfile
X               Command keeps a current mouse icon, used in the same way as
X               the current window parameters.  The "mouse" internal command
X               reads in a new mouse from mfile.  Mfile must be organized in
X               the following fashion: a set of mouse parameters, then the
X               word "data" (actually, just a "d" will do) followed by a
X               newline, then a character bitmap.  Mouse parameters are one
X               of
X
X                       "hs"    horizontal size
X                       "vs"    vertical size
X                       "ha"    horizontal adjust
X                       "va"    vertical adjust
X
X               followed by a single space, then an integer.  A character
X               bitmap is up to 32 lines of up to 32 characters each: for
X               every non-blank character, the corresponding pixel is turned
X               on.
X
X       self
X               Self resets the command window to the current window
X               parameters and the current mouse.
X
X       alias aname atext
X               This command sets the alias aname to the value atext.
X               Thereafter, if aname is used as a program name, aname will
X               be replaced with atext on the command line.  If aname is
X               "sh", then the alias is also designated the "shell alias",
X               and is executed immediately whenever <Msg> is pressed (see
X               EDITING)
X
XEXECUTION
X
X       If a program name is not one of the three internal commands, then it
X       is executed in its own window.  The window that is created has the
X       following attributes:
X
X               -- its size and shape are given by the current window
X                  parameters.
X
X               -- its mouse is the current mouse.
X
X               -- if this option is compiled in (see config.h), interrupt
X                  is set to ^c, kill is set to ^u, and 8'th bit stripping is
X                  turned off (so the meta-key can be used if you are using
X                  CAPCTL).
X
X               -- The environment variables LINES, COLUMNS, and TERMCAP are
X                  set to the appropriate values for the new window's size.
X
X       Note that path searching has not been implemented; a full path name
X       (e.g /bin/ksh or /usr/local/bin/jove) must be given, or the program
X       will not be found.
X
XIT WOULD BE NICE IF...
X
X       Full path names were not required for all programs that command runs.
X
X       Command history were implemented.
X
XBUGS
X
X       For an unknown reason, jove does not work if executed directly from
X       command.  However, running "/bin/ksh -c /usr/local/bin/jove" does
X       work.  Yech.
X
XSEE ALSO
X
X       The source code
X       ./README
X       ./.cmdrc, ./mice/*      sample command rc / mouse icon files
________This_Is_The_END________
if test `wc -l < command.doc` -ne 159; then
        echo 'shar: command.doc was damaged during transit (should have been 159
fi
fi              ; : end of overwriting check
echo 'x - makefile'
if test -f makefile; then echo 'shar: not overwriting makefile'; else
sed 's/^X//' << '________This_Is_The_END________' > makefile
XCC=/bin/ccc
XCFLAGS=-g
XDEST=/usr/local/bin
XOBJS=edit.o command.o alias.o window.o parse.o internal.o mouse.o
X
Xcommand: $(OBJS)
X       $(CC) $(CCFLAGS) -o command ${OBJS}
X
Xmouse.o: mouse.h config.h
X
Xalias.o window.o: config.h
X
Xinstall:
X       su root -c "chown root.root command ; mv command $(DEST)"
________This_Is_The_END________
if test `wc -l < makefile` -ne 14; then
        echo 'shar: makefile was damaged during transit (should have been 14 byt
fi
fi              ; : end of overwriting check
echo 'x - alias.c'
if test -f alias.c; then echo 'shar: not overwriting alias.c'; else
sed 's/^X//' << '________This_Is_The_END________' > alias.c
X/*
X* alias.c -- for "command", a Unix PC command interpreter
X*/
X
X#include <sys/pte.h>
X#include <stdio.h>
X#include "config.h"
X
Xstruct alias {                                                 /* a binary tree
X       struct alias *gt, *lt;
X       char *alias, *text;
X};
X
Xchar *alloc();
Xchar shmac[80]=SHMAC;
X
Xstruct alias **afind(s)                                /* find an alias, or a p
Xchar *s;
X{
X       static struct alias *head=NULL;
X       struct alias **al;
X       int i;
X
X       for(al=&head; *al; ) {
X               if(!(i=strcmp(s,(*al)->alias)))
X                       break;
X               al = i<0 ? &(*al)->lt : &(*al)->gt;
X       }
X       return al;
X}
X
Xchar *alias(s)                                                         /* find
Xchar *s;
X{
X       char *strcpy();
X       struct alias *a;
X       static char abuf[256];
X
X       return (a=*afind(s)) ? strcpy(abuf,a->text) : NULL;
X}
X
Xchar *mkalias(alias,text)
Xchar *alias,*text;
X{
X       struct alias **a;
X
X       if(strcmp(alias,"sh"))                                          /* is it
X               strcpy(shmac,text);
X       a=afind(alias);
X       if(!*a) {                                                       /* does
X               *a=(struct alias *)alloc(sizeof(struct alias));
X               (*a)->alias=alloc(strlen(alias)+1);
X               strcpy((*a)->alias,alias);
X       }
X       (*a)->text=alloc(strlen(text)+1);
X       strcpy((*a)->text,text);
X}
X
Xchar *alloc(n)                         /* fast allocator for objects not to be
X{
X       static char *brk=0, *ubrk;              /* brk is actual breakpoint, ubr
X       register char *oldubrk;
X       register int size;
X       char *sbrk();
X
X       n+=1;
X       n&=0xfffffffe;
X       size=(n/BYTES_PER_PAGE+1)*BYTES_PER_PAGE;
X       if(!brk)
X               brk=(ubrk=sbrk(size))+size;
X       if(ubrk+n >= brk){
X               brk+=size;
X               sbrk(size);
X       }
X       oldubrk=ubrk;
X       ubrk+=n;
X       return oldubrk;
X}
________This_Is_The_END________
if test `wc -l < alias.c` -ne 78; then
        echo 'shar: alias.c was damaged during transit (should have been 78 byte
fi
fi              ; : end of overwriting check
echo 'x - command.c'
if test -f command.c; then echo 'shar: not overwriting command.c'; else
sed 's/^X//' << '________This_Is_The_END________' > command.c
X/*******
X*      *
X*   /  *  WARNING: DO NOT ATTEMPT TO ALTER THIS PROGRAM.  EXPOSED HIGH VOLTAGE.
X*  /__ *  USER-SERVICEABLE PARTS INSIDE.  THIS PROGRAM IS TO BE SERVICED ONLY B
X*    / *  PROPERLY QUALIFIED SERVICE PERSONNEL.  CONSULT THE SERVICE MANUAL FOR
X*   /  *  PROPER SERVICE PROCEDURES TO ASSURE CONTINUED COMPLIANCE WITH FEDERAL
X*      *  PERFOMANCE STANDARDS.
X********
X*
X* command.c -- main routine of Unix PC command interpreter
X*
X* Written by Norman Yarvin.  Send bug fixes to yarvin@cs.jhu.edu.
X* No copyright.
X*
X*/
X
X#include <fcntl.h>
X#include <signal.h>
X#include <stdio.h>
X
Xint initfd;                                                            /* .cmdr
Xchar **envp1;
X
Xmain(argc,argv,envp)
Xint argc;
Xchar **argv;
Xchar **envp;
X{
X       char *strcpy(), *strcat(), *envinit(), *getcmd(), *initgetcmd(), initfil
X
X       signal(SIGCLD,SIG_IGN);
X       home=envinit(envp);                     /* get $HOME, set envp up for pa
X       wsetup();                                                       /* set u
X       strcpy(initfile, home);
X       strcat(initfile, "/.cmdrc");
X       if((initfd=open(initfile,O_RDONLY))!=-1) {
X               process(initgetcmd);                            /* initgetcmd re
X               close(initfd);
X       }
X       process(getcmd);                                        /* getcmd reads
X}
X
Xprocess(getcmd)
Xchar *(*getcmd)();
X{
X       char *cmd, **argv;
X       char **parse();
X
X       while(cmd=(*getcmd)()) {
X               if((argv=parse(cmd)) && *argv && !internal(argv))
X                       switch(fork()){
X                               case -1:
X                                       error("fork failed");           /* we co
X                               default:
X                                       break;
X                               case 0:
X                                       wmake(*argv);
X                                       execve(*argv, argv, envp1);
X                                       perror(*argv);                  /* exec
X                                       sleep(2);
X                                       _exit(0);
X                       }
X       }
X}
X
Xchar *initgetcmd()
X{
X       static char buf[BUFSIZ], cmd[256];
X       static int size, bp=BUFSIZ;
X       register char c, *cmdp;
X
X       cmdp=cmd;
X       while((size = bp==BUFSIZ ? (bp=0,read(initfd,buf,BUFSIZ)) : size) != bp)
X               c=buf[bp++];
X               *cmdp++ = c=='\t' ? ' ' : c;            /* tab -> space */
X               if(c=='\n' || cmdp-cmd>254) {
X                       cmdp[-1]=0;
X                       return cmd;
X               }
X       }
X       return 0;
X}
________This_Is_The_END________
if test `wc -l < command.c` -ne 82; then
        echo 'shar: command.c was damaged during transit (should have been 82 by
fi
fi              ; : end of overwriting check
echo 'x - edit.c'
if test -f edit.c; then echo 'shar: not overwriting edit.c'; else
sed 's/^X//' << '________This_Is_The_END________' > edit.c
X/*
X* edit.c -- for "command", a Unix PC command interpreter
X*/
X
X#include <sys/window.h>
X
Xextern struct utdata utdata;
Xextern char *cmd, shmac[];
X
Xchar *getcmd()
X{
X       char c;
X       int offset, first=1;
X       register char *cmdp,*cp1,*cp2;
X
X       for(*(cmdp=cmd)=0; ; ){
X               if(*cmdp) {
X                       *cmdp|=0x80;                            /* highlight cur
X                       ioctl(0,WIOCSETTEXT,&utdata);
X                       *cmdp&=0x7f;                            /* remove highli
X               } else {
X                       *cmdp=' '|0x80;
X                       cmdp[1]=0;
X                       ioctl(0,WIOCSETTEXT,&utdata);
X                       *cmdp=0;
X               }
X               read(0, &c, 1);
X               if(first) {
X                       first=0;
X                       error("");
X               }
X               c&=0x7f;                                        /* strip 8th bit
X               switch(c) {
X                       case 0x01:                              /* ^a: to beginn
X                               cmdp=cmd;
X                               break;
X                       case 0x02:                              /* ^b: non-destr
X                               if(cmdp<=cmd)
X                                       break;
X                               cmdp--;
X                               break;
X                       case 0x04:                              /* ^d: delete ne
X                               if(!*cmdp) {
X                                       if(cmdp==cmd)
X                                               return 0;
X                                       break;
X                               }
X                               cp2=cmdp;
X                               for(cp1=cp2++; *cp1++=*cp2++; );
X                               break;
X                       case 0x05:                              /* ^e: end of li
X                               while(*cmdp)
X                                       cmdp++;
X                               break;
X                       case 0x06:                              /* ^f: forward a
X                               if(!*cmdp)
X                                       break;
X                               cmdp++;
X                               break;
X                       case 0x08:                              /* ^h: backspace
X                       case 0x7f:                              /* delete */
X                               if(cmdp<=cmd)
X                                       break;
X                               cp2=cmdp--;
X                               for(cp1=cmdp; *cp1++=*cp2++; );
X                               break;
X                       case 0x0b:                              /* ^k: kill to e
X                               *cmdp=0;
X                               break;
X                       case 0x1a:                              /* ^z (Msg): cop
X                               for(cp1=shmac,cmdp=cmd; *cmdp++=*cp1++; );
X                       case 0x0d:                              /* ^m: return */
X                               return cmd;
X                       case 0x00:                              /* ^~ */
X                       case 0x03:                              /* ^c */
X                       case 0x07:                              /* ^g */
X                       case 0x0a:                              /* ^j */
X                       case 0x0c:                              /* ^l: redraw */
X                       case 0x0e:                              /* ^n */
X                       case 0x0f:                              /* ^o */
X                       case 0x10:                              /* ^p */
X                       case 0x11:                              /* ^q */
X                       case 0x12:                              /* ^r */
X                       case 0x13:                              /* ^s */
X                       case 0x14:                              /* ^t */
X                       case 0x16:                              /* ^v */
X                       case 0x17:                              /* ^w */
X                       case 0x18:                              /* ^x */
X                       case 0x19:                              /* ^y */
X                               break;
X                       case 0x09:                              /* ^i: tab inser
X                               c=' ';
X                       default:                                /* insert it */
X                               for(cp1=cmdp; *cp1; cp1++);
X                               if(cp1>=cmd+(WTXTLEN-2))        /* parenthesized
X                                       break;
X                               cp2=cp1++;
X                               for(; cp1>cmdp; *cp1--=*cp2--);
X                               *cmdp++=c;
X               }
X       }
X}
________This_Is_The_END________
if test `wc -l < edit.c` -ne 102; then
        echo 'shar: edit.c was damaged during transit (should have been 102 byte
fi
fi              ; : end of overwriting check
echo 'x - internal.c'
if test -f internal.c; then echo 'shar: not overwriting internal.c'; else
sed 's/^X//' << '________This_Is_The_END________' > internal.c
X/*
X* internal.c -- for "command", a Unix PC command interpreter
X*/
X
Xint self(), readmouse();
X
Xstruct internal{
X       char *name;
X       int (*func)();
X} internals[] = {
X       { "mouse", readmouse },                                 /* add functions
X       { "self", self }                                                /* and c
X};
X
X#define INTERNALS      2
X
Xinternal(argv)
Xchar **argv;
X{
X       struct internal *top, *bot, *mid;
X       int i;
X
X       top=internals;                                  /* binary search */
X       bot=internals+(INTERNALS-1);
X       while(top<bot) {
X               mid=top+((bot-top)>>1);
X               if(!(i=strcmp(*argv,mid->name))) {
X                       top=mid;
X                       break;
X               }
X               if(i<0)
X                       bot=mid;
X               else
X                       top=mid+1;
X       }
X       if(strcmp(*argv,top->name))
X               return 0;
X       (*top->func)(argv);
X       return 1;
X}
________This_Is_The_END________
if test `wc -l < internal.c` -ne 40; then
        echo 'shar: internal.c was damaged during transit (should have been 40 b
fi
fi              ; : end of overwriting check
echo 'x - mouse.c'
if test -f mouse.c; then echo 'shar: not overwriting mouse.c'; else
sed 's/^X//' << '________This_Is_The_END________' > mouse.c
X/*
X* mouse.c -- for "command", a Unix PC command interpreter
X*/
X
X#include "mouse.h"
X
Xreadmouse(argv)
Xchar **argv;
X{
X       int fd;
X       char buf[1500];
X       register char *bp=buf, *end;
X       register int i;
X       unsigned short *data, *dend;
X
X       if(!argv[1]) {
X               error("Usage: mouse file");
X               return;
X       }
X       if((fd=open(argv[1],0)) == -1){
X               error("Can't open mouse data file");
X               return;
X       }
X       bp[read(fd,bp,1500)]=0;
X       close(fd);
X       m_icon.ic_fc.fc_hs=32;
X       m_icon.ic_fc.fc_vs=32;
X       m_icon.ic_fc.fc_ha=0;
X       m_icon.ic_fc.fc_va=0;
X       for(dend=(data=m_icon.ic_raster)+64; data<dend; data++)
X               *data=0;
X       for(; *bp; bp++) {                                              /* get i
X               if(*bp=='h') {
X                       if(*++bp=='s')
X                               m_icon.ic_fc.fc_hs=getint(bp+1);
X                       else
X                               m_icon.ic_fc.fc_ha=getint(bp+1);
X               } else if(*bp=='v') {
X                       if(*++bp=='s')
X                               m_icon.ic_fc.fc_vs=getint(bp+1);
X                       else
X                               m_icon.ic_fc.fc_va=getint(bp+1);
X               }
X               if(*bp=='d') {
X                       while(*bp++ != '\n');
X                       break;
X               }
X       }
X       for(data=m_icon.ic_raster, i=1; data<dend&&*bp;){
X               if(*bp=='\n') {
X                       data += (dend-data)%2 || m_icon.ic_fc.fc_hs<=16 ? 1 : 2;
X                       i=1;
X                       bp++;
X                       continue;
X               }
X               if(i >= 1<<16) {
X                       i=1;
X                       data++;
X               }
X               if(*bp++ != ' ')
X                       *data|=i;
X               i<<=1;
X       }
X}
________This_Is_The_END________
if test `wc -l < mouse.c` -ne 64; then
        echo 'shar: mouse.c was damaged during transit (should have been 64 byte
fi
fi              ; : end of overwriting check
echo 'x - parse.c'
if test -f parse.c; then echo 'shar: not overwriting parse.c'; else
sed 's/^X//' << '________This_Is_The_END________' > parse.c
X/*
X* parse.c -- for "command", a Unix PC command interpreter
X*/
X
X#include <sys/window.h>
X#include <stdio.h>
X
Xextern struct uwdata uwdata;                                   /* set here, use
X
X#define BEGIN  0x00                                            /* states of com
X#define BLANK  0x01
X#define PARAM  0x02
X#define WPARAM 0x03
X
Xchar *argv[40];
X
Xchar **parse(cmd)
Xchar *cmd;
X{
X       register char **argvp=argv, *cmdp, c;
X       register int state=BEGIN;
X       int first=1;
X       char *alias(), *cmdp2=NULL;
X       char *temp;
X
X       for(cmdp=cmd; *cmdp && *cmdp!='#'; cmdp++);             /* end cmd line
X       *cmdp=' ';                                                      /* # des
X       cmdp[1]=0;
X       for(cmdp=cmd; (c=*cmdp) || cmdp2 && (c=*(cmdp=cmdp2)) && !(cmdp2=0); cmd
X               switch(state) {
X                       case BEGIN:                             /* we start here
X                               if(c=='[') {
X                                       state=WPARAM;
X                                       break;
X                               }
X                       case BLANK:                             /* we're process
X                               if(c==' ')
X                                       break;
X                               state=PARAM;
X                               *argvp++=cmdp;
X                               break;
X                       case PARAM:                             /* we're process
X                               if(c!=' ')
X                                       break;
X                               *cmdp=0;
X                               if(first) {
X                                       first=0;
X                                       if(temp=alias(*argv)) {
X                                               *(cmdp2=cmdp)=' ';
X                                               cmdp=temp-1;
X                                               argvp=argv;
X                                               state=BEGIN;
X                                               break;
X                                       }
X                               }
X                               else if(argvp==argv+2 && !strcmp(*argv,"alias"))
X                                       mkalias(argv[1], ++cmdp);
X                                       return NULL;
X                               }
X                               state=BLANK;
X                               break;
X                       case WPARAM:                    /* we're processing wind
X                               switch(c) {
X                                       case 'x' : uwdata.uw_x      = getint(cmd
X                                       case 'y' : uwdata.uw_y      = getint(cmd
X                                       case 'w' : uwdata.uw_width  = getint(cmd
X                                       case 'h' : uwdata.uw_height = getint(cmd
X                                       case 'b' : uwdata.uw_uflags ^= NBORDER;
X                                       case 'v' : uwdata.uw_uflags ^= VCWIDTH;
X                                       case 'u' : uwdata.uw_uflags ^= BORDVSCRO
X                                       case 's' : uwdata.uw_uflags ^= BORDHSCRO
X                                       case 'e' : uwdata.uw_uflags ^= BORDHELP;
X                                       case 'c' : uwdata.uw_uflags ^= BORDCANCE
X                                       case 'r' : uwdata.uw_uflags ^= BORDRESIZ
X                                       case 'm' : uwdata.uw_uflags ^= NBORDMOVE
X                                       case ']' : state=BLANK;
X                               }
X                               break;
X               }
X       }
X       *argvp=NULL;
X       return argv;
X}
X
Xgetint(s)                                      /* find whatever integer there i
Xchar *s;
X{
X       register int i=0;
X       int neg=0;
X
X       if(s[1] == '-'){
X               neg=1;
X               s++;
X       }
X       while(*++s>='0' && *s<='9') {
X               i*=10;
X               i+=*s-'0';
X       }
X       return neg ? -i : i;
X}
________This_Is_The_END________
if test `wc -l < parse.c` -ne 100; then
        echo 'shar: parse.c was damaged during transit (should have been 100 byt
fi
fi              ; : end of overwriting check
echo 'x - window.c'
if test -f window.c; then echo 'shar: not overwriting window.c'; else
sed 's/^X//' << '________This_Is_The_END________' > window.c
X/*
X* window.c -- for "command", a Unix PC command interpreter
X*/
X
X#include <sys/window.h>
X#include <fcntl.h>
X#include <termio.h>
X#include "config.h"
X
Xextern struct umdata umdata;                                   /* mouse icon --
X
Xstruct utdata utdata = {
X       WTXTLABEL,
X       "Command"
X};
X
Xstruct uwdata uwdata = {
X       288,                                    /* upper-left-corner x (pixels)
X       0,                                      /* upper-left-corner y (pixels)
X       378,                                    /* width (pixels)
X       12,                                     /* height (pixels)
X       NBORDER                                 /* various flags
X};
X
Xchar termcapd[9][40]={ "TERMCAP=:al=\\E[1L:am:bs:cd=\\E[0J:ce=\\E[0",
X                       "K:cl=\\E[2J\\E[H:cm=\\E[%i%2;%2H:dc=\\E[1P:d",
X                       "l=\\E[1M:do=\\E[B:ei=:ho=\\E[H:ic=\\E[1@:im=",
X                       ":kb=\\10:kd=\\E[B:kl=\\E[D:kr=\\E[C:ku=\\E[A:",
X                       "k1=\\EOc:k2=\\EOd:k3=\\EOe:k4=\\EOf:k5=\\EOg:",
X                       "k6=\\EOh:k7=\\EOi:k8=\\EOj:nd=\\E[C:se=\\E[m:",
X                       "so=\\E[7m:ue=\\E[m:up=\\E[A:us=\\E[4m:EE=\\E[",
X                       "m:DS=\\E[2m:CV=\\E[=C:CI=\\E[=1C:KM=/usr/li",
X                       "b/ua/kmap.s4:li#000:co#000:"
X};
Xchar *termcap=*termcapd;                       /* if you change these, change t
Xchar lines[]="LINES=000";
Xchar columns[]="COLUMNS=000";
X
X#define TERMCAP_XPOS   343                                     /* locations in
X#define TERMCAP_YPOS   336
X#define LINES_YPOS     6
X#define COLUMNS_XPOS   8
X
Xchar *cmd=utdata.ut_text;
Xchar **envp1;
Xstruct termio termio;
X
Xchar *envinit(envp)
Xchar **envp;
X{
X       char *home;
X
X       envp1=envp;
X       for(;*envp;envp++){
X               if(!strncmp(*envp,lines,5))
X                       *envp=lines;
X               if(!strncmp(*envp,columns,7))
X                       *envp=columns;
X               if(!strncmp(*envp,termcap,7))
X                       *envp=termcap;
X               if(!strncmp(*envp,"HOME=",5))
X                       home=*envp+5;
X       }
X       return home;                                            /* after a long
X}
X
Xwsetup()                                               /* command window initia
X{
X       ioctl(0, WIOCSETMOUSE, &umdata);                                /* see m
X       ioctl(0, WIOCSETTEXT, &utdata);                                 /* name
X       utdata.ut_num = WTXTCMD;                                        /* set u
X#ifdef SMGR
X       ioctl(0, WIOCSYS, SYSSMGR);     /* make the system manager (smgr is dead
X#endif
X
X       ioctl(0, TCGETA, &termio);
X       termio.c_lflag = 0;                                             /* raw m
X       termio.c_iflag = 0;                                             /* don't
X       termio.c_oflag = 0;                                             /* don't
X       termio.c_cc[4] = 1;                                             /* one c
X       termio.c_cc[5] = 0;                                             /* no ti
X       ioctl(0, TCSETA, &termio);
X       write(1, "\33[2J\33[H\33[=1C", 12);                     /* clear screen,
X}
X
Xself()                                                 /* command window positi
X{
X       write(1, "\33[2J\33[H\33[=1C", 12);                     /* clear screen,
X       ioctl(0, WIOCSETMOUSE, &umdata);                                /* see m
X       ioctl(0, WIOCSETD, &uwdata);
X}
X
Xerror(s)                                       /* put s in "prompt" line -- clo
Xchar *s;
X{
X       register char *cmdp;
X
X       for(cmdp=cmd; *cmdp++=*s++;);
X       utdata.ut_num=WTXTPROMPT;
X       ioctl(0,WIOCSETTEXT,&utdata);
X       utdata.ut_num=WTXTCMD;
X}
X
Xwmake(s)                                                       /* make a new wi
Xchar *s;
X{
X       register int i,wd;
X
X       close(0);
X       close(1);
X       close(2);
X       setpgrp();                                      /* child will not die wh
X       wd = open("/dev/window", O_RDWR);
X       dup(wd);
X       dup(wd);
X       ioctl(wd, WIOCSETD, &uwdata);
X       ioctl(wd, WIOCGETD, &uwdata);
X       i = uwdata.uw_height/uwdata.uw_vs;
X       termcap[TERMCAP_YPOS] = lines[LINES_YPOS] = i/100 + '0';
X       termcap[TERMCAP_YPOS+1] = lines[LINES_YPOS+1] = (i/10)%10 + '0';
X       termcap[TERMCAP_YPOS+2] = lines[LINES_YPOS+2] = i%10 + '0';
X       i = uwdata.uw_width/uwdata.uw_hs;
X       termcap[TERMCAP_XPOS] = columns[COLUMNS_XPOS] = i/100 + '0';
X       termcap[TERMCAP_XPOS+1] = columns[COLUMNS_XPOS+1] = (i/10)%10 + '0';
X       termcap[TERMCAP_XPOS+2] = columns[COLUMNS_XPOS+2] = i%10 + '0';
X       utdata.ut_num=WTXTLABEL;                                        /* tell
X       if(!strcmp(CMDDESC, utdata.ut_text))
X               strcpy(utdata.ut_text, s);
X       ioctl(wd, WIOCSETTEXT, &utdata);                        /* command is wi
X       ioctl(wd, WIOCSETMOUSE, &umdata);                               /* see m
X       ioctl(wd, TCGETA, &termio);
X#ifdef NOSTRIP
X       termio.c_iflag &= ~ISTRIP;                                      /* don't
X#endif
X       termio.c_cc[0] = INTR;                                          /* inter
X       termio.c_cc[3] = KILL;                                          /* kill
X       ioctl(wd, TCSETA, &termio);
X}
________This_Is_The_END________
if test `wc -l < window.c` -ne 138; then
        echo 'shar: window.c was damaged during transit (should have been 138 by
fi
fi              ; : end of overwriting check
echo 'x - config.h'
if test -f config.h; then echo 'shar: not overwriting config.h'; else
sed 's/^X//' << '________This_Is_The_END________' > config.h
X/*
X* config.h -- configuration file for "command", a Unix PC command interpreter
X*/
X
X/*
X * The defines in this file select options that (I think) improve the
X * functionality of command.  However, some people may not like them, or they
X * might be incompatible with other software (nothing serious, though).
X */
X
X/*
X * If SMGR is defined, command will designate itsself the "screen manager"
X * (smgr).  All this means is that when the <Msg> key is pressed, it goes to
X * command no matter what window is active.  When command receives <Msg>, it
X * runs a special alias.  The initial text of that alias is whatever is
X * defined as SHMAC.
X */
X
X#define SMGR
X#define SHMAC  "/bin/ksh"              /* invoked when <Msg> is pressed */
X
X/*
X * This is the description of the window in which command runs.
X */
X
X#define CMDDESC        "Command"
X
X/*
X * If CTLC is defined, then in windows command makes, interrupt is set to ^c.
X * If CTLU is defined, kill is set to ^u.
X * If NOSTRIP is defined 8'th bit stripping is turned off (so that the
X * meta-key works, if you are using CAPCTL (the new keyboard driver)).
X */
X
X#define INTR   3               /* ^c */
X#define KILL   21              /* ^u */
X#define NOSTRIP
X
X/*
X * Command starts out with a default mouse.  Here you have a choice between a
X * default mouse which is small and better shaped than than the system mouse,
X * or a default mouse which is a gunsight-like crosshair.  Pick one or the
X * other, but not both!
X */
X
X#define M_SMALL                                /* small mouse */
X                                       /* --OR-- */
X/*#define M_TARGET                     /* crosshair */
________This_Is_The_END________
if test `wc -l < config.h` -ne 48; then
        echo 'shar: config.h was damaged during transit (should have been 48 byt
fi
fi              ; : end of overwriting check
echo 'x - mouse.h'
if test -f mouse.h; then echo 'shar: not overwriting mouse.h'; else
sed 's/^X//' << '________This_Is_The_END________' > mouse.h
X/*
X* mouse.h -- for "command", a Unix PC command interpreter
X*/
X
X#include <sys/window.h>
X#include <sys/font.h>
X#include "config.h"
X
Xstruct icon m_icon = {
X       0,                                      /* flags (unused)
X       {                                       /* font def
X#ifdef M_SMALL
X               16,                             /* horizontal size in bits
X               13,                             /* vertical size
X               0,                              /* horizontal adjust (signed)
X               0,                              /* vertical adjust (signed)
X#endif
X#ifdef M_TARGET
X               32, 21, -15, -10,
X#endif
X               0,                              /* horizontal increment
X               0,                              /* vertical increment (optional)
X               0                               /* relative mini-raster pointer
X       },
X       {                                       /* raster data
X#ifdef M_SMALL
X               0x1,0x2,0xc,0x3c,0xf8,0x3f8,0xff8,0x1f0,0x330,0x610,0xc00,0x1800
X#endif
X#ifdef M_TARGET
X               0x000f, 0x7800, 0x0001, 0x4000, 0x0001, 0x4000, 0x0001, 0x4000,
X               0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x0000, 0x8000, 0x0000,
X               0x8000, 0x0000, 0x8000, 0x0000, 0x7e00, 0x003f, 0x8000, 0x0000,
X               0x8000, 0x0000, 0x8000, 0x0000, 0x8000, 0x0000, 0x0000, 0x0000,
X               0x0000, 0x0000, 0x0001, 0x4000, 0x0001, 0x4000, 0x0001, 0x4000,
X               0x000f, 0x7800
X#endif
X       }
X};
X
Xstruct umdata umdata = {
X       MSICON,                                 /* wakeup flags
X       0,                                      /* motion rectangle x
X       0,                                      /* motion rectangle y
X       0,                                      /* motion rectangle w
X       0,                                      /* motion rectangle h
X       &m_icon                                 /* ptr to icon if MSICON=1
X};
________This_Is_The_END________
if test `wc -l < mouse.h` -ne 47; then
        echo 'shar: mouse.h was damaged during transit (should have been 47 byte
fi
fi              ; : end of overwriting check
echo 'x - .cmdrc'
if test -f .cmdrc; then echo 'shar: not overwriting .cmdrc'; else
sed 's/^X//' << '________This_Is_The_END________' > .cmdrc
X# .cmdrc -- command initialization file
X#
X[x300 y0 w350 h12]self                 # relocate command window
Xalias s0 [x300 y0 w350 h12]self                # make that an alias
Xalias w80 [x160 w560 y16 h192]/bin/ksh # if using the 36x102 font, this is a 24
Xalias w10 [x6 y210 w714 h80]/bin/ksh   # and this is a 10x102 window
Xalias w0 [x0 y4 w714 h296]/bin/ksh     # and this is a 37x102 window
Xalias w1 [x0 y12 w714 h288]/bin/ksh    # and this is a 36x102 window
Xalias wa [x0 y16 w150 h192]/bin/ksh    # and this is a tiny window
Xalias jove /bin/ksh -c /usr/local/jove # jove doesn't work plain
Xalias ksh /bin/ksh                     # useful
Xw80                                    # make two not completely overlapping
Xw0                                     # windows
________This_Is_The_END________
if test `wc -l < .cmdrc` -ne 13; then
        echo 'shar: .cmdrc was damaged during transit (should have been 13 bytes
fi
fi              ; : end of overwriting check
echo 'x - .cmdrc2'
if test -f .cmdrc2; then echo 'shar: not overwriting .cmdrc2'; else
sed 's/^X//' << '________This_Is_The_END________' > .cmdrc2
X# .cmdrc2 -- command initialization file for normal font
X#
X[x288 y0 w40 h12]self                  # relocate command window
Xalias s0 [x300 y0 w350 h12]self                # make that an alias
Xalias w60 [x180 w540 y8 h180]/bin/ksh  # if using the standard font, this is a
X                                       # 15x60 window
Xalias w8 [x0 y200 w720 h96]/bin/ksh    # and this is a 8x80 window
Xalias w0 [x0 y0 w720 h300]/bin/ksh     # and this is a 25x80 window
Xalias w1 [x0 y12 w708 h288]/bin/ksh    # and this is a 24x79 window
Xalias w2 [x0 y12 w720 h288]/bin/ksh    # and this is a standard 24x80 window
Xalias jove /bin/ksh -c /usr/local/bin/jove # jove doesn't work plain
Xalias ksh /bin/ksh                     # useful
Xw60                                    # make two not completely overlapping
Xw1                                     # windows
________This_Is_The_END________
if test `wc -l < .cmdrc2` -ne 14; then
        echo 'shar: .cmdrc2 was damaged during transit (should have been 14 byte
fi
fi              ; : end of overwriting check
echo mkdir mice
mkdir mice
echo 'x - mice/fighter.m'
if test -f mice/fighter.m; then echo 'shar: not overwriting mice/fighter.m'; els
sed 's/^X//' << '________This_Is_The_END________' > mice/fighter.m
Xvs 14
Xdata
X#
X ##
X  ###
X   ######
X   ##########
X   ########
X    ######
X    #######
X    ##  ####
X    #    #####
X         ##
X
________This_Is_The_END________
if test `wc -l < mice/fighter.m` -ne 14; then
        echo 'shar: mice/fighter.m was damaged during transit (should have been
fi
fi              ; : end of overwriting check
echo 'x - mice/moron.m'
if test -f mice/moron.m; then echo 'shar: not overwriting mice/moron.m'; else
sed 's/^X//' << '________This_Is_The_END________' > mice/moron.m
Xdata
XH  H EEEE L   L    OO
XH  H E    L   L   O  O
XHHHH EEE  L   L   O  O
XH  H E    L   L   O  O
XH  H EEEE LLL LLL  OO
X
XM   M  OO  RRR   OO  N  N
XMM MM O  O R  R O  O NN N
XM M M O  O RRR  O  O N NN
XM   M O  O R R  O  O N  N
XM   M  OO  R  R  OO  N  N
X
X GGG  OO    FFFF U  U  CC K  K
XG    O  O   F    U  U C   K K
XG GG O  O   FFF  U  U C   KK
XG  G O  O   F    U  U C   K K
X GG   OO    F     UU   CC K  K
X
XY   Y  OO  U  U RRR
X Y Y  O  O U  U R  R
X  Y   O  O U  U RRR
X  Y   O  O U  U R R
X  Y    OO   UU  R  R
X
X SSS EEEE L   FFFF
XS    E    L   F
X SS  EEE  L   FFF
X   S E    L   F
XSSS  EEEE LLL F
________This_Is_The_END________
if test `wc -l < mice/moron.m` -ne 30; then
        echo 'shar: mice/moron.m was damaged during transit (should have been 30
fi
fi              ; : end of overwriting check
echo 'x - mice/mouse.m'
if test -f mice/mouse.m; then echo 'shar: not overwriting mice/mouse.m'; else
sed 's/^X//' << '________This_Is_The_END________' > mice/mouse.m
Xdata
X ##########
X#          #
X# ## ## ## #
X# ## ## ## #
X# ## ## ## #
X# ## ## ## #
X#          #
X#          #
X#          #
X#          #
X ##########
________This_Is_The_END________
if test `wc -l < mice/mouse.m` -ne 12; then
        echo 'shar: mice/mouse.m was damaged during transit (should have been 12
fi
fi              ; : end of overwriting check
echo 'x - mice/series.m'
if test -f mice/series.m; then echo 'shar: not overwriting mice/series.m'; else
sed 's/^X//' << '________This_Is_The_END________' > mice/series.m
Xdata
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                   #############
X                   #############
X                   #############
X                   #############
X                   #############
________This_Is_The_END________
if test `wc -l < mice/series.m` -ne 33; then
        echo 'shar: mice/series.m was damaged during transit (should have been 3
fi
fi              ; : end of overwriting check
echo 'x - mice/small.m'
if test -f mice/small.m; then echo 'shar: not overwriting mice/small.m'; else
sed 's/^X//' << '________This_Is_The_END________' > mice/small.m
Xdata
X#
X #
X  ##
X  ####
X   #####
X   #######
X   #########
X    #####
X    ##  ##
X    #    ##
X          ##
X           ##
X            ##
________This_Is_The_END________
if test `wc -l < mice/small.m` -ne 14; then
        echo 'shar: mice/small.m was damaged during transit (should have been 14
fi
fi              ; : end of overwriting check
echo 'x - mice/target.m'
if test -f mice/target.m; then echo 'shar: not overwriting mice/target.m'; else
sed 's/^X//' << '________This_Is_The_END________' > mice/target.m
Xvs 19
Xvi -9
Xhi -15
Xdata
X               #
X               #
X           #########
X         ##         ##
X       ##             ##
X      #                 #
X     #         #         #
X    #          #          #
X    #          #          #
X#####     ###########     #####
X    #          #          #
X    #          #          #
X     #         #         #
X      #                 #
X       ##             ##
X         ##         ##
X           #########
X               #
X               #
________This_Is_The_END________
if test `wc -l < mice/target.m` -ne 23; then
        echo 'shar: mice/target.m was damaged during transit (should have been 2
fi
fi              ; : end of overwriting check
echo 'x - mice/target2.m'
if test -f mice/target2.m; then echo 'shar: not overwriting mice/target2.m'; els
sed 's/^X//' << '________This_Is_The_END________' > mice/target2.m
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
X
X
X
X
________This_Is_The_END________
if test `wc -l < mice/target2.m` -ne 32; then
        echo 'shar: mice/target2.m was damaged during transit (should have been
fi
fi              ; : end of overwriting check
echo 'x - mice/unix.m'
if test -f mice/unix.m; then echo 'shar: not overwriting mice/unix.m'; else
sed 's/^X//' << '________This_Is_The_END________' > mice/unix.m
Xdata
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 #  #   #   #  #     #     #   #
X #   #   ###   ####  ####   ###
________This_Is_The_END________
if test `wc -l < mice/unix.m` -ne 30; then
        echo 'shar: mice/unix.m was damaged during transit (should have been 30
fi
fi              ; : end of overwriting check
echo 'x - 36x102.font'
if test -f 36x102.font; then echo 'shar: not overwriting 36x102.font'; else
sed 's/^X//' << '________This_Is_The_END________' > 36x102.font
X# magic 0x18e
X# flags 0x0
Xhs    7
Xvs    8
Xbasel 7
X
X############### Character 0x20, 040, 32
Xchar 32
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits
Xbits
Xbits
Xbits
Xbits
Xbits
X
X############### Character 0x21, 041, 33   ! ! ! ! ! ! ! ! ! !
Xchar 33
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits   *
Xbits   *
Xbits   *
Xbits   *
Xbits   *
Xbits
Xbits   *
Xbits
X
X############### Character 0x22, 042, 34   " " " " " " " " " "
Xchar 34
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits  * *
Xbits  * *
Xbits  * *
Xbits
Xbits
Xbits
Xbits
Xbits
X
X############### Character 0x23, 043, 35   # # # # # # # # # #
Xchar 35
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits  * *
Xbits  * *
Xbits *****
Xbits  * *
Xbits *****
Xbits  * *
Xbits  * *
Xbits
X
X############### Character 0x24, 044, 36   $ $ $ $ $ $ $ $ $ $
Xchar 36
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits   *
Xbits  ****
Xbits * *
Xbits  ***
Xbits   * *
Xbits ****
Xbits   *
Xbits
X
X############### Character 0x25, 045, 37   % % % % % % % % % %
Xchar 37
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits **  *
Xbits **  *
Xbits    *
Xbits   *
Xbits  *
Xbits *  **
Xbits *  **
Xbits
X
X############### Character 0x26, 046, 38   & & & & & & & & & &
Xchar 38
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits  *
Xbits * *
Xbits * *
Xbits  *
Xbits * * *
Xbits *  *
Xbits  ** *
Xbits
X
X############### Character 0x27, 047, 39   ' ' ' ' ' ' ' ' ' '
Xchar 39
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits  **
Xbits   *
Xbits  *
Xbits
Xbits
Xbits
Xbits
Xbits
X
X############### Character 0x28, 050, 40   ( ( ( ( ( ( ( ( ( (
Xchar 40
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits   *
Xbits  *
Xbits *
Xbits *
Xbits *
Xbits  *
Xbits   *
Xbits
X
X############### Character 0x29, 051, 41   ) ) ) ) ) ) ) ) ) )
Xchar 41
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits   *
Xbits    *
Xbits     *
Xbits     *
Xbits     *
Xbits    *
Xbits   *
Xbits
X
X############### Character 0x2a, 052, 42   * * * * * * * * * *
Xchar 42
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits   *
Xbits * * *
Xbits  ***
Xbits  ***
Xbits * * *
Xbits   *
Xbits
X
X############### Character 0x2b, 053, 43   + + + + + + + + + +
Xchar 43
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits   *
Xbits   *
Xbits *****
Xbits   *
Xbits   *
Xbits
Xbits
X
X############### Character 0x2c, 054, 44   , , , , , , , , , ,
Xchar 44
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits
Xbits
Xbits
Xbits  **
Xbits   *
Xbits  *
X
X############### Character 0x2d, 055, 45   - - - - - - - - - -
Xchar 45
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits
Xbits *****
Xbits
Xbits
Xbits
Xbits
X
X############### Character 0x2e, 056, 46   . . . . . . . . . .
Xchar 46
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits
Xbits
Xbits
Xbits   *
Xbits   *
Xbits
X
X############### Character 0x2f, 057, 47   / / / / / / / / / /
Xchar 47
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits     *
Xbits     *
Xbits    *
Xbits   *
Xbits  *
Xbits *
Xbits *
Xbits
X
X############### Character 0x30, 060, 48   0 0 0 0 0 0 0 0 0 0
Xchar 48
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits  ***
Xbits *   *
Xbits *  **
Xbits * * *
Xbits **  *
Xbits *   *
Xbits  ***
Xbits
X
X############### Character 0x31, 061, 49   1 1 1 1 1 1 1 1 1 1
Xchar 49
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits   *
Xbits  **
Xbits * *
Xbits   *
Xbits   *
Xbits   *
Xbits *****
Xbits
X
X############### Character 0x32, 062, 50   2 2 2 2 2 2 2 2 2 2
Xchar 50
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits  ***
Xbits *   *
Xbits     *
Xbits  ***
Xbits *
Xbits *
Xbits *****
Xbits
X
X############### Character 0x33, 063, 51   3 3 3 3 3 3 3 3 3 3
Xchar 51
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *****
Xbits     *
Xbits    *
Xbits   **
Xbits     *
Xbits *   *
Xbits  ***
Xbits
X
X############### Character 0x34, 064, 52   4 4 4 4 4 4 4 4 4 4
Xchar 52
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits    *
Xbits   **
Xbits  * *
Xbits *  *
Xbits *****
Xbits    *
Xbits    *
Xbits
X
X############### Character 0x35, 065, 53   5 5 5 5 5 5 5 5 5 5
Xchar 53
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *****
Xbits *
Xbits *
Xbits ****
Xbits     *
Xbits *   *
Xbits  ***
Xbits
X
X############### Character 0x36, 066, 54   6 6 6 6 6 6 6 6 6 6
Xchar 54
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits  ***
Xbits *   *
Xbits *
Xbits ****
Xbits *   *
Xbits *   *
Xbits  ***
Xbits
X
X############### Character 0x37, 067, 55   7 7 7 7 7 7 7 7 7 7
Xchar 55
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *****
Xbits     *
Xbits    *
Xbits   *
Xbits   *
Xbits   *
Xbits   *
Xbits
X
X############### Character 0x38, 070, 56   8 8 8 8 8 8 8 8 8 8
Xchar 56
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits  ***
Xbits *   *
Xbits *   *
Xbits  ***
Xbits *   *
Xbits *   *
Xbits  ***
Xbits
X
X############### Character 0x39, 071, 57   9 9 9 9 9 9 9 9 9 9
Xchar 57
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits  ***
Xbits *   *
Xbits *   *
Xbits  ****
Xbits     *
Xbits *   *
Xbits  ***
Xbits
X
X############### Character 0x3a, 072, 58   : : : : : : : : : :
Xchar 58
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits   *
Xbits   *
Xbits
Xbits
Xbits   *
Xbits   *
Xbits
X
X############### Character 0x3b, 073, 59   ; ; ; ; ; ; ; ; ; ;
Xchar 59
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits   *
Xbits   *
Xbits
Xbits
Xbits   *
Xbits   *
Xbits  *
X
X############### Character 0x3c, 074, 60   < < < < < < < < < <
Xchar 60
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits    *
Xbits   *
Xbits  *
Xbits *
Xbits  *
Xbits   *
Xbits    *
Xbits
X
X############### Character 0x3d, 075, 61   = = = = = = = = = =
Xchar 61
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits *****
Xbits
Xbits *****
Xbits
Xbits
Xbits
X
X############### Character 0x3e, 076, 62   > > > > > > > > > >
Xchar 62
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits  *
Xbits   *
Xbits    *
Xbits     *
Xbits    *
Xbits   *
Xbits  *
Xbits
X
X############### Character 0x3f, 077, 63   ? ? ? ? ? ? ? ? ? ?
Xchar 63
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits  ***
Xbits *   *
Xbits     *
Xbits   **
Xbits   *
Xbits
Xbits   *
Xbits
X
X############### Character 0x40, 0100, 64   @ @ @ @ @ @ @ @ @ @
Xchar 64
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits  ***
Xbits *   *
Xbits * * *
Xbits * ***
Xbits * **
Xbits *
Xbits  ****
Xbits
X
X############### Character 0x41, 0101, 65   A A A A A A A A A A
Xchar 65
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits   *
Xbits  * *
Xbits *   *
Xbits *   *
Xbits *****
Xbits *   *
Xbits *   *
Xbits
X
X############### Character 0x42, 0102, 66   B B B B B B B B B B
Xchar 66
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits ****
Xbits *   *
Xbits *   *
Xbits ****
Xbits *   *
Xbits *   *
Xbits ****
Xbits
X
X############### Character 0x43, 0103, 67   C C C C C C C C C C
Xchar 67
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits  ***
Xbits *   *
Xbits *
Xbits *
Xbits *
Xbits *   *
Xbits  ***
Xbits
X
X############### Character 0x44, 0104, 68   D D D D D D D D D D
Xchar 68
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits ****
Xbits *   *
Xbits *   *
Xbits *   *
Xbits *   *
Xbits *   *
Xbits ****
Xbits
X
X############### Character 0x45, 0105, 69   E E E E E E E E E E
Xchar 69
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *****
Xbits *
Xbits *
Xbits ****
Xbits *
Xbits *
Xbits *****
Xbits
X
X############### Character 0x46, 0106, 70   F F F F F F F F F F
Xchar 70
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *****
Xbits *
Xbits *
Xbits ****
Xbits *
Xbits *
Xbits *
Xbits
X
X############### Character 0x47, 0107, 71   G G G G G G G G G G
Xchar 71
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits  ***
Xbits *   *
Xbits *
Xbits *
Xbits *  **
Xbits *   *
Xbits  ****
Xbits
X
X############### Character 0x48, 0110, 72   H H H H H H H H H H
Xchar 72
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *   *
Xbits *   *
Xbits *   *
Xbits *****
Xbits *   *
Xbits *   *
Xbits *   *
Xbits
X
X############### Character 0x49, 0111, 73   I I I I I I I I I I
Xchar 73
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits  ***
Xbits   *
Xbits   *
Xbits   *
Xbits   *
Xbits   *
Xbits  ***
Xbits
X
X############### Character 0x4a, 0112, 74   J J J J J J J J J J
Xchar 74
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits    **
Xbits     *
Xbits     *
Xbits     *
Xbits     *
Xbits *   *
Xbits  ***
Xbits
X
X############### Character 0x4b, 0113, 75   K K K K K K K K K K
Xchar 75
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *   *
Xbits *  *
Xbits * *
Xbits **
Xbits * *
Xbits *  *
Xbits *   *
Xbits
X
X############### Character 0x4c, 0114, 76   L L L L L L L L L L
Xchar 76
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *
Xbits *
Xbits *
Xbits *
Xbits *
Xbits *
Xbits *****
Xbits
X
X############### Character 0x4d, 0115, 77   M M M M M M M M M M
Xchar 77
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *   *
Xbits ** **
Xbits * * *
Xbits * * *
Xbits * * *
Xbits *   *
Xbits *   *
Xbits
X
X############### Character 0x4e, 0116, 78   N N N N N N N N N N
Xchar 78
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *   *
Xbits *   *
Xbits **  *
Xbits * * *
Xbits *  **
Xbits *   *
Xbits *   *
Xbits
X
X############### Character 0x4f, 0117, 79   O O O O O O O O O O
Xchar 79
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits  ***
Xbits *   *
Xbits *   *
Xbits *   *
Xbits *   *
Xbits *   *
Xbits  ***
Xbits
X
X############### Character 0x50, 0120, 80   P P P P P P P P P P
Xchar 80
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits ****
Xbits *   *
Xbits *   *
Xbits ****
Xbits *
Xbits *
Xbits *
Xbits
X
X############### Character 0x51, 0121, 81   Q Q Q Q Q Q Q Q Q Q
Xchar 81
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits  ***
Xbits *   *
Xbits *   *
Xbits *   *
Xbits * * *
Xbits *  *
Xbits  ** *
Xbits
X
X############### Character 0x52, 0122, 82   R R R R R R R R R R
Xchar 82
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits ****
Xbits *   *
Xbits *   *
Xbits ****
Xbits * *
Xbits *  *
Xbits *   *
Xbits
X
X############### Character 0x53, 0123, 83   S S S S S S S S S S
Xchar 83
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits  ***
Xbits *   *
Xbits *
Xbits  ***
Xbits     *
Xbits *   *
Xbits  ***
Xbits
X
X############### Character 0x54, 0124, 84   T T T T T T T T T T
Xchar 84
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *****
Xbits * * *
Xbits   *
Xbits   *
Xbits   *
Xbits   *
Xbits   *
Xbits
X
X############### Character 0x55, 0125, 85   U U U U U U U U U U
Xchar 85
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *   *
Xbits *   *
Xbits *   *
Xbits *   *
Xbits *   *
Xbits *   *
Xbits  ***
Xbits
X
X############### Character 0x56, 0126, 86   V V V V V V V V V V
Xchar 86
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *   *
Xbits *   *
Xbits *   *
Xbits  * *
Xbits  * *
Xbits   *
Xbits   *
Xbits
X
X############### Character 0x57, 0127, 87   W W W W W W W W W W
Xchar 87
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *   *
Xbits *   *
Xbits *   *
Xbits * * *
Xbits * * *
Xbits * * *
Xbits  * *
Xbits
X
X############### Character 0x58, 0130, 88   X X X X X X X X X X
Xchar 88
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *   *
Xbits *   *
Xbits  * *
Xbits   *
Xbits  * *
Xbits *   *
Xbits *   *
Xbits
X
X############### Character 0x59, 0131, 89   Y Y Y Y Y Y Y Y Y Y
Xchar 89
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *   *
Xbits *   *
Xbits *   *
Xbits  * *
Xbits   *
Xbits   *
Xbits   *
Xbits
X
X############### Character 0x5a, 0132, 90   Z Z Z Z Z Z Z Z Z Z
Xchar 90
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *****
Xbits     *
Xbits    *
Xbits   *
Xbits  *
Xbits *
Xbits *****
Xbits
X
X############### Character 0x5b, 0133, 91   [ [ [ [ [ [ [ [ [ [
Xchar 91
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits ****
Xbits *
Xbits *
Xbits *
Xbits *
Xbits *
Xbits ****
Xbits
X
X############### Character 0x5c, 0134, 92   \ \ \ \ \ \ \ \ \ \
Xchar 92
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *
Xbits *
Xbits  *
Xbits   *
Xbits    *
Xbits     *
Xbits     *
Xbits
X
X############### Character 0x5d, 0135, 93   ] ] ] ] ] ] ] ] ] ]
Xchar 93
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits  ****
Xbits     *
Xbits     *
Xbits     *
Xbits     *
Xbits     *
Xbits  ****
Xbits
X
X############### Character 0x5e, 0136, 94   ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
Xchar 94
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits   *
Xbits  * *
Xbits *   *
Xbits
Xbits
Xbits
Xbits
Xbits
X
X############### Character 0x5f, 0137, 95   _ _ _ _ _ _ _ _ _ _
Xchar 95
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits
Xbits
Xbits
Xbits
Xbits *****
Xbits
X
X############### Character 0x60, 0140, 96   ` ` ` ` ` ` ` ` ` `
Xchar 96
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits   *
Xbits   *
Xbits    *
Xbits
Xbits
Xbits
Xbits
Xbits
X
X############### Character 0x61, 0141, 97   a a a a a a a a a a
Xchar 97
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits  ** *
Xbits *  **
Xbits *   *
Xbits *  **
Xbits  ** *
Xbits
X
X############### Character 0x62, 0142, 98   b b b b b b b b b b
Xchar 98
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *
Xbits *
Xbits * **
Xbits **  *
Xbits *   *
Xbits **  *
Xbits * **
Xbits
X
X############### Character 0x63, 0143, 99   c c c c c c c c c c
Xchar 99
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits  ***
Xbits *
Xbits *
Xbits *
Xbits  ***
Xbits
X
X############### Character 0x64, 0144, 100   d d d d d d d d d d
Xchar 100
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits     *
Xbits     *
Xbits  ** *
Xbits *  **
Xbits *   *
Xbits *  **
Xbits  ** *
Xbits
X
X############### Character 0x65, 0145, 101   e e e e e e e e e e
Xchar 101
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits  ***
Xbits *   *
Xbits *****
Xbits *
Xbits  ****
Xbits
X
X############### Character 0x66, 0146, 102   f f f f f f f f f f
Xchar 102
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits    *
Xbits   * *
Xbits   *
Xbits  ***
Xbits   *
Xbits   *
Xbits   *
Xbits
X
X############### Character 0x67, 0147, 103   g g g g g g g g g g
Xchar 103
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits  ** *
Xbits *  **
Xbits *   *
Xbits  ** *
Xbits     *
Xbits  ***
X
X############### Character 0x68, 0150, 104   h h h h h h h h h h
Xchar 104
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *
Xbits *
Xbits * **
Xbits **  *
Xbits *   *
Xbits *   *
Xbits *   *
Xbits
X
X############### Character 0x69, 0151, 105   i i i i i i i i i i
Xchar 105
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits   *
Xbits
Xbits  **
Xbits   *
Xbits   *
Xbits   *
Xbits  ***
Xbits
X
X############### Character 0x6a, 0152, 106   j j j j j j j j j j
Xchar 106
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits    *
Xbits
Xbits   **
Xbits    *
Xbits    *
Xbits    *
Xbits *  *
Xbits  **
X
X############### Character 0x6b, 0153, 107   k k k k k k k k k k
Xchar 107
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *
Xbits *
Xbits *   *
Xbits *  *
Xbits ***
Xbits *  *
Xbits *   *
Xbits
X
X############### Character 0x6c, 0154, 108   l l l l l l l l l l
Xchar 108
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits  **
Xbits   *
Xbits   *
Xbits   *
Xbits   *
Xbits   *
Xbits  ***
Xbits
X
X############### Character 0x6d, 0155, 109   m m m m m m m m m m
Xchar 109
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits ** *
Xbits * * *
Xbits * * *
Xbits * * *
Xbits *   *
Xbits
X
X############### Character 0x6e, 0156, 110   n n n n n n n n n n
Xchar 110
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits * **
Xbits **  *
Xbits *   *
Xbits *   *
Xbits *   *
Xbits
X
X############### Character 0x6f, 0157, 111   o o o o o o o o o o
Xchar 111
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits  ***
Xbits *   *
Xbits *   *
Xbits *   *
Xbits  ***
Xbits
X
X############### Character 0x70, 0160, 112   p p p p p p p p p p
Xchar 112
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits * **
Xbits **  *
Xbits **  *
Xbits * **
Xbits *
Xbits *
X
X############### Character 0x71, 0161, 113   q q q q q q q q q q
Xchar 113
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits  ** *
Xbits *  **
Xbits *   *
Xbits  ** *
Xbits     *
Xbits     *
X
X############### Character 0x72, 0162, 114   r r r r r r r r r r
Xchar 114
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits * **
Xbits **  *
Xbits *
Xbits *
Xbits *
Xbits
X
X############### Character 0x73, 0163, 115   s s s s s s s s s s
Xchar 115
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits  ****
Xbits *
Xbits  ***
Xbits     *
Xbits ****
Xbits
X
X############### Character 0x74, 0164, 116   t t t t t t t t t t
Xchar 116
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits   *
Xbits   *
Xbits  ***
Xbits   *
Xbits   *
Xbits   * *
Xbits    *
Xbits
X
X############### Character 0x75, 0165, 117   u u u u u u u u u u
Xchar 117
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits *   *
Xbits *   *
Xbits *   *
Xbits *  **
Xbits  ** *
Xbits
X
X############### Character 0x76, 0166, 118   v v v v v v v v v v
Xchar 118
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits *   *
Xbits *   *
Xbits  * *
Xbits  * *
Xbits   *
Xbits
X
X############### Character 0x77, 0167, 119   w w w w w w w w w w
Xchar 119
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits *   *
Xbits * * *
Xbits * * *
Xbits * * *
Xbits  * *
Xbits
X
X############### Character 0x78, 0170, 120   x x x x x x x x x x
Xchar 120
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits *   *
Xbits  * *
Xbits   *
Xbits  * *
Xbits *   *
Xbits
X
X############### Character 0x79, 0171, 121   y y y y y y y y y y
Xchar 121
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits *   *
Xbits *   *
Xbits *  **
Xbits  ** *
Xbits     *
Xbits  ***
X
X############### Character 0x7a, 0172, 122   z z z z z z z z z z
Xchar 122
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits *****
Xbits    *
Xbits   *
Xbits  *
Xbits *****
Xbits
X
X############### Character 0x7b, 0173, 123   { { { { { { { { { {
Xchar 123
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits    *
Xbits   *
Xbits   *
Xbits **
Xbits   *
Xbits   *
Xbits    *
Xbits
X
X############### Character 0x7c, 0174, 124   | | | | | | | | | |
Xchar 124
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits   *
Xbits   *
Xbits   *
Xbits   *
Xbits   *
Xbits   *
Xbits   *
Xbits   *
X
X############### Character 0x7d, 0175, 125   } } } } } } } } } }
Xchar 125
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits  *
Xbits   *
Xbits   *
Xbits    **
Xbits   *
Xbits   *
Xbits  *
Xbits
X
X############### Character 0x7e, 0176, 126   ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Xchar 126
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits
Xbits
Xbits  *
Xbits * * *
Xbits    *
Xbits
Xbits
Xbits
X
X############### Character 0x7f, 0177, 127   DEL DEL DEL DEL DEL
Xchar 127
Xhs   5
Xvs   8
Xha   1
Xva   -7
Xhi   7
Xvi   0
Xbits *****
Xbits *****
Xbits *****
Xbits *****
Xbits *****
Xbits *****
Xbits *****
Xbits *****
X
________This_Is_The_END________
if test `wc -l < 36x102.font` -ne 1638; then
        echo 'shar: 36x102.font was damaged during transit (should have been 163
fi
fi              ; : end of overwriting check
exit 0