Path: utzoo!attcan!uunet!cs.utexas.edu!sun-barr!newstop!sun!grip.cis.upenn.edu From: bradley@grip.cis.upenn.edu (John Bradley) Newsgroups: comp.sources.x Subject: v09i100: xv, Patch1, Part01/01 Message-ID: <143883@sun.Eng.Sun.COM> Date: 18 Oct 90 17:33:17 GMT References: Sender: news@sun.Eng.Sun.COM Lines: 1538 Approved: argv@sun.com Submitted-by: bradley@grip.cis.upenn.edu (John Bradley) Posting-number: Volume 9, Issue 100 Archive-name: xv/patch1 Patch-To: xv: Volume 9, Issue 76-83 Minor patches to XV: * modifications for SYSV systems and Convex systems * a 'vprintf' module has been added to allow it to run on machines that don't have 'vprintf' in the standard library (BSD 4.3 machines), * problems with 'olwm' fixed * an Imakefile has been added * quieter compilation on paranoid compilers * an icon has been added * and, of course, some bugs have been fixed John Bradley - University of Pennsylvania - GRASP Lab (bradley@cis.upenn.edu) (apply with 'patch -p 8) { ! fprintf(stderr,"usage: %s [-s size] [-b bits] r1 g1 b1 [r2 g2 b2 ...]\n\n" ! ,argv[0]); ! fprintf(stderr,"\tThis will generate a 1xSIZE vertical color band.\n"); ! fprintf(stderr,"\t(SIZE defaults to %d.) To set your background\n", ! DEFSIZE); fprintf(stderr,"\t'bits' is the number of significant bits in the\n"); fprintf(stderr,"\tcolor specifications. (1-8)\n"); fprintf(stderr,"\tpipe the resulting output into this cmd:\n"); --- 71,80 ---- if (cnt || numcols==0 || high<1 || bits<1 || bits>8) { ! fprintf(stderr,"usage: %s [-s size] [-w width] [-b bits] %s\n\n", ! argv[0], "r1 g1 b1 [r2 g2 b2 ...]"); ! fprintf(stderr,"\tThis will generate a WIDTHxSIZE vertical color band.\n"); ! fprintf(stderr,"\t(Default: 1x%d) To set your background\n",DEFSIZE); fprintf(stderr,"\t'bits' is the number of significant bits in the\n"); fprintf(stderr,"\tcolor specifications. (1-8)\n"); fprintf(stderr,"\tpipe the resulting output into this cmd:\n"); *************** *** 80,91 **** exit(1); } ! printf("P3 1 %d 255\n",high); /* special case code for numcols==1 */ if (numcols==1) { ! for (i=0; i *************** *** 87,94 **** static void TrackPicValues(); static void MakeDispNames(); static int Rect(); ! static int CheckForConfig(); ! static Bool IsConfig(); static void SaveRootInfo(); static void KillOldRootInfo(); static int rd_int(); --- 88,95 ---- static void TrackPicValues(); static void MakeDispNames(); static int Rect(); ! /* static int CheckForConfig(); ! static Bool IsConfig(); */ static void SaveRootInfo(); static void KillOldRootInfo(); static int rd_int(); *************** *** 114,120 **** --- 115,125 ---- /*** Variable Initialization ***/ /*****************************************************/ + #ifdef SYSV + getcwd(initpath, sizeof(initpath)); + #else getwd(initpath); + #endif /* init internal variables */ display = fname = whitestr = blackstr = NULL; *************** *** 450,455 **** --- 455,462 ---- mono = 1; } + iconPix = XCreatePixmapFromBitmapData(theDisp, rootW, icon_bits, + icon_width, icon_height, 1, 0, 1); /* try to load fonts */ if ( (mfinfo = XLoadQueryFont(theDisp,FONT1))==NULL && *************** *** 480,485 **** --- 487,493 ---- if (dispDEEP>1) ncols = 1<256) ncols = 256; /* so program doesn't blow up */ if (numnames==0) { /* no filenames. build one-name (stdio) list */ namelist[0] = STDINSTR; *************** *** 534,539 **** --- 542,548 ---- /* Do The Thing... */ MainLoop(); Quit(0); + return(0); } *************** *** 1059,1068 **** i=ClickCtrl(but_event->x, but_event->y); if (i>=0) { switch (i) { ! case BNEXT: retval=NEXTPIC; done=1; break; ! case BPREV: retval=PREVPIC; done=1; break; case BSAVE: DirBox(1); break; ! case BQUIT: retval=QUIT; done=1; break; case BCROP: DoCrop(); break; case BUNCROP: UnCrop(); break; --- 1068,1077 ---- i=ClickCtrl(but_event->x, but_event->y); if (i>=0) { switch (i) { ! case BNEXT: retval= NEXTPIC; done=1; break; ! case BPREV: retval= PREVPIC; done=1; break; case BSAVE: DirBox(1); break; ! case BQUIT: retval= QUIT; done=1; break; case BCROP: DoCrop(); break; case BUNCROP: UnCrop(); break; *************** *** 1106,1112 **** if (i==S_BOPEN) SelectDir(dList.selected); else if (i==S_BCANC) DirBox(0); else if (i==S_BSAVE) DoSave(); ! else if (i==S_BQUIT) { retval=QUIT; done=1; } } else if (but_event->window == dList.win) { --- 1115,1121 ---- if (i==S_BOPEN) SelectDir(dList.selected); else if (i==S_BCANC) DirBox(0); else if (i==S_BSAVE) DoSave(); ! else if (i==S_BQUIT) { retval = QUIT; done=1; } } else if (but_event->window == dList.win) { *************** *** 1270,1275 **** --- 1279,1285 ---- XSetWindowAttributes xswa; unsigned int xswamask; XWindowAttributes xwa; + XWMHints xwmh; XSizeHints hints; int i,x,y; unsigned int w,h; *************** *** 1291,1296 **** --- 1301,1308 ---- eWIDE = eWIDE / normFact; eHIGH = eHIGH / normFact; } + if (eWIDE < 1) eWIDE = 1; + if (eHIGH < 1) eHIGH = 1; if (fixedaspect && i&WidthValue && i&HeightValue) FixAspect(0,&eWIDE,&eHIGH); else if (i&WidthValue && i&HeightValue) *************** *** 1308,1313 **** --- 1320,1328 ---- if (x+eWIDE > dispWIDE) x = dispWIDE - eWIDE; /* keep on screen */ if (y+eHIGH > dispHIGH) y = dispHIGH - eHIGH; + if (eWIDE < 1) eWIDE = 1; + if (eHIGH < 1) eHIGH = 1; + hints.x = x; hints.y = y; hints.width = eWIDE; hints.height = eHIGH; hints.max_width = dispWIDE; hints.max_height = dispHIGH; *************** *** 1325,1331 **** } if (!mainW) ! mainW = XCreateWindow(theDisp,rootW,x,y,eWIDE,eHIGH,bwidth,0, CopyFromParent, CopyFromParent, xswamask, &xswa); sprintf(winname,"xv %s",name); --- 1340,1346 ---- } if (!mainW) ! mainW = XCreateWindow(theDisp,rootW,x,y,eWIDE,eHIGH,bwidth,CopyFromParent, CopyFromParent, CopyFromParent, xswamask, &xswa); sprintf(winname,"xv %s",name); *************** *** 1333,1338 **** --- 1348,1358 ---- XSetStandardProperties(theDisp,mainW,winname,iconname,None, NULL,0,&hints); + xwmh.input = True; + xwmh.flags = InputHint; + if (iconPix) { xwmh.icon_pixmap = iconPix; xwmh.flags |= IconPixmapHint; } + XSetWMHints(theDisp, mainW, &xwmh); + if (!mainW) FatalError("can't create window!"); } *************** *** 1383,1388 **** --- 1403,1411 ---- *h = dispHIGH; *w = (int) (*w / a + .5); } + + if (*w < 1) *w = 1; + if (*h < 1) *h = 1; } *************** *** 1547,1553 **** XWindowAttributes *xwa; { /* sets window x,y,w,h values */ ! XSizeHints xsh; Window root, parent, *children, child; unsigned int nchildren; XWindowAttributes pxwa; --- 1570,1576 ---- XWindowAttributes *xwa; { /* sets window x,y,w,h values */ ! /* XSizeHints xsh; */ Window root, parent, *children, child; unsigned int nchildren; XWindowAttributes pxwa; *************** *** 1727,1733 **** int mx,my; { Window rW,cW; ! int rx,ry,ox,oy,x,y,active; unsigned int mask; int ty, w; char foo[40]; --- 1750,1756 ---- int mx,my; { Window rW,cW; ! int rx,ry,ox,oy,x,y; unsigned int mask; int ty, w; char foo[40]; *************** *** 1835,1841 **** } ! /***********************************/ static int CheckForConfig() { --- 1858,1864 ---- } ! #ifdef FOOBAR /***********************************/ static int CheckForConfig() { *************** *** 1864,1870 **** } return False; } ! /***********************************/ void MakeRootPic() --- 1887,1893 ---- } return False; } ! #endif /***********************************/ void MakeRootPic() *** ../xv1/xv.h Wed Oct 17 23:25:56 1990 --- ./xv.h Wed Oct 17 14:57:57 1990 *************** *** 16,34 **** * This software is provided "as is" without any express or implied warranty. */ ! #define REVDATE "Rev: 10/9/90" /* include files */ #include #include #include #include - #include /* for 'memset()' prototype */ extern int errno; /* this SHOULD be in errno.h */ extern char *sys_errlist[]; /* this SHOULD be in errno.h */ #include #include #include --- 16,47 ---- * This software is provided "as is" without any express or implied warranty. */ ! #define REVDATE "Rev: 10/17/90" + #ifdef SVR4 + #define DIRENT /* SysV release 4 uses dirent */ + #endif + /* include files */ #include #include #include #include extern int errno; /* this SHOULD be in errno.h */ extern char *sys_errlist[]; /* this SHOULD be in errno.h */ + #ifndef __convexc__ /* Convex doesn't have */ + #include /* for 'memset()' prototype */ + #endif + /* neither IBM AOS 4.3, Convex, nor BSD 4.3 on VAX have */ + #if !defined(ibm032) && !defined(__convexc__) && \ + !(defined(vax) && !defined(ultrix)) + #include + #endif + + #include #include #include *************** *** 35,46 **** #include #include ! #ifndef ibm032 /* IBM RT 4.3 doesn't have malloc.h */ ! #include #endif #ifdef NEEDSTIME - #include #include #include #ifndef sigmask --- 48,59 ---- #include #include ! ! #if defined(NEEDSTIME) || defined(NEEDSDIR) ! #include /* only include once */ #endif #ifdef NEEDSTIME #include #include #ifndef sigmask *************** *** 49,55 **** #endif #ifdef NEEDSDIR - #include #include #include #include --- 62,67 ---- *************** *** 259,264 **** --- 271,277 ---- WHERE XFontStruct *mfinfo, *monofinfo; WHERE Visual *theVisual; WHERE Cursor arrow, cross; + WHERE Pixmap iconPix; /* global vars used by LOAD routines */ WHERE byte *pic; /* ptr to loaded picture */ *** ../xv1/xv24to8.c Wed Oct 17 23:25:57 1990 --- ./xv24to8.c Wed Oct 17 18:22:37 1990 *************** *** 912,924 **** indicies (in pic) */ unsigned long colors[256],col; ! int i, nc, low, high, mid, k; byte *p, *pix; if (maxcol>256) maxcol = 256; /* put the first color in the table by hand */ ! nc = 0; for (i=w*h,p=pic24; i; i--) { col = (*p++ << 16); --- 912,924 ---- indicies (in pic) */ unsigned long colors[256],col; ! int i, nc, low, high, mid; byte *p, *pix; if (maxcol>256) maxcol = 256; /* put the first color in the table by hand */ ! nc = 0; mid = 0; for (i=w*h,p=pic24; i; i--) { col = (*p++ << 16); *************** *** 937,946 **** if (high < low) { /* didn't find color in list, add it. */ /* WARNING: this is an overlapped memory copy. memcpy doesn't do it correctly, hence 'bcopy', which claims to */ bcopy(&colors[low], &colors[low+1], (nc - low) * sizeof(unsigned long)); colors[low] = col; nc++; - if (nc>maxcol) return 0; } } --- 937,946 ---- if (high < low) { /* didn't find color in list, add it. */ /* WARNING: this is an overlapped memory copy. memcpy doesn't do it correctly, hence 'bcopy', which claims to */ + if (nc>=maxcol) return 0; bcopy(&colors[low], &colors[low+1], (nc - low) * sizeof(unsigned long)); colors[low] = col; nc++; } } *** ../xv1/xvdir.c Wed Oct 17 23:25:59 1990 --- ./xvdir.c Wed Oct 17 18:25:46 1990 *************** *** 336,342 **** --- 336,346 ---- numdirnames = 0; + #ifdef SYSV + getcwd(path, sizeof(path)); + #else getwd(path); + #endif if (path[strlen(path)-1] != '/') strcat(path,"/"); /* tack on a trailing '/' to make path consistent */ *************** *** 365,371 **** --- 369,379 ---- /* skip over '.' and '..' */ } else { + #ifdef DIRENT + dirnames[i] = (char *) malloc(strlen(dp->d_name) + 3); + #else dirnames[i] = (char *) malloc(dp->d_namlen + 2); /* +2=filetype + '\0'*/ + #endif if (!dirnames[i]) FatalError("malloc error while reading directory"); strcpy(dirnames[i]+1, dp->d_name); *************** *** 374,382 **** if (lstat(dirnames[i]+1, &st)==0) { ftype = st.st_mode & S_IFMT; /* mask off uninteresting bits */ ! if (ftype == S_IFIFO) dirnames[i][0] = C_FIFO; else if (ftype == S_IFCHR) dirnames[i][0] = C_CHR; - else if (ftype == S_IFDIR) dirnames[i][0] = C_DIR; else if (ftype == S_IFBLK) dirnames[i][0] = C_BLK; else if (ftype == S_IFLNK) dirnames[i][0] = C_LNK; else if (ftype == S_IFSOCK) dirnames[i][0] = C_SOCK; --- 382,392 ---- if (lstat(dirnames[i]+1, &st)==0) { ftype = st.st_mode & S_IFMT; /* mask off uninteresting bits */ ! if (ftype == S_IFDIR) dirnames[i][0] = C_DIR; ! #ifdef S_IFIFO ! else if (ftype == S_IFIFO) dirnames[i][0] = C_FIFO; ! #endif else if (ftype == S_IFCHR) dirnames[i][0] = C_CHR; else if (ftype == S_IFBLK) dirnames[i][0] = C_BLK; else if (ftype == S_IFLNK) dirnames[i][0] = C_LNK; else if (ftype == S_IFSOCK) dirnames[i][0] = C_SOCK; *************** *** 534,540 **** GammifyColors(); } ! i = RBWhich(formatRB); switch (i) { case 0: rv = WriteGIF(fp,thepic,w, h, r, g, b, numcols, RBWhich(colorRB)); --- 544,550 ---- GammifyColors(); } ! rv = 0; i = RBWhich(formatRB); switch (i) { case 0: rv = WriteGIF(fp,thepic,w, h, r, g, b, numcols, RBWhich(colorRB)); *** ../xv1/xvfish.c Wed Oct 17 23:26:22 1990 --- ./xvfish.c Wed Oct 17 14:26:35 1990 *************** *** 102,108 **** --- 102,112 ---- if (!fish) return; if (!fishrunning) return; + #ifdef SVR4 + sighold(SIGALRM); + #else sigblock(sigmask(SIGALRM)); + #endif bzero(&it, sizeof(it)); it.it_interval.tv_usec = 0L; it.it_value.tv_usec = 0L; *************** *** 109,115 **** --- 113,123 ---- setitimer(ITIMER_REAL, &it, (struct itimerval *)0); signal(SIGALRM,SIG_DFL); + #ifdef SVR4 + sigrelse(SIGALRM); + #else sigblock(0); + #endif fishrunning = 0; } *************** *** 159,165 **** --- 167,177 ---- it.it_value.tv_usec = DELAY; signal(SIGALRM,dofish); + #ifdef SVR4 + sigrelse(SIGALRM); + #else sigsetmask(0); + #endif setitimer(ITIMER_REAL, &it, (struct itimerval *)0); } *** ../xv1/xvgam.c Wed Oct 17 23:25:59 1990 --- ./xvgam.c Wed Oct 17 18:39:01 1990 *************** *** 254,260 **** /* called when we've gotten a click inside graph window */ Window rW, cW; ! int x, y, rx, ry, rval; unsigned int mask; int h, vertonly, offx, offy; --- 254,260 ---- /* called when we've gotten a click inside graph window */ Window rW, cW; ! int x, y, rx, ry; unsigned int mask; int h, vertonly, offx, offy; *************** *** 377,383 **** to map to white (255) (roughly). Values between 50 and 200 will cover the output range 0-255. The reponse curve will be slightly 's' shaped. */ ! int i,j,k; static int x[4] = {0,32,224,255}; static int y[4] = {0, 0,255,255}; float yf[4]; --- 377,383 ---- to map to white (255) (roughly). Values between 50 and 200 will cover the output range 0-255. The reponse curve will be slightly 's' shaped. */ ! int i,j; static int x[4] = {0,32,224,255}; static int y[4] = {0, 0,255,255}; float yf[4]; *************** *** 455,461 **** { int i,p, app; ! app = 1; switch (cmd) { case G_BAPPLY: DoGammaApply(1); app = 0; break; --- 455,461 ---- { int i,p, app; ! app = 1; p=0; switch (cmd) { case G_BAPPLY: DoGammaApply(1); app = 0; break; *************** *** 696,703 **** if (max != 0.0) s = (del) / max; else s = 0.0; ! if (s == 0.0) h = NOHUE; ! else { rc = (max - rd) / del; gc = (max - gd) / del; bc = (max - bd) / del; --- 696,703 ---- if (max != 0.0) s = (del) / max; else s = 0.0; ! h = NOHUE; ! if (s != 0.0) { rc = (max - rd) / del; gc = (max - gd) / del; bc = (max - bd) / del; *** ../xv1/xvmisc.c Wed Oct 17 23:25:58 1990 --- ./xvmisc.c Wed Oct 17 18:19:15 1990 *************** *** 62,67 **** --- 62,68 ---- Window win; XSetWindowAttributes xswa; unsigned int xswamask; + XWMHints xwmh; XSizeHints hints; int i,x,y; *************** *** 88,98 **** xswamask = CWBackPixel | CWBorderPixel; win = XCreateWindow(theDisp, rootW, x, y, w, h, ! bwidth, 0, CopyFromParent, CopyFromParent, xswamask, &xswa); if (!win) return(win); /* leave immediately if couldn't create */ XSetStandardProperties(theDisp, win, name, name, None, NULL, 0, &hints); return(win); } --- 89,105 ---- xswamask = CWBackPixel | CWBorderPixel; win = XCreateWindow(theDisp, rootW, x, y, w, h, ! bwidth, CopyFromParent, CopyFromParent, CopyFromParent, xswamask, &xswa); if (!win) return(win); /* leave immediately if couldn't create */ XSetStandardProperties(theDisp, win, name, name, None, NULL, 0, &hints); + + xwmh.input = True; + xwmh.flags = InputHint; + if (iconPix) { xwmh.icon_pixmap = iconPix; xwmh.flags |= IconPixmapHint; } + XSetWMHints(theDisp, win, &xwmh); + return(win); } *************** *** 1377,1382 **** --- 1384,1390 ---- { Cursor c; + c = cross; /* if n < 0 sets normal cursor in all windows n = 0..6 cycles through fish cursors */ *************** *** 1450,1461 **** --- 1458,1477 ---- signal(SIGALRM,onalarm); setitimer(ITIMER_REAL, &it, (struct itimerval *)0); while (1) { + #ifdef SVR4 + sighold(SIGALRM); + #else sigblock(sigmask(SIGALRM)); /* note: have to block, so that ALRM */ + #endif if (timerdone) break; /* doesn't occur between 'if (timerdone)' */ else sigpause(0); /* and calling sigpause(0) */ } + #ifdef SVR4 + sigrelse(SIGALRM); + #else sigblock(0); /* turn ALRM blocking off */ + #endif signal(SIGALRM,SIG_DFL); } *** ../xv1/xvpbm.c Wed Oct 17 23:26:22 1990 --- ./xvpbm.c Wed Oct 17 20:29:09 1990 *************** *** 54,60 **** int c, c1; int w, h, maxv, rv; ! garbage = 0; /* open the stream, if necesary */ fp=fopen(fname,"r"); --- 54,60 ---- int c, c1; int w, h, maxv, rv; ! garbage = maxv = 0; /* open the stream, if necesary */ fp=fopen(fname,"r"); *************** *** 107,113 **** int w,h,raw; { byte *pix; ! int i,j,k,bit; SetISTR(ISTR_FORMAT,"PBM, %s format. (%ld bytes)", --- 107,113 ---- int w,h,raw; { byte *pix; ! int i,j,bit; SetISTR(ISTR_FORMAT,"PBM, %s format. (%ld bytes)", *************** *** 138,144 **** else { /* read raw bits */ ! int trunc = 0; for (i=0, pix=pic; i bitmaps.h + + depend:: bitmaps.h + *** /dev/null Thu Oct 18 00:00:14 1990 --- ./Makefile.std Wed Oct 17 22:54:52 1990 *************** *** 0 **** --- 1,86 ---- + # Makefile for xv + # + + # your C compiler of choice + CC = cc + + # optimization/debugging options for your C compiler + # Note: If you are running on a POSIX-compatible machine, such as an + # IBM RS6000, you MAY need to add '-DDIRENT' to CFLAGS. To determine + # if this is the case, do a 'man readdir' on your machine. If + # readdir() returns a pointer to 'struct direct', you will not have + # to change anything. If, however, readdir() returns a pointer to + # 'struct dirent', you will have to add the '-DDIRENT' to CFLAGS + + # IF YOUR MACHINE DOESN'T HAVE 'vprintf()' OR 'vsprintf()' + # + # Vax BSD and IBM AOS don't have vprintf or vsprintf. + # Note that our local library versions of sprintf have been updated + # to return int, the number of characters in the formatted string, + # whereas the versions in stock 4.3BSD do not so return. You may + # have to remove the "-DINTSPRINTF" below if you're compiling for + # stock 4.3BSD or for some other Vax or RT library package where + # sprintf returns char *. + # + # Also, I define NOVOID on the Vax because I'm using pcc to compile. + # If you use gcc or some other better compiler, this should not be + # necessary. I define NOSTDHDRS on the RT because we don't have + # standard ANSI header files installed for the RT, even though the RT + # compiler claims to be ANSI-compliant. + # + # (for BSD 4.3 VAX, add the following to CFLAGS) + # -DNEED_VPRINTF -DINTSPRINTF -DLONGINT -DNOVOID + # (for (stock) IBM RT AOS 4.3, add the following to CFLAGS) + # -DNEED_VPRINTF -DLONGINT -DNOSTDHDRS + + CFLAGS = -O + + + LIBS = -lX11 -lm + + BITMAPS = bitmaps/grasp bitmaps/penn bitmaps/down bitmaps/down1 \ + bitmaps/up bitmaps/up1 bitmaps/scrlgray bitmaps/gray50 \ + bitmaps/gray25 bitmaps/i_fifo bitmaps/i_chr bitmaps/i_dir \ + bitmaps/i_blk bitmaps/i_lnk bitmaps/i_sock bitmaps/i_reg \ + bitmaps/rb_off bitmaps/rb_on bitmaps/rb_off1 bitmaps/rb_on1 \ + bitmaps/fc_left bitmaps/fc_leftm bitmaps/fc_mid bitmaps/fc_midm \ + bitmaps/fc_right bitmaps/fc_rightm bitmaps/fc_left1 \ + bitmaps/fc_left1m bitmaps/fc_right1 bitmaps/fc_right1m \ + bitmaps/icon + + OBJS = xv.o xvmisc.o xv24to8.o xvgif.o xvpm.o xvinfo.o xvctrl.o xvscrl.o \ + xvgifwr.o xvdir.o xvbutt.o xvpbm.o xvxbm.o xvgam.o xvfish.o \ + vprintf.o + + MISC = README PATCHLEVEL + + .c.o: ; $(CC) -c $(CFLAGS) -o $@ $*.c + + all: xv bggen + + xv: $(OBJS) + $(CC) $(CFLAGS) -o xv $(OBJS) $(LIBS) + + bggen: bggen.c + $(CC) $(CFLAGS) -o bggen bggen.c + + clean: + rm -f $(OBJS) + + tar: + tar cf xv.tar Makefile* Imakefile *.c *.h bitmaps docs $(MISC) + + xv.3100: bitmaps.h + cc -O3 *.c -o xv $(XLIB) + + $(OBJS): xv.h + xv.o: bitmaps.h + xvmisc.o: bitmaps.h + xvinfo.o: bitmaps.h + xvctrl.o: bitmaps.h + xvscrl.o: bitmaps.h + xvbutt.o: bitmaps.h + + bitmaps.h: $(BITMAPS) + cat $(BITMAPS) > bitmaps.h + *** /dev/null Thu Oct 18 00:00:14 1990 --- ./PATCHLEVEL Wed Oct 17 23:38:43 1990 *************** *** 0 **** --- 1,16 ---- + Current patchlevel: 1 + + Rev: 10/9/90 (patchlevel 0 - initial release) + + Rev: 10/17/90 (patchlevel 1) + ------------------------------ + Imakefile added (David Elliot (dce@smsc.sony.com)) + System V release 4 mods (David Elliot (dce@smsc.sony.com)) + Bug in 'quick check' fixed (Arthur Olson (ado@elsie.nci.nih.gov)) + Mods for Convex machines (Anthony Datri (datri@convex.com)) + 'vprintf' module added (Jonathan Kamens (jik@pit-manager.mit.edu)) + window creation bug fixed + added icon + fixed 'Input Focus' probs + added '-w' flag to bggen + various cleanups to shut up 'noisy' compilers *** /dev/null Thu Oct 18 00:00:14 1990 --- ./vprintf.c Wed Oct 17 22:36:26 1990 *************** *** 0 **** --- 1,306 ---- + #ifdef NEED_VPRINTF + + #include + + /* Portable vsprintf by Robert A. Larson */ + /* Portable vfprintf by Robert A. Larson */ + + /* Copyright 1989 Robert A. Larson. + * Distribution in any form is allowed as long as the author + * retains credit, changes are noted by their author and the + * copyright message remains intact. This program comes as-is + * with no warentee of fitness for any purpouse. + * + * Thanks to Doug Gwen, Chris Torek, and others who helped clarify + * the ansi printf specs. + * + * Please send any bug fixes and improvments to blarson@skat.usc.edu . + * The use of goto is NOT a bug. + */ + + /* Feb 7, 1989 blarson First usenet release */ + + /* This code implements the vsprintf function, without relying on + * the existance of _doprint or other system specific code. + * + * Define NOVOID if void * is not a supported type. + * + * Two compile options are available for efficency: + * INTSPRINTF should be defined if sprintf is int and returns + * the number of chacters formated. + * LONGINT should be defined if sizeof(long) == sizeof(int) + * + * They only make the code smaller and faster, they need not be + * defined. + * + * UNSIGNEDSPECIAL should be defined if unsigned is treated differently + * than int in argument passing. If this is definded, and LONGINT is not, + * the compiler must support the type unsingned long. + * + * Most quirks and bugs of the available sprintf fuction are duplicated, + * however * in the width and precision fields will work correctly + * even if sprintf does not support this, as will the n format. + * + * Bad format strings, or those with very long width and precision + * fields (including expanded * fields) will cause undesired results. + */ + + #ifdef OSK /* os9/68k can take advantage of both */ + #define LONGINT + #define INTSPRINTF + #endif + + /* This must be a typedef not a #define! */ + #ifdef NOVOID + typedef char *pointer; + #else + typedef void *pointer; + #endif + + #ifdef INTSPRINTF + #define Sprintf(string,format,arg) (sprintf((string),(format),(arg))) + #else + #define Sprintf(string,format,arg) (\ + sprintf((string),(format),(arg)),\ + strlen(string)\ + ) + #endif + + #if defined(__STDC__) && !defined(NOSTDHDRS) + #include + #else + #include + #endif + + typedef int *intp; + + int vsprintf(dest, format, args) + char *dest; + register char *format; + va_list args; + { + register char *dp = dest; + register char c; + register char *tp; + char tempfmt[64]; + #ifndef LONGINT + int longflag; + #endif + + tempfmt[0] = '%'; + while( (c = *format++) != 0) { + if(c=='%') { + tp = &tempfmt[1]; + #ifndef LONGINT + longflag = 0; + #endif + continue_format: + switch(c = *format++) { + case 's': + *tp++ = c; + *tp = '\0'; + dp += Sprintf(dp, tempfmt, va_arg(args, char *)); + break; + case 'u': + case 'x': + case 'o': + case 'X': + #ifdef UNSIGNEDSPECIAL + *tp++ = c; + *tp = '\0'; + #ifndef LONGINT + if(longflag) + dp += Sprintf(dp, tempfmt, va_arg(args, unsigned long)); + else + #endif + dp += Sprintf(dp, tempfmt, va_arg(args, unsigned)); + break; + #endif + case 'd': + case 'c': + case 'i': + *tp++ = c; + *tp = '\0'; + #ifndef LONGINT + if(longflag) + dp += Sprintf(dp, tempfmt, va_arg(args, long)); + else + #endif + dp += Sprintf(dp, tempfmt, va_arg(args, int)); + break; + case 'f': + case 'e': + case 'E': + case 'g': + case 'G': + *tp++ = c; + *tp = '\0'; + dp += Sprintf(dp, tempfmt, va_arg(args, double)); + break; + case 'p': + *tp++ = c; + *tp = '\0'; + dp += Sprintf(dp, tempfmt, va_arg(args, pointer)); + break; + case '-': + case '+': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '.': + case ' ': + case '#': + case 'h': + *tp++ = c; + goto continue_format; + case 'l': + #ifndef LONGINT + longflag = 1; + *tp++ = c; + #endif + goto continue_format; + case '*': + tp += Sprintf(tp, "%d", va_arg(args, int)); + goto continue_format; + case 'n': + *va_arg(args, intp) = dp - dest; + break; + case '%': + default: + *dp++ = c; + break; + } + } else *dp++ = c; + } + *dp = '\0'; + return dp - dest; + } + + + int vfprintf(dest, format, args) + FILE *dest; + register char *format; + va_list args; + { + register char c; + register char *tp; + register int count = 0; + char tempfmt[64]; + #ifndef LONGINT + int longflag; + #endif + + tempfmt[0] = '%'; + while(c = *format++) { + if(c=='%') { + tp = &tempfmt[1]; + #ifndef LONGINT + longflag = 0; + #endif + continue_format: + switch(c = *format++) { + case 's': + *tp++ = c; + *tp = '\0'; + count += fprintf(dest, tempfmt, va_arg(args, char *)); + break; + case 'u': + case 'x': + case 'o': + case 'X': + #ifdef UNSIGNEDSPECIAL + *tp++ = c; + *tp = '\0'; + #ifndef LONGINT + if(longflag) + count += fprintf(dest, tempfmt, va_arg(args, unsigned long)); + else + #endif + count += fprintf(dest, tempfmt, va_arg(args, unsigned)); + break; + #endif + case 'd': + case 'c': + case 'i': + *tp++ = c; + *tp = '\0'; + #ifndef LONGINT + if(longflag) + count += fprintf(dest, tempfmt, va_arg(args, long)); + else + #endif + count += fprintf(dest, tempfmt, va_arg(args, int)); + break; + case 'f': + case 'e': + case 'E': + case 'g': + case 'G': + *tp++ = c; + *tp = '\0'; + count += fprintf(dest, tempfmt, va_arg(args, double)); + break; + case 'p': + *tp++ = c; + *tp = '\0'; + count += fprintf(dest, tempfmt, va_arg(args, pointer)); + break; + case '-': + case '+': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '.': + case ' ': + case '#': + case 'h': + *tp++ = c; + goto continue_format; + case 'l': + #ifndef LONGINT + longflag = 1; + *tp++ = c; + #endif + goto continue_format; + case '*': + tp += Sprintf(tp, "%d", va_arg(args, int)); + goto continue_format; + case 'n': + *va_arg(args, intp) = count; + break; + case '%': + default: + putc(c, dest); + count++; + break; + } + } else { + putc(c, dest); + count++; + } + } + return count; + } + + vprintf(format, args) + char *format; + va_list args; + { + return vfprintf(stdout, format, args); + } + + #endif *** /dev/null Thu Oct 18 00:00:14 1990 --- ./bitmaps/icon Wed Oct 17 14:13:05 1990 *************** *** 0 **** --- 1,18 ---- + #define icon_width 48 + #define icon_height 29 + static char icon_bits[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x7c, 0x7c, 0x00, 0x7c, 0x5c, 0x00, 0x2e, 0x5c, 0x00, 0x5c, + 0xb8, 0x00, 0x17, 0xb8, 0x00, 0x2e, 0x70, 0x81, 0x0b, 0xb8, 0x00, 0x2e, + 0x70, 0x81, 0x0b, 0x70, 0x01, 0x17, 0xe0, 0xc2, 0x05, 0x70, 0x01, 0x17, + 0xc0, 0xe5, 0x02, 0xe0, 0x82, 0x0b, 0x80, 0x7b, 0x01, 0xe0, 0x82, 0x0b, + 0x00, 0xb7, 0x00, 0xc0, 0xc5, 0x05, 0x00, 0x56, 0x00, 0xc0, 0xc5, 0x05, + 0x00, 0x2e, 0x00, 0x80, 0xeb, 0x02, 0x00, 0x56, 0x00, 0x80, 0xeb, 0x02, + 0x00, 0xb7, 0x00, 0x00, 0x77, 0x01, 0x80, 0x7b, 0x01, 0x00, 0x77, 0x01, + 0xc0, 0xe5, 0x02, 0x00, 0xae, 0x00, 0xe0, 0xc2, 0x05, 0x00, 0xae, 0x00, + 0x70, 0x81, 0x0b, 0x00, 0x5c, 0x00, 0x70, 0x81, 0x0b, 0x00, 0x5c, 0x00, + 0xb8, 0x00, 0x17, 0x00, 0x38, 0x00, 0x5c, 0x00, 0x2e, 0x00, 0x38, 0x00, + 0x3e, 0x00, 0x7c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; dan ---------------------------------------------------- O'Reilly && Associates argv@sun.com / argv@ora.com Opinions expressed reflect those of the author only.