Changeset 1004 for trunk/dll/cmdline.c


Ignore:
Timestamp:
Apr 20, 2008, 7:59:34 PM (17 years ago)
Author:
Gregg Young
Message:

Change default command line length to 1024; remove additional hard coded command line lengths

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/cmdline.c

    r985 r1004  
    1717  20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
    1818  29 Feb 08 GKY Use xfree where appropriate
     19  20 Apr 08 GKY New variable names; Save and Load command lines of user set length
    1920
    2021***********************************************************************/
     
    3536#include "strutil.h"                    // GetPString
    3637#include "fm3dll.h"
     38#include "pathutil.h"                   // MaxCmdLineStr
    3739
    3840static PSZ pszSrcFile = __FILE__;
    3941
    40 #define MAXNUMCLS 250
    41 
    42 typedef struct LINKCLS
     42#define MAXNUMCMDLINES 250
     43
     44typedef struct LINKCMDLINES
    4345{
    44   CHAR *cl;
    45   struct LINKCLS *next;
     46  CHAR *cmdline;
     47  struct LINKCMDLINES *next;
    4648}
    47 LINKCLS;
    48 
    49 static LINKCLS *clbig = NULL, *clsmall = NULL;
    50 static BOOL loadedbig = FALSE, loadedsmall = FALSE;
    51 
    52 VOID load_cmdlines(BOOL big)
     49LINKCMDLINES;
     50
     51static LINKCMDLINES *DoItYourselfCmdLine = NULL, *MiniCmdLine = NULL;
     52static BOOL DoItYourselfLoaded = FALSE, MiniLoaded = FALSE;
     53
     54VOID load_cmdlines(BOOL DoItYourself)
    5355{
    54   /* load linked list of cmdlines from CMDLINES.DAT file */
     56  /** load linked list of cmdlines from CMDLINES.DAT file
     57   *  if DoItYourself = TRUE (main command line dialog)
     58   *  else load from CMDMINI.DAT (mini command line at
     59   *  bottom of main window).
     60   */
    5561
    5662  FILE *fp;
    57   LINKCLS *info, *last = NULL, *clhead;
    58   CHAR s[1024];
     63  LINKCMDLINES *info, *last = NULL, *CmdLineHead;
     64  PSZ pszCmdLine;
     65  //CHAR s[1024];
    5966  INT x = 0;
    6067
    61   clhead = (big) ? clbig : clsmall;
    62   if (big)
    63     loadedbig = TRUE;
     68  pszCmdLine = xmalloc(MaxComLineStrg, pszSrcFile, __LINE__);
     69  if (pszCmdLine) {
     70    CmdLineHead = (DoItYourself) ? DoItYourselfCmdLine : MiniCmdLine;
     71    if (DoItYourself)
     72      DoItYourselfLoaded = TRUE;
     73    else
     74      MiniLoaded = TRUE;
     75    save_dir2(pszCmdLine);
     76    if (pszCmdLine[strlen(pszCmdLine) - 1] != '\\')
     77      strcat(pszCmdLine, "\\");
     78    strcat(pszCmdLine, (DoItYourself) ? "CMDLINES.DAT" : "CMDMINI.DAT");
     79    fp = _fsopen(pszCmdLine, "r", SH_DENYWR);
     80    if (fp) {
     81      while (x < MAXNUMCMDLINES && !feof(fp)) {
     82        if (!xfgets_bstripcr(pszCmdLine, MaxComLineStrg, fp, pszSrcFile, __LINE__))
     83          break;
     84        if (pszCmdLine && *pszCmdLine != ';') {
     85          info = xmalloc(sizeof(LINKCMDLINES), pszSrcFile, __LINE__);
     86          if (info) {
     87            x++;
     88            info->cmdline = xstrdup(pszCmdLine, pszSrcFile, __LINE__);
     89            if (!info->cmdline)
     90              xfree(info);
     91            else {
     92              info->next = NULL;
     93              if (!CmdLineHead)
     94                CmdLineHead = info;
     95              else
     96                last->next = info;
     97              last = info;
     98            }
     99          }
     100        }
     101      }
     102      fclose(fp);
     103    }
     104  }
     105  xfree(pszCmdLine);
     106  if (DoItYourself)
     107    DoItYourselfCmdLine = CmdLineHead;
    64108  else
    65     loadedsmall = TRUE;
    66   save_dir2(s);
    67   if (s[strlen(s) - 1] != '\\')
    68     strcat(s, "\\");
    69   strcat(s, (big) ? "CMDLINES.DAT" : "CMDMINI.DAT");
    70   fp = _fsopen(s, "r", SH_DENYWR);
    71   if (fp) {
    72     while (x < MAXNUMCLS && !feof(fp)) {
    73       if (!xfgets_bstripcr(s, sizeof(s), fp, pszSrcFile, __LINE__))
    74         break;
    75       if (*s && *s != ';') {
    76         info = xmalloc(sizeof(LINKCLS), pszSrcFile, __LINE__);
    77         if (info) {
    78           x++;
    79           info->cl = xstrdup(s, pszSrcFile, __LINE__);
    80           if (!info->cl)
    81             xfree(info);
    82           else {
    83             info->next = NULL;
    84             if (!clhead)
    85               clhead = info;
    86             else
    87               last->next = info;
    88             last = info;
    89           }
    90         }
    91       }
    92     }
    93     fclose(fp);
    94   }
    95   if (big)
    96     clbig = clhead;
    97   else
    98     clsmall = clhead;
     109    MiniCmdLine = CmdLineHead;
    99110}
    100111
    101 VOID save_cmdlines(BOOL big)
     112VOID save_cmdlines(BOOL DoItYourself)
    102113{
    103   /* save linked list of cmdlines to CMDLINES.DAT file */
    104 
    105   LINKCLS *info, *clhead;
     114  /** save linked list of cmdlines from CMDLINES.DAT file
     115   *  if DoItYourself = TRUE (main command line dialog)
     116   *  else load from CMDMINI.DAT (mini command line at
     117   *  bottom of main window).
     118   */
     119
     120  LINKCMDLINES *info, *CmdLineHead;
    106121  FILE *fp;
    107   CHAR s[CCHMAXPATH + 14];
    108 
    109   clhead = (big) ? clbig : clsmall;
    110   if ((big && !loadedbig) || (!big && !loadedsmall))
     122  PSZ pszCmdLine;
     123  //CHAR s[CCHMAXPATH + 14];
     124
     125  CmdLineHead = (DoItYourself) ? DoItYourselfCmdLine : MiniCmdLine;
     126  if ((DoItYourself && !DoItYourselfLoaded) || (!DoItYourself && !MiniLoaded))
    111127    return;
    112   save_dir2(s);
    113   if (s[strlen(s) - 1] != '\\')
    114     strcat(s, "\\");
    115   strcat(s, (big) ? "CMDLINES.DAT" : "CMDMINI.DAT");
    116   if (clhead) {
    117     fp = xfopen(s, "w", pszSrcFile, __LINE__);
     128  pszCmdLine = xmalloc(MaxComLineStrg, pszSrcFile, __LINE__);
     129  if (!pszCmdLine)
     130    return;
     131  save_dir2(pszCmdLine);
     132  if (pszCmdLine[strlen(pszCmdLine) - 1] != '\\')
     133    strcat(pszCmdLine, "\\");
     134  strcat(pszCmdLine, (DoItYourself) ? "CMDLINES.DAT" : "CMDMINI.DAT");
     135  if (CmdLineHead) {
     136    fp = xfopen(pszCmdLine, "w", pszSrcFile, __LINE__);
    118137    if (fp) {
    119138      fputs(GetPString(IDS_COMMANDFILE2TEXT), fp);
    120       info = clhead;
     139      info = CmdLineHead;
    121140      while (info) {
    122         fprintf(fp, "%0.*s\n", 1000, info->cl);
     141        fprintf(fp, "%0.*s\n", 1000, info->cmdline);
    123142        info = info->next;
    124143      }
     
    127146  }
    128147  else
    129     unlink(s);
    130   if (big)
    131     clbig = clhead;
     148    unlink(pszCmdLine);
     149  if (DoItYourself)
     150    DoItYourselfCmdLine = CmdLineHead;
    132151  else
    133     clsmall = clhead;
     152    MiniCmdLine = CmdLineHead;
    134153}
    135154
    136 BOOL add_cmdline(CHAR * cl, BOOL big)
     155BOOL add_cmdline(CHAR *cmdline, BOOL DoItYourself)
    137156{
    138   LINKCLS *info, *last = NULL, *clhead;
     157  LINKCMDLINES *info, *last = NULL, *CmdLineHead;
    139158  INT x = 0;
    140159
    141   if (!cl || !*cl)
     160  if (!cmdline || !*cmdline)
    142161    return FALSE;
    143   clhead = (big) ? clbig : clsmall;
    144   if ((big && !loadedbig) || (!big && !loadedsmall))
    145     load_cmdlines(big);
    146   info = clhead;
     162  CmdLineHead = (DoItYourself) ? DoItYourselfCmdLine : MiniCmdLine;
     163  if ((DoItYourself && !DoItYourselfLoaded) || (!DoItYourself && !MiniLoaded))
     164    load_cmdlines(DoItYourself);
     165  info = CmdLineHead;
    147166  while (info) {
    148     if (!stricmp(info->cl, cl))
     167    if (!stricmp(info->cmdline, cmdline))
    149168      return FALSE;
    150169    last = info;
     
    152171    x++;
    153172  }
    154   info = xmalloc(sizeof(LINKCLS), pszSrcFile, __LINE__);
     173  info = xmalloc(sizeof(LINKCMDLINES), pszSrcFile, __LINE__);
    155174  if (info) {
    156     info->cl = xstrdup(cl, pszSrcFile, __LINE__);
    157     if (!info->cl)
     175    info->cmdline = xstrdup(cmdline, pszSrcFile, __LINE__);
     176    if (!info->cmdline)
    158177      xfree(info);
    159178    else {
    160179      info->next = NULL;
    161       if (!clhead)
    162         clhead = info;
     180      if (!CmdLineHead)
     181        CmdLineHead = info;
    163182      else
    164183        last->next = info;
    165       if (x > MAXNUMCLS) {
    166         info = clhead;
    167         clhead = clhead->next;
     184      if (x > MAXNUMCMDLINES) {
     185        info = CmdLineHead;
     186        CmdLineHead = CmdLineHead->next;
    168187        xfree(info);
    169188      }
    170       if (big)
    171         clbig = clhead;
     189      if (DoItYourself)
     190        DoItYourselfCmdLine = CmdLineHead;
    172191      else
    173         clsmall = clhead;
     192        MiniCmdLine = CmdLineHead;
    174193      return TRUE;
    175194    }
     
    178197}
    179198
    180 BOOL remove_cmdline(CHAR * cl, BOOL big)
     199BOOL remove_cmdline(CHAR *cmdline, BOOL DoItYourself)
    181200{
    182   LINKCLS *info, *last = NULL, *clhead;
    183 
    184   if (!cl || !*cl)
     201  LINKCMDLINES *info, *last = NULL, *CmdLineHead;
     202
     203  if (!cmdline || !*cmdline)
    185204    return FALSE;
    186   if ((big && !loadedbig) || (!big && !loadedsmall))
    187     load_cmdlines(big);
    188   clhead = (big) ? clbig : clsmall;
    189   info = clhead;
     205  if ((DoItYourself && !DoItYourselfLoaded) || (!DoItYourself && !MiniLoaded))
     206    load_cmdlines(DoItYourself);
     207  CmdLineHead = (DoItYourself) ? DoItYourselfCmdLine : MiniCmdLine;
     208  info = CmdLineHead;
    190209  while (info) {
    191     if (!stricmp(info->cl, cl)) {
     210    if (!stricmp(info->cmdline, cmdline)) {
    192211      if (last)
    193212        last->next = info->next;
    194213      else
    195         clhead = info->next;
    196       xfree(info->cl);
     214        CmdLineHead = info->next;
     215      xfree(info->cmdline);
    197216      xfree(info);
    198       if (big)
    199         clbig = clhead;
     217      if (DoItYourself)
     218        DoItYourselfCmdLine = CmdLineHead;
    200219      else
    201         clsmall = clhead;
     220        MiniCmdLine = CmdLineHead;
    202221      return TRUE;
    203222    }
     
    208227}
    209228
    210 VOID free_cmdlines(BOOL big)
     229VOID free_cmdlines(BOOL DoItYourself)
    211230{
    212   LINKCLS *info, *next, *clhead;
    213 
    214   clhead = (big) ? clbig : clsmall;
    215   info = clhead;
     231  LINKCMDLINES *info, *next, *CmdLineHead;
     232
     233  CmdLineHead = (DoItYourself) ? DoItYourselfCmdLine : MiniCmdLine;
     234  info = CmdLineHead;
    216235  while (info) {
    217236    next = info->next;
    218     xfree(info->cl);
     237    xfree(info->cmdline);
    219238    xfree(info);
    220239    info = next;
    221240  }
    222   clhead = NULL;
    223   if (big)
    224     clbig = clhead;
     241  CmdLineHead = NULL;
     242  if (DoItYourself)
     243    DoItYourselfCmdLine = CmdLineHead;
    225244  else
    226     clsmall = clhead;
     245    MiniCmdLine = CmdLineHead;
    227246  DosPostEventSem(CompactSem);
    228247}
     
    495514  case UM_RESCAN:
    496515    WinSendDlgItemMsg(hwnd, EXEC_LISTBOX, LM_DELETEALL, MPVOID, MPVOID);
    497     if (!loadedbig)
     516    if (!DoItYourselfLoaded)
    498517      load_cmdlines(TRUE);
    499518    {
    500       LINKCLS *info;
    501 
    502       info = clbig;
     519      LINKCMDLINES *info;
     520
     521      info = DoItYourselfCmdLine;
    503522      while (info) {
    504523        WinSendDlgItemMsg(hwnd,
    505524                          EXEC_LISTBOX,
    506525                          LM_INSERTITEM,
    507                           MPFROM2SHORT(LIT_END, 0), MPFROMP(info->cl));
     526                          MPFROM2SHORT(LIT_END, 0), MPFROMP(info->cmdline));
    508527        info = info->next;
    509528      }
     
    750769  case UM_RESCAN:
    751770    WinSendDlgItemMsg(hwnd, EXEC2_LISTBOX, LM_DELETEALL, MPVOID, MPVOID);
    752     if (!loadedsmall)
     771    if (!MiniLoaded)
    753772      load_cmdlines(FALSE);
    754773    {
    755       LINKCLS *info;
    756 
    757       info = clsmall;
     774      LINKCMDLINES *info;
     775
     776      info = MiniCmdLine;
    758777      while (info) {
    759778        WinSendDlgItemMsg(hwnd, EXEC2_LISTBOX, LM_INSERTITEM,
    760                           MPFROM2SHORT(LIT_END, 0), MPFROMP(info->cl));
     779                          MPFROM2SHORT(LIT_END, 0), MPFROMP(info->cmdline));
    761780        info = info->next;
    762781      }
Note: See TracChangeset for help on using the changeset viewer.