home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 2 BBS
/
02-BBS.zip
/
msq31004.zip
/
vsevops.c
< prev
Wrap
C/C++ Source or Header
|
1995-07-12
|
5KB
|
191 lines
/* vsevops - perform version 7 lookup operations */
/* written by Paul Edwards and released to the public domain */
#include "mxbt.h"
#include "vsev.h"
#include "msged.h"
static int compareSysop(void *a, void *b, int len)
{
int ret;
ret = strncmpi((char *)a, (char *)b, len);
return (ret);
}
static int compareNode(void *a, void *b, int len)
{
struct {
short zone;
short net;
short node;
short point;
} v7addr;
ADDRESS *addrp;
addrp = (ADDRESS *)b;
memcpy(&v7addr, a, len);
if (len <= 6)
{
v7addr.point = 0;
}
if (v7addr.zone < addrp->zone) return (-1);
else if (v7addr.zone > addrp->zone) return (1);
else if (v7addr.net < addrp->net) return (-1);
else if (v7addr.net > addrp->net) return (1);
else if (v7addr.node < addrp->node) return (-1);
else if (v7addr.node > addrp->node) return (1);
else if (v7addr.point < addrp->point) return (-1);
else if (v7addr.point > addrp->point) return (1);
else return (0);
}
/* the following stuff was written by John Dennis (with mods by
Paul Edwards) and was also released to the public domain */
char *v7lookupnode(ADDRESS *faddr, char *name)
{
long record;
char index_filename[FILENAME_MAX];
char data_filename[FILENAME_MAX];
MXBT mxbt;
VSEV vsev;
strcpy(index_filename, ST->nodepath);
strcat(index_filename, "\\");
if (ST->nodebase != NULL)
{
strcat(index_filename, ST->nodebase);
}
strcat(index_filename, ".NDX");
strcpy(data_filename, ST->nodepath);
strcat(data_filename, "\\");
if (ST->nodebase != NULL)
{
strcat(data_filename, ST->nodebase);
}
strcat(data_filename, ".DAT");
record = mxbtOneSearch(&mxbt,
index_filename,
(void *)faddr,
compareNode);
if (record == -1)
return (NULL);
if (vsevGetInfo(&vsev, data_filename, record) == 0)
{
strcpy(name, (char *)vsev.sysop);
return (name);
}
else return (NULL);
}
ADDRESS v7lookup(char *name)
{
ADDRESS faddr;
char reverse[80];
long record;
char index_filename[FILENAME_MAX];
char data_filename[FILENAME_MAX];
MXBT mxbt;
VSEV vsev;
faddr = CurArea.addr;
faddr.domain = NULL;
makeReverse(reverse, name);
strcpy(index_filename, ST->nodepath);
strcat(index_filename, "\\");
if (ST->sysop != NULL)
{
strcat(index_filename, ST->sysop);
}
strcpy(data_filename, ST->nodepath);
strcat(data_filename, "\\");
if (ST->nodebase != NULL)
{
strcat(data_filename, ST->nodebase);
}
strcat(data_filename, ".DAT");
record = mxbtOneSearch(&mxbt,
index_filename,
(void *)reverse,
compareSysop);
if (record == -1) {
faddr.notfound = 1;
return faddr;
}
if (vsevGetInfo(&vsev, data_filename, record) != 0)
{
faddr.notfound = 1;
return (faddr);
}
faddr.zone = vsev.zone;
faddr.net = vsev.net;
faddr.node = vsev.node;
faddr.point = vsev.point;
faddr.notfound = 0;
return (faddr);
}
char *v7lookupsystem(ADDRESS *faddr, char *system)
{
long record;
int is_point = 0;
char index_filename[FILENAME_MAX];
char data_filename[FILENAME_MAX];
MXBT mxbt;
VSEV vsev;
strcpy(index_filename, ST->nodepath);
strcat(index_filename, "\\");
if (ST->nodebase != NULL)
{
strcat(index_filename, ST->nodebase);
}
strcat(index_filename, ".NDX");
strcpy(data_filename, ST->nodepath);
strcat(data_filename, "\\");
if (ST->nodebase != NULL)
{
strcat(data_filename, ST->nodebase);
}
strcat(data_filename, ".DAT");
if (faddr->point)
{
is_point = faddr->point;
faddr->point = 0;
}
record = mxbtOneSearch(&mxbt,
index_filename,
(void *)faddr,
compareNode);
if (is_point)
faddr->point = is_point;
if (record == -1)
return (NULL);
if (vsevGetInfo(&vsev, data_filename, record) == 0)
{
strcpy(system, (char *)vsev.board);
if (is_point)
strcat(system, " (point)");
return (system);
}
else return (NULL);
}