rsalz@uunet.uu.net (Rich Salz) (01/25/89)
Submitted-by: Stephen A. Uhler <sau@bellcore.com> Posting-number: Volume 17, Issue 25 Archive-name: mgr/part24 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 24 (of 61)." # Contents: demo/icon/cut.c demo/icon/window_print.c demo/misc/close.c # doc/usrman/croff/croff.l doc/usrman/croff/hash.c src/blit/hash.c # src/default_font.h # Wrapped by rsalz@papaya.bbn.com on Thu Nov 17 21:05:28 1988 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'demo/icon/cut.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'demo/icon/cut.c'\" else echo shar: Extracting \"'demo/icon/cut.c'\" \(6170 characters\) sed "s/^X//" >'demo/icon/cut.c' <<'END_OF_FILE' X/* Copyright (c) 1988 Bellcore X * All Rights Reserved X * Permission is granted to copy or use this program, EXCEPT that it X * may not be sold for profit, the copyright notice must be reproduced X * on copies, and credit should be given to Bellcore where it is due. X * BELLCORE MAKES NO WARRANTY AND ACCEPTS NO LIABILITY FOR THIS PROGRAM. X */ X/* $Header: cut.c,v 1.1 88/07/08 11:11:39 sau Exp $ X $Source: /tmp/mgrsrc/demo/icon/RCS/cut.c,v $ X*/ Xstatic char RCSid_[] = "$Source: /tmp/mgrsrc/demo/icon/RCS/cut.c,v $$Revision: 1.1 $"; X X/* save current cut buffer in a file */ X X#include <signal.h> X#include "term.h" X X#define TERM "mgr" /* name of valid terminal id */ X X#define RESTORE 0 /* restore previous icon */ X#define CLOSED 1 X#define OPEN 2 X#define WINK 3 X X#define ICON_CLOSED "file_shut" X#define ICON_OPEN "file_open" X#define ICON_WINK "file_shutb" X#define CMDNAME "hm -s" /* default command */ X#define SLOP 3 /* space around the window */ X X#define MENU_COUNT (sizeof(menu)/sizeof(struct menu_entry)) X#define max(x,y) ((x)>(y)?(x):(y)) X#define min(x,y) ((x)<(y)?(x):(y)) X#define dprintf if(debug)fprintf X Xint border; XFILE *debug; X Xmain(argc,argv) X int argc; X char **argv; X { X register int i; X char *getenv(); X char *term = getenv ("TERM"); X char *name = argv[0]; X char *cmd; /* command to pipe data to */ X char line[80]; /* event input buffer */ X X int x,y,wide,high; /* main window size */ X int w,h; /* icon size */ X int max_w, max_h; /* max icon size */ X int ix, iy; /* icon position */ X int fw,fh,font; /* font for vi window */ X int got=0; X int shape = 1; /* window reshape? */ X FILE *test; /* temporary file */ X X int clean(); X X if (getenv("DEBUG")) X debug = stderr; X else X debug = NULL; X X /* make sure environment is ok */ X X if (term!=NULL && strcmp(term,TERM)!=0) { X fprintf(stderr,"%s only runs on %s terminals\n",name,TERM); X exit(1); X } X X /* get args */ X X if (argc>1 && strcmp(argv[1],"-s")==0) { /* don't redhape window */ X argc--, argv++; X shape=0; X } X X if (argc>1) X cmd = argv[1]; X else if ((cmd=getenv("CUT")) == NULL) X cmd = CMDNAME; X X /* make sure we can run the command */ X X if ((test = popen(cmd,"w")) == NULL || pclose(test)!=0) { X fprintf(stderr,"%s: Can't start (%s)\n",name,cmd); X exit(1); X } X X /* set up window environment */ X X m_setup(0); X m_ttyset(); X X signal(SIGHUP,clean); X signal(SIGTERM,clean); X signal(SIGINT,clean); X X m_push(P_FONT|P_POSITION|P_EVENT|P_FLAGS); X get_size(&x,&y,&wide,&high); X get_param(0,0,0,&border); X m_setmode(M_NOWRAP); X m_func(B_COPY); X X /* get icons */ X X if (!down_load(ICON_CLOSED,CLOSED,&w,&h)) { X fprintf(stderr,"%s: Can't find %s\n",name,ICON_CLOSED); X clean(1); X } X max_h = h; max_w = w; X X if (!down_load(ICON_OPEN,OPEN,&w,&h)) { X fprintf(stderr,"%s: Can't find %s\n",name,ICON_OPEN); X clean(1); X } X max_h = max(max_h,h); X max_w = max(max_w,w); X X if (!down_load(ICON_WINK,WINK,&w,&h)) { X fprintf(stderr,"%s: Can't find %s\n",name,ICON_WINK); X clean(1); X } X X max_h = max(max_h,h); X max_w = max(max_w,w); X X /* get icon position */ X X m_font(1); /* a small font */ X if (shape) { X m_push(P_FLAGS|P_EVENT); X m_setmode(M_ABS); X m_setevent(BUTTON_1,"Z %p\r"); X fprintf(stderr,"Click button 1 to indicate icon position\n"); X while (*m_gets(line) != 'Z') X ; X sscanf(line,"Z %d %d",&w,&h); X ix = w + x + border; X iy = h + y + border; X m_pop(); X X /* iconify window */ X X m_shapewindow(ix,iy,SLOP+2*border+max_w, SLOP+2*border+max_h); X dprintf(debug,"Shaping window to %d x %d\n",border+max_w, border+max_h); X } X X /* setup events */ X X m_setevent(ACTIVATE,"A\r"); X m_setevent(DEACTIVATE,"D\r"); X m_setevent(REDRAW,"R\r"); X m_setevent(RESHAPE,"S\r"); X m_setevent(SNARFED,"C %c\r"); X m_clearmode(M_ACTIVATE); X X /* display icon */ X X setup(CLOSED); X X /* wait for an event */ X X while(!feof(m_termin)) { X m_flush(); X m_gets(line); X switch(*line) { X case 'A': /* window is activated */ X if (got) { X setup(OPEN); X m_flush(); X m_put(); X m_sendme("\r\005 done\r"); X m_flush(); X append_file(cmd,got); X got = 0; X } X sleep(1); X m_clearmode(M_ACTIVATE); X break; X case 'D': /* window is deactivated */ X setup(CLOSED); X break; X case 'S': /* window is reshaped */ X if (shape) { X get_size(&ix,&iy,0,0); X m_shapewindow(ix,iy,SLOP+2*border+max_w, SLOP+2*border+max_h); X } X setup(RESTORE); X break; X case 'R': /* screen is redrawn */ X setup(RESTORE); X break; X case 'C': /* Someone cut something */ X got = atoi(line+2); /* # of bytes */ X setup(WINK); X m_flush(); X sleep(1); X setup(CLOSED); X } X } X } X X/* Clean up and exit */ X Xclean() X { X m_popall(); X m_ttyreset(); X exit(1); X } X X/* setup an icon */ X Xsetup(where) Xint where; /* bitmap # */ X { X static int was=0; X X if (where==0) /* restore previous icon */ X where = was; X X m_clear(); X m_bitcopyto(0,0,999,999,0,0,0,where); X dprintf(debug,"displaying icon [%d] \n",where); X m_flush(); X was = where; X } X X/* download icon */ X Xint Xdown_load(name,where,w,h) Xchar *name; /* name of icon */ Xint where; /* scratchpad bitmap # */ Xint *w, *h; /* icon size */ X { X char buff[20]; X int n; X X m_bitfromfile(where,name); X m_flush(); X m_gets(buff); X n = sscanf(buff,"%d %d",w,h); X dprintf(debug,"Getting icon [%s] into %d (%d x %d)\n", X name,where,*w,*h); X if (n < 2) X return(0); X else X return(1); X } X Xint Xappend_file(cmd,bytes) Xchar *cmd; /* command to pipe file to */ Xint bytes; X { X FILE *file; X long now = time(0); X char *ctime(); X register int c,count = 0; X int gotn = 0; X X dprintf(stderr,"appending %d bytes\n",bytes); X file = popen(cmd,"w"); X fprintf(file,"\n> %d bytes at: %s ",bytes,ctime(&now)); X X while((c=getc(m_termin)) != '\005') { X if (c=='\n' && gotn++ ==0) { X count++; X putc(c,file); X putc(' ',file); X putc(' ',file); X } X else if (c!= '\n') { X putc(c,file); X gotn = 0; X } X } X fflush(file); X pclose(file); X return(count); X } END_OF_FILE # end of 'demo/icon/cut.c' fi if test -f 'demo/icon/window_print.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'demo/icon/window_print.c'\" else echo shar: Extracting \"'demo/icon/window_print.c'\" \(6454 characters\) sed "s/^X//" >'demo/icon/window_print.c' <<'END_OF_FILE' X/* Copyright (c) 1987 Bellcore X * All Rights Reserved X * Permission is granted to copy or use this program, EXCEPT that it X * may not be sold for profit, the copyright notice must be reproduced X * on copies, and credit should be given to Bellcore where it is due. X * BELLCORE MAKES NO WARRANTY AND ACCEPTS NO LIABILITY FOR THIS PROGRAM. X */ X/* $Header: window_print.c,v 4.1 88/06/21 14:00:15 bianchi Exp $ X $Source: /tmp/mgrsrc/demo/icon/RCS/window_print.c,v $ X*/ Xstatic char RCSid_[] = "$Source: /tmp/mgrsrc/demo/icon/RCS/window_print.c,v $$Revision: 4.1 $"; X X/* print any window on the hp think jet (use lpr filter) */ X X#include <stdio.h> X#include <signal.h> X#include <sys/file.h> X#include "term.h" X#include "dump.h" X X#define TEMP "/tmp/pr." /* temp file name */ X#define MESSAGE "\rwindow dump" /* window message */ X#define WORKING "\rworking..................." /* print in progress */ X#define JOB "window" /* default page header */ X#define OPTION 'v' /* lpr filter option */ X X#define MSG_OK "ok" /* message ack - success */ X#define MSG_BAD "x" /* message nac - failure */ X#define MSG_FILE "F" /* service type - no data */ X#define NAME "print bitmap" /* name of service */ X X#define dprintf if(debug) fprintf X X#define GET_OPT(i) \ X strlen(argv[i])>2 ? argv[i]+2 : argv[++i] X#define Min(x) ((x)<5 ? 5 : (x)) X Xchar command[100]; /* lpr command to run */ Xchar line[100]; /* event input buffer */ Xchar temp[20]; /* temp file name */ Xchar my_host[20]; /* my host */ Xchar mgr_host[20]; /* mgr host */ Xchar title[40]; /* window title */ X Xint remote; /* remote from mgr host */ Xint debug; X Xmain(argc,argv) Xint argc; Xchar **argv; X { X register int i, c; X int x,y; /* bitmap size */ X int id,sub; /* window to dump */ X int clean(); X char *sprintf(); X X char *printer = NULL; /* printer name */ X char *job = JOB; /* job name */ X char *filter = NULL; /* pre-filter */ X char *message = NULL; /* message line */ X char option = OPTION; /* lpr filter */ X char *noprint = NULL; /* just same file */ X X ckmgrterm( *argv ); X gethostname(my_host,sizeof(my_host)); X debug = getenv("DEBUG"); X X /* check arguments */ X X for(i=1;i<argc;i++) { X if (*argv[i] == '-') X switch (argv[i][1]) { X case 'f': /* specify filter */ X filter = GET_OPT(i); X break; X case 'p': /* printer name */ X case 'P': /* printer name */ X printer = GET_OPT(i); X break; X case 'm': /* message line */ X message = GET_OPT(i); X break; X case 'j': /* job name */ X case 'J': /* job name */ X job = GET_OPT(i); X break; X case 'o': /* option flag */ X option = *(GET_OPT(i)); X break; X case 'x': /* dont print name */ X noprint = GET_OPT(i); X break; X default: X fprintf(stderr,"%s: invalid flag %c ignored\n",argv[0],argv[i][1]); X } X else X fprintf(stderr,"%s: invalid argument %s ignored\n",argv[0],argv[i]); X } X X /* setup mgr */ X X m_setup(M_FLUSH); X m_push(P_FLAGS|P_EVENT); X m_ttyset(); X X get_param(mgr_host,0,0,0); X remote = strcmp(mgr_host,my_host); X dprintf(stderr,"my host (%s), mgr host (%s)\n",my_host,mgr_host); X X if (message) X sprintf(title,"\r%s",message); X else if (printer && remote) X sprintf(title,"%s at %s on %s",MESSAGE,my_host,printer); X else if (remote) X sprintf(title,"%s at %s",MESSAGE,my_host); X else if (printer) X sprintf(title,"%s on %s",MESSAGE,printer); X else X strcpy(title,MESSAGE); X X get_size(&x,&y,0,0); X if (!debug) X m_sizeall(x,y,Min(strlen(title)-1),1); X m_setmode(M_NOWRAP); X m_clear(); X m_printstr(title); X m_clearmode(M_ACTIVATE); X X m_setevent(ACTIVATED,"A\r"); /* window made active */ X m_setevent(DEACTIVATED,"D\r"); /* window made in-avtive */ X m_setevent(BUTTON_1,"B %w\r"); /* button 1 hit */ X m_setevent(REDRAW,"R\r"); X m_setevent(RESHAPE,"S\r"); X X signal(SIGHUP,clean); X signal(SIGINT,clean); X signal(SIGTERM,clean); X X /* build command */ X X sprintf(temp,"%s%s%d",TEMP,my_host,getpid()); X dprintf(stderr,"temp file name: (%s)\n",temp); X X if (noprint) { X if (remote) X sprintf(command,"rcp %s:%s %s",mgr_host,temp,noprint); X else X sprintf(command,"cp %s %s",temp,noprint); X } X else { X if (remote) X sprintf(command,"rsh %s cat %s | ",mgr_host,temp); X else X sprintf(command,"< %s ",temp); X if (filter) X sprintf(command+strlen(command),"%s | ",filter); X strcat(command,"lpr "); X if (printer) X sprintf(command+strlen(command),"-P%s ",printer); X sprintf(command+strlen(command),"-J%s -%c",job,option); X } X dprintf(stderr,"command: (%s)\n",command); X X while (m_gets(line) != NULL) { X dprintf(stderr,"main loop got: %s",line); X switch(c = *line) { X case 'S': /* window reshaped */ X get_size(&x,&y,0,0); X if (!debug) X m_sizeall(x,y,strlen(title)-1,1); X m_clear(); X m_printstr(title); X break; X case 'R': /* window redrawn */ X m_printstr(title); X break; X case 'A': /* window activated */ X m_setmode(M_WOB); X break; X case 'D': /* window deactivated */ X m_clearmode(M_WOB); X break; X case 'B': /* button hit */ X id = 0; X sscanf(line+2,"%d.%d",&id,&sub); X dprintf(stderr," got: %d, %d\n",id,sub); X if (id) { X m_othersave(id,sub,temp); X m_clearmode(M_WOB); X m_printstr(WORKING); X sleep(1); X system(command,temp); X if (remote) X system(sprintf(command,"rsh %s rm %s\n",mgr_host,temp)); X else X unlink(temp); X } X m_printstr(title); X m_clearmode(M_ACTIVATE); X break; X } X } X } X Xclean(n) Xint n; X { X m_ttyreset(); X if (remote) X system(sprintf(command,"rsh %s rm %s\n",mgr_host,temp)); X else X unlink(temp); X m_pop(); X m_clear(); X exit(n); X } END_OF_FILE # end of 'demo/icon/window_print.c' fi if test -f 'demo/misc/close.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'demo/misc/close.c'\" else echo shar: Extracting \"'demo/misc/close.c'\" \(6539 characters\) sed "s/^X//" >'demo/misc/close.c' <<'END_OF_FILE' X/* Copyright (c) 1987 Bellcore X * All Rights Reserved X * Permission is granted to copy or use this program, EXCEPT that it X * may not be sold for profit, the copyright notice must be reproduced X * on copies, and credit should be given to Bellcore where it is due. X * BELLCORE MAKES NO WARRANTY AND ACCEPTS NO LIABILITY FOR THIS PROGRAM. X */ X/* $Header: close.c,v 4.6 88/08/08 09:43:38 sau Exp $ X $Source: /tmp/mgrsrc/demo/misc/RCS/close.c,v $ X*/ Xstatic char RCSid_[] = "$Source: /tmp/mgrsrc/demo/misc/RCS/close.c,v $$Revision: 4.6 $"; X X/* close a window - keep icon uncovered */ X X#include <signal.h> X#include "term.h" X X Xstatic int debug = 0; /* for debugging */ X Xstatic int wide, high, xmax, ymax, border; /* global mgr state info */ X X#define Max(x,y) ((x)>(y)?(x):(y)) X#define Min(x,y) ((x)<(y)?(x):(y)) X#define dprintf if (debug) fprintf X X#define XSLOP 6 /* extra horizontal space around window */ X#define YSLOP 2 /* extra vertical space around window */ X#define WAIT 20 /* seconds until next look for an opening */ X#define RAND 11 /* max time to wait before moving */ X X#define Active "A\r" X#define Covered "C\r" X#define Redraw "R\r" X X Xmain(argc,argv) Xint argc; Xchar **argv; X { X char host[16]; /* host name */ X char line[MAXLINE]; /* input buffer for events */ X char text[MAXLINE]; /* text for icon */ X char moving[MAXLINE]; /* text for icon while moving */ X int font; X int clean(); X int sigalrm(); X char *getenv(); X X ckmgrterm( *argv ); X X /* turn on debugging */ X X if (getenv("DEBUG")) X debug++; X X /* get icon text */ X X srand(getpid()); X if (debug) X setbuf(stderr,NULL); X m_setup(M_FLUSH); X m_push(P_ALL & (~P_MOUSE)); X X signal(SIGINT,clean); X signal(SIGTERM,clean); X signal(SIGALRM,sigalrm); X X m_ttyset(); X X if (argc>3) X usage(*argv); X X if (argc>1 && *argv[1] ) { X /* There is a message and it is not zero length */ X text[0] = '\f'; X /* If the string in argv[1] contains a %d, then the window set ID will X be included in the message. X */ X sprintf(&text[1], argv[1], m_setid()); X sprintf(moving, "\fMoving %s", &text[1]); X } X else { X /* No message or it is zero length. */ X gethostname(host,sizeof(host)); X sprintf(text, "\f%s(%d)", host, m_setid()); X sprintf(moving, "\fMoving(%d)", m_setid()); X } X X if (!debug) X m_setmode(M_NOINPUT); X if (argc==3 && (font=atoi(argv[2])) > 0) X m_font(font); X X setupwindow(text); X X /* set events */ X X m_setevent(ACTIVATED,Active); X m_setevent(COVERED,Covered); X m_setevent(REDRAW,Redraw); X X /* bury it and wait */ X X if (!goto_spot(wide,high)) { X /* Window was too big; use font zero and try again */ X m_font( 0 ); X setupwindow( text ); X } X goto_spot(wide,high); X /* no place to go; we'll stay where we are until something opens up */ X X while(1) { X m_clearmode(M_ACTIVATE); X if (!debug) X m_setmode(M_NOINPUT); X m_gets(line); X alarm(0); X m_push(P_EVENT); X m_setevent(COVERED,Covered); X dprintf(stderr,"Read [%s]\n",line); X X if (*line == *Active) /* activate window */ X clean(); X X else if (*line == *Covered) { X m_printstr(moving); X get_size(0,0,&wide,&high); X wide += 2*border+XSLOP; X high += 2*border+YSLOP; X dprintf(stderr,"going to ?,? %d %d\n",wide,high); X sleep(((unsigned)rand()) % RAND); X if (goto_spot(wide,high)) { X m_clearevent(COVERED); X m_clearmode(M_ACTIVATE); X } X else { /* no place to go */ X alarm(WAIT); X } X } X m_printstr(text); X m_pop(); X } X } X X/* restore window state and exit */ X Xstatic Xclean() X { X m_ttyreset(); X m_popall(0); X exit(1); X } X X/* find an unused spot for a window */ X Xstatic Xint Xgoto_spot(wide, high) Xint wide,high; /* minimum spot size */ X { X struct window_data coords[1000]; /* present window coords. go here */ X register int c, X count, X intersection, X setid = m_setid(), X x, X y, nexty; X X while( (count = get_all(coords)) == 0 ) X ; X dprintf(stderr,"found %d windows\n", count); X X /* Find the best spot. We want to avoid too exhaustive a search. X We march through the screen, trying to fit the moving window into X spaces. Any time we collide with a window, we skip to the right edge X of that window and note if it's top edge is the lowest one we've seen X which is still above where we are. This allows us to skip over the X larger areas of occupied screen quickly. X */ X for( y = ymax-high; y >= 0; y = nexty - 1 ) { X nexty = y; X for( x = xmax-wide; x >= 0; x -= 1 ) { X intersection = 0; X for( c = 0; c < count; c++ ) { X if( coords[c].setid == setid ) X continue; X if( in_win( coords+c, x, y, x + wide, y + high ) ) { X intersection = 1; X nexty = Max( y, Max( nexty, coords[c].y - high ) ); X x = coords[c].x - wide; X break; X } X } X if( !intersection ) { X dprintf(stderr,"going to %d, %d\n", x, y); X m_push(P_EVENT); X m_movewindow( x + XSLOP/2, y + YSLOP/2 ); X m_pop(); X return( 1 ); X } X } X } X dprintf(stderr,"no openings\n"); X return( 0 ); X } X X X/* check for window-rectangle intersection */ X Xstatic Xint Xin_win(list,x0,y0,x1,y1) Xregister struct window_data *list; /* window coordinates */ Xregister int x0,y0,x1,y1; /* rectangle coordinates */ X { X return( X ( X list->x + list->w < x0 || x1 < list->x || X list->y + list->h < y0 || y1 < list->y X ) ? 0 : 1); X } X X X/* send an alarm signal */ X Xstatic Xsigalrm() X { X m_sendme(Covered); X } X X Xstatic Xint Xm_setid() X{ X static int setid = -1; X struct window_data window; X X if( setid == -1 ) { X while( get_eachclientwin( &window ) ) X ; X setid = window.setid; X } X return setid; X} X X Xstatic Xusage( pgm ) Xchar *pgm; X{ X fprintf( stderr, "Usage: %s [ message [ fontnumber ] ]\n", pgm ); X fputs( "\ XIf the message is zero-length, the default message is printed.\n\ XIf fontnumber is non-numberic or not available, zero is assumed.\n\ X", stderr ); X exit( 255 ); X} X X Xstatic Xsetupwindow( text ) Xchar *text; X{ X /* change window size */ X X m_size(Max(strlen(text)-1, 5), 1); X m_setmode(M_NOWRAP); X m_printstr(text); X X /* how big is it */ X X get_size(0, 0, &wide, &high); X get_param(0, &xmax, &ymax, &border); X wide += 2*border+XSLOP; X high += 2*border+YSLOP; X} END_OF_FILE # end of 'demo/misc/close.c' fi if test -f 'doc/usrman/croff/croff.l' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'doc/usrman/croff/croff.l'\" else echo shar: Extracting \"'doc/usrman/croff/croff.l'\" \(6025 characters\) sed "s/^X//" >'doc/usrman/croff/croff.l' <<'END_OF_FILE' X%{ X/* X Copyright (c) 1988 Bellcore X All Rights Reserved X Permission is granted to copy or use this program, EXCEPT that it X may not be sold for profit, the copyright notice must be reproduced X on copies, and credit should be given to Bellcore where it is due. X BELLCORE MAKES NO WARRANTY AND ACCEPTS NO LIABILITY FOR THIS PROGRAM. X X $Header: croff.l,v 1.2 88/07/07 10:17:25 sau Exp $ X $Source: /tmp/mgrsrc/doc/usrman/croff/RCS/croff.l,v $ X*/ Xstatic char RCSid_[] = "$Source: /tmp/mgrsrc/doc/usrman/croff/RCS/croff.l,v $$Revision: 1.2 $"; X X/* is this lex abuse? */ X X X#include "hash.h" X X#define dprintf if(debug)fprintf X Xextern struct table_entry keywords_data[]; Xextern struct table_entry *keywords[]; X Xchar *ks,*ke; /* keyword delimeters */ Xchar *cs,*ce; /* comment delimeters */ Xchar *is,*ie; /* identifier delimeters */ Xchar *fs,*fe; /* function delimeters */ Xchar *ps,*pe; /* pre-proc delimeters */ X Xint force = 0; /* force xlation without .SS */ Xint no_troff = 0; /* dont xlate \ etc */ Xint no_lig = 0; /* on't emit troff ligatures (brain damaged imagen) */ Xint debug = 0; /* do debugging */ X X%} X X%START start comment quote XW [ ]* XK [a-zA-Z_][a-zA-Z0-9_]* X X%% X X X^".SS".*$ { /* start source processing */ X static char t1[25],t2[25],t3[25],t4[25]; X int n; X BEGIN start; X if (!force) { X ECHO; X n = sscanf(yytext,".SS %s %s %s %s",t1,t2,t3,t4); X switch(n) { X case 4: case 5: case 6: case 7: case 8: case 9: X ce = t4; X case 3: X ke = t3; X case 2: X cs = t2; X case 1: X ks = t1; X } X } X } X<start,comment,quote>^".SE" { /* end source processing */ X if (!force) X BEGIN 0; X ECHO; X } X<start>"/*" { /* start a comment */ X BEGIN comment; X printf("%s",cs); X ECHO; X dprintf(stderr,"[CS]"); X } X<comment>"*/" { /* end a comment */ X ECHO; X printf("%s",ce); X BEGIN start; X dprintf(stderr,"[CE]"); X } X<start,comment,quote>"\-|" { /* handle troff escapes */ X if (no_troff) X ECHO; X else switch(*yytext) { X case '-': printf("\\-"); break; X case '\\': printf("\\e"); break; X case '|': printf("\\(or"); break; X } X dprintf(stderr,"%s",yytext); X } X<start>\" { /* start quote */ X BEGIN quote; X ECHO; X dprintf(stderr,"[\""); X } X<quote>\\\" { /* \" in a string */ X printf("\\e\""); X } X<quote>\" { /* end quoted string */ X BEGIN start; X ECHO; X dprintf(stderr,"\"]"); X } X<start,comment,quote>[fF][il] | X<start,comment,quote>ff { /* defeat troff ligatures */ X if (no_lig) X printf("%c\\&%c",yytext[0],yytext[1]); X else X ECHO; X dprintf(stderr,"[%s]\n",yytext); X } X<start>^#{W}define | X<start>^#{W}undef | X<start>^#{W}line | X<start>^#{W}include | X<start>^#{W}ifdef | X<start>^#{W}ifndef | X<start>^#{W}if | X<start>^#{W}endif | X<start>^#{W}else { /* pre-processor tokens */ X printf("%s%s%s",ps,yytext,pe); X dprintf(stderr,"%s%s%s","[PS]",yytext,"[PE]"); X } X<start>{K}/{W}\( { /* look for key words - might be functions */ X if (is_entry(keywords,HSIZE,yytext)) X printf("%s%s%s",ks,yytext,ke); X else X printf("%s%s%s",fs,yytext,fe); X } X<start>{K} { /* look for key words - might be identifiers */ X if (is_entry(keywords,HSIZE,yytext)) X printf("%s%s%s",ks,yytext,ke); X else X printf("%s%s%s",is,yytext,ie); X } X%% X X#define GET_OPT(i) \ X strlen(argv[i])>2 ? argv[i]+2 : argv[++i] X Xmain(argc,argv) Xint argc; Xchar **argv; X { X register int i; X register char c = '\0'; X X /* set default values */ X X ks = "\\fB"; /* keywords in bold */ X ke = "\\fP"; X cs = "\\fI"; /* comments in bold */ X ce = "\\fP"; X is = ""; X ie = ""; X fs = ""; X fe = ""; X ps = "\\fB"; /* cpp decl's in bold */ X pe = ""; X X debug = getenv("DEBUG"); X X /* get arguments */ X X for(i=1;i<argc;i++) { X if (*argv[i] == '-') X switch (c = argv[i][1]) { X case 'a': /* add keyword to list */ X add_entry(keywords,HSIZE,GET_OPT(i)); X break; X case 'd': /* delete keyword from list */ X dlt_entry(keywords,HSIZE,GET_OPT(i)); X break; X case 'F': /* force processing without .SS */ X unput('\n');unput('S'); unput('S'); unput('.'); X force++; X break; X case 'l': /* don't pass any ligatures to troff */ X no_lig++; X break; X case 't': /* don't futz with \, | or - \n */ X no_troff++; X break; X case 'p': /* set pre-processor escape prefix */ X ps = GET_OPT(i); X break; X case 'i': /* set identifier escape prefix */ X is = GET_OPT(i); X break; X case 'f': /* set function escape prefix */ X fs = GET_OPT(i); X break; X case 'k': /* set keyword escape prefix */ X ps = ks = GET_OPT(i); X break; X case 'c': /* set comment escape prefix */ X cs = GET_OPT(i); X break; X case 'e': /* set all ending escape prefixen */ X ie = pe = fe = ke = ce = GET_OPT(i); X break; X default: X fprintf(stderr,"%s: flag %s ignored\n",*argv,argv[i]); X break; X } X else switch(c) { /* optional turn-off codes */ X case 'p': X pe = argv[i]; X break; X case 'i': X ie = argv[i]; X break; X case 'f': X fe = argv[i]; X break; X case 'k': X pe = ke = argv[i]; X break; X case 'c': X ce = argv[i]; X break; X default: X fprintf(stderr,"%s: arg [%s] ignored\n",*argv,argv[i]); X break; X } X } X yylex(); X } X Xyywrap() X { X return(1); X } END_OF_FILE # end of 'doc/usrman/croff/croff.l' fi if test -f 'doc/usrman/croff/hash.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'doc/usrman/croff/hash.c'\" else echo shar: Extracting \"'doc/usrman/croff/hash.c'\" \(6039 characters\) sed "s/^X//" >'doc/usrman/croff/hash.c' <<'END_OF_FILE' X/* Copyright (c) 1988 Bellcore X * All Rights Reserved X * Permission is granted to copy or use this program, EXCEPT that it X * may not be sold for profit, the copyright notice must be reproduced X * on copies, and credit should be given to Bellcore where it is due. X * BELLCORE MAKES NO WARRANTY AND ACCEPTS NO LIABILITY FOR THIS PROGRAM. X */ X/* $Header: hash.c,v 1.1 88/07/07 10:12:06 sau Exp $ X $Source: /tmp/mgrsrc/doc/usrman/croff/RCS/hash.c,v $ X*/ Xstatic char RCSid_[] = "$Source: /tmp/mgrsrc/doc/usrman/croff/RCS/hash.c,v $$Revision: 1.1 $"; X X/************************************************************************ X * X * Simple Forms Package Version 1.0 10/83 X */ X X/* table lookup routines */ X X#include "hash.h" X#include <stdio.h> X X/******************************************************************************* X * Generate a hash table index from an arbitrary length string X * This is probably not a good algorithm X */ X Xint XHash(key,max) Xchar *key; /* key to hash on */ Xint max; /* max should be a prime number */ X { X register int i = 0; X register long sum; X for(sum = 0; *key != '\0';i++, sum += (*key++)<<(i&7)); X return((int) (sum % max)); X } X X/******************************************************************************* X * Generate a hash table index from an arbitrary length string X * This is probably not a good algorithm X */ X Xint Xhash(key,max) Xregister char *key; /* key to hash on */ Xint max; /* max should be a prime number */ X { X register int sum; X X for (sum = *key; *key; sum += (*key) * (*(++key))); X return( (sum += *(key-2)) % max); X } X X/******************************************************************************* X * add an entry to the hash table, return count X */ X Xint Xadd_entry(table,size,name) Xstruct table_entry *table[]; /* name of hash table */ Xint size; /* number of table entries */ Xchar *name; /* name to be put in table */ X { X int HASH(), index; X char *alloc(), *save_line(); X register TABLE *list; X X index=HASH(name,size); X for(list=table[index]; list != (TABLE *) 0; list = list -> next) X if (Same(list->name,name)) { X list -> count += 1; X return(list -> count); X } X list = (TABLE *) alloc(sizeof (TABLE)); X list -> name = save_line(name); X list -> next = table[index]; X list -> value = (char *) 0; X list -> count = 1; X table[index] = list; X return(1); X } X X/******************************************************************************* X * remove an entry to the hash table, return count X */ X Xint Xdlt_entry(table,size,name) Xstruct table_entry *table[]; /* pntr to hash table */ Xint size; /* size of hash table */ Xchar *name; /* name to be put in table */ X { X int HASH(), index; X void free(); X register struct table_entry *list, *temp= (struct table_entry *) 0; X index=HASH(name,size); X for(list=table[index]; list != (TABLE *) 0; temp=list,list = list->next) X if (Same(list->name,name)) { X if (list -> count > 0) X list -> count -= 1; X if (list -> count == 0 && !(list->flags&HASH_STATIC)) { X free(list -> name); X if (list -> value) X free(list -> value); X if (list == table[index]) { X table[index] = list->next; X free(list); X } X else { X temp->next = list->next; X free(list); X } X return(0); X } X else return(list -> count); X } X return(-1); X } X X/******************************************************************************* X * get an entry to the hash table, return value X */ X Xchar * Xget_entry(table,size,name) Xstruct table_entry *table[]; Xint size; Xchar *name; /* name to be put in table */ X { X int HASH(), index; X register struct table_entry *list; X X index=HASH(name,size); X for(list=table[index]; list != (TABLE *) 0; list = list -> next) X if (Same(list->name,name)) { X return(list->count > 0 ? list -> value : (char *) 0); X } X return((char *) 0); X } X X/******************************************************************************* X * see if item is in table X */ X Xint Xis_entry(table,size,name) Xstruct table_entry *table[]; Xint size; Xchar *name; /* name to be put in table */ X { X int HASH(), index; X register struct table_entry *list; X X index=HASH(name,size); X for(list=table[index]; list != (TABLE *) 0; list = list -> next) X if (Same(list->name,name)) { X return(list->count); X } X return(0); X } X X/******************************************************************************* X * put an entry to the hash table, return 1 if ok X */ X Xint Xput_entry(table,size,name,value) Xstruct table_entry *table[]; /* name of hash table */ Xint size; /* number of table entries */ Xchar *name; /* name to be put in table */ Xchar *value; /* value to be put into table */ X { X int HASH(), index; X register struct table_entry *list; X char *save_line(); X void free(); X X index=HASH(name,size); X for(list=table[index]; list != (TABLE *) 0; list = list -> next) X if (Same(list->name,name) && !(list->flags&HASH_STATIC)) { X if (list -> value != (char *) 0) free(list -> value); X if (value != (char *) 0) list -> value = save_line(value); X else list->value == (char *) 0; X return(1); X } X return(0); X } X X/******************************************************************************* X * X * allocate space for, and save a string; return its address X */ X Xchar * Xsave_line(string) Xchar *string; X { X char *where,*alloc(),*strcpy(); X X if (string == (char *) 0) string = ""; X where=alloc(strlen(string)+1); X strcpy(where,string); X return(where); X } X X/******************************************************************************* X * X * allocate some space X */ X Xchar * Xalloc(bytes) Xint bytes; X { X char *malloc(),*where; X void exit(); X X if ((where=malloc((unsigned)bytes)) == NULL) { X fprintf(stderr,"no room for %d bytes\n",bytes); X exit(1); X } X return(where); X } END_OF_FILE # end of 'doc/usrman/croff/hash.c' fi if test -f 'src/blit/hash.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/blit/hash.c'\" else echo shar: Extracting \"'src/blit/hash.c'\" \(6027 characters\) sed "s/^X//" >'src/blit/hash.c' <<'END_OF_FILE' X/* Copyright (c) 1988 Bellcore X * All Rights Reserved X * Permission is granted to copy or use this program, EXCEPT that it X * may not be sold for profit, the copyright notice must be reproduced X * on copies, and credit should be given to Bellcore where it is due. X * BELLCORE MAKES NO WARRANTY AND ACCEPTS NO LIABILITY FOR THIS PROGRAM. X */ X/* $Header: hash.c,v 4.1 88/06/21 13:19:05 bianchi Exp $ X $Source: /tmp/mgrsrc/src/blit/RCS/hash.c,v $ X*/ Xstatic char RCSid_[] = "$Source: /tmp/mgrsrc/src/blit/RCS/hash.c,v $$Revision: 4.1 $"; X X/************************************************************************ X * X * Simple Forms Package Version 1.0 10/83 X */ X X/* table lookup routines */ X X#include "hash.h" X#include <stdio.h> X X/******************************************************************************* X * Generate a hash table index from an arbitrary length string X * This is probably not a good algorithm X */ X Xint XHash(key,max) Xchar *key; /* key to hash on */ Xint max; /* max should be a prime number */ X { X register int i = 0; X register long sum; X for(sum = 0; *key != '\0';i++, sum += (*key++)<<(i&7)); X return((int) (sum % max)); X } X X/******************************************************************************* X * Generate a hash table index from an arbitrary length string X * This is probably not a good algorithm X */ X Xint Xhash(key,max) Xregister char *key; /* key to hash on */ Xint max; /* max should be a prime number */ X { X register int sum; X X for (sum = *key; *key; sum += (*key) * (*(++key))); X return( (sum += *(key-2)) % max); X } X X/******************************************************************************* X * add an entry to the hash table, return count X */ X Xint Xadd_entry(table,size,name) Xstruct table_entry *table[]; /* name of hash table */ Xint size; /* number of table entries */ Xchar *name; /* name to be put in table */ X { X int HASH(), index; X char *alloc(), *save_line(); X register TABLE *list; X X index=HASH(name,size); X for(list=table[index]; list != (TABLE *) 0; list = list -> next) X if (Same(list->name,name)) { X list -> count += 1; X return(list -> count); X } X list = (TABLE *) alloc(sizeof (TABLE)); X list -> name = save_line(name); X list -> next = table[index]; X list -> value = (char *) 0; X list -> count = 1; X table[index] = list; X return(1); X } X X/******************************************************************************* X * remove an entry to the hash table, return count X */ X Xint Xdlt_entry(table,size,name) Xstruct table_entry *table[]; /* pntr to hash table */ Xint size; /* size of hash table */ Xchar *name; /* name to be put in table */ X { X int HASH(), index; X void free(); X register struct table_entry *list, *temp= (struct table_entry *) 0; X index=HASH(name,size); X for(list=table[index]; list != (TABLE *) 0; temp=list,list = list->next) X if (Same(list->name,name)) { X if (list -> count > 0) X list -> count -= 1; X if (list -> count == 0 && !(list->flags&HASH_STATIC)) { X free(list -> name); X if (list -> value) X free(list -> value); X if (list == table[index]) { X table[index] = list->next; X free(list); X } X else { X temp->next = list->next; X free(list); X } X return(0); X } X else return(list -> count); X } X return(-1); X } X X/******************************************************************************* X * get an entry to the hash table, return value X */ X Xchar * Xget_entry(table,size,name) Xstruct table_entry *table[]; Xint size; Xchar *name; /* name to be put in table */ X { X int HASH(), index; X register struct table_entry *list; X X index=HASH(name,size); X for(list=table[index]; list != (TABLE *) 0; list = list -> next) X if (Same(list->name,name)) { X return(list->count > 0 ? list -> value : (char *) 0); X } X return((char *) 0); X } X X/******************************************************************************* X * see if item is in table X */ X Xint Xis_entry(table,size,name) Xstruct table_entry *table[]; Xint size; Xchar *name; /* name to be put in table */ X { X int HASH(), index; X register struct table_entry *list; X X index=HASH(name,size); X for(list=table[index]; list != (TABLE *) 0; list = list -> next) X if (Same(list->name,name)) { X return(list->count); X } X return(0); X } X X/******************************************************************************* X * put an entry to the hash table, return 1 if ok X */ X Xint Xput_entry(table,size,name,value) Xstruct table_entry *table[]; /* name of hash table */ Xint size; /* number of table entries */ Xchar *name; /* name to be put in table */ Xchar *value; /* value to be put into table */ X { X int HASH(), index; X register struct table_entry *list; X char *save_line(); X void free(); X X index=HASH(name,size); X for(list=table[index]; list != (TABLE *) 0; list = list -> next) X if (Same(list->name,name) && !(list->flags&HASH_STATIC)) { X if (list -> value != (char *) 0) free(list -> value); X if (value != (char *) 0) list -> value = save_line(value); X else list->value == (char *) 0; X return(1); X } X return(0); X } X X/******************************************************************************* X * X * allocate space for, and save a string; return its address X */ X Xchar * Xsave_line(string) Xchar *string; X { X char *where,*alloc(),*strcpy(); X X if (string == (char *) 0) string = ""; X where=alloc(strlen(string)+1); X strcpy(where,string); X return(where); X } X X/******************************************************************************* X * X * allocate some space X */ X Xchar * Xalloc(bytes) Xint bytes; X { X char *malloc(),*where; X void exit(); X X if ((where=malloc((unsigned)bytes)) == NULL) { X fprintf(stderr,"no room for %d bytes\n",bytes); X exit(1); X } X return(where); X } END_OF_FILE # end of 'src/blit/hash.c' fi if test -f 'src/default_font.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/default_font.h'\" else echo shar: Extracting \"'src/default_font.h'\" \(6467 characters\) sed "s/^X//" >'src/default_font.h' <<'END_OF_FILE' X/* static font file */ X Xstruct font_header default_font_head = { X (char) 22, (char) 8, (char) 16, X (char) 5, (char) 95, (char) 32 X }; X Xshort default_font_image[] = { X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x003c, 0x003c, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000e, 0x0070, 0x0000, X 0x0008, 0x240a, 0x3864, 0x3008, 0x0810, 0x0800, 0x0000, 0x0002, X 0x3c08, 0x3c3c, 0x0c3e, 0x3c7e, 0x3c3c, 0x0000, 0x0400, 0x203c, X 0x1810, 0x781c, 0x787e, 0x7e1c, 0x423e, 0x1e42, 0x40c6, 0x423c, X 0x7c3c, 0x7c3c, 0x7e42, 0x8282, 0x4282, 0x7e20, 0x2004, 0x0000, X 0x2000, 0x4000, 0x0200, 0x0c00, 0x4008, 0x0440, 0x3800, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0808, 0x0000, X 0x0008, 0x240a, 0x54a4, 0x4808, 0x1008, 0x2a00, 0x0000, 0x0002, X 0x4218, 0x4242, 0x0c20, 0x4202, 0x4242, 0x0000, 0x0800, 0x1042, X 0x2410, 0x4422, 0x4440, 0x4022, 0x4208, 0x0244, 0x40c6, 0x6242, X 0x4242, 0x4242, 0x0842, 0x8292, 0x4282, 0x0220, 0x2004, 0x0000, X 0x1000, 0x4000, 0x0200, 0x1200, 0x4008, 0x0440, 0x0800, 0x0000, X 0x0000, 0x0000, 0x1000, 0x0000, 0x0000, 0x0010, 0x0808, 0x0000, X 0x0008, 0x2414, 0x54a8, 0x4808, 0x1008, 0x1c08, 0x0000, 0x0004, X 0x4228, 0x4242, 0x1420, 0x4002, 0x4242, 0x0000, 0x1000, 0x0842, X 0x4228, 0x4442, 0x4240, 0x4042, 0x4208, 0x0248, 0x40aa, 0x6242, X 0x4242, 0x4242, 0x0842, 0x4492, 0x2444, 0x0420, 0x1004, 0x1000, X 0x0800, 0x4000, 0x0200, 0x1000, 0x4000, 0x0040, 0x0800, 0x0000, X 0x0000, 0x0000, 0x1000, 0x0000, 0x0000, 0x0010, 0x0808, 0x0000, X 0x0008, 0x243e, 0x50c8, 0x3008, 0x2004, 0x2a08, 0x0000, 0x0004, X 0x4608, 0x0202, 0x147c, 0x7c04, 0x4242, 0x0808, 0x2000, 0x0402, X 0x4e28, 0x4440, 0x4240, 0x4040, 0x4208, 0x0250, 0x40aa, 0x5242, X 0x4242, 0x4220, 0x0842, 0x4492, 0x2444, 0x0820, 0x1004, 0x2800, X 0x0438, 0x5c3c, 0x3a3c, 0x7c3a, 0x5c38, 0x1c44, 0x08ee, 0x5c3c, X 0x5c3a, 0x2c3c, 0x7c42, 0x4282, 0x4442, 0x7c10, 0x0808, 0x3200, X 0x0008, 0x0014, 0x3808, 0x2000, 0x2004, 0x0808, 0x007e, 0x0008, X 0x4a08, 0x041c, 0x2442, 0x4204, 0x3c42, 0x0808, 0x407e, 0x0204, X 0x5244, 0x7c40, 0x427c, 0x7c40, 0x7e08, 0x0270, 0x40aa, 0x5242, X 0x4242, 0x7c18, 0x0842, 0x4454, 0x1828, 0x0820, 0x0804, 0x4400, X 0x0044, 0x6242, 0x4642, 0x1046, 0x6208, 0x0448, 0x0892, 0x6242, X 0x6246, 0x3242, 0x1042, 0x4282, 0x4442, 0x0410, 0x0808, 0x5a00, X 0x0008, 0x0028, 0x1410, 0x5200, 0x2004, 0x007e, 0x0000, 0x0008, X 0x5208, 0x0802, 0x2402, 0x4208, 0x4242, 0x0000, 0x4000, 0x0208, X 0x5244, 0x4240, 0x4240, 0x404e, 0x4208, 0x0248, 0x4092, 0x4a42, X 0x7c42, 0x4804, 0x0842, 0x287c, 0x1828, 0x1020, 0x0804, 0x8200, X 0x0004, 0x4240, 0x4242, 0x1042, 0x4208, 0x0450, 0x0892, 0x4242, X 0x4242, 0x2040, 0x1042, 0x2492, 0x2822, 0x0860, 0x0806, 0x4c00, X 0x0008, 0x007c, 0x1413, 0x9400, 0x2004, 0x0008, 0x0000, 0x0010, X 0x6208, 0x1002, 0x4402, 0x4208, 0x423e, 0x0000, 0x207e, 0x0408, X 0x4c44, 0x4240, 0x4240, 0x4042, 0x4208, 0x0244, 0x4092, 0x4a42, X 0x4042, 0x4402, 0x0842, 0x2854, 0x2410, 0x2020, 0x0404, 0x0000, X 0x003c, 0x4240, 0x427e, 0x1042, 0x4208, 0x0470, 0x0892, 0x4242, X 0x4242, 0x203c, 0x1042, 0x2492, 0x1024, 0x1010, 0x0808, 0x0000, X 0x0000, 0x0028, 0x5415, 0x8800, 0x2004, 0x0008, 0x0000, 0x0010, X 0x4208, 0x2042, 0x7e42, 0x4210, 0x4202, 0x0000, 0x1000, 0x0800, X 0x40fe, 0x4242, 0x4240, 0x4042, 0x4208, 0x4244, 0x4092, 0x4642, X 0x4042, 0x4442, 0x0842, 0x2844, 0x2410, 0x2020, 0x0404, 0x0000, X 0x0044, 0x4240, 0x4240, 0x1042, 0x4208, 0x0448, 0x0892, 0x4242, X 0x4242, 0x2002, 0x1042, 0x2492, 0x2814, 0x2010, 0x0808, 0x0000, X 0x0008, 0x0050, 0x5425, 0x8800, 0x1008, 0x0008, 0x1800, 0x0820, X 0x4208, 0x4042, 0x0442, 0x4210, 0x4242, 0x0818, 0x0800, 0x1008, X 0x2282, 0x4222, 0x4440, 0x4026, 0x4208, 0x4242, 0x4082, 0x4642, X 0x4042, 0x4242, 0x0842, 0x1044, 0x4210, 0x4020, 0x0204, 0x0000, X 0x0044, 0x6242, 0x4642, 0x1046, 0x4208, 0x0444, 0x0892, 0x4242, X 0x6246, 0x2042, 0x1246, 0x1892, 0x4418, 0x4010, 0x0808, 0x0000, X 0x0008, 0x0050, 0x3826, 0x7600, 0x1008, 0x0000, 0x0800, 0x0820, X 0x3c3e, 0x7e3c, 0x043c, 0x3c10, 0x3c3c, 0x0808, 0x0400, 0x2008, X 0x1c82, 0x7c1c, 0x787e, 0x401a, 0x423e, 0x3c42, 0x7e82, 0x423c, X 0x403c, 0x423c, 0x083c, 0x1044, 0x4210, 0x7e20, 0x0204, 0x0000, X 0x003a, 0x5c3c, 0x3a3c, 0x103a, 0x4208, 0x0442, 0x0892, 0x423c, X 0x5c3a, 0x203c, 0x0c3a, 0x186c, 0x4408, 0x7e10, 0x0808, 0x0000, X 0x0000, 0x0000, 0x1000, 0x0000, 0x0810, 0x0000, 0x0800, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, X 0x0010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0004, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0002, 0x0000, 0x0400, 0x0000, 0x0000, X 0x4002, 0x0000, 0x0000, 0x0000, 0x0008, 0x0010, 0x0808, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0420, 0x0000, 0x1000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, X 0x000e, 0x0000, 0x0000, 0x0000, 0x0000, 0x003c, 0x003c, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0042, 0x0000, 0x4400, 0x0000, 0x0000, X 0x4002, 0x0000, 0x0000, 0x0000, 0x0050, 0x000e, 0x0870, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x003c, 0x0000, 0x3800, 0x0000, 0x0000, X 0x4002, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00fe, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, X 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, X X }; X Xbit_static(default_font,760,16,default_font_image,1); END_OF_FILE # end of 'src/default_font.h' fi echo shar: End of archive 24 \(of 61\). cp /dev/null ark24isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 \ 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 \ 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 \ 55 56 57 58 59 60 61 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 61 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 -- Please send comp.sources.unix-related mail to rsalz@uunet.uu.net.