siegel@hc.DSPO.GOV (josh Siegel) (03/28/89)
The remote server will be built into the mini-NeWS... I will post the pieces you need in the next day or two. --Josh Siegel To compile: % cc -o wy wy.c % cc -o pshexec pshexec.c to run: % cat /etc/termcap | wy wc > o (the bottom of 0 will have the word count) % pshexec popup.ps ls #! /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 shell archive." # Contents: popup.ps pshexec.c wy.c # Wrapped by siegel@eggroll on Mon Mar 27 21:38:31 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'popup.ps' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'popup.ps'\" else echo shar: Extracting \"'popup.ps'\" \(171 characters\) sed "s/^X//" >'popup.ps' <<'END_OF_FILE' X% Example by Don Hopkins X X{ currentcursorlocation X [ ($@ $0 $1 $2 $3 $4 $5 $6 $7 $8 $9) X { currentfile 80 string readline not { exit } if } loop X ] popmsg pop } Xexec END_OF_FILE if test 171 -ne `wc -c <'popup.ps'`; then echo shar: \"'popup.ps'\" unpacked with wrong size! fi # end of 'popup.ps' fi if test -f 'pshexec.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'pshexec.c'\" else echo shar: Extracting \"'pshexec.c'\" \(2437 characters\) sed "s/^X//" >'pshexec.c' <<'END_OF_FILE' X X/* X * Written by Josh Siegel X * siegel@hc.dspo.gov X * X * Mon Mar 27, 1989 X * X * Does ${0-9} substitution as well as $@ X * X */ X X X#include <stdio.h> X#include <ctype.h> X#include <sys/param.h> X#include <sys/types.h> X#include <sys/stat.h> X#include <sys/file.h> X#include <sys/socket.h> X#include <netinet/in.h> X#include <netdb.h> X Xchar cwd[MAXPATHLEN]; X Xmain(argc, argv) X int argc; X char *argv[]; X{ X int ns; X X X ns = open_news(); X if (ns < 0) { X perror("phone"); X exit(0); X } X X X dump_out(ns, argv[1],argv,argc); X X dup2(ns, 1); X dup2(ns, 0); X execvp(argv[2], &argv[2]); X} Xdump_out(news, file,argv,argc) X int news,argc; X char *file; X char *argv[]; X{ X struct stat fbuf; X int n, fd; X register char *buf,*p,*p2; X X getwd(cwd); X X n = stat(file, &fbuf); /* st_size */ X X if (n != 0) { X perror("stat"); X exit(0); X } X buf = (char *) malloc(fbuf.st_size); X X fd = open(file, O_RDONLY); X if (fd < 0) { X perror(file); X exit(0); X } X n=read(fd, buf, fbuf.st_size); X buf[n] = '\0'; X close(fd); X X p2 = p = buf; X while(1) { X while(*p2!='$' && *p2!='\0') X p2++; X write(news, p, p2-p); X if(*p2=='\0') X break; X p2++; X if(*p2>='0' && *p2 <= '9') { X if(*p2-'0'+2 < argc) X write(news,argv[*p2-'0'+2],strlen(argv[*p2-'0'+2])); X } X else X switch(*p2) { X case '@': X write(news,cwd,strlen(cwd)); X break; X default: X write(news,p2-1,2); X break; X } X p2++; X p = p2; X } X X free(buf); X} X/* X Phone: Connects to a established port setup by accept(). X*/ Xopen_news() X{ X char *p, *p2, *p3; X int news; X X p = (char *) getenv("NEWSSERVER"); X X if (p) { X p2 = (char *) index(p, '.') + 1; X p3 = (char *) index(p2, ';'); X *p3++ = '\0'; X news = phone(atoi(p2), p3); X } else X news = phone(2000, "localhost"); X X if (news < 0) { X perror("phone"); X exit(0); X } X return (news); X} Xphone(port, host) X int port; X char host[]; X{ X X struct sockaddr_in sin; X struct servent *sp; X struct hostent *hp; X int s, *p; X char buff[255]; X X bzero((char *) &sin, sizeof(sin)); X X sin.sin_port = port; X X hp = gethostbyname(host); X X if (hp == NULL) X return (-1); X X bcopy(hp->h_addr, (char *) &sin.sin_addr, hp->h_length); X sin.sin_family = hp->h_addrtype; X s = socket(AF_INET, SOCK_STREAM, 0); X if (s < 0) X return (-1); X X if (connect(s, &sin, sizeof(sin)) < 0) { X close(s); X return (-1); X } X return (s); X} END_OF_FILE if test 2437 -ne `wc -c <'pshexec.c'`; then echo shar: \"'pshexec.c'\" unpacked with wrong size! fi # end of 'pshexec.c' fi if test -f 'wy.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'wy.c'\" else echo shar: Extracting \"'wy.c'\" \(384 characters\) sed "s/^X//" >'wy.c' <<'END_OF_FILE' X/* X * Written by Josh Siegel X * siegel@hc.dspo.gov X * X * Mon Mar 27, 1989 X */ X Xmain(argc,argv) Xint argc; Xchar *argv[]; X{ X int fildes[2],n; X char buff[4096]; X X pipe(fildes); X X if(fork()) { X close(fildes[0]); X while(n=read(0,buff,sizeof(buff))) { X write(1,buff,n); X write(fildes[1],buff,n); X } X } else { X close(fildes[1]); X dup2(fildes[0],0); X execvp(argv[1],&argv[1]); X } X} END_OF_FILE if test 384 -ne `wc -c <'wy.c'`; then echo shar: \"'wy.c'\" unpacked with wrong size! fi # end of 'wy.c' fi echo shar: End of shell archive. exit 0 -- Josh Siegel (siegel@hc.dspo.gov) I like using a C-47A "puff dragon" to go shooting beer cans with.