home *** CD-ROM | disk | FTP | other *** search
/ ftp.wwiv.com / ftp.wwiv.com.zip / ftp.wwiv.com / pub / MISC / LO241SRV.ZIP / PACK.C < prev    next >
C/C++ Source or Header  |  1998-05-17  |  58KB  |  1,518 lines

  1.  
  2. // LoraBBS Version 2.41 Free Edition
  3. // Copyright (C) 1987-98 Marco Maccaferri
  4. //
  5. // This program is free software; you can redistribute it and/or modify
  6. // it under the terms of the GNU General Public License as published by
  7. // the Free Software Foundation; either version 2 of the License, or
  8. // (at your option) any later version.
  9. //
  10. // This program is distributed in the hope that it will be useful,
  11. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. // GNU General Public License for more details.
  14. //
  15. // You should have received a copy of the GNU General Public License
  16. // along with this program; if not, write to the Free Software
  17. // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  
  19. #include <stdlib.h>
  20. #include <stdio.h>
  21. #include <io.h>
  22. #include <fcntl.h>
  23. #include <dir.h>
  24. #include <dos.h>
  25. #include <string.h>
  26. #include <ctype.h>
  27. #include <process.h>
  28. #include <time.h>
  29. #include <conio.h>
  30. #include <sys\stat.h>
  31.  
  32. #include <cxl\cxlvid.h>
  33. #include <cxl\cxlwin.h>
  34. #include <cxl\cxlstr.h>
  35.  
  36. #include "lsetup.h"
  37. #include "sched.h"
  38. #include "msgapi.h"
  39. #include "externs.h"
  40. #include "prototyp.h"
  41. #include "exec.h"
  42.  
  43. extern char *suffixes[], nomailproc;
  44.  
  45. #define PACK_ECHOMAIL  0x0001
  46. #define PACK_NETMAIL   0x0002
  47.  
  48. #define UpdateCRC(c,crc) (cr3tab[((int) crc ^ c) & 0xff] ^ ((crc >> 8) & 0x00FFFFFFL))
  49.  
  50. int spawn_program (int swapout, char *outstring);
  51. void pack_outbound (int flags);
  52. void change_type (int, int, int, int, char, char);
  53. void copy_mail_packet (char *from, char *to);
  54.  
  55. static void call_packer (char *, char *, char *, int, int, int, int);
  56. static char get_flag (void);
  57. static void rename_noarc_packet (char *);
  58.  
  59. static char *flag_result (char c)
  60. {
  61.    if (c == 'C')
  62.       return ("Crash");
  63.    else if (c == 'H')
  64.       return ("Hold");
  65.    else if (c == 'D')
  66.       return ("Direct");
  67.    else if (c == 'F')
  68.       return ("Normal");
  69.    return ("???");
  70. }
  71.  
  72. // Ricava dal nome del file il numero di zona, net, nodo e point del file
  73. // e testa la presenza del flag busy. Ritorna 0 se il flag e' gia' presente
  74. // (un'altra linea sta processando quel nodo), oppure -1 se e' stato settato
  75. // correttamente il flag busy.
  76. int flagged_file (char *outname)
  77. {
  78.    int zone, net, node, point;
  79.    char string[128], *p;
  80.  
  81.    strcpy (string, strupr (outname));
  82.    zone = config->alias[0].zone;
  83.    point = 0;
  84.  
  85.    // Cerca il numero di zona, si assume che la prima estensione incontrata
  86.    // sia quella dell'outbound di zona.
  87.    if ((p = strchr (string, '.')) != NULL) {
  88.       p++;
  89.         if (isdigit (p[0]) && isdigit (p[1]) && isdigit (p[2]))
  90.          zone = atoi (p);
  91.    }
  92.  
  93.     // Se e' presente la stringa .PNT si tratta di un point, altrimenti e'
  94.    // un normale nodo.
  95.     if ((p = strstr (string, ".PNT")) != NULL) {
  96.       p -= 8;
  97.       sscanf (p, "%04x%04x", &net, &node);
  98.       p += 13;
  99.       point = atoi (p);
  100.    }
  101.    else {
  102.       p = strchr (string, '\0');
  103.       p -= 12;
  104.       sscanf (p, "%04x%04x", &net, &node);
  105.    }
  106.  
  107.    if (flag_file (TEST_AND_SET, zone, net, node, point, 1))
  108.       return (0);
  109.  
  110.    return (-1);
  111. }
  112.  
  113. void clear_flagged_file (void)
  114. {
  115.    flag_file (CLEAR_SESSION_FLAG, 0, 0, 0, 0, 1);
  116. }
  117.  
  118. void clear_temp_file (void)
  119. {
  120.    int zone;
  121.    char string[128], newname[128], *p, sig = 0;
  122.    struct ffblk blk, blko, blkp;
  123.  
  124.    strcpy (string, HoldAreaNameMunge (config->alias[0].zone));
  125.    string[strlen (string) - 1] = '\0';
  126.    strcat (string, ".*");
  127.  
  128.    if (!findfirst (string, &blko, FA_DIREC))
  129.       do {
  130.          if ((p = strchr (blko.ff_name, '.')) != NULL)
  131.             sscanf (&p[1], "%3x", &zone);
  132.          else
  133.             zone = config->alias[0].zone;
  134.  
  135.          sprintf (string, "%s*.X$R", HoldAreaNameMunge (zone));
  136.  
  137.          if (!findfirst (string, &blk, 0))
  138.             do {
  139.                sprintf (string, "%s%s", HoldAreaNameMunge (zone), blk.ff_name);
  140.                strcpy (newname, string);
  141.                strisrep (newname, ".X$R", ".OUT");
  142.                if (!sig) {
  143.                   sig = 1;
  144.                   status_line ("+Found busy nodes");
  145.                }
  146.                if (rename (string, newname) == -1)
  147.                   copy_mail_packet (string, newname);
  148.                status_line (":  Packet %s renamed to %s", string, newname);
  149.             } while (!findnext (&blk));
  150.  
  151.             sprintf (string, "%s*.PNT", HoldAreaNameMunge (zone));
  152.  
  153.          if (!findfirst (string, &blkp, FA_DIREC))
  154.             do {
  155.                sprintf (string, "%s%s\\*.X$R", HoldAreaNameMunge (zone), blkp.ff_name);
  156.  
  157.                     if (!findfirst (string, &blk, 0))
  158.                   do {
  159.                      sprintf (string, "%s%s\\%s", HoldAreaNameMunge (zone), blkp.ff_name, blk.ff_name);
  160.                      strcpy (newname, string);
  161.                      strisrep (newname, ".X$R", ".OUT");
  162.                      if (!sig) {
  163.                         sig = 1;
  164.                         status_line ("+Found busy nodes");
  165.                      }
  166.                      if (rename (string, newname) == -1)
  167.                         copy_mail_packet (string, newname);
  168.                      status_line (":  Packet %s renamed to %s", string, newname);
  169.                   } while (!findnext (&blk));
  170.             } while (!findnext (&blkp));
  171.       } while (!findnext (&blko));
  172. }
  173.  
  174. void rename_out_packets (void)
  175. {
  176.    int zone;
  177.    char string[128], newname[128], *p;
  178.    struct ffblk blk, blko, blkp;
  179.  
  180.    strcpy (string, HoldAreaNameMunge (config->alias[0].zone));
  181.    string[strlen (string) - 1] = '\0';
  182.    strcat (string, ".*");
  183.  
  184.    if (!findfirst (string, &blko, FA_DIREC))
  185.       do {
  186.          if ((p = strchr (blko.ff_name, '.')) != NULL)
  187.             sscanf (&p[1], "%3x", &zone);
  188.          else
  189.             zone = config->alias[0].zone;
  190.  
  191.             sprintf (string, "%s*.OUT", HoldAreaNameMunge (zone));
  192.  
  193.          if (!findfirst (string, &blk, 0))
  194.             do {
  195.                sprintf (string, "%s%s", HoldAreaNameMunge (zone), blk.ff_name);
  196.                strcpy (newname, string);
  197.                strisrep (newname, ".OUT", ".XPR");
  198.                if (rename (string, newname) == -1)
  199.                   copy_mail_packet (string, newname);
  200.             } while (!findnext (&blk));
  201.  
  202.             sprintf (string, "%s*.PNT", HoldAreaNameMunge (zone));
  203.  
  204.          if (!findfirst (string, &blkp, FA_DIREC))
  205.             do {
  206.                sprintf (string, "%s%s\\*.OUT", HoldAreaNameMunge (zone), blkp.ff_name);
  207.  
  208.                if (!findfirst (string, &blk, 0))
  209.                   do {
  210.                      sprintf (string, "%s%s\\%s", HoldAreaNameMunge (zone), blkp.ff_name, blk.ff_name);
  211.                      strcpy (newname, string);
  212.                      strisrep (newname, ".OUT", ".XPR");
  213.                      if (rename (string, newname) == -1)
  214.                         copy_mail_packet (string, newname);
  215.                   } while (!findnext (&blk));
  216.             } while (!findnext (&blkp));
  217.       } while (!findnext (&blko));
  218. }
  219.  
  220. void pack_outbound (int flags)
  221. {
  222.    FILE *fp, *fps, *fpd;
  223.     char filename[80], dest[80], outbase[80], *p, dstf, linea[256], buffer1[20];
  224.     char *px, *v, srcf, nopack;
  225.    int dzo, dne, dno, pzo, pne, pno, ppo, dpo, i, k,skip_tag;
  226.     long t;
  227.     unsigned long crc;
  228.     struct ffblk blk, blko;
  229.     struct tm *dt;
  230.  
  231.    if (nomailproc)
  232.       return;
  233.  
  234.    t = time (NULL);
  235.    dt = localtime (&t);
  236.    skip_tag = 0;
  237.    nopack = 0;
  238.  
  239.    strcpy (filename, HoldAreaNameMunge (config->alias[0].zone));
  240.    filename[strlen(filename) - 1] = '\0';
  241.    strcpy (outbase, filename);
  242.    strcat (filename, ".*");
  243.  
  244.    if (!findfirst (filename, &blko, FA_DIREC))
  245.       do {
  246.          p = strchr (blko.ff_name, '.');
  247.  
  248.          sprintf (filename, "%s%s\\*.PKT", outbase, p == NULL ? "" : p);
  249.          if (!findfirst (filename, &blk, 0))
  250.             do {
  251.                if ((px = strchr (blk.ff_name, '.')) != NULL)
  252.                   *px = '\0';
  253.                sprintf (filename, "%s%s\\%s.PKT", outbase, p == NULL ? "" : p, blk.ff_name);
  254.                sprintf (dest, "%s%s\\%s.P$T", outbase, p == NULL ? "" : p, blk.ff_name);
  255.                rename (filename, dest);
  256.             } while (!findnext (&blk));
  257.       } while (!findnext (&blko));
  258.  
  259.     sprintf (filename, "%sROUTE.CFG", config->sys_path);
  260.     fp = fopen (filename, "rt");
  261.     if (fp == NULL)
  262.       return;
  263.  
  264.    local_status ("Pack");
  265.    pack_system ();
  266.    setup_video_interrupt ("PACK OUTBOUND MAIL");
  267.  
  268.    while (fgets (linea, 250, fp) != NULL) {
  269.       if (linea[0] == ';' || linea[0] == '%' || !linea[0])
  270.          continue;
  271.       if ((p = strchr (linea, ';')) != NULL)
  272.          *p = '\0';
  273.       if ((p = strchr (linea, '%')) != NULL)
  274.          *p = '\0';
  275.       while (linea[strlen (linea) -1] == 0x0D || linea[strlen (linea) -1] == 0x0A)
  276.          linea[strlen (linea) -1] = '\0';
  277.  
  278.       if ((p = strtok (linea, " ")) == NULL)
  279.          continue;
  280.  
  281.       if (!stricmp (p, "Tag")) {
  282.          p = strtok (NULL, " ");
  283.          if (cur_event == -1 || stricmp (p, e_ptrs[cur_event]->route_tag)) {
  284.             skip_tag = 1;
  285.             continue;
  286.          }
  287.          else if (!stricmp (p, "ECHOMAIL") && (flags & PACK_ECHOMAIL)) {
  288.             skip_tag = 1;
  289.             continue;
  290.          }
  291.          else if (!stricmp (p, "NETMAIL") && (flags & PACK_NETMAIL)) {
  292.                 skip_tag = 1;
  293.                 continue;
  294.             }
  295.             else
  296.             skip_tag = 0;
  297.             continue;
  298.       }
  299.       else if (skip_tag)
  300.          continue;
  301.  
  302.       dstf = 'F';
  303.  
  304.       if (!stricmp (p, "SendFile-To") || !stricmp (p, "FileSend-To")) {
  305.          dstf = get_flag ();
  306.  
  307.          dzo = config->alias[0].zone;
  308.          dne = config->alias[0].net;
  309.          dno = config->alias[0].node;
  310.          dpo = 0;
  311.  
  312.          v = strtok (NULL, "");
  313.  
  314.          while (v != NULL && (p = strtok (v, " ")) != NULL) {
  315.             v = strtok (NULL, "");
  316.             parse_netnode2 (p, &dzo, &dne, &dno, &dpo);
  317.             nopack = 1;
  318.  
  319.             if ((short)dne != -1 && (short)dno != -1) {
  320.                if (!dpo) {
  321.                   sprintf (filename, "%s%04x%04x.FLO", HoldAreaNameMunge (dzo), dne, dno);
  322.                   if (!findfirst (filename, &blk, 0)) {
  323.                      do {
  324.                         time_release ();
  325.                         sprintf (dest, "%s%04x%04x.%cLO", HoldAreaNameMunge (dzo), dne, dno, dstf);
  326.                      } while (rename (filename, dest) == -1);
  327.                         }
  328.                }
  329.                     else {
  330.                   if ((short)dpo == -1)
  331.                      sprintf (filename, "%s%04x%04x.PNT\\*.FLO", HoldAreaNameMunge (dzo), dne, dno);
  332.                   else
  333.                      sprintf (filename, "%s%04x%04x.PNT\\%08X.FLO", HoldAreaNameMunge (dzo), dne, dno, dpo);
  334.                   if (!findfirst (filename, &blko, 0))
  335.                      do {
  336.                         do {
  337.                            strcpy (dest, filename);
  338.                            dest[strlen (dest) - 3] = dstf;
  339.                         } while (rename (filename, dest) == -1);
  340.                             } while (!findnext (&blko));
  341.                     }
  342.                 }
  343.                 else {
  344.                     if ((short)dne != -1 && (short)dno == -1)
  345.                   sprintf (filename, "%s%04x*.FLO", HoldAreaNameMunge (dzo), dne);
  346.                     else
  347.                   sprintf (filename, "%s*.FLO", HoldAreaNameMunge (dzo));
  348.  
  349.                     if (!findfirst (filename, &blko, 0))
  350.                         do {
  351.                             sprintf (filename, "%s%s", HoldAreaNameMunge (dzo), blko.ff_name);
  352.                             do {
  353.                         strcpy (dest, filename);
  354.                         dest[strlen (dest) - 3] = dstf;
  355.                             } while (rename (filename, dest) == -1);
  356.                   } while (!findnext (&blko));
  357.  
  358.                if ((short)dne != -1 && (short)dno == -1)
  359.                   dno = config->alias[0].node;
  360.                else {
  361.                   dne = config->alias[0].net;
  362.                   dno = config->alias[0].node;
  363.                }
  364.             }
  365.          }
  366.       }
  367.  
  368.       else if (!stricmp (p, "RouteFile-To") || !stricmp (p, "FileRoute-To")) {
  369.          dstf = get_flag ();
  370.  
  371.          dzo = config->alias[0].zone;
  372.          dne = config->alias[0].net;
  373.          dno = config->alias[0].node;
  374.          dpo = 0;
  375.  
  376.          p = strtok (NULL, " ");
  377.          parse_netnode2 (p, &dzo, &dne, &dno, &i);
  378.          pzo = dzo;
  379.          pne = dne;
  380.          pno = dno;
  381.  
  382.          sprintf (filename, "%s%04x%04x.FLO", HoldAreaNameMunge (pzo), pne, pno);
  383.          if (!findfirst (filename, &blk, 0)) {
  384.             sprintf (dest, "%s%04x%04x.%cLO", HoldAreaNameMunge (dzo), dne, dno, dstf);
  385.             if (rename (filename, dest) == -1 && stricmp (filename, dest)) {
  386.                fps = fopen (filename, "rt");
  387.                fpd = fopen (dest, "at");
  388.                while (fgets (linea, sizeof (linea) - 1, fps) != NULL)
  389.                   fputs (linea, fpd);
  390.                fclose (fpd);
  391.                fclose (fps);
  392.                unlink (filename);
  393.             }
  394.          }
  395.  
  396.          while ((p = strtok (NULL, " ")) != NULL) {
  397.             parse_netnode2 (p, &pzo, &pne, &pno, &i);
  398.             if ((short)pne != -1 && (short)pno != -1) {
  399.                sprintf (filename, "%s%04x%04x.FLO", HoldAreaNameMunge (pzo), pne, pno);
  400.                if (!findfirst (filename, &blk, 0)) {
  401.                   sprintf (dest, "%s%04x%04x.%cLO", HoldAreaNameMunge (dzo), dne, dno, dstf);
  402.                   if (stricmp (filename, dest)) {
  403.                      fps = fopen (filename, "rt");
  404.                      fpd = fopen (dest, "at");
  405.                      while (fgets (linea, sizeof (linea) - 1, fps) != NULL)
  406.                         fputs (linea, fpd);
  407.                      fclose (fpd);
  408.                      fclose (fps);
  409.                      unlink (filename);
  410.                   }
  411.                }
  412.                 }
  413.                 else {
  414.                if ((short)pne != -1 && (short)pno == -1)
  415.                   sprintf (filename, "%s%04x*.FLO", HoldAreaNameMunge (pzo), pne);
  416.                     else
  417.                   sprintf (filename, "%s*.FLO", HoldAreaNameMunge (pzo));
  418.  
  419.                     if (!findfirst (filename, &blko, 0))
  420.                         do {
  421.                      sprintf (filename, "%s%s", HoldAreaNameMunge (pzo), blko.ff_name);
  422.                      sprintf (dest, "%s%04x%04x.%cLO", HoldAreaNameMunge (dzo), dne, dno, dstf);
  423.                      if (stricmp (filename, dest)) {
  424.                         fps = fopen (filename, "rt");
  425.                         fpd = fopen (dest, "at");
  426.                         while (fgets (linea, sizeof (linea) - 1, fps) != NULL)
  427.                            fputs (linea, fpd);
  428.                         fclose (fpd);
  429.                         fclose (fps);
  430.                         unlink (filename);
  431.                      }
  432.                   } while (!findnext (&blko));
  433.  
  434.                if ((short)pne != -1 && (short)pno == -1)
  435.                   pno = config->alias[0].node;
  436.                else {
  437.                   pne = config->alias[0].net;
  438.                   pno = config->alias[0].node;
  439.                }
  440.             }
  441.          }
  442.       }
  443.  
  444.       else if (!stricmp (p, "Poll")) {
  445.          dstf = get_flag ();
  446.  
  447.          pzo = config->alias[0].zone;
  448.          dne = config->alias[0].net;
  449.          dno = config->alias[0].node;
  450.          dpo = 0;
  451.  
  452.          while ((p = strtok (NULL, " ")) != NULL) {
  453.             parse_netnode2 (p, &dzo, &dne, &dno, &dpo);
  454.  
  455.             if (!dpo)
  456.                sprintf (outbase, "%s%04x%04x.%cLO", HoldAreaNameMunge (dzo), dne, dno, dstf);
  457.             else
  458.                     sprintf (outbase, "%s%04x%04x.PNT\\%08X.%cLO", HoldAreaNameMunge (dzo), dne, dno, dpo, dstf);
  459.             i = open (outbase, O_CREAT|O_WRONLY|O_BINARY, S_IREAD|S_IWRITE);
  460.             if (i == -1 && dpo) {
  461.                     sprintf (outbase, "%s%04x%04x.PNT", HoldAreaNameMunge (dzo), dne, dno);
  462.                mkdir (outbase);
  463.                     sprintf (outbase, "%s%04x%04x.PNT\\%08X.%cLO", HoldAreaNameMunge (dzo), dne, dno, dpo, dstf);
  464.                     i = open (outbase, O_CREAT|O_WRONLY|O_BINARY, S_IREAD|S_IWRITE);
  465.             }
  466.                 close (i);
  467.          }
  468.         }
  469.       else if (!stricmp (p, "Send-To") || !stricmp (p, "Send")) {
  470.          dstf = get_flag ();
  471.  
  472.          dzo = config->alias[0].zone;
  473.          dne = config->alias[0].net;
  474.          dno = config->alias[0].node;
  475.          dpo = 0;
  476.  
  477.          v = strtok (NULL, "");
  478.  
  479.          while (v != NULL && (p = strtok (v, " ")) != NULL) {
  480.             v = strtok (NULL, "");
  481.             parse_netnode2 (p, &dzo, &dne, &dno, &dpo);
  482.             nopack = 1;
  483.  
  484.             if ((short)dne != -1 && (short)dno != -1) {
  485.                if (!dpo) {
  486.                   sprintf (filename, "%s%04x%04x.XPR", HoldAreaNameMunge (dzo), dne, dno);
  487.                   if (!findfirst (filename, &blk, 0)) {
  488.                      do {
  489.                         time_release ();
  490.                         if (!flagged_file (filename)) {
  491.                            strcpy (outbase, blko.ff_name);
  492.                            strisrep (outbase, ".XPR", ".X$R");
  493.                         }
  494.                         else {
  495.                            invent_pkt_name (outbase);
  496.                            nopack = 0;
  497.                         }
  498.                                 sprintf (dest, "%s%s", HoldAreaNameMunge (dzo), outbase);
  499.                      } while (rename (filename, dest) == -1);
  500.                         }
  501.                }
  502.                     else {
  503.                   if ((short)dpo == -1)
  504.                             sprintf (filename, "%s%04x%04x.PNT\\*.XPR", HoldAreaNameMunge (dzo), dne, dno);
  505.                   else
  506.                             sprintf (filename, "%s%04x%04x.PNT\\%08X.XPR", HoldAreaNameMunge (dzo), dne, dno, dpo);
  507.                   if (!findfirst (filename, &blko, 0))
  508.                      do {
  509.                                 sprintf (filename, "%s%04x%04x.PNT\\%s", HoldAreaNameMunge (dzo), dne, dno, blko.ff_name);
  510.                         do {
  511.                            time_release ();
  512.                            if (!flagged_file (filename)) {
  513.                               strcpy (outbase, blko.ff_name);
  514.                               strisrep (outbase, ".XPR", ".X$R");
  515.                            }
  516.                            else {
  517.                               invent_pkt_name (outbase);
  518.                               nopack = 0;
  519.                            }
  520.                                     sprintf (dest, "%s%04x%04x.PNT\\%s", HoldAreaNameMunge (dzo), dne, dno, outbase);
  521.                         } while (rename (filename, dest) == -1);
  522.  
  523.                         if (!nopack) {
  524.                            sscanf (blko.ff_name, "%08x", &dpo);
  525.  
  526.                            sprintf (filename, "%d:%d/%d.%d", dzo, dne, dno, dpo);
  527.                            filename[14] = '\0';
  528.                            prints (7, 65, YELLOW|_BLACK, "              ");
  529.                            prints (7, 65, YELLOW|_BLACK, filename);
  530.  
  531.                            if (config->alias[0].point && config->alias[0].fakenet)
  532.                                         sprintf (filename, "%s%04x%04x.%s?", HoldAreaNameMunge (dzo), (unsigned int)(config->alias[0].fakenet - dne) & 0xFFFF, (unsigned int)(config->alias[0].point - dno) & 0xFFFF, suffixes[dt->tm_wday]);
  533.                                     else {
  534.                                         sprintf(buffer1,"%d:%d/%d.%d",dzo,dne,dno,dpo);
  535.                                         crc=0xFFFFFFFFL;
  536.                                         for(k=0;k<strlen(buffer1);k++)
  537.                                              crc = UpdateCRC (((unsigned short) buffer1[k]), crc);
  538.                                         sprintf(buffer1,"%08lX",crc);
  539.                                         sprintf (filename, "%s%04x%04x.PNT\\%s.%s?", HoldAreaNameMunge (dzo), dne, dno, buffer1, suffixes[dt->tm_wday]);
  540.                                         //sprintf (filename, "%s%04x%04x.PNT\\8%07x.%s?", HoldAreaNameMunge (dzo), dne, dno, dpo, suffixes[dt->tm_wday]);
  541.                                         }
  542.  
  543.                                     if (findfirst (filename, &blk, 0)) {
  544.                                         if (config->alias[0].point && config->alias[0].fakenet)
  545.                                             sprintf (filename, "%s%04x%04x.%s0", HoldAreaNameMunge (dzo), (unsigned int)(config->alias[0].fakenet - dne) & 0xFFFF, (unsigned int)(config->alias[0].point - dno) & 0xFFFF, suffixes[dt->tm_wday]);
  546.                                         else {
  547.                                             sprintf(buffer1,"%d:%d/%d.%d",dzo,dne,dno,dpo);
  548.                                         crc=0xFFFFFFFFL;
  549.                                         for(k=0;k<strlen(buffer1);k++)
  550.                                              crc = UpdateCRC (((unsigned short) buffer1[k]), crc);
  551.                                         sprintf(buffer1,"%08lX",crc);
  552. //                                            sprintf (filename, "%s%04x%04x.PNT\\8%07x.%s0", HoldAreaNameMunge (dzo), dne, dno, dpo, suffixes[dt->tm_wday]);
  553.                                         sprintf (filename, "%s%04x%04x.PNT\\%s.%s0", HoldAreaNameMunge (dzo), dne, dno, buffer1, suffixes[dt->tm_wday]);
  554.                                         }
  555.                                     }
  556.                                     else if (blk.ff_fsize == 0L) {
  557.                                         sprintf (filename, "%s%04x%04x.PNT\\%s", HoldAreaNameMunge (dzo), dne, dno, blk.ff_name);
  558.                                         unlink (filename);
  559.                                         blk.ff_name[11]++;
  560.                                         if (blk.ff_name[11] > '9')
  561.                                             blk.ff_name[11] = '0';
  562.                                         sprintf (filename, "%s%04x%04x.PNT\\%s", HoldAreaNameMunge (dzo), dne, dno, blk.ff_name);
  563.                                     }
  564.                                     else
  565.                                         sprintf (filename, "%s%04x%04x.PNT\\%s", HoldAreaNameMunge (dzo), dne, dno, blk.ff_name);
  566.  
  567.                                     prints (8, 65, YELLOW|_BLACK, strupr (&filename[strlen (filename) - 12]));
  568.  
  569.                                     sprintf (outbase, "%s%04x%04x.PNT\\%08x.%cLO", HoldAreaNameMunge (dzo), dne, dno, dpo, dstf);
  570.                                     sprintf (dest, "%s%04x%04x.PNT\\*.PKT", HoldAreaNameMunge (dzo), dne, dno);
  571.  
  572.                                     call_packer (outbase, filename, dest, dzo, dne, dno, dpo);
  573.                                 }
  574.  
  575.                                 nopack = 1;
  576.                                 clear_flagged_file ();
  577.                             } while (!findnext (&blko));
  578.                     }
  579.                 }
  580.                 else {
  581.                     if ((short)dne != -1 && (short)dno == -1)
  582.                         sprintf (filename, "%s%04x*.XPR", HoldAreaNameMunge (dzo), dne);
  583.                     else
  584.                         sprintf (filename, "%s*.XPR", HoldAreaNameMunge (dzo));
  585.  
  586.                     if (!findfirst (filename, &blko, 0))
  587.                         do {
  588.                             sprintf (filename, "%s%s", HoldAreaNameMunge (dzo), blko.ff_name);
  589.                             do {
  590.                                 time_release ();
  591.                                 if (!flagged_file (filename)) {
  592.                                     strcpy (outbase, blko.ff_name);
  593.                                     strisrep (outbase, ".XPR", ".X$R");
  594.                                 }
  595.                                 else {
  596.                                     invent_pkt_name (outbase);
  597.                                     nopack = 0;
  598.                                 }
  599.                                 sprintf (dest, "%s%s", HoldAreaNameMunge (dzo), outbase);
  600.                             } while (rename (filename, dest) == -1);
  601.  
  602.                             if (!nopack) {
  603.                         sscanf (blko.ff_name, "%04x%04x", &dne, &dno);
  604.  
  605.                         sprintf (filename, "%d:%d/%d.%d", dzo, dne, dno, dpo);
  606.                         filename[14] = '\0';
  607.                         prints (7, 65, YELLOW|_BLACK, "              ");
  608.                         prints (7, 65, YELLOW|_BLACK, filename);
  609.  
  610.                         if (config->alias[0].point && config->alias[0].fakenet)
  611.                            sprintf (filename, "%s%04x%04x.%s?", HoldAreaNameMunge (dzo), (unsigned int)(config->alias[0].fakenet - dne) & 0xFFFF, (unsigned int)(config->alias[0].point - dno) & 0xFFFF, suffixes[dt->tm_wday]);
  612.                         else if (config->alias[0].point)
  613.                            sprintf (filename, "%s%04x%04x.%s?", HoldAreaNameMunge (dzo), (unsigned int)(config->alias[0].node - dne) & 0xFFFF, (unsigned int)(config->alias[0].point - dno) & 0xFFFF, suffixes[dt->tm_wday]);
  614.                         else
  615.                            sprintf (filename, "%s%04x%04x.%s?", HoldAreaNameMunge (dzo), (unsigned int)(config->alias[0].net - dne) & 0xFFFF, (unsigned int)(config->alias[0].node - dno) & 0xFFFF, suffixes[dt->tm_wday]);
  616.  
  617.                         if (findfirst (filename, &blk, 0)) {
  618.                            if (config->alias[0].point && config->alias[0].fakenet)
  619.                               sprintf (filename, "%s%04x%04x.%s0", HoldAreaNameMunge (dzo), (unsigned int)(config->alias[0].fakenet - dne) & 0xFFFF, (unsigned int)(config->alias[0].point - dno) & 0xFFFF, suffixes[dt->tm_wday]);
  620.                            else if (config->alias[0].point)
  621.                               sprintf (filename, "%s%04x%04x.%s0", HoldAreaNameMunge (dzo), (unsigned int)(config->alias[0].node - dne) & 0xFFFF, (unsigned int)(config->alias[0].point - dno) & 0xFFFF, suffixes[dt->tm_wday]);
  622.                            else
  623.                               sprintf (filename, "%s%04x%04x.%s0", HoldAreaNameMunge (dzo), (unsigned int)(config->alias[0].net - dne) & 0xFFFF, (unsigned int)(config->alias[0].node - dno) & 0xFFFF, suffixes[dt->tm_wday]);
  624.                         }
  625.                         else if (blk.ff_fsize == 0L) {
  626.                            sprintf (filename, "%s%s", HoldAreaNameMunge (dzo), blk.ff_name);
  627.                            unlink (filename);
  628.                            blk.ff_name[11]++;
  629.                            if (blk.ff_name[11] > '9')
  630.                               blk.ff_name[11] = '0';
  631.                            sprintf (filename, "%s%s", HoldAreaNameMunge (dzo), blk.ff_name);
  632.                                 }
  633.                         else
  634.                            sprintf (filename, "%s%s", HoldAreaNameMunge (dzo), blk.ff_name);
  635.  
  636.                         prints (8, 65, YELLOW|_BLACK, strupr (&filename[strlen (filename) - 12]));
  637.  
  638.                         sprintf (outbase, "%s%04x%04x.%cLO", HoldAreaNameMunge (dzo), dne, dno, dstf);
  639.                         sprintf (dest, "%s*.PKT", HoldAreaNameMunge (dzo));
  640.                         call_packer (outbase, filename, dest, dzo, dne, dno, 0);
  641.                      }
  642.  
  643.                      nopack = 1;
  644.                      clear_flagged_file ();
  645.                   } while (!findnext (&blko));
  646.  
  647.                if ((short)dne != -1 && (short)dno == -1)
  648.                   dno = config->alias[0].node;
  649.                else {
  650.                   dne = config->alias[0].net;
  651.                   dno = config->alias[0].node;
  652.                }
  653.  
  654.                nopack = 1;
  655.             }
  656.  
  657.             if (!nopack) {
  658.                sprintf (filename, "%d:%d/%d.%d", dzo, dne, dno, dpo);
  659.                filename[14] = '\0';
  660.                prints (7, 65, YELLOW|_BLACK, "              ");
  661.                prints (7, 65, YELLOW|_BLACK, filename);
  662.  
  663.                if (config->alias[0].point && config->alias[0].fakenet)
  664.                   sprintf (filename, "%s%04x%04x.%s?", HoldAreaNameMunge (dzo), (unsigned int)config->alias[0].fakenet - dne, (unsigned int)(config->alias[0].point - dno) & 0xFFFF, suffixes[dt->tm_wday]);
  665.                else {
  666.                         if (dpo && (short)dpo != -1) {
  667.                             sprintf(buffer1,"%d:%d/%d.%d",dzo,dne,dno,dpo);
  668.                             crc=0xFFFFFFFFL;
  669.                             for(k=0;k<strlen(buffer1);k++)
  670.                                  crc = UpdateCRC (((unsigned short) buffer1[k]), crc);
  671.                             sprintf(buffer1,"%08lX",crc);
  672.                             sprintf (filename, "%s%04x%04x.PNT\\%s.%s?", HoldAreaNameMunge (dzo), dne, dno, buffer1, suffixes[dt->tm_wday]);
  673.                         }
  674. //                            sprintf (filename, "%s%04x%04x.PNT\\8%07x.%s?", HoldAreaNameMunge (dzo), dne, dno, dpo, suffixes[dt->tm_wday]);
  675.                         else
  676.                             sprintf (filename, "%s%04x%04x.%s?", HoldAreaNameMunge (dzo), (unsigned int)(config->alias[0].net - dne) & 0xFFFF, (unsigned int)(config->alias[0].node - dno) & 0xFFFF, suffixes[dt->tm_wday]);
  677.                     }
  678.  
  679.                     if (findfirst (filename, &blk, 0)) {
  680.                         if (config->alias[0].point && config->alias[0].fakenet)
  681.                             sprintf (filename, "%s%04x%04x.%s0", HoldAreaNameMunge (dzo), (unsigned int)(config->alias[0].fakenet - dne) & 0xFFFF, (unsigned int)(config->alias[0].point - dno) & 0xFFFF, suffixes[dt->tm_wday]);
  682.                         else {
  683.                             if (dpo && (short)dpo != -1){
  684.                                 sprintf(buffer1,"%d:%d/%d.%d",dzo,dne,dno,dpo);
  685.                                 crc=0xFFFFFFFFL;
  686.                                 for(k=0;k<strlen(buffer1);k++)
  687.                                      crc = UpdateCRC (((unsigned short) buffer1[k]), crc);
  688.                                 sprintf(buffer1,"%08lX",crc);
  689.                                 sprintf (filename, "%s%04x%04x.PNT\\%s.%s0", HoldAreaNameMunge (dzo), dne, dno, buffer1, suffixes[dt->tm_wday]);
  690.                             }
  691.                                 //sprintf (filename, "%s%04x%04x.PNT\\8%07x.%s0", HoldAreaNameMunge (dzo), dne, dno, dpo, suffixes[dt->tm_wday]);
  692.                             else
  693.                                 sprintf (filename, "%s%04x%04x.%s0", HoldAreaNameMunge (dzo), (unsigned int)(config->alias[0].net - dne) & 0xFFFF, (unsigned int)(config->alias[0].node - dno) & 0xFFFF, suffixes[dt->tm_wday]);
  694.                         }
  695.                     }
  696.                     else if (blk.ff_fsize == 0L) {
  697.                         if (dpo && (short)dpo != -1)
  698.                             sprintf (filename, "%s%04x%04x.PNT\\%s", HoldAreaNameMunge (dzo), dne, dno, blk.ff_name);
  699.                         else
  700.                             sprintf (filename, "%s%s", HoldAreaNameMunge (dzo), blk.ff_name);
  701.                         unlink (filename);
  702.                         blk.ff_name[11]++;
  703.                         if (blk.ff_name[11] > '9')
  704.                      blk.ff_name[11] = '0';
  705.                   if (dpo && (short)dpo != -1)
  706.                             sprintf (filename, "%s%04x%04x.PNT\\%s", HoldAreaNameMunge (dzo), dne, dno, blk.ff_name);
  707.                   else
  708.                      sprintf (filename, "%s%s", HoldAreaNameMunge (dzo), blk.ff_name);
  709.                }
  710.                else {
  711.                   if (dpo && (short)dpo != -1)
  712.                             sprintf (filename, "%s%04x%04x.PNT\\%s", HoldAreaNameMunge (dzo), dne, dno, blk.ff_name);
  713.                   else
  714.                      sprintf (filename, "%s%s", HoldAreaNameMunge (dzo), blk.ff_name);
  715.                }
  716.  
  717.                prints (8, 65, YELLOW|_BLACK, strupr (&filename[strlen (filename) - 12]));
  718.  
  719.                if (dpo && (short)dpo != -1) {
  720.                         sprintf (outbase, "%s%04x%04x.PNT\\%08x.%cLO", HoldAreaNameMunge (dzo), dne, dno, dpo, dstf);
  721.                         sprintf (dest, "%s%04x%04x.PNT\\*.PKT", HoldAreaNameMunge (dzo), dne, dno);
  722.                }
  723.                else {
  724.                   sprintf (outbase, "%s%04x%04x.%cLO", HoldAreaNameMunge (dzo), dne, dno, dstf);
  725.                   sprintf (dest, "%s*.PKT", HoldAreaNameMunge (dzo));
  726.                }
  727.  
  728.                call_packer (outbase, filename, dest, dzo, dne, dno, dpo);
  729.             }
  730.  
  731.             clear_flagged_file ();
  732.          }
  733.       }
  734.       else if (!stricmp (p, "Change")) {
  735.          srcf = get_flag ();
  736.          dstf = get_flag ();
  737.  
  738.          dzo = config->alias[0].zone;
  739.          dne = config->alias[0].net;
  740.          dno = config->alias[0].node;
  741.          dpo = 0;
  742.  
  743.          while ((p = strtok (NULL, " ")) != NULL) {
  744.             parse_netnode2 (p, &dzo, &dne, &dno, &i);
  745.  
  746.             if ((short)dne != -1 && (short)dno != -1) {
  747.                sprintf (filename, "%s%04x%04x.?UT", HoldAreaNameMunge (dzo), dne, dno);
  748.                if (!findfirst (filename, &blk, 0))
  749.                   do {
  750.                      if (toupper (blk.ff_name[strlen (blk.ff_name) - 3]) == toupper (srcf)) {
  751.                         status_line (":Changing %d:%d/%d.%d from %s to %s", dzo, dne, dno, dpo, flag_result (srcf), flag_result (dstf));
  752.                         change_type (dzo, dne, dno, dpo, srcf, dstf);
  753.                      }
  754.                   } while (!findnext (&blk));
  755.  
  756.                sprintf (filename, "%s%04x%04x.?LO", HoldAreaNameMunge (dzo), dne, dno);
  757.                if (!findfirst (filename, &blk, 0))
  758.                   do {
  759.                      if (toupper (blk.ff_name[strlen (blk.ff_name) - 3]) == toupper (srcf)) {
  760.                         status_line (":Changing %d:%d/%d.%d from %s to %s", dzo, dne, dno, dpo, flag_result (srcf), flag_result (dstf));
  761.                         change_type (dzo, dne, dno, dpo, srcf, dstf);
  762.                      }
  763.                   } while (!findnext (&blk));
  764.             }
  765.             else {
  766.                if ((short)dne != -1 && (short)dno == -1)
  767.                   sprintf (filename, "%s%04x*.?UT", HoldAreaNameMunge (dzo), dne);
  768.                else
  769.                   sprintf (filename, "%s*.?UT", HoldAreaNameMunge (dzo));
  770.  
  771.                if (!findfirst (filename, &blk, 0))
  772.                   do {
  773.                      sscanf (blk.ff_name, "%04x%04x", &pne, &pno);
  774.                      if (toupper (blk.ff_name[strlen (blk.ff_name) - 3]) == toupper (srcf)) {
  775.                         status_line (":Changing %d:%d/%d.%d from %s to %s", dzo, pne, pno, dpo, flag_result (srcf), flag_result (dstf));
  776.                         change_type (dzo, pne, pno, dpo, srcf, dstf);
  777.                      }
  778.                   } while (!findnext (&blk));
  779.  
  780.                if ((short)dne != -1 && (short)dno == -1)
  781.                   sprintf (filename, "%s%04x*.?LO", HoldAreaNameMunge (dzo), dne);
  782.                else
  783.                   sprintf (filename, "%s*.?LO", HoldAreaNameMunge (dzo));
  784.  
  785.                if (!findfirst (filename, &blk, 0))
  786.                   do {
  787.                      sscanf (blk.ff_name, "%04x%04x", &pne, &pno);
  788.                      if (toupper (blk.ff_name[strlen (blk.ff_name) - 3]) == toupper (srcf)) {
  789.                         status_line (":Changing %d:%d/%d.%d from %s to %s", dzo, pne, pno, dpo, flag_result (srcf), flag_result (dstf));
  790.                         change_type (dzo, pne, pno, dpo, srcf, dstf);
  791.                      }
  792.                   } while (!findnext (&blk));
  793.  
  794.                if ((short)dne != -1 && (short)dno == -1)
  795.                   dno = config->alias[0].node;
  796.                else {
  797.                   dne = config->alias[0].net;
  798.                   dno = config->alias[0].node;
  799.                }
  800.             }
  801.          }
  802.  
  803. /*
  804.          dzo = config->alias[0].zone;
  805.          dne = config->alias[0].net;
  806.          dno = config->alias[0].node;
  807.          dpo = 0;
  808.  
  809.          while ((p = strtok (NULL, " ")) != NULL) {
  810.             parse_netnode2 (p, &dzo, &dne, &dno, &dpo);
  811.             status_line (":Changing %d:%d/%d.%d from %s to %s", dzo, dne, dno, dpo, flag_result (srcf), flag_result (dstf));
  812.             change_type (dzo, dne, dno, dpo, srcf, dstf);
  813.          }
  814. */
  815.       }
  816.       else if (!stricmp (p, "Leave")) {
  817.          dzo = config->alias[0].zone;
  818.          dne = config->alias[0].net;
  819.          dno = config->alias[0].node;
  820.          dpo = 0;
  821.  
  822.          while ((p = strtok (NULL, " ")) != NULL) {
  823.             parse_netnode2 (p, &dzo, &dne, &dno, &i);
  824.  
  825.             if ((short)dne != -1 && (short)dno != -1) {
  826.                sprintf (filename, "%s%04x%04x.?UT", HoldAreaNameMunge (dzo), dne, dno);
  827.                if (!findfirst (filename, &blk, 0))
  828.                   do {
  829.                      sprintf (filename, "%s%s", HoldAreaNameMunge (dzo), blk.ff_name);
  830.                      strcpy (dest, filename);
  831.                      dest[strlen (dest) - 3] = 'N';
  832.                      dest[strlen (dest) - 2] = filename[strlen (filename) - 3];
  833.                      rename (filename, dest);
  834.                   } while (!findnext (&blk));
  835.  
  836.                sprintf (filename, "%s%04x%04x.?LO", HoldAreaNameMunge (dzo), dne, dno);
  837.                if (!findfirst (filename, &blk, 0))
  838.                   do {
  839.                      sprintf (filename, "%s%s", HoldAreaNameMunge (dzo), blk.ff_name);
  840.                      strcpy (dest, filename);
  841.                      dest[strlen (dest) - 3] = 'N';
  842.                      dest[strlen (dest) - 2] = filename[strlen (filename) - 3];
  843.                      rename (filename, dest);
  844.                   } while (!findnext (&blk));
  845.             }
  846.             else {
  847.                if ((short)dne != -1 && (short)dno == -1)
  848.                   sprintf (filename, "%s%04x*.?UT", HoldAreaNameMunge (dzo), dne);
  849.                else
  850.                   sprintf (filename, "%s*.?UT", HoldAreaNameMunge (dzo));
  851.  
  852.                if (!findfirst (filename, &blk, 0))
  853.                   do {
  854.                      sprintf (filename, "%s%s", HoldAreaNameMunge (dzo), blk.ff_name);
  855.                      strcpy (dest, filename);
  856.                      dest[strlen (dest) - 3] = 'N';
  857.                      dest[strlen (dest) - 2] = filename[strlen (filename) - 3];
  858.                      rename (filename, dest);
  859.                   } while (!findnext (&blk));
  860.  
  861.                if ((short)dne != -1 && (short)dno == -1)
  862.                   sprintf (filename, "%s%04x*.?LO", HoldAreaNameMunge (dzo), dne);
  863.                else
  864.                   sprintf (filename, "%s*.?LO", HoldAreaNameMunge (dzo));
  865.  
  866.                if (!findfirst (filename, &blk, 0))
  867.                   do {
  868.                      sprintf (filename, "%s%s", HoldAreaNameMunge (dzo), blk.ff_name);
  869.                      strcpy (dest, filename);
  870.                      dest[strlen (dest) - 3] = 'N';
  871.                      dest[strlen (dest) - 2] = filename[strlen (filename) - 3];
  872.                      rename (filename, dest);
  873.                   } while (!findnext (&blk));
  874.  
  875.                if ((short)dne != -1 && (short)dno == -1)
  876.                   dno = config->alias[0].node;
  877.                else {
  878.                   dne = config->alias[0].net;
  879.                   dno = config->alias[0].node;
  880.                }
  881.             }
  882.          }
  883.       }
  884.       else if (!stricmp (p, "UnLeave")) {
  885.          dzo = config->alias[0].zone;
  886.          dne = config->alias[0].net;
  887.          dno = config->alias[0].node;
  888.          dpo = 0;
  889.  
  890.          while ((p = strtok (NULL, " ")) != NULL) {
  891.             parse_netnode2 (p, &dzo, &dne, &dno, &i);
  892.  
  893.             if ((short)dne != -1 && (short)dno != -1) {
  894.                sprintf (filename, "%s%04x%04x.N?T", HoldAreaNameMunge (dzo), dne, dno);
  895.                if (!findfirst (filename, &blk, 0))
  896.                   do {
  897.                      sprintf (filename, "%s%s", HoldAreaNameMunge (dzo), blk.ff_name);
  898.                      strcpy (dest, filename);
  899.                      dest[strlen (dest) - 2] = 'U';
  900.                      dest[strlen (dest) - 3] = filename[strlen (filename) - 2];
  901.                      rename (filename, dest);
  902.                   } while (!findnext (&blk));
  903.  
  904.                sprintf (filename, "%s%04x%04x.N?O", HoldAreaNameMunge (dzo), dne, dno);
  905.                if (!findfirst (filename, &blk, 0))
  906.                   do {
  907.                      sprintf (filename, "%s%s", HoldAreaNameMunge (dzo), blk.ff_name);
  908.                      strcpy (dest, filename);
  909.                      dest[strlen (dest) - 2] = 'L';
  910.                      dest[strlen (dest) - 3] = filename[strlen (filename) - 2];
  911.                      rename (filename, dest);
  912.                   } while (!findnext (&blk));
  913.             }
  914.             else {
  915.                if ((short)dne != -1 && (short)dno == -1)
  916.                   sprintf (filename, "%s%04x*.N?T", HoldAreaNameMunge (dzo), dne);
  917.                else
  918.                   sprintf (filename, "%s*.N?T", HoldAreaNameMunge (dzo));
  919.                if (!findfirst (filename, &blk, 0))
  920.                   do {
  921.                      sprintf (filename, "%s%s", HoldAreaNameMunge (dzo), blk.ff_name);
  922.                      strcpy (dest, filename);
  923.                      dest[strlen (dest) - 2] = 'U';
  924.                      dest[strlen (dest) - 3] = filename[strlen (filename) - 2];
  925.                      rename (filename, dest);
  926.                   } while (!findnext (&blk));
  927.  
  928.                if ((short)dne != -1 && (short)dno == -1)
  929.                   sprintf (filename, "%s%04x*.N?O", HoldAreaNameMunge (dzo), dne);
  930.                else
  931.                   sprintf (filename, "%s*.N?O", HoldAreaNameMunge (dzo));
  932.                if (!findfirst (filename, &blk, 0))
  933.                   do {
  934.                      sprintf (filename, "%s%s", HoldAreaNameMunge (dzo), blk.ff_name);
  935.                      strcpy (dest, filename);
  936.                      dest[strlen (dest) - 2] = 'L';
  937.                      dest[strlen (dest) - 3] = filename[strlen (filename) - 2];
  938.                      rename (filename, dest);
  939.                   } while (!findnext (&blk));
  940.  
  941.                if ((short)dne != -1 && (short)dno == -1)
  942.                   dno = config->alias[0].node;
  943.                else {
  944.                   dne = config->alias[0].net;
  945.                   dno = config->alias[0].node;
  946.                }
  947.             }
  948.          }
  949.       }
  950.       else if (!stricmp (p, "Route-To") || !stricmp (p, "Route")) {
  951.          dstf = get_flag ();
  952.  
  953.          dzo = config->alias[0].zone;
  954.          dne = config->alias[0].net;
  955.          dno = config->alias[0].node;
  956.          dpo = 0;
  957.          nopack = 1;
  958.  
  959.          p = strtok (NULL, " ");
  960.          parse_netnode2 (p, &dzo, &dne, &dno, &i);
  961.          pzo = dzo;
  962.          pne = dne;
  963.          pno = dno;
  964.          ppo = 0;
  965.  
  966.          sprintf (filename, "%s%04x%04x.XPR", HoldAreaNameMunge (dzo), dne, dno);
  967.          if (flagged_file (filename))
  968.             nopack = 0;
  969.  
  970.          for (;;) {
  971.             if (!ppo) {
  972.                if ((short)pne != -1 && (short)pno != -1) {
  973.                   sprintf (filename, "%s%04x%04x.XPR", HoldAreaNameMunge (pzo), pne, pno);
  974.                   if (!findfirst (filename, &blk, 0)) {
  975.                      do {
  976.                         time_release ();
  977.                         if (nopack) {
  978.                            strcpy (outbase, strupr (blk.ff_name));
  979.                            strisrep (outbase, ".XPR", ".X$R");
  980.                         }
  981.                         else
  982.                            invent_pkt_name (outbase);
  983.                         sprintf (dest, "%s%s", HoldAreaNameMunge (dzo), outbase);
  984.                      } while (rename (filename, dest) == -1);
  985.                   }
  986.                }
  987.                else {
  988.                   if ((short)pne != -1 && (short)pno == -1)
  989.                      sprintf (filename, "%s%04x*.XPR", HoldAreaNameMunge (pzo), pne);
  990.                   else
  991.                      sprintf (filename, "%s*.XPR", HoldAreaNameMunge (pzo));
  992.                   if (!findfirst (filename, &blk, 0))
  993.                      do {
  994.                         sprintf (filename, "%s%s", HoldAreaNameMunge (pzo), blk.ff_name);
  995.                         do {
  996.                            time_release ();
  997.                            if (nopack) {
  998.                               strcpy (outbase, strupr (blk.ff_name));
  999.                               strisrep (outbase, ".XPR", ".X$R");
  1000.                            }
  1001.                            else
  1002.                               invent_pkt_name (outbase);
  1003.                            sprintf (dest, "%s%s", HoldAreaNameMunge (dzo), outbase);
  1004.                         } while (rename (filename, dest) == -1);
  1005.                      } while (!findnext (&blk));
  1006.                }
  1007.             }
  1008.             else {
  1009.                if ((short)ppo == -1)
  1010.                   sprintf (filename, "%s%04x%04x.PNT\\*.XPR", HoldAreaNameMunge (pzo), pne, pno);
  1011.                else
  1012.                   sprintf (filename, "%s%04x%04x.PNT\\%08X.XPR", HoldAreaNameMunge (pzo), pne, pno, ppo);
  1013.                if (!findfirst (filename, &blko, 0))
  1014.                   do {
  1015.                      sprintf (filename, "%s%04x%04x.PNT\\%s", HoldAreaNameMunge (pzo), pne, pno, blko.ff_name);
  1016.                      do {
  1017.                         time_release ();
  1018.                         if (nopack) {
  1019.                            strcpy (outbase, blko.ff_name);
  1020.                            strisrep (outbase, ".XPR", ".X$R");
  1021.                         }
  1022.                         else
  1023.                            invent_pkt_name (outbase);
  1024.                         sprintf (dest, "%s%s", HoldAreaNameMunge (dzo), outbase);
  1025.                      } while (rename (filename, dest) == -1);
  1026.                   } while (!findnext (&blk));
  1027.             }
  1028.  
  1029.             if ((p = strtok (NULL, " ")) == NULL)
  1030.                break;
  1031.             parse_netnode2 (p, &pzo, &pne, &pno, &ppo);
  1032.          }
  1033.  
  1034.          if (!nopack) {
  1035.             sprintf (filename, "%d:%d/%d.%d", dzo, dne, dno, dpo);
  1036.             filename[14] = '\0';
  1037.             prints (7, 65, YELLOW|_BLACK, "              ");
  1038.             prints (7, 65, YELLOW|_BLACK, filename);
  1039.  
  1040.             if (config->alias[0].point && config->alias[0].fakenet)
  1041.                sprintf (filename, "%s%04x%04x.%s?", HoldAreaNameMunge (dzo), (unsigned int)(config->alias[0].fakenet - dne) & 0xFFFF, (unsigned int)(config->alias[0].point - dno) & 0xFFFF, suffixes[dt->tm_wday]);
  1042.             else
  1043.                sprintf (filename, "%s%04x%04x.%s?", HoldAreaNameMunge (dzo), (unsigned int)(config->alias[0].net - dne) & 0xFFFF, (unsigned int)(config->alias[0].node - dno) & 0xFFFF, suffixes[dt->tm_wday]);
  1044.  
  1045.             if (findfirst (filename, &blk, 0)) {
  1046.                if (config->alias[0].point && config->alias[0].fakenet)
  1047.                   sprintf (filename, "%s%04x%04x.%s0", HoldAreaNameMunge (dzo), (unsigned int)(config->alias[0].fakenet - dne) & 0xFFFF, (unsigned int)(config->alias[0].point - dno) & 0xFFFF, suffixes[dt->tm_wday]);
  1048.                else
  1049.                   sprintf (filename, "%s%04x%04x.%s0", HoldAreaNameMunge (dzo), (unsigned int)(config->alias[0].net - dne) & 0xFFFF, (unsigned int)(config->alias[0].node - dno) & 0xFFFF, suffixes[dt->tm_wday]);
  1050.             }
  1051.             else if (blk.ff_fsize == 0L) {
  1052.                sprintf (filename, "%s%s", HoldAreaNameMunge (dzo), blk.ff_name);
  1053.                unlink (filename);
  1054.                blk.ff_name[11]++;
  1055.                if (blk.ff_name[11] > '9')
  1056.                   blk.ff_name[11] = '0';
  1057.                sprintf (filename, "%s%s", HoldAreaNameMunge (dzo), blk.ff_name);
  1058.             }
  1059.             else
  1060.                sprintf (filename, "%s%s", HoldAreaNameMunge (dzo), blk.ff_name);
  1061.  
  1062.             prints (8, 65, YELLOW|_BLACK, strupr (&filename[strlen (filename) - 12]));
  1063.  
  1064.             sprintf (outbase, "%s%04x%04x.%cLO", HoldAreaNameMunge (dzo), dne & 0xFFFF, dno & 0xFFFF, dstf);
  1065.             sprintf (dest, "%s*.PKT", HoldAreaNameMunge (dzo));
  1066.             call_packer (outbase, filename, dest, dzo, dne, dno, 0);
  1067.          }
  1068.  
  1069.          clear_flagged_file ();
  1070.       }
  1071.       else
  1072.          status_line ("!Unknown keyword '%s'", p);
  1073.    }
  1074.  
  1075.    fclose (fp);
  1076.  
  1077.    hidecur ();
  1078.  
  1079.    clear_flagged_file ();
  1080.    clear_temp_file ();
  1081.    wclose ();
  1082.  
  1083.    printc (12, 0, LGREY|_BLACK, '├');
  1084.    printc (12, 52, LGREY|_BLACK, '┼');
  1085.    printc (12, 79, LGREY|_BLACK, '┤');
  1086. }
  1087.  
  1088. static void call_packer (attach, arcmail, packet, zone, net, node, point)
  1089. char *attach, *arcmail, *packet;
  1090. int zone, net, node, point;
  1091. {
  1092.    FILE *fp;
  1093.    int fd, x, arctype, *varr;
  1094.    char outbase[128], outstring[128], swapout;
  1095.    long pktsize;
  1096.    NODEINFO ni;
  1097.    struct ffblk blk;
  1098.    struct _pkthdr2 pkthdr;
  1099.  
  1100.    arctype = -1;
  1101.  
  1102.    sprintf (outbase, "%sNODES.DAT", config->net_info);
  1103.    if ((fd = open (outbase, O_RDONLY|O_BINARY)) != -1) {
  1104.       while (read (fd, (char *)&ni, sizeof (NODEINFO)) == sizeof (NODEINFO))
  1105.          if (ni.zone == zone && ni.node == node && ni.net == net && ni.point == point) {
  1106.             arctype = ni.packer;
  1107.             break;
  1108.          }
  1109.       close (fd);
  1110.    }
  1111.  
  1112.    strcpy (outbase, packet);
  1113.    outbase[strlen (outbase) - 5] = '\0';
  1114.    pktsize = 0L;
  1115.  
  1116.    if (findfirst (packet, &blk, 0))
  1117.       return;
  1118.  
  1119.    do {
  1120.       pktsize += blk.ff_fsize;
  1121.       sprintf (outstring, "%s%s", outbase, blk.ff_name);
  1122.       fd = open (outstring, O_RDWR|O_BINARY);
  1123.       if (fd != -1) {
  1124.          read (fd, (char *)&pkthdr, sizeof (struct _pkthdr2));
  1125.          memset (pkthdr.password, 0, 8);
  1126.          if (arctype != -1)
  1127.                 strncpy (pkthdr.password, ni.pw_packet,8);
  1128.             pkthdr.dest_zone2 = pkthdr.dest_zone = zone;
  1129.             pkthdr.dest_net = net;
  1130.             pkthdr.dest_node = node;
  1131.             pkthdr.dest_point = point;
  1132.             lseek (fd, 0L, SEEK_SET);
  1133.             write (fd, (char *)&pkthdr, sizeof (struct _pkthdr2));
  1134.             close (fd);
  1135.         }
  1136.     } while (!findnext (&blk));
  1137.  
  1138.    x = 0;
  1139.    if ((fp = fopen (attach, "rt")) != NULL) {
  1140.       while (fgets (outbase, 79, fp) != NULL) {
  1141.          if (!outbase[0])
  1142.             continue;
  1143.          while (strlen (outbase) && (outbase[strlen (outbase) -1] == 0x0D || outbase[strlen (outbase) -1] == 0x0A))
  1144.             outbase[strlen (outbase) -1] = '\0';
  1145.          if ((outbase[0] == '#' || outbase[0] == '^') && !stricmp (&outbase[1], arcmail)) {
  1146.             x = 1;
  1147.             break;
  1148.          }
  1149.          else if (!stricmp (outbase, arcmail)) {
  1150.             x = 1;
  1151.             break;
  1152.          }
  1153.       }
  1154.       fclose (fp);
  1155.    }
  1156.  
  1157.    if (!x) {
  1158.       fp = fopen (attach, "at");
  1159.       fprintf (fp, "#%s\n", fancy_str (arcmail));
  1160.       fclose (fp);
  1161.    }
  1162.  
  1163.    activation_key ();
  1164.  
  1165.    if (arctype == -1)
  1166.       arctype = 0;
  1167.  
  1168.    prints (9, 65, YELLOW|_BLACK, "        ");
  1169.    prints (9, 65, YELLOW|_BLACK, config->packers[arctype].id);
  1170.    time_release ();
  1171.    if (config->packers[arctype].packcmd[0] == '+') {
  1172.       strcpy (outstring, &config->packers[arctype].packcmd[1]);
  1173.       swapout = 1;
  1174.    }
  1175.    else {
  1176.       strcpy (outstring, config->packers[arctype].packcmd);
  1177.       swapout = 0;
  1178.    }
  1179.    strsrep (outstring, "%1", arcmail);
  1180.    strsrep (outstring, "%2", packet);
  1181.  
  1182.    status_line ("#%sing mail for %d:%d/%d.%d (%ld bytes)", config->packers[arctype].id, zone, net, node, point, pktsize);
  1183.  
  1184.    varr = ssave ();
  1185.    gotoxy (1, 14);
  1186.    wtextattr (LGREY|_BLACK);
  1187.  
  1188.    x = spawn_program (swapout, outstring);
  1189.  
  1190.    if (varr != NULL)
  1191.       srestore (varr);
  1192.  
  1193.    if (x != 0 || !findfirst (packet, &blk, 0)) {
  1194.       if (x != 0)
  1195.          status_line ("!ERROR: Return code: %d", x);
  1196.       else
  1197.          status_line ("!ERROR: Packer configuration");
  1198.       rename_noarc_packet (packet);
  1199.    }
  1200.  
  1201.    time_release ();
  1202. }
  1203.  
  1204. static char get_flag ()
  1205. {
  1206.    char *p;
  1207.  
  1208.    p = strtok (NULL, " ");
  1209.    if (!stricmp (p, "Crash"))
  1210.       return ('C');
  1211.    else if (!stricmp (p, "Hold"))
  1212.       return ('H');
  1213.    else if (!stricmp (p, "Direct"))
  1214.       return ('D');
  1215.    else if (!stricmp (p, "Normal"))
  1216.       return ('F');
  1217.    else
  1218.       return ('F');
  1219. }
  1220.  
  1221. /*---------------------------------------------------------------------------
  1222.  
  1223. ---------------------------------------------------------------------------*/
  1224. static void rename_noarc_packet (name)
  1225. char *name;
  1226. {
  1227.    int i = -1;
  1228.    char filename[128], *p, dir[80], newname[80];
  1229.    struct ffblk blk;
  1230.  
  1231.    strcpy (dir, name);
  1232.    dir[strlen (dir) - 5] = '\0';
  1233.  
  1234.    sprintf (filename, "%sNOARC.*", dir);
  1235.    if (!findfirst (filename, &blk, 0))
  1236.       do {
  1237.          if ((p = strchr (blk.ff_name, '.')) != NULL) {
  1238.             p++;
  1239.             if (atoi (p) > i)
  1240.                i = atoi (p);
  1241.          }
  1242.       } while (!findnext (&blk));
  1243.  
  1244.    i++;
  1245.  
  1246.    if (!findfirst (name, &blk, 0))
  1247.       do {
  1248.          sprintf (filename, "%s%s", dir, blk.ff_name);
  1249.          sprintf (newname, "%sNOARC.%03d", dir, i++);
  1250.          rename (filename, newname);
  1251.          status_line (":  File %s renamed to %s", filename, newname);
  1252.       } while (!findnext (&blk));
  1253. }
  1254.  
  1255. void change_type (zo, ne, no, po, from, to)
  1256. int zo, ne, no, po;
  1257. char from, to;
  1258. {
  1259.    FILE *fps, *fpd;
  1260.    int i;
  1261.    char string[256], filename[80];
  1262.  
  1263.    if (from == to)
  1264.       return;
  1265.  
  1266.    if (from == 'F')
  1267.       from = 'O';
  1268.    if (to == 'F')
  1269.       to = 'O';
  1270.  
  1271.    if (po)
  1272.         sprintf (filename, "%s%04x%04x.PNT\\%08x.%cUT", HoldAreaNameMunge (zo), ne, no, po, from);
  1273.    else
  1274.       sprintf (filename, "%s%04x%04x.%cUT", HoldAreaNameMunge (zo), ne, no, from);
  1275.  
  1276.    if (po)
  1277.         sprintf (string, "%s%04x%04x.PNT\\%08x.%cUT", HoldAreaNameMunge (zo), ne, no, po, to);
  1278.    else
  1279.       sprintf (string, "%s%04x%04x.%cUT", HoldAreaNameMunge (zo), ne, no, to);
  1280.  
  1281.    rename (filename, string);
  1282.  
  1283.    if (from == 'O')
  1284.       from = 'F';
  1285.    if (to == 'O')
  1286.       to = 'F';
  1287.  
  1288.    if (po)
  1289.         sprintf (filename, "%s%04x%04x.PNT\\%08x.%cLO", HoldAreaNameMunge (zo), ne, no, po, from);
  1290.    else
  1291.       sprintf (filename, "%s%04x%04x.%cLO", HoldAreaNameMunge (zo), ne, no, from);
  1292.    fps = fopen (filename, "rt");
  1293.    if (fps == NULL)
  1294.       return;
  1295.  
  1296.    if (po)
  1297.         sprintf (filename, "%s%04x%04x.PNT\\%08x.%cLO", HoldAreaNameMunge (zo), ne, no, po, to);
  1298.    else
  1299.       sprintf (filename, "%s%04x%04x.%cLO", HoldAreaNameMunge (zo), ne, no, to);
  1300.    fpd = fopen (filename, "at");
  1301.    if (fpd == NULL)
  1302.       return;
  1303.  
  1304.    while (fgets (string, 250, fps) != NULL)
  1305.       fputs (string, fpd);
  1306.  
  1307.    fclose (fpd);
  1308.    fclose (fps);
  1309.  
  1310.    if (po)
  1311.         sprintf (filename, "%s%04x%04x.PNT\\%08x.%cLO", HoldAreaNameMunge (zo), ne, no, po, from);
  1312.    else
  1313.       sprintf (filename, "%s%04x%04x.%cLO", HoldAreaNameMunge (zo), ne, no, from);
  1314.    unlink (filename);
  1315.  
  1316.    if (po)
  1317.         sprintf (filename, "%s%04x%04x.PNT\\%08x.%cUT", HoldAreaNameMunge (zo), ne, no, po, from);
  1318.    else
  1319.       sprintf (filename, "%s%04x%04x.%cUT", HoldAreaNameMunge (zo), ne, no, from);
  1320.    fps = fopen (filename, "rb");
  1321.    if (fps == NULL)
  1322.       return;
  1323.  
  1324.    if (po)
  1325.         sprintf (filename, "%s%04x%04x.PNT\\%08x.%cUT", HoldAreaNameMunge (zo), ne, no, po, to);
  1326.     else
  1327.         sprintf (filename, "%s%04x%04x.%cUT", HoldAreaNameMunge (zo), ne, no, to);
  1328.     fpd = fopen (filename, "ab");
  1329.     if (fpd == NULL)
  1330.         return;
  1331.  
  1332.     if (filelength (fileno (fpd)) > 0L)
  1333.         fseek (fps, sizeof (struct _pkthdr2), SEEK_SET);
  1334.  
  1335.     while ((i = fread (string, 1, 250, fps)) == 250)
  1336.         fwrite (string, 1, i, fpd);
  1337.  
  1338.     fclose (fpd);
  1339.     fclose (fps);
  1340.  
  1341.     if (po)
  1342.         sprintf (filename, "%s%04x%04x.PNT\\%08x.%cUT", HoldAreaNameMunge (zo), ne, no, po, from);
  1343.    else
  1344.       sprintf (filename, "%s%04x%04x.%cUT", HoldAreaNameMunge (zo), ne, no, from);
  1345.    unlink (filename);
  1346. }
  1347.  
  1348. int check_hold (int zone, int net, int node, int point)
  1349. {
  1350.    FILE *fp;
  1351.    char filename[80], linea[80], *p, *v, dstf;
  1352.    int dzo, dne, dno, dpo;
  1353.  
  1354.    sprintf (filename, "%sROUTE.CFG", config->sys_path);
  1355.    fp = fopen (filename, "rt");
  1356.    if (fp == NULL)
  1357.       return (0);
  1358.  
  1359.    while (fgets (linea, 79, fp) != NULL) {
  1360.       if (linea[0] == ';' || linea[0] == '%' || !linea[0])
  1361.          continue;
  1362.       if ((p = strchr (linea, ';')) != NULL)
  1363.          *p = '\0';
  1364.       if ((p = strchr (linea, '%')) != NULL)
  1365.          *p = '\0';
  1366.       while (linea[strlen (linea) -1] == 0x0D || linea[strlen (linea) -1] == 0x0A)
  1367.          linea[strlen (linea) -1] = '\0';
  1368.  
  1369.       if ((p = strtok (linea, " ")) == NULL)
  1370.          continue;
  1371.  
  1372.       if (!stricmp (p, "Send-To") || !stricmp (p, "Send")) {
  1373.          dstf = get_flag ();
  1374.          if (dstf != 'H')
  1375.             continue;
  1376.  
  1377.          dzo = config->alias[0].zone;
  1378.          dne = config->alias[0].net;
  1379.          dno = config->alias[0].node;
  1380.          dpo = 0;
  1381.  
  1382.          v = strtok (NULL, "");
  1383.  
  1384.          while (v != NULL && (p = strtok (v, " ")) != NULL) {
  1385.             v = strtok (NULL, "");
  1386.             parse_netnode2 (p, &dzo, &dne, &dno, &dpo);
  1387.             if (dzo == zone && dno == node && dne == net && dpo == point) {
  1388.                fclose (fp);
  1389.                return (1);
  1390.             }
  1391.          }
  1392.       }
  1393.    }
  1394.  
  1395.    fclose (fp);
  1396.    return (0);
  1397. }
  1398.  
  1399. int check_route_flag (int zone, int net, int node, int point)
  1400. {
  1401.    FILE *fp;
  1402.    char filename[80], linea[80], *p, *v, dstf;
  1403.    int dzo, dne, dno, dpo;
  1404.  
  1405.    sprintf (filename, "%sROUTE.CFG", config->sys_path);
  1406.    fp = fopen (filename, "rt");
  1407.    if (fp == NULL)
  1408.       return ('H');
  1409.  
  1410.    while (fgets (linea, 79, fp) != NULL) {
  1411.       if (linea[0] == ';' || linea[0] == '%' || !linea[0])
  1412.          continue;
  1413.       if ((p = strchr (linea, ';')) != NULL)
  1414.          *p = '\0';
  1415.       if ((p = strchr (linea, '%')) != NULL)
  1416.          *p = '\0';
  1417.       while (linea[strlen (linea) -1] == 0x0D || linea[strlen (linea) -1] == 0x0A)
  1418.          linea[strlen (linea) -1] = '\0';
  1419.  
  1420.       if ((p = strtok (linea, " ")) == NULL)
  1421.          continue;
  1422.  
  1423.       if (!stricmp (p, "SendFile-To")) {
  1424.          dstf = get_flag ();
  1425.  
  1426.          dzo = config->alias[0].zone;
  1427.          dne = config->alias[0].net;
  1428.          dno = config->alias[0].node;
  1429.          dpo = 0;
  1430.  
  1431.          v = strtok (NULL, "");
  1432.  
  1433.          while (v != NULL && (p = strtok (v, " ")) != NULL) {
  1434.             v = strtok (NULL, "");
  1435.             parse_netnode2 (p, &dzo, &dne, &dno, &dpo);
  1436.             if (dzo == zone && dno == node && dne == net && dpo == point) {
  1437.                fclose (fp);
  1438.                return (dstf);
  1439.             }
  1440.          }
  1441.       }
  1442.  
  1443.       if (!stricmp (p, "RouteFile-To")) {
  1444.          dstf = get_flag ();
  1445.  
  1446.          dzo = config->alias[0].zone;
  1447.          dne = config->alias[0].net;
  1448.          dno = config->alias[0].node;
  1449.          dpo = 0;
  1450.  
  1451.          if ((p = strtok (NULL, " ")) != NULL) {
  1452.             parse_netnode2 (p, &dzo, &dne, &dno, &dpo);
  1453.             if (dzo == zone && dno == node && dne == net && dpo == point) {
  1454.                fclose (fp);
  1455.                return (dstf);
  1456.             }
  1457.          }
  1458.       }
  1459.    }
  1460.  
  1461.    rewind (fp);
  1462.  
  1463.    while (fgets (linea, 79, fp) != NULL) {
  1464.       if (linea[0] == ';' || linea[0] == '%' || !linea[0])
  1465.          continue;
  1466.       if ((p = strchr (linea, ';')) != NULL)
  1467.          *p = '\0';
  1468.       if ((p = strchr (linea, '%')) != NULL)
  1469.          *p = '\0';
  1470.       while (linea[strlen (linea) -1] == 0x0D || linea[strlen (linea) -1] == 0x0A)
  1471.          linea[strlen (linea) -1] = '\0';
  1472.  
  1473.       if ((p = strtok (linea, " ")) == NULL)
  1474.          continue;
  1475.  
  1476.       if (!stricmp (p, "Send-To") || !stricmp (p, "Send")) {
  1477.          dstf = get_flag ();
  1478.  
  1479.          dzo = config->alias[0].zone;
  1480.          dne = config->alias[0].net;
  1481.          dno = config->alias[0].node;
  1482.          dpo = 0;
  1483.  
  1484.          v = strtok (NULL, "");
  1485.  
  1486.          while (v != NULL && (p = strtok (v, " ")) != NULL) {
  1487.             v = strtok (NULL, "");
  1488.             parse_netnode2 (p, &dzo, &dne, &dno, &dpo);
  1489.             if (dzo == zone && dno == node && dne == net && dpo == point) {
  1490.                fclose (fp);
  1491.                return (dstf);
  1492.             }
  1493.          }
  1494.       }
  1495.  
  1496.       if (!stricmp (p, "Route-To") || !stricmp (p, "Route")) {
  1497.          dstf = get_flag ();
  1498.  
  1499.          dzo = config->alias[0].zone;
  1500.          dne = config->alias[0].net;
  1501.          dno = config->alias[0].node;
  1502.          dpo = 0;
  1503.  
  1504.          if ((p = strtok (NULL, " ")) != NULL) {
  1505.             parse_netnode2 (p, &dzo, &dne, &dno, &dpo);
  1506.             if (dzo == zone && dno == node && dne == net && dpo == point) {
  1507.                fclose (fp);
  1508.                return (dstf);
  1509.             }
  1510.          }
  1511.       }
  1512.    }
  1513.  
  1514.    fclose (fp);
  1515.    return ('H');
  1516. }
  1517.  
  1518.