home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 2 BBS / 02-BBS.zip / lora299s.zip / LCVT241.CPP < prev    next >
C/C++ Source or Header  |  1997-01-26  |  24KB  |  678 lines

  1.  
  2. #include "_ldefs.h"
  3. #include "lora_api.h"
  4. #include "lora240.h"
  5.  
  6. PSZ KeyName[] = {
  7.    "TWIT", "DISGRACE", "LIMITED", "NORMAL", "WORTHY", "PRIVEL", "FAVORED",
  8.    "EXTRA", "CLERK", "ASST.SYSOP", "SYSOP"
  9. };
  10.  
  11. PSZ LimitName[] = {
  12.    "Twit", "Disgrace", "Limited", "Normal", "Worthy", "Privel", "Favored",
  13.    "Extra", "Clerk", "Asst.Sysop", "Sysop"
  14. };
  15.  
  16. /*
  17. PSZ AdjustPath (PSZ pszPath)
  18. {
  19. #if defined(__LINUX__)
  20.    PSZ p;
  21.  
  22.    p = pszPath;
  23.    while ((p = strchr (p, '\\')) != NULL)
  24.       *p++ = '/';
  25. #endif
  26.  
  27.    return (pszPath);
  28. }
  29. */
  30.  
  31. char *strcode(char *str,char *key)
  32. {
  33.     char *p,*q;
  34.  
  35.     q=key;
  36.     for(p=str;*p;p++) {
  37.         if(*p!=*q) *p=*p^*q;
  38.         q++;
  39.         if(!*q) q=key;
  40.     }
  41.     return(str);
  42. }
  43.  
  44. VOID ConvertEchoLink (PSZ pszFrom, PSZ pszTo)
  45. {
  46.    int fd;
  47.    CHAR Temp[128];
  48.    class TEchoLink *Data;
  49.    struct _sys_msg msg;
  50.  
  51.    if ((Data = new TEchoLink (pszTo)) != NULL) {
  52.       sprintf (Temp, "%ssysmsg.dat", pszFrom);
  53.       if ((fd = open (Temp, O_RDONLY|O_BINARY)) != -1) {
  54.          while (read (fd, &msg, sizeof (msg)) == sizeof (msg)) {
  55.             if (!msg.echomail || msg.echotag[0] == '\0')
  56.                continue;
  57.             Data->Load (msg.echotag);
  58.             Data->Clear ();
  59.             Data->AddString (msg.forward1);
  60.             Data->AddString (msg.forward2);
  61.             Data->AddString (msg.forward3);
  62.             Data->Save ();
  63.          }
  64.          close (fd);
  65.       }
  66.       delete Data;
  67.    }
  68. }
  69.  
  70. VOID ConvertFileLink (PSZ pszFrom, PSZ pszTo)
  71. {
  72.    int fd;
  73.    CHAR Temp[128];
  74.    class TFilechoLink *Data;
  75.    struct _sys_file file;
  76.  
  77.    if ((Data = new TFilechoLink (pszTo)) != NULL) {
  78.       sprintf (Temp, "%ssysfile.dat", pszFrom);
  79.       if ((fd = open (Temp, O_RDONLY|O_BINARY)) != -1) {
  80.          while (read (fd, &file, sizeof (file)) == sizeof (file)) {
  81.             if (file.tic_tag[0] == '\0')
  82.                continue;
  83.             Data->Load (file.tic_tag);
  84.             Data->Clear ();
  85.             Data->AddString (file.tic_forward1);
  86.             Data->AddString (file.tic_forward2);
  87.             Data->AddString (file.tic_forward3);
  88.             Data->Save ();
  89.          }
  90.          close (fd);
  91.       }
  92.       delete Data;
  93.    }
  94. }
  95.  
  96. VOID ConvertUsers (PSZ pszFrom, PSZ pszTo)
  97. {
  98.    int fd;
  99.    CHAR Temp[128], *p;
  100.    ULONG TotalCalls = 0L;
  101.    class TUser *Data;
  102.    class TStatistics *Stats;
  103.    struct _usr usr;
  104.  
  105.    sprintf (Temp, "%susers", pszTo);
  106.    if ((Data = new TUser (Temp)) != NULL) {
  107.       sprintf (Temp, "%susers.bbs", pszFrom);
  108.       if ((fd = open (Temp, O_RDONLY|O_BINARY)) != -1) {
  109.          while (read (fd, &usr, sizeof (usr)) == sizeof (usr)) {
  110.             Data->Clear ();
  111.             strcpy (Data->Name, usr.name);
  112.             strcpy (Data->RealName, usr.handle);
  113.             strcpy (Data->City, usr.city);
  114.             if (usr.ansi)
  115.                Data->Ansi = TRUE;
  116.             if (usr.avatar)
  117.                Data->Avatar = TRUE;
  118.             if (usr.color)
  119.                Data->Color = TRUE;
  120.             if (usr.hotkey)
  121.                Data->HotKey = TRUE;
  122.             Data->ScreenHeight = usr.len;
  123.             Data->ScreenWidth = usr.width;
  124.             Data->Level = usr.priv;
  125.             strcpy (Data->LimitClass, "NORMAL");
  126.             switch (usr.priv) {
  127.                case TWIT:
  128.                   strcpy (Data->LimitClass, "TWIT");
  129.                   break;
  130.                case DISGRACE:
  131.                   strcpy (Data->LimitClass, "DISGRACE");
  132.                   break;
  133.                case LIMITED:
  134.                   strcpy (Data->LimitClass, "LIMITED");
  135.                   break;
  136.                case NORMAL:
  137.                   strcpy (Data->LimitClass, "NORMAL");
  138.                   break;
  139.                case WORTHY:
  140.                   strcpy (Data->LimitClass, "WORTHY");
  141.                   break;
  142.                case PRIVIL:
  143.                   strcpy (Data->LimitClass, "PRIVEL");
  144.                   break;
  145.                case FAVORED:
  146.                   strcpy (Data->LimitClass, "FAVORED");
  147.                   break;
  148.                case EXTRA:
  149.                   strcpy (Data->LimitClass, "EXTRA");
  150.                   break;
  151.                case CLERK:
  152.                   strcpy (Data->LimitClass, "CLERK");
  153.                   break;
  154.                case ASSTSYSOP:
  155.                   strcpy (Data->LimitClass, "ASSTSYSOP");
  156.                   break;
  157.                case SYSOP:
  158.                   strcpy (Data->LimitClass, "SYSOP");
  159.                   break;
  160.             }
  161.             Data->AccessFlags = usr.flags;
  162.             Data->SetPassword (strcode (usr.pwd, usr.name));
  163.             strcpy (Data->DayPhone, usr.voicephone);
  164.  
  165.             strcpy (Temp, Data->Name);
  166.             p = strtok (strlwr (Temp), " ");
  167.             Data->MailBox[0] = *p;                 // La prima lettera della mailbox e'
  168.             Data->MailBox[1] = '\0';               // la prima lettera del nome
  169.             if ((p = strtok (NULL, " ")) == NULL)  // Cerca il cognome
  170.                p = &Temp[1];
  171.             if (strlen (p) > 7)                    // Se la mailbox risultasse piu' di
  172.                p[7] = '\0';                        // otto caratteri, forza gli otto caratteri
  173.             strcat (Data->MailBox, p);
  174.  
  175.             Data->LastCall = Data->CreationDate = time (NULL);
  176.             Data->TotalCalls = usr.times;
  177.             TotalCalls += Data->TotalCalls;
  178.             Data->UploadFiles = usr.n_upld;
  179.             Data->DownloadFiles = usr.n_dnld;
  180.             Data->UploadBytes = usr.upld;
  181.             Data->DownloadBytes = usr.dnld;
  182.             Data->Add ();
  183.          }
  184.          close (fd);
  185.       }
  186.       delete Data;
  187.    }
  188.  
  189.    if ((Stats = new TStatistics) != NULL) {
  190.       Stats->Read (1);
  191.       Stats->Calls = 0;
  192.       Stats->TodayCalls = 0;
  193.       Stats->TotalCalls = TotalCalls;
  194.       Stats->Update ();
  195.       delete Stats;
  196.    }
  197. }
  198.  
  199. VOID ConvertMessageAreas (PSZ pszFrom, PSZ pszTo, USHORT flUseName)
  200. {
  201.    int fd;
  202.    CHAR Temp[128], *p;
  203.    class TMsgData *Data;
  204.    struct _sys_msg msg;
  205.    struct _configuration *cfg;
  206.  
  207.    if ((cfg = (struct _configuration *)malloc (sizeof (struct _configuration))) != NULL) {
  208.       sprintf (Temp, "%sconfig.dat", pszFrom);
  209.       if ((fd = open (Temp, O_RDONLY|O_BINARY, S_IREAD|S_IWRITE)) != -1) {
  210.          read (fd, cfg, sizeof (struct _configuration));
  211.          close (fd);
  212.       }
  213.    }
  214.  
  215.    if ((Data = new TMsgData (pszTo)) != NULL) {
  216.       sprintf (Temp, "%ssysmsg.dat", pszFrom);
  217.       if ((fd = open (Temp, O_RDONLY|O_BINARY)) != -1) {
  218.          while (read (fd, &msg, sizeof (msg)) == sizeof (msg)) {
  219.             if (msg.quick_board != 0 || msg.gold_board != 0 || msg.pip_board != 0)
  220.                printf ("Can't convert area %d (Not a squish/fido base)\n", msg.msg_num);
  221.             Data->New ();
  222.             if (flUseName == TRUE && msg.qwk_name[0] != '\0') {
  223.                strcpy (Data->Key, msg.qwk_name);
  224.                if ((p = strchr (Data->Key, '\0')) != NULL) {
  225.                   if (p > Data->Key) {
  226.                      p--;
  227.                      while (p > Data->Key && *p == ' ')
  228.                         *p-- = '\0';
  229.                   }
  230.                }
  231.             }
  232.             else
  233.                sprintf (Data->Key, "%d", msg.msg_num);
  234.             strcpy (Data->Display, msg.msg_name);
  235.             if (msg.echomail)
  236.                Data->EchoMail = TRUE;
  237.             strcpy (Data->EchoTag, msg.echotag);
  238.             Data->Level = msg.msg_priv;
  239.             Data->AccessFlags = msg.msg_flags;
  240.             Data->WriteLevel = msg.write_priv;
  241.             Data->WriteFlags = msg.write_flags;
  242.             if (msg.squish != 0) {
  243.                Data->Storage = ST_SQUISH;
  244.                strcpy (Data->Path, msg.msg_path);
  245.             }
  246.             else if (msg.quick_board != 0) {
  247.                Data->Storage = ST_HUDSON;
  248.                strcpy (Data->Path, cfg->quick_msgpath);
  249.             }
  250.             else {
  251.                Data->Storage = ST_FIDO;
  252.                strcpy (Data->Path, msg.msg_path);
  253.             }
  254.             strcpy (Data->Path, msg.msg_path);
  255.             Data->MaxMessages = msg.max_msgs;
  256.             Data->DaysOld = msg.max_age;
  257.             sprintf (Data->Address, "%d:%d/%d.%d", cfg->alias[msg.use_alias].zone, cfg->alias[msg.use_alias].net, cfg->alias[msg.use_alias].node, cfg->alias[msg.use_alias].point);
  258.             Data->Add ();
  259.          }
  260.          close (fd);
  261.       }
  262.       delete Data;
  263.    }
  264.  
  265.    if (cfg != NULL)
  266.       free (cfg);
  267. }
  268.  
  269. VOID ConvertEchoMail (PSZ pszFrom, PSZ pszTo)
  270. {
  271.    int fd;
  272.    CHAR Temp[128], *p;
  273.    class TMsgData *Data;
  274.    struct _sys_msg msg;
  275.  
  276.    if ((Data = new TMsgData (pszTo)) != NULL) {
  277.       sprintf (Temp, "%ssysmsg.dat", pszFrom);
  278.       if ((fd = open (Temp, O_RDONLY|O_BINARY)) != -1) {
  279.          while (read (fd, &msg, sizeof (msg)) == sizeof (msg)) {
  280.             if (msg.quick_board != 0 || msg.gold_board != 0 || msg.pip_board != 0)
  281.                printf ("Can't convert area %d (Not a squish/fido base)\n", msg.msg_num);
  282.             printf ("Area %d - %-40.40s ", msg.msg_num, msg.msg_name);
  283.             if (msg.echomail && msg.echotag[0] != '\0') {
  284.                if (Data->ReadEcho (msg.echotag) == FALSE) {
  285.                   Data->New ();
  286.                   sprintf (Data->Key, "%d", msg.msg_num);
  287.                   strcpy (Data->Display, msg.msg_name);
  288.                   if (msg.echomail)
  289.                      Data->EchoMail = TRUE;
  290.                   strcpy (Data->EchoTag, msg.echotag);
  291.                   Data->Level = msg.msg_priv;
  292.                   Data->AccessFlags = msg.msg_flags;
  293.                   Data->WriteLevel = msg.write_priv;
  294.                   Data->WriteFlags = msg.write_flags;
  295.                   if (msg.squish != 0)
  296.                      Data->Storage = ST_SQUISH;
  297.                   else
  298.                      Data->Storage = ST_FIDO;
  299.                   strcpy (Data->Path, msg.msg_path);
  300.                   Data->Add ();
  301.                   printf ("added.\n");
  302.                }
  303.                else {
  304.                   Data->MaxMessages = msg.max_msgs;
  305.                   Data->DaysOld = msg.max_age;
  306.                   Data->Update ();
  307.                   printf ("already present, updating.\n");
  308.                }
  309.             }
  310.             else
  311.                printf ("not echomail, skip.\n");
  312.          }
  313.          close (fd);
  314.       }
  315.       delete Data;
  316.    }
  317. }
  318.  
  319. VOID ConvertFileAreas (PSZ pszFrom, PSZ pszTo, USHORT flUseName)
  320. {
  321.    int fd;
  322.    CHAR Temp[128], *p;
  323.    class TFileData *Data;
  324.    struct _sys_file file;
  325.  
  326.    if ((Data = new TFileData (pszTo)) != NULL) {
  327.       sprintf (Temp, "%ssysfile.dat", pszFrom);
  328.       if ((fd = open (Temp, O_RDONLY|O_BINARY)) != -1) {
  329.          while (read (fd, &file, sizeof (file)) == sizeof (file)) {
  330.             Data->New ();
  331.             if (flUseName == TRUE && file.short_name[0] != '\0') {
  332.                strcpy (Data->Key, file.short_name);
  333.                if ((p = strchr (Data->Key, '\0')) != NULL) {
  334.                   if (p > Data->Key) {
  335.                      p--;
  336.                      while (p > Data->Key && *p == ' ')
  337.                         *p-- = '\0';
  338.                   }
  339.                }
  340.             }
  341.             else
  342.                sprintf (Data->Key, "%d", file.file_num);
  343.             strcpy (Data->Display, file.file_name);
  344.             strcpy (Data->Download, file.filepath);
  345.             strcpy (Data->Upload, file.uppath);
  346.             Data->Level = file.file_priv;
  347.             Data->AccessFlags = file.file_flags;
  348.             Data->DownloadLevel = file.download_priv;
  349.             Data->DownloadFlags = file.download_flags;
  350.             strcpy (Data->EchoTag, file.tic_tag);
  351.             Data->Add ();
  352.          }
  353.          close (fd);
  354.       }
  355.       delete Data;
  356.    }
  357. }
  358.  
  359. VOID ConvertScheduler (PSZ pszFrom, PSZ pszTo)
  360. {
  361.    int fd;
  362.    CHAR Temp[128];
  363.    class TEvents *Data;
  364.    struct _event event;
  365.  
  366.    sprintf (Temp, "%sevents.dat", pszTo);
  367.    if ((Data = new TEvents (Temp)) != NULL) {
  368.       sprintf (Temp, "%ssched.dat", pszFrom);
  369.       if ((fd = open (Temp, O_RDONLY|O_BINARY)) != -1) {
  370.          while (read (fd, &event, sizeof (event)) == sizeof (event)) {
  371.             Data->New ();
  372.             Data->Hour = (UCHAR)(event.minute / 60);
  373.             Data->Minute = (UCHAR)(event.minute % 60);
  374.             Data->Length = event.length;
  375.             if (event.days & DAY_SUNDAY)
  376.                Data->Sunday = TRUE;
  377.             if (event.days & DAY_MONDAY)
  378.                Data->Monday = TRUE;
  379.             if (event.days & DAY_TUESDAY)
  380.                Data->Tuesday = TRUE;
  381.             if (event.days & DAY_WEDNESDAY)
  382.                Data->Wednesday = TRUE;
  383.             if (event.days & DAY_THURSDAY)
  384.                Data->Thursday = TRUE;
  385.             if (event.days & DAY_FRIDAY)
  386.                Data->Friday = TRUE;
  387.             if (event.days & DAY_SATURDAY)
  388.                Data->Saturday = TRUE;
  389.             if (event.behavior & MAT_DYNAM)
  390.                Data->Dynamic = TRUE;
  391.             if (event.behavior & MAT_CM)
  392.                Data->SendCrash = TRUE;
  393.             if (event.behavior & MAT_NOCM)
  394.                Data->SendDirect = Data->SendNormal = TRUE;
  395.             Data->SendImmediate = TRUE;
  396.             if (event.behavior & MAT_FORCED)
  397.                Data->Force = TRUE;
  398.             if (!(event.behavior & MAT_BBS))
  399.                Data->MailOnly = TRUE;
  400.             if (event.res_zone != 0) {
  401.                sprintf (Data->Address, "%d:%d/%d.%d", event.res_zone, event.res_net, event.res_node, 0);
  402.                Data->ForceCall = TRUE;
  403.                Data->SendCrash = TRUE;
  404.                Data->SendDirect = Data->SendNormal = TRUE;
  405.             }
  406.             strcpy (Data->Label, event.cmd);
  407.             Data->MaxCalls = event.no_connect;
  408.             Data->MaxConnects = event.with_connect;
  409.             Data->Add ();
  410.          }
  411.          close (fd);
  412.       }
  413.       Data->Save ();
  414.       delete Data;
  415.    }
  416. }
  417.  
  418. VOID CreateLimits (PSZ pszFrom)
  419. {
  420.    int fd, i;
  421.    CHAR Temp[128];
  422.    struct _configuration *cfg;
  423.    class TLimits *Limits;
  424.  
  425.    unlink ("limits.dat");
  426.    if ((Limits = new TLimits) != 0) {
  427.       if ((cfg = (struct _configuration *)malloc (sizeof (struct _configuration))) != NULL) {
  428.          sprintf (Temp, "%sconfig.dat", pszFrom);
  429.          if ((fd = open (Temp, O_RDONLY|O_BINARY, S_IREAD|S_IWRITE)) != -1) {
  430.             read (fd, cfg, sizeof (struct _configuration));
  431.             close (fd);
  432.  
  433.             for (i = 0; i < 11; i++) {
  434.                Limits->New ();
  435.                strcpy (Limits->Key, KeyName[i]);
  436.                strcpy (Limits->Description, LimitName[i]);
  437.                Limits->CallTimeLimit = cfg->uclass[i].max_call;
  438.                Limits->DayTimeLimit = cfg->uclass[i].max_time;
  439.                Limits->DayDownloadLimit = cfg->uclass[i].max_dl;
  440.                Limits->Add ();
  441.             }
  442.          }
  443.          free (cfg);
  444.       }
  445.       delete Limits;
  446.    }
  447. }
  448.  
  449. VOID ConvertFilebase (PSZ pszTo)
  450. {
  451.    FILE *fp;
  452.    USHORT PendingWrite;
  453.    ULONG Total;
  454.    CHAR Path[128], Temp[128], *p, *Name;
  455.    struct find_t blk;
  456.    class TFileData *Data;
  457.    class TFileBase *File;
  458.  
  459.    if ((Data = new TFileData (pszTo)) != NULL) {
  460.       if (Data->First () == TRUE)
  461.          do {
  462.             PendingWrite = FALSE;
  463.             Total = 0L;
  464.             if ((File = new TFileBase (pszTo, Data->Key)) != NULL) {
  465.                sprintf (Path, "%sfiles.bbs", Data->Download);
  466.                if ((fp = fopen (Path, "rt")) != NULL) {
  467.                   while (fgets (Temp, sizeof (Temp) - 1, fp) != NULL) {
  468.                      if ((p = strchr (Temp, 0x0A)) != NULL)
  469.                         *p = '\0';
  470.                      if (Temp[1] == '>') {
  471.                         if (PendingWrite == TRUE)
  472.                            File->Description->Add (&Temp[2], strlen (&Temp[2]) + 1);
  473.                      }
  474.                      else {
  475.                         if (PendingWrite == TRUE) {
  476.                            File->Add ();
  477.                            Total++;
  478.                            File->Clear ();
  479.                            PendingWrite = FALSE;
  480.                         }
  481.                         if ((Name = strtok (Temp, " ")) != NULL) {
  482.                            if ((p = strtok (NULL, "")) != NULL) {
  483.                               while (*p == ' ')
  484.                                  p++;
  485.                               if (*p == '(' || *p == '[') {
  486.                                  while (*p != ')' && *p != ']' && *p != '\0') {
  487.                                     if (isdigit (*p)) {
  488.                                        File->DlTimes *= 10;
  489.                                        File->DlTimes += *p - '0';
  490.                                     }
  491.                                     p++;
  492.                                  }
  493.                                  if (*p == ')' || *p == ']') {
  494.                                     p++;
  495.                                     while (*p == ' ')
  496.                                        p++;
  497.                                  }
  498.                               }
  499.                               if (*p != '\0')
  500.                                  File->Description->Add (p, strlen (p) + 1);
  501.                            }
  502.                            sprintf (Path, "%s%s", Data->Download, Name);
  503.                            if (!_dos_findfirst (Path, 0, &blk)) {
  504.                               strcpy (File->Area, Data->Key);
  505.                               strcpy (File->Name, Name);
  506.                               sprintf (File->Complete, "%s%s", Data->Download, blk.name);
  507.                               File->Size = blk.size;
  508.                               File->UplDate.Day = File->Date.Day = (UCHAR)(blk.wr_date & 0x1F);
  509.                               File->UplDate.Month = File->Date.Month = (UCHAR)((blk.wr_date & 0x1E0) >> 5);
  510.                               File->UplDate.Year = File->Date.Year = (USHORT)(((blk.wr_date & 0xFE00) >> 9) + 1980);
  511.                               File->UplDate.Hour = File->Date.Hour = (UCHAR)((blk.wr_time & 0xF800) >> 11);
  512.                               File->UplDate.Minute = File->Date.Minute = (UCHAR)((blk.wr_time & 0x7E0) >> 5);
  513.                               File->Uploader = "Sysop";
  514.                               PendingWrite = TRUE;
  515.                            }
  516.                         }
  517.                      }
  518.                   }
  519.                   fclose (fp);
  520.  
  521.                   if (PendingWrite == TRUE) {
  522.                      File->Add ();
  523.                      File->Clear ();
  524.                      Total++;
  525.                      PendingWrite = FALSE;
  526.                   }
  527.                }
  528.                delete File;
  529.  
  530.                Data->ActiveFiles = Total;
  531.                Data->Update ();
  532.             }
  533.          } while (Data->Next () == TRUE);
  534.       delete Data;
  535.    }
  536. }
  537.  
  538. VOID ConvertNodes (PSZ pszFrom, PSZ pszTo)
  539. {
  540.    int fd;
  541.    CHAR Temp[128];
  542.    class TNodes *Data;
  543.    struct _nodeinfo nodes;
  544.    struct _configuration *cfg;
  545.  
  546.    if ((cfg = (struct _configuration *)malloc (sizeof (struct _configuration))) != NULL) {
  547.       sprintf (Temp, "%sconfig.dat", pszFrom);
  548.       if ((fd = open (Temp, O_RDONLY|O_BINARY, S_IREAD|S_IWRITE)) != -1) {
  549.          read (fd, cfg, sizeof (struct _configuration));
  550.          close (fd);
  551.       }
  552.    }
  553.  
  554.    if ((Data = new TNodes (pszTo)) != NULL) {
  555.       sprintf (Temp, "%snodes.dat", cfg->net_info);
  556.       if ((fd = open (Temp, O_RDONLY|O_BINARY)) == -1) {
  557.          sprintf (Temp, "%s%snodes.dat", pszFrom, cfg->net_info);
  558.          fd = open (Temp, O_RDONLY|O_BINARY);
  559.       }
  560.  
  561.       if (fd != -1) {
  562.          while (read (fd, &nodes, sizeof (nodes)) == sizeof (nodes)) {
  563.             Data->New ();
  564.             sprintf (Data->Address, "%d:%d/%d.%d", nodes.zone, nodes.net, nodes.node, nodes.point);
  565.             strcpy (Data->SystemName, nodes.system);
  566.             strcpy (Data->SysopName, nodes.sysop_name);
  567.             strcpy (Data->Phone, nodes.phone);
  568.             strcpy (Data->SessionPwd, nodes.pw_session);
  569.             strcpy (Data->OutPktPwd, nodes.pw_packet);
  570.             strcpy (Data->AreaMgrPwd, nodes.pw_areafix);
  571.             if (nodes.pw_inbound_packet[0] != '\0')
  572.                strcpy (Data->InPktPwd, nodes.pw_inbound_packet);
  573.             else
  574.                strcpy (Data->InPktPwd, nodes.pw_packet);
  575.             Data->RemapMail = nodes.remap4d ? TRUE : FALSE;
  576.             sprintf (Data->Packer, "%c", cfg->packid[nodes.packer].display[0]);
  577.             Data->Add ();
  578.          }
  579.          close (fd);
  580.       }
  581.       delete Data;
  582.    }
  583.  
  584.    if (cfg != NULL)
  585.       free (cfg);
  586. }
  587.  
  588. VOID ConvertPackers (PSZ pszFrom, PSZ pszTo)
  589. {
  590.    int fd, i;
  591.    CHAR Temp[128];
  592.    struct _configuration *cfg;
  593.    class TPacker *Packer;
  594.  
  595.    if ((Packer = new TPacker (pszTo)) != 0) {
  596.       if ((cfg = (struct _configuration *)malloc (sizeof (struct _configuration))) != NULL) {
  597.          sprintf (Temp, "%sconfig.dat", pszFrom);
  598.          if ((fd = open (Temp, O_RDONLY|O_BINARY, S_IREAD|S_IWRITE)) != -1) {
  599.             read (fd, cfg, sizeof (struct _configuration));
  600.             close (fd);
  601.  
  602.             for (i = 0; i < 10; i++) {
  603.                if (cfg->packid[i].display[0] != '\0') {
  604.                   Packer->New ();
  605.                   sprintf (Packer->Key, "%c", cfg->packid[i].display[0]);
  606.                   strcpy (Packer->Display, &cfg->packid[i].display[1]);
  607.                   strcpy (Packer->Id, cfg->packid[i].ident);
  608.                   strcpy (Packer->PackCmd, cfg->packers[i].packcmd);
  609.                   strcpy (Packer->UnpackCmd, cfg->packers[i].unpackcmd);
  610.                   Packer->Position = cfg->packid[i].offset;
  611.                   Packer->Add ();
  612.                }
  613.             }
  614.          }
  615.          free (cfg);
  616.       }
  617.       delete Packer;
  618.    }
  619. }
  620.  
  621. void main (int argc, char *argv[])
  622. {
  623.    USHORT i, UseShortName = FALSE;
  624.    PSZ From = NULL, To = NULL, What = NULL;
  625.  
  626.    printf ("\nLCONV; LoraBBS 2.41 -> 3.00 File Conversion Utility\n");
  627.    printf ("       Copyright (c) 1996 by Marco Maccaferri. All rights reserved.\n");
  628.  
  629.    for (i = 1; i < argc; i++) {
  630.       if (!stricmp (argv[i], "-N"))
  631.          UseShortName = TRUE;
  632.       else if (What == NULL)
  633.          What = argv[i];
  634.       else if (From == NULL)
  635.          From = argv[i];
  636.       else if (To == NULL)
  637.          To = argv[i];
  638.    }
  639.  
  640.    if (From == NULL)
  641.       From = ".\\";
  642.    if (To == NULL)
  643.       To = "";
  644.  
  645.    if (!stricmp (What, "msg") || !stricmp (What, "sysmsg"))
  646.       ConvertMessageAreas (From, To, UseShortName);
  647. //   else if (!stricmp (What, "echomail"))
  648. //      ConvertEchoMail (From, To);
  649.    else if (!stricmp (What, "file") || !stricmp (What, "sysfile"))
  650.       ConvertFileAreas (From, To, UseShortName);
  651.    else if (!stricmp (What, "sched") || !stricmp (What, "events"))
  652.       ConvertScheduler (From, To);
  653.    else if (!stricmp (What, "users"))
  654.       ConvertUsers (From, To);
  655.    else if (!stricmp (What, "limits"))
  656.       CreateLimits (From);
  657. //   else if (!stricmp (What, "filebase"))
  658. //      ConvertFilebase (To);
  659.    else if (!stricmp (What, "nodes"))
  660.       ConvertNodes (From, To);
  661.    else if (!stricmp (What, "echolink"))
  662.       ConvertEchoLink (From, To);
  663.    else if (!stricmp (What, "filelink"))
  664.       ConvertFileLink (From, To);
  665.    else if (!stricmp (What, "packers"))
  666.       ConvertPackers (From, To);
  667.    else {
  668.       printf ("\nUsage:  lconv [what] [from] [to] [-N]\n\n");
  669.       printf ("        what - What to convert: msg, file, sched, users, limits\n");
  670.       printf ("               nodes, echolink, packers, filelink\n");
  671.       printf ("        from - Location of the Lora 2.41 files (default current directory)\n");
  672.       printf ("        to   - Location where to write the new files (default current dir)\n");
  673.       printf ("        -N   - Use short names instead of the area number for the message\n");
  674.       printf ("               and file areas\n");
  675.       printf ("\n");
  676.    }
  677. }
  678.