home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume7 / 2.11news / part01 next >
Text File  |  1986-11-30  |  37KB  |  1,239 lines

  1. Subject:  v07i041:  2.11 News Documentation and Conversion, Part01/08
  2. Newsgroups: mod.sources
  3. Approved: mirror!rs
  4.  
  5. Submitted by: seismo!rick (Rick Adams)
  6. Mod.sources: Volume 7, Issue 41
  7. Archive-name: 2.11news/Part01
  8.  
  9. [ At last!  -r$ ]
  10.  
  11. # To extract, sh this file
  12. #
  13. #    news 2.11 cvt + uucp  File 1 of 1
  14. #
  15. if test ! -d cvt
  16. then
  17.     mkdir cvt
  18. fi
  19. echo x - cvt/cvt.active.sh 1>&2
  20. sed 's/.//' >cvt/cvt.active.sh <<'*-*-END-of-cvt/cvt.active.sh-*-*'
  21. -: "convert the active file format over"
  22. -L=$1
  23. -S=$2
  24. -cc cvtactive.c
  25. -a.out $L $S
  26. -mv $L/active $L/oactive
  27. -mv $L/nactive $L/active
  28. *-*-END-of-cvt/cvt.active.sh-*-*
  29. echo x - cvt/cvt.clean.sh 1>&2
  30. sed 's/.//' >cvt/cvt.clean.sh <<'*-*-END-of-cvt/cvt.clean.sh-*-*'
  31. -: "clean up after 2.10 works cleanly.  This tears down the 2.9 structure."
  32. -: "The one parameter should be SPOOL"
  33. -if test x$1 = x ; then
  34. -    echo "Usage: cvt.clean /usr/spool/news" 
  35. -    exit 1
  36. -fi
  37. -cd $1
  38. -rm -f .??*
  39. -rm -rf *.*
  40. *-*-END-of-cvt/cvt.clean.sh-*-*
  41. echo x - cvt/cvt.links.sh 1>&2
  42. sed 's/.//' >cvt/cvt.links.sh <<'*-*-END-of-cvt/cvt.links.sh-*-*'
  43. -: "Convert from B 2.9 to 2.10 spool format, with dots turned into slashes."
  44. -L=$1
  45. -S=$2
  46. -cat $L/active >> xtmp
  47. -ed - xtmp << 'X'
  48. -g; ;s; .*;;
  49. -1,$s;.*;ln & &/*;
  50. -1,$s;\.;/;
  51. -1,$s;\.\([^ ]* \);/\1;
  52. -1,$s; \(.*\) \(.*\); \2 \1;
  53. -w
  54. -q
  55. -X
  56. -cat xtmp | (cd $S ; sh -v)
  57. -rm -f a.out parents xtmp
  58. *-*-END-of-cvt/cvt.links.sh-*-*
  59. echo x - cvt/cvt.names.sh 1>&2
  60. sed 's/.//' >cvt/cvt.names.sh <<'*-*-END-of-cvt/cvt.names.sh-*-*'
  61. -: change truncated group names to their full length
  62. -: not tested on a real 2.9 system
  63. -if test $# -lt 2
  64. -then
  65. -    echo Useage: cvt.names.sh libdir spooldir
  66. -fi
  67. -echo Expect some errors about missing directories
  68. -cd $2
  69. -mv fa/laser-lover fa/laser-lovers
  70. -mv net/announce/n net/announce/newusers
  71. -mv net/astro/expe net/astro/expert
  72. -mv net/games/rogu net/games/rogue
  73. -mv net/games/triv net/games/trivia
  74. -mv net/games/vide net/games/video
  75. -mv net/lang/pasca net/lang/pascal
  76. -mv net/lang/prolo net/lang/prolog
  77. -mv net/mail/heade net/mail/headers
  78. -mv net/mail/msggr net/mail/msggroup
  79. -mv net/micro/appl net/micro/apple
  80. -mv net/micro/atar net/micro/atari
  81. -mv net/micro/trs- net/micro/trs-80
  82. -mv net/music/clas net/music/classical
  83. -mv net/news/confi net/news/config
  84. -mv net/news/newsi net/news/newsite
  85. -mv net/nlang/celt net/nlang/celts
  86. -mv net/nlang/gree net/nlang/greek
  87. -mv net/rec/skydiv net/rec/skydive
  88. -mv net/religion/j net/religion/jewish
  89. -mv net/sport/base net/sport/baseball
  90. -mv net/sport/foot net/sport/football
  91. -mv net/sport/hock net/sport/hockey
  92. -mv net/sport/hoop net/sport/hoops
  93. -mv net/unix-wizar net/unix-wizards
  94. -mv net/works/apol net/works/apollo
  95. -
  96. -cd $1
  97. -sed 's/^fa.laser-lover /fa.laser-lovers /
  98. -s/^net.announce.n /net.announce.newusers /
  99. -s/^net.astro.expe /net.astro.expert /
  100. -s/^net.games.rogu /net.games.rogue /
  101. -s/^net.games.triv /net.games.trivia /
  102. -s/^net.games.vide /net.games.video /
  103. -s/^net.lang.pasca /net.lang.pascal /
  104. -s/^net.lang.prolo /net.lang.prolog /
  105. -s/^net.mail.heade /net.mail.headers /
  106. -s/^net.mail.msggr /net.mail.msggroup /
  107. -s/^net.micro.appl /net.micro.apple /
  108. -s/^net.micro.atar /net.micro.atari /
  109. -s/^net.micro.trs- /net.micro.trs-80 /
  110. -s/^net.music.clas /net.music.classical /
  111. -s/^net.news.confi /net.news.config /
  112. -s/^net.news.newsi /net.news.newsite /
  113. -s/^net.nlang.celt /net.nlang.celts /
  114. -s/^net.nlang.gree /net.nlang.greek /
  115. -s/^net.rec.skydiv /net.rec.skydive /
  116. -s/^net.religion.j /net.religion.jewish /
  117. -s/^net.sport.base /net.sport.baseball /
  118. -s/^net.sport.foot /net.sport.football /
  119. -s/^net.sport.hock /net.sport.hockey /
  120. -s/^net.sport.hoop /net.sport.hoops /
  121. -s/^net.unix-wizar /net.unix-wizards /
  122. -s/^net.works.apol /net.works.apollo /' active > nactive
  123. -mv active oactive
  124. -mv nactive active
  125. *-*-END-of-cvt/cvt.names.sh-*-*
  126. echo x - cvt/cvtactive.c 1>&2
  127. sed 's/.//' >cvt/cvtactive.c <<'*-*-END-of-cvt/cvtactive.c-*-*'
  128. -/*
  129. - * Convert from the dot files and one field active file to a
  130. - * two field active file.
  131. - */
  132. -#include <stdio.h>
  133. -#include <sys/types.h>
  134. -#include <sys/stat.h>
  135. -
  136. -char *LIB, *SPOOL;
  137. -char oactive[100], nactive[100];
  138. -char dotfile[100];
  139. -char ng[100];
  140. -FILE *ofd, *nfd;
  141. -
  142. -struct stat sbuf;
  143. -
  144. -main(argc, argv)
  145. -char **argv;
  146. -{
  147. -    register char *p;
  148. -    
  149. -    if (argc != 3) {
  150. -        printf("Usage: cvtdot LIB SPOOL\n");
  151. -        exit(1);
  152. -    }
  153. -
  154. -    LIB = argv[1];
  155. -    SPOOL = argv[2];
  156. -
  157. -    sprintf(oactive, "%s/%s", LIB, "active");
  158. -    sprintf(nactive, "%s/%s", LIB, "nactive");
  159. -    ofd = fopen(oactive, "r");
  160. -    if (ofd == NULL) {
  161. -        fprintf(stderr, "Cannot open %s\n", oactive);
  162. -        exit(1);
  163. -    }
  164. -    nfd = fopen(nactive, "w");
  165. -    if (nfd == NULL) {
  166. -        fprintf(stderr, "Cannot create %s\n", nactive);
  167. -        exit(1);
  168. -    }
  169. -
  170. -    while (fgets(ng, sizeof ng, ofd) != NULL) {
  171. -        for (p=ng; *p!='\n'; p++)
  172. -            ;
  173. -        *p = 0;
  174. -        sprintf(dotfile, "%s/.%s", SPOOL, ng);
  175. -        stat(dotfile, &sbuf);
  176. -        fprintf(nfd, "%s %05ld\n", ng, sbuf.st_size);
  177. -    }
  178. -    fclose(ofd);
  179. -    fclose(nfd);
  180. -}
  181. *-*-END-of-cvt/cvtactive.c-*-*
  182. if test ! -d uucp
  183. then
  184.     mkdir uucp
  185. fi
  186. echo x - uucp/=batch 1>&2
  187. sed 's/.//' >uucp/=batch <<'*-*-END-of-uucp/=batch-*-*'
  188. -*** chkpth.c    Sun May 27 20:55:39 1979
  189. ---- chkpth.c.new    Sat Apr  2 21:34:39 1983
  190. -***************
  191. -*** 40,45
  192. -      char c;
  193. -      int ret, i;
  194. -  
  195. -      if (Uptfirst) {
  196. -          ret = rdpth(Upt);
  197. -          ASSERT(ret == 0, "INIT USERFILE %d", Nbrusers);
  198. -
  199. ---- 40,48 -----
  200. -      char c;
  201. -      int ret, i;
  202. -  
  203. -+     if (prefix("=/usr/lib/news/batch", path))
  204. -+         return(0);
  205. -+ 
  206. -      if (Uptfirst) {
  207. -          ret = rdpth(Upt);
  208. -          ASSERT(ret == 0, "INIT USERFILE %d", Nbrusers);
  209. -*** cntrl.c    Sun May 27 20:56:46 1979
  210. ---- cntrl.c.new    Sat Apr  2 21:37:03 1983
  211. -***************
  212. -*** 82,87
  213. -  char Wfile[MAXFULLNAME] = {'\0'};
  214. -  char Dfile[MAXFULLNAME];
  215. -  
  216. -  /*******
  217. -   *    cntrl(role, wkpre)
  218. -   *    int role;
  219. -
  220. ---- 82,89 -----
  221. -  char Wfile[MAXFULLNAME] = {'\0'};
  222. -  char Dfile[MAXFULLNAME];
  223. -  
  224. -+ FILE *pfopen();
  225. -+ 
  226. -  /*******
  227. -   *    cntrl(role, wkpre)
  228. -   *    int role;
  229. -***************
  230. -*** 164,170
  231. -              if (index(W_OPTNS, 'c') == NULL)
  232. -                  fp = fopen(Dfile, "r");
  233. -              if (fp == NULL &&
  234. -!                (fp = fopen(filename, "r")) == NULL) {
  235. -                  /*  can not read data file  */
  236. -                  logent("CAN'T READ DATA", "FAILED");
  237. -                  unlinkdf(Dfile);
  238. -
  239. ---- 166,172 -----
  240. -              if (index(W_OPTNS, 'c') == NULL)
  241. -                  fp = fopen(Dfile, "r");
  242. -              if (fp == NULL &&
  243. -!                (fp = pfopen(filename, "r")) == NULL) {
  244. -                  /*  can not read data file  */
  245. -                  logent("CAN'T READ DATA", "FAILED");
  246. -                  unlinkdf(Dfile);
  247. -***************
  248. -*** 282,288
  249. -              notify(mailopt, W_USER, W_FILE1, Rmtname, &msg[1]);
  250. -              ASSERT(role == MASTER,
  251. -                  "role - %d", role);
  252. -!             fclose(fp);
  253. -              unlinkdf(W_DFILE);
  254. -              goto top;
  255. -          }
  256. -
  257. ---- 284,290 -----
  258. -              notify(mailopt, W_USER, W_FILE1, Rmtname, &msg[1]);
  259. -              ASSERT(role == MASTER,
  260. -                  "role - %d", role);
  261. -!             pfclose(fp);
  262. -              unlinkdf(W_DFILE);
  263. -              goto top;
  264. -          }
  265. -***************
  266. -*** 292,298
  267. -              ASSERT(role == MASTER,
  268. -                  "role - %d", role);
  269. -              ret = (*Wrdata)(fp, Ofn);
  270. -!             fclose(fp);
  271. -              if (ret != 0) {
  272. -                  (*Turnoff)();
  273. -                  return(FAIL);
  274. -
  275. ---- 294,300 -----
  276. -              ASSERT(role == MASTER,
  277. -                  "role - %d", role);
  278. -              ret = (*Wrdata)(fp, Ofn);
  279. -!             pfclose(fp);
  280. -              if (ret != 0) {
  281. -                  (*Turnoff)();
  282. -                  return(FAIL);
  283. -*** expfile.c    Sun May 27 20:57:47 1979
  284. ---- expfile.c.new    Sat Apr  2 21:39:05 1983
  285. -***************
  286. -*** 19,24
  287. -      int uid;
  288. -  
  289. -      switch(file[0]) {
  290. -      case '/':
  291. -          return;
  292. -      case '~':
  293. -
  294. ---- 19,25 -----
  295. -      int uid;
  296. -  
  297. -      switch(file[0]) {
  298. -+     case '=':
  299. -      case '/':
  300. -          return;
  301. -      case '~':
  302. -*** uux.c    Wed Aug 19 16:56:29 1981
  303. ---- uux.c.new    Sat Apr  2 21:40:01 1983
  304. -***************
  305. -*** 231,240
  306. -              expfile(rest);
  307. -              gename(DATAPRE, xsys, 'A', dfile);
  308. -              DEBUG(4, "rest %s\n", rest);
  309. -!             if ((chkpth(User, "", rest) || anyread(rest)) != 0) {
  310. -!                 fprintf(stderr, "permission denied %s\n", rest);
  311. -!                 cleanup(1);
  312. -!             }
  313. -              if (xcp(rest, dfile) != 0) {
  314. -                  fprintf(stderr, "can't copy %s to %s\n", rest, dfile);
  315. -                  cleanup(1);
  316. -
  317. ---- 231,241 -----
  318. -              expfile(rest);
  319. -              gename(DATAPRE, xsys, 'A', dfile);
  320. -              DEBUG(4, "rest %s\n", rest);
  321. -!             if (rest[0] == '/')
  322. -!                 if ((chkpth(User, "", rest) || anyread(rest)) != 0) {
  323. -!                     fprintf(stderr, "permission denied %s\n", rest);
  324. -!                     cleanup(1);
  325. -!                 }
  326. -              if (xcp(rest, dfile) != 0) {
  327. -                  fprintf(stderr, "can't copy %s to %s\n", rest, dfile);
  328. -                  cleanup(1);
  329. -******************
  330. -pfopen.c:
  331. -------------------
  332. -/*
  333. - * Routine like fopen, but checks for processes to open.
  334. - * The process name begins with =, and any underscores
  335. - * are translated into blanks.  We don't do things in the
  336. - * obvious way (start with | or !, use blanks as themselves)
  337. - * because getargs can't parse strings containing blanks in
  338. - * all versions of uucp.
  339. - */
  340. -
  341. -#include <stdio.h>
  342. -
  343. -static FILE *prevval = NULL;
  344. -
  345. -FILE *popen();
  346. -
  347. -FILE *
  348. -pfopen(name, mode)
  349. -char *name, *mode;
  350. -{
  351. -    char cmdbuf[256];
  352. -    register char *p;
  353. -
  354. -    if (*name != '=') {
  355. -        prevval = NULL;
  356. -        return fopen(name, mode);
  357. -    }
  358. -
  359. -    strcpy(cmdbuf, name);
  360. -    for (p=cmdbuf; *p; p++)
  361. -        if (*p == '_')
  362. -            *p = ' ';
  363. -    p = cmdbuf+1;
  364. -    prevval = popen(p, mode);
  365. -    return prevval;
  366. -}
  367. -
  368. -pfclose(fd)
  369. -FILE *fd;
  370. -{
  371. -    if (fd == prevval) {
  372. -        pclose(fd);
  373. -        prevval = NULL;
  374. -    } else
  375. -        fclose(fd);
  376. -}
  377. -****************
  378. -Also be sure to add pfopen.o to the list of .o files in the makefile.
  379. *-*-END-of-uucp/=batch-*-*
  380. echo x - uucp/README 1>&2
  381. sed 's/.//' >uucp/README <<'*-*-END-of-uucp/README-*-*'
  382. -This directory contains a number of modifications to UUCP that
  383. -are useful for news.  Only the minus.z mod is really crucial,
  384. -the others are there primarily to boost performance so as to
  385. -cut down on the load on your machine.  There are many other
  386. -mods to UUCP kicking around - many bug fixes and security improvements.
  387. -Watch net.bugs.uucp for these.  One large mod that is very useful
  388. -is the Duke uudir mod, which puts files in SPOOL into subdirectories.
  389. -This mod is very much a kludge, and it certainly could be done
  390. -better, but until a wonderful version is made available, substantial
  391. -performance gains can be attained.  (Since scanning a UNIX directory
  392. -is quadratic on the size of the directory, the 5-fold reduction in
  393. -directory size from uudir can result in a factor of 25 improvement
  394. -in disk utilization.)  uudir is easy to install in any UUCP, but
  395. -it contains some assembly language code, which has been written
  396. -only for the VAX and PDP-11.  All these changes are transparent to
  397. -your UUCP neighbors - you can still talk to UUCP's that don't have
  398. -these mods made - you can even exchange news with older systems.
  399. -(Batching, with or without the =batch mod, requires at least a 2.10
  400. -news system on the other end.)
  401. -
  402. -minus.z.5 
  403. -minux.z.v7 
  404. -    This mod implements the -z and -n options to uux.  These
  405. -    prevent uuxqt from mailing back annoying little messages to
  406. -    whoever happened to start up the uucico daemon telling them
  407. -    that the rnews command executed OK.  -z says "only send a message
  408. -    if the rnews command bombed out", -n says "never send one".
  409. -    -z is recommended.  In order for your users not to be bombarded
  410. -    with these messages, all your USENET neighbors must install this.
  411. -    "5" is for System V and UNIX 5.0, "v7" is for V7 and 4BSD.
  412. -cpu.speedup 
  413. -    A simple fix to V7 and 4BSD UUCP to keep uicico from eating up
  414. -    all the CPU time on your system when receiving files.  Highly
  415. -    recommended, especially if all your traffic is at 2400 baud
  416. -    or slower.
  417. -uux.minus.c 
  418. -    A mod to uux.c to support a uux -c option, e.g.
  419. -        uux -c yoursys!rnews '<' /usr/spool/news/net/news/123
  420. -    which prevents uux from making a separate copy of each article
  421. -    in the spool directory for each system.
  422. -=batch 
  423. -    Code to allow commands such as
  424. -    uux -c yoursys!rnews '<' =/usr/lib/news/batch_/usr/spool/batch/yoursys
  425. -    so that, once the connection is fired up and ready to transfer the
  426. -    file, the command "/usr/lib/news/batch /usr/spool/batch/yoursys"
  427. -    will be started up, and its output copied to the other system.
  428. -    The advantage here is that batching is possible without keeping
  429. -    a full copy of the news on spool waiting for a connection to
  430. -    be established.  This can be a big win if the other system is
  431. -    down for any length of time.  It does not good without the
  432. -    uux.minus.c mod below.  Beware of security issues - they have
  433. -    not been carefully addressed here, and this mod opens up some
  434. -    potential security holes.  It only allows one command to
  435. -    be fired up, and batch should check that the file of names
  436. -    is in a safe directory (not /usr/lib/uucp/L.sys or /etc/passwd).
  437. -    Ideally batch should be suid, since the command will run as uucp.
  438. *-*-END-of-uucp/README-*-*
  439. echo x - uucp/bugfix 1>&2
  440. sed 's/.//' >uucp/bugfix <<'*-*-END-of-uucp/bugfix-*-*'
  441. -Date: 19 Apr 1983 6:31-PST
  442. -From: Jim Rees  <jim@uw-beaver>
  443. -Subject: Re:  news 2.10
  444. -Message-Id: <83/04/19 0631.950@uw-beaver>
  445. -
  446. -Meanwhile, I thought of something else you may want to include in the
  447. -distribution.  I know that there are lots of bugs in uucp, and that it
  448. -would be impossible to list them all in a reasonable amount of space,
  449. -but news will not work at all on a 4.1bsd system unless this bug is
  450. -fixed.  This bug is still in even the latest tape from Berkeley, and is
  451. -not traceable with a debugger because of other bugs in uucp.  This bug
  452. -causes uucico to core-dump after transferring some small (~20) number
  453. -of files.
  454. -
  455. -The fix is easy.  In anlwrk.c, routine iswrk():
  456. -
  457. -*** anlwrk.c_o    Wed Mar  9 07:53:09 1983
  458. ---- anlwrk.c    Wed Sep 22 10:21:43 1982
  459. -***************
  460. -*** 64,70
  461. -  {
  462. -      static char **listp, *list[LLEN];
  463. -  
  464. -!     if (listp == NULL || *listp == NULL || listp > (list + LLEN)
  465. -        || !prefix(pre, *listp)) {
  466. -          int i;
  467. -          for (i = 0, listp = list; i < LLEN; i++) {
  468. -
  469. ---- 64,70 -----
  470. -  {
  471. -      static char **listp, *list[LLEN];
  472. -  
  473. -!     if (listp == NULL || *listp == NULL || listp >= (list + LLEN)
  474. -        || !prefix(pre, *listp)) {
  475. -          int i;
  476. -          for (i = 0, listp = list; i < LLEN; i++) {
  477. -
  478. -
  479. -[uucp is fully of nasty bugs.  watch net.bugs.uucp for them and
  480. -hopefully their fixes.]
  481. *-*-END-of-uucp/bugfix-*-*
  482. echo x - uucp/cpu.speedup 1>&2
  483. sed 's/.//' >uucp/cpu.speedup <<'*-*-END-of-uucp/cpu.speedup-*-*'
  484. -Under certain circumstances, you may find that when 2 or 3 uucicos
  485. -are running on your system, they are eating up all the CPU time,
  486. -and system performance suffers horribly.  If this is your problem,
  487. -you can do a "vmstat 5" and watch the system calls and context switches
  488. -counters.  If they are both very high whenever 2 or more uucicos
  489. -are running (100-200 system calls/second, over 100 context switches),
  490. -chances are that the problem is as follows:
  491. -
  492. -When another system is sending you a file, your uucico reads characters
  493. -from the line.  The read returns whatever is there waiting, or if
  494. -nothing is waiting, waits for one character and returns.  Since uucico
  495. -usually wants 64 characters at a time, at 1200 baud it's quite common
  496. -to read these in 1 or 2 character pieces.  Each uucico will read 1 or
  497. -2 characters, wake up the user process, go back for more, there won't
  498. -be any, so it hangs and gives up the CPU.  A very short time later,
  499. -(often within the same clock tick) there will be a character available,
  500. -the process will wake up, read one character, and try again.
  501. -
  502. -This modification is very simple.  If the first read returned fewer
  503. -characters than requested, before doing another read, the process
  504. -will sleep for one second.  Then, when it wakes up, there will probably
  505. -be as many characters waiting as it needs.
  506. -
  507. -This modification makes a big difference when you are RECEIVING a file
  508. -from another system.  It won't make much difference when you are
  509. -SENDING a file, because the user process doesn't usually have to hang
  510. -to write to the line, and when it does, the high/low water mark
  511. -mechanism in the tty driver keeps it from waking up too often.
  512. -This change is intended for a V7 or 4BSD system.  It may not
  513. -help much on System V, because uucp uses a USG tty driver feature
  514. -to make it wake up only every 6 characters.
  515. -
  516. -The amount this fix helps depends a LOT on the baud rate.  Since it
  517. -is sleeping while it had been reading characters, it is reasonable
  518. -to expect the file to get transferred more slowly than before.  This
  519. -might, in turn, lead to increased phone bills.  Some experimentation
  520. -receiving a file over a hardwired link is detailed here.  The file
  521. -received is /etc/termcap, which is 66405 bytes long.  The local system
  522. -is a 4.1BSD VAX 11/750, the remote system is a UNIX 5.0 VAX 11/750.
  523. -The link is over a develcon dataswitch.  Both systems were almost
  524. -idle, although when another uucico did start up, it didn't seem to
  525. -affect the numbers.  The commands
  526. -    uucp -r othersys!~/termcap ~uucp/termcap
  527. -    time /usr/lib/uucp/uucico -r1 -sothersys
  528. -were given.
  529. -
  530. -"type" is the type of uucico run: "old" is without the sleep, "sleep"
  531. -has a sleep(1) added after every short read, "nap" is the same as
  532. -sleep except that at 4800 baud and higher the sleep is for less than
  533. -one second (the parameter is the number of milliseconds).  "user" and
  534. -"sys" are the user and system CPU times from the time command, in
  535. -seconds.  "elapsed" is the time, in seconds, to transfer the file,
  536. -taken from /usr/spool/uucp/SYSLOG.  (Elapsed time does not include time to
  537. -get the connection going or close it down, just to transfer the file.)
  538. -"%" is the percentage of the system the uucico command took, from the
  539. -time command.
  540. -
  541. -type    speed    user    sys    elapsed    %
  542. -
  543. -old    1200    35.3    120.8    606    21%
  544. -sleep    1200    14.2     35.9    609     7%
  545. -
  546. -old    2400    27.4    115.8    305    31%
  547. -sleep    2400    13.2     35.0    351     9%
  548. -
  549. -old    4800    23.9    116.0    152    57%
  550. -sleep    4800    14.4     40.3    338    12%
  551. -
  552. -old    9600    14.4     68.1    79    42%
  553. -nap 60    9600    14.6     52.7    97    39%
  554. -nap 100    9600    14.9     48.5    113    32%
  555. -nap 200    9600    15.0     47.1    127    37%
  556. -sleep    9600    12.0     46.1    279    15%
  557. -
  558. -It is clear that at 2400 baud or less, the load on the system was
  559. -cut considerably, while the penalty in slower transfer speed is
  560. -negligible.  At 9600 baud, the sleep version (equivalent to nap 1000)
  561. -cut the system load by about 1/3, the elapsed time shot way up.
  562. -(It takes much less than 1 second to accumulate 64 characters at
  563. -9600 baud.) At 4800 baud the results are somewhere in between.
  564. -The system time was cut by a factor of 3, but the elapsed time doubled.
  565. -
  566. -Putting in shorter naps at 9600 baud brought the elapsed time down, while
  567. -increasing the system load moderately.  Essentially, the system time
  568. -remained constant when any sleeping was done.  The difference in
  569. -percentage of the system used shows that, in effect, the same work
  570. -was spread out over different lengths of time.  This results in a tradeoff
  571. -that can only be evaluated by each system in terms of their priorities.
  572. -
  573. -An added complication is that most V7 and 4BSD systems do not have
  574. -a way to sleep for less than a second.  4.2BSD has the select system
  575. -call, or you may have installed a nap system call or the Cornell fast
  576. -timer driver.  Otherwise, your only choices are either sleep(1) or
  577. -nothing.  The napms call below calls a routine in the new curses, to
  578. -sleep for around 1 clock tick (60 ms).
  579. -
  580. -If your top priority is to keep system response good, it is recommended
  581. -that you do the sleep(1) no matter what the baud rate is.  If your top
  582. -priority is to make 9600 baud transfers go as quickly as possible, you
  583. -should do the sleep for 1200 baud or less, and otherwise do nothing.
  584. -If you want a well balanced compromise and have a high resolution sleep
  585. -or nap or select available, the changes shown here are appropriate.
  586. -
  587. -This change is trivial except for the change to conn.c to make the
  588. -baud rate available to the packet driver.  The code dealing with the
  589. -speed is different in different versions of UUCP.  If you have trouble
  590. -with conn.c, search for the string "speed" and look for a conveniently
  591. -available integer version of the speed.  The variable linebaudrate is
  592. -a global integer, exported to pk1.c for purposes of this test.  The
  593. -changes shown here are for the 4.1BSD version of UUCP.
  594. -
  595. -*** conn.c    Wed Jun  4 01:47:12 1980
  596. ---- conn.c.new    Sat Apr  2 18:13:25 1983
  597. -***************
  598. -*** 85,90
  599. -      char *D_calldev;
  600. -      int D_speed;
  601. -      } Devs [MAXDEV];
  602. -  
  603. -  char Devbuff[MAXDCH];
  604. -  
  605. -
  606. ---- 85,91 -----
  607. -      char *D_calldev;
  608. -      int D_speed;
  609. -      } Devs [MAXDEV];
  610. -+ int linebaudrate;
  611. -  
  612. -  char Devbuff[MAXDCH];
  613. -  
  614. -***************
  615. -*** 344,349
  616. -      alarm(0);
  617. -      fflush(stdout);
  618. -      fixline(dcf, pd->D_speed);
  619. -      DEBUG(4, "Forked %d ", pid);
  620. -      DEBUG(4, "Wait got %d ", nw);
  621. -      DEBUG(4, "Status %o\n", lt);
  622. -
  623. ---- 345,351 -----
  624. -      alarm(0);
  625. -      fflush(stdout);
  626. -      fixline(dcf, pd->D_speed);
  627. -+     linebaudrate = pd->D_speed;
  628. -      DEBUG(4, "Forked %d ", pid);
  629. -      DEBUG(4, "Wait got %d ", nw);
  630. -      DEBUG(4, "Status %o\n", lt);
  631. -*** pk1.c    Mon May 28 00:44:06 1979
  632. ---- pk1.c.new    Sat Apr  2 18:16:02 1983
  633. -[This is routine pkcget, near the end of pk1.c.]
  634. -***************
  635. -*** 335,340
  636. -  char *b;
  637. -  {
  638. -      int nchars, ret;
  639. -  
  640. -      if (setjmp(Getjbuf)) {
  641. -          Ntimeout++;
  642. -
  643. ---- 335,341 -----
  644. -  char *b;
  645. -  {
  646. -      int nchars, ret;
  647. -+     extern int linebaudrate;
  648. -  
  649. -      if (setjmp(Getjbuf)) {
  650. -          Ntimeout++;
  651. -***************
  652. -*** 343,349
  653. -      }
  654. -      signal(SIGALRM, cgalarm);
  655. -  
  656. -!     for (nchars = 0; nchars < n; nchars += ret) {
  657. -          alarm(PKTIME);
  658. -          ret = read(fn, b, n - nchars);
  659. -          if (ret == 0) {
  660. -
  661. ---- 344,350 -----
  662. -      }
  663. -      signal(SIGALRM, cgalarm);
  664. -  
  665. -!     for (nchars = 0; nchars < n; ) {
  666. -          alarm(PKTIME);
  667. -          ret = read(fn, b, n - nchars);
  668. -          if (ret == 0) {
  669. -***************
  670. -*** 352,357
  671. -          }
  672. -          PKASSERT(ret > 0, "PKCGET READ %d", ret);
  673. -          b += ret;
  674. -      }
  675. -      alarm(0);
  676. -      return(0);
  677. -
  678. ---- 353,364 -----
  679. -          }
  680. -          PKASSERT(ret > 0, "PKCGET READ %d", ret);
  681. -          b += ret;
  682. -+         nchars += ret;
  683. -+         if (nchars < n)
  684. -+             if (linebaudrate > 0 && linebaudrate < 4800)
  685. -+                 sleep(1);
  686. -+             else
  687. -+                 napms(60);
  688. -      }
  689. -      alarm(0);
  690. -      return(0);
  691. *-*-END-of-uucp/cpu.speedup-*-*
  692. echo x - uucp/gename.s5 1>&2
  693. sed 's/.//' >uucp/gename.s5 <<'*-*-END-of-uucp/gename.s5-*-*'
  694. -From burl!lda Tue Apr  5 12:50:04 1983
  695. -Date: 5-Apr-83 12:49:57-EST (Tue)
  696. -From: burl!lda
  697. -Subject: base 62 sequencing on USG 5.0 uucp
  698. -Via: cbosgd.UUCP (V3.94 [3/6/82]); 5-Apr-83 12:50:00-EST (Tue)
  699. -To: teklabs!stevenm
  700. -Status: R
  701. -
  702. -This is a listing of the changes made to USG 5.0 uucp to support the
  703. -base 62 numbering scheme submitted to the 'uucp.buglist' by Alan S. Watt, 
  704. -ittvax!swatt.  Simply changing the gename routine was not enough. 
  705. -These changes were made by Curtis Jackson, burl!rcj.
  706. -
  707. -Note: The diff here on 'ogename.c gename.c' is for Alan's gename.c
  708. -
  709. -                                                Larry Auton
  710. -                                                 burl!lda
  711. -[Caution - a few weeks later, burl's UUCP started behaving very
  712. -strangely.  UUCP would record that it xqt'ed rnews, but rnews was
  713. -never started up.  Access time on /usr/bin/rnews was unchanged.
  714. -We don't know if this change had anything to do with it, but if
  715. -you see this symptom, be suspicious of this change.]
  716. -_________________________________________________________________________
  717. -**** ocntrl.c    cntrl.c
  718. -135c135
  719. -<     jobid = 0;
  720. ----
  721. ->     strcpy(jobid,"0000");
  722. -
  723. -**** ogename.c    gename.c
  724. -29c29,30
  725. -<     sprintf(file, "%c.%.7s%c%.4s", pre, sys, grade, sqnum);
  726. ----
  727. ->     strcpy(jobid,sqnum);
  728. ->     updjb(); sprintf(file, "%c.%.6s%c%.1s%.4s", pre, sys, grade, subjob, jobid);
  729. -
  730. -**** ogtcfile.c    gtcfile.c
  731. -57c57
  732. -<         if(jobid == 0){
  733. ----
  734. ->         if(!strcmp(jobid,"0000")){
  735. -60c60
  736. -<             DEBUG(4,"gtcfile2: sqnm - %d\n",sqnm);
  737. ----
  738. ->             DEBUG(4,"gtcfile2: sqnm - %s\n",sqnm);
  739. -62,63c62,63
  740. -<         updjb(); sprintf(Cfile, "%c.%.6s%c%.1s%.4d", CMDPRE, sys, Grade, subjob, jobid); 
  741. -<                 DEBUG(4,"gtcfile3: jobid - %d\n",jobid);
  742. ----
  743. ->         updjb(); sprintf(Cfile, "%c.%.6s%c%.1s%.4s", CMDPRE, sys, Grade, subjob, jobid); 
  744. ->                 DEBUG(4,"gtcfile3: jobid - %s\n",jobid);
  745. -70c70
  746. -<         sprintf(Cfile, "%c.%.6s%c%.1s%.4d", CMDPRE, sys, Grade, p->pre_id, jobid); 
  747. ----
  748. ->         sprintf(Cfile, "%c.%.6s%c%.1s%.4s", CMDPRE, sys, Grade, p->pre_id, jobid); 
  749. -81c81
  750. -<     static int jid = 0;
  751. ----
  752. ->     static char jid[5] = "0000";
  753. -83,85c83,85
  754. -<     if(jobid != jid){
  755. -<         DEBUG(4,"csys0 - jobid: %d\n",jobid);
  756. -<         jid = jobid;
  757. ----
  758. ->     if(strcmp(jobid,jid)){
  759. ->         DEBUG(4,"csys0 - jobid: %s\n",jobid);
  760. ->         strcpy(jid,jobid);
  761. -
  762. -**** ouucp.c        uucp.c
  763. -597c597
  764. -<             updjb(); sprintf(dfile, "%c.%.6s%c%.1s%.4d", DATAPRE, s2, Grade, subjob, jobid); 
  765. ----
  766. ->             updjb(); sprintf(dfile, "%c.%.6s%c%.1s%.4s", DATAPRE, s2, Grade, subjob, jobid); 
  767. -754c754
  768. -<                 fprintf(stdout,"uucp job %d\n", jobid);
  769. ----
  770. ->                 fprintf(stdout,"uucp job %s\n", jobid);
  771. -756c756
  772. -<         updjb(); sprintf(Cfile, "%c.%.6s%c%.1s%.4d", CMDPRE, sys, Grade, subjob, jobid); 
  773. ----
  774. ->         updjb(); sprintf(Cfile, "%c.%.6s%c%.1s%.4s", CMDPRE, sys, Grade, subjob, jobid); 
  775. -764c764
  776. -<         sprintf(Cfile, "%c.%.6s%c%.1s%.4d", CMDPRE, sys, Grade, p->pre_id, jobid); 
  777. ----
  778. ->         sprintf(Cfile, "%c.%.6s%c%.1s%.4s", CMDPRE, sys, Grade, p->pre_id, jobid); 
  779. -775c775
  780. -<     static int jid = 0;
  781. ----
  782. ->     static char jid[5] = "0000";
  783. -777,778c777,778
  784. -<     if(jobid != jid){
  785. -<         jid = jobid;
  786. ----
  787. ->     if(strcmp(jobid,jid)){
  788. ->         strcpy(jid,jobid);
  789. -
  790. -**** ouucp.h        uucp.h
  791. -201c201
  792. -< extern int    jobid;
  793. ----
  794. -> extern char    jobid[5];
  795. -
  796. -**** ouucpdefs.c    uucpdefs.c
  797. -26c26
  798. -< int    jobid;
  799. ----
  800. -> char    jobid[5];
  801. -
  802. -**** ouux.c        uux.c
  803. -216c216
  804. -<     updjb(); sprintf(tcfile, "%c.%.6s%c%.1s%.4d", DATAPRE, local, 'T', subjob, jobid);
  805. ----
  806. ->     updjb(); sprintf(tcfile, "%c.%.6s%c%.1s%.4s", DATAPRE, local, 'T', subjob, jobid);
  807. -303c303
  808. -<         updjb(); sprintf(dfile, "%c.%.6s%c%.1s%.4d", DATAPRE, xsys, 'B', subjob, jobid);
  809. ----
  810. ->         updjb(); sprintf(dfile, "%c.%.6s%c%.1s%.4s", DATAPRE, xsys, 'B', subjob, jobid);
  811. -345c345
  812. -<         fprintf(stdout,"uucp job %d\n", jobid);
  813. ----
  814. ->         fprintf(stdout,"uucp job %s\n", jobid);
  815. -505c505
  816. -<             updjb(); sprintf(dfile, "%c.%.6s%c%.1s%.4d", DATAPRE, xsys, 'A', subjob, jobid);
  817. ----
  818. ->             updjb(); sprintf(dfile, "%c.%.6s%c%.1s%.4s", DATAPRE, xsys, 'A', subjob, jobid);
  819. -570c570
  820. -<             updjb(); sprintf(tfile, "%c.%.6s%c%.1s%.4d", CMDPRE, syspart, 'R', subjob, jobid);
  821. ----
  822. ->             updjb(); sprintf(tfile, "%c.%.6s%c%.1s%.4s", CMDPRE, syspart, 'R', subjob, jobid);
  823. -644c644
  824. -<             updjb(); sprintf(dfile, "%c.%.6s%c%.1s%.4d", DATAPRE, syspart, 'R', subjob, jobid);
  825. ----
  826. ->             updjb(); sprintf(dfile, "%c.%.6s%c%.1s%.4s", DATAPRE, syspart, 'R', subjob, jobid);
  827. -655c655
  828. -<             updjb(); sprintf(t2file, "%c.%.6s%c%.1s%.4d", DATAPRE, xsys, 'T', subjob, jobid);
  829. ----
  830. ->             updjb(); sprintf(t2file, "%c.%.6s%c%.1s%.4s", DATAPRE, xsys, 'T', subjob, jobid);
  831. -767c767
  832. -<         updjb(); sprintf(cfile, "%c.%.6s%c%.1s%.4d", CMDPRE, xsys, 'A', subjob, jobid);
  833. ----
  834. ->         updjb(); sprintf(cfile, "%c.%.6s%c%.1s%.4s", CMDPRE, xsys, 'A', subjob, jobid);
  835. -
  836. -
  837. *-*-END-of-uucp/gename.s5-*-*
  838. echo x - uucp/minus.z.5 1>&2
  839. sed 's/.//' >uucp/minus.z.5 <<'*-*-END-of-uucp/minus.z.5-*-*'
  840. -This shows the changes needed to a System V or UNIX 5.0 UUCP to
  841. -implement the -z option.  The -n option is in the standard system,
  842. -but you usually want to be notified if something goes wrong.
  843. -
  844. -I looked at the 4.0 sources and compared them to the 5.0.  The programs
  845. -have changed but the changes aren't many.  Only uucp.h, uux.c, and uuxqt.c
  846. -need be changed.  I'll be putting in the changes once I get permission from
  847. -our systems people.
  848. -
  849. -==============================================================
  850. ----- uucp.h ---- 137,139 ----
  851. -   #define X_USER        'U'
  852. -   #define X_NONOTI    'N'
  853. - > #define X_NONZERO    'Z'    /* don't notify if zero return */
  854. -   #define X_SENDFILE    'S'
  855. -==============================================================
  856. ----- uux.c ----  54, 55 ----
  857. -       int nonoti = 0;
  858. - > #ifdef X_NONZERO
  859. - >     int nonzero = 0;
  860. - > #endif
  861. -       int    uid, ret;
  862. ----- uux.c ---- 146,149 ----
  863. -           case 'n':
  864. -               nonoti = 1;
  865. -               break;
  866. - > #ifdef X_NONZERO
  867. - >         case 'z':
  868. - >             nonzero = 1;
  869. - >             break;
  870. - > #endif
  871. -           default:
  872. ----- uux.c ---- 218,221 ----
  873. -       if (nonoti)
  874. -           fprintf(fprx,"%c\n", X_NONOTI);
  875. - > #ifdef X_NONZERO
  876. - >     if (nonzero)
  877. - >        fprintf(fprx,"%c\n", X_NONZERO);
  878. - > #endif
  879. -       if (statop)
  880. -           fprintf(fprx,"%c %s\n", X_MAILF, Sfile);
  881. -==============================================================
  882. ----- uuxqt.c ---- 185,188 ----
  883. -       int stcico = 0;
  884. -       int argnok;
  885. - > #ifdef X_NONZERO
  886. - >     int nonzero = 0;
  887. - > #endif
  888. -       char xcmd[200];
  889. ----- uuxqt.c ----  43, 45 ----
  890. -               case X_NONOTI:
  891. -                   notiok = 0;
  892. -                   break;
  893. - > #ifdef X_NONZERO
  894. - >             /*
  895. - >              * notify only if non-zero status return
  896. - >              */
  897. - >             case X_NONZERO:
  898. - >                 nonzero = 1;
  899. - >                 break;
  900. - > #endif
  901. -               default:
  902. ----- uuxqt.c ---- 273,278 ----
  903. -           if (strcmp(xcmd, "rmail") != SAME
  904. - > #ifndef X_NONZERO
  905. -             && strcmp(xcmd, "mail") != SAME) {
  906. - > #else
  907. - >           && strcmp(xcmd, "mail") != SAME
  908. - >           && (!nonzero || (nonzero && ret != 0)) {
  909. - > #endif
  910. -   
  911. -           /*
  912. -            * see if user wants respcifiction
  913. -            */
  914. -==============================================================
  915. -
  916. -
  917. *-*-END-of-uucp/minus.z.5-*-*
  918. echo x - uucp/minus.z.v7 1>&2
  919. sed 's/.//' >uucp/minus.z.v7 <<'*-*-END-of-uucp/minus.z.v7-*-*'
  920. -Script started on Wed Feb 24 13:41:52 1982
  921. -Comet }{ foreach i (uucp.h uux.c uuxqt.c)
  922. -? echo $i
  923. -? diff -c $i.1.1 $i.1.2
  924. -? end
  925. -uucp.h
  926. -*** uucp.h.1.1    Wed Feb 24 13:40:04 1982
  927. ---- uucp.h.1.2    Wed Feb 24 13:40:14 1982
  928. -***************
  929. -*** 114,119
  930. -  #define X_CMD        'C'
  931. -  #define X_USER        'U'
  932. -  #define X_SENDFILE    'S'
  933. -  #define X_LOCK        "LCK.XQT"
  934. -  #define X_LOCKTIME    3600
  935. -  
  936. -
  937. ---- 114,121 -----
  938. -  #define X_CMD        'C'
  939. -  #define X_USER        'U'
  940. -  #define X_SENDFILE    'S'
  941. -+ #define X_NONOTI    'N'
  942. -+ #define X_NONZERO    'Z'
  943. -  #define X_LOCK        "LCK.XQT"
  944. -  #define X_LOCKTIME    3600
  945. -  
  946. -uux.c
  947. -*** uux.c.1.1    Wed Feb 24 13:40:34 1982
  948. ---- uux.c.1.2    Wed Feb 24 13:40:54 1982
  949. -***************
  950. -*** 51,56
  951. -      extern FILE *ufopen();
  952. -      int uid, ret;
  953. -      char redir = '\0';
  954. -  
  955. -      strcpy(Progname, "uux");
  956. -      uucpname(Myname);
  957. -
  958. ---- 51,58 -----
  959. -      extern FILE *ufopen();
  960. -      int uid, ret;
  961. -      char redir = '\0';
  962. -+     int nonoti = 0;
  963. -+     int nonzero = 0;
  964. -  
  965. -      strcpy(Progname, "uux");
  966. -      uucpname(Myname);
  967. -***************
  968. -*** 71,76
  969. -              if (Debug <= 0)
  970. -                  Debug = 1;
  971. -              break;
  972. -          default:
  973. -              fprintf(stderr, "unknown flag %s\n", argv[1]);
  974. -                  break;
  975. -
  976. ---- 73,84 -----
  977. -              if (Debug <= 0)
  978. -                  Debug = 1;
  979. -              break;
  980. -+         case 'n':
  981. -+             nonoti = 1;
  982. -+             break;
  983. -+         case 'z':
  984. -+             nonzero = 1;
  985. -+             break;
  986. -          default:
  987. -              fprintf(stderr, "unknown flag %s\n", argv[1]);
  988. -                  break;
  989. -***************
  990. -*** 107,112
  991. -      fpc = ufopen(tcfile, "w");
  992. -      ASSERT(fpc != NULL, "CAN'T OPEN", tcfile, 0);
  993. -      fprintf(fprx, "%c %s %s\n", X_USER, User, local);
  994. -  
  995. -      /* find remote system name */
  996. -      ap = inargs;
  997. -
  998. ---- 115,124 -----
  999. -      fpc = ufopen(tcfile, "w");
  1000. -      ASSERT(fpc != NULL, "CAN'T OPEN", tcfile, 0);
  1001. -      fprintf(fprx, "%c %s %s\n", X_USER, User, local);
  1002. -+     if (nonoti)
  1003. -+         fprintf(fprx,"%c\n", X_NONOTI);
  1004. -+     if (nonzero)
  1005. -+         fprintf(fprx,"%c\n", X_NONZERO);
  1006. -  
  1007. -      /* find remote system name */
  1008. -      ap = inargs;
  1009. -uuxqt.c
  1010. -*** uuxqt.c.1.1    Wed Feb 24 13:41:14 1982
  1011. ---- uuxqt.c.1.2    Wed Feb 24 13:41:39 1982
  1012. -***************
  1013. -*** 22,27
  1014. -  void exit();
  1015. -  char *strcpy();
  1016. -  
  1017. -  #define PATH    "PATH=/bin:/usr/bin;"
  1018. -  /*  to remove restrictions from uuxqt
  1019. -   *  define ALLOK 1
  1020. -
  1021. ---- 22,29 -----
  1022. -  void exit();
  1023. -  char *strcpy();
  1024. -  
  1025. -+ int notiok = 1;
  1026. -+ int nonzero = 0;
  1027. -  #define PATH    "PATH=/bin:/usr/bin;"
  1028. -  /*  to remove restrictions from uuxqt
  1029. -   *  define ALLOK 1
  1030. -***************
  1031. -*** 117,122
  1032. -                  if (*(cmd + strlen(cmd) - 1) == '\n')
  1033. -                      *(cmd + strlen(cmd) - 1) = '\0';
  1034. -                  break;
  1035. -              default:
  1036. -                  break;
  1037. -              }
  1038. -
  1039. ---- 119,130 -----
  1040. -                  if (*(cmd + strlen(cmd) - 1) == '\n')
  1041. -                      *(cmd + strlen(cmd) - 1) = '\0';
  1042. -                  break;
  1043. -+             case X_NONOTI:
  1044. -+                 notiok = 0;
  1045. -+                 break;
  1046. -+             case X_NONZERO:
  1047. -+                 nonzero = 1;
  1048. -+                 break;
  1049. -              default:
  1050. -                  break;
  1051. -              }
  1052. -***************
  1053. -*** 180,186
  1054. -          sprintf(retstat, "exit %d, signal %d", ret & 0377,
  1055. -            (ret>>8) & 0377);
  1056. -          if (strcmp(xcmd, "rmail") != SAME
  1057. -!           && strcmp(xcmd, "mail") != SAME)
  1058. -              notify(user, Rmtname, cmd, retstat);
  1059. -          else if (ret != 0) {
  1060. -              /* mail failed - return letter to sender  */
  1061. -
  1062. ---- 188,195 -----
  1063. -          sprintf(retstat, "exit %d, signal %d", ret & 0377,
  1064. -            (ret>>8) & 0377);
  1065. -          if (strcmp(xcmd, "rmail") != SAME
  1066. -!           && strcmp(xcmd, "mail") != SAME
  1067. -!           && notiok && (!nonzero || (nonzero && ret != 0)))
  1068. -              notify(user, Rmtname, cmd, retstat);
  1069. -          else if (ret != 0 && strcmp(xcmd, "rmail") == SAME) {
  1070. -              /* mail failed - return letter to sender  */
  1071. -# I think this change doesn't apply to all systems - it can be safely ignored.
  1072. -***************
  1073. -*** 182,188
  1074. -          if (strcmp(xcmd, "rmail") != SAME
  1075. -            && strcmp(xcmd, "mail") != SAME)
  1076. -              notify(user, Rmtname, cmd, retstat);
  1077. -!         else if (ret != 0) {
  1078. -              /* mail failed - return letter to sender  */
  1079. -              retosndr(user, Rmtname, fin, buf);
  1080. -              sprintf(buf, "ret (%o) from %s!%s", ret, Rmtname, user);
  1081. -
  1082. ---- 191,197 -----
  1083. -            && strcmp(xcmd, "mail") != SAME
  1084. -            && notiok && (!nonzero || (nonzero && ret != 0)))
  1085. -              notify(user, Rmtname, cmd, retstat);
  1086. -!         else if (ret != 0 && strcmp(xcmd, "rmail") == SAME) {
  1087. -              /* mail failed - return letter to sender  */
  1088. -              retosndr(user, Rmtname, fin, buf);
  1089. -              sprintf(buf, "ret (%o) from %s!%s", ret, Rmtname, user);
  1090. -Comet }{ 
  1091. -script done on Wed Feb 24 13:42:39 1982
  1092. *-*-END-of-uucp/minus.z.v7-*-*
  1093. echo x - uucp/uux.minus.c 1>&2
  1094. sed 's/.//' >uucp/uux.minus.c <<'*-*-END-of-uucp/uux.minus.c-*-*'
  1095. -*** /tmp/uux.c.old    Sat Apr  2 20:16:45 1983
  1096. ---- /tmp/uux.c.new    Sat Apr  2 20:16:54 1983
  1097. -***************
  1098. -*** 11,18
  1099. -  *cmdp++ = ' ';\
  1100. -  *cmdp = '\0';}
  1101. -  
  1102. -! #define GENSEND(f, a, b, c, d) {\
  1103. -! fprintf(f, "S %s %s %s - %s 0666\n", a, b, c, d);\
  1104. -  }
  1105. -  #define GENRCV(f, a, b, c) {\
  1106. -  fprintf(f, "R %s %s %s - \n", a, b, c);\
  1107. -
  1108. ---- 11,18 -----
  1109. -  *cmdp++ = ' ';\
  1110. -  *cmdp = '\0';}
  1111. -  
  1112. -! #define GENSEND(f, a, b, c, d, e) {\
  1113. -! fprintf(f, "S %s %s %s -%s %s 0666\n", a, b, c, d, e);\
  1114. -  }
  1115. -  #define GENRCV(f, a, b, c) {\
  1116. -  fprintf(f, "R %s %s %s - \n", a, b, c);\
  1117. -***************
  1118. -*** 36,41
  1119. -      char inargs[BUFSIZ];
  1120. -      int pipein = 0;
  1121. -      int startjob = 1;
  1122. -      char path[MAXFULLNAME];
  1123. -      char cmd[BUFSIZ];
  1124. -      char *ap, *cmdp;
  1125. -
  1126. ---- 36,42 -----
  1127. -      char inargs[BUFSIZ];
  1128. -      int pipein = 0;
  1129. -      int startjob = 1;
  1130. -+     int Copy = 1;
  1131. -      char path[MAXFULLNAME];
  1132. -      char cmd[BUFSIZ];
  1133. -      char *ap, *cmdp;
  1134. -***************
  1135. -*** 65,70
  1136. -          case 'r':
  1137. -              startjob = 0;
  1138. -              break;
  1139. -          case 'x':
  1140. -              Debug = atoi(&argv[1][2]);
  1141. -              if (Debug <= 0)
  1142. -
  1143. ---- 66,74 -----
  1144. -          case 'r':
  1145. -              startjob = 0;
  1146. -              break;
  1147. -+         case 'c':
  1148. -+             Copy = 0;
  1149. -+             break;
  1150. -          case 'x':
  1151. -              Debug = atoi(&argv[1][2]);
  1152. -              if (Debug <= 0)
  1153. -***************
  1154. -*** 148,154
  1155. -          }
  1156. -          fclose(fpd);
  1157. -          if (strcmp(local, xsys) != SAME) {
  1158. -!             GENSEND(fpc, dfile, dfile, User, dfile);
  1159. -              cflag++;
  1160. -          }
  1161. -          fprintf(fprx, "%c %s\n", X_RQDFILE, dfile);
  1162. -
  1163. ---- 152,158 -----
  1164. -          }
  1165. -          fclose(fpd);
  1166. -          if (strcmp(local, xsys) != SAME) {
  1167. -!             GENSEND(fpc, dfile, dfile, User, "", dfile);
  1168. -              cflag++;
  1169. -          }
  1170. -          fprintf(fprx, "%c %s\n", X_RQDFILE, dfile);
  1171. -***************
  1172. -*** 230,240
  1173. -                  fprintf(stderr, "permission denied %s\n", rest);
  1174. -                  cleanup(1);
  1175. -              }
  1176. -!             if (xcp(rest, dfile) != 0) {
  1177. -!                 fprintf(stderr, "can't copy %s to %s\n", rest, dfile);
  1178. -!                 cleanup(1);
  1179. -!             }
  1180. -!             GENSEND(fpc, rest, dfile, User, dfile);
  1181. -              cflag++;
  1182. -              if (redir == '<') {
  1183. -                  fprintf(fprx, "%c %s\n", X_STDIN, dfile);
  1184. -
  1185. ---- 234,247 -----
  1186. -                  fprintf(stderr, "permission denied %s\n", rest);
  1187. -                  cleanup(1);
  1188. -              }
  1189. -!             if (Copy) {
  1190. -!                 if (xcp(rest, dfile) != 0) {
  1191. -!                     fprintf(stderr, "can't copy %s to %s\n", rest, dfile);
  1192. -!                     cleanup(1);
  1193. -!                 }
  1194. -!                 GENSEND(fpc, rest, dfile, User, "", dfile);
  1195. -!             } else
  1196. -!                 GENSEND(fpc, rest, dfile, User, "c", dfile);
  1197. -              cflag++;
  1198. -              if (redir == '<') {
  1199. -                  fprintf(fprx, "%c %s\n", X_STDIN, dfile);
  1200. -***************
  1201. -*** 288,294
  1202. -              gename(DATAPRE, xsys, 'T', t2file);
  1203. -              GENRCV(fpd, rest, t2file, User);
  1204. -              fclose(fpd);
  1205. -!             GENSEND(fpc, dfile, tfile, User, dfile);
  1206. -              cflag++;
  1207. -              if (redir == '<') {
  1208. -                  fprintf(fprx, "%c %s\n", X_RQDFILE, t2file);
  1209. -
  1210. ---- 295,301 -----
  1211. -              gename(DATAPRE, xsys, 'T', t2file);
  1212. -              GENRCV(fpd, rest, t2file, User);
  1213. -              fclose(fpd);
  1214. -!             GENSEND(fpc, dfile, tfile, User, "", dfile);
  1215. -              cflag++;
  1216. -              if (redir == '<') {
  1217. -                  fprintf(fprx, "%c %s\n", X_RQDFILE, t2file);
  1218. -***************
  1219. -*** 332,338
  1220. -                  xuuxqt();
  1221. -      }
  1222. -      else {
  1223. -!         GENSEND(fpc, rxfile, tfile, User, rxfile);
  1224. -          cflag++;
  1225. -      }
  1226. -  
  1227. -
  1228. ---- 339,345 -----
  1229. -                  xuuxqt();
  1230. -      }
  1231. -      else {
  1232. -!         GENSEND(fpc, rxfile, tfile, User, "", rxfile);
  1233. -          cflag++;
  1234. -      }
  1235. -  
  1236. *-*-END-of-uucp/uux.minus.c-*-*
  1237. exit
  1238.  
  1239.