ins_anmy@jhunix (Norman Yarvin) (07/01/89)
This is version 1.0 of command. "Command" is my replacement for the functionality I use in the ua. That is, it sits up at the top of the screen and starts up new shells (actually, any program you want) in any size/any position window. You invoke it when you log in, just as you would the ua. Command is small (the shared-library object is 6K as opposed to 85K for ua) and fast (starting shells used to take me 5 seconds; now it's about 1.5 seconds). The disadvantages? Well, this is not a program for those who like user-friendliness. It's a bit rough around the edges. And it probably has a bug or two left. The error messages are somewhat cryptic, where they exist. It (by default) makes all windows borderless; three borderless windows with shells running in each can be a bit unsettling until you get used to them. And the warning at the head of command.c is only half in jest. But for those who don't like the ua, it's the way to go. I deleted about a meg of ua files after installing command. I have included a modified version of the 36x102 font. I like this version better than the one that was posted about a year ago. It is much more readable than either the 28x120 or the 36x144 fonts, and I use it regularly. Norman Yarvin yarvin@cs.jhu.edu, (seismo!umcp-cs | allegra!hopkins) !jhunix!ins_anmy Disclaimer: Johns Hopkins is massively responsible for everything I say. :-) #--------------------------------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 bytes)' 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 bytes)' 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 of aliases */ 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 place to put a new alias */ 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 text given alias */ 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) /* make an alias */ Xchar *alias,*text; X{ X struct alias **a; X X if(strcmp(alias,"sh")) /* is it for shell macro? */ X strcpy(shmac,text); X a=afind(alias); X if(!*a) { /* does it exist already? */ 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 unallocated */ X{ X static char *brk=0, *ubrk; /* brk is actual breakpoint, ubrk is simulated */ X register char *oldubrk; X register int size; X char *sbrk(); X X n+=1; /* word align */ 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 bytes)' 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. NO X* /__ * USER-SERVICEABLE PARTS INSIDE. THIS PROGRAM IS TO BE SERVICED ONLY BY 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; /* .cmdrc file descriptor */ Xchar **envp1; /* copy of envp */ X Xmain(argc,argv,envp) Xint argc; Xchar **argv; Xchar **envp; X{ X char *strcpy(), *strcat(), *envinit(), *getcmd(), *initgetcmd(), initfile[128], *home; X X signal(SIGCLD,SIG_IGN); /* no zombies */ X home=envinit(envp); /* get $HOME, set envp up for passing screen size */ X wsetup(); /* set up command window */ X strcpy(initfile, home); /* open .cmdrc */ X strcat(initfile, "/.cmdrc"); X if((initfd=open(initfile,O_RDONLY))!=-1) { X process(initgetcmd); /* initgetcmd reads .cmdrc */ X close(initfd); X } X process(getcmd); /* getcmd reads from keyboard */ X} X Xprocess(getcmd) /* the main loop */ 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 could check errno */ X default: X break; X case 0: X wmake(*argv); X execve(*argv, argv, envp1); X perror(*argv); /* exec shouldn't return */ 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 bytes)' 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 current position */ X ioctl(0,WIOCSETTEXT,&utdata); X *cmdp&=0x7f; /* remove highlight */ 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 beginning of line */ X cmdp=cmd; X break; X case 0x02: /* ^b: non-destructive backspace */ X if(cmdp<=cmd) X break; X cmdp--; X break; X case 0x04: /* ^d: delete next character */ 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 line */ X while(*cmdp) X cmdp++; X break; X case 0x06: /* ^f: forward a character */ 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 end of line */ X *cmdp=0; X break; X case 0x1a: /* ^z (Msg): copy macro, return */ 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 inserted as space */ X c=' '; X default: /* insert it */ X for(cp1=cmdp; *cp1; cp1++); X if(cp1>=cmd+(WTXTLEN-2)) /* parenthesized for efficiency */ 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 bytes)' 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 in sorted order */ X { "self", self } /* and change INTERNALS */ 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 bytes)' 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; /* clear icon */ 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 icon parameters */ 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 bytes)' 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, used in window.h */ X X#define BEGIN 0x00 /* states of command line parser */ 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 with a blank */ X *cmdp=' '; /* # designates a comment */ X cmdp[1]=0; X for(cmdp=cmd; (c=*cmdp) || cmdp2 && (c=*(cmdp=cmdp2)) && !(cmdp2=0); cmdp++) { X switch(state) { X case BEGIN: /* we start here */ X if(c=='[') { X state=WPARAM; X break; X } X case BLANK: /* we're processing blanks */ X if(c==' ') X break; X state=PARAM; X *argvp++=cmdp; X break; X case PARAM: /* we're processing a parameter */ 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 window parameters */ X switch(c) { X case 'x' : uwdata.uw_x = getint(cmdp); break; X case 'y' : uwdata.uw_y = getint(cmdp); break; X case 'w' : uwdata.uw_width = getint(cmdp); break; X case 'h' : uwdata.uw_height = getint(cmdp); break; X case 'b' : uwdata.uw_uflags ^= NBORDER; break; X case 'v' : uwdata.uw_uflags ^= VCWIDTH; break; X case 'u' : uwdata.uw_uflags ^= BORDVSCROLL; break; X case 's' : uwdata.uw_uflags ^= BORDHSCROLL; break; X case 'e' : uwdata.uw_uflags ^= BORDHELP; break; X case 'c' : uwdata.uw_uflags ^= BORDCANCEL; break; X case 'r' : uwdata.uw_uflags ^= BORDRESIZE; break; X case 'm' : uwdata.uw_uflags ^= NBORDMOVE; break; X case ']' : state=BLANK; X } X break; X } X } X *argvp=NULL; X return argv; X} X Xgetint(s) /* find whatever integer there is in s+1 */ 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 bytes)' 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> /* all comments in here */ X#include <fcntl.h> X#include <termio.h> X#include "config.h" X Xextern struct umdata umdata; /* mouse icon -- see mouse.[ch] */ 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 the #defines below */ Xchar lines[]="LINES=000"; Xchar columns[]="COLUMNS=000"; X X#define TERMCAP_XPOS 343 /* locations in the strings */ X#define TERMCAP_YPOS 336 X#define LINES_YPOS 6 X#define COLUMNS_XPOS 8 X Xchar *cmd=utdata.ut_text; /* command line */ Xchar **envp1; Xstruct termio termio; X Xchar *envinit(envp) Xchar **envp; X{ X char *home; /* $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 day's work */ X} X Xwsetup() /* command window initialization routine */ X{ X ioctl(0, WIOCSETMOUSE, &umdata); /* see mouse.h for umdata */ X ioctl(0, WIOCSETTEXT, &utdata); /* name window "Command" */ X utdata.ut_num = WTXTCMD; /* set up for getcmd() */ X#ifdef SMGR X ioctl(0, WIOCSYS, SYSSMGR); /* make the system manager (smgr is dead, long live smgr) */ X#endif X X ioctl(0, TCGETA, &termio); X termio.c_lflag = 0; /* raw mode */ X termio.c_iflag = 0; /* don't fuck with input */ X termio.c_oflag = 0; /* don't fuck with output */ X termio.c_cc[4] = 1; /* one character read */ X termio.c_cc[5] = 0; /* no timeout */ X ioctl(0, TCSETA, &termio); X write(1, "\33[2J\33[H\33[=1C", 12); /* clear screen, turn off cursor */ X} X Xself() /* command window position setup/reset */ X{ X write(1, "\33[2J\33[H\33[=1C", 12); /* clear screen, turn off cursor */ X ioctl(0, WIOCSETMOUSE, &umdata); /* see mouse.h for umdata */ X ioctl(0, WIOCSETD, &uwdata); X} X Xerror(s) /* put s in "prompt" line -- clobbers cmd/argv */ 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 window */ Xchar *s; X{ X register int i,wd; X X close(0); X close(1); X close(2); X setpgrp(); /* child will not die when parent does */ 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; /* get #lines */ 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; /* get #columns */ 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 wmgr window name */ X if(!strcmp(CMDDESC, utdata.ut_text)) X strcpy(utdata.ut_text, s); X ioctl(wd, WIOCSETTEXT, &utdata); /* command is window description */ X ioctl(wd, WIOCSETMOUSE, &umdata); /* see mouse.h for umdata */ X ioctl(wd, TCGETA, &termio); X#ifdef NOSTRIP X termio.c_iflag &= ~ISTRIP; /* don't strip 8th bit */ X#endif X termio.c_cc[0] = INTR; /* interrupt = ^c */ X termio.c_cc[3] = KILL; /* kill = ^u */ 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 bytes)' 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 bytes)' 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 (not for icons) */ X }, X { /* raster data */ X#ifdef M_SMALL X 0x1,0x2,0xc,0x3c,0xf8,0x3f8,0xff8,0x1f0,0x330,0x610,0xc00,0x1800,0x3000 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 bytes)' 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 24x80 window 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 bytes)' 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'; else 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 14 bytes)' 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 bytes)' 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 bytes)' 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 33 bytes)' 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 bytes)' 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 23 bytes)' 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'; else 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 32 bytes)' 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 bytes)' 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 1638 bytes)' fi fi ; : end of overwriting check exit 0