home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 2 BBS / 02-BBS.zip / lora299s.zip / LCVT240.CPP < prev    next >
C/C++ Source or Header  |  1997-01-26  |  24KB  |  677 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.             Data->MaxMessages = msg.max_msgs;
  255.             Data->DaysOld = msg.max_age;
  256.             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);
  257.             Data->Add ();
  258.          }
  259.          close (fd);
  260.       }
  261.       delete Data;
  262.    }
  263.  
  264.    if (cfg != NULL)
  265.       free (cfg);
  266. }
  267.  
  268. VOID ConvertEchoMail (PSZ pszFrom, PSZ pszTo)
  269. {
  270.    int fd;
  271.    CHAR Temp[128], *p;
  272.    class TMsgData *Data;
  273.    struct _sys_msg msg;
  274.  
  275.    if ((Data = new TMsgData (pszTo)) != NULL) {
  276.       sprintf (Temp, "%ssysmsg.dat", pszFrom);
  277.       if ((fd = open (Temp, O_RDONLY|O_BINARY)) != -1) {
  278.          while (read (fd, &msg, sizeof (msg)) == sizeof (msg)) {
  279.             if (msg.quick_board != 0 || msg.gold_board != 0 || msg.pip_board != 0)
  280.                printf ("Can't convert area %d (Not a squish/fido base)\n", msg.msg_num);
  281.             printf ("Area %d - %-40.40s ", msg.msg_num, msg.msg_name);
  282.             if (msg.echomail && msg.echotag[0] != '\0') {
  283.                if (Data->ReadEcho (msg.echotag) == FALSE) {
  284.                   Data->New ();
  285.                   sprintf (Data->Key, "%d", msg.msg_num);
  286.                   strcpy (Data->Display, msg.msg_name);
  287.                   if (msg.echomail)
  288.                      Data->EchoMail = TRUE;
  289.                   strcpy (Data->EchoTag, msg.echotag);
  290.                   Data->Level = msg.msg_priv;
  291.                   Data->AccessFlags = msg.msg_flags;
  292.                   Data->WriteLevel = msg.write_priv;
  293.                   Data->WriteFlags = msg.write_flags;
  294.                   if (msg.squish != 0)
  295.                      Data->Storage = ST_SQUISH;
  296.                   else
  297.                      Data->Storage = ST_FIDO;
  298.                   strcpy (Data->Path, msg.msg_path);
  299.                   Data->Add ();
  300.                   printf ("added.\n");
  301.                }
  302.                else {
  303.                   Data->MaxMessages = msg.max_msgs;
  304.                   Data->DaysOld = msg.max_age;
  305.                   Data->Update ();
  306.                   printf ("already present, updating.\n");
  307.                }
  308.             }
  309.             else
  310.                printf ("not echomail, skip.\n");
  311.          }
  312.          close (fd);
  313.       }
  314.       delete Data;
  315.    }
  316. }
  317.  
  318. VOID ConvertFileAreas (PSZ pszFrom, PSZ pszTo, USHORT flUseName)
  319. {
  320.    int fd;
  321.    CHAR Temp[128], *p;
  322.    class TFileData *Data;
  323.    struct _sys_file file;
  324.  
  325.    if ((Data = new TFileData (pszTo)) != NULL) {
  326.       sprintf (Temp, "%ssysfile.dat", pszFrom);
  327.       if ((fd = open (Temp, O_RDONLY|O_BINARY)) != -1) {
  328.          while (read (fd, &file, sizeof (file)) == sizeof (file)) {
  329.             Data->New ();
  330.             if (flUseName == TRUE && file.short_name[0] != '\0') {
  331.                strcpy (Data->Key, file.short_name);
  332.                if ((p = strchr (Data->Key, '\0')) != NULL) {
  333.                   if (p > Data->Key) {
  334.                      p--;
  335.                      while (p > Data->Key && *p == ' ')
  336.                         *p-- = '\0';
  337.                   }
  338.                }
  339.             }
  340.             else
  341.                sprintf (Data->Key, "%d", file.file_num);
  342.             strcpy (Data->Display, file.file_name);
  343.             strcpy (Data->Download, file.filepath);
  344.             strcpy (Data->Upload, file.uppath);
  345.             Data->Level = file.file_priv;
  346.             Data->AccessFlags = file.file_flags;
  347.             Data->DownloadLevel = file.download_priv;
  348.             Data->DownloadFlags = file.download_flags;
  349.             strcpy (Data->EchoTag, file.tic_tag);
  350.             Data->Add ();
  351.          }
  352.          close (fd);
  353.       }
  354.       delete Data;
  355.    }
  356. }
  357.  
  358. VOID ConvertScheduler (PSZ pszFrom, PSZ pszTo)
  359. {
  360.    int fd;
  361.    CHAR Temp[128];
  362.    class TEvents *Data;
  363.    struct _event event;
  364.  
  365.    sprintf (Temp, "%sevents.dat", pszTo);
  366.    if ((Data = new TEvents (Temp)) != NULL) {
  367.       sprintf (Temp, "%ssched.dat", pszFrom);
  368.       if ((fd = open (Temp, O_RDONLY|O_BINARY)) != -1) {
  369.          while (read (fd, &event, sizeof (event)) == sizeof (event)) {
  370.             Data->New ();
  371.             Data->Hour = (UCHAR)(event.minute / 60);
  372.             Data->Minute = (UCHAR)(event.minute % 60);
  373.             Data->Length = event.length;
  374.             if (event.days & DAY_SUNDAY)
  375.                Data->Sunday = TRUE;
  376.             if (event.days & DAY_MONDAY)
  377.                Data->Monday = TRUE;
  378.             if (event.days & DAY_TUESDAY)
  379.                Data->Tuesday = TRUE;
  380.             if (event.days & DAY_WEDNESDAY)
  381.                Data->Wednesday = TRUE;
  382.             if (event.days & DAY_THURSDAY)
  383.                Data->Thursday = TRUE;
  384.             if (event.days & DAY_FRIDAY)
  385.                Data->Friday = TRUE;
  386.             if (event.days & DAY_SATURDAY)
  387.                Data->Saturday = TRUE;
  388.             if (event.behavior & MAT_DYNAM)
  389.                Data->Dynamic = TRUE;
  390.             if (event.behavior & MAT_CM)
  391.                Data->SendCrash = TRUE;
  392.             if (event.behavior & MAT_NOCM)
  393.                Data->SendDirect = Data->SendNormal = TRUE;
  394.             Data->SendImmediate = TRUE;
  395.             if (event.behavior & MAT_FORCED)
  396.                Data->Force = TRUE;
  397.             if (!(event.behavior & MAT_BBS))
  398.                Data->MailOnly = TRUE;
  399.             if (event.res_zone != 0) {
  400.                sprintf (Data->Address, "%d:%d/%d.%d", event.res_zone, event.res_net, event.res_node, 0);
  401.                Data->ForceCall = TRUE;
  402.                Data->SendCrash = TRUE;
  403.                Data->SendDirect = Data->SendNormal = TRUE;
  404.             }
  405.             strcpy (Data->Label, event.cmd);
  406.             Data->MaxCalls = event.no_connect;
  407.             Data->MaxConnects = event.with_connect;
  408.             Data->Add ();
  409.          }
  410.          close (fd);
  411.       }
  412.       Data->Save ();
  413.       delete Data;
  414.    }
  415. }
  416.  
  417. VOID CreateLimits (PSZ pszFrom)
  418. {
  419.    int fd, i;
  420.    CHAR Temp[128];
  421.    struct _configuration *cfg;
  422.    class TLimits *Limits;
  423.  
  424.    unlink ("limits.dat");
  425.    if ((Limits = new TLimits) != 0) {
  426.       if ((cfg = (struct _configuration *)malloc (sizeof (struct _configuration))) != NULL) {
  427.          sprintf (Temp, "%sconfig.dat", pszFrom);
  428.          if ((fd = open (Temp, O_RDONLY|O_BINARY, S_IREAD|S_IWRITE)) != -1) {
  429.             read (fd, cfg, sizeof (struct _configuration));
  430.             close (fd);
  431.  
  432.             for (i = 0; i < 11; i++) {
  433.                Limits->New ();
  434.                strcpy (Limits->Key, KeyName[i]);
  435.                strcpy (Limits->Description, LimitName[i]);
  436.                Limits->CallTimeLimit = cfg->uclass[i].max_call;
  437.                Limits->DayTimeLimit = cfg->uclass[i].max_time;
  438.                Limits->DayDownloadLimit = cfg->uclass[i].max_dl;
  439.                Limits->Add ();
  440.             }
  441.          }
  442.          free (cfg);
  443.       }
  444.       delete Limits;
  445.    }
  446. }
  447.  
  448. VOID ConvertFilebase (PSZ pszTo)
  449. {
  450.    FILE *fp;
  451.    USHORT PendingWrite;
  452.    ULONG Total;
  453.    CHAR Path[128], Temp[128], *p, *Name;
  454.    struct find_t blk;
  455.    class TFileData *Data;
  456.    class TFileBase *File;
  457.  
  458.    if ((Data = new TFileData (pszTo)) != NULL) {
  459.       if (Data->First () == TRUE)
  460.          do {
  461.             PendingWrite = FALSE;
  462.             Total = 0L;
  463.             if ((File = new TFileBase (pszTo, Data->Key)) != NULL) {
  464.                sprintf (Path, "%sfiles.bbs", Data->Download);
  465.                if ((fp = fopen (Path, "rt")) != NULL) {
  466.                   while (fgets (Temp, sizeof (Temp) - 1, fp) != NULL) {
  467.                      if ((p = strchr (Temp, 0x0A)) != NULL)
  468.                         *p = '\0';
  469.                      if (Temp[1] == '>') {
  470.                         if (PendingWrite == TRUE)
  471.                            File->Description->Add (&Temp[2], strlen (&Temp[2]) + 1);
  472.                      }
  473.                      else {
  474.                         if (PendingWrite == TRUE) {
  475.                            File->Add ();
  476.                            Total++;
  477.                            File->Clear ();
  478.                            PendingWrite = FALSE;
  479.                         }
  480.                         if ((Name = strtok (Temp, " ")) != NULL) {
  481.                            if ((p = strtok (NULL, "")) != NULL) {
  482.                               while (*p == ' ')
  483.                                  p++;
  484.                               if (*p == '(' || *p == '[') {
  485.                                  while (*p != ')' && *p != ']' && *p != '\0') {
  486.                                     if (isdigit (*p)) {
  487.                                        File->DlTimes *= 10;
  488.                                        File->DlTimes += *p - '0';
  489.                                     }
  490.                                     p++;
  491.                                  }
  492.                                  if (*p == ')' || *p == ']') {
  493.                                     p++;
  494.                                     while (*p == ' ')
  495.                                        p++;
  496.                                  }
  497.                               }
  498.                               if (*p != '\0')
  499.                                  File->Description->Add (p, strlen (p) + 1);
  500.                            }
  501.                            sprintf (Path, "%s%s", Data->Download, Name);
  502.                            if (!_dos_findfirst (Path, 0, &blk)) {
  503.                               strcpy (File->Area, Data->Key);
  504.                               strcpy (File->Name, Name);
  505.                               sprintf (File->Complete, "%s%s", Data->Download, blk.name);
  506.                               File->Size = blk.size;
  507.                               File->UplDate.Day = File->Date.Day = (UCHAR)(blk.wr_date & 0x1F);
  508.                               File->UplDate.Month = File->Date.Month = (UCHAR)((blk.wr_date & 0x1E0) >> 5);
  509.                               File->UplDate.Year = File->Date.Year = (USHORT)(((blk.wr_date & 0xFE00) >> 9) + 1980);
  510.                               File->UplDate.Hour = File->Date.Hour = (UCHAR)((blk.wr_time & 0xF800) >> 11);
  511.                               File->UplDate.Minute = File->Date.Minute = (UCHAR)((blk.wr_time & 0x7E0) >> 5);
  512.                               File->Uploader = "Sysop";
  513.                               PendingWrite = TRUE;
  514.                            }
  515.                         }
  516.                      }
  517.                   }
  518.                   fclose (fp);
  519.  
  520.                   if (PendingWrite == TRUE) {
  521.                      File->Add ();
  522.                      File->Clear ();
  523.                      Total++;
  524.                      PendingWrite = FALSE;
  525.                   }
  526.                }
  527.                delete File;
  528.  
  529.                Data->ActiveFiles = Total;
  530.                Data->Update ();
  531.             }
  532.          } while (Data->Next () == TRUE);
  533.       delete Data;
  534.    }
  535. }
  536.  
  537. VOID ConvertNodes (PSZ pszFrom, PSZ pszTo)
  538. {
  539.    int fd;
  540.    CHAR Temp[128];
  541.    class TNodes *Data;
  542.    struct _nodeinfo nodes;
  543.    struct _configuration *cfg;
  544.  
  545.    if ((cfg = (struct _configuration *)malloc (sizeof (struct _configuration))) != NULL) {
  546.       sprintf (Temp, "%sconfig.dat", pszFrom);
  547.       if ((fd = open (Temp, O_RDONLY|O_BINARY, S_IREAD|S_IWRITE)) != -1) {
  548.          read (fd, cfg, sizeof (struct _configuration));
  549.          close (fd);
  550.       }
  551.    }
  552.  
  553.    if ((Data = new TNodes (pszTo)) != NULL) {
  554.       sprintf (Temp, "%snodes.dat", cfg->net_info);
  555.       if ((fd = open (Temp, O_RDONLY|O_BINARY)) == -1) {
  556.          sprintf (Temp, "%s%snodes.dat", pszFrom, cfg->net_info);
  557.          fd = open (Temp, O_RDONLY|O_BINARY);
  558.       }
  559.  
  560.       if (fd != -1) {
  561.          while (read (fd, &nodes, sizeof (nodes)) == sizeof (nodes)) {
  562.             Data->New ();
  563.             sprintf (Data->Address, "%d:%d/%d.%d", nodes.zone, nodes.net, nodes.node, nodes.point);
  564.             strcpy (Data->SystemName, nodes.system);
  565.             strcpy (Data->SysopName, nodes.sysop_name);
  566.             strcpy (Data->Phone, nodes.phone);
  567.             strcpy (Data->SessionPwd, nodes.pw_session);
  568.             strcpy (Data->OutPktPwd, nodes.pw_packet);
  569.             strcpy (Data->AreaMgrPwd, nodes.pw_areafix);
  570.             if (nodes.pw_inbound_packet[0] != '\0')
  571.                strcpy (Data->InPktPwd, nodes.pw_inbound_packet);
  572.             else
  573.                strcpy (Data->InPktPwd, nodes.pw_packet);
  574.             Data->RemapMail = nodes.remap4d ? TRUE : FALSE;
  575.             sprintf (Data->Packer, "%c", cfg->packid[nodes.packer].display[0]);
  576.             Data->Add ();
  577.          }
  578.          close (fd);
  579.       }
  580.       delete Data;
  581.    }
  582.  
  583.    if (cfg != NULL)
  584.       free (cfg);
  585. }
  586.  
  587. VOID ConvertPackers (PSZ pszFrom, PSZ pszTo)
  588. {
  589.    int fd, i;
  590.    CHAR Temp[128];
  591.    struct _configuration *cfg;
  592.    class TPacker *Packer;
  593.  
  594.    if ((Packer = new TPacker (pszTo)) != 0) {
  595.       if ((cfg = (struct _configuration *)malloc (sizeof (struct _configuration))) != NULL) {
  596.          sprintf (Temp, "%sconfig.dat", pszFrom);
  597.          if ((fd = open (Temp, O_RDONLY|O_BINARY, S_IREAD|S_IWRITE)) != -1) {
  598.             read (fd, cfg, sizeof (struct _configuration));
  599.             close (fd);
  600.  
  601.             for (i = 0; i < 10; i++) {
  602.                if (cfg->packid[i].display[0] != '\0') {
  603.                   Packer->New ();
  604.                   sprintf (Packer->Key, "%c", cfg->packid[i].display[0]);
  605.                   strcpy (Packer->Display, &cfg->packid[i].display[1]);
  606.                   strcpy (Packer->Id, cfg->packid[i].ident);
  607.                   strcpy (Packer->PackCmd, cfg->packers[i].packcmd);
  608.                   strcpy (Packer->UnpackCmd, cfg->packers[i].unpackcmd);
  609.                   Packer->Position = cfg->packid[i].offset;
  610.                   Packer->Add ();
  611.                }
  612.             }
  613.          }
  614.          free (cfg);
  615.       }
  616.       delete Packer;
  617.    }
  618. }
  619.  
  620. void main (int argc, char *argv[])
  621. {
  622.    USHORT i, UseShortName = FALSE;
  623.    PSZ From = NULL, To = NULL, What = NULL;
  624.  
  625.    printf ("\nLCONV; LoraBBS 2.40 -> 3.00 File Conversion Utility\n");
  626.    printf ("       Copyright (c) 1996 by Marco Maccaferri. All rights reserved.\n");
  627.  
  628.    for (i = 1; i < argc; i++) {
  629.       if (!stricmp (argv[i], "-N"))
  630.          UseShortName = TRUE;
  631.       else if (What == NULL)
  632.          What = argv[i];
  633.       else if (From == NULL)
  634.          From = argv[i];
  635.       else if (To == NULL)
  636.          To = argv[i];
  637.    }
  638.  
  639.    if (From == NULL)
  640.       From = ".\\";
  641.    if (To == NULL)
  642.       To = "";
  643.  
  644.    if (!stricmp (What, "msg") || !stricmp (What, "sysmsg"))
  645.       ConvertMessageAreas (From, To, UseShortName);
  646. //   else if (!stricmp (What, "echomail"))
  647. //      ConvertEchoMail (From, To);
  648.    else if (!stricmp (What, "file") || !stricmp (What, "sysfile"))
  649.       ConvertFileAreas (From, To, UseShortName);
  650.    else if (!stricmp (What, "sched") || !stricmp (What, "events"))
  651.       ConvertScheduler (From, To);
  652.    else if (!stricmp (What, "users"))
  653.       ConvertUsers (From, To);
  654.    else if (!stricmp (What, "limits"))
  655.       CreateLimits (From);
  656. //   else if (!stricmp (What, "filebase"))
  657. //      ConvertFilebase (To);
  658.    else if (!stricmp (What, "nodes"))
  659.       ConvertNodes (From, To);
  660.    else if (!stricmp (What, "echolink"))
  661.       ConvertEchoLink (From, To);
  662.    else if (!stricmp (What, "filelink"))
  663.       ConvertFileLink (From, To);
  664.    else if (!stricmp (What, "packers"))
  665.       ConvertPackers (From, To);
  666.    else {
  667.       printf ("\nUsage:  lconv [what] [from] [to] [-N]\n\n");
  668.       printf ("        what - What to convert: msg, file, sched, users, limits\n");
  669.       printf ("               nodes, echolink, packers, filelink\n");
  670.       printf ("        from - Location of the Lora 2.40 files (default current directory)\n");
  671.       printf ("        to   - Location where to write the new files (default current dir)\n");
  672.       printf ("        -N   - Use short names instead of the area number for the message\n");
  673.       printf ("               and file areas\n");
  674.       printf ("\n");
  675.    }
  676. }
  677.