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