Sun-Spots-Request@RICE.EDU (William LeFebvre) (03/23/88)
SUN-SPOTS DIGEST Monday, 21 March 1988 Volume 6 : Issue 35 Today's Topics: This issue: source! New version of vttool available rastoimp: yet another rasterfile->imPress converter screendump(5) from fig(1) A patch to SUN3 init to make DTR more detectable NEW 3.5 UPGRADE diff Iconedit to PostScript Filter Send contributions to: sun-spots@rice.edu Send subscription add/delete requests to: sun-spots-request@rice.edu Bitnet readers can subscribe directly with the CMS command: TELL LISTSERV AT RICE SUBSCRIBE SUNSPOTS My Full Name Recent backissues are stored on "titan.rice.edu". For volume X, issue Y, "get sun-spots/vXnY". They are also accessible through the archive server: mail the word "help" to "archive-server@rice.edu". ---------------------------------------------------------------------- Date: Mon, 21 Mar 88 16:18:14 CST From: William LeFebvre <phil@Rice.edu> Subject: This issue: source! This issue contains nothing but source code and references to source code. I have included two programs and a shar file that are both almost large enough to justify putting in the archives instead of a digest. So I decided to wrap it all up into one digest instead. Enjoy! William LeFebvre ------------------------------ Date: Fri, 11 Mar 88 13:54:52 EST From: steinmetz!barnett%crd@uunet.uu.net Subject: New version of vttool available I am including my new version of vttool - the vt100 emulator for SunView. Note that this program doesn't handle graphics or special characacters. The new version contains two programs: vtem - a vt100 emulator that uses termcap and will run on any reasonable terminal vttool - a general purpose tool that provides a flexible set of mousable-buttons for use with any tty-based program. samples are included for vtem, csh, and moria. The new version provides greater flexibility, allowing the program, button file, and arguments to be specified from the command line. I am sending it to sun-spots. In a few weeks I will send it to comp.sources.misc. Bruce G. Barnett <barnett@ge-crd.ARPA> <barnett@steinmetz.UUCP> [[ It has been placed in the archives in two separate files: "sun-source/vttool.shar.1" and "sun-source/vttool.shar.2" (52602 and 28014 bytes, respectively). It can be retrieved via anonymous FTP from the host "titan.rice.edu" or via the archive server. For more information about the archive server, send a mail message containing the word "help" to the address "archive-server@rice.edu". Note that this program is in no way related to the "vt100tool" that appeared on the last SUG tape. --wnl ]] ------------------------------ Date: Sun, 20 Mar 88 16:11:44 CST From: William LeFebvre <phil@Rice.edu> Subject: rastoimp: yet another rasterfile->imPress converter This is a little quickie program I cooked up after I installed dumpregion. It seems that all the rasterfile to imPress converters in existence assume that the width of the original image is already padded out to a multiple of 32 bits. This program makes no such assumption, so it will work with any image that dumpregion creates. So, I have added it to the archives as "sun-source/rastoimp.shar" for all who are interested. By the way, imPress is the language that all Imagen laser printers speak. It can be retrieved via anonymous FTP from the host "titan.rice.edu" or via the archive server with the request "send sun-source/rastoimp.shar". For more information about the archive server, send a mail message containing the word "help" to the address "archive-server@rice.edu". William LeFebvre <phil@Rice.edu> ------------------------------ Date: Fri, 11 Mar 88 14:07:01 EST From: ufnmr!gareth@bikini.cis.ufl.edu (Gareth J. Barker) Subject: screendump(5) from fig(1) I recently picked up a copy of fig from the archive server, but was unable to produce hardcopy as we don't have 'ditroff' or 'pic'. The program below was written to overcome this and coverts a fig 'bitmap' file (produced by selecting the bottom item in the fig popup menu) into screendump(5) format for printing with lpr -v. It takes the bitmap filename as its single argument and reads from stdin if no filename is given. Output is always to stdout and can be piped to the printer or redirected for some other use. /* BITDUMP 1.1 - Convert fig(1) bitmap to screendump(5) format * * * * Gareth J Barker - University of Florida - 3/11/88 * * * * GJBARKER@UFFSC.BITNET * * ufnmr!gareth@BIKINI.CIS.UFL.EDU */ #include <stdio.h> #include <pixrect/pixrect_hs.h> main(argc, argv) int argc; char *argv[]; { FILE *fp, *fopen(); int width, height, i; char temp1[30], *temp2, *malloc(); short *data; struct picrect *mp; colormap_t *colormap; int type, copy_flag; unsigned alignment, size; /* Check for a single argument. If it exists use it as the input filename, otherwise read from stdin. */ if (argc >= 3) { fprintf(stderr, "Use: bitdump [filename] \n\n"); exit(1); } if (argc == 2) { if ((fp = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "bitdump: can't open %s \n", argv[1]); exit(1); } } else { fp = stdin; } /* Read bitmap header */ if (fscanf(fp, "WIDTH %d HEIGHT %d", &width, &height) != 2) { fprintf(stderr, "bitdump: incorrect file format \n"); exit(1); } /* Round width to a whole number of words, and get enough memory to hold the bitmap (starting at an even address). */ width = 16 * (((width - 1) / 16) + 1); size = (unsigned) height *width * sizeof(short); alignment = (unsigned) 2 *sizeof(short); if ((data = memalign(alignment, size)) == NULL) { fprintf(stderr, "bitdump: file too big"); } /* Read the bitmap, which is in the form 0xABCD, 0xDCBA, .... */ i = 0; while (fscanf(fp, "%s", temp1) >= 1) { temp2 = temp1 + 2; sscanf(temp2, "%hx", (data + i)); i++; } /* Setup a pixrect, and write it out in screendump(5) format */ mp = mem_point(width, height, 1, data); colormap = NULL; type = RT_STANDARD; copy_flag = 0; pr_dump(mp, stdout, colormap, type, copy_flag); } Gareth J. Barker, University of Florida, Department of Radiology. BITNET : GJBARKER@UFFSC.BITNET INTERNET : ufnmr!gareth@BIKINI.CIS.UFL.EDU UUCP : ...gatech!uflorida!ufnmr!gareth ------------------------------ Date: Sat, 12 Mar 88 18:11:20 +0100 (MET) From: "Bernard Sieloff" <unido!sbsvax!bs@uunet.uu.net> Subject: A patch to SUN3 init to make DTR more detectable Here is a hack to pach /etc/init for SUN3 running SunOS 3.4 or SunOS 3.5. In SUN's original init little time is between exiting of a shell and forking of a new init/getty/shell. Therefore some modems will not properly detect a DTR transition. As a result, e.g. a UUCP login --although it's finished-- won't shut down the transmission line. This can cause mad situations. The following patch inserts in init's handling of multiuser service (multiple()) between the call of rmut(p) and dfork(p) a call of sleep(2). This delay forces DTR staying down long enough to be detected even by the worst modem hardware. People with SUN sources only have to recompile and install the above augmented init; the rest of the world (like me) must patch (sigh)... __________ cut here __________ #include <stdio.h> /* * Hack to delay forking of a new init/getty/shell. * CAUTION: work on a copy of /etc/init in a safe place! * This program will generate a file "init.x" which you * have to install in /etc/init. Then reboot. * The use of this program and all following events are at * YOUR OWN risk and responsability. * Paul Keller & Bernard Sieloff * Universitaet des Saarlandes * Bau 36 - Informatik (Dept. of CS) * Im Stadtwald 15 * D-6600 Saarbruecken 11 - West Germany */ #define HOOK 0x0780L #define INSERT 0x22a0L char patch[] = "\ 4e 56 00 00 2f 2e 00 08 4e b9 00 00 2e 7a 58 4f \ 48 78 00 02 4e b9 00 00 3c 70 58 4f 4e 5e 4e 75 "; /* * linkw a6,#0 patch(p) * movl a6@(8),sp@- int *p; * jsr _rmut:l { * addqw #4,sp rmut(p); * pea 2:w sleep(2); * jsr _sleep:l } * addqw #4,sp * unlk a6 * rts */ char ks[] = "4280"; /* start address of knapsack */ #define N sizeof(patch)/3 #define byte(p) (xtn((p)++) | xtn((p)++)<<4) char buffer[N]; main() { int fd; int i,x; char rs[2]; char *kptr=ks; char *pptr=patch; stretch(); /* make room... */ if ((fd = open("init.x", 2)) < 0) { perror("init.x"); exit(1); } /* first: change header */ lseek(fd, 4L, 0); read(fd, &x, sizeof(int)); x += 200; lseek(fd, 4L, 0); write(fd, &x, sizeof(int)); /* 2nd: patch in start address of knapsack */ rs[0] = byte(kptr); rs[1] = byte(kptr); lseek(fd, HOOK, 0); write(fd, rs, 2); /* 3rd: write knapsack in file */ for (i=0; i<N; i++) { buffer[i] = byte(pptr); ++pptr; } lseek(fd, INSERT, 0); write(fd, buffer, N); close(fd); } xtn(hex) char *hex; { char nibble; switch (*hex) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': nibble = *hex - '0'; break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': nibble = 10 + *hex - 'a'; break; default : perror("convert"); exit(1); } return(nibble); } #define CUT 0x2288 stretch() { FILE *fp, *fp1; int c; int i; if ((fp = fopen("init", "r")) == NULL) { perror("init"); exit(1); } if ((fp1 = fopen("init.x", "w+")) == NULL) { perror("init.x"); exit(1); } for (i = 0;i < CUT;i++) { c = getc(fp); putc(c, fp1); } for (i = 0;i < 200;i++) putc(0, fp1); while ((c = getc(fp)) != EOF) putc(c, fp1); fflush(fp1); fclose(fp); fclose(fp1); } __________ UUCP: ...!uunet!unido!sbsvax!bs | Bernard Sieloff or bs@sbsvax.UUCP | Universitaet des Saarlandes CSNET: bs%sbsvax.uucp@Germany.CSnet | FB 10 - Informatik (Dept. of CS) ARPA: bs%sbsvax.uucp@uunet.UU.NET | Bau 36, Im Stadtwald 15 Phone: +49 681 302 2434 | D-6600 Saarbruecken 11, West Germany [[ All I can say is: "YUCK!" --wnl ]] ------------------------------ Date: 11 Mar 88 23:25:20 GMT From: cyrus@hi.unm.edu (Tait Cyrus) Subject: NEW 3.5 UPGRADE diff I found some bugs, I mean features :-) in the diff file I sent you for the 3.5 UPGRADE shellscript. Here is a NEW diff. [[ I hope the mistakes in the last diff didn't cause anyone any serious problems. --wnl ]] *** UPGRADE Fri Mar 11 16:22:51 1988 --- UPGRADE.org Mon Feb 15 21:31:37 1988 *************** *** 542,554 **** fi # # Create CLIENTLIST from /etc/nd.local ! # ! for CLIENT in `awk -f ./get_client_names < $NDLOCAL ` do ! mkdir /${CLIENT} 2> /dev/null ! CLIENTLIST="${CLIENTLIST} ${CLIENT}" ! set `grep $CLIENT $NDLOCAL | awk '$3 == "0" { print $0 }'` ! ndl=ndl${7} cd /dev /dev/MAKEDEV ${ndl} 2> /dev/null done --- 542,605 ---- fi # # Create CLIENTLIST from /etc/nd.local ! # Looks ugly but handles all possible cases ! # nd.local format ! # user hostname hisunit mydev myoff mysize mylunit maxpkts ! # ! endsym=$ ! ind=0 ! CLIENTLIST="" ! while true; do ! grep " $ind $endsym" $NDLOCAL > /dev/null 2>&1 ! case "$?" in ! 0) ! set `grep " $ind $endsym" $NDLOCAL` ;; ! 1) ! grep " $ind $endsym" $NDLOCAL > /dev/null 2>&1 ! case "$?" in ! 0) ! set `grep " $ind $endsym" $NDLOCAL` ;; ! 1) ! grep " $ind$endsym" $NDLOCAL > /dev/null 2>&1 ! case "$?" in ! 0) ! set `grep " $ind$endsym" $NDLOCAL` ;; ! 1) ! grep " $ind [0-9]$endsym" $NDLOCAL > /dev/null 2>&1 ! case "$?" in ! 0) ! set `grep " $ind [0-9]$endsym" $NDLOCAL` ;; ! 1) ! grep " $ind [0-9]$endsym" $NDLOCAL > /dev/null 2>&1 ! case "$?" in ! 0) ! set `grep " $ind [0-9]$endsym" $NDLOCAL` ;; ! 1) ! break ;; ! esac ;; ! esac ;; ! esac ;; ! esac ;; ! esac ! if [ "$1" = "version" ] ; then ! shift 2 ! fi ! CLIENT=$2 ! case "$1" in ! "#user" ) ! ;; ! "user" ) ! mkdir /${CLIENT} 2> /dev/null ! CLIENTLIST="${CLIENTLIST} ${CLIENT}" ;; ! * ) ! ;; ! esac ! ind=`expr ${ind} + 1` ! done ! for CLIENT in $CLIENTLIST do ! set `grep "user $CLIENT 0" $NDLOCAL | sed s,\/," ",g` ! ndl=ndl${8} cd /dev /dev/MAKEDEV ${ndl} 2> /dev/null done *************** *** 561,568 **** fi elif [ "$SERVERTYPE" = "heter" ]; then for HOSTNAME in ${CLIENTLIST}; do ! set `grep $HOSTNAME $NDLOCAL | awk '$3 == "0" { print $0 }'` ! DISK=ndl${7} fsck -p /dev/${DISK} > /dev/null if mount /dev/${DISK} /${HOSTNAME}; then cd /${HOSTNAME} --- 612,619 ---- fi elif [ "$SERVERTYPE" = "heter" ]; then for HOSTNAME in ${CLIENTLIST}; do ! set `grep "user $HOSTNAME 0" $NDLOCAL | sed s,\/," ",g` ! DISK=ndl${8} fsck -p /dev/${DISK} > /dev/null if mount /dev/${DISK} /${HOSTNAME}; then cd /${HOSTNAME} *************** *** 729,736 **** CLIENTLIST=${CLIENTLIST20} fi for HOSTNAME in ${CLIENTLIST}; do ! set `grep $HOSTNAME $NDLOCAL | awk '$3 == "0" { print $0 }'` ! DISK=ndl${7} if mount /dev/${DISK} /${HOSTNAME}; then # --- 780,787 ---- CLIENTLIST=${CLIENTLIST20} fi for HOSTNAME in ${CLIENTLIST}; do ! set `grep "user $HOSTNAME 0" ${NDLOCAL}.OLD | sed s,\/," ",g` ! DISK=ndl${8} if mount /dev/${DISK} /${HOSTNAME}; then # W. Tait Cyrus (505) 277-0806 University of New Mexico Dept of Electrical & Computer Engineering Parallel Processing Research Group (PPRG) UNM/LANL Hypercube Project Albuquerque, New Mexico 87131 e-mail: cyrus@hc.dspo.gov ------------------------------ Date: Mon, 14 Mar 88 8:19:48 PST From: dean@devvax.jpl.nasa.gov (Dean Okamura) Subject: Iconedit to PostScript Filter Psicon is a shell script that translates iconedit files to Encapsulated PostScript (EPSF). You could try this on dragon.icon for starters: (psicon dragon.ps; echo "showpage") | lpr -Plw Dean Okamura Jet Propulsion Laboratory, M/S 301-260A, 4800 Oak Grove Drive, Pasadena, CA 91109, USA (818) 354-1490 Please send returned mail to dean@devvax.JPL.NASA.GOV. There seems to be mail problems with jpl-devvax. #!/bin/sh # This is a shell archive. echo 'If the files were unpacked, "End of SHAR" will be echoed' echo Extracting psicon.sh sed >psicon.sh <<'!Hello!Kitty!' -e 's/X//' X#!/bin/sh X## @(#)psicon.sh 1.00 SFOC WSE <03/11/88> X#ifdef Copyright X## X## Copyright 1988 by Dean Okamura X## X## Permission to use, copy, modify, and distribute this software X## and its documentation for any purpose and without fee is X## hereby granted, provided that the above copyright notice X## appear in all copies and that both that copyright notice and X## this permission notice appear in supporting documentation, and X## that the name of Dean Okamura not be used in advertising or X## publicity pertaining to distribution of the software without X## specific, written prior permission. Dean Okamura makes no X## representations about the suitability of this software for X## any purpose. It is provided "as is" without express or X## implied warranty. X## X#endif Copyright X#ifdef Header X## X## MANUAL X## PSICON 1 "March 11, 1988" X## NAME X## psicon -- iconedit to PostScript filter X## SYNOPSIS X## psicon file X## DESCRIPTION X## _ psicon translates iconedit _ file to Encapsulated PostScript X## File (EPSF) and writes to the standard output. X## INPUTS X## _ file is a iconedit _ file. X## OUTPUTS X## standard output. X## RETURN VALUES X## [0] Successful. X## NOTES X## The output from _ psicon can be printed on the LaserWriter X## by adding a line at the end of the file with the PostScript X## showpage operator. A typical Unix command would be: X## X## (psicon file; echo "showpage") | lpr -Plw X## X## PostScript is a trademark of Adobe Systems Incorporated. X## SEE ALSO X## iconedit(1). X## X#endif Header X# Assert: iconedit format X# Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16 Xfor i in `grep 'Format_version' $1 | sed 's/,//g'` Xdo X case $i in X Width=*) Width=`echo "$i" | sed 's/Width=//'` ;; X Height=*) Height=`echo "$i" | sed 's/Height=//'` ;; X esac Xdone X X# PostScript prologue Xecho "%!PS-Adobe-1.0" Xecho "%%Title:$1 icon" Xecho "%%Creator:`basename $0`" Xecho "%%For:`whoami`" Xecho "%%CreationDate:`date`" Xecho "%%BoundingBox:72 72 144 144" Xecho "%%EndComments" X X# PostScript image printing procedure Xecho "/picstr 16 string def" Xecho "/Icon" Xecho "{ 0 setgray" Xecho " $Width $Height true [$Width 0 0 -$Height 0 $Height]" Xecho " { currentfile picstr readhexstring pop } imagemask" Xecho "} def" Xecho "%%EndProlog" Xecho "gsave" X X# lower left hand corner and scale Xecho "72 72 translate" Xecho "72 72 scale" Xecho "Icon" X X# change to picstr by removing 0x prefix, spaces, tabs, and commas Xgrep '0x.*0x.*0x.*0x' $1 | sed -e ' Xs/0x//g Xs/[ , ]//g' X# ^---<tab><comma><space> pattern X X# PostScript end Xecho "grestore" Xecho "%%Trailer" X# icon !Hello!Kitty! echo "" echo "End of SHAR" exit ------------------------------ End of SUN-Spots Digest ***********************