home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
rtsi.com
/
2014.01.www.rtsi.com.tar
/
www.rtsi.com
/
OS9
/
OSK
/
TELECOM
/
stg_v4.lzh
/
nodelist.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-11-11
|
7KB
|
266 lines
#include "stgnet.h"
#include "db9.h"
#include "nodes.h"
struct sNode sThis;
struct sNode sNode;
char buf[256];
char hostname[32];
main(argc,argv)
char **argv;
{
int hNet;
int n;
openerr(*argv,0,LOG_STGNET);
gethostname(hostname,32);
if (!*hostname)
exit(syserr("hostname not defined"));
dash(argv)
{
case '#':
wstringf(2,"nodelist: %s\n",STG_VER);
exit(0);
case '?':
writeln(2,"nodelist - list StG-Net nodes\n",80);
STGVER;
exit(0);
default:
exit(syserr("invalid option: %s",--*argv));
}
setuid(0);
hNet=open(STG_FILE,O_RDWR|O_BINARY);
if (hNet==ERR)
exit(syserr("open %s: %m",STG_FILE));
if (_db9(DB_OPEN,hNet,"nodes",6)==ERR)
exit(syserr("DB9 open nodes: %m"));
/* select case insensitive seek */
if (_db9(DB_MATCH,hNet,-1,0)==ERR)
exit(syserr("DB9 match c-i: %m"));
/* obtain info for this node */
n=_db9(DB_SEEK,hNet,hostname,strlen(hostname)+1);
if (n==ERR)
exit(syserr("DB9 seek %s: %m",hostname));
if (!n)
exit(syserr("node %s not found",hostname));
if (_db9(DB_READ,hNet,&sThis,sizeof(sThis))==ERR)
exit(syserr("DB9 read node %s: %m",hostname));
if (*argv)
{
n=_db9(DB_SEEK,hNet,*argv,strlen(*argv)+1);
if (n==ERR)
exit(syserr("DB9 seek %s: %m",*argv));
if (!n)
exit(syserr("node %s not found",*argv));
if (_db9(DB_READ,hNet,&sNode,sizeof(sNode))==ERR)
exit(syserr("DB9 read %s: %m",*argv));
wstringf(1,"Node Name : %s\n",sNode.acN_Name);
switch (sNode.bN_MType)
{
case 0: strcpy(buf,"(undefined)"); break;
case MT_OSK: strcpy(buf,"OS-9 680x0"); break;
case MT_OS9K: strcpy(buf,"OS-9000 (intel)"); break;
case MT_6809: strcpy(buf,"OS-9 6809"); break;
case MT_UNIX: strcpy(buf,"UNIX"); break;
case MT_MSDOS: strcpy(buf,"MS-DOS"); break;
case MT_MSWIN: strcpy(buf,"MS-WIN"); break;
case MT_WINNT: strcpy(buf,"WIN/NT"); break;
case MT_OS2: strcpy(buf,"OS/2"); break;
default: strcpy(buf,"(unknown)"); break;
}
wstringf(1,"Machine Type : %s\n",buf);
if (*sNode.acN_Phone)
{
wstringf(1,"Modem Phone #: (%3.3s)%3.3s-%4.4s ",
sNode.acN_Phone,
sNode.acN_Phone+3,
sNode.acN_Phone+6);
switch (sNode.bN_LD)
{
case 2:
wstringf(1,"(local)\n");
case 3:
wstringf(1,"(long distance)\n");
default:
wstringf(1,"(?)\n");
}
wstringf(1,"Modem Speed : %d00\n",sNode.wN_Speed);
}
if (*sNode.acN_ISDN)
wstringf(1,"ISDN number : %s\n",sNode.acN_ISDN);
if (sNode.abN_INET[0])
wstringf(1,"Internet addr: %03d.%03d.%03d\n",
sNode.abN_INET[0],
sNode.abN_INET[1],
sNode.abN_INET[2],
sNode.abN_INET[3]);
wstringf(1,"Description : %s\n",sNode.acN_Desc);
wstringf(1,"Sysop Name : %s\n",sNode.acN_Sysop);
wstringf(1," Address: %s\n",sNode.acN_Addr);
wstringf(1," City : %s\n",sNode.acN_City);
wstringf(1," State : %s\n",sNode.acN_State);
wstringf(1," Zip : %s\n",sNode.acN_Zip);
wstringf(1," Country: %s\n",sNode.acN_Country);
wstringf(1," Phone #: %s\n",sNode.acN_SPhone);
wstringf(1,"UTC Offset : %d\n",sNode.cN_UTC);
if (sNode.abN_WkdHrs[0]==0 && sNode.abN_WkdHrs[1]%24==0)
strcpy(buf,"24hrs");
else
stringf(buf,"%02d:00-%02d:00",
(sNode.abN_WkdHrs[0]+(sThis.cN_UTC-sNode.cN_UTC))%24,
(sNode.abN_WkdHrs[1]+(sThis.cN_UTC-sNode.cN_UTC))%24);
wstringf(1,"Weekday Hours: %s\n",buf);
if (sNode.abN_WkeHrs[0]==0 && sNode.abN_WkeHrs[1]%24==0)
strcpy(buf,"24hrs");
else
stringf(buf,"%02d:00-%02d:00",
(sNode.abN_WkeHrs[0]+(sThis.cN_UTC-sNode.cN_UTC))%24,
(sNode.abN_WkeHrs[1]+(sThis.cN_UTC-sNode.cN_UTC))%24);
wstringf(1,"Weekday Hours: %s\n",buf);
if (sNode.abN_NetHrs[0]==0 && sNode.abN_NetHrs[1]%24==0)
strcpy(buf,"24hrs");
else
stringf(buf,"%02d:00-%02d:00",
(sNode.abN_NetHrs[0]+(sThis.cN_UTC-sNode.cN_UTC))%24,
(sNode.abN_NetHrs[1]+(sThis.cN_UTC-sNode.cN_UTC))%24);
wstringf(1,"Network Hours: %s\n",buf);
switch (sNode.bN_Status)
{
case NS_DEAD: strcpy(buf,"DEAD"); break;
case NS_USER: strcpy(buf,"Online, open access to all"); break;
case NS_REST: strcpy(buf,"Online, access restricted by sysop"); break;
case NS_NONE: strcpy(buf,"Online, private system"); break;
case NS_DOWN: strcpy(buf,"Temporarily offline"); break;
default: strcpy(buf,"UNKNOWN");
}
wstringf(1,"Status : %s\n",buf);
n=0;
while (n<4)
{
if (!*sNode.asNode2[n].acN2_Name)
{
n++;
continue;
}
wstringf(1,"Nets with : %s ",sNode.asNode2[n].acN2_Name);
if (!sNode.asNode2[n].bN2_MaxAge)
wstringf(1,"(immediate)\n");
else
if (!sNode.asNode2[n].bN2_MinAge)
wstringf(1,"(every %d hrs)\n",sNode.asNode2[n].bN2_MaxAge);
else
wstringf(1,"(every %d-%d hrs, %d-%d K)\n",
sNode.asNode2[n].bN2_MinAge,
sNode.asNode2[n].bN2_MaxAge,
sNode.asNode2[n].bN2_MinSize,
sNode.asNode2[n].bN2_MaxSize);
n++;
}
exit(0);
}
if (_db9(DB_SEEK,hNet,0,0)==ERR)
exit(syserr("DB9 seek 0: %m"));
while (n=_db9(DB_NEXT,hNet,&sNode,sizeof(sNode)))
{
if (n==ERR)
exit(syserr("DB9 next: %m"));
if (sNode.bN_Status==NS_DEAD)
continue;
if (!*sNode.acN_Phone)
{
strcpy(buf,"(no modem access)");
}
else
{
*buf=0;
if (*sNode.acN_ICode)
sprintf(buf,"%s-",sNode.acN_ICode);
sprintf(buf+strlen(buf),"(%3.3s)%3.3s-%4.4s",
sNode.acN_Phone,
sNode.acN_Phone+3,
sNode.acN_Phone+6);
}
if (sNode.abN_WkdHrs[0]==0 && sNode.abN_WkdHrs[1]%24==0)
strcat(buf," 24hrs");
else
stringf(buf+strlen(buf)," %02d-%02d",
(sNode.abN_WkdHrs[0]+(sThis.cN_UTC-sNode.cN_UTC))%24,
(sNode.abN_WkdHrs[1]+(sThis.cN_UTC-sNode.cN_UTC))%24);
if (sNode.abN_WkeHrs[0]==0 && sNode.abN_WkeHrs[1]%24==0)
strcat(buf,"/24hrs");
else
stringf(buf+strlen(buf),"/%02d-%02d",
(sNode.abN_WkeHrs[0]+(sThis.cN_UTC-sNode.cN_UTC))%24,
(sNode.abN_WkeHrs[1]+(sThis.cN_UTC-sNode.cN_UTC))%24);
if (sNode.wN_Speed && *sNode.acN_Phone)
sprintf(buf+strlen(buf)," %d00",sNode.wN_Speed);
if (sNode.bN_Status==NS_REST)
strcat(buf," (R)");
if (sNode.bN_Status==NS_NONE)
strcpy(buf,"(private system)");
if (sNode.bN_Status==NS_DOWN)
strcpy(buf,"(currently offline)");
#define FMT "%-12.12s %-24.24s %3.3s %-36.36s\n"
wstringf(1,FMT,sNode.acN_Name,sNode.acN_Desc,sNode.acN_State,buf);
if (sNode.bN_Status!=NS_NONE && sNode.bN_Status!=NS_DOWN)
{
if (*sNode.acN_ISDN)
{
sprintf(buf,"ISDN: %s",sNode.acN_ISDN);
wstringf(1,FMT,"","","",buf);
}
if (sNode.abN_INET[0])
{
sprintf(buf,"Internet: %03d.%03d.%03d.%03d",
sNode.abN_INET[0],
sNode.abN_INET[1],
sNode.abN_INET[2],
sNode.abN_INET[3]);
wstringf(1,FMT,"","","",buf);
}
}
}
close(hNet);
}