nick@ultima.cs.uts.oz (Nick Andrew) (07/13/89)
echo x - MANIFEST sed '/^X/s///' > MANIFEST << '/' Xtotal 35 X-rw-r--r-- 1 root 1136 Jul 13 21:17 MANIFEST X-rw-r--r-- 1 root 2447 Jul 13 21:12 config.h.d X-rw-r--r-- 1 root 1269 Jul 13 21:12 config_std.h.d X-rw-r--r-- 1 root 1157 Jul 13 21:12 digest.c.d X-rw-r--r-- 1 root 457 Jul 13 21:12 envir_set.c.d X-rw-r--r-- 1 root 1437 Jul 13 21:12 getch.c.d X-rw-r--r-- 1 root 918 Jul 13 21:12 help.c.d X-rw-r--r-- 1 root 4374 Jul 13 21:09 makefile X-rw-r--r-- 1 root 1064 Jul 13 21:12 pagefile.c.d X-rw-r--r-- 1 root 565 Jul 13 21:12 printex.c.d X-rw-r--r-- 1 root 1448 Jul 13 21:13 reader.c.d X-rw-r--r-- 1 root 1093 Jul 13 21:10 regcompat.c X-rw-r--r-- 1 root 1695 Jul 13 21:13 session.c.d X-rw-r--r-- 1 root 441 Jul 13 21:13 sig_set.c.d X-rw-r--r-- 1 root 480 Jul 13 21:13 stat.c.d X-rw-r--r-- 1 root 680 Jul 13 21:13 std.c.d X-rw-r--r-- 1 root 454 Jul 13 21:13 tty.h.d X-rw-r--r-- 1 root 985 Jul 13 21:13 tty_set.c.d X-rw-r--r-- 1 root 584 Jul 13 21:13 userlist.c.d X-rw-r--r-- 1 root 494 Jul 13 21:13 vn.c.d X-rw-r--r-- 1 root 604 Jul 13 21:13 vn.h.d / echo x - README sed '/^X/s///' > README << '/' X Here are diffs to Vn to make it run under Minix. The base version Xof Vn used was the 1/88 version + 4/88 modifications (both posted in Xcomp.sources.unix). This version should run on a bog-standard Minix 1.3c Xor 1.4a. Mine isn't quite bog standard, so your mileage may vary :-) X XYou may be wondering why have Vn for Minix? After all, it doesn't even Xhave News yet. This project is top-down. I'm now working on porting XNews - it partially works already, but needs more changes yet. With the Xrecent postings of binmail and UUPC, I thought a Vn posting was appropriate. X XThe diffs are posted in 3 parts; this is part 0, you need the other two Xparts, unshar them, and run the resulting files through patch. If there Xis demand from the net, I will post full sources (approx 170k). X XChanges involved fixing #includes, shortening some long function names, Xworking around a couple of compiler and/or preprocessor bugs, customising Xuser options for Minix, massaging incompatible regexp to make a square peg Xfit in a round hole, nicening the display, fixing a REAL BUG in Vn, and Xother miscellaneous things where Minix is braindead (e.g. 3 argument open). X X Shar and enjoy ... X XIf mail to nick@nswitgould.oz fails, try nick@ultima.cs.uts.oz ... X / echo x - config.h.d sed '/^X/s///' > config.h.d << '/' X*** Orig/config.h Sat Jul 1 22:01:48 1989 X--- Minix/config.h Thu Jul 13 20:31:11 1989 X*************** X*** 6,16 **** X ** see copyright disclaimer / history in vn.c source file X */ X X! #define DEF_ED "/usr/ucb/vi" /* editor to use if no EDITOR variable */ X #define DEF_PS1 "$ " /* ! command prompt if no PS1 */ X #define DEF_SAVE "" /* save file */ X X! #define DEF_PRINT "/usr/ucb/lpr" /* print command */ X X #define DEF_CCFILE "author_copy" X #define DEF_KEYXLN ".vnkey" X--- 6,16 ---- X ** see copyright disclaimer / history in vn.c source file X */ X X! #define DEF_ED "/bin/mined" /* editor to use if no EDITOR variable */ X #define DEF_PS1 "$ " /* ! command prompt if no PS1 */ X #define DEF_SAVE "" /* save file */ X X! #define DEF_PRINT "/usr/bin/lpr" /* print command */ X X #define DEF_CCFILE "author_copy" X #define DEF_KEYXLN ".vnkey" X*************** X*** 21,27 **** X ** Set to "" if you don't like it answering "yes" for you, or "y" X ** if you only want to have to erase one character to say "no", etc. X */ X! #define QUIT_ANSWER "yes" X X /* X ** default terminal assumed if TERM variable is unset. Since TERM has to X--- 21,27 ---- X ** Set to "" if you don't like it answering "yes" for you, or "y" X ** if you only want to have to erase one character to say "no", etc. X */ X! #define QUIT_ANSWER "" X X /* X ** default terminal assumed if TERM variable is unset. Since TERM has to X*************** X*** 29,35 **** X ** which will cause failure, unless EVERYBODY has the same kind of terminal X ** or you don't really use a standard UNIX environment. X */ X! #define DEF_TERM "<unspecified TERM variable>" X X /* X ** foreground flag for messages. applies only if JOBCONTROL undefined X--- 29,35 ---- X ** which will cause failure, unless EVERYBODY has the same kind of terminal X ** or you don't really use a standard UNIX environment. X */ X! #define DEF_TERM "minix" X X /* X ** foreground flag for messages. applies only if JOBCONTROL undefined X*************** X*** 104,109 **** X ** and avoiding calls to system functions like ctime() and time() which may X ** have system dependent quirks. X ** X! #define VNLOGFILE "/usr/rti/fe/bobm/vn.log" X! #define VNSTATFILE "/usr/rti/fe/bobm/vn.stat" X! */ X--- 104,109 ---- X ** and avoiding calls to system functions like ctime() and time() which may X ** have system dependent quirks. X ** X! */ X! #define VNLOGFILE "/usr/tmp/vn.log" X! #define VNSTATFILE "/usr/tmp/vn.stat" / echo x - config_std.h.d sed '/^X/s///' > config_std.h.d << '/' X*** Orig/config_std.h Sat Jul 1 20:11:58 1989 X--- Minix/config_std.h Thu Jul 13 20:31:11 1989 X*************** X*** 23,29 **** X ** of the address lines to choose from, or to input a new one. MAILCHOOSE X ** makes MAILSMART irrelevant, but the two are independent of INLETTER. X ** X- #define MAILCHOOSE X */ X #define MAILSMART X #define INLETTER X--- 23,28 ---- X*************** X*** 38,44 **** X #else X #define DEF_MAIL "/bin/mail" X #endif X! ** OLDRC defined for an apparently earlier news version which took unnamed X ** command line options as synonyms for -n, and did not take ranges in X ** the .newsrc file. Probably useless, but kept in for historical reasons. X ** X--- 37,44 ---- X #else X #define DEF_MAIL "/bin/mail" X #endif X! X! /* OLDRC defined for an apparently earlier news version which took unnamed X ** command line options as synonyms for -n, and did not take ranges in X ** the .newsrc file. Probably useless, but kept in for historical reasons. X ** X*************** X*** 58,64 **** X /* X ** maximum number of option lines in .newsrc X */ X! #define OPTLINES 60 X X /* X ** maximum number of filter options X--- 58,64 ---- X /* X ** maximum number of option lines in .newsrc X */ X! #define OPTLINES 20 X X /* X ** maximum number of filter options / echo x - digest.c.d sed '/^X/s///' > digest.c.d << '/' X*** Orig/digest.c Sat Jul 1 20:13:27 1989 X--- Minix/digest.c Thu Jul 13 20:31:12 1989 X*************** X*** 33,39 **** X #define FHDLEN 6 X #define DHDLEN 6 X X! digest_page (idx,skip) X int idx; X { X char name[24]; X--- 33,39 ---- X #define FHDLEN 6 X #define DHDLEN 6 X X! dige_page (idx,skip) X int idx; X { X char name[24]; X*************** X*** 81,87 **** X /* X returns name of file containing "article", NULL for failure X */ X! char * digest_extract (s,art,hdr,start) X char *s; X int art; X ARTHEADER *hdr; X--- 81,87 ---- X /* X returns name of file containing "article", NULL for failure X */ X! char * dige_extract (s,art,hdr,start) X char *s; X int art; X ARTHEADER *hdr; X*************** X*** 199,205 **** X for (ptr = strtok(tmp," "); ptr != NULL; ptr = strtok(NULL," ")) X { X i = atoi(ptr); X! if ((new = digest_extract(ns,i,&hdr,&pos)) != NULL) X { X sprintf (out,"%s ",new); X out += strlen(new) + 1; X--- 199,205 ---- X for (ptr = strtok(tmp," "); ptr != NULL; ptr = strtok(NULL," ")) X { X i = atoi(ptr); X! if ((new = dige_extract(ns,i,&hdr,&pos)) != NULL) X { X sprintf (out,"%s ",new); X out += strlen(new) + 1; / echo x - envir_set.c.d sed '/^X/s///' > envir_set.c.d << '/' X*** Orig/envir_set.c Sat Jul 1 22:01:49 1989 X--- Minix/envir_set.c Thu Jul 13 20:31:13 1989 X*************** X*** 9,15 **** X X #include <stdio.h> X #include <pwd.h> X! #include <sys/param.h> X #include "tune.h" X #include "config.h" X #include "vn.h" X--- 9,20 ---- X X #include <stdio.h> X #include <pwd.h> X! X! #ifndef MINIX X! /* minix does not have this */ X! #include <sys/param.h> X! #endif X! X #include "tune.h" X #include "config.h" X #include "vn.h" / echo x - getch.c.d sed '/^X/s///' > getch.c.d << '/' X*** Orig/getch.c Sat Jul 1 22:01:54 1989 X--- Minix/getch.c Thu Jul 13 20:31:13 1989 X*************** X*** 27,34 **** X int i, j; X static char ckseq[32]; X X! /* Check for leading count */ X! for (i = 0; isdigit(*c = getchar() & CHMASK); i = i * 10 + *c - '0') X ; X X /* @#$!!! flakey front ends that won't map newlines in raw mode */ X--- 27,38 ---- X int i, j; X static char ckseq[32]; X X! #ifdef MINIX X! fflush(stdout); X! #endif X! X! /* Check for leading count */ X! for (i = 0; isdigit(*c = getc(stdin) & CHMASK); i = i * 10 + *c - '0') X ; X X /* @#$!!! flakey front ends that won't map newlines in raw mode */ X*************** X*** 55,61 **** X if( strcmp(ckseq, Kl) == 0 ) { *c = UP; break; } X if( strcmp(ckseq, Kr) == 0 ) { *c = DOWN; break; } X #endif X! *c = (getchar() & CHMASK); X ckseq[++j] = *c; ckseq[j+1] = '\0'; X } X } X--- 59,65 ---- X if( strcmp(ckseq, Kl) == 0 ) { *c = UP; break; } X if( strcmp(ckseq, Kr) == 0 ) { *c = DOWN; break; } X #endif X! *c = (getc(stdin) & CHMASK); X ckseq[++j] = *c; ckseq[j+1] = '\0'; X } X } X*************** X*** 74,80 **** X getnoctl () X { X char c; X! while (iscntrl(c = getchar() & CHMASK)) X { X if (c == '\015' || c == '\012') X c = '\n'; X--- 78,88 ---- X getnoctl () X { X char c; X! X! #ifdef MINIX X! fflush(stdout); X! #endif X! while (iscntrl(c = getc(stdin) & CHMASK)) X { X if (c == '\015' || c == '\012') X c = '\n'; / echo x - help.c.d sed '/^X/s///' > help.c.d << '/' X*** Orig/help.c Sat Jul 1 22:01:56 1989 X--- Minix/help.c Thu Jul 13 20:31:15 1989 X*************** X*** 87,92 **** X--- 87,94 ---- X X #define HTSIZE (sizeof(Helptab)/sizeof(struct HELPTAB)) X X+ X+ #define HHLINES 5 /* lines (CRs + 1) contained in HELP_HEAD */ X /* X help from main screen X */ X*************** X*** 98,104 **** X X term_set (ERASE); X lim = L_allow + RECBIAS - 2; X! printf("%s\n",HELP_HEAD); X lcount = HHLINES; X for (i=0; i < HTSIZE; ++i) X { X--- 100,109 ---- X X term_set (ERASE); X lim = L_allow + RECBIAS - 2; X! printf("%s\n","[...] = effect of optional number preceding command\n"); X! printf("%s\n","pipes are specified by filenames beginning with |\n"); X! printf("%s\n","articles specified as a list of numbers, title search string, or\n"); X! printf("%s\n"," * to specify marked articles. ! may be used to negate any\n"); X lcount = HHLINES; X for (i=0; i < HTSIZE; ++i) X { / echo x - makefile sed '/^X/s///' > makefile << '/' X# CFLAGS: X# set -DJOBCONTROL if you have job control (BSD). X# set -DSYSV -Dindex=strchr -Drindex=strrchr on Sytem V systems X# set -Dregfree=free if you DON'T include reg.s (SYSV + some BSD) X# X# JOBCONTROL could be done as #ifndef SYSV, I suppose, but this clearly X# marks that particular difference. X# X# LIBS: X# should point to any extra libraries needed, such as termcap. You X# may want to change this to use the curses termcap cover. If you need X# to pull in another library to get regex / regcmp or strtok on non-SYSV X# systems, you may want to put that here X# X# EXTRAOBJS: X# may be used to include tmpnam.s, strtok.s, reg.s in the list. X# X# These objects implement SYSV utilities for BSD machines. X# X# strtok.s implements strtok() / strpbrk(). reg.s implements regex()/regcmp() X# on top of the BSD regular expression library (regex() allows multiple X# regular expressions). tmpnam.s implements tmpnam() of course. X# X# If you have them, use your own regex/regcmp, because: X# X# i) They should be faster than the reg.c code, which X# recompiles the "current" ucb string every time you X# switch regular expressions. X# X# ii) I briefly checked out reg.c once, and it seemed to X# work. Our system has the "real" calls available, so I X# run with those. reg.c hasn't been used much by me, although X# I've had nobody tell me it doesn't work. X# X# if you DON'T include reg.s, be sure you set -Dregfree=free in CFLAGS. X# X# As with regex, if you have a system strtok(), it is likely more efficient - X# string routines will often be done in assembler on a given machine. X# X# Even if you have it, you can use tmpnam.s anyhow. This version will tailor X# the temp file name to vnXXXXXX, instead of a generic tmpXXXXXX. X# X# "vanilla" BSD: X#LIBS = -ltermcap X#EXTRAOBJS = tmpnam.s strtok.s reg.s X#CFLAGS = -O -DJOBCONTROL X# X# "vanilla" SYSV: X#LIBS = -ltermcap X#EXTRAOBJS = tmpnam.s X#CFLAGS = -O -DSYSV -Dregfree=free -Dindex=strchr -Drindex=strrchr X# X# BSD with strtok() / regex(), such as ULTRIX. These are the rules X# used for our installation (rtech is a microvax running ULTRIX): X#LIBS = -ltermcap X#EXTRAOBJS = tmpnam.s X#CFLAGS = -O -DJOBCONTROL -Dregfree=free X X# X# Minix!!! X# Regular expressions: Use reg.c to turn regcmp into re_comp X# and regex into re_exec. Use regcompat.c to turn re_comp into X# regcomp and re_exec into regexec. Wow! What a load of old X# cobblers. XLIBS = X#EXTRAOBJS = tmpnam.s strtok.s reg.s XEXTRAOBJS = tmpnam.s reg.s regcompat.s XCFLAGS = -O -DMINIX -DSYSV X X# SERVEROBJS defines the object(s) for the vns_xxxx "server" interface. X# X# std.s is the version for "standard" news, making use of the X# users .newsrc file, and resident articles / active file. X# XSERVEROBJS = std.s X X# normal vn objects X# XVNOBJS= hash.s envir_set.s pagefile.s reader.s storage.s sig_set.s \ Xterm_set.s tty_set.s userlist.s vn.s vnglob.s digest.s strings.s \ Xsession.s printex.s getch.s help.s newdisp.s stat.s svart.s X X# This is to force you to read the makefile. Once you have, comment this rule, X# and uncomment the "real" rule. At the minimum, you will also have to X# uncomment one of the three sets of LIBS / EXTRAOBJS & CFLAGS definitions X# above. X# X#vn: X# @echo "PLEASE READ THE MAKEFILE" Xvn: $(VNOBJS) $(EXTRAOBJS) $(SERVEROBJS) X cc -i -o vn $(VNOBJS) $(EXTRAOBJS) $(SERVEROBJS) $(LIBS) X Xdigest.s: digest.c config.h head.h node.h page.h tune.h Xenvir_set.s: envir_set.c config.h tune.h vn.h Xgetch.s: getch.c config.h vn.h Xhash.s: hash.c config.h node.h tune.h Xhelp.s: help.c config.h node.h page.h reader.h tty.h tune.h vn.h Xnewdisp.s: newdisp.c config.h node.h tty.h Xpagefile.s: pagefile.c node.h page.h tune.h Xprintex.s: printex.c config.h tty.h Xreader.s: reader.c config.h brk.h head.h node.h page.h reader.h \ X tty.h tune.h vn.h Xregcompat.s: regcompat.c Xsession.s: session.c config.h brk.h head.h node.h page.h tty.h tune.h \ X vn.h Xsig_set.s: sig_set.c config.h node.h page.h tty.h tune.h Xstat.s: stat.c config.h node.h Xstd.s: std.c config_std.h brk.h head.h server.h std.h Xstorage.s: storage.c node.h page.h tune.h Xstrings.s: strings.c node.h page.h tune.h Xsvart.s: svart.c config.h node.h page.h tty.h tune.h Xterm_set.s: term_set.c config.h node.h page.h tty.h tune.h Xtty_set.s: tty_set.c tty.h Xtmpnam.s: tmpnam.c config.h Xuserlist.s: userlist.c node.h page.h tune.h vn.h Xvn.s: vn.c node.h tty.h Xvnglob.s: vnglob.c config.h brk.h head.h node.h page.h tune.h / exit 0 -- "Zeta Microcomputer Software" ACSnet: nick@nswitgould.cs.uts.oz nick@ultima.cs.uts.oz UUCP: ...!uunet!munnari!ultima.cs.uts.oz!nick Fidonet: Nick Andrew on 3:713/602 (Zeta)