home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
unix
/
volume22
/
nn6.4
/
patch01
< prev
next >
Wrap
Text File
|
1990-06-07
|
30KB
|
1,025 lines
Subject: v22i056: NN Newsreader, release 6.4, Patch1
Newsgroups: comp.sources.unix
Approved: rsalz@uunet.UU.NET
X-Checksum-Snefru: 7430c72b c041cf0e 8c9bea34 6734af79
Submitted-by: "Kim F. Storm" <storm@texas.dk>
Posting-number: Volume 22, Issue 56
Archive-name: nn6.4/patch1
This is an official patch to nn release 6.4
-------------------------------------------
PATCH #1
Priority: HIGH
These patches fixes a number of bugs in the initial 6.4 release of nn
as described in the updated RELEASE_NOTES file (read that for details
about this patch). Thanks to all who reported bugs and provided fixes.
To apply this patch, use nn's :patch command, or run this command from
the shell in the root of the nn source tree:
patch -p0 < this-article
----
Title: Init file processing writes to string constant.
From: Sean Casey <sean@ms.uky.edu>
David Heath <dave@boingo.med.jhu.edu>
Title: nnmaster -l always quits.
From: Sean Casey <sean@ms.uky.edu>
David Heath <dave@boingo.med.jhu.edu>
syd@dsinc.dsi.com (Syd Weinstein)
Title: Database inconsistency always reported for some groups
From: syd@dsinc.dsi.com (Syd Weinstein)
Title: Unsubscribed groups can interfere with merged groups.
From: Robert.Stockton@ELROND.GANDALF.CS.CMU.EDU
Title: Y (overview) in "nn -X" mode doesn't show unsubscribed groups.
From: KFS
Title: 'y' response to Abort? is not recognized
From: Mark Nagel <nagel@ics.UCI.EDU>
Title: Cannot set "included-mark" to blanks
From: beldar@mips.com (Gardner Cohen)
Title: Some lines are ignored in manuals
From: Peter Andersen <datpete@daimi.dk>
Title: Escape codes are always turned into ^[ form.
From: Piet Beertema <piet@cwi.nl>
Title: Bug in generation of message-id line
From: Pekka Kyt|laakso <netmgr@csc.fi> + fix
Title: G command may leave group "active".
From: Greg Onufer <exodus@cherrs2.Eng.Sun.COM>
Scott Boyd <scott@Futures.COM>
Title: nngrab uses egrep -i
From: pete@eleazar.dartmouth.edu (Pete Schmitt)
Title: Folder subarticles span to end of file (only NNTP).
From: Robert.Stockton@ELROND.GANDALF.CS.CMU.EDU
Title: help commands shows wrong info for new commands
From: netmgr@csc.FI (Pekka Kytolaakso)
Title: Groups may be removed from database due to disk full. (nntp)
From: KFS
++Kim Storm
*** ./LAST/admin.c Sat May 5 14:11:43 1990
--- admin.c Thu May 10 11:49:29 1990
***************
*** 356,361 ****
--- 356,369 ----
data_offset = ftell(data);
if (data_offset != gh->data_write_offset)
valerr(("DATA OFFSET %ld != %ld", (long)gh->data_write_offset, (long)data_offset), 9);
+
+ while (++cur_article <= gh->last_db_article) {
+ if (!db_read_offset(ix, &next_offset))
+ valerr(("NO INDEX FOR ARTICLE %ld", (long)cur_article), 12);
+ if (data_offset != next_offset)
+ valerr(("OFFSET ERROR: %ld: %ld != %ld", (long)cur_article, (long)data_offset, (long)next_offset), 13);
+ }
+
data_offset = ftell(ix);
if (data_offset != gh->index_write_offset)
valerr(("INDEX OFFSET %ld != %ld", (long)gh->index_write_offset, (long)data_offset), 10);
*** ./LAST/answer.c Wed May 2 10:35:56 1990
--- answer.c Wed May 9 19:20:03 1990
***************
*** 70,76 ****
fprintf(t, "Path: %s!%s\n", host, user_name());
fprintf(t, "Date: %s %s %s %s GMT\n", date+8, date+4, date+22, date+11);
! fprintf(t, "Message-ID: <%s.%ld@%s>\n", user_name, (long)now, host);
ed_line += 3;
}
#endif
--- 70,76 ----
fprintf(t, "Path: %s!%s\n", host, user_name());
fprintf(t, "Date: %s %s %s %s GMT\n", date+8, date+4, date+22, date+11);
! fprintf(t, "Message-ID: <%s.%ld@%s>\n", user_name(), (long)now, host);
ed_line += 3;
}
#endif
***************
*** 202,208 ****
--- 202,212 ----
FILE *f;
char *name, *str;
{
+ int xport = (*name == '*');
+
+ if (xport) name++;
fprintf(f, "%s='%s'\n", name, str != NULL ? str : "");
+ if (xport) fprintf(f, "export %s\n", name);
}
static aux_param_int(f, name, i)
***************
*** 257,263 ****
aux_param_str(param, "DFLT_ANSW", response_dflt_answer);
if (current_group != NULL) {
! aux_param_str(param, "G", current_group->group_name);
if (ah == NULL)
fn = NULL;
else
--- 261,267 ----
aux_param_str(param, "DFLT_ANSW", response_dflt_answer);
if (current_group != NULL) {
! aux_param_str(param, "*G", current_group->group_name);
if (ah == NULL)
fn = NULL;
else
***************
*** 267,273 ****
else
#endif
fn = group_path_name;
! aux_param_str(param, "A", fn != NULL ? fn : "");
}
/*
--- 271,277 ----
else
#endif
fn = group_path_name;
! aux_param_str(param, "*A", fn != NULL ? fn : "");
}
/*
*** ./LAST/articles.c Thu Apr 26 19:56:03 1990
--- articles.c Thu May 10 11:09:46 1990
***************
*** 360,365 ****
--- 360,366 ----
if (ah->a_number > last_article) break;
if (flags & ACC_SPEW_MODE) {
+ fold_string(db_data.dh_subject);
printf("%x:%s\n", (int)(gh->group_num), db_data.dh_subject);
continue;
}
*** ./LAST/aux.sh Wed Apr 25 21:31:59 1990
--- aux.sh Wed May 9 12:29:27 1990
***************
*** 94,100 ****
${AWK} 'END{printf "Confirm abort: (y) "}' < /dev/null
read act
case "$act" in
! ""|"y*") rm -f $WORK $COPY ;
exit 22 ;;
esac
;;
--- 94,100 ----
${AWK} 'END{printf "Confirm abort: (y) "}' < /dev/null
read act
case "$act" in
! ""|y*) rm -f $WORK $COPY ;
exit 22 ;;
esac
;;
*** ./LAST/collect.c Wed May 2 00:03:36 1990
--- collect.c Thu May 10 11:20:31 1990
***************
*** 469,478 ****
}
unblock_group:
! if (temp > 0 || (gh->master_flag & M_BLOCKED)) {
! gh->master_flag &= ~(M_EXPIRE | M_BLOCKED);
! db_write_group(gh);
! }
}
if (col_article_count > 0)
--- 469,476 ----
}
unblock_group:
! gh->master_flag &= ~(M_EXPIRE | M_BLOCKED);
! db_write_group(gh);
}
if (col_article_count > 0)
*** ./LAST/db.c Sat May 5 18:25:56 1990
--- db.c Tue May 8 13:36:37 1990
***************
*** 6,11 ****
--- 6,12 ----
#include "config.h"
#include "db.h"
+ #include <errno.h>
import char
*master_directory, *db_directory, *db_data_directory, *news_directory;
***************
*** 558,563 ****
--- 559,565 ----
char d_or_x;
int mode;
{
+ FILE *f;
char data_file[FILENAME];
db_data_path(data_file, gh, d_or_x);
***************
*** 564,572 ****
if (mode == -1) {
unlink(data_file);
! return (FILE *)NULL;
! } else
! return open_file(data_file, mode);
}
--- 566,580 ----
if (mode == -1) {
unlink(data_file);
! f = NULL;
! } else {
! f = open_file(data_file, (mode & ~MUST_EXIST));
! if (f == NULL && (mode & MUST_EXIST))
! sys_error("%s (%d): cannot open '%c' file (mode=%x, errno=%d)",
! gh->group_name, (int)(gh->group_num), d_or_x,
! mode, errno);
! }
! return f;
}
*** ./LAST/doc/RELEASE_NOTES Sat May 5 15:56:49 1990
--- doc/RELEASE_NOTES Thu May 10 14:45:29 1990
***************
*** 1,6 ****
! Release 6.4.0 known problems
! ----------------------------
Prog: nn
Title: G= in merged groups
--- 1,13 ----
! Known problems in release 6.4
! -----------------------------
+ Prog: nnmaster - nntp
+ Title: nnmaster may hang if nntp server dies.
+ From: Rene Seindal <seindal@diku.dk>
+
+ Keep-alive must be set on the nntp socket to be able to notify
+ the nnmaster that the server has died (via sigpipe).
+
Prog: nn
Title: G= in merged groups
***************
*** 103,105 ****
--- 110,254 ----
Title: Shell layers are not supported.
^Z is eaten by nn so shell layers don't work.
+
+ Prog: nn
+ Title: Init file processing writes to string constant.
+ From: Sean Casey <sean@ms.uky.edu>
+ David Heath <dave@boingo.med.jhu.edu>
+ Fixed: Patch #1 [init.c]
+
+ If one doesn't use "-fwritable-strings" with gcc, nnadmin core
+ dumps because of some code in the process init file section.
+ It tries to write to the string "init,", which may be in the
+ text segment.
+
+ Prog: nnmaster
+ Title: nnmaster -l always quits.
+ From: Sean Casey <sean@ms.uky.edu>
+ David Heath <dave@boingo.med.jhu.edu>
+ syd@dsinc.dsi.com (Syd Weinstein)
+ Fixed: Patch #1 [master.c]
+
+ Anytime I give the -l flag to nnmaster, it quits with:
+ E: May 7 15:05 (M): Incomplete MASTER file
+
+ Prog: nnmaster
+ Title: Database inconsistency always reported for some groups
+ From: syd@dsinc.dsi.com (Syd Weinstein)
+ Fixed: Patch #1 [admin.c collect.c]
+
+ Some groups always reports inconsistencies even after recollection.
+ (It turns out that if the highest numbered article(s) in a group does
+ not exist, the validation of the index fails, and furthermore, if
+ only non-existing articles are "collected" in a group by nnmaster,
+ the group header is not saved in the database. ++Kim)
+
+ Prog: nn
+ Title: Unsubscribed groups can interfere with merged groups.
+ From: Robert.Stockton@ELROND.GANDALF.CS.CMU.EDU
+ Fixed: Patch #1 [sequence.c]
+
+ Unsubscribed groups foul up merging of the form "foo*,". The
+ "Next Group" command may show you some of the merged groups again.
+
+ Prog: nn
+ Title: Remapping keys may interfere with Junk command.
+ From: Robert.Stockton@ELROND.GANDALF.CS.CMU.EDU
+
+ Menu mode macros are invoked when the appropriate keystrokes are used
+ in the Junk command. For example, when I rebound 'N' in menu mode to
+ a macro, it interfered with Junking of "Leave-Next" articles.
+
+ Prog: nn
+ Title: Y (overview) in "nn -X" mode doesn't show unsubscribed groups.
+ Fixed: Patch #1 [group.c]
+
+ "nn -X" includes unsubscribed groups in the sequence, but they are
+ not shown on the group overview.
+
+ Prog: aux
+ Title: 'y' response to Abort? is not recognized
+ From: Mark Nagel <nagel@ics.UCI.EDU>
+ Fixed: Patch #1 [aux.sh]
+
+ If you try to abort a posting, and you actually type 'y' and
+ return, it doesn't work.
+
+ Prog: nn
+ Title: Cannot set "included-mark" to blanks
+ From: beldar@mips.com (Gardner Cohen)
+ Fixed: Patch #1 [init.c] -- need to put \ before first space.
+
+ My preferred indented prefix is three blanks, which I haven't been
+ able to set in my init in the past (is it possible now?).
+
+ Prog: manuals
+ Title: Some lines are ignored
+ From: Peter Andersen <datpete@daimi.dk>
+ Fixed: Patch #1 [nn.1 nnmaster.8]
+
+ Some text lines in the manuals contain a period at the beginning
+ of a line; this is mis-interpreted as an nroff command.
+
+ Prog: nn
+ Title: Escape codes are always turned into ^[ form.
+ From: Piet Beertema <piet@cwi.nl>
+ Fixed: Patch #1 [more.c variable.c nn.1] -- new trusted-escape-codes var.
+
+ I encountered problems with both rn and nn, which wouldn't properly
+ display in kanji: the ESC char was "escaped", i.e. displayed as ^[
+ But kanji encoding uses the ESC, so escaping them obviously messes up
+ things. [You must fix inews also - it normally discards ESC]
+
+ Prog: nn
+ Title: Bug in generation of message-id line
+ From: Pekka Kyt|laakso <netmgr@csc.fi> + fix
+ Fixed: Patch #1 [answer.c]
+
+ user_name is "called" without ().
+
+ Prog: nn
+ Title: G command may leave group "active".
+ From: Greg Onufer <exodus@cherrs2.Eng.Sun.COM>
+ Scott Boyd <scott@Futures.COM>
+ Fixed: Patch #1 [group.c]
+
+ G group @ with no archive file leaved group active.
+ group-group command fails with "groupname is an active group" on
+ 2nd attempt, if no articles were found on 1st attempt.
+
+ Prog: nngrab
+ Title: nngrab uses egrep -i
+ From: pete@eleazar.dartmouth.edu (Pete Schmitt)
+ Fixed: Patch #1 [articles.c nngrab.sh]
+
+ nngrab uses egrep with a -i option. This option is only valid for
+ grep and fgrep on BSD 4.3 -- i.e. it is not portable.
+
+ Prog: nn
+ Title: Folder subarticles span to end of file (only NNTP).
+ From: Robert.Stockton@ELROND.GANDALF.CS.CMU.EDU
+ Fixed: Patch #1 [news.c]
+
+ When you use the 'G' command to view an article in a folder, it shows
+ you the entire contents of the folder from that point rather than the
+ single article requested. (This only happens with NNTP ++Kim)
+
+ Prog: nn
+ Title: help commands shows wrong info for new commands
+ From: netmgr@csc.FI (Pekka Kytolaakso)
+ Fixed: Patch #1 [help.commands]
+
+ There's an error in the file help commands. It still uses 'L' as the
+ 'change layout' key (in selection mode) and dosn't say anything about
+ the news use of the L key.
+
+ Prog: nnmaster - nntp_get_active
+ Title: Groups may be removed from database due to disk full.
+ From: KFS
+ Fixed: Patch #1 [nntp.c]
+
+ If the disk runs full while the active file is fetched from an nntp
+ server, the incomplete active file is believed to be the complete
+ active file. This causes nnmaster to remove the groups which didn't
+ get written to the active file.
*** ./LAST/group.c Wed May 2 10:35:56 1990
--- group.c Wed May 9 18:50:20 1990
***************
*** 330,349 ****
n = 1; /* must unsort articles */
if (mg_head != NULL) gh = mg_head;
! if (!no_update) {
! do {
! if (mask == NULL && (access_mode & ACC_ALSO_READ_ARTICLES) == 0
! && first_art < 0) {
! if (menu_cmd != ME_NO_ARTICLES) gh->group_flag &= ~G_NEW;
! if ((gh->group_flag & G_UNSUBSCRIBED) == 0 || keep_unsub_long) {
! if (n) sort_articles(0);
! n = 0;
! update_rc(gh);
! }
! }
! gh->current_first = 0;
! } while (mg_head != NULL && (gh = gh->merge_with) != NULL);
! }
killed_articles = o_killed;
restore_variables();
--- 330,345 ----
n = 1; /* must unsort articles */
if (mg_head != NULL) gh = mg_head;
! do {
! gh->current_first = 0;
! if (mask != NULL) continue;
! if (access_mode & ACC_ALSO_READ_ARTICLES || first_art >= 0) continue;
! if (menu_cmd != ME_NO_ARTICLES) gh->group_flag &= ~G_NEW;
! if (gh->group_flag & G_UNSUBSCRIBED && !keep_unsub_long) continue;
! if (n) sort_articles(0);
! n = 0;
! update_rc(gh);
! } while (mg_head != NULL && (gh = gh->merge_with) != NULL);
killed_articles = o_killed;
restore_variables();
***************
*** 744,751 ****
release_memory(&mem_marker);
goto_exit:
! if (gh != orig_group)
if (orig_group) init_group(orig_group);
m_endinput();
return menu_cmd;
--- 740,749 ----
release_memory(&mem_marker);
goto_exit:
! if (gh != orig_group) {
! gh->current_first = 0;
if (orig_group) init_group(orig_group);
+ }
m_endinput();
return menu_cmd;
***************
*** 924,931 ****
Loop_Groups_Sequence(gh) {
if (gh->group_flag & G_FAKED) continue;
if (gh->master_flag & M_NO_DIRECTORY) continue;
! if (gh != current_group)
! if ((gh->group_flag & G_COUNTED) == 0) continue;
if (disp_group(gh) < 0) break;
}
} else
--- 922,932 ----
Loop_Groups_Sequence(gh) {
if (gh->group_flag & G_FAKED) continue;
if (gh->master_flag & M_NO_DIRECTORY) continue;
! if (gh != current_group) {
! if (gh->unread_count <= 0) continue;
! if (gh->group_flag & G_UNSUBSCRIBED && !also_unsub_groups)
! continue;
! }
if (disp_group(gh) < 0) break;
}
} else
*** ./LAST/help/help.commands Mon Apr 23 18:32:36 1990
--- help/help.commands Thu May 10 13:05:41 1990
***************
*** 21,28 ****
help ? ? online help
junk-articles J change marking of articles on the menu
kill-select K K kill/select handling
! layout L change menu layout
leave-article l l leave (mark) article for later use
line+1 down CR next menu line/scroll one line
line-1 up previous menu line
line=@ g goto specific line
--- 21,29 ----
help ? ? online help
junk-articles J change marking of articles on the menu
kill-select K K kill/select handling
! layout " change menu layout
leave-article l l leave (mark) article for later use
+ leave-next L L permanently mark article for later use
line+1 down CR next menu line/scroll one line
line-1 up previous menu line
line=@ g goto specific line
*** ./LAST/init.c Fri Apr 27 20:23:00 1990
--- init.c Wed May 9 17:48:37 1990
***************
*** 53,58 ****
--- 53,59 ----
if (cmd == NULL) return cmd;
while (*cmd && isspace(*cmd)) cmd++;
+ if (*cmd == '\\' && isspace(cmd[1])) cmd++;
if (*cmd == NUL || *cmd == NL) return NULL;
return cmd;
***************
*** 172,177 ****
--- 173,180 ----
fclose(init);
}
+ static char dflt_init_files[] = ",init";
+
visit_init_file(only_seq, first_arg)
int only_seq;
char *first_arg;
***************
*** 183,189 ****
if (first_arg[2] == NUL) return;
first_arg += 2;
} else
! first_arg = ",init";
in_init = 1;
while (first_arg) {
--- 186,192 ----
if (first_arg[2] == NUL) return;
first_arg += 2;
} else
! first_arg = dflt_init_files;
in_init = 1;
while (first_arg) {
***************
*** 540,546 ****
clrdisp();
! printf("Available: %ld - %ld (unread %ld)\n\n",
(long)(gh->first_db_article), (long)(gh->last_db_article),
(long)(gh->unread_count));
printf(".newsrc:\n\r>%s\r<%s\n\rselect:\n\r>%s\r<%s\n\r",
--- 543,549 ----
clrdisp();
! printf("Available: %ld - %ld (unread %ld)\n\n\r",
(long)(gh->first_db_article), (long)(gh->last_db_article),
(long)(gh->unread_count));
printf(".newsrc:\n\r>%s\r<%s\n\rselect:\n\r>%s\r<%s\n\r",
*** ./LAST/man/nn.1.A Sat May 5 14:19:09 1990
--- man/nn.1.A Thu May 10 14:53:46 1990
***************
*** 878,884 ****
\fBRelated variables\fP:
case-fold-search, compress, data-bits, date, header-lines,
mark-overlap, monitor, overlap, scroll-clear-page, stop,
! wrap-header-margin.
.SH PREVIEWING ARTICLES IN SELECTION MODE
In selection mode, it is possible to read a specific article on the
menu without entering reading mode for all the selected articles on
--- 878,884 ----
\fBRelated variables\fP:
case-fold-search, compress, data-bits, date, header-lines,
mark-overlap, monitor, overlap, scroll-clear-page, stop,
! trusted-escape-codes, wrap-header-margin.
.SH PREVIEWING ARTICLES IN SELECTION MODE
In selection mode, it is possible to read a specific article on the
menu without entering reading mode for all the selected articles on
*** ./LAST/man/nn.1.C Sat May 5 14:19:09 1990
--- man/nn.1.C Thu May 10 14:53:46 1990
***************
*** 700,706 ****
is done by simple subtracting the first unread article number from the
total number of articles in each group. This is very fast, and fairly
accurate but it may be a bit too large. If not set, each line in
! .newsrc will be interpreted to count every unread article, thus giving
a very accurate number. This variable is also used by \fInncheck\fP.
.TP
\fBquick-save\fP (boolean, default false)
--- 700,706 ----
is done by simple subtracting the first unread article number from the
total number of articles in each group. This is very fast, and fairly
accurate but it may be a bit too large. If not set, each line in
! \&.newsrc will be interpreted to count every unread article, thus giving
a very accurate number. This variable is also used by \fInncheck\fP.
.TP
\fBquick-save\fP (boolean, default false)
***************
*** 920,925 ****
--- 920,939 ----
.I sysline (1)
utility.
.TP
+ \fBtrusted-escape-codes\fP \fIcodes\fP (string, default none)
+ When set to a list of one or more characters, \fInn\fP will trust and
+ output \fIescape\fP characters in an article if it is followed by one
+ of the characters in the list. For example, to switch to or from
+ kanji mode, control codes like "\fIesc\fP\ $" and "\fIesc\fP\ (\ J"
+ may be present in the text. To allow these codes, use the following
+ command:
+ .sp 0.5v
+ set trusted-escape-codes ($
+ .sp 0.5v
+ You can also set it to \fBall\fP to pass all espace codes through to
+ the screen. Notice that \fInn\fP thinks all characters (including
+ \fIesc\fP) output to the screen as occupy one column.
+ .TP
\fBunshar-command\fP \fIshell-command\fP (string, default "/bin/sh")
This is the command which is invoked by the \fBunshar\fP command.
.TP
***************
*** 936,942 ****
When set, unsubscribing to a group will automatically mark all current
articles read; this is recommended to keep the size of .newsrc down.
Otherwise, unread articles in the unsubscribe groups are kept in
! .newsrc. If \fBkeep-unsubscribed\fP is false, this variable has no
effect.
.TP
\fBupdate-frequency\fP (integer, default 1)
--- 950,956 ----
When set, unsubscribing to a group will automatically mark all current
articles read; this is recommended to keep the size of .newsrc down.
Otherwise, unread articles in the unsubscribe groups are kept in
! \&.newsrc. If \fBkeep-unsubscribed\fP is false, this variable has no
effect.
.TP
\fBupdate-frequency\fP (integer, default 1)
*** ./LAST/man/nn.1.D Sat May 5 14:19:09 1990
--- man/nn.1.D Thu May 10 14:53:46 1990
***************
*** 1055,1063 ****
.TP
\fBRC\fP
This is a pseudo group name which matches all groups occurring in the
! .newsrc file. It will cause the groups in .newsrc to be appended to
the presentation sequence in the sequence in which they are listed in
! .newsrc.
.TP
\fBRC:\fP\fInumber\fP
Similar to the \fBRC\fP entry, but limited to the first \fInumber\fP
--- 1055,1063 ----
.TP
\fBRC\fP
This is a pseudo group name which matches all groups occurring in the
! \&.newsrc file. It will cause the groups in .newsrc to be appended to
the presentation sequence in the sequence in which they are listed in
! \&.newsrc.
.TP
\fBRC:\fP\fInumber\fP
Similar to the \fBRC\fP entry, but limited to the first \fInumber\fP
*** ./LAST/man/nnmaster.8 Sat May 5 14:11:44 1990
--- man/nnmaster.8 Wed May 9 20:34:09 1990
***************
*** 483,489 ****
.br
$db/DATA/\fInnn\fP.[dx] Database files for group number \fInnn\fP
.br
! .../.nn[dx] Database files if located in the group directories
.br
$master/GATE Message channel from \fInnadmin\fP to \fInnmaster\fP
.br
--- 483,489 ----
.br
$db/DATA/\fInnn\fP.[dx] Database files for group number \fInnn\fP
.br
! \&.../.nn[dx] Database files if located in the group directories
.br
$master/GATE Message channel from \fInnadmin\fP to \fInnmaster\fP
.br
*** ./LAST/master.c Sat May 5 18:25:56 1990
--- master.c Tue May 8 16:09:52 1990
***************
*** 512,520 ****
static set_lock_message()
{
- open_master(OPEN_UPDATE);
- db_read_master();
if (lock_message[0] || master.db_lock[0]) {
strncpy(master.db_lock, lock_message, DB_LOCK_MESSAGE);
master.db_lock[DB_LOCK_MESSAGE-1] = NUL;
db_write_master();
--- 512,519 ----
static set_lock_message()
{
if (lock_message[0] || master.db_lock[0]) {
+ open_master(OPEN_UPDATE);
strncpy(master.db_lock, lock_message, DB_LOCK_MESSAGE);
master.db_lock[DB_LOCK_MESSAGE-1] = NUL;
db_write_master();
***************
*** 612,617 ****
--- 611,618 ----
nn_exit(0);
}
+ open_master(OPEN_READ);
+
if (lock_message != NULL) {
set_lock_message();
if (repeat_delay == 0 && !foreground &&
***************
*** 618,625 ****
!reread_groups_file && group_selection == 0)
nn_exit(0);
}
-
- open_master(OPEN_READ);
if (!ignore_lock && master.db_lock[0]) {
printf("Database locked (unlock with -l or ignore with -i)\n");
--- 619,624 ----
*** ./LAST/more.c Mon Apr 23 18:26:06 1990
--- more.c Wed May 9 20:39:40 1990
***************
*** 23,28 ****
--- 23,29 ----
export int data_bits = 7;
export int scroll_clear_page = 1;
export int expired_msg_delay = 1;
+ export char *trusted_escapes = NULL;
import int preview_window;
import int novice;
***************
*** 542,547 ****
--- 543,565 ----
} while (col & 07);
goto next_char;
+ case 033: /* ESC may be a start/end of kanji or similar */
+ if (trusted_escapes != NULL) {
+ if (col + 3 > Columns) {
+ ungetc(c, art);
+ goto long_line;
+ }
+ if (strcmp(trusted_escapes, "all") == 0) break;
+ c = getc(art);
+ if (c == EOF) goto next_char;
+ ungetc(c, art);
+ for (fname = trusted_escapes; *fname; fname++)
+ if (c == *fname) break;
+ c = 033;
+ if (*fname != NUL) break;
+ }
+ /* FALL THRU */
+
default:
if (col + 2 > Columns) {
ungetc(c, art);
*** ./LAST/news.c Wed May 2 22:19:53 1990
--- news.c Thu May 10 11:09:45 1990
***************
*** 283,289 ****
news.ng_lpos = ftell(f);
}
#ifdef NNTP
! else if (use_nntp && (art->flag & A_DIGEST) == 0) {
fseek(f, (off_t)0, 2);
art->lpos = ftell(f);
}
--- 283,289 ----
news.ng_lpos = ftell(f);
}
#ifdef NNTP
! else if (use_nntp && (art->flag & (A_DIGEST | A_FOLDER)) == 0) {
fseek(f, (off_t)0, 2);
art->lpos = ftell(f);
}
***************
*** 305,311 ****
digest_buffer = buffer2;
}
#ifdef NNTP
! else if (use_nntp && (art->flag & A_DIGEST) == 0) {
fseek(f, (off_t)0, 2);
art->lpos = ftell(f);
}
--- 305,311 ----
digest_buffer = buffer2;
}
#ifdef NNTP
! else if (use_nntp && (art->flag & (A_DIGEST | A_FOLDER)) == 0) {
fseek(f, (off_t)0, 2);
art->lpos = ftell(f);
}
*** ./LAST/nngrab.sh Sun Apr 29 15:54:28 1990
--- nngrab.sh Thu May 10 11:09:46 1990
***************
*** 14,20 ****
fi
if [ -s $DB/subjects ] ; then
! egrep -i "^[^:]*:.*$1" $DB/subjects |
sed 's/^\([^:]*\):.*/\1/' |
uniq > $TMP/nngrab$$
--- 14,20 ----
fi
if [ -s $DB/subjects ] ; then
! egrep "^[^:]*:.*$1" $DB/subjects |
sed 's/^\([^:]*\):.*/\1/' |
uniq > $TMP/nngrab$$
*** ./LAST/nntp.c Sat May 5 18:25:56 1990
--- nntp.c Thu May 10 14:50:17 1990
***************
*** 688,694 ****
switch (n = ask_server("LIST")) {
case OK_GROUPS:
new = open_file(new_name, OPEN_CREATE_RW|MUST_EXIST);
! if (copy_text(new) == 0) break;
unlink(new_name);
if (!nntp_failed) {
log_entry('N', "LIST empty");
--- 688,697 ----
switch (n = ask_server("LIST")) {
case OK_GROUPS:
new = open_file(new_name, OPEN_CREATE_RW|MUST_EXIST);
! if (copy_text(new) == 0) {
! if (fflush(new) != EOF) break;
! fclose(new);
! }
unlink(new_name);
if (!nntp_failed) {
log_entry('N', "LIST empty");
***************
*** 886,894 ****
if (mode == 1 && !last_copy_blank)
fputc(NL, tmp); /* add blank line after header */
cptr->art = article;
cptr->grp = group_hd;
- fclose(tmp);
goto out;
case OK_BODY:
--- 889,897 ----
if (mode == 1 && !last_copy_blank)
fputc(NL, tmp); /* add blank line after header */
+ if (fclose(tmp) == EOF) goto err;
cptr->art = article;
cptr->grp = group_hd;
goto out;
case OK_BODY:
***************
*** 896,902 ****
fseek(tmp, (off_t)0, 2);
if (copy_text(tmp) < 0)
return NULL;
! fclose(tmp);
goto out;
case ERR_NOARTIG:
--- 899,905 ----
fseek(tmp, (off_t)0, 2);
if (copy_text(tmp) < 0)
return NULL;
! if (fclose(tmp) == EOF) goto err;
goto out;
case ERR_NOARTIG:
***************
*** 911,916 ****
--- 914,922 ----
out:
return open_file(cptr->file_name, OPEN_READ|MUST_EXIST);
+
+ err:
+ sys_error('N', "Cannot write temporary file %s", cptr->file_name);
}
/*
*** ./LAST/patchlevel.h Sat May 5 19:02:38 1990
--- patchlevel.h Thu May 10 13:06:05 1990
***************
*** 10,16 ****
* 1989-09-08: Release 6.3.7 (FTP)
* 1990-03-03: Release 6.4beta (FTP)
* 1990-05-07: Release 6.4 (comp.sources.unix)
*/
! #define PATCHLEVEL 0
--- 10,18 ----
* 1989-09-08: Release 6.3.7 (FTP)
* 1990-03-03: Release 6.4beta (FTP)
* 1990-05-07: Release 6.4 (comp.sources.unix)
+ *
+ * 1990-05-10: Patch #1 (6.4.1)
*/
! #define PATCHLEVEL 1
*** ./LAST/sequence.c Mon Apr 23 18:25:53 1990
--- sequence.c Tue May 8 15:15:11 1990
***************
*** 348,356 ****
start_group_search(gname);
while (gh = get_group_search()) {
if (!enter_sequence(mode, gh)) continue;
! if (merge_groups && (gh->group_flag & G_UNSUBSCRIBED) == 0) {
if (mp_group == NULL) {
gh->group_flag |= G_MERGE_HEAD;
} else {
--- 348,358 ----
start_group_search(gname);
while (gh = get_group_search()) {
+ if (merge_groups && gh->group_flag & G_UNSUBSCRIBED) continue;
+
if (!enter_sequence(mode, gh)) continue;
! if (merge_groups) {
if (mp_group == NULL) {
gh->group_flag |= G_MERGE_HEAD;
} else {
*** ./LAST/term.c Thu Apr 26 21:15:34 1990
--- term.c Wed May 9 12:29:26 1990
***************
*** 61,67 ****
static char XBC[64], XUP[64];
static char enter_ca_mode[64], exit_ca_mode[64];
static char cursor_home[64];
! static char cursor_address[64];
static char clear_screen[64];
static char clr_eol[64];
static char clr_eos[64];
--- 61,67 ----
static char XBC[64], XUP[64];
static char enter_ca_mode[64], exit_ca_mode[64];
static char cursor_home[64];
! static char cursor_address[128];
static char clear_screen[64];
static char clr_eol[64];
static char clr_eos[64];
*** ./LAST/variable.c Wed May 2 17:30:03 1990
--- variable.c Wed May 9 17:48:38 1990
***************
*** 35,40 ****
--- 35,41 ----
*response_dflt_answer,
*save_counter_format,
*spell_checker,
+ *trusted_escapes,
unshar_command[],
*unshar_header_file,
*user_shell;
***************
*** 302,307 ****
--- 303,309 ----
"suggest-default-save", BOOL 0, (char **)&suggest_save_file,
"tidy-newsrc", BOOL 0, (char **)&tidy_newsrc,
"time", BOOL 0, (char **)&show_current_time,
+ "trusted-escape-codes", STR 0, (char **)&trusted_escapes,
"unshar-command", STR SAFE 1, (char **)unshar_command,
"unshar-header-file", STR 0, (char **)&unshar_header_file,
"unsubscribe-mark-read", BOOL 4, (char **)&keep_unsub_long,
---
Kim F. Storm storm@texas.dk Tel +45 429 174 00
Texas Instruments, Marielundvej 46E, DK-2730 Herlev, Denmark
No news is good news, but nn is better!