version 1.2, 1996/06/11 12:53:33 |
version 1.3, 1997/07/13 21:21:09 |
|
|
/* $OpenBSD$ */ |
/* $OpenBSD$ */ |
/* $NetBSD: cmd2.c,v 1.5 1996/06/08 19:48:13 christos Exp $ */ |
/* $NetBSD: cmd2.c,v 1.7 1997/05/17 19:55:10 pk Exp $ */ |
|
|
/* |
/* |
* Copyright (c) 1980, 1993 |
* Copyright (c) 1980, 1993 |
|
|
if (*msgvec != NULL) { |
if (*msgvec != NULL) { |
|
|
/* |
/* |
* If some messages were supplied, find the |
* If some messages were supplied, find the |
* first applicable one following dot using |
* first applicable one following dot using |
* wrap around. |
* wrap around. |
*/ |
*/ |
|
|
if (*ip2 == NULL) |
if (*ip2 == NULL) |
ip2 = msgvec; |
ip2 = msgvec; |
} while (ip2 != ip); |
} while (ip2 != ip); |
printf("No messages applicable\n"); |
puts("No messages applicable"); |
return(1); |
return(1); |
} |
} |
|
|
|
|
if ((mp->m_flag & (MDELETED|MSAVED)) == 0) |
if ((mp->m_flag & (MDELETED|MSAVED)) == 0) |
break; |
break; |
if (mp >= &message[msgCount]) { |
if (mp >= &message[msgCount]) { |
printf("At EOF\n"); |
puts("At EOF"); |
return(0); |
return(0); |
} |
} |
dot = mp; |
dot = mp; |
|
|
{ |
{ |
char *str = v; |
char *str = v; |
|
|
return save1(str, 1, "save", saveignore); |
return(save1(str, 1, "save", saveignore)); |
} |
} |
|
|
/* |
/* |
|
|
{ |
{ |
char *str = v; |
char *str = v; |
|
|
return save1(str, 0, "copy", saveignore); |
return(save1(str, 0, "copy", saveignore)); |
} |
} |
|
|
/* |
/* |
|
|
int f, *msgvec; |
int f, *msgvec; |
FILE *obuf; |
FILE *obuf; |
|
|
msgvec = (int *) salloc((msgCount + 2) * sizeof *msgvec); |
msgvec = (int *) salloc((msgCount + 2) * sizeof(*msgvec)); |
if ((file = snarf(str, &f)) == NOSTR) |
if ((file = snarf(str, &f)) == NOSTR) |
return(1); |
return(1); |
if (!f) { |
if (!f) { |
|
|
else |
else |
disp = "[New file]"; |
disp = "[New file]"; |
if ((obuf = Fopen(file, "a")) == NULL) { |
if ((obuf = Fopen(file, "a")) == NULL) { |
perror(NOSTR); |
warn(NOSTR); |
return(1); |
return(1); |
} |
} |
for (ip = msgvec; *ip && ip-msgvec < msgCount; ip++) { |
for (ip = msgvec; *ip && ip-msgvec < msgCount; ip++) { |
|
|
touch(mp); |
touch(mp); |
if (send(mp, obuf, ignore, NOSTR) < 0) { |
if (send(mp, obuf, ignore, NOSTR) < 0) { |
perror(file); |
perror(file); |
Fclose(obuf); |
(void)Fclose(obuf); |
return(1); |
return(1); |
} |
} |
if (mark) |
if (mark) |
|
|
fflush(obuf); |
fflush(obuf); |
if (ferror(obuf)) |
if (ferror(obuf)) |
perror(file); |
perror(file); |
Fclose(obuf); |
(void)Fclose(obuf); |
printf("%s\n", disp); |
printf("%s\n", disp); |
return(0); |
return(0); |
} |
} |
|
|
{ |
{ |
char *str = v; |
char *str = v; |
|
|
return save1(str, 1, "write", ignoreall); |
return(save1(str, 1, "write", ignoreall)); |
} |
} |
|
|
/* |
/* |
|
|
while (cp > linebuf && !isspace(*cp)) |
while (cp > linebuf && !isspace(*cp)) |
cp--; |
cp--; |
if (*cp == '\0') { |
if (*cp == '\0') { |
printf("No file specified.\n"); |
puts("No file specified."); |
return(NOSTR); |
return(NOSTR); |
} |
} |
if (isspace(*cp)) |
if (isspace(*cp)) |
|
|
{ |
{ |
int *msgvec = v; |
int *msgvec = v; |
delm(msgvec); |
delm(msgvec); |
return 0; |
return(0); |
} |
} |
|
|
/* |
/* |
|
|
list[1] = NULL; |
list[1] = NULL; |
return(type(list)); |
return(type(list)); |
} |
} |
printf("At EOF\n"); |
puts("At EOF"); |
} else |
} else |
printf("No more messages\n"); |
puts("No more messages"); |
return(0); |
return(0); |
} |
} |
|
|
|
|
dot = mp; |
dot = mp; |
mp->m_flag &= ~MDELETED; |
mp->m_flag &= ~MDELETED; |
} |
} |
return 0; |
return(0); |
} |
} |
|
|
/* |
/* |
|
|
abort(); |
abort(); |
_exit(1); |
_exit(1); |
} |
} |
printf("Okie dokie"); |
fputs("Okie dokie", stdout); |
fflush(stdout); |
fflush(stdout); |
wait_child(pid); |
wait_child(pid); |
if (wait_status.w_coredump) |
if (wait_status.w_coredump) |
printf(" -- Core dumped.\n"); |
puts(" -- Core dumped."); |
else |
else |
printf(" -- Can't dump core.\n"); |
puts(" -- Can't dump core."); |
return 0; |
return(0); |
} |
} |
|
|
/* |
/* |
|
|
else |
else |
times = (atoi(argv[0]) + 511) / 512; |
times = (atoi(argv[0]) + 511) / 512; |
clob1(times); |
clob1(times); |
return 0; |
return(0); |
} |
} |
|
|
/* |
/* |
|
|
{ |
{ |
char **list = v; |
char **list = v; |
|
|
return ignore1(list, ignore + 1, "retained"); |
return(ignore1(list, ignore + 1, "retained")); |
} |
} |
|
|
/* |
/* |
|
|
{ |
{ |
char **list = v; |
char **list = v; |
|
|
return ignore1(list, ignore, "ignored"); |
return(ignore1(list, ignore, "ignored")); |
} |
} |
|
|
int |
int |
|
|
{ |
{ |
char **list = v; |
char **list = v; |
|
|
return ignore1(list, saveignore + 1, "retained"); |
return(ignore1(list, saveignore + 1, "retained")); |
} |
} |
|
|
int |
int |
|
|
{ |
{ |
char **list = v; |
char **list = v; |
|
|
return ignore1(list, saveignore, "ignored"); |
return(ignore1(list, saveignore, "ignored")); |
} |
} |
|
|
int |
int |
|
|
struct ignoretab *tab; |
struct ignoretab *tab; |
char *which; |
char *which; |
{ |
{ |
char field[BUFSIZ]; |
char field[LINESIZE]; |
register int h; |
register int h; |
register struct ignore *igp; |
register struct ignore *igp; |
char **ap; |
char **ap; |
|
|
if (*list == NOSTR) |
if (*list == NOSTR) |
return igshow(tab, which); |
return(igshow(tab, which)); |
for (ap = list; *ap != 0; ap++) { |
for (ap = list; *ap != 0; ap++) { |
istrcpy(field, *ap); |
istrcpy(field, *ap); |
if (member(field, tab)) |
if (member(field, tab)) |
continue; |
continue; |
h = hash(field); |
h = hash(field); |
igp = (struct ignore *) calloc(1, sizeof (struct ignore)); |
igp = (struct ignore *) calloc(1, sizeof(struct ignore)); |
igp->i_field = calloc((unsigned) strlen(field) + 1, |
igp->i_field = calloc((unsigned) strlen(field) + 1, |
sizeof (char)); |
sizeof(char)); |
strcpy(igp->i_field, field); |
strcpy(igp->i_field, field); |
igp->i_link = tab->i_head[h]; |
igp->i_link = tab->i_head[h]; |
tab->i_head[h] = igp; |
tab->i_head[h] = igp; |
tab->i_count++; |
tab->i_count++; |
} |
} |
return 0; |
return(0); |
} |
} |
|
|
/* |
/* |
|
|
|
|
if (tab->i_count == 0) { |
if (tab->i_count == 0) { |
printf("No fields currently being %s.\n", which); |
printf("No fields currently being %s.\n", which); |
return 0; |
return(0); |
} |
} |
ring = (char **) salloc((tab->i_count + 1) * sizeof (char *)); |
ring = (char **) salloc((tab->i_count + 1) * sizeof(char *)); |
ap = ring; |
ap = ring; |
for (h = 0; h < HSHSIZE; h++) |
for (h = 0; h < HSHSIZE; h++) |
for (igp = tab->i_head[h]; igp != 0; igp = igp->i_link) |
for (igp = tab->i_head[h]; igp != 0; igp = igp->i_link) |
*ap++ = igp->i_field; |
*ap++ = igp->i_field; |
*ap = 0; |
*ap = 0; |
qsort(ring, tab->i_count, sizeof (char *), igcomp); |
qsort(ring, tab->i_count, sizeof(char *), igcomp); |
for (ap = ring; *ap != 0; ap++) |
for (ap = ring; *ap != 0; ap++) |
printf("%s\n", *ap); |
puts(*ap); |
return 0; |
return(0); |
} |
} |
|
|
/* |
/* |
|
|
igcomp(l, r) |
igcomp(l, r) |
const void *l, *r; |
const void *l, *r; |
{ |
{ |
return (strcmp(*(char **)l, *(char **)r)); |
return(strcmp(*(char **)l, *(char **)r)); |
} |
} |