|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T u
Length: 1923 (0x783)
Types: TextFile
Names: »userlist.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
└─⟦this⟧ »EUUGD11/euug-87hel/sec1/vn/userlist.c«
/*
** vn news reader.
**
** userlist.c - generate user's list of articles
**
** see copyright disclaimer / history in vn.c source file
*/
#include <stdio.h>
#include "vn.h"
extern PAGE Page;
/*
generate user list of articles - either article numbers
are input directly (numeric list), or input is a search
string - invoke regular expression library and examine titles
search string "*" reserved for marked articles. Strings may
be prefixed with '!' for negation.
*/
userlist (list)
char *list;
{
int i,j,anum[RECLEN/2],acount;
char neg, *s, sbuf[MAX_C+1], *reg, *regex(), *regcmp(), *index(), *strtok();
user_str (sbuf,"Articles or title search string : ",1);
if (sbuf[0] == '!')
{
neg = '!';
s = sbuf+1;
}
else
{
neg = '\0';
s = sbuf;
}
for (i=0; s[i] != '\0'; ++i)
{
if (index(LIST_SEP,s[i]) == NULL)
{
if (s[i] < '0' || s[i] > '9')
break;
}
}
acount = 0;
if (s[i] == '\0')
{
for (s = strtok(s,LIST_SEP); s != NULL; s = strtok(NULL,LIST_SEP))
{
anum[acount] = atoi(s);
++acount;
}
}
else
{
if (s[0] == ART_MARK)
{
for (i=0; i < Page.h.artnum; ++i)
{
if (Page.b[i].art_mark == ART_MARK)
{
anum[acount] = Page.b[i].art_id;
++acount;
}
}
}
else
{
reg = regcmp(s,(char *) 0);
if (reg != NULL)
{
for (i=0; i < Page.h.artnum; ++i)
{
if (regex(reg,Page.b[i].art_t) != NULL)
{
anum[acount] = Page.b[i].art_id;
++acount;
}
}
regfree (reg);
}
else
preinfo ("bad regular expression syntax");
}
}
/* algorithm is inefficient, but we're only handling a few numbers */
*list = '\0';
for (i=0; i < Page.h.artnum; ++i)
{
for (j=0; j < acount && anum[j] != Page.b[i].art_id; ++j)
;
if (neg == '!')
{
if (j < acount)
continue;
}
else
{
if (j >= acount)
continue;
}
sprintf (list,"%d ",Page.b[i].art_id);
list += strlen(list);
}
}