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 >
C/C++ Source or Header  |  1994-11-11  |  7KB  |  266 lines

  1. #include "stgnet.h"
  2. #include "db9.h"
  3.  
  4. #include "nodes.h"
  5.  
  6. struct sNode sThis;
  7. struct sNode sNode;
  8.  
  9. char buf[256];
  10.  
  11. char hostname[32];
  12.  
  13. main(argc,argv)
  14. char **argv;
  15. {
  16.     int hNet;
  17.     int n;
  18.  
  19.     openerr(*argv,0,LOG_STGNET);
  20.  
  21.     gethostname(hostname,32);
  22.     if (!*hostname)
  23.         exit(syserr("hostname not defined"));
  24.  
  25.     dash(argv)
  26.     {
  27.     case '#':
  28.         wstringf(2,"nodelist: %s\n",STG_VER);
  29.         exit(0);
  30.  
  31.     case '?':
  32.         writeln(2,"nodelist  - list StG-Net nodes\n",80);
  33.         STGVER;
  34.         exit(0);
  35.  
  36.     default:
  37.         exit(syserr("invalid option: %s",--*argv));
  38.     }
  39.  
  40.     setuid(0);
  41.  
  42.     hNet=open(STG_FILE,O_RDWR|O_BINARY);
  43.     if (hNet==ERR)
  44.         exit(syserr("open %s: %m",STG_FILE));
  45.  
  46.     if (_db9(DB_OPEN,hNet,"nodes",6)==ERR)
  47.         exit(syserr("DB9 open nodes: %m"));
  48.  
  49.     /* select case insensitive seek */
  50.     if (_db9(DB_MATCH,hNet,-1,0)==ERR)
  51.         exit(syserr("DB9 match c-i: %m"));
  52.  
  53.     /* obtain info for this node */
  54.     n=_db9(DB_SEEK,hNet,hostname,strlen(hostname)+1);
  55.     if (n==ERR)
  56.         exit(syserr("DB9 seek %s: %m",hostname));
  57.     if (!n)
  58.         exit(syserr("node %s not found",hostname));
  59.  
  60.     if (_db9(DB_READ,hNet,&sThis,sizeof(sThis))==ERR)
  61.         exit(syserr("DB9 read node %s: %m",hostname));
  62.  
  63.     if (*argv)
  64.     {
  65.         n=_db9(DB_SEEK,hNet,*argv,strlen(*argv)+1);
  66.         if (n==ERR)
  67.             exit(syserr("DB9 seek %s: %m",*argv));
  68.         if (!n)
  69.             exit(syserr("node %s not found",*argv));
  70.  
  71.         if (_db9(DB_READ,hNet,&sNode,sizeof(sNode))==ERR)
  72.             exit(syserr("DB9 read %s: %m",*argv));
  73.  
  74.         wstringf(1,"Node Name    : %s\n",sNode.acN_Name);
  75.  
  76.         switch (sNode.bN_MType)
  77.         {
  78.         case 0:            strcpy(buf,"(undefined)"); break;
  79.         case MT_OSK:    strcpy(buf,"OS-9 680x0"); break;
  80.         case MT_OS9K:    strcpy(buf,"OS-9000 (intel)"); break;
  81.         case MT_6809:    strcpy(buf,"OS-9 6809"); break;
  82.         case MT_UNIX:    strcpy(buf,"UNIX"); break;
  83.         case MT_MSDOS:    strcpy(buf,"MS-DOS"); break;
  84.         case MT_MSWIN:    strcpy(buf,"MS-WIN"); break;
  85.         case MT_WINNT:    strcpy(buf,"WIN/NT"); break;
  86.         case MT_OS2:    strcpy(buf,"OS/2"); break;
  87.         default:        strcpy(buf,"(unknown)"); break;
  88.         }
  89.         wstringf(1,"Machine Type : %s\n",buf);
  90.  
  91.         if (*sNode.acN_Phone)
  92.         {
  93.             wstringf(1,"Modem Phone #: (%3.3s)%3.3s-%4.4s ",
  94.                 sNode.acN_Phone,
  95.                 sNode.acN_Phone+3,
  96.                 sNode.acN_Phone+6);
  97.             switch (sNode.bN_LD)
  98.             {
  99.             case 2:
  100.                 wstringf(1,"(local)\n");
  101.             case 3:
  102.                 wstringf(1,"(long distance)\n");
  103.             default:
  104.                 wstringf(1,"(?)\n");
  105.             }
  106.             wstringf(1,"Modem Speed  : %d00\n",sNode.wN_Speed);
  107.         }
  108.         if (*sNode.acN_ISDN)
  109.             wstringf(1,"ISDN number  : %s\n",sNode.acN_ISDN);
  110.         if (sNode.abN_INET[0])
  111.             wstringf(1,"Internet addr: %03d.%03d.%03d\n",
  112.                 sNode.abN_INET[0],
  113.                 sNode.abN_INET[1],
  114.                 sNode.abN_INET[2],
  115.                 sNode.abN_INET[3]);
  116.  
  117.         wstringf(1,"Description  : %s\n",sNode.acN_Desc);
  118.         wstringf(1,"Sysop Name   : %s\n",sNode.acN_Sysop);
  119.         wstringf(1,"      Address: %s\n",sNode.acN_Addr);
  120.         wstringf(1,"      City   : %s\n",sNode.acN_City);
  121.         wstringf(1,"      State  : %s\n",sNode.acN_State);
  122.         wstringf(1,"      Zip    : %s\n",sNode.acN_Zip);
  123.         wstringf(1,"      Country: %s\n",sNode.acN_Country);
  124.         wstringf(1,"      Phone #: %s\n",sNode.acN_SPhone);
  125.         wstringf(1,"UTC Offset   : %d\n",sNode.cN_UTC);
  126.         
  127.         if (sNode.abN_WkdHrs[0]==0 && sNode.abN_WkdHrs[1]%24==0)
  128.             strcpy(buf,"24hrs");
  129.         else
  130.             stringf(buf,"%02d:00-%02d:00",
  131.                 (sNode.abN_WkdHrs[0]+(sThis.cN_UTC-sNode.cN_UTC))%24,
  132.                 (sNode.abN_WkdHrs[1]+(sThis.cN_UTC-sNode.cN_UTC))%24);
  133.  
  134.         wstringf(1,"Weekday Hours: %s\n",buf);
  135.  
  136.         if (sNode.abN_WkeHrs[0]==0 && sNode.abN_WkeHrs[1]%24==0)
  137.             strcpy(buf,"24hrs");
  138.         else
  139.             stringf(buf,"%02d:00-%02d:00",
  140.                 (sNode.abN_WkeHrs[0]+(sThis.cN_UTC-sNode.cN_UTC))%24,
  141.                 (sNode.abN_WkeHrs[1]+(sThis.cN_UTC-sNode.cN_UTC))%24);
  142.  
  143.         wstringf(1,"Weekday Hours: %s\n",buf);
  144.  
  145.         if (sNode.abN_NetHrs[0]==0 && sNode.abN_NetHrs[1]%24==0)
  146.             strcpy(buf,"24hrs");
  147.         else
  148.             stringf(buf,"%02d:00-%02d:00",
  149.                 (sNode.abN_NetHrs[0]+(sThis.cN_UTC-sNode.cN_UTC))%24,
  150.                 (sNode.abN_NetHrs[1]+(sThis.cN_UTC-sNode.cN_UTC))%24);
  151.  
  152.         wstringf(1,"Network Hours: %s\n",buf);
  153.  
  154.         switch (sNode.bN_Status)
  155.         {
  156.         case NS_DEAD: strcpy(buf,"DEAD"); break;
  157.         case NS_USER: strcpy(buf,"Online, open access to all"); break;
  158.         case NS_REST: strcpy(buf,"Online, access restricted by sysop"); break;
  159.         case NS_NONE: strcpy(buf,"Online, private system"); break;
  160.         case NS_DOWN: strcpy(buf,"Temporarily offline"); break;
  161.         default: strcpy(buf,"UNKNOWN");
  162.         }
  163.         wstringf(1,"Status       : %s\n",buf);
  164.         n=0;
  165.         while (n<4)
  166.         {
  167.             if (!*sNode.asNode2[n].acN2_Name)
  168.             {
  169.                 n++;
  170.                 continue;
  171.             }
  172.             wstringf(1,"Nets with    : %s ",sNode.asNode2[n].acN2_Name);
  173.             if (!sNode.asNode2[n].bN2_MaxAge)
  174.                 wstringf(1,"(immediate)\n");
  175.             else
  176.             if (!sNode.asNode2[n].bN2_MinAge)
  177.                 wstringf(1,"(every %d hrs)\n",sNode.asNode2[n].bN2_MaxAge);
  178.             else
  179.                 wstringf(1,"(every %d-%d hrs, %d-%d K)\n",
  180.                     sNode.asNode2[n].bN2_MinAge,
  181.                     sNode.asNode2[n].bN2_MaxAge,
  182.                     sNode.asNode2[n].bN2_MinSize,
  183.                     sNode.asNode2[n].bN2_MaxSize);
  184.             n++;
  185.         }
  186.         exit(0);
  187.     }
  188.  
  189.     if (_db9(DB_SEEK,hNet,0,0)==ERR)
  190.         exit(syserr("DB9 seek 0: %m"));
  191.  
  192.     while (n=_db9(DB_NEXT,hNet,&sNode,sizeof(sNode)))
  193.     {
  194.         if (n==ERR)
  195.             exit(syserr("DB9 next: %m"));
  196.  
  197.         if (sNode.bN_Status==NS_DEAD)
  198.             continue;
  199.  
  200.         if (!*sNode.acN_Phone)
  201.         {
  202.             strcpy(buf,"(no modem access)");
  203.         }
  204.         else
  205.         {
  206.             *buf=0;
  207.             if (*sNode.acN_ICode)
  208.                 sprintf(buf,"%s-",sNode.acN_ICode);
  209.     
  210.             sprintf(buf+strlen(buf),"(%3.3s)%3.3s-%4.4s",
  211.                 sNode.acN_Phone,
  212.                 sNode.acN_Phone+3,
  213.                 sNode.acN_Phone+6);
  214.         }
  215.  
  216.         if (sNode.abN_WkdHrs[0]==0 && sNode.abN_WkdHrs[1]%24==0)
  217.             strcat(buf," 24hrs");
  218.         else
  219.             stringf(buf+strlen(buf)," %02d-%02d",
  220.                 (sNode.abN_WkdHrs[0]+(sThis.cN_UTC-sNode.cN_UTC))%24,
  221.                 (sNode.abN_WkdHrs[1]+(sThis.cN_UTC-sNode.cN_UTC))%24);
  222.  
  223.         if (sNode.abN_WkeHrs[0]==0 && sNode.abN_WkeHrs[1]%24==0)
  224.             strcat(buf,"/24hrs");
  225.         else
  226.             stringf(buf+strlen(buf),"/%02d-%02d",
  227.                 (sNode.abN_WkeHrs[0]+(sThis.cN_UTC-sNode.cN_UTC))%24,
  228.                 (sNode.abN_WkeHrs[1]+(sThis.cN_UTC-sNode.cN_UTC))%24);
  229.  
  230.         if (sNode.wN_Speed && *sNode.acN_Phone)
  231.             sprintf(buf+strlen(buf)," %d00",sNode.wN_Speed);
  232.  
  233.         if (sNode.bN_Status==NS_REST)
  234.             strcat(buf," (R)");
  235.  
  236.         if (sNode.bN_Status==NS_NONE)
  237.             strcpy(buf,"(private system)");
  238.  
  239.         if (sNode.bN_Status==NS_DOWN)
  240.             strcpy(buf,"(currently offline)");
  241.  
  242. #define FMT "%-12.12s %-24.24s %3.3s %-36.36s\n"
  243.  
  244.         wstringf(1,FMT,sNode.acN_Name,sNode.acN_Desc,sNode.acN_State,buf);
  245.  
  246.         if (sNode.bN_Status!=NS_NONE && sNode.bN_Status!=NS_DOWN)
  247.         {
  248.             if (*sNode.acN_ISDN)
  249.             {
  250.                 sprintf(buf,"ISDN: %s",sNode.acN_ISDN);
  251.                 wstringf(1,FMT,"","","",buf);
  252.             }
  253.             if (sNode.abN_INET[0])
  254.             {
  255.                 sprintf(buf,"Internet: %03d.%03d.%03d.%03d",
  256.                     sNode.abN_INET[0],
  257.                     sNode.abN_INET[1],
  258.                     sNode.abN_INET[2],
  259.                     sNode.abN_INET[3]);
  260.                 wstringf(1,FMT,"","","",buf);
  261.             }
  262.         }
  263.     }
  264.     close(hNet);
  265. }
  266.