Changeset 551 for trunk/dll/inis.c


Ignore:
Timestamp:
Feb 28, 2007, 2:33:51 AM (19 years ago)
Author:
Gregg Young
Message:

Indentation cleanup

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/inis.c

    r533 r551  
    4141#pragma alloc_text(STARTUP,StartIniEditor)
    4242
    43 typedef struct {
     43typedef struct
     44{
    4445  USHORT size;
    45   CHAR   ininame[CCHMAXPATH];
    46   HINI   hini;
    47   BOOL   working;
    48   BOOL   edit;
    49   BOOL   confirm;
    50   HWND   hwndMenu;
    51   CHAR   applname[CCHMAXPATH];
    52   CHAR   keyname[CCHMAXPATH];
    53   CHAR  *data;
    54   ULONG  datalen;
    55   SHORT  appindex;
    56   SHORT  keyindex;
    57   BOOL   dontclose;
     46  CHAR ininame[CCHMAXPATH];
     47  HINI hini;
     48  BOOL working;
     49  BOOL edit;
     50  BOOL confirm;
     51  HWND hwndMenu;
     52  CHAR applname[CCHMAXPATH];
     53  CHAR keyname[CCHMAXPATH];
     54  CHAR *data;
     55  ULONG datalen;
     56  SHORT appindex;
     57  SHORT keyindex;
     58  BOOL dontclose;
    5859  USHORT currid;
    59   BOOL   isbinary;
    60   HWND   hwndIni;
    61   HWND   hwndApp;
    62   HWND   hwndKey;
    63   HWND   hwndData;
    64   HWND   hwndPopup;
    65   HWND   hwndCurrent;
    66 } INIDATA;
    67 
    68 typedef struct {
    69   USHORT   size;
    70   USHORT   action;
    71   CHAR     filename1[CCHMAXPATH];
    72   CHAR     filename2[CCHMAXPATH];
    73   CHAR     app[CCHMAXPATH];
    74   CHAR     key[CCHMAXPATH];
    75   CHAR     app2[CCHMAXPATH];
    76   CHAR     key2[CCHMAXPATH];
    77   HWND     hwndDlg;
    78   HWND     hwndSource;
    79   BOOL     confirm;
    80 } INIREC;
    81 
    82 
    83 VOID CopyIniThread (VOID *args)
     60  BOOL isbinary;
     61  HWND hwndIni;
     62  HWND hwndApp;
     63  HWND hwndKey;
     64  HWND hwndData;
     65  HWND hwndPopup;
     66  HWND hwndCurrent;
     67}
     68INIDATA;
     69
     70typedef struct
    8471{
    85   INIREC     *inirec = (INIREC *)args;
    86   HAB         hab2;
    87   HMQ         hmq2;
    88   HINI        hini1 = (HINI)0,hini2 = (HINI)0;
    89   PRFPROFILE  cprfp;
    90   CHAR        userini[CCHMAXPATH],sysini[CCHMAXPATH];
    91 
    92   if(inirec) {
     72  USHORT size;
     73  USHORT action;
     74  CHAR filename1[CCHMAXPATH];
     75  CHAR filename2[CCHMAXPATH];
     76  CHAR app[CCHMAXPATH];
     77  CHAR key[CCHMAXPATH];
     78  CHAR app2[CCHMAXPATH];
     79  CHAR key2[CCHMAXPATH];
     80  HWND hwndDlg;
     81  HWND hwndSource;
     82  BOOL confirm;
     83}
     84INIREC;
     85
     86VOID CopyIniThread(VOID * args)
     87{
     88  INIREC *inirec = (INIREC *) args;
     89  HAB hab2;
     90  HMQ hmq2;
     91  HINI hini1 = (HINI) 0, hini2 = (HINI) 0;
     92  PRFPROFILE cprfp;
     93  CHAR userini[CCHMAXPATH], sysini[CCHMAXPATH];
     94
     95  if (inirec) {
    9396    hab2 = WinInitialize(0);
    94     if(hab2) {
    95       hmq2 = WinCreateMsgQueue(hab2,0);
    96       if(hmq2) {
    97         WinCancelShutdown(hmq2,TRUE);
     97    if (hab2) {
     98      hmq2 = WinCreateMsgQueue(hab2, 0);
     99      if (hmq2) {
     100        WinCancelShutdown(hmq2, TRUE);
    98101        IncrThreadUsage();
    99         *userini = *sysini = 0;
    100         memset(&cprfp,0,sizeof(PRFPROFILE));
    101         cprfp.cchUserName = CCHMAXPATH;
    102         cprfp.cchSysName = CCHMAXPATH;
    103         cprfp.pszUserName = (PSZ)userini;
    104         cprfp.pszSysName = (PSZ)sysini;
    105         if(PrfQueryProfile(hab2,&cprfp)) {
    106           if(!stricmp(cprfp.pszUserName,inirec->filename1))
    107             hini1 = HINI_USERPROFILE;
    108           else if(!stricmp(cprfp.pszSysName,inirec->filename1))
    109             hini1 = HINI_SYSTEMPROFILE;
    110           if(!stricmp(cprfp.pszUserName,inirec->filename2))
    111             hini2 = HINI_USERPROFILE;
    112           else if(!stricmp(cprfp.pszSysName,inirec->filename2))
    113             hini2 = HINI_SYSTEMPROFILE;
    114         }
    115         if(!hini1)
    116           hini1 = PrfOpenProfile(hab2,inirec->filename1);
    117         if(!hini2) {
    118           if(!stricmp(inirec->filename1,inirec->filename2))
    119             hini2 = hini1;
    120           else
    121             hini2 = PrfOpenProfile(hab2,inirec->filename2);
    122         }
    123         if(hini1 && hini2 && (*inirec->app2 || hini1 != hini2)) {
    124 
    125           PVOID pDataK,pData;
    126           PBYTE pCurrentK;
    127           ULONG ulSize = 0L;
    128 
    129           if(inirec->action == IDM_MOVE || inirec->action == IDM_COPY) {
    130             if(!*inirec->key) {
    131               if(inirec->confirm &&
    132                  PrfQueryProfileSize(hini1,(PSZ)((*inirec->app2) ?
    133                                      inirec->app2 : inirec->app),NULL,
    134                                      (PULONG)&ulSize) && ulSize) {
    135                 if(saymsg(MB_YESNOCANCEL,
    136                           HWND_DESKTOP,
    137                           GetPString(IDS_CONFIRMTEXT),
    138                           GetPString(IDS_INIOVERAPPNAMETEXT),
    139                           ((*inirec->app2) ? inirec->app2 : inirec->app),
    140                           inirec->filename1) !=
    141                    MBID_YES)
    142                   goto Abort;
    143               }
    144               if(PrfQueryProfileSize(hini2,
    145                                      (PSZ)inirec->app,
    146                                      NULL,
    147                                      (PULONG)&ulSize) &&
    148                  ulSize) {
    149                 pDataK = xmalloc(ulSize,pszSrcFile,__LINE__);   /* allocate space for keynames */
    150                 if (pDataK) {
    151                   /* get keynames */
    152                   if(PrfQueryProfileString(hini2,
    153                                            (PSZ)inirec->app,
    154                                            NULL,
    155                                            "\0",
    156                                            pDataK,
    157                                            ulSize)) {
    158                     pCurrentK = pDataK;
    159                     /* step through keynames */
    160                     while (*pCurrentK) {
    161                       if(PrfQueryProfileSize(hini2,inirec->app,
    162                                              pCurrentK,
    163                                              (PULONG)&ulSize) &&
    164                                              ulSize) {
    165                         pData = xmalloc(ulSize,pszSrcFile,__LINE__);
    166                         if (pData) {
    167                           /* get data */
    168                           if(PrfQueryProfileData(hini2,inirec->app,
    169                                                  pCurrentK,
    170                                                  pData,
    171                                                  (PULONG)&ulSize))
    172                             /* write data to new ini file */
    173                             PrfWriteProfileData(hini1,((*inirec->app2) ?
    174                                                 inirec->app2 : inirec->app),
    175                                                 pCurrentK,pData,
    176                                                 ulSize);
    177                           free(pData);  /* free data */
    178                         }
    179                       }
    180                       while(*pCurrentK) /* next keyname */
    181                         pCurrentK++;
    182                       pCurrentK++;
    183                     }
    184                   }
    185                   free(pDataK);  /* free keynames */
    186                 }
    187               }
    188             }
    189             else {
    190               if(inirec->confirm &&
    191                  PrfQueryProfileSize(hini1,(PSZ)((*inirec->app2) ?
    192                                      inirec->app2 : inirec->app),
    193                                      ((*inirec->key2) ?
    194                                      inirec->key2 : inirec->key),
    195                                      (PULONG)&ulSize) && ulSize) {
    196                 if(saymsg(MB_YESNOCANCEL,
    197                           HWND_DESKTOP,
    198                           GetPString(IDS_CONFIRMTEXT),
    199                           GetPString(IDS_INIOVERAPPKEYNAMETEXT),
    200                           ((*inirec->app2) ? inirec->app2 : inirec->app),
    201                           ((*inirec->key2) ? inirec->key2 : inirec->key),
    202                           inirec->filename1) !=
    203                    MBID_YES)
    204                   goto Abort;
    205               }
    206               if(PrfQueryProfileSize(hini2,inirec->app,
    207                                      inirec->key,
    208                                      (PULONG)&ulSize) &&
    209                                      ulSize) {
    210                 pData = xmalloc(ulSize,pszSrcFile,__LINE__);
    211                 if (pData) {
    212                   /* get data */
    213                   if(PrfQueryProfileData(hini2,inirec->app,
    214                                          inirec->key,
    215                                          pData,
    216                                          (PULONG)&ulSize))
    217                     /* write data to new ini file */
    218                     PrfWriteProfileData(hini1,((*inirec->app2) ?
    219                                         inirec->app2 : inirec->app),
    220                                         ((*inirec->key2) ?
    221                                         inirec->key2 : inirec->key),
    222                                         pData,ulSize);
    223                   free(pData);  /* free data */
    224                 }
    225               }
    226             }
    227             if(inirec->action == IDM_MOVE) {
    228               if(inirec->confirm &&
    229                  saymsg(MB_YESNOCANCEL,
    230                         HWND_DESKTOP,
    231                         GetPString(IDS_CONFIRMTEXT),
    232                         GetPString(IDS_INIDELETEMOVEDTEXT),
    233                         inirec->filename2) !=
    234                  MBID_YES)
    235                 goto Abort;
    236               PrfWriteProfileData(hini2,
    237                                   inirec->app,
    238                                   ((*inirec->key) ? inirec->key : NULL),
    239                                   NULL,
    240                                   0L);
    241             }
    242           }
    243         }
    244 Abort:
    245         if(hini1)
    246           PrfCloseProfile(hini1);
    247         if(hini2)
    248           PrfCloseProfile(hini2);
    249         WinDestroyMsgQueue(hmq2);
     102        *userini = *sysini = 0;
     103        memset(&cprfp, 0, sizeof(PRFPROFILE));
     104        cprfp.cchUserName = CCHMAXPATH;
     105        cprfp.cchSysName = CCHMAXPATH;
     106        cprfp.pszUserName = (PSZ) userini;
     107        cprfp.pszSysName = (PSZ) sysini;
     108        if (PrfQueryProfile(hab2, &cprfp)) {
     109          if (!stricmp(cprfp.pszUserName, inirec->filename1))
     110            hini1 = HINI_USERPROFILE;
     111          else if (!stricmp(cprfp.pszSysName, inirec->filename1))
     112            hini1 = HINI_SYSTEMPROFILE;
     113          if (!stricmp(cprfp.pszUserName, inirec->filename2))
     114            hini2 = HINI_USERPROFILE;
     115          else if (!stricmp(cprfp.pszSysName, inirec->filename2))
     116            hini2 = HINI_SYSTEMPROFILE;
     117        }
     118        if (!hini1)
     119          hini1 = PrfOpenProfile(hab2, inirec->filename1);
     120        if (!hini2) {
     121          if (!stricmp(inirec->filename1, inirec->filename2))
     122            hini2 = hini1;
     123          else
     124            hini2 = PrfOpenProfile(hab2, inirec->filename2);
     125        }
     126        if (hini1 && hini2 && (*inirec->app2 || hini1 != hini2)) {
     127
     128          PVOID pDataK, pData;
     129          PBYTE pCurrentK;
     130          ULONG ulSize = 0L;
     131
     132          if (inirec->action == IDM_MOVE || inirec->action == IDM_COPY) {
     133            if (!*inirec->key) {
     134              if (inirec->confirm &&
     135                  PrfQueryProfileSize(hini1, (PSZ) ((*inirec->app2) ?
     136                                                    inirec->app2 : inirec->
     137                                                    app), NULL,
     138                                      (PULONG) & ulSize) && ulSize) {
     139                if (saymsg
     140                    (MB_YESNOCANCEL, HWND_DESKTOP,
     141                     GetPString(IDS_CONFIRMTEXT),
     142                     GetPString(IDS_INIOVERAPPNAMETEXT),
     143                     ((*inirec->app2) ? inirec->app2 : inirec->app),
     144                     inirec->filename1) != MBID_YES)
     145                  goto Abort;
     146              }
     147              if (PrfQueryProfileSize(hini2,
     148                                      (PSZ) inirec->app,
     149                                      NULL, (PULONG) & ulSize) && ulSize) {
     150                pDataK = xmalloc(ulSize, pszSrcFile, __LINE__); /* allocate space for keynames */
     151                if (pDataK) {
     152                  /* get keynames */
     153                  if (PrfQueryProfileString(hini2,
     154                                            (PSZ) inirec->app,
     155                                            NULL, "\0", pDataK, ulSize)) {
     156                    pCurrentK = pDataK;
     157                    /* step through keynames */
     158                    while (*pCurrentK) {
     159                      if (PrfQueryProfileSize(hini2, inirec->app,
     160                                              pCurrentK,
     161                                              (PULONG) & ulSize) && ulSize) {
     162                        pData = xmalloc(ulSize, pszSrcFile, __LINE__);
     163                        if (pData) {
     164                          /* get data */
     165                          if (PrfQueryProfileData(hini2, inirec->app,
     166                                                  pCurrentK,
     167                                                  pData, (PULONG) & ulSize))
     168                            /* write data to new ini file */
     169                            PrfWriteProfileData(hini1, ((*inirec->app2) ?
     170                                                        inirec->
     171                                                        app2 : inirec->app),
     172                                                pCurrentK, pData, ulSize);
     173                          free(pData);  /* free data */
     174                        }
     175                      }
     176                      while (*pCurrentK)        /* next keyname */
     177                        pCurrentK++;
     178                      pCurrentK++;
     179                    }
     180                  }
     181                  free(pDataK);         /* free keynames */
     182                }
     183              }
     184            }
     185            else {
     186              if (inirec->confirm &&
     187                  PrfQueryProfileSize(hini1, (PSZ) ((*inirec->app2) ?
     188                                                    inirec->app2 : inirec->
     189                                                    app),
     190                                      ((*inirec->key2) ? inirec->
     191                                       key2 : inirec->key), (PULONG) & ulSize)
     192                  && ulSize) {
     193                if (saymsg
     194                    (MB_YESNOCANCEL, HWND_DESKTOP,
     195                     GetPString(IDS_CONFIRMTEXT),
     196                     GetPString(IDS_INIOVERAPPKEYNAMETEXT),
     197                     ((*inirec->app2) ? inirec->app2 : inirec->app),
     198                     ((*inirec->key2) ? inirec->key2 : inirec->key),
     199                     inirec->filename1) != MBID_YES)
     200                  goto Abort;
     201              }
     202              if (PrfQueryProfileSize(hini2, inirec->app,
     203                                      inirec->key,
     204                                      (PULONG) & ulSize) && ulSize) {
     205                pData = xmalloc(ulSize, pszSrcFile, __LINE__);
     206                if (pData) {
     207                  /* get data */
     208                  if (PrfQueryProfileData(hini2, inirec->app,
     209                                          inirec->key,
     210                                          pData, (PULONG) & ulSize))
     211                    /* write data to new ini file */
     212                    PrfWriteProfileData(hini1, ((*inirec->app2) ?
     213                                                inirec->app2 : inirec->app),
     214                                        ((*inirec->key2) ?
     215                                         inirec->key2 : inirec->key),
     216                                        pData, ulSize);
     217                  free(pData);          /* free data */
     218                }
     219              }
     220            }
     221            if (inirec->action == IDM_MOVE) {
     222              if (inirec->confirm &&
     223                  saymsg(MB_YESNOCANCEL,
     224                         HWND_DESKTOP,
     225                         GetPString(IDS_CONFIRMTEXT),
     226                         GetPString(IDS_INIDELETEMOVEDTEXT),
     227                         inirec->filename2) != MBID_YES)
     228                goto Abort;
     229              PrfWriteProfileData(hini2,
     230                                  inirec->app,
     231                                  ((*inirec->key) ? inirec->key : NULL),
     232                                  NULL, 0L);
     233            }
     234          }
     235        }
     236      Abort:
     237        if (hini1)
     238          PrfCloseProfile(hini1);
     239        if (hini2)
     240          PrfCloseProfile(hini2);
     241        WinDestroyMsgQueue(hmq2);
    250242      }
    251243      DecrThreadUsage();
    252244      WinTerminate(hab2);
    253245    }
    254     PostMsg(inirec->hwndDlg,WM_COMMAND,MPFROM2SHORT(INI_REFRESH,0),
    255                MPVOID);
    256     if(inirec->action == IDM_MOVE && inirec->hwndSource &&
    257        inirec->hwndSource != inirec->hwndDlg)
    258       PostMsg(inirec->hwndSource,WM_COMMAND,MPFROM2SHORT(INI_REFRESH,0),
    259                  MPVOID);
     246    PostMsg(inirec->hwndDlg, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0),
     247            MPVOID);
     248    if (inirec->action == IDM_MOVE && inirec->hwndSource &&
     249        inirec->hwndSource != inirec->hwndDlg)
     250      PostMsg(inirec->hwndSource, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0),
     251              MPVOID);
    260252    free(inirec);
    261253  }
    262254}
    263255
    264 
    265 static VOID CompareIniThread (VOID *args)
     256static VOID CompareIniThread(VOID * args)
    266257{
    267   INIREC     *inirec = (INIREC *)args;
    268   HAB         hab2;
    269   HMQ         hmq2;
    270 
    271   if(inirec) {
     258  INIREC *inirec = (INIREC *) args;
     259  HAB hab2;
     260  HMQ hmq2;
     261
     262  if (inirec) {
    272263    hab2 = WinInitialize(0);
    273     if(hab2) {
    274       hmq2 = WinCreateMsgQueue(hab2,0);
    275       if(hmq2) {
    276         WinCancelShutdown(hmq2,TRUE);
     264    if (hab2) {
     265      hmq2 = WinCreateMsgQueue(hab2, 0);
     266      if (hmq2) {
     267        WinCancelShutdown(hmq2, TRUE);
    277268        IncrThreadUsage();
    278269
    279270        // fixme to do something?
    280271
    281         WinDestroyMsgQueue(hmq2);
     272        WinDestroyMsgQueue(hmq2);
    282273      }
    283274      DecrThreadUsage();
     
    288279}
    289280
    290 
    291 static VOID BackupIniThread (VOID *args)
     281static VOID BackupIniThread(VOID * args)
    292282{
    293   PPRFPROFILE prfp = (PPRFPROFILE)args;
    294   HAB         hab2;
    295   HMQ         hmq2;
    296   HINI        orig = (HINI)0,new;
    297   PVOID       pDataA,pDataK,pData;
    298   PBYTE       pCurrentA,pCurrentK;
    299   ULONG       ulSize = 0L;
    300   PRFPROFILE  cprfp;
    301   CHAR        userini[CCHMAXPATH],sysini[CCHMAXPATH];
    302 
    303   if(prfp) {
     283  PPRFPROFILE prfp = (PPRFPROFILE) args;
     284  HAB hab2;
     285  HMQ hmq2;
     286  HINI orig = (HINI) 0, new;
     287  PVOID pDataA, pDataK, pData;
     288  PBYTE pCurrentA, pCurrentK;
     289  ULONG ulSize = 0L;
     290  PRFPROFILE cprfp;
     291  CHAR userini[CCHMAXPATH], sysini[CCHMAXPATH];
     292
     293  if (prfp) {
    304294    hab2 = WinInitialize(0);
    305     if(hab2) {
    306       hmq2 = WinCreateMsgQueue(hab2,0);
    307       if(hmq2) {
    308         WinCancelShutdown(hmq2,TRUE);
     295    if (hab2) {
     296      hmq2 = WinCreateMsgQueue(hab2, 0);
     297      if (hmq2) {
     298        WinCancelShutdown(hmq2, TRUE);
    309299        IncrThreadUsage();
    310         *userini = *sysini = 0;
    311         memset(&cprfp,0,sizeof(PRFPROFILE));
    312         cprfp.cchUserName = CCHMAXPATH;
    313         cprfp.cchSysName = CCHMAXPATH;
    314         cprfp.pszUserName = (PSZ)userini;
    315         cprfp.pszSysName = (PSZ)sysini;
    316         if(PrfQueryProfile(hab2,&cprfp)) {
    317           if(!stricmp(cprfp.pszUserName,prfp->pszUserName))
    318             orig = HINI_USERPROFILE;
    319           else if(!stricmp(cprfp.pszSysName,prfp->pszUserName))
    320             orig = HINI_SYSTEMPROFILE;
    321         }
    322         if(!orig)
    323           orig = PrfOpenProfile(hab2,prfp->pszUserName);
    324         if(orig) {
    325           new = PrfOpenProfile(hab2,prfp->pszSysName);
    326           if(new) {
    327             if(PrfQueryProfileSize(orig,NULL,NULL,(PULONG)&ulSize) && ulSize) {
    328               pDataA = xmalloc(ulSize,pszSrcFile,__LINE__);     /* allocate space for applnames */
    329               if (pDataA) {
    330                 /* get applnames */
    331                 if(PrfQueryProfileString(orig,NULL,NULL,"\0",pDataA,ulSize)) {
    332                   pCurrentA = pDataA;
    333                   /* step through applnames */
    334                   while (*pCurrentA) {
    335                     /* now keynames for this applname */
    336                     if (PrfQueryProfileSize(orig,(PSZ)pCurrentA,NULL,
    337                                             (PULONG)&ulSize) && ulSize) {
    338                       pDataK = xmalloc(ulSize,pszSrcFile,__LINE__);     /* allocate space for keynames */
    339                       if (pDataK) {
    340                         /* get keynames */
    341                         if(PrfQueryProfileString(orig,(PSZ)pCurrentA,NULL,
    342                                                  "\0",pDataK,ulSize)) {
    343                           pCurrentK = pDataK;
    344                           /* step through keynames */
    345                           while (*pCurrentK) {
    346                             if(PrfQueryProfileSize(orig,pCurrentA,
    347                                                    pCurrentK,
    348                                                    (PULONG)&ulSize) &&
    349                                                    ulSize) {
    350                               pData = xmalloc(ulSize,pszSrcFile,__LINE__);
    351                               if (pData) {
    352                                 /* get data */
    353                                 if(PrfQueryProfileData(orig,pCurrentA,
    354                                                        pCurrentK,
    355                                                        pData,
    356                                                        (PULONG)&ulSize))
    357                                   /* write data to new ini file */
    358                                   PrfWriteProfileData(new,pCurrentA,
    359                                                       pCurrentK,pData,
    360                                                       ulSize);
    361                                 free(pData);  /* free data */
    362                               }
    363                             }
    364                             while(*pCurrentK) /* next keyname */
    365                               pCurrentK++;
    366                             pCurrentK++;
    367                           }
    368                         }
    369                         free(pDataK);  /* free keynames */
    370                       }
    371                     }
    372                     while(*pCurrentA) /* next applname */
    373                       pCurrentA++;
    374                     pCurrentA++;
    375                   }
    376                 }
    377                 free(pDataA); /* free applnames */
    378               }
    379             }
    380             PrfCloseProfile(new);
    381           }
    382           PrfCloseProfile(orig);
    383         }
    384         WinDestroyMsgQueue(hmq2);
     300        *userini = *sysini = 0;
     301        memset(&cprfp, 0, sizeof(PRFPROFILE));
     302        cprfp.cchUserName = CCHMAXPATH;
     303        cprfp.cchSysName = CCHMAXPATH;
     304        cprfp.pszUserName = (PSZ) userini;
     305        cprfp.pszSysName = (PSZ) sysini;
     306        if (PrfQueryProfile(hab2, &cprfp)) {
     307          if (!stricmp(cprfp.pszUserName, prfp->pszUserName))
     308            orig = HINI_USERPROFILE;
     309          else if (!stricmp(cprfp.pszSysName, prfp->pszUserName))
     310            orig = HINI_SYSTEMPROFILE;
     311        }
     312        if (!orig)
     313          orig = PrfOpenProfile(hab2, prfp->pszUserName);
     314        if (orig) {
     315          new = PrfOpenProfile(hab2, prfp->pszSysName);
     316          if (new) {
     317            if (PrfQueryProfileSize(orig, NULL, NULL, (PULONG) & ulSize)
     318                && ulSize) {
     319              pDataA = xmalloc(ulSize, pszSrcFile, __LINE__);   /* allocate space for applnames */
     320              if (pDataA) {
     321                /* get applnames */
     322                if (PrfQueryProfileString
     323                    (orig, NULL, NULL, "\0", pDataA, ulSize)) {
     324                  pCurrentA = pDataA;
     325                  /* step through applnames */
     326                  while (*pCurrentA) {
     327                    /* now keynames for this applname */
     328                    if (PrfQueryProfileSize(orig, (PSZ) pCurrentA, NULL,
     329                                            (PULONG) & ulSize) && ulSize) {
     330                      pDataK = xmalloc(ulSize, pszSrcFile, __LINE__);   /* allocate space for keynames */
     331                      if (pDataK) {
     332                        /* get keynames */
     333                        if (PrfQueryProfileString(orig, (PSZ) pCurrentA, NULL,
     334                                                  "\0", pDataK, ulSize)) {
     335                          pCurrentK = pDataK;
     336                          /* step through keynames */
     337                          while (*pCurrentK) {
     338                            if (PrfQueryProfileSize(orig, pCurrentA,
     339                                                    pCurrentK,
     340                                                    (PULONG) & ulSize) &&
     341                                ulSize) {
     342                              pData = xmalloc(ulSize, pszSrcFile, __LINE__);
     343                              if (pData) {
     344                                /* get data */
     345                                if (PrfQueryProfileData(orig, pCurrentA,
     346                                                        pCurrentK,
     347                                                        pData,
     348                                                        (PULONG) & ulSize))
     349                                  /* write data to new ini file */
     350                                  PrfWriteProfileData(new, pCurrentA,
     351                                                      pCurrentK, pData,
     352                                                      ulSize);
     353                                free(pData);    /* free data */
     354                              }
     355                            }
     356                            while (*pCurrentK)  /* next keyname */
     357                              pCurrentK++;
     358                            pCurrentK++;
     359                          }
     360                        }
     361                        free(pDataK);   /* free keynames */
     362                      }
     363                    }
     364                    while (*pCurrentA)  /* next applname */
     365                      pCurrentA++;
     366                    pCurrentA++;
     367                  }
     368                }
     369                free(pDataA);           /* free applnames */
     370              }
     371            }
     372            PrfCloseProfile(new);
     373          }
     374          PrfCloseProfile(orig);
     375        }
     376        WinDestroyMsgQueue(hmq2);
    385377      }
    386378      DecrThreadUsage();
     
    393385}
    394386
    395 
    396 static VOID EnumAppNames (HWND hwndList,HINI hini)
     387static VOID EnumAppNames(HWND hwndList, HINI hini)
    397388{
    398389  PVOID pData;
     
    400391  ULONG ulSize = 0L;
    401392
    402   WinSendMsg(hwndList,LM_DELETEALL,NULL,NULL);
    403   if (!PrfQueryProfileSize(hini,NULL,NULL,(PULONG)&ulSize))
    404     Win_Error(HWND_DESKTOP,HWND_DESKTOP,pszSrcFile,__LINE__,"PrfQueryProfileSize");
     393  WinSendMsg(hwndList, LM_DELETEALL, NULL, NULL);
     394  if (!PrfQueryProfileSize(hini, NULL, NULL, (PULONG) & ulSize))
     395    Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     396              "PrfQueryProfileSize");
    405397  else if (!ulSize)
    406398    Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
    407399  else {
    408     pData = xmalloc(ulSize,pszSrcFile,__LINE__);
     400    pData = xmalloc(ulSize, pszSrcFile, __LINE__);
    409401    if (pData) {
    410       if (PrfQueryProfileString(hini,NULL,NULL,"\0",pData,ulSize)) {
    411         pCurrent = pData;
    412         WinEnableWindowUpdate(hwndList,FALSE);
    413         while (*pCurrent) {
    414           WinSendMsg(hwndList,LM_INSERTITEM,MPFROMSHORT(LIT_SORTASCENDING),
    415                       MPFROMP(pCurrent));
    416           while(*pCurrent)
    417             pCurrent++;
    418           pCurrent++;
    419         }
    420         WinSendMsg(hwndList,LM_SELECTITEM,MPFROMSHORT(0),MPFROMSHORT(TRUE));
    421         WinEnableWindowUpdate(hwndList,TRUE);
     402      if (PrfQueryProfileString(hini, NULL, NULL, "\0", pData, ulSize)) {
     403        pCurrent = pData;
     404        WinEnableWindowUpdate(hwndList, FALSE);
     405        while (*pCurrent) {
     406          WinSendMsg(hwndList, LM_INSERTITEM, MPFROMSHORT(LIT_SORTASCENDING),
     407                     MPFROMP(pCurrent));
     408          while (*pCurrent)
     409            pCurrent++;
     410          pCurrent++;
     411        }
     412        WinSendMsg(hwndList, LM_SELECTITEM, MPFROMSHORT(0),
     413                   MPFROMSHORT(TRUE));
     414        WinEnableWindowUpdate(hwndList, TRUE);
    422415      }
    423416      free(pData);
     
    426419}
    427420
    428 
    429 static CHAR * GetKeyData (HWND hwndList,HINI hini,PSZ pAppName,
    430                           PSZ pKeyName,PULONG datalen)
     421static CHAR *GetKeyData(HWND hwndList, HINI hini, PSZ pAppName,
     422                        PSZ pKeyName, PULONG datalen)
    431423{
    432424  ULONG ulKeySize = 0L;
     
    434426
    435427  *datalen = 0L;
    436   if(!PrfQueryProfileSize(hini,pAppName,pKeyName,(PULONG)&ulKeySize))
    437     Win_Error(HWND_DESKTOP,HWND_DESKTOP,pszSrcFile,__LINE__,"PrfQueryProfileSize");
     428  if (!PrfQueryProfileSize(hini, pAppName, pKeyName, (PULONG) & ulKeySize))
     429    Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     430              "PrfQueryProfileSize");
    438431  else {
    439     pKeyData = xmalloc(ulKeySize + 1L,pszSrcFile,__LINE__);
     432    pKeyData = xmalloc(ulKeySize + 1L, pszSrcFile, __LINE__);
    440433    if (pKeyData) {
    441       if (!PrfQueryProfileData(hini,pAppName,pKeyName,pKeyData,(PULONG)&ulKeySize))
    442         Win_Error(HWND_DESKTOP,HWND_DESKTOP,pszSrcFile,__LINE__,"PrfQueryProfileData");
     434      if (!PrfQueryProfileData
     435          (hini, pAppName, pKeyName, pKeyData, (PULONG) & ulKeySize))
     436        Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     437                  "PrfQueryProfileData");
    443438      else {
    444         HexDump(hwndList,pKeyData,ulKeySize);
    445         {
    446           CHAR s[81];
    447 
    448           sprintf(s,
    449                   GetPString(IDS_INIBYTESTEXT),
    450                   ulKeySize,
    451                   &"s"[ulKeySize == 1]);
    452           WinSetDlgItemText(WinQueryWindow(hwndList,QW_PARENT),
    453                             INI_NUMDATA,
    454                             s);
    455         }
    456         *datalen = ulKeySize;
    457         return (CHAR *)pKeyData;
     439        HexDump(hwndList, pKeyData, ulKeySize);
     440        {
     441          CHAR s[81];
     442
     443          sprintf(s,
     444                  GetPString(IDS_INIBYTESTEXT),
     445                  ulKeySize, &"s"[ulKeySize == 1]);
     446          WinSetDlgItemText(WinQueryWindow(hwndList, QW_PARENT),
     447                            INI_NUMDATA, s);
     448        }
     449        *datalen = ulKeySize;
     450        return (CHAR *) pKeyData;
    458451      }
    459452    }
     
    462455}
    463456
    464 
    465 static BOOL EnumKeyNames (HWND hwndList,HINI hini,PSZ pAppName)
     457static BOOL EnumKeyNames(HWND hwndList, HINI hini, PSZ pAppName)
    466458{
    467459  PVOID pData;
     
    469461  ULONG ulSize = 0L;
    470462
    471   WinSendMsg(hwndList,LM_DELETEALL,NULL,NULL);
    472   if(!PrfQueryProfileSize(hini,pAppName,NULL,(PULONG)&ulSize))
    473     Win_Error(HWND_DESKTOP,HWND_DESKTOP,pszSrcFile,__LINE__,"PrfQueryProfileSize");
     463  WinSendMsg(hwndList, LM_DELETEALL, NULL, NULL);
     464  if (!PrfQueryProfileSize(hini, pAppName, NULL, (PULONG) & ulSize))
     465    Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     466              "PrfQueryProfileSize");
    474467  else {
    475468    if (!ulSize)
    476469      Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
    477     pData = xmalloc(ulSize + 1L,pszSrcFile,__LINE__);
     470    pData = xmalloc(ulSize + 1L, pszSrcFile, __LINE__);
    478471    if (pData) {
    479       if(!PrfQueryProfileString(hini,pAppName,NULL,"\0",pData,ulSize))
    480       {
    481         Win_Error(HWND_DESKTOP,HWND_DESKTOP,pszSrcFile,__LINE__,"PrfQueryProfileString");
    482         free(pData);
     472      if (!PrfQueryProfileString(hini, pAppName, NULL, "\0", pData, ulSize)) {
     473        Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     474                  "PrfQueryProfileString");
     475        free(pData);
    483476      }
    484477      else {
    485         pCurrent = pData;
    486         WinEnableWindowUpdate(hwndList,FALSE);
    487         while (*pCurrent) {
    488           WinSendMsg(hwndList,LM_INSERTITEM,MPFROMSHORT(LIT_SORTASCENDING),
    489                      MPFROMP(pCurrent));
    490           while(*pCurrent)
    491             pCurrent++;
    492           pCurrent++;
    493         }
    494         WinSendMsg(hwndList,LM_SELECTITEM,MPFROMSHORT(0),MPFROMSHORT(TRUE));
    495         WinEnableWindowUpdate(hwndList,TRUE);
    496         return TRUE;
     478        pCurrent = pData;
     479        WinEnableWindowUpdate(hwndList, FALSE);
     480        while (*pCurrent) {
     481          WinSendMsg(hwndList, LM_INSERTITEM, MPFROMSHORT(LIT_SORTASCENDING),
     482                     MPFROMP(pCurrent));
     483          while (*pCurrent)
     484            pCurrent++;
     485          pCurrent++;
     486        }
     487        WinSendMsg(hwndList, LM_SELECTITEM, MPFROMSHORT(0),
     488                   MPFROMSHORT(TRUE));
     489        WinEnableWindowUpdate(hwndList, TRUE);
     490        return TRUE;
    497491      }
    498492    }
     
    501495}
    502496
    503 
    504497#define hwndMLE WinWindowFromID(hwnd,IAF_MLE)
    505498
    506 MRESULT EXPENTRY FilterIniProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
     499MRESULT EXPENTRY FilterIniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
    507500{
    508   INIDATA    *inidata;
     501  INIDATA *inidata;
    509502  static CHAR lasttext[8192] = "";
    510503
    511   switch(msg) {
    512     case WM_INITDLG:
    513       WinSetWindowPtr(hwnd,0,mp2);
    514       inidata = (INIDATA *)mp2;
    515       WinSendDlgItemMsg(hwnd,IAF_SAVENAME,EM_SETTEXTLIMIT,
    516                         MPFROM2SHORT(CCHMAXPATH,0),MPVOID);
    517       MLEsetformat(hwndMLE,MLFIE_NOTRANS);
    518       MLEsetlimit(hwndMLE,8192);
    519       WinSetWindowText(hwndMLE,lasttext);
     504  switch (msg) {
     505  case WM_INITDLG:
     506    WinSetWindowPtr(hwnd, 0, mp2);
     507    inidata = (INIDATA *) mp2;
     508    WinSendDlgItemMsg(hwnd, IAF_SAVENAME, EM_SETTEXTLIMIT,
     509                      MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
     510    MLEsetformat(hwndMLE, MLFIE_NOTRANS);
     511    MLEsetlimit(hwndMLE, 8192);
     512    WinSetWindowText(hwndMLE, lasttext);
     513    {
     514      FILEFINDBUF3 ffb;
     515      ULONG nm;
     516      HDIR hdir;
     517
     518      hdir = HDIR_CREATE;
     519      nm = 1L;
     520      DosError(FERR_DISABLEHARDERR);
     521      if (!DosFindFirst("*.IST",
     522                        &hdir,
     523                        FILE_NORMAL | FILE_ARCHIVED,
     524                        &ffb, sizeof(ffb), &nm, FIL_STANDARD)) {
     525        do {
     526          priority_bumped();
     527          WinSendDlgItemMsg(hwnd, IAF_LISTBOX, LM_INSERTITEM,
     528                            MPFROMSHORT(LIT_SORTASCENDING),
     529                            MPFROMP(ffb.achName));
     530          nm = 1L;
     531        } while (!DosFindNext(hdir, &ffb, sizeof(ffb), &nm));
     532        DosFindClose(hdir);
     533        priority_bumped();
     534      }
     535    }
     536    break;
     537
     538  case WM_ADJUSTWINDOWPOS:
     539    PostMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
     540    break;
     541
     542  case UM_SETDIR:
     543    PaintRecessedWindow(WinWindowFromID(hwnd, IAF_HELP), (HPS) 0, FALSE,
     544                        TRUE);
     545    PaintRecessedWindow(WinWindowFromID(hwnd, IAF_SAVENAME), (HPS) 0, FALSE,
     546                        FALSE);
     547    PaintRecessedWindow(WinWindowFromID(hwnd, IAF_LISTBOX), (HPS) 0, FALSE,
     548                        FALSE);
     549    PaintRecessedWindow(WinWindowFromID(hwnd, IAF_MLE), (HPS) 0, FALSE,
     550                        FALSE);
     551    return 0;
     552
     553  case WM_CONTROL:
     554    switch (SHORT1FROMMP(mp1)) {
     555    case IAF_SAVENAME:
     556      if (SHORT2FROMMP(mp1) == EN_KILLFOCUS)
     557        WinSetDlgItemText(hwnd, IAF_HELP, NullStr);
     558      if (SHORT2FROMMP(mp1) == EN_SETFOCUS)
     559        WinSetDlgItemText(hwnd,
     560                          IAF_HELP, GetPString(IDS_MASKLISTNAMEHELPTEXT));
     561      break;
     562
     563    case IAF_LISTBOX:
     564      if (SHORT2FROMMP(mp1) == LN_KILLFOCUS)
     565        WinSetDlgItemText(hwnd, IAF_HELP, NullStr);
     566      if (SHORT2FROMMP(mp1) == LN_SETFOCUS)
     567        WinSetDlgItemText(hwnd,
     568                          IAF_HELP, GetPString(IDS_MASKLISTFILESHELPTEXT));
     569      else if (SHORT2FROMMP(mp1) == LN_ENTER)
     570        PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(IAF_LOAD, 0), MPVOID);
     571      break;
     572
     573    case IAF_MLE:
     574      if (SHORT2FROMMP(mp1) == MLN_KILLFOCUS)
     575        WinSetDlgItemText(hwnd, IAF_HELP, NullStr);
     576      if (SHORT2FROMMP(mp1) == MLN_SETFOCUS)
     577        WinSetDlgItemText(hwnd,
     578                          IAF_HELP, GetPString(IDS_MASKLISTMASKSHELPTEXT));
     579      break;
     580    }
     581    return 0;
     582
     583  case WM_COMMAND:
     584    switch (SHORT1FROMMP(mp1)) {
     585    case DID_OK:
     586      inidata = INSTDATA(hwnd);
     587      if (inidata) {
     588
     589        CHAR s[8193], app[1024];
     590        register CHAR *p;
     591        SHORT sSelect, numitems;
     592        BOOL match;
     593
     594        *s = 0;
     595        WinQueryWindowText(hwndMLE, 8192, s);
     596        if (!*s) {
     597          DosBeep(250, 100);
     598          break;
     599        }
     600        else {
     601          strcpy(lasttext, s);
     602          p = s;
     603          while (*p) {
     604            if (*p == '\r') {
     605              memmove(p, p + 1, strlen(p));
     606              continue;
     607            }
     608            if (*p == '\n')
     609              *p = 0;
     610            p++;
     611          }
     612          p++;
     613          *p = 0;
     614        }
     615        numitems = (SHORT) WinSendMsg(inidata->hwndApp,
     616                                      LM_QUERYITEMCOUNT, MPVOID, MPVOID);
     617        if (!numitems) {
     618          DosBeep(250, 100);
     619          break;
     620        }
     621        else {
     622          WinSetPointer(HWND_DESKTOP, hptrBusy);
     623          WinSetDlgItemText(hwnd, IAF_HELP, GetPString(IDS_FILTERINGTEXT));
     624          sSelect = 0;
     625          while (numitems) {
     626            *app = 0;
     627            WinSendMsg(inidata->hwndApp,
     628                       LM_QUERYITEMTEXT,
     629                       MPFROM2SHORT(sSelect, 1024), MPFROMP(app));
     630            match = FALSE;
     631            if (*app) {
     632              p = s;
     633              while (*p) {
     634                if (*p != '/') {
     635                  if (wildcard(app, p, TRUE))
     636                    match = TRUE;
     637                }
     638                else if (wildcard(app, p + 1, TRUE)) {
     639                  match = FALSE;
     640                  break;
     641                }
     642                while (*p)
     643                  p++;
     644                p++;
     645              }
     646            }
     647            if (!match)
     648              WinSendMsg(inidata->hwndApp, LM_DELETEITEM,
     649                         MPFROMSHORT(sSelect), MPVOID);
     650            else
     651              sSelect++;
     652            numitems--;
     653          }
     654          WinSetPointer(HWND_DESKTOP, hptrArrow);
     655        }
     656      }
     657      WinDismissDlg(hwnd, 1);
     658      break;
     659
     660    case IAF_LOAD:
    520661      {
    521         FILEFINDBUF3 ffb;
    522         ULONG        nm;
    523         HDIR         hdir;
    524 
    525         hdir = HDIR_CREATE;
    526         nm = 1L;
    527         DosError(FERR_DISABLEHARDERR);
    528         if(!DosFindFirst("*.IST",
    529                          &hdir,
    530                          FILE_NORMAL | FILE_ARCHIVED,
    531                          &ffb,
    532                          sizeof(ffb),
    533                          &nm,
    534                          FIL_STANDARD)) {
    535           do {
    536             priority_bumped();
    537             WinSendDlgItemMsg(hwnd,IAF_LISTBOX,LM_INSERTITEM,
    538                               MPFROMSHORT(LIT_SORTASCENDING),
    539                               MPFROMP(ffb.achName));
    540             nm = 1L;
    541           } while(!DosFindNext(hdir,&ffb,sizeof(ffb),&nm));
    542           DosFindClose(hdir);
    543           priority_bumped();
    544         }
    545       }
    546       break;
    547 
    548     case WM_ADJUSTWINDOWPOS:
    549       PostMsg(hwnd,UM_SETDIR,MPVOID,MPVOID);
    550       break;
    551 
    552     case UM_SETDIR:
    553       PaintRecessedWindow(WinWindowFromID(hwnd,IAF_HELP),(HPS)0,FALSE,TRUE);
    554       PaintRecessedWindow(WinWindowFromID(hwnd,IAF_SAVENAME),(HPS)0,FALSE,FALSE);
    555       PaintRecessedWindow(WinWindowFromID(hwnd,IAF_LISTBOX),(HPS)0,FALSE,FALSE);
    556       PaintRecessedWindow(WinWindowFromID(hwnd,IAF_MLE),(HPS)0,FALSE,FALSE);
    557       return 0;
    558 
    559     case WM_CONTROL:
    560       switch(SHORT1FROMMP(mp1)) {
    561         case IAF_SAVENAME:
    562           if(SHORT2FROMMP(mp1) == EN_KILLFOCUS)
    563             WinSetDlgItemText(hwnd,
    564                               IAF_HELP,
    565                               NullStr);
    566           if(SHORT2FROMMP(mp1) == EN_SETFOCUS)
    567             WinSetDlgItemText(hwnd,
    568                               IAF_HELP,
    569                               GetPString(IDS_MASKLISTNAMEHELPTEXT));
    570           break;
    571 
    572         case IAF_LISTBOX:
    573           if(SHORT2FROMMP(mp1) == LN_KILLFOCUS)
    574             WinSetDlgItemText(hwnd,
    575                               IAF_HELP,
    576                               NullStr);
    577           if(SHORT2FROMMP(mp1) == LN_SETFOCUS)
    578             WinSetDlgItemText(hwnd,
    579                               IAF_HELP,
    580                               GetPString(IDS_MASKLISTFILESHELPTEXT));
    581           else if(SHORT2FROMMP(mp1) == LN_ENTER)
    582             PostMsg(hwnd,
    583                     WM_COMMAND,
    584                     MPFROM2SHORT(IAF_LOAD,0),
    585                     MPVOID);
    586           break;
    587 
    588         case IAF_MLE:
    589           if(SHORT2FROMMP(mp1) == MLN_KILLFOCUS)
    590             WinSetDlgItemText(hwnd,
    591                               IAF_HELP,
    592                               NullStr);
    593           if(SHORT2FROMMP(mp1) == MLN_SETFOCUS)
    594             WinSetDlgItemText(hwnd,
    595                               IAF_HELP,
    596                               GetPString(IDS_MASKLISTMASKSHELPTEXT));
    597           break;
    598       }
    599       return 0;
    600 
    601     case WM_COMMAND:
    602       switch(SHORT1FROMMP(mp1)) {
    603         case DID_OK:
    604           inidata = INSTDATA(hwnd);
    605           if(inidata) {
    606 
    607             CHAR           s[8193],app[1024];
    608             register CHAR *p;
    609             SHORT          sSelect,numitems;
    610             BOOL           match;
    611 
    612             *s = 0;
    613             WinQueryWindowText(hwndMLE,8192,s);
    614             if (!*s) {
    615               DosBeep(250,100);
    616               break;
     662        CHAR s[8193];
     663        FILE *fp;
     664        INT len;
     665        SHORT sSelect;
     666
     667        sSelect = (SHORT) WinSendDlgItemMsg(hwnd, IAF_LISTBOX,
     668                                            LM_QUERYSELECTION,
     669                                            MPFROM2SHORT(LIT_FIRST, 0),
     670                                            MPVOID);
     671        if (sSelect < 0)
     672          Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     673        else {
     674          *s = 0;
     675          WinSendDlgItemMsg(hwnd, IAF_LISTBOX, LM_QUERYITEMTEXT,
     676                            MPFROM2SHORT(sSelect, CCHMAXPATH), MPFROMP(s));
     677          bstrip(s);
     678          if (*s) {
     679            fp = _fsopen(s, "r", SH_DENYWR);
     680            if (fp) {
     681              len = fread(s, 1, 8192, fp);
     682              s[len] = 0;
     683              WinSetWindowText(hwndMLE, s);
     684              fclose(fp);
    617685            }
    618             else {
    619               strcpy(lasttext,s);
    620               p = s;
    621               while(*p) {
    622                 if(*p == '\r') {
    623                   memmove(p,p + 1,strlen(p));
    624                   continue;
    625                 }
    626                 if(*p == '\n')
    627                   *p = 0;
    628                 p++;
    629               }
    630               p++;
    631               *p = 0;
    632             }
    633             numitems = (SHORT)WinSendMsg(inidata->hwndApp,
    634                                          LM_QUERYITEMCOUNT,
    635                                          MPVOID,
    636                                          MPVOID);
    637             if(!numitems) {
    638               DosBeep(250,100);
    639               break;
     686          }
     687        }
     688      }
     689      break;
     690
     691    case IAF_SAVE:
     692      {
     693        CHAR s[8193], filename[CCHMAXPATH], *p;
     694        FILE *fp;
     695
     696        *filename = 0;
     697        WinQueryDlgItemText(hwnd, IAF_SAVENAME, CCHMAXPATH, filename);
     698        bstrip(filename);
     699        if (*filename) {
     700          p = strchr(filename, '.');
     701          if (p) {
     702            strcpy(p, ".IST");
     703            WinSetDlgItemText(hwnd, IAF_SAVENAME, filename);
     704          }
     705          *s = 0;
     706          WinQueryWindowText(hwndMLE, 8192, s);
     707          if (!*s)
     708            Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     709          else {
     710            fp = xfopen(filename, "w", pszSrcFile, __LINE__);
     711            if (fp) {
     712              fwrite(s, 1, strlen(s), fp);
     713              fclose(fp);
     714              WinSendDlgItemMsg(hwnd,
     715                                IAF_LISTBOX,
     716                                LM_INSERTITEM,
     717                                MPFROMSHORT(LIT_SORTASCENDING),
     718                                MPFROMP(filename));
    640719            }
    641             else {
    642               WinSetPointer(HWND_DESKTOP,hptrBusy);
    643               WinSetDlgItemText(hwnd,
    644                                 IAF_HELP,
    645                                 GetPString(IDS_FILTERINGTEXT));
    646               sSelect = 0;
    647               while(numitems) {
    648                 *app = 0;
    649                 WinSendMsg(inidata->hwndApp,
    650                            LM_QUERYITEMTEXT,
    651                            MPFROM2SHORT(sSelect,1024),
    652                            MPFROMP(app));
    653                 match = FALSE;
    654                 if(*app) {
    655                   p = s;
    656                   while(*p) {
    657                     if(*p != '/') {
    658                       if(wildcard(app,p,TRUE))
    659                         match = TRUE;
    660                     }
    661                     else if(wildcard(app,p + 1,TRUE)) {
    662                       match = FALSE;
    663                       break;
    664                     }
    665                     while(*p)
    666                       p++;
    667                     p++;
    668                   }
    669                 }
    670                 if(!match)
    671                   WinSendMsg(inidata->hwndApp,LM_DELETEITEM,
    672                              MPFROMSHORT(sSelect),MPVOID);
    673                 else
    674                   sSelect++;
    675                 numitems--;
    676               }
    677               WinSetPointer(HWND_DESKTOP,hptrArrow);
    678             }
    679           }
    680           WinDismissDlg(hwnd,1);
    681           break;
    682 
    683         case IAF_LOAD:
    684           {
    685             CHAR  s[8193];
    686             FILE *fp;
    687             INT   len;
    688             SHORT sSelect;
    689 
    690             sSelect = (SHORT)WinSendDlgItemMsg(hwnd,IAF_LISTBOX,
    691                                                LM_QUERYSELECTION,
    692                                                MPFROM2SHORT(LIT_FIRST,0),
    693                                                MPVOID);
    694             if (sSelect < 0)
    695               Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
    696             else {
    697               *s = 0;
    698               WinSendDlgItemMsg(hwnd,IAF_LISTBOX,LM_QUERYITEMTEXT,
    699                                 MPFROM2SHORT(sSelect,CCHMAXPATH),
    700                                 MPFROMP(s));
    701               bstrip(s);
    702               if(*s) {
    703                 fp = _fsopen(s,"r",SH_DENYWR);
    704                 if (fp) {
    705                   len = fread(s,1,8192,fp);
    706                   s[len] = 0;
    707                   WinSetWindowText(hwndMLE,s);
    708                   fclose(fp);
    709                 }
    710               }
    711             }
    712           }
    713           break;
    714 
    715         case IAF_SAVE:
    716           {
    717             CHAR  s[8193],filename[CCHMAXPATH],*p;
    718             FILE *fp;
    719 
    720             *filename = 0;
    721             WinQueryDlgItemText(hwnd,
    722                                 IAF_SAVENAME,
    723                                 CCHMAXPATH,
    724                                 filename);
    725             bstrip(filename);
    726             if(*filename) {
    727               p = strchr(filename,'.');
    728               if (p) {
    729                 strcpy(p,".IST");
    730                 WinSetDlgItemText(hwnd,
    731                                   IAF_SAVENAME,
    732                                   filename);
    733               }
    734               *s = 0;
    735               WinQueryWindowText(hwndMLE,8192,s);
    736               if (!*s)
    737                 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
    738               else {
    739                 fp = xfopen(filename,"w",pszSrcFile,__LINE__);
    740                 if (fp) {
    741                   fwrite(s,1,strlen(s),fp);
    742                   fclose(fp);
    743                   WinSendDlgItemMsg(hwnd,
    744                                     IAF_LISTBOX,
    745                                     LM_INSERTITEM,
    746                                     MPFROMSHORT(LIT_SORTASCENDING),
    747                                     MPFROMP(filename));
    748                 }
    749               }
    750             }
    751           }
    752           break;
    753 
    754         case IAF_DELETE:
    755           {
    756             CHAR  s[CCHMAXPATH];
    757             SHORT sSelect;
    758 
    759             sSelect = (SHORT)WinSendDlgItemMsg(hwnd,IAF_LISTBOX,
    760                                                LM_QUERYSELECTION,
    761                                                MPFROM2SHORT(LIT_FIRST,0),
    762                                                MPVOID);
    763             if(sSelect >= 0) {
    764               *s = 0;
    765               WinSendDlgItemMsg(hwnd,IAF_LISTBOX,LM_QUERYITEMTEXT,
    766                                 MPFROM2SHORT(sSelect,CCHMAXPATH),
    767                                 MPFROMP(s));
    768               bstrip(s);
    769               if(*s) {
    770                 unlinkf(s);
    771                 WinSendDlgItemMsg(hwnd,IAF_LISTBOX,LM_DELETEITEM,
    772                                   MPFROMSHORT(sSelect),MPVOID);
    773               }
    774             }
    775           }
    776           break;
    777 
    778         case DID_CANCEL:
    779           WinDismissDlg(hwnd,0);
    780           break;
    781 
    782         case IDM_HELP:
    783           if(hwndHelp)
    784             WinSendMsg(hwndHelp,HM_DISPLAY_HELP,
    785                        MPFROM2SHORT(HELP_FILTERINI,0),
    786                        MPFROMSHORT(HM_RESOURCEID));
    787           break;
    788       }
    789       return 0;
     720          }
     721        }
     722      }
     723      break;
     724
     725    case IAF_DELETE:
     726      {
     727        CHAR s[CCHMAXPATH];
     728        SHORT sSelect;
     729
     730        sSelect = (SHORT) WinSendDlgItemMsg(hwnd, IAF_LISTBOX,
     731                                            LM_QUERYSELECTION,
     732                                            MPFROM2SHORT(LIT_FIRST, 0),
     733                                            MPVOID);
     734        if (sSelect >= 0) {
     735          *s = 0;
     736          WinSendDlgItemMsg(hwnd, IAF_LISTBOX, LM_QUERYITEMTEXT,
     737                            MPFROM2SHORT(sSelect, CCHMAXPATH), MPFROMP(s));
     738          bstrip(s);
     739          if (*s) {
     740            unlinkf(s);
     741            WinSendDlgItemMsg(hwnd, IAF_LISTBOX, LM_DELETEITEM,
     742                              MPFROMSHORT(sSelect), MPVOID);
     743          }
     744        }
     745      }
     746      break;
     747
     748    case DID_CANCEL:
     749      WinDismissDlg(hwnd, 0);
     750      break;
     751
     752    case IDM_HELP:
     753      if (hwndHelp)
     754        WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
     755                   MPFROM2SHORT(HELP_FILTERINI, 0),
     756                   MPFROMSHORT(HM_RESOURCEID));
     757      break;
     758    }
     759    return 0;
    790760  }
    791   return WinDefDlgProc(hwnd,msg,mp1,mp2);
     761  return WinDefDlgProc(hwnd, msg, mp1, mp2);
    792762}
    793763
    794 
    795 MRESULT EXPENTRY IntraIniProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
     764MRESULT EXPENTRY IntraIniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
    796765{
    797766  INIREC *inirec;
    798767
    799   switch(msg) {
    800     case WM_INITDLG:
    801       WinSetWindowPtr(hwnd,0,mp2);
    802       inirec = (INIREC *)mp2;
     768  switch (msg) {
     769  case WM_INITDLG:
     770    WinSetWindowPtr(hwnd, 0, mp2);
     771    inirec = (INIREC *) mp2;
     772    WinSendDlgItemMsg(hwnd,
     773                      INII_NEWAPP,
     774                      EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
     775    WinSendDlgItemMsg(hwnd,
     776                      INII_NEWKEY,
     777                      EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
     778    {
     779      CHAR s[CCHMAXPATH + 34];
     780
     781      sprintf(s, GetPString(IDS_INIWASTEXT), inirec->app);
     782      WinSetDlgItemText(hwnd, INII_OLDAPP, s);
     783    }
     784    if (!*inirec->key) {
     785      WinEnableWindow(WinWindowFromID(hwnd, INII_NEWKEY), FALSE);
     786      WinEnableWindow(WinWindowFromID(hwnd, INII_NEWKEYHDR), FALSE);
     787      switch (inirec->action) {
     788      case IDM_MOVE:
     789        WinSetWindowText(hwnd, GetPString(IDS_INIRENAMEAPPTITLETEXT));
     790        break;
     791      case IDM_COPY:
     792        WinSetWindowText(hwnd, GetPString(IDS_INICOPYAPPTITLETEXT));
     793        break;
     794      }
     795    }
     796    else {
     797      {
     798        CHAR s[CCHMAXPATH + 34];
     799
     800        sprintf(s, GetPString(IDS_INIWASTEXT), inirec->key);
     801        WinSetDlgItemText(hwnd, INII_OLDKEY, s);
     802      }
     803      WinSetDlgItemText(hwnd, INII_NEWAPP, inirec->app);
    803804      WinSendDlgItemMsg(hwnd,
    804                         INII_NEWAPP,
    805                         EM_SETTEXTLIMIT,
    806                         MPFROM2SHORT(CCHMAXPATH,0),
    807                         MPVOID);
    808       WinSendDlgItemMsg(hwnd,
    809                         INII_NEWKEY,
    810                         EM_SETTEXTLIMIT,
    811                         MPFROM2SHORT(CCHMAXPATH,0),
    812                         MPVOID);
     805                        INII_NEWAPP,
     806                        EM_SETSEL, MPFROM2SHORT(0, CCHMAXPATH), MPVOID);
     807      switch (inirec->action) {
     808      case IDM_MOVE:
     809        WinSetWindowText(hwnd, GetPString(IDS_INIRENAMEKEYTITLETEXT));
     810        break;
     811      case IDM_COPY:
     812        WinSetWindowText(hwnd, GetPString(IDS_INICOPYKEYTITLETEXT));
     813        break;
     814      }
     815    }
     816    break;
     817
     818  case WM_COMMAND:
     819    switch (SHORT1FROMMP(mp1)) {
     820    case DID_OK:
     821      inirec = (INIREC *) WinQueryWindowPtr(hwnd, 0);
     822      if (inirec) {
     823        WinQueryDlgItemText(hwnd, INII_NEWAPP, CCHMAXPATH, inirec->app2);
     824        bstrip(inirec->app2);
     825        if (!*inirec->app2) {
     826          DosBeep(50, 100);
     827          break;
     828        }
     829        if (*inirec->key) {
     830          WinQueryDlgItemText(hwnd, INII_NEWKEY, CCHMAXPATH, inirec->key2);
     831          bstrip(inirec->key2);
     832          if (!*inirec->key2) {
     833            DosBeep(50, 100);
     834            break;
     835          }
     836        }
     837        WinDismissDlg(hwnd, 1);
     838      }
     839      break;
     840
     841    case DID_CANCEL:
     842      WinDismissDlg(hwnd, 0);
     843      break;
     844
     845    case IDM_HELP:
     846      if (hwndHelp)
     847        WinSendMsg(hwndHelp,
     848                   HM_DISPLAY_HELP,
     849                   MPFROM2SHORT(HELP_INTRAINI, 0),
     850                   MPFROMSHORT(HM_RESOURCEID));
     851      break;
     852    }
     853    return 0;
     854  }
     855  return WinDefDlgProc(hwnd, msg, mp1, mp2);
     856}
     857
     858MRESULT EXPENTRY ChangeIniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
     859{
     860  switch (msg) {
     861  case WM_INITDLG:
     862    WinSetWindowPtr(hwnd, 0, mp2);
     863    WinSendDlgItemMsg(hwnd, INIR_USERPROFILE, EM_SETTEXTLIMIT,
     864                      MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
     865    WinSendDlgItemMsg(hwnd, INIR_SYSTEMPROFILE, EM_SETTEXTLIMIT,
     866                      MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
     867    break;
     868
     869  case WM_COMMAND:
     870    switch (SHORT1FROMMP(mp1)) {
     871    case INIR_FIND:
    813872      {
    814         CHAR s[CCHMAXPATH + 34];
    815 
    816         sprintf(s,
    817                 GetPString(IDS_INIWASTEXT),
    818                 inirec->app);
    819         WinSetDlgItemText(hwnd,
    820                           INII_OLDAPP,
    821                           s);
    822       }
    823       if(!*inirec->key) {
    824         WinEnableWindow(WinWindowFromID(hwnd,INII_NEWKEY),FALSE);
    825         WinEnableWindow(WinWindowFromID(hwnd,INII_NEWKEYHDR),FALSE);
    826         switch(inirec->action) {
    827           case IDM_MOVE:
    828             WinSetWindowText(hwnd,
    829                              GetPString(IDS_INIRENAMEAPPTITLETEXT));
    830             break;
    831           case IDM_COPY:
    832             WinSetWindowText(hwnd,
    833                              GetPString(IDS_INICOPYAPPTITLETEXT));
    834             break;
    835         }
    836       }
    837       else {
    838         {
    839           CHAR s[CCHMAXPATH + 34];
    840 
    841           sprintf(s,
    842                   GetPString(IDS_INIWASTEXT),
    843                   inirec->key);
    844           WinSetDlgItemText(hwnd,
    845                             INII_OLDKEY,
    846                             s);
    847         }
    848         WinSetDlgItemText(hwnd,
    849                           INII_NEWAPP,
    850                           inirec->app);
    851         WinSendDlgItemMsg(hwnd,
    852                           INII_NEWAPP,
    853                           EM_SETSEL,
    854                           MPFROM2SHORT(0,CCHMAXPATH),
    855                           MPVOID);
    856         switch(inirec->action) {
    857           case IDM_MOVE:
    858             WinSetWindowText(hwnd,
    859                              GetPString(IDS_INIRENAMEKEYTITLETEXT));
    860             break;
    861           case IDM_COPY:
    862             WinSetWindowText(hwnd,
    863                              GetPString(IDS_INICOPYKEYTITLETEXT));
    864             break;
    865         }
    866       }
    867       break;
    868 
    869     case WM_COMMAND:
    870       switch(SHORT1FROMMP(mp1)) {
    871         case DID_OK:
    872           inirec = (INIREC *)WinQueryWindowPtr(hwnd,0);
    873           if(inirec) {
    874             WinQueryDlgItemText(hwnd,
    875                                 INII_NEWAPP,
    876                                 CCHMAXPATH,
    877                                 inirec->app2);
    878             bstrip(inirec->app2);
    879             if(!*inirec->app2) {
    880               DosBeep(50,100);
    881               break;
    882             }
    883             if(*inirec->key) {
    884               WinQueryDlgItemText(hwnd,
    885                                   INII_NEWKEY,
    886                                   CCHMAXPATH,
    887                                   inirec->key2);
    888               bstrip(inirec->key2);
    889               if(!*inirec->key2) {
    890                 DosBeep(50,100);
    891                 break;
    892               }
    893             }
    894             WinDismissDlg(hwnd,1);
    895           }
    896           break;
    897 
    898         case DID_CANCEL:
    899           WinDismissDlg(hwnd,0);
    900           break;
    901 
    902         case IDM_HELP:
    903           if(hwndHelp)
    904             WinSendMsg(hwndHelp,
    905                        HM_DISPLAY_HELP,
    906                        MPFROM2SHORT(HELP_INTRAINI,0),
    907                        MPFROMSHORT(HM_RESOURCEID));
    908           break;
    909       }
    910       return 0;
     873        CHAR filename[CCHMAXPATH], *p, *ininame;
     874        USHORT id = 0;
     875        HWND hwndFocus;
     876
     877        hwndFocus = WinQueryFocus(HWND_DESKTOP);
     878        if (hwndFocus)
     879          id = WinQueryWindowUShort(hwndFocus, QWS_ID);
     880        if (id != INIR_SYSTEMPROFILE)
     881          id = INIR_USERPROFILE;
     882        ininame = INSTDATA(hwnd);
     883        if (ininame && *ininame) {
     884          strcpy(filename, ininame);
     885          p = filename;
     886          while (*p) {
     887            if (*p == '/')
     888              *p = '\\';
     889            p++;
     890          }
     891          p = strrchr(filename, '\\');
     892          if (p) {
     893            p++;
     894            *p = 0;
     895          }
     896          else
     897            *filename = 0;
     898        }
     899        else
     900          *filename = 0;
     901        strcat(filename, "*.INI");
     902        if (insert_filename(hwnd, filename, TRUE, FALSE) && *filename)
     903          WinSetDlgItemText(hwnd, id, filename);
     904      }
     905      break;
     906
     907    case DID_OK:
     908      {
     909        HINI testini;
     910        PRFPROFILE prfp;
     911        CHAR sysini[CCHMAXPATH];
     912        CHAR userini[CCHMAXPATH];
     913
     914        WinQueryDlgItemText(hwnd, INIR_USERPROFILE, CCHMAXPATH, userini);
     915        WinQueryDlgItemText(hwnd, INIR_SYSTEMPROFILE, CCHMAXPATH, sysini);
     916        testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd), userini);
     917        if (!testini) {
     918          saymsg(MB_CANCEL,
     919                 hwnd,
     920                 GetPString(IDS_ERRORTEXT),
     921                 GetPString(IDS_INICANTOPENUSERTEXT), userini);
     922          break;
     923        }
     924        PrfCloseProfile(testini);
     925        testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd), sysini);
     926        if (!testini) {
     927          saymsg(MB_CANCEL,
     928                 hwnd,
     929                 GetPString(IDS_ERRORTEXT),
     930                 GetPString(IDS_INICANTOPENSYSTEXT), sysini);
     931          break;
     932        }
     933        PrfCloseProfile(testini);
     934        memset(&prfp, 0, sizeof(PRFPROFILE));
     935        prfp.cchUserName = strlen(sysini);
     936        prfp.cchSysName = strlen(userini);
     937        prfp.pszUserName = (PSZ) userini;
     938        prfp.pszSysName = (PSZ) sysini;
     939        if (!PrfReset(WinQueryAnchorBlock(hwnd), &prfp)) {
     940          Win_Error(hwnd, hwnd, __FILE__, __LINE__,
     941                    GetPString(IDS_INIPRFRESETFAILEDTEXT));
     942        }
     943        else
     944          WinDismissDlg(hwnd, 1);
     945      }
     946      break;
     947
     948    case DID_CANCEL:
     949      WinDismissDlg(hwnd, 0);
     950      break;
     951
     952    case IDM_HELP:
     953      if (hwndHelp)
     954        WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
     955                   MPFROM2SHORT(HELP_CHANGEINI, 0),
     956                   MPFROMSHORT(HM_RESOURCEID));
     957      break;
     958    }
     959    return 0;
    911960  }
    912   return WinDefDlgProc(hwnd,msg,mp1,mp2);
     961  return WinDefDlgProc(hwnd, msg, mp1, mp2);
    913962}
    914963
    915 
    916 MRESULT EXPENTRY ChangeIniProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
     964MRESULT EXPENTRY SwapIniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
    917965{
    918   switch(msg) {
    919     case WM_INITDLG:
    920       WinSetWindowPtr(hwnd,0,mp2);
    921       WinSendDlgItemMsg(hwnd,INIR_USERPROFILE,EM_SETTEXTLIMIT,
    922                         MPFROM2SHORT(CCHMAXPATH,0),MPVOID);
    923       WinSendDlgItemMsg(hwnd,INIR_SYSTEMPROFILE,EM_SETTEXTLIMIT,
    924                         MPFROM2SHORT(CCHMAXPATH,0),MPVOID);
    925       break;
    926 
    927     case WM_COMMAND:
    928       switch(SHORT1FROMMP(mp1)) {
    929         case INIR_FIND:
    930           {
    931             CHAR filename[CCHMAXPATH],*p,*ininame;
    932             USHORT id = 0;
    933             HWND   hwndFocus;
    934 
    935             hwndFocus = WinQueryFocus(HWND_DESKTOP);
    936             if(hwndFocus)
    937               id = WinQueryWindowUShort(hwndFocus,QWS_ID);
    938             if(id != INIR_SYSTEMPROFILE)
    939               id = INIR_USERPROFILE;
    940             ininame = INSTDATA(hwnd);
    941             if(ininame && *ininame) {
    942               strcpy(filename,ininame);
    943               p = filename;
    944               while(*p) {
    945                 if(*p == '/')
    946                   *p = '\\';
    947                 p++;
    948               }
    949               p = strrchr(filename,'\\');
    950               if(p) {
    951                 p++;
    952                 *p = 0;
    953               }
    954               else
    955                 *filename = 0;
    956             }
    957             else
    958               *filename = 0;
    959             strcat(filename,"*.INI");
    960             if(insert_filename(hwnd,
    961                                filename,
    962                                TRUE,
    963                                FALSE) &&
    964                *filename)
    965               WinSetDlgItemText(hwnd,
    966                                 id,
    967                                 filename);
    968           }
    969           break;
    970 
    971         case DID_OK:
    972           {
    973             HINI       testini;
    974             PRFPROFILE prfp;
    975             CHAR       sysini[CCHMAXPATH];
    976             CHAR       userini[CCHMAXPATH];
    977 
    978             WinQueryDlgItemText(hwnd,INIR_USERPROFILE,CCHMAXPATH,userini);
    979             WinQueryDlgItemText(hwnd,INIR_SYSTEMPROFILE,CCHMAXPATH,sysini);
    980             testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd),userini);
    981             if(!testini) {
    982               saymsg(MB_CANCEL,
    983                      hwnd,
    984                      GetPString(IDS_ERRORTEXT),
    985                      GetPString(IDS_INICANTOPENUSERTEXT),
    986                      userini);
    987               break;
    988             }
    989             PrfCloseProfile(testini);
    990             testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd),sysini);
    991             if(!testini) {
    992               saymsg(MB_CANCEL,
    993                      hwnd,
    994                      GetPString(IDS_ERRORTEXT),
    995                      GetPString(IDS_INICANTOPENSYSTEXT),
    996                      sysini);
    997               break;
    998             }
    999             PrfCloseProfile(testini);
    1000             memset(&prfp,0,sizeof(PRFPROFILE));
    1001             prfp.cchUserName = strlen(sysini);
    1002             prfp.cchSysName = strlen(userini);
    1003             prfp.pszUserName = (PSZ)userini;
    1004             prfp.pszSysName = (PSZ)sysini;
    1005             if (!PrfReset(WinQueryAnchorBlock(hwnd),&prfp)) {
    1006               Win_Error(hwnd,hwnd,__FILE__,__LINE__,
    1007                         GetPString(IDS_INIPRFRESETFAILEDTEXT));
    1008             }
    1009             else
    1010               WinDismissDlg(hwnd,1);
    1011           }
    1012           break;
    1013 
    1014         case DID_CANCEL:
    1015           WinDismissDlg(hwnd,0);
    1016           break;
    1017 
    1018         case IDM_HELP:
    1019           if(hwndHelp)
    1020             WinSendMsg(hwndHelp,HM_DISPLAY_HELP,
    1021                        MPFROM2SHORT(HELP_CHANGEINI,0),
    1022                        MPFROMSHORT(HM_RESOURCEID));
    1023           break;
    1024       }
    1025       return 0;
     966  switch (msg) {
     967  case WM_INITDLG:
     968    WinSetWindowPtr(hwnd, 0, mp2);
     969    WinSendDlgItemMsg(hwnd,
     970                      INIR_USERPROFILE,
     971                      EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
     972    WinSendDlgItemMsg(hwnd,
     973                      INIR_SYSTEMPROFILE,
     974                      EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
     975    WinSetWindowText(hwnd, GetPString(IDS_INISWAPOS2INISTITLETEXT));
     976    break;
     977
     978  case WM_COMMAND:
     979    switch (SHORT1FROMMP(mp1)) {
     980    case INIR_FIND:
     981      {
     982        CHAR filename[CCHMAXPATH], *p, *ininame;
     983        USHORT id = 0;
     984        HWND hwndFocus;
     985
     986        hwndFocus = WinQueryFocus(HWND_DESKTOP);
     987        if (hwndFocus)
     988          id = WinQueryWindowUShort(hwndFocus, QWS_ID);
     989        if (id != INIR_SYSTEMPROFILE)
     990          id = INIR_USERPROFILE;
     991        ininame = INSTDATA(hwnd);
     992        if (ininame && *ininame) {
     993          strcpy(filename, ininame);
     994          p = filename;
     995          while (*p) {
     996            if (*p == '/')
     997              *p = '\\';
     998            p++;
     999          }
     1000          p = strrchr(filename, '\\');
     1001          if (p) {
     1002            p++;
     1003            *p = 0;
     1004          }
     1005          else
     1006            *filename = 0;
     1007        }
     1008        else
     1009          *filename = 0;
     1010        strcat(filename, "*.INI");
     1011        if (insert_filename(hwnd, filename, TRUE, FALSE) && *filename)
     1012          WinSetDlgItemText(hwnd, id, filename);
     1013      }
     1014      break;
     1015
     1016    case DID_OK:
     1017      {
     1018        HINI testini;
     1019        PRFPROFILE prfp;
     1020        CHAR sysini[CCHMAXPATH];
     1021        CHAR userini[CCHMAXPATH];
     1022        CHAR oldsysini[CCHMAXPATH];
     1023        CHAR olduserini[CCHMAXPATH];
     1024        CHAR tempsysini[CCHMAXPATH];
     1025        CHAR tempuserini[CCHMAXPATH];
     1026        CHAR tempsysini2[CCHMAXPATH];
     1027        CHAR tempuserini2[CCHMAXPATH];
     1028        CHAR *p;
     1029        APIRET rc;
     1030
     1031        *tempuserini = 0;
     1032        *tempsysini = 0;
     1033        *tempuserini2 = 0;
     1034        *tempsysini2 = 0;
     1035        memset(&prfp, 0, sizeof(PRFPROFILE));
     1036        prfp.cchUserName = CCHMAXPATH;
     1037        prfp.cchSysName = CCHMAXPATH;
     1038        prfp.pszUserName = (PSZ) olduserini;
     1039        prfp.pszSysName = (PSZ) oldsysini;
     1040        if (!PrfQueryProfile(WinQueryAnchorBlock(hwnd), &prfp)) {
     1041          Win_Error(hwnd, hwnd, __FILE__, __LINE__,
     1042                    GetPString(IDS_INIQUERYPRFFAILEDTEXT));
     1043          break;
     1044        }
     1045        WinQueryDlgItemText(hwnd, INIR_USERPROFILE, CCHMAXPATH, userini);
     1046        WinQueryDlgItemText(hwnd, INIR_SYSTEMPROFILE, CCHMAXPATH, sysini);
     1047        MakeFullName(userini);
     1048        MakeFullName(sysini);
     1049        testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd), userini);
     1050        if (!testini) {
     1051          saymsg(MB_CANCEL,
     1052                 hwnd,
     1053                 GetPString(IDS_ERRORTEXT),
     1054                 GetPString(IDS_INICANTOPENUSERTEXT), userini);
     1055          break;
     1056        }
     1057        PrfCloseProfile(testini);
     1058        testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd), sysini);
     1059        if (!testini) {
     1060          saymsg(MB_CANCEL,
     1061                 hwnd,
     1062                 GetPString(IDS_ERRORTEXT),
     1063                 GetPString(IDS_INICANTOPENSYSTEXT), sysini);
     1064          break;
     1065        }
     1066        PrfCloseProfile(testini);
     1067        /* make copies of new inis */
     1068        *tempuserini = 0;
     1069        *tempsysini = 0;
     1070        save_dir2(tempuserini);
     1071        if (tempuserini[strlen(tempuserini) - 1] != '\\')
     1072          strcat(tempuserini, "\\");
     1073        strcat(tempuserini, "TEMPUSER.INI");
     1074        rc = DosCopy(userini, tempuserini, DCPY_EXISTING);
     1075        if (rc) {
     1076          Dos_Error(MB_CANCEL,
     1077                    rc,
     1078                    hwnd,
     1079                    __FILE__,
     1080                    __LINE__,
     1081                    GetPString(IDS_COMPCOPYFAILEDTEXT), userini, tempuserini);
     1082          break;
     1083        }
     1084        save_dir2(tempsysini);
     1085        if (tempsysini[strlen(tempsysini) - 1] != '\\')
     1086          strcat(tempsysini, "\\");
     1087        strcat(tempsysini, "TEMPSYS.INI");
     1088        rc = DosCopy(sysini, tempsysini, DCPY_EXISTING);
     1089        if (rc) {
     1090          Dos_Error(MB_CANCEL,
     1091                    rc,
     1092                    hwnd,
     1093                    __FILE__,
     1094                    __LINE__,
     1095                    GetPString(IDS_COMPCOPYFAILEDTEXT), sysini, tempsysini);
     1096          break;
     1097        }
     1098        memset(&prfp, 0, sizeof(PRFPROFILE));
     1099        prfp.cchUserName = strlen(tempuserini);
     1100        prfp.cchSysName = strlen(tempsysini);
     1101        prfp.pszUserName = (PSZ) tempuserini;
     1102        prfp.pszSysName = (PSZ) tempsysini;
     1103        if (!PrfReset(WinQueryAnchorBlock(hwnd), &prfp)) {
     1104          Win_Error(hwnd, hwnd, __FILE__, __LINE__,
     1105                    GetPString(IDS_INIPRFRESETFAILEDTEXT));
     1106        }
     1107        else {
     1108          /* backup old inis */
     1109          strcpy(tempuserini2, olduserini);
     1110          p = strrchr(tempuserini2, '\\');
     1111          if (!p)
     1112            *tempuserini2 = 0;
     1113          else {
     1114            p++;
     1115            *p = 0;
     1116          }
     1117          strcat(tempuserini2, "OS2INI.BAK");
     1118          rc = DosCopy(olduserini, tempuserini2, DCPY_EXISTING);
     1119          if (rc) {
     1120            Dos_Error(MB_CANCEL,
     1121                      rc,
     1122                      hwnd,
     1123                      __FILE__,
     1124                      __LINE__,
     1125                      GetPString(IDS_COMPCOPYFAILEDTEXT),
     1126                      olduserini, tempuserini2);
     1127            WinDismissDlg(hwnd, 1);
     1128            break;
     1129          }
     1130          strcpy(tempsysini2, oldsysini);
     1131          p = strrchr(tempsysini2, '\\');
     1132          if (!p)
     1133            *tempsysini2 = 0;
     1134          else {
     1135            p++;
     1136            *p = 0;
     1137          }
     1138          strcat(tempsysini2, "OS2SYINI.BAK");
     1139          rc = DosCopy(oldsysini, tempsysini2, DCPY_EXISTING);
     1140          if (rc) {
     1141            Dos_Error(MB_CANCEL,
     1142                      rc,
     1143                      hwnd,
     1144                      __FILE__,
     1145                      __LINE__,
     1146                      GetPString(IDS_COMPCOPYFAILEDTEXT),
     1147                      oldsysini, tempsysini2);
     1148            WinDismissDlg(hwnd, 1);
     1149            break;
     1150          }
     1151          /* copy new inis to old ini names */
     1152          rc = DosCopy(userini, olduserini, DCPY_EXISTING);
     1153          if (rc) {
     1154            Dos_Error(MB_CANCEL,
     1155                      rc,
     1156                      hwnd,
     1157                      __FILE__,
     1158                      __LINE__,
     1159                      GetPString(IDS_COMPCOPYFAILEDTEXT),
     1160                      userini, olduserini);
     1161            WinDismissDlg(hwnd, 1);
     1162            break;
     1163          }
     1164          rc = DosCopy(sysini, oldsysini, DCPY_EXISTING);
     1165          if (rc) {
     1166            Dos_Error(MB_CANCEL,
     1167                      rc,
     1168                      hwnd,
     1169                      __FILE__,
     1170                      __LINE__,
     1171                      GetPString(IDS_COMPCOPYFAILEDTEXT),
     1172                      userini, olduserini);
     1173            WinDismissDlg(hwnd, 1);
     1174            break;
     1175          }
     1176          /*  replace temp inis with new permanent inis */
     1177          memset(&prfp, 0, sizeof(PRFPROFILE));
     1178          prfp.cchUserName = strlen(oldsysini);
     1179          prfp.cchSysName = strlen(olduserini);
     1180          prfp.pszUserName = (PSZ) olduserini;
     1181          prfp.pszSysName = (PSZ) oldsysini;
     1182          if (!PrfReset(WinQueryAnchorBlock(hwnd), &prfp)) {
     1183            Win_Error(hwnd, hwnd, __FILE__, __LINE__,
     1184                      GetPString(IDS_INIPRFRESETFAILEDTEXT));
     1185          }
     1186          else {
     1187            Notify(GetPString(IDS_SUCCESSTEXT));
     1188            unlinkf(tempuserini);
     1189            unlinkf(tempsysini);
     1190          }
     1191          WinDismissDlg(hwnd, 1);
     1192        }
     1193      }
     1194      break;
     1195
     1196    case DID_CANCEL:
     1197      WinDismissDlg(hwnd, 0);
     1198      break;
     1199
     1200    case IDM_HELP:
     1201      if (hwndHelp)
     1202        WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
     1203                   MPFROM2SHORT(HELP_SWAPINI, 0), MPFROMSHORT(HM_RESOURCEID));
     1204      break;
     1205    }
     1206    return 0;
    10261207  }
    1027   return WinDefDlgProc(hwnd,msg,mp1,mp2);
     1208  return WinDefDlgProc(hwnd, msg, mp1, mp2);
    10281209}
    10291210
    1030 
    1031 MRESULT EXPENTRY SwapIniProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
    1032 {
    1033   switch(msg) {
    1034     case WM_INITDLG:
    1035       WinSetWindowPtr(hwnd,0,mp2);
    1036       WinSendDlgItemMsg(hwnd,
    1037                         INIR_USERPROFILE,
    1038                         EM_SETTEXTLIMIT,
    1039                         MPFROM2SHORT(CCHMAXPATH,0),
    1040                         MPVOID);
    1041       WinSendDlgItemMsg(hwnd,
    1042                         INIR_SYSTEMPROFILE,
    1043                         EM_SETTEXTLIMIT,
    1044                         MPFROM2SHORT(CCHMAXPATH,0),
    1045                         MPVOID);
    1046       WinSetWindowText(hwnd,
    1047                        GetPString(IDS_INISWAPOS2INISTITLETEXT));
    1048       break;
    1049 
    1050     case WM_COMMAND:
    1051       switch(SHORT1FROMMP(mp1)) {
    1052         case INIR_FIND:
    1053           {
    1054             CHAR filename[CCHMAXPATH],*p,*ininame;
    1055             USHORT id = 0;
    1056             HWND   hwndFocus;
    1057 
    1058             hwndFocus = WinQueryFocus(HWND_DESKTOP);
    1059             if(hwndFocus)
    1060               id = WinQueryWindowUShort(hwndFocus,QWS_ID);
    1061             if(id != INIR_SYSTEMPROFILE)
    1062               id = INIR_USERPROFILE;
    1063             ininame = INSTDATA(hwnd);
    1064             if(ininame && *ininame) {
    1065               strcpy(filename,ininame);
    1066               p = filename;
    1067               while(*p) {
    1068                 if(*p == '/')
    1069                   *p = '\\';
    1070                 p++;
    1071               }
    1072               p = strrchr(filename,'\\');
    1073               if(p) {
    1074                 p++;
    1075                 *p = 0;
    1076               }
    1077               else
    1078                 *filename = 0;
    1079             }
    1080             else
    1081               *filename = 0;
    1082             strcat(filename,"*.INI");
    1083             if(insert_filename(hwnd,
    1084                                filename,
    1085                                TRUE,
    1086                                FALSE) &&
    1087                *filename)
    1088               WinSetDlgItemText(hwnd,
    1089                                 id,
    1090                                 filename);
    1091           }
    1092           break;
    1093 
    1094         case DID_OK:
    1095           {
    1096             HINI       testini;
    1097             PRFPROFILE prfp;
    1098             CHAR       sysini[CCHMAXPATH];
    1099             CHAR       userini[CCHMAXPATH];
    1100             CHAR       oldsysini[CCHMAXPATH];
    1101             CHAR       olduserini[CCHMAXPATH];
    1102             CHAR       tempsysini[CCHMAXPATH];
    1103             CHAR       tempuserini[CCHMAXPATH];
    1104             CHAR       tempsysini2[CCHMAXPATH];
    1105             CHAR       tempuserini2[CCHMAXPATH];
    1106             CHAR      *p;
    1107             APIRET     rc;
    1108 
    1109             *tempuserini = 0;
    1110             *tempsysini = 0;
    1111             *tempuserini2 = 0;
    1112             *tempsysini2 = 0;
    1113             memset(&prfp,0,sizeof(PRFPROFILE));
    1114             prfp.cchUserName = CCHMAXPATH;
    1115             prfp.cchSysName = CCHMAXPATH;
    1116             prfp.pszUserName = (PSZ)olduserini;
    1117             prfp.pszSysName = (PSZ)oldsysini;
    1118             if (!PrfQueryProfile(WinQueryAnchorBlock(hwnd),&prfp)) {
    1119               Win_Error(hwnd,hwnd,__FILE__,__LINE__,
    1120                         GetPString(IDS_INIQUERYPRFFAILEDTEXT));
    1121               break;
    1122             }
    1123             WinQueryDlgItemText(hwnd,
    1124                                 INIR_USERPROFILE,
    1125                                 CCHMAXPATH,
    1126                                 userini);
    1127             WinQueryDlgItemText(hwnd,
    1128                                 INIR_SYSTEMPROFILE,
    1129                                 CCHMAXPATH,
    1130                                 sysini);
    1131             MakeFullName(userini);
    1132             MakeFullName(sysini);
    1133             testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd),
    1134                                      userini);
    1135             if(!testini) {
    1136               saymsg(MB_CANCEL,
    1137                      hwnd,
    1138                      GetPString(IDS_ERRORTEXT),
    1139                      GetPString(IDS_INICANTOPENUSERTEXT),
    1140                      userini);
    1141               break;
    1142             }
    1143             PrfCloseProfile(testini);
    1144             testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd),sysini);
    1145             if(!testini) {
    1146               saymsg(MB_CANCEL,
    1147                      hwnd,
    1148                      GetPString(IDS_ERRORTEXT),
    1149                      GetPString(IDS_INICANTOPENSYSTEXT),
    1150                      sysini);
    1151               break;
    1152             }
    1153             PrfCloseProfile(testini);
    1154             /* make copies of new inis */
    1155             *tempuserini = 0;
    1156             *tempsysini = 0;
    1157             save_dir2(tempuserini);
    1158             if(tempuserini[strlen(tempuserini) - 1] != '\\')
    1159               strcat(tempuserini,"\\");
    1160             strcat(tempuserini,"TEMPUSER.INI");
    1161             rc = DosCopy(userini,tempuserini,DCPY_EXISTING);
    1162             if (rc) {
    1163               Dos_Error(MB_CANCEL,
    1164                         rc,
    1165                         hwnd,
    1166                         __FILE__,
    1167                         __LINE__,
    1168                         GetPString(IDS_COMPCOPYFAILEDTEXT),
    1169                         userini,
    1170                         tempuserini);
    1171               break;
    1172             }
    1173             save_dir2(tempsysini);
    1174             if(tempsysini[strlen(tempsysini) - 1] != '\\')
    1175               strcat(tempsysini,"\\");
    1176             strcat(tempsysini,"TEMPSYS.INI");
    1177             rc = DosCopy(sysini,
    1178                          tempsysini,
    1179                          DCPY_EXISTING);
    1180             if (rc) {
    1181               Dos_Error(MB_CANCEL,
    1182                         rc,
    1183                         hwnd,
    1184                         __FILE__,
    1185                         __LINE__,
    1186                         GetPString(IDS_COMPCOPYFAILEDTEXT),
    1187                         sysini,
    1188                         tempsysini);
    1189               break;
    1190             }
    1191             memset(&prfp,0,sizeof(PRFPROFILE));
    1192             prfp.cchUserName = strlen(tempuserini);
    1193             prfp.cchSysName = strlen(tempsysini);
    1194             prfp.pszUserName = (PSZ)tempuserini;
    1195             prfp.pszSysName = (PSZ)tempsysini;
    1196             if (!PrfReset(WinQueryAnchorBlock(hwnd),&prfp)) {
    1197               Win_Error(hwnd,hwnd,__FILE__,__LINE__,
    1198                         GetPString(IDS_INIPRFRESETFAILEDTEXT));
    1199             }
    1200             else {
    1201               /* backup old inis */
    1202               strcpy(tempuserini2,olduserini);
    1203               p = strrchr(tempuserini2,'\\');
    1204               if(!p)
    1205                 *tempuserini2 = 0;
    1206               else {
    1207                 p++;
    1208                 *p = 0;
    1209               }
    1210               strcat(tempuserini2,"OS2INI.BAK");
    1211               rc = DosCopy(olduserini,
    1212                            tempuserini2,
    1213                            DCPY_EXISTING);
    1214               if (rc) {
    1215                 Dos_Error(MB_CANCEL,
    1216                           rc,
    1217                           hwnd,
    1218                           __FILE__,
    1219                           __LINE__,
    1220                           GetPString(IDS_COMPCOPYFAILEDTEXT),
    1221                           olduserini,
    1222                           tempuserini2);
    1223                 WinDismissDlg(hwnd,1);
    1224                 break;
    1225               }
    1226               strcpy(tempsysini2,oldsysini);
    1227               p = strrchr(tempsysini2,'\\');
    1228               if(!p)
    1229                 *tempsysini2 = 0;
    1230               else {
    1231                 p++;
    1232                 *p = 0;
    1233               }
    1234               strcat(tempsysini2,"OS2SYINI.BAK");
    1235               rc = DosCopy(oldsysini,
    1236                            tempsysini2,
    1237                            DCPY_EXISTING);
    1238               if (rc) {
    1239                 Dos_Error(MB_CANCEL,
    1240                           rc,
    1241                           hwnd,
    1242                           __FILE__,
    1243                           __LINE__,
    1244                           GetPString(IDS_COMPCOPYFAILEDTEXT),
    1245                           oldsysini,
    1246                           tempsysini2);
    1247                 WinDismissDlg(hwnd,1);
    1248                 break;
    1249               }
    1250               /* copy new inis to old ini names */
    1251               rc = DosCopy(userini,
    1252                            olduserini,
    1253                            DCPY_EXISTING);
    1254               if (rc) {
    1255                 Dos_Error(MB_CANCEL,
    1256                           rc,
    1257                           hwnd,
    1258                           __FILE__,
    1259                           __LINE__,
    1260                           GetPString(IDS_COMPCOPYFAILEDTEXT),
    1261                           userini,
    1262                           olduserini);
    1263                 WinDismissDlg(hwnd,1);
    1264                 break;
    1265               }
    1266               rc = DosCopy(sysini,
    1267                            oldsysini,
    1268                            DCPY_EXISTING);
    1269               if (rc) {
    1270                 Dos_Error(MB_CANCEL,
    1271                           rc,
    1272                           hwnd,
    1273                           __FILE__,
    1274                           __LINE__,
    1275                           GetPString(IDS_COMPCOPYFAILEDTEXT),
    1276                           userini,
    1277                           olduserini);
    1278                 WinDismissDlg(hwnd,1);
    1279                 break;
    1280               }
    1281               /*  replace temp inis with new permanent inis */
    1282               memset(&prfp,0,sizeof(PRFPROFILE));
    1283               prfp.cchUserName = strlen(oldsysini);
    1284               prfp.cchSysName = strlen(olduserini);
    1285               prfp.pszUserName = (PSZ)olduserini;
    1286               prfp.pszSysName = (PSZ)oldsysini;
    1287               if (!PrfReset(WinQueryAnchorBlock(hwnd),&prfp)) {
    1288                 Win_Error(hwnd,hwnd,__FILE__,__LINE__,
    1289                           GetPString(IDS_INIPRFRESETFAILEDTEXT));
    1290               }
    1291               else {
    1292                 Notify(GetPString(IDS_SUCCESSTEXT));
    1293                 unlinkf(tempuserini);
    1294                 unlinkf(tempsysini);
    1295               }
    1296               WinDismissDlg(hwnd,1);
    1297             }
    1298           }
    1299           break;
    1300 
    1301         case DID_CANCEL:
    1302           WinDismissDlg(hwnd,0);
    1303           break;
    1304 
    1305         case IDM_HELP:
    1306           if(hwndHelp)
    1307             WinSendMsg(hwndHelp,HM_DISPLAY_HELP,
    1308                        MPFROM2SHORT(HELP_SWAPINI,0),
    1309                        MPFROMSHORT(HM_RESOURCEID));
    1310           break;
    1311       }
    1312       return 0;
    1313   }
    1314   return WinDefDlgProc(hwnd,msg,mp1,mp2);
    1315 }
    1316 
    1317 
    1318 MRESULT EXPENTRY AddIniProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
     1211MRESULT EXPENTRY AddIniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
    13191212{
    13201213  INIDATA *inidata;
    13211214
    1322   switch(msg) {
    1323     case WM_INITDLG:
    1324       if(!mp2) {
    1325         WinDismissDlg(hwnd,0);
    1326         break;
    1327       }
    1328       inidata = (INIDATA *)mp2;
    1329       if(inidata->edit)
    1330         WinSetWindowText(hwnd,
    1331                          GetPString(IDS_INIEDITINITITLETEXT));
    1332       WinSetWindowPtr(hwnd,0,(PVOID)mp2);
    1333       WinSendDlgItemMsg(hwnd,
    1334                         IAD_APPNAME,
    1335                         EM_SETTEXTLIMIT,
    1336                         MPFROM2SHORT(CCHMAXPATH,0),
    1337                         MPVOID);
    1338       WinSendDlgItemMsg(hwnd,
    1339                         IAD_KEYNAME,
    1340                         EM_SETTEXTLIMIT,
    1341                         MPFROM2SHORT(CCHMAXPATH,0),
    1342                         MPVOID);
    1343       WinSendDlgItemMsg(hwnd,
    1344                         IAD_DATA,
    1345                         EM_SETTEXTLIMIT,
    1346                         MPFROM2SHORT(32767,0),
    1347                         MPVOID);
    1348       WinEnableWindow(WinWindowFromID(hwnd,DID_OK),
    1349                       FALSE);
    1350       WinSetDlgItemText(hwnd,
    1351                         IAD_APPNAME,
    1352                         inidata->applname);
    1353       if(inidata->edit) {
    1354         WinSetDlgItemText(hwnd,
    1355                           IAD_KEYNAME,
    1356                           inidata->keyname);
    1357         if(inidata->data && inidata->datalen) {
    1358 
    1359           CHAR *p;
    1360 
    1361           inidata->isbinary = FALSE;
    1362           p = inidata->data;
    1363           while((p - inidata->data) < inidata->datalen - 1) {
    1364             if(*p < ' ' || !isprint(*p)) {
    1365               inidata->isbinary = TRUE;
    1366               break;
    1367             }
    1368             p++;
    1369           }
    1370           if(inidata->isbinary) {
    1371             inidata->isbinary = TRUE;
    1372             WinCheckButton(hwnd,IAD_ISBINARY,TRUE);
    1373             if(saymsg(MB_ENTERCANCEL | MB_ICONEXCLAMATION,
    1374                       hwnd,
    1375                       GetPString(IDS_WARNINGTEXT),
    1376                       GetPString(IDS_INIBINARYDATASKIPTEXT)) ==
    1377                MBID_CANCEL)
    1378               WinDismissDlg(hwnd,0);
    1379             p = xmallocz(inidata->datalen * 2,pszSrcFile,__LINE__);
    1380             if (p) {
    1381               fixup(inidata->data,
    1382                     p,
    1383                     inidata->datalen * 2,
    1384                     inidata->datalen);
    1385               WinSetDlgItemText(hwnd,IAD_DATA,p);
    1386               free(p);
    1387             }
    1388           }
    1389           else
    1390             WinSetDlgItemText(hwnd,IAD_DATA,inidata->data);
    1391         }
    1392         PostMsg(hwnd,UM_SETDIR,MPFROMLONG(1L),MPVOID);
    1393       }
    1394       else
    1395         PostMsg(hwnd,UM_SETDIR,MPVOID,MPVOID);
     1215  switch (msg) {
     1216  case WM_INITDLG:
     1217    if (!mp2) {
     1218      WinDismissDlg(hwnd, 0);
     1219      break;
     1220    }
     1221    inidata = (INIDATA *) mp2;
     1222    if (inidata->edit)
     1223      WinSetWindowText(hwnd, GetPString(IDS_INIEDITINITITLETEXT));
     1224    WinSetWindowPtr(hwnd, 0, (PVOID) mp2);
     1225    WinSendDlgItemMsg(hwnd,
     1226                      IAD_APPNAME,
     1227                      EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
     1228    WinSendDlgItemMsg(hwnd,
     1229                      IAD_KEYNAME,
     1230                      EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
     1231    WinSendDlgItemMsg(hwnd,
     1232                      IAD_DATA,
     1233                      EM_SETTEXTLIMIT, MPFROM2SHORT(32767, 0), MPVOID);
     1234    WinEnableWindow(WinWindowFromID(hwnd, DID_OK), FALSE);
     1235    WinSetDlgItemText(hwnd, IAD_APPNAME, inidata->applname);
     1236    if (inidata->edit) {
     1237      WinSetDlgItemText(hwnd, IAD_KEYNAME, inidata->keyname);
     1238      if (inidata->data && inidata->datalen) {
     1239
     1240        CHAR *p;
     1241
     1242        inidata->isbinary = FALSE;
     1243        p = inidata->data;
     1244        while ((p - inidata->data) < inidata->datalen - 1) {
     1245          if (*p < ' ' || !isprint(*p)) {
     1246            inidata->isbinary = TRUE;
     1247            break;
     1248          }
     1249          p++;
     1250        }
     1251        if (inidata->isbinary) {
     1252          inidata->isbinary = TRUE;
     1253          WinCheckButton(hwnd, IAD_ISBINARY, TRUE);
     1254          if (saymsg(MB_ENTERCANCEL | MB_ICONEXCLAMATION,
     1255                     hwnd,
     1256                     GetPString(IDS_WARNINGTEXT),
     1257                     GetPString(IDS_INIBINARYDATASKIPTEXT)) == MBID_CANCEL)
     1258            WinDismissDlg(hwnd, 0);
     1259          p = xmallocz(inidata->datalen * 2, pszSrcFile, __LINE__);
     1260          if (p) {
     1261            fixup(inidata->data, p, inidata->datalen * 2, inidata->datalen);
     1262            WinSetDlgItemText(hwnd, IAD_DATA, p);
     1263            free(p);
     1264          }
     1265        }
     1266        else
     1267          WinSetDlgItemText(hwnd, IAD_DATA, inidata->data);
     1268      }
     1269      PostMsg(hwnd, UM_SETDIR, MPFROMLONG(1L), MPVOID);
     1270    }
     1271    else
     1272      PostMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
     1273    {
     1274      CHAR s[32];
     1275
     1276      *s = 0;
     1277      WinQueryDlgItemText(hwnd, IAD_DATA, 32, s);
     1278      if (*s)
     1279        WinEnableWindow(WinWindowFromID(hwnd, DID_OK), TRUE);
     1280    }
     1281    WinSendDlgItemMsg(hwnd, IAD_APPNAME, EM_QUERYCHANGED, MPVOID, MPVOID);
     1282    WinSendDlgItemMsg(hwnd, IAD_KEYNAME, EM_QUERYCHANGED, MPVOID, MPVOID);
     1283    WinSendDlgItemMsg(hwnd, IAD_DATA, EM_QUERYCHANGED, MPVOID, MPVOID);
     1284    break;
     1285
     1286  case UM_SETDIR:
     1287    if (mp1)
     1288      WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, IAD_DATA));
     1289    else
     1290      WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, IAD_KEYNAME));
     1291    return 0;
     1292
     1293  case UM_SETUP:
     1294    saymsg(MB_ENTER | MB_ICONASTERISK,
     1295           hwnd,
     1296           GetPString(IDS_WARNINGTEXT), GetPString(IDS_INIAPPKEYEXISTSTEXT));
     1297    return 0;
     1298
     1299  case WM_CONTROL:
     1300    switch (SHORT2FROMMP(mp1)) {
     1301    case EN_KILLFOCUS:
     1302      inidata = INSTDATA(hwnd);
     1303      if (inidata) {
     1304
     1305        CHAR s[CCHMAXPATH], applname[CCHMAXPATH];
     1306        BOOL appchanged = FALSE, keychanged = FALSE;
     1307
     1308        *applname = 0;
     1309        WinQueryDlgItemText(hwnd, IAD_APPNAME, CCHMAXPATH, applname);
     1310        bstrip(applname);
     1311        if (*applname) {
     1312          *s = 0;
     1313          WinQueryDlgItemText(hwnd, IAD_KEYNAME, CCHMAXPATH, s);
     1314          bstrip(s);
     1315          if (*s) {
     1316            appchanged = (BOOL) WinSendDlgItemMsg(hwnd, IAD_APPNAME,
     1317                                                  EM_QUERYCHANGED,
     1318                                                  MPVOID, MPVOID);
     1319            keychanged = (BOOL) WinSendDlgItemMsg(hwnd, IAD_KEYNAME,
     1320                                                  EM_QUERYCHANGED,
     1321                                                  MPVOID, MPVOID);
     1322            if (appchanged || keychanged) {
     1323
     1324              ULONG size = 0L;
     1325
     1326              if (PrfQueryProfileSize(inidata->hini, applname, s, &size))
     1327                PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
     1328            }
     1329            *s = 0;
     1330            WinQueryDlgItemText(hwnd, IAD_DATA, CCHMAXPATH, s);
     1331            bstrip(s);
     1332            WinEnableWindow(WinWindowFromID(hwnd, DID_OK), (*s != 0));
     1333          }
     1334          else
     1335            WinEnableWindow(WinWindowFromID(hwnd, DID_OK), FALSE);
     1336        }
     1337        else
     1338          WinEnableWindow(WinWindowFromID(hwnd, DID_OK), FALSE);
     1339      }
     1340      break;
     1341    }
     1342    return 0;
     1343
     1344  case WM_COMMAND:
     1345    switch (SHORT1FROMMP(mp1)) {
     1346    case DID_OK:
    13961347      {
    1397         CHAR s[32];
    1398 
    1399         *s = 0;
    1400         WinQueryDlgItemText(hwnd,IAD_DATA,32,s);
    1401         if(*s)
    1402           WinEnableWindow(WinWindowFromID(hwnd,DID_OK),TRUE);
    1403       }
    1404       WinSendDlgItemMsg(hwnd,IAD_APPNAME,EM_QUERYCHANGED,MPVOID,MPVOID);
    1405       WinSendDlgItemMsg(hwnd,IAD_KEYNAME,EM_QUERYCHANGED,MPVOID,MPVOID);
    1406       WinSendDlgItemMsg(hwnd,IAD_DATA,EM_QUERYCHANGED,MPVOID,MPVOID);
    1407       break;
    1408 
    1409     case UM_SETDIR:
    1410       if(mp1)
    1411         WinSetFocus(HWND_DESKTOP,WinWindowFromID(hwnd,IAD_DATA));
    1412       else
    1413         WinSetFocus(HWND_DESKTOP,WinWindowFromID(hwnd,IAD_KEYNAME));
    1414       return 0;
    1415 
    1416     case UM_SETUP:
    1417       saymsg(MB_ENTER | MB_ICONASTERISK,
    1418              hwnd,
    1419              GetPString(IDS_WARNINGTEXT),
    1420              GetPString(IDS_INIAPPKEYEXISTSTEXT));
    1421       return 0;
    1422 
    1423     case WM_CONTROL:
    1424       switch(SHORT2FROMMP(mp1)) {
    1425         case EN_KILLFOCUS:
    1426           inidata = INSTDATA(hwnd);
    1427           if(inidata) {
    1428 
    1429             CHAR s[CCHMAXPATH],applname[CCHMAXPATH];
    1430             BOOL appchanged = FALSE,keychanged = FALSE;
    1431 
    1432             *applname = 0;
    1433             WinQueryDlgItemText(hwnd,IAD_APPNAME,CCHMAXPATH,applname);
    1434             bstrip(applname);
    1435             if(*applname) {
    1436               *s = 0;
    1437               WinQueryDlgItemText(hwnd,IAD_KEYNAME,CCHMAXPATH,s);
    1438               bstrip(s);
    1439               if(*s) {
    1440                 appchanged = (BOOL)WinSendDlgItemMsg(hwnd,IAD_APPNAME,
    1441                                                      EM_QUERYCHANGED,
    1442                                                      MPVOID,MPVOID);
    1443                 keychanged = (BOOL)WinSendDlgItemMsg(hwnd,IAD_KEYNAME,
    1444                                                      EM_QUERYCHANGED,
    1445                                                      MPVOID,MPVOID);
    1446                 if(appchanged || keychanged) {
    1447 
    1448                   ULONG size = 0L;
    1449 
    1450                   if(PrfQueryProfileSize(inidata->hini,applname,s,&size))
    1451                     PostMsg(hwnd,UM_SETUP,MPVOID,MPVOID);
    1452                 }
    1453                 *s = 0;
    1454                 WinQueryDlgItemText(hwnd,IAD_DATA,CCHMAXPATH,s);
    1455                 bstrip(s);
    1456                 WinEnableWindow(WinWindowFromID(hwnd,DID_OK),(*s != 0));
    1457               }
    1458               else
    1459                 WinEnableWindow(WinWindowFromID(hwnd,DID_OK),FALSE);
    1460             }
    1461             else
    1462               WinEnableWindow(WinWindowFromID(hwnd,DID_OK),FALSE);
    1463           }
    1464           break;
    1465       }
    1466       return 0;
    1467 
    1468     case WM_COMMAND:
    1469       switch(SHORT1FROMMP(mp1)) {
    1470         case DID_OK:
    1471           {
    1472             CHAR applname[CCHMAXPATH],keyname[CCHMAXPATH],data[CCHMAXPATH];
    1473             INT  len;
    1474 
    1475             inidata = INSTDATA(hwnd);
    1476             if (!inidata) {
    1477               Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
    1478               break;
    1479             }
    1480             inidata->isbinary = WinQueryButtonCheckstate(hwnd,IAD_ISBINARY);
    1481             *applname = 0;
    1482             WinQueryDlgItemText(hwnd,IAD_APPNAME,CCHMAXPATH,applname);
    1483             bstrip(applname);
    1484             if(*applname) {
    1485               *keyname = 0;
    1486               WinQueryDlgItemText(hwnd,IAD_KEYNAME,CCHMAXPATH,keyname);
    1487               bstrip(keyname);
    1488               if(*keyname) {
    1489                 *data = 0;
    1490                 WinQueryDlgItemText(hwnd,IAD_DATA,CCHMAXPATH,data);
    1491                 if(*data) {
    1492                   if(inidata->isbinary)
    1493                     len = literal(data);
    1494                   else
    1495                     len = strlen(data) + 1;
    1496                   PrfWriteProfileData(inidata->hini,applname,keyname,data,
    1497                                       (ULONG)len);
    1498                   WinSendMsg(inidata->hwndIni,UM_RESCAN,
    1499                              MPFROMP(applname),
    1500                              MPFROMP(keyname));
    1501                   WinDismissDlg(hwnd,1);
    1502                 }
    1503               }
    1504             }
    1505           }
    1506           break;
    1507 
    1508         case DID_CANCEL:
    1509           WinDismissDlg(hwnd,0);
    1510           break;
    1511 
    1512         case IDM_HELP:
    1513           if(hwndHelp)
    1514             WinSendMsg(hwndHelp,HM_DISPLAY_HELP,
    1515                        MPFROM2SHORT(HELP_INIADD,0),
    1516                        MPFROMSHORT(HM_RESOURCEID));
    1517           break;
    1518       }
    1519       return 0;
     1348        CHAR applname[CCHMAXPATH], keyname[CCHMAXPATH], data[CCHMAXPATH];
     1349        INT len;
     1350
     1351        inidata = INSTDATA(hwnd);
     1352        if (!inidata) {
     1353          Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     1354          break;
     1355        }
     1356        inidata->isbinary = WinQueryButtonCheckstate(hwnd, IAD_ISBINARY);
     1357        *applname = 0;
     1358        WinQueryDlgItemText(hwnd, IAD_APPNAME, CCHMAXPATH, applname);
     1359        bstrip(applname);
     1360        if (*applname) {
     1361          *keyname = 0;
     1362          WinQueryDlgItemText(hwnd, IAD_KEYNAME, CCHMAXPATH, keyname);
     1363          bstrip(keyname);
     1364          if (*keyname) {
     1365            *data = 0;
     1366            WinQueryDlgItemText(hwnd, IAD_DATA, CCHMAXPATH, data);
     1367            if (*data) {
     1368              if (inidata->isbinary)
     1369                len = literal(data);
     1370              else
     1371                len = strlen(data) + 1;
     1372              PrfWriteProfileData(inidata->hini, applname, keyname, data,
     1373                                  (ULONG) len);
     1374              WinSendMsg(inidata->hwndIni, UM_RESCAN,
     1375                         MPFROMP(applname), MPFROMP(keyname));
     1376              WinDismissDlg(hwnd, 1);
     1377            }
     1378          }
     1379        }
     1380      }
     1381      break;
     1382
     1383    case DID_CANCEL:
     1384      WinDismissDlg(hwnd, 0);
     1385      break;
     1386
     1387    case IDM_HELP:
     1388      if (hwndHelp)
     1389        WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
     1390                   MPFROM2SHORT(HELP_INIADD, 0), MPFROMSHORT(HM_RESOURCEID));
     1391      break;
     1392    }
     1393    return 0;
    15201394  }
    1521   return WinDefDlgProc(hwnd,msg,mp1,mp2);
     1395  return WinDefDlgProc(hwnd, msg, mp1, mp2);
    15221396}
    15231397
    1524 
    1525 static ULONG    flFrameFlags = FCF_SYSMENU    | FCF_SIZEBORDER | FCF_ICON |
    1526                                FCF_TITLEBAR   | FCF_MINMAX     | FCF_MENU |
    1527                                FCF_ACCELTABLE | FCF_NOBYTEALIGN;
    1528 
    1529 HWND StartIniEditor (HWND hwnd,CHAR *fname,INT flags)
     1398static ULONG flFrameFlags = FCF_SYSMENU | FCF_SIZEBORDER | FCF_ICON |
     1399  FCF_TITLEBAR | FCF_MINMAX | FCF_MENU | FCF_ACCELTABLE | FCF_NOBYTEALIGN;
     1400
     1401HWND StartIniEditor(HWND hwnd, CHAR * fname, INT flags)
    15301402{
    15311403  /*
     
    15361408   */
    15371409
    1538   HWND  hwndFrame,hwndClient;
    1539   HINI  hINI;
    1540   HAB   useHab = (HAB)0;
     1410  HWND hwndFrame, hwndClient;
     1411  HINI hINI;
     1412  HAB useHab = (HAB) 0;
    15411413  CHAR *filename = NULL;
    15421414
    1543   if(fExternalINIs || strcmp(realappname,FM3Str))
     1415  if (fExternalINIs || strcmp(realappname, FM3Str))
    15441416    hwnd = HWND_DESKTOP;
    1545   if(hwnd != HWND_DESKTOP)
     1417  if (hwnd != HWND_DESKTOP)
    15461418    useHab = WinQueryAnchorBlock(hwnd);
    1547   if(fname && *fname) {
    1548     filename = xstrdup(fname,pszSrcFile,__LINE__);
     1419  if (fname && *fname) {
     1420    filename = xstrdup(fname, pszSrcFile, __LINE__);
    15491421    if (!filename)
    1550       return (HWND)0;
    1551     hINI = PrfOpenProfile(useHab,filename);
    1552     if(!hINI) {
     1422      return (HWND) 0;
     1423    hINI = PrfOpenProfile(useHab, filename);
     1424    if (!hINI) {
    15531425      free(filename);
    1554       return (HWND)0;
     1426      return (HWND) 0;
    15551427    }
    15561428    else
     
    15581430  }
    15591431
    1560   if(ParentIsDesktop(hwnd,hwnd))
     1432  if (ParentIsDesktop(hwnd, hwnd))
    15611433    flFrameFlags |= FCF_TASKLIST;
    15621434  hwndFrame = WinCreateStdWindow(hwnd,
    1563                                  0,
    1564                                  &flFrameFlags,
    1565                                  GetPString(IDS_WCINIEDITOR),
    1566                                  NullStr,
    1567                                  fwsAnimate,
    1568                                  FM3ModHandle,
    1569                                  INI_FRAME,
    1570                                  &hwndClient);
    1571   if(hwndFrame) {
    1572     WinSetWindowUShort(hwndFrame,QWS_ID,INI_FRAME);
    1573     if(!ParentIsDesktop(hwndFrame,hwnd) && !(flags & 2)) {
     1435                                 0,
     1436                                 &flFrameFlags,
     1437                                 GetPString(IDS_WCINIEDITOR),
     1438                                 NullStr,
     1439                                 fwsAnimate,
     1440                                 FM3ModHandle, INI_FRAME, &hwndClient);
     1441  if (hwndFrame) {
     1442    WinSetWindowUShort(hwndFrame, QWS_ID, INI_FRAME);
     1443    if (!ParentIsDesktop(hwndFrame, hwnd) && !(flags & 2)) {
    15741444
    15751445      SWP swp;
    15761446
    1577       FillClient(hwnd,&swp,NULL,FALSE);
    1578       WinSetWindowPos(hwndFrame,HWND_TOP,swp.x,swp.y,swp.cx,swp.cy,
    1579                       SWP_SIZE | SWP_MOVE);
    1580     }
    1581     else if(ParentIsDesktop(hwndFrame,hwnd)) {
    1582       if(!WinRestoreWindowPos(FM2Str,
    1583                               "INIWindowPos",
    1584                               hwndFrame)) {
    1585 
    1586         ULONG fl = SWP_MOVE | SWP_SIZE;
    1587         SWP   swp;
    1588 
    1589         WinQueryTaskSizePos(WinQueryAnchorBlock(hwndFrame),0L,&swp);
    1590         if(swp.fl & (SWP_MINIMIZE | SWP_HIDE))
    1591           fl = swp.fl;
    1592         else if(swp.fl & SWP_ACTIVATE)
    1593           fl |= SWP_ACTIVATE;
    1594         WinSetWindowPos(hwndFrame,HWND_TOP,swp.x,swp.y,swp.cx,swp.cy,fl);
    1595       }
    1596     }
    1597     PostMsg(hwndClient,UM_SELECT,MPVOID,MPVOID);
    1598     PostMsg(hwndClient,UM_ACTION,MPVOID,MPVOID);
    1599     if(!PostMsg(hwndClient,UM_LOADFILE,MPFROMP(((filename && *filename) ?
    1600                                                 filename : NULL)),
    1601                 MPVOID))
    1602       WinSendMsg(hwndClient,UM_LOADFILE,MPFROMP(((filename && *filename) ?
    1603                                                  filename : NULL)),
    1604                  MPVOID);
    1605     if(flags & 4)
    1606       PostMsg(hwndClient,UM_INITIALSIZE,MPVOID,MPVOID);
     1447      FillClient(hwnd, &swp, NULL, FALSE);
     1448      WinSetWindowPos(hwndFrame, HWND_TOP, swp.x, swp.y, swp.cx, swp.cy,
     1449                      SWP_SIZE | SWP_MOVE);
     1450    }
     1451    else if (ParentIsDesktop(hwndFrame, hwnd)) {
     1452      if (!WinRestoreWindowPos(FM2Str, "INIWindowPos", hwndFrame)) {
     1453
     1454        ULONG fl = SWP_MOVE | SWP_SIZE;
     1455        SWP swp;
     1456
     1457        WinQueryTaskSizePos(WinQueryAnchorBlock(hwndFrame), 0L, &swp);
     1458        if (swp.fl & (SWP_MINIMIZE | SWP_HIDE))
     1459          fl = swp.fl;
     1460        else if (swp.fl & SWP_ACTIVATE)
     1461          fl |= SWP_ACTIVATE;
     1462        WinSetWindowPos(hwndFrame, HWND_TOP, swp.x, swp.y, swp.cx, swp.cy,
     1463                        fl);
     1464      }
     1465    }
     1466    PostMsg(hwndClient, UM_SELECT, MPVOID, MPVOID);
     1467    PostMsg(hwndClient, UM_ACTION, MPVOID, MPVOID);
     1468    if (!PostMsg(hwndClient, UM_LOADFILE, MPFROMP(((filename && *filename) ?
     1469                                                   filename : NULL)), MPVOID))
     1470      WinSendMsg(hwndClient, UM_LOADFILE, MPFROMP(((filename && *filename) ?
     1471                                                   filename : NULL)), MPVOID);
     1472    if (flags & 4)
     1473      PostMsg(hwndClient, UM_INITIALSIZE, MPVOID, MPVOID);
    16071474  }
    1608   else if(filename)
     1475  else if (filename)
    16091476    free(filename);
    16101477  return hwndFrame;
    16111478}
    16121479
    1613 
    1614 MRESULT EXPENTRY IniLBSubProc (HWND hwnd,ULONG msg,MPARAM  mp1,MPARAM mp2)
     1480MRESULT EXPENTRY IniLBSubProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
    16151481{
    1616   PFNWP       oldproc = (PFNWP)WinQueryWindowPtr(hwnd,0);
    1617   static HWND hwndPopup = (HWND)0;
    1618 
    1619   switch(msg) {
    1620     case WM_SETFOCUS:
    1621       if(mp2)
    1622         PostMsg(WinQueryWindow(hwnd,QW_PARENT),UM_FOCUSME,mp1,mp2);
    1623       break;
    1624 
    1625     case WM_MENUEND:
    1626       if(hwndPopup == (HWND)mp2) {
    1627         WinDestroyWindow(hwndPopup);
    1628         hwndPopup = (HWND)0;
    1629       }
    1630       break;
    1631 
    1632     case WM_CONTEXTMENU:
    1633       {
    1634         USHORT id = WinQueryWindowUShort(hwnd,QWS_ID);
    1635 
    1636         switch(id) {
    1637           case INI_APPLIST:
    1638             id = INI_APPMENU;
    1639             break;
    1640           case INI_KEYLIST:
    1641             id = INI_KEYMENU;
    1642             break;
    1643           default:
    1644             id = 0;
    1645             break;
    1646         }
    1647         if(id) {
    1648           if(hwndPopup)
    1649             WinDestroyWindow(hwndPopup);
    1650           hwndPopup = WinLoadMenu(HWND_DESKTOP,FM3ModHandle,id);
    1651           if(hwndPopup)
    1652             WinPopupMenu(hwnd, WinQueryWindow(hwnd,QW_PARENT),
    1653                          hwndPopup, 8, 8, 0,
    1654                          PU_HCONSTRAIN | PU_VCONSTRAIN |
    1655                          PU_KEYBOARD   | PU_MOUSEBUTTON1);
    1656         }
    1657       }
    1658       break;
    1659 
    1660     case WM_BEGINDRAG:
    1661       {
    1662         PDRAGINFO pDInfo;
    1663         DRAGITEM  DItem;
    1664         DRAGIMAGE DIcon;
    1665         INIDATA  *inidata;
    1666         HPOINTER  hptrINI;
    1667         USHORT    id;
    1668 
    1669         id = WinQueryWindowUShort(hwnd,QWS_ID);
    1670         inidata = WinQueryWindowPtr(WinQueryWindow(hwnd,QW_PARENT),0);
    1671         if(!inidata || !*inidata->ininame || !*inidata->applname ||
    1672            !inidata->keyname) {
    1673           DosBeep(50,100);
    1674           break;
    1675         }
    1676         hptrINI = WinLoadPointer(HWND_DESKTOP,FM3ModHandle,INI_FRAME);
    1677         memset(&DItem,0,sizeof(DItem));
    1678         memset(&DIcon,0,sizeof(DIcon));
    1679         DIcon.cb = sizeof(DIcon);
    1680         DIcon.cptl = 0;
    1681         DIcon.hImage = hptrINI;
    1682         DIcon.fl = DRG_ICON;
    1683         DIcon.sizlStretch.cx = 32;
    1684         DIcon.sizlStretch.cy = 32;
    1685         DIcon.cxOffset = -16;
    1686         DIcon.cyOffset = 0;
    1687         DItem.hwndItem = hwnd;
    1688         DItem.ulItemID = 0L;
    1689         DItem.hstrType = DrgAddStrHandle(DRT_UNKNOWN);
    1690         DItem.hstrRMF =
    1691            DrgAddStrHandle("<DRM_FM2INIRECORD,DRF_FM2INI>");
    1692         DItem.hstrContainerName = DrgAddStrHandle(inidata->ininame);
    1693         DItem.hstrSourceName = DrgAddStrHandle(inidata->applname);
    1694         if(id == INI_APPLIST)
    1695           DItem.hstrTargetName = DrgAddStrHandle(NullStr);
    1696         else
    1697           DItem.hstrTargetName = DrgAddStrHandle(inidata->keyname);
    1698         DItem.fsControl = 0;
    1699         DItem.fsSupportedOps = DO_COPYABLE | DO_LINKABLE | DO_MOVEABLE;
    1700         pDInfo = DrgAllocDraginfo(1L);
    1701         DrgSetDragitem(pDInfo,&DItem,sizeof(DRAGITEM),0L);
    1702         DrgDrag(hwnd,pDInfo,&DIcon,1L,VK_ENDDRAG,(PVOID)NULL);
    1703         DrgFreeDraginfo(pDInfo);
    1704         WinDestroyPointer(hptrINI);
    1705       }
    1706       break;
    1707 
    1708     case DM_DRAGOVER:
    1709       {
    1710         PDRAGINFO pDInfo = (PDRAGINFO)mp1;
    1711         PDRAGITEM pDItem;                      /* Pointer to DRAGITEM   */
    1712 
    1713         DrgAccessDraginfo(pDInfo);             /* Access DRAGINFO       */
    1714         pDItem = DrgQueryDragitemPtr(pDInfo,   /* Access DRAGITEM       */
    1715                                      0);       /* Index to DRAGITEM     */
    1716         if(DrgVerifyRMF(pDItem,                /* Check valid rendering */
    1717                         DRM_OS2FILE,           /* mechanisms and data   */
    1718                         NULL)) {
    1719           DrgFreeDraginfo(pDInfo);             /* Free DRAGINFO         */
    1720           return(MRFROM2SHORT(DOR_DROP,        /* Return okay to drop   */
    1721                               DO_LINK));
    1722         }
    1723         else if(DrgVerifyRMF(pDItem,
    1724                              DRM_FM2INIRECORD,
    1725                              DRF_FM2INI)) {
    1726           if(WinQueryWindow(pDInfo->hwndSource,QW_PARENT) ==
    1727              WinQueryWindow(hwnd,QW_PARENT)) {
    1728             DrgFreeDraginfo(pDInfo);
    1729             return MRFROM2SHORT(DOR_NEVERDROP,0);
    1730           }
    1731           DrgFreeDraginfo(pDInfo);             /* Free DRAGINFO         */
    1732           return(MRFROM2SHORT(DOR_DROP,
    1733                               ((fCopyDefault) ?
    1734                               DO_COPY :
    1735                               DO_MOVE)));
    1736         }
    1737         DrgFreeDraginfo(pDInfo);             /* Free DRAGINFO         */
    1738         return MRFROM2SHORT(DOR_NEVERDROP,0);
    1739       }
    1740 
    1741     case DM_DRAGLEAVE:
    1742 
    1743       break;
    1744 
    1745     case DM_DROP:
    1746       {
    1747         PDRAGINFO   pDInfo = (PDRAGINFO)mp1;
    1748         PDRAGITEM   pDItem;                      /* Pointer to DRAGITEM   */
    1749         ULONG       numitems,curitem = 0L,len;
    1750         USHORT      action;
    1751         CHAR        szFrom[CCHMAXPATH + 2],szDir[CCHMAXPATH + 1],
    1752                     szTemp[CCHMAXPATH + 2];
    1753         FILESTATUS3 fsa;
    1754         INIREC      inirec;
    1755 
    1756         DrgAccessDraginfo(pDInfo);             /* Access DRAGINFO       */
    1757         numitems = DrgQueryDragitemCount(pDInfo);
    1758         while(curitem < numitems) {
    1759           pDItem = DrgQueryDragitemPtr(pDInfo,
    1760                                        curitem);
    1761           if(DrgVerifyRMF(pDItem,DRM_OS2FILE,NULL)) {
    1762             if(pDItem->fsControl & DC_PREPARE)
    1763               DrgSendTransferMsg(pDItem->hwndItem,
    1764                                  DM_ENDCONVERSATION,
    1765                                  MPFROMLONG(pDItem->ulItemID),
    1766                                  MPFROMLONG(DMFL_TARGETFAIL));
    1767             else {
    1768               if(FullDrgName(pDItem,szFrom,sizeof(szFrom)) &&
    1769                  !DosQueryPathInfo(szFrom,FIL_STANDARD,&fsa,
    1770                                    (ULONG)sizeof(FILESTATUS3)))
    1771                 WinSendMsg(WinQueryWindow(hwnd,QW_PARENT),WM_COMMAND,
    1772                            MPFROM2SHORT(IDM_COMPARE,0),MPFROMP(szFrom));
    1773               DrgSendTransferMsg(pDItem->hwndItem,
    1774                                  DM_ENDCONVERSATION,
    1775                                  MPFROMLONG(pDItem->ulItemID),
    1776                                  MPFROMLONG(DMFL_TARGETFAIL));
    1777             }
    1778           }
    1779           else if(DrgVerifyRMF(pDItem,
    1780                                DRM_FM2INIRECORD,
    1781                                DRF_FM2INI)) {
    1782             *szDir = *szFrom = *szTemp = 0;
    1783             len = DrgQueryStrName(pDItem->hstrContainerName,
    1784                                   CCHMAXPATH,szDir);
    1785             szDir[len] = 0;
    1786             len = DrgQueryStrName(pDItem->hstrSourceName,
    1787                                   CCHMAXPATH,szFrom);
    1788             szFrom[len] = 0;
    1789             len = DrgQueryStrName(pDItem->hstrTargetName,
    1790                                   CCHMAXPATH,szTemp);
    1791             szTemp[len] = 0;
    1792             switch(pDInfo->usOperation) {
    1793               case DO_MOVE:
    1794                 action = IDM_MOVE;
    1795                 break;
    1796               case DO_COPY:
    1797                 action = IDM_COPY;
    1798                 break;
    1799               default:
    1800                 action = IDM_INFO;
    1801                 break;
    1802             }
    1803             memset(&inirec,0,sizeof(inirec));
    1804             inirec.size = sizeof(inirec);
    1805             strcpy(inirec.filename2,szDir);
    1806             strcpy(inirec.app,szFrom);
    1807             strcpy(inirec.key,szTemp);
    1808             inirec.action = action;
    1809             inirec.hwndSource = WinQueryWindow(pDInfo->hwndSource,QW_PARENT);
    1810             WinSendMsg(WinQueryWindow(hwnd,QW_PARENT),WM_COMMAND,
    1811                        MPFROM2SHORT(action,0),MPFROMP(&inirec));
    1812             DrgSendTransferMsg(pDItem->hwndItem,
    1813                                DM_ENDCONVERSATION,
    1814                                MPFROMLONG(pDItem->ulItemID),
    1815                                MPFROMLONG(DMFL_TARGETFAIL));
    1816           }
    1817           curitem++;
    1818         }
    1819         DrgDeleteDraginfoStrHandles(pDInfo);
    1820         DrgFreeDraginfo(pDInfo);
    1821       }
    1822       return 0;
    1823 
    1824     case WM_DESTROY:
    1825       if(hwndPopup)
    1826         WinDestroyWindow(hwndPopup);
    1827       hwndPopup = (HWND)0;
    1828       break;
     1482  PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, 0);
     1483  static HWND hwndPopup = (HWND) 0;
     1484
     1485  switch (msg) {
     1486  case WM_SETFOCUS:
     1487    if (mp2)
     1488      PostMsg(WinQueryWindow(hwnd, QW_PARENT), UM_FOCUSME, mp1, mp2);
     1489    break;
     1490
     1491  case WM_MENUEND:
     1492    if (hwndPopup == (HWND) mp2) {
     1493      WinDestroyWindow(hwndPopup);
     1494      hwndPopup = (HWND) 0;
     1495    }
     1496    break;
     1497
     1498  case WM_CONTEXTMENU:
     1499    {
     1500      USHORT id = WinQueryWindowUShort(hwnd, QWS_ID);
     1501
     1502      switch (id) {
     1503      case INI_APPLIST:
     1504        id = INI_APPMENU;
     1505        break;
     1506      case INI_KEYLIST:
     1507        id = INI_KEYMENU;
     1508        break;
     1509      default:
     1510        id = 0;
     1511        break;
     1512      }
     1513      if (id) {
     1514        if (hwndPopup)
     1515          WinDestroyWindow(hwndPopup);
     1516        hwndPopup = WinLoadMenu(HWND_DESKTOP, FM3ModHandle, id);
     1517        if (hwndPopup)
     1518          WinPopupMenu(hwnd, WinQueryWindow(hwnd, QW_PARENT),
     1519                       hwndPopup, 8, 8, 0,
     1520                       PU_HCONSTRAIN | PU_VCONSTRAIN |
     1521                       PU_KEYBOARD | PU_MOUSEBUTTON1);
     1522      }
     1523    }
     1524    break;
     1525
     1526  case WM_BEGINDRAG:
     1527    {
     1528      PDRAGINFO pDInfo;
     1529      DRAGITEM DItem;
     1530      DRAGIMAGE DIcon;
     1531      INIDATA *inidata;
     1532      HPOINTER hptrINI;
     1533      USHORT id;
     1534
     1535      id = WinQueryWindowUShort(hwnd, QWS_ID);
     1536      inidata = WinQueryWindowPtr(WinQueryWindow(hwnd, QW_PARENT), 0);
     1537      if (!inidata || !*inidata->ininame || !*inidata->applname ||
     1538          !inidata->keyname) {
     1539        DosBeep(50, 100);
     1540        break;
     1541      }
     1542      hptrINI = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, INI_FRAME);
     1543      memset(&DItem, 0, sizeof(DItem));
     1544      memset(&DIcon, 0, sizeof(DIcon));
     1545      DIcon.cb = sizeof(DIcon);
     1546      DIcon.cptl = 0;
     1547      DIcon.hImage = hptrINI;
     1548      DIcon.fl = DRG_ICON;
     1549      DIcon.sizlStretch.cx = 32;
     1550      DIcon.sizlStretch.cy = 32;
     1551      DIcon.cxOffset = -16;
     1552      DIcon.cyOffset = 0;
     1553      DItem.hwndItem = hwnd;
     1554      DItem.ulItemID = 0L;
     1555      DItem.hstrType = DrgAddStrHandle(DRT_UNKNOWN);
     1556      DItem.hstrRMF = DrgAddStrHandle("<DRM_FM2INIRECORD,DRF_FM2INI>");
     1557      DItem.hstrContainerName = DrgAddStrHandle(inidata->ininame);
     1558      DItem.hstrSourceName = DrgAddStrHandle(inidata->applname);
     1559      if (id == INI_APPLIST)
     1560        DItem.hstrTargetName = DrgAddStrHandle(NullStr);
     1561      else
     1562        DItem.hstrTargetName = DrgAddStrHandle(inidata->keyname);
     1563      DItem.fsControl = 0;
     1564      DItem.fsSupportedOps = DO_COPYABLE | DO_LINKABLE | DO_MOVEABLE;
     1565      pDInfo = DrgAllocDraginfo(1L);
     1566      DrgSetDragitem(pDInfo, &DItem, sizeof(DRAGITEM), 0L);
     1567      DrgDrag(hwnd, pDInfo, &DIcon, 1L, VK_ENDDRAG, (PVOID) NULL);
     1568      DrgFreeDraginfo(pDInfo);
     1569      WinDestroyPointer(hptrINI);
     1570    }
     1571    break;
     1572
     1573  case DM_DRAGOVER:
     1574    {
     1575      PDRAGINFO pDInfo = (PDRAGINFO) mp1;
     1576      PDRAGITEM pDItem;         /* Pointer to DRAGITEM   */
     1577
     1578      DrgAccessDraginfo(pDInfo);        /* Access DRAGINFO       */
     1579      pDItem = DrgQueryDragitemPtr(pDInfo,      /* Access DRAGITEM       */
     1580                                   0);  /* Index to DRAGITEM     */
     1581      if (DrgVerifyRMF(pDItem,          /* Check valid rendering */
     1582                       DRM_OS2FILE,     /* mechanisms and data   */
     1583                       NULL)) {
     1584        DrgFreeDraginfo(pDInfo);        /* Free DRAGINFO         */
     1585        return (MRFROM2SHORT(DOR_DROP,  /* Return okay to drop   */
     1586                             DO_LINK));
     1587      }
     1588      else if (DrgVerifyRMF(pDItem, DRM_FM2INIRECORD, DRF_FM2INI)) {
     1589        if (WinQueryWindow(pDInfo->hwndSource, QW_PARENT) ==
     1590            WinQueryWindow(hwnd, QW_PARENT)) {
     1591          DrgFreeDraginfo(pDInfo);
     1592          return MRFROM2SHORT(DOR_NEVERDROP, 0);
     1593        }
     1594        DrgFreeDraginfo(pDInfo);        /* Free DRAGINFO         */
     1595        return (MRFROM2SHORT(DOR_DROP, ((fCopyDefault) ? DO_COPY : DO_MOVE)));
     1596      }
     1597      DrgFreeDraginfo(pDInfo);          /* Free DRAGINFO         */
     1598      return MRFROM2SHORT(DOR_NEVERDROP, 0);
     1599    }
     1600
     1601  case DM_DRAGLEAVE:
     1602
     1603    break;
     1604
     1605  case DM_DROP:
     1606    {
     1607      PDRAGINFO pDInfo = (PDRAGINFO) mp1;
     1608      PDRAGITEM pDItem;         /* Pointer to DRAGITEM   */
     1609      ULONG numitems, curitem = 0L, len;
     1610      USHORT action;
     1611      CHAR szFrom[CCHMAXPATH + 2], szDir[CCHMAXPATH + 1],
     1612        szTemp[CCHMAXPATH + 2];
     1613      FILESTATUS3 fsa;
     1614      INIREC inirec;
     1615
     1616      DrgAccessDraginfo(pDInfo);        /* Access DRAGINFO       */
     1617      numitems = DrgQueryDragitemCount(pDInfo);
     1618      while (curitem < numitems) {
     1619        pDItem = DrgQueryDragitemPtr(pDInfo, curitem);
     1620        if (DrgVerifyRMF(pDItem, DRM_OS2FILE, NULL)) {
     1621          if (pDItem->fsControl & DC_PREPARE)
     1622            DrgSendTransferMsg(pDItem->hwndItem,
     1623                               DM_ENDCONVERSATION,
     1624                               MPFROMLONG(pDItem->ulItemID),
     1625                               MPFROMLONG(DMFL_TARGETFAIL));
     1626          else {
     1627            if (FullDrgName(pDItem, szFrom, sizeof(szFrom)) &&
     1628                !DosQueryPathInfo(szFrom, FIL_STANDARD, &fsa,
     1629                                  (ULONG) sizeof(FILESTATUS3)))
     1630              WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), WM_COMMAND,
     1631                         MPFROM2SHORT(IDM_COMPARE, 0), MPFROMP(szFrom));
     1632            DrgSendTransferMsg(pDItem->hwndItem,
     1633                               DM_ENDCONVERSATION,
     1634                               MPFROMLONG(pDItem->ulItemID),
     1635                               MPFROMLONG(DMFL_TARGETFAIL));
     1636          }
     1637        }
     1638        else if (DrgVerifyRMF(pDItem, DRM_FM2INIRECORD, DRF_FM2INI)) {
     1639          *szDir = *szFrom = *szTemp = 0;
     1640          len = DrgQueryStrName(pDItem->hstrContainerName, CCHMAXPATH, szDir);
     1641          szDir[len] = 0;
     1642          len = DrgQueryStrName(pDItem->hstrSourceName, CCHMAXPATH, szFrom);
     1643          szFrom[len] = 0;
     1644          len = DrgQueryStrName(pDItem->hstrTargetName, CCHMAXPATH, szTemp);
     1645          szTemp[len] = 0;
     1646          switch (pDInfo->usOperation) {
     1647          case DO_MOVE:
     1648            action = IDM_MOVE;
     1649            break;
     1650          case DO_COPY:
     1651            action = IDM_COPY;
     1652            break;
     1653          default:
     1654            action = IDM_INFO;
     1655            break;
     1656          }
     1657          memset(&inirec, 0, sizeof(inirec));
     1658          inirec.size = sizeof(inirec);
     1659          strcpy(inirec.filename2, szDir);
     1660          strcpy(inirec.app, szFrom);
     1661          strcpy(inirec.key, szTemp);
     1662          inirec.action = action;
     1663          inirec.hwndSource = WinQueryWindow(pDInfo->hwndSource, QW_PARENT);
     1664          WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), WM_COMMAND,
     1665                     MPFROM2SHORT(action, 0), MPFROMP(&inirec));
     1666          DrgSendTransferMsg(pDItem->hwndItem,
     1667                             DM_ENDCONVERSATION,
     1668                             MPFROMLONG(pDItem->ulItemID),
     1669                             MPFROMLONG(DMFL_TARGETFAIL));
     1670        }
     1671        curitem++;
     1672      }
     1673      DrgDeleteDraginfoStrHandles(pDInfo);
     1674      DrgFreeDraginfo(pDInfo);
     1675    }
     1676    return 0;
     1677
     1678  case WM_DESTROY:
     1679    if (hwndPopup)
     1680      WinDestroyWindow(hwndPopup);
     1681    hwndPopup = (HWND) 0;
     1682    break;
    18291683  }
    1830   if(oldproc)
    1831     return oldproc(hwnd,msg,mp1,mp2);
    1832   return WinDefWindowProc(hwnd,msg,mp1,mp2);
     1684  if (oldproc)
     1685    return oldproc(hwnd, msg, mp1, mp2);
     1686  return WinDefWindowProc(hwnd, msg, mp1, mp2);
    18331687}
    18341688
    1835 
    1836 MRESULT EXPENTRY IniLBSubProc2 (HWND hwnd,ULONG msg,MPARAM  mp1,MPARAM mp2)
     1689MRESULT EXPENTRY IniLBSubProc2(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
    18371690{
    1838   PFNWP oldproc = (PFNWP)WinQueryWindowPtr(hwnd,0);
    1839 
    1840   switch(msg) {
    1841     case WM_SETFOCUS:
    1842       if(mp2)
    1843         PostMsg(WinQueryWindow(hwnd,QW_PARENT),UM_FOCUSME,mp1,mp2);
    1844       break;
     1691  PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, 0);
     1692
     1693  switch (msg) {
     1694  case WM_SETFOCUS:
     1695    if (mp2)
     1696      PostMsg(WinQueryWindow(hwnd, QW_PARENT), UM_FOCUSME, mp1, mp2);
     1697    break;
    18451698  }
    1846   if(oldproc)
    1847     return oldproc(hwnd,msg,mp1,mp2);
    1848   return WinDefWindowProc(hwnd,msg,mp1,mp2);
     1699  if (oldproc)
     1700    return oldproc(hwnd, msg, mp1, mp2);
     1701  return WinDefWindowProc(hwnd, msg, mp1, mp2);
    18491702}
    18501703
    1851 
    1852 MRESULT EXPENTRY IniProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
     1704MRESULT EXPENTRY IniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
    18531705{
    18541706  INIDATA *inidata;
    1855   SHORT    sSel;
     1707  SHORT sSel;
    18561708  PFNWP oldproc;
    18571709
    1858   switch(msg) {
    1859     case WM_CREATE:
    1860       inidata = xmallocz(sizeof(INIDATA),pszSrcFile,__LINE__);
    1861       if(!inidata) {
    1862         PostMsg(hwnd,WM_CLOSE,MPVOID,MPVOID);
    1863         break;
    1864       }
    1865       inidata->size = sizeof(INIDATA);
    1866       inidata->confirm = TRUE;
    1867       inidata->currid = INI_APPLIST;
    1868       inidata->hwndMenu = WinWindowFromID(WinQueryWindow(hwnd,QW_PARENT),
    1869                                           FID_MENU);
    1870       inidata->hwndIni = hwnd;
    1871       WinSetWindowPtr(hwnd,0,(PVOID)inidata);
    1872       WinCheckMenuItem(inidata->hwndMenu,INI_CONFIRM,inidata->confirm);
    1873 
    1874       if (!WinCreateWindow(hwnd,WC_LISTBOX,(PSZ)NULL,WS_VISIBLE | LS_HORZSCROLL |
    1875                       LS_NOADJUSTPOS, 0,0,0,0,hwnd,HWND_TOP,
    1876                       INI_APPLIST,NULL,NULL))
     1710  switch (msg) {
     1711  case WM_CREATE:
     1712    inidata = xmallocz(sizeof(INIDATA), pszSrcFile, __LINE__);
     1713    if (!inidata) {
     1714      PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
     1715      break;
     1716    }
     1717    inidata->size = sizeof(INIDATA);
     1718    inidata->confirm = TRUE;
     1719    inidata->currid = INI_APPLIST;
     1720    inidata->hwndMenu = WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
     1721                                        FID_MENU);
     1722    inidata->hwndIni = hwnd;
     1723    WinSetWindowPtr(hwnd, 0, (PVOID) inidata);
     1724    WinCheckMenuItem(inidata->hwndMenu, INI_CONFIRM, inidata->confirm);
     1725
     1726    if (!WinCreateWindow
     1727        (hwnd, WC_LISTBOX, (PSZ) NULL,
     1728         WS_VISIBLE | LS_HORZSCROLL | LS_NOADJUSTPOS, 0, 0, 0, 0, hwnd,
     1729         HWND_TOP, INI_APPLIST, NULL, NULL)) {
     1730      Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
     1731    }
     1732    if (!WinCreateWindow
     1733        (hwnd, WC_LISTBOX, (PSZ) NULL,
     1734         WS_VISIBLE | LS_HORZSCROLL | LS_NOADJUSTPOS, 0, 0, 0, 0, hwnd,
     1735         HWND_TOP, INI_KEYLIST, NULL, NULL)) {
     1736      Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
     1737    }
     1738    if (!WinCreateWindow
     1739        (hwnd, WC_LISTBOX, (PSZ) NULL,
     1740         WS_VISIBLE | LS_HORZSCROLL | LS_NOADJUSTPOS, 0, 0, 0, 0, hwnd,
     1741         HWND_TOP, INI_DATALIST, NULL, NULL)) {
     1742      Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
     1743    }
     1744    if (!WinCreateWindow(hwnd, WC_STATIC, (PSZ) NULL, WS_VISIBLE | SS_TEXT |
     1745                         DT_CENTER | DT_VCENTER, 0, 0, 0, 0, hwnd, HWND_TOP,
     1746                         INI_NUMAPPS, NULL, NULL)) {
     1747      Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
     1748    }
     1749    if (!WinCreateWindow(hwnd, WC_STATIC, (PSZ) NULL, WS_VISIBLE | SS_TEXT |
     1750                         DT_CENTER | DT_VCENTER, 0, 0, 0, 0, hwnd, HWND_TOP,
     1751                         INI_NUMKEYS, NULL, NULL)) {
     1752      Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
     1753    }
     1754    if (!WinCreateWindow(hwnd, WC_STATIC, (PSZ) NULL, WS_VISIBLE | SS_TEXT |
     1755                         DT_CENTER | DT_VCENTER, 0, 0, 0, 0, hwnd, HWND_TOP,
     1756                         INI_NUMDATA, NULL, NULL)) {
     1757      Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
     1758    }
     1759    if (!WinCreateWindow(hwnd,
     1760                         WC_STATIC,
     1761                         GetPString(IDS_APPLICATIONSTITLETEXT),
     1762                         WS_VISIBLE | SS_TEXT |
     1763                         DT_CENTER | DT_VCENTER,
     1764                         0,
     1765                         0, 0, 0, hwnd, HWND_TOP, INI_APPHDR, NULL, NULL)) {
     1766      Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
     1767    }
     1768    if (!WinCreateWindow(hwnd,
     1769                         WC_STATIC,
     1770                         GetPString(IDS_KEYWORDSTITLETEXT),
     1771                         WS_VISIBLE | SS_TEXT |
     1772                         DT_CENTER | DT_VCENTER,
     1773                         0,
     1774                         0, 0, 0, hwnd, HWND_TOP, INI_KEYHDR, NULL, NULL)) {
     1775      Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
     1776    }
     1777    if (!WinCreateWindow(hwnd,
     1778                         WC_STATIC,
     1779                         GetPString(IDS_DATABYTESTITLETEXT),
     1780                         WS_VISIBLE | SS_TEXT |
     1781                         DT_CENTER | DT_VCENTER,
     1782                         0,
     1783                         0, 0, 0, hwnd, HWND_TOP, INI_DATAHDR, NULL, NULL)) {
     1784      Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
     1785    }
     1786
     1787    inidata->hwndApp = WinWindowFromID(hwnd, INI_APPLIST);
     1788    inidata->hwndKey = WinWindowFromID(hwnd, INI_KEYLIST);
     1789    inidata->hwndData = WinWindowFromID(hwnd, INI_DATALIST);
     1790
     1791    oldproc = WinSubclassWindow(WinWindowFromID(hwnd, INI_APPLIST),
     1792                                IniLBSubProc);
     1793    WinSetWindowPtr(WinWindowFromID(hwnd, INI_APPLIST),
     1794                    QWL_USER, (PVOID) oldproc);
     1795    oldproc = WinSubclassWindow(WinWindowFromID(hwnd, INI_KEYLIST),
     1796                                IniLBSubProc);
     1797    WinSetWindowPtr(WinWindowFromID(hwnd, INI_KEYLIST),
     1798                    QWL_USER, (PVOID) oldproc);
     1799    oldproc = WinSubclassWindow(WinWindowFromID(hwnd, INI_DATALIST),
     1800                                IniLBSubProc2);
     1801    WinSetWindowPtr(WinWindowFromID(hwnd, INI_DATALIST),
     1802                    QWL_USER, (PVOID) oldproc);
     1803    break;
     1804
     1805  case UM_FOCUSME:
     1806  case WM_SETFOCUS:
     1807    if (mp2) {
     1808      if (hwndMain && fAutoView)
     1809        PostMsg(hwndMain, UM_LOADFILE, MPVOID, MPVOID);
     1810      inidata = WinQueryWindowPtr(hwnd, 0);
     1811      if (inidata && hwndStatus) {
     1812        if (*inidata->ininame) {
     1813          WinSetWindowText(hwndStatus, GetPString(IDS_INTERNALINIVIEWERTEXT));
     1814          if (hwndStatus2)
     1815            WinSetWindowText(hwndStatus2, inidata->ininame);
     1816        }
     1817        else
     1818          PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
     1819      }
     1820    }
     1821    if (msg == WM_SETFOCUS)
     1822      break;
     1823    return 0;
     1824
     1825  case UM_SELECT:
     1826    WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, INI_APPLIST));
     1827    break;
     1828
     1829  case UM_ACTION:
     1830    SetPresParams(WinWindowFromID(hwnd, INI_APPHDR),
     1831                  &RGBGREY,
     1832                  &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
     1833    SetPresParams(WinWindowFromID(hwnd, INI_KEYHDR),
     1834                  &RGBGREY,
     1835                  &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
     1836    SetPresParams(WinWindowFromID(hwnd, INI_DATAHDR),
     1837                  &RGBGREY,
     1838                  &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
     1839    SetPresParams(WinWindowFromID(hwnd, INI_NUMAPPS),
     1840                  &RGBGREY,
     1841                  &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
     1842    SetPresParams(WinWindowFromID(hwnd, INI_NUMKEYS),
     1843                  &RGBGREY,
     1844                  &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
     1845    SetPresParams(WinWindowFromID(hwnd, INI_NUMDATA),
     1846                  &RGBGREY,
     1847                  &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
     1848    if (!WinSetPresParam(WinWindowFromID(hwnd, INI_DATALIST),
     1849                         PP_FONTNAMESIZE,
     1850                         (ULONG) strlen(GetPString(IDS_5SYSTEMVIOTEXT)) + 1,
     1851                         (PVOID) GetPString(IDS_5SYSTEMVIOTEXT)))
     1852      WinSetPresParam(WinWindowFromID(hwnd, INI_DATALIST),
     1853                      PP_FONTNAMESIZE,
     1854                      (ULONG) strlen(GetPString(IDS_10SYSTEMMONOTEXT)) + 1,
     1855                      (PVOID) GetPString(IDS_10SYSTEMMONOTEXT));
     1856    RestorePresParams(hwnd, "IniUtil");
     1857    return 0;
     1858
     1859  case WM_PRESPARAMCHANGED:
     1860    PresParamChanged(hwnd, "IniUtil", mp1, mp2);
     1861    break;
     1862
     1863  case UM_RESCAN:
     1864    inidata = INSTDATA(hwnd);
     1865    if (inidata) {
     1866      if (mp1) {
     1867
     1868        SHORT numitems, sSelect;
     1869        BOOL inprofile;
     1870        ULONG size = 0L;
     1871
     1872        numitems = (SHORT) WinSendDlgItemMsg(hwnd,
     1873                                             INI_APPLIST,
     1874                                             LM_QUERYITEMCOUNT,
     1875                                             MPVOID, MPVOID);
     1876        if (!numitems) {
     1877          PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
     1878          return 0;
     1879        }
     1880        size = 0L;
     1881        if (PrfQueryProfileSize(inidata->hini,
     1882                                (CHAR *) mp1, NULL, (PULONG) & size) && size)
     1883          inprofile = TRUE;
     1884        else
     1885          inprofile = FALSE;
     1886        sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
     1887                                            INI_APPLIST,
     1888                                            LM_SEARCHSTRING,
     1889                                            MPFROM2SHORT(LSS_CASESENSITIVE,
     1890                                                         LIT_FIRST),
     1891                                            MPFROMP((CHAR *) mp1));
     1892        if (sSelect >= 0) {
     1893          if (!inprofile)
     1894            WinSendDlgItemMsg(hwnd,
     1895                              INI_APPLIST,
     1896                              LM_DELETEITEM, MPFROMSHORT(sSelect), MPVOID);
     1897          else if (!strcmp(inidata->applname, (CHAR *) mp1))
     1898            PostMsg(hwnd,
     1899                    WM_CONTROL,
     1900                    MPFROM2SHORT(INI_APPLIST, LN_SELECT),
     1901                    MPFROMLONG(WinWindowFromID(hwnd, INI_APPLIST)));
     1902        }
     1903        else if (inprofile)
     1904          WinSendDlgItemMsg(hwnd,
     1905                            INI_APPLIST,
     1906                            LM_INSERTITEM,
     1907                            MPFROM2SHORT(LIT_SORTASCENDING, 0),
     1908                            MPFROMP((CHAR *) mp1));
     1909        if (mp2 && inidata->applname) {
     1910          if (!EnumKeyNames(WinWindowFromID(hwnd, INI_KEYLIST),
     1911                            inidata->hini, inidata->applname))
     1912            PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
     1913        }
     1914      }
     1915    }
     1916    return 0;
     1917
     1918  case UM_INITIALSIZE:                  /* kludge */
     1919    inidata = WinQueryWindowPtr(hwnd, 0);
     1920    if (inidata)
     1921      inidata->dontclose = TRUE;
     1922    return 0;
     1923
     1924  case WM_SIZE:
     1925    {
     1926      SHORT cx = SHORT1FROMMP(mp2);
     1927      SHORT cy = SHORT2FROMMP(mp2);
     1928
     1929      WinSetWindowPos(WinWindowFromID(hwnd, INI_APPHDR), HWND_TOP,
     1930                      2, cy - 22, (cx / 4) - 4, 20, SWP_MOVE | SWP_SIZE);
     1931      WinSetWindowPos(WinWindowFromID(hwnd, INI_NUMAPPS), HWND_TOP,
     1932                      (cx / 4) + 2, cy - 22, (cx / 4) - 4, 20,
     1933                      SWP_MOVE | SWP_SIZE);
     1934      WinSetWindowPos(WinWindowFromID(hwnd, INI_APPLIST), HWND_TOP,
     1935                      2, (cy / 2) + 2, (cx / 2) - 4, (cy / 2) - 28,
     1936                      SWP_MOVE | SWP_SIZE);
     1937      WinSetWindowPos(WinWindowFromID(hwnd, INI_KEYHDR), HWND_TOP,
     1938                      (cx / 2) + 2, cy - 22, (cx / 4) - 4, 20,
     1939                      SWP_MOVE | SWP_SIZE);
     1940      WinSetWindowPos(WinWindowFromID(hwnd, INI_NUMKEYS), HWND_TOP,
     1941                      (cx - (cx / 4)) + 2, cy - 22, (cx / 4) - 4, 20,
     1942                      SWP_MOVE | SWP_SIZE);
     1943      WinSetWindowPos(WinWindowFromID(hwnd, INI_KEYLIST), HWND_TOP,
     1944                      (cx / 2) + 2, (cy / 2) + 2, (cx / 2) - 4, (cy / 2) - 28,
     1945                      SWP_MOVE | SWP_SIZE);
     1946      WinSetWindowPos(WinWindowFromID(hwnd, INI_DATAHDR), HWND_TOP,
     1947                      2, (cy / 2) - 22, (cx / 2) - 4, 20,
     1948                      SWP_MOVE | SWP_SIZE);
     1949      WinSetWindowPos(WinWindowFromID(hwnd, INI_NUMDATA), HWND_TOP,
     1950                      (cx / 2) + 2, (cy / 2) - 22, (cx / 2) - 4, 20,
     1951                      SWP_MOVE | SWP_SIZE);
     1952      WinSetWindowPos(WinWindowFromID(hwnd, INI_DATALIST), HWND_TOP,
     1953                      2, 2, cx - 4, (cy / 2) - 28, SWP_MOVE | SWP_SIZE);
     1954    }
     1955    break;
     1956
     1957  case UM_LOADFILE:
     1958    /* load initial file */
     1959    inidata = WinQueryWindowPtr(hwnd, 0);
     1960    if (inidata) {
     1961      if (mp1) {
     1962        strcpy(inidata->ininame, (CHAR *) mp1);
     1963        inidata->hini = PrfOpenProfile(WinQueryAnchorBlock(hwnd),
     1964                                       inidata->ininame);
     1965        free(mp1);
     1966      }
     1967      else
     1968        inidata->hini = HINI_USERPROFILE;
     1969      if (!inidata->hini) {
     1970        PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
     1971        break;
     1972      }
     1973      WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
     1974      WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
     1975      WinSetWindowPos(WinQueryWindow(hwnd, QW_PARENT),
     1976                      HWND_TOP,
     1977                      0, 0, 0, 0, SWP_SHOW | SWP_ACTIVATE | SWP_ZORDER);
     1978      EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
     1979    }
     1980    else
     1981      PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
     1982    return 0;
     1983
     1984  case WM_ERASEBACKGROUND:
     1985    WinFillRect((HPS) mp1, (PRECTL) mp2, 0x00d0d0d0);
     1986    return 0;
     1987
     1988  case WM_PAINT:
     1989    {
     1990      HPS hps;
     1991      RECTL rcl;
     1992
     1993      hps = WinBeginPaint(hwnd, (HPS) 0, NULL);
     1994      if (hps) {
     1995        WinQueryWindowRect(hwnd, &rcl);
     1996        WinFillRect(hps, &rcl, CLR_PALEGRAY);
     1997        WinEndPaint(hps);
     1998        /*
     1999         * tell status window to paint its box
     2000         */
     2001        PaintRecessedWindow(WinWindowFromID(hwnd, INI_APPHDR),
     2002                            (HPS) 0, FALSE, FALSE);
     2003        PaintRecessedWindow(WinWindowFromID(hwnd, INI_KEYHDR),
     2004                            (HPS) 0, FALSE, FALSE);
     2005        PaintRecessedWindow(WinWindowFromID(hwnd, INI_DATAHDR),
     2006                            (HPS) 0, FALSE, FALSE);
     2007        PaintRecessedWindow(WinWindowFromID(hwnd, INI_NUMAPPS),
     2008                            (HPS) 0, FALSE, FALSE);
     2009        PaintRecessedWindow(WinWindowFromID(hwnd, INI_NUMKEYS),
     2010                            (HPS) 0, FALSE, FALSE);
     2011        PaintRecessedWindow(WinWindowFromID(hwnd, INI_NUMDATA),
     2012                            (HPS) 0, FALSE, FALSE);
     2013        inidata = INSTDATA(hwnd);
     2014        if (inidata && inidata->hwndCurrent)
     2015          BoxWindow(inidata->hwndCurrent, (HPS) 0, CLR_RED);
     2016      }
     2017    }
     2018    break;
     2019
     2020  case WM_CONTROL:
     2021    switch (SHORT1FROMMP(mp1)) {
     2022    case INI_KEYLIST:
     2023    case INI_APPLIST:
     2024    case INI_DATALIST:
     2025      switch (SHORT2FROMMP(mp1)) {
     2026      case LN_SETFOCUS:
     2027        inidata = INSTDATA(hwnd);
     2028        if (inidata) {
     2029          if (inidata->hwndCurrent)
     2030            BoxWindow(inidata->hwndCurrent, (HPS) 0, CLR_PALEGRAY);
     2031          inidata->hwndCurrent = WinWindowFromID(hwnd, SHORT1FROMMP(mp1));
     2032          BoxWindow(WinWindowFromID(hwnd,
     2033                                    SHORT1FROMMP(mp1)), (HPS) 0, CLR_RED);
     2034        }
     2035        break;
     2036
     2037      case LN_ENTER:
     2038      case LN_SELECT:
     2039        if (SHORT1FROMMP(mp1) == INI_DATALIST)
     2040          break;
     2041        {
     2042          CHAR applname[CCHMAXPATH], keyname[CCHMAXPATH];
     2043          SHORT sSelect;
     2044
     2045          inidata = INSTDATA(hwnd);
     2046          if (!inidata || !inidata->hini)
     2047            break;
     2048          WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
     2049          inidata->keyindex = inidata->appindex = 0;
     2050          *applname = *keyname = *inidata->applname = *inidata->keyname = 0;
     2051          sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
     2052                                              INI_APPLIST,
     2053                                              LM_QUERYSELECTION,
     2054                                              MPFROM2SHORT(LIT_FIRST, 0),
     2055                                              MPVOID);
     2056          if (sSelect < 0)
     2057            break;
     2058          inidata->appindex = sSelect;
     2059          WinSendDlgItemMsg(hwnd,
     2060                            INI_APPLIST,
     2061                            LM_QUERYITEMTEXT,
     2062                            MPFROM2SHORT(sSelect, CCHMAXPATH - 1),
     2063                            MPFROMP(applname));
     2064          if (SHORT1FROMMP(mp1) == INI_APPLIST) {
     2065            if (!EnumKeyNames(WinWindowFromID(hwnd, INI_KEYLIST),
     2066                              inidata->hini, applname))
     2067              PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
     2068          }
     2069          else {
     2070            sSelect = (SHORT) WinSendDlgItemMsg(hwnd, INI_KEYLIST,
     2071                                                LM_QUERYSELECTION,
     2072                                                MPFROM2SHORT(LIT_FIRST, 0),
     2073                                                MPVOID);
     2074            if (sSelect < 0)
     2075              break;
     2076            inidata->keyindex = sSelect;
     2077            WinSendDlgItemMsg(hwnd,
     2078                              INI_KEYLIST,
     2079                              LM_QUERYITEMTEXT,
     2080                              MPFROM2SHORT(sSelect, CCHMAXPATH - 1),
     2081                              MPFROMP(keyname));
     2082            if (!*keyname || !*applname)
     2083              break;
     2084            strcpy(inidata->keyname, keyname);
     2085            strcpy(inidata->applname, applname);
     2086            if (inidata->data)
     2087              free(inidata->data);
     2088            inidata->data = GetKeyData(WinWindowFromID(hwnd,
     2089                                                       INI_DATALIST),
     2090                                       inidata->hini,
     2091                                       applname, keyname, &inidata->datalen);
     2092            if (!inidata->data)
     2093              PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
     2094          }
     2095        }
     2096        break;
     2097      }
     2098      break;
     2099    }
     2100    return 0;
     2101
     2102  case UM_SETDIR:
     2103    {
     2104      SHORT num;
     2105      CHAR s[81];
     2106
     2107      num = (SHORT) WinSendDlgItemMsg(hwnd,
     2108                                      INI_APPLIST,
     2109                                      LM_QUERYITEMCOUNT, MPVOID, MPVOID);
     2110      sprintf(s, "%d", num);
     2111      WinSetDlgItemText(hwnd, INI_NUMAPPS, s);
     2112      num = (SHORT) WinSendDlgItemMsg(hwnd,
     2113                                      INI_KEYLIST,
     2114                                      LM_QUERYITEMCOUNT, MPVOID, MPVOID);
     2115      sprintf(s, "%d", num);
     2116      WinSetDlgItemText(hwnd, INI_NUMKEYS, s);
     2117      WinSetDlgItemText(hwnd, INI_NUMDATA, "0");
     2118      WinSendDlgItemMsg(hwnd, INI_DATALIST, LM_DELETEALL, MPVOID, MPVOID);
     2119      inidata = WinQueryWindowPtr(hwnd, 0);
     2120    }
     2121    return 0;
     2122
     2123  case UM_SETUP:
     2124    inidata = INSTDATA(hwnd);
     2125    if (inidata) {
     2126
     2127      PRFPROFILE prfp;
     2128      CHAR sysini[CCHMAXPATH + 81];
     2129      CHAR userini[CCHMAXPATH];
     2130
     2131      memset(&prfp, 0, sizeof(PRFPROFILE));
     2132      prfp.cchUserName = CCHMAXPATH;
     2133      prfp.cchSysName = CCHMAXPATH;
     2134      prfp.pszUserName = (PSZ) userini;
     2135      prfp.pszSysName = (PSZ) sysini;
     2136      if (PrfQueryProfile(WinQueryAnchorBlock(hwnd), &prfp)) {
     2137        if (inidata->hini == HINI_SYSTEMPROFILE)
     2138          strcpy(inidata->ininame, sysini);
     2139        else if (inidata->hini == HINI_USERPROFILE)
     2140          strcpy(inidata->ininame, userini);
     2141        sprintf(sysini, GetPString(IDS_INITITLETEXT), inidata->ininame);
     2142        WinSetWindowText(WinQueryWindow(hwnd, QW_PARENT), sysini);
     2143        if (WinQueryWindow(hwnd, QW_PARENT) ==
     2144            WinQueryActiveWindow(WinQueryWindow
     2145                                 (WinQueryWindow(hwnd, QW_PARENT),
     2146                                  QW_PARENT))) {
     2147          if (hwndStatus)
     2148            WinSetWindowText(hwndStatus,
     2149                             GetPString(IDS_INTERNALINIVIEWERTEXT));
     2150          if (hwndStatus2)
     2151            WinSetWindowText(hwndStatus2, inidata->ininame);
     2152        }
     2153      }
     2154      else
     2155        WinSetWindowText(WinQueryWindow(hwnd, QW_PARENT),
     2156                         GetPString(IDS_INIQUERYPRFFAILEDTEXT));
     2157    }
     2158    else
     2159      PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
     2160    return 0;
     2161
     2162  case WM_CHAR:
     2163    if (!(SHORT1FROMMP(mp1) & KC_KEYUP)) {
     2164      if (SHORT1FROMMP(mp1) & KC_VIRTUALKEY) {
     2165        switch (SHORT2FROMMP(mp2)) {
     2166        case VK_DELETE:
     2167          inidata = INSTDATA(hwnd);
     2168          if (inidata) {
     2169
     2170            SHORT cmd;
     2171
     2172            cmd = (inidata->hwndCurrent &&
     2173                   WinQueryWindowUShort(inidata->hwndCurrent, QWS_ID) ==
     2174                   INI_APPLIST) ? INI_DELETEAPP : INI_DELETEKEY;
     2175            PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(cmd, 0), MPVOID);
     2176          }
     2177          break;
     2178        }
     2179      }
     2180    }
     2181    break;
     2182
     2183  case WM_COMMAND:
     2184    switch (SHORT1FROMMP(mp1)) {
     2185    case IDM_FINDNEXT:
     2186    case IDM_FINDFIRST:
     2187      inidata = INSTDATA(hwnd);
     2188      if (inidata) {
     2189        if (inidata->hwndCurrent) {
     2190
     2191          STRINGINPARMS sip;
     2192          static CHAR tofind[258] = "";
     2193          SHORT x, z;
     2194
     2195          if (SHORT1FROMMP(mp1) == IDM_FINDFIRST || !*tofind) {
     2196            z = LIT_FIRST;
     2197            memset(&sip, 0, sizeof(sip));
     2198            sip.help = GetPString(IDS_INISEARCHHELPTEXT);
     2199            sip.prompt = GetPString(IDS_INISEARCHPROMPTTEXT);
     2200            sip.inputlen = 257;
     2201            sip.ret = tofind;
     2202            sip.title = GetPString(IDS_INISEARCHTITLETEXT);
     2203            if (WinDlgBox(HWND_DESKTOP,
     2204                          hwnd,
     2205                          InputDlgProc, FM3ModHandle, STR_FRAME, &sip)) {
     2206              rstrip(tofind);
     2207              if (!*tofind) {
     2208                DosBeep(50, 100);
     2209                break;
     2210              }
     2211            }
     2212            else
     2213              break;
     2214          }
     2215          else {
     2216            z = (SHORT) WinSendMsg(inidata->hwndCurrent,
     2217                                   LM_QUERYSELECTION,
     2218                                   MPFROM2SHORT(LIT_CURSOR, 0), MPVOID);
     2219            if (z < 0)
     2220              z = LIT_FIRST;
     2221          }
     2222          x = (SHORT) WinSendMsg(inidata->hwndCurrent,
     2223                                 LM_SEARCHSTRING,
     2224                                 MPFROM2SHORT(LSS_SUBSTRING, z),
     2225                                 MPFROMP(tofind));
     2226          if (x >= 0 && x > z) {
     2227            WinSendMsg(inidata->hwndCurrent,
     2228                       LM_SETTOPINDEX, MPFROM2SHORT(x, 0), MPVOID);
     2229            WinSendMsg(inidata->hwndCurrent,
     2230                       LM_SELECTITEM,
     2231                       MPFROM2SHORT(x, 0), MPFROM2SHORT(TRUE, 0));
     2232          }
     2233          else
     2234            DosBeep(250, 100);
     2235        }
     2236      }
     2237      break;
     2238
     2239    case IDM_FILTER:
     2240      inidata = INSTDATA(hwnd);
     2241      if (inidata) {
     2242
     2243        SHORT numitems;
     2244
     2245        numitems = (SHORT) WinSendDlgItemMsg(hwnd,
     2246                                             INI_APPLIST,
     2247                                             LM_QUERYITEMCOUNT,
     2248                                             MPVOID, MPVOID);
     2249        if (numitems)
     2250          WinDlgBox(HWND_DESKTOP,
     2251                    hwnd,
     2252                    FilterIniProc, FM3ModHandle, IAF_FRAME, (PVOID) inidata);
     2253        else
     2254          DosBeep(50, 100);
     2255      }
     2256      break;
     2257
     2258    case IDM_COPY:
     2259    case IDM_INFO:
     2260    case IDM_MOVE:
     2261      inidata = WinQueryWindowPtr(hwnd, 0);
     2262      if (!inidata || !*inidata->ininame)
     2263        break;
     2264      if (mp2) {
     2265
     2266        INIREC *inirec;
     2267
     2268        inirec = xmallocz(sizeof(INIREC), pszSrcFile, __LINE__);
     2269        if (inirec) {
     2270          *inirec = *(INIREC *) mp2;
     2271          inirec->hwndDlg = hwnd;
     2272          inirec->confirm = inidata->confirm;
     2273          strcpy(inirec->filename1, inidata->ininame);
     2274          if (_beginthread(CopyIniThread, NULL, 122880, (PVOID) inirec) == -1) {
     2275            Runtime_Error(pszSrcFile, __LINE__,
     2276                          GetPString(IDS_COULDNTSTARTTHREADTEXT));
     2277            free(inirec);
     2278          }
     2279        }
     2280      }
     2281      break;
     2282
     2283    case IDM_COMPARE:
     2284      inidata = WinQueryWindowPtr(hwnd, 0);
     2285      if (!inidata || !*inidata->ininame)
     2286        break;
     2287      if (mp2) {
     2288
     2289        INIREC *inirec;
     2290
     2291        inirec = xmalloc(sizeof(INIREC), pszSrcFile, __LINE__);
     2292        if (inirec) {
     2293          strcpy(inirec->filename2, (CHAR *) (mp2));
     2294          strcpy(inirec->filename1, inidata->ininame);
     2295          inirec->hwndDlg = hwnd;
     2296          if (_beginthread(CompareIniThread, NULL, 122880, (PVOID) inirec) ==
     2297              -1) {
     2298            Runtime_Error(pszSrcFile, __LINE__,
     2299                          GetPString(IDS_COULDNTSTARTTHREADTEXT));
     2300            free(inirec);
     2301          }
     2302        }
     2303      }
     2304      break;
     2305
     2306    case INI_COPYAPP:
     2307    case INI_COPYKEY:
     2308    case INI_RENAMEAPP:
     2309    case INI_RENAMEKEY:
     2310      inidata = WinQueryWindowPtr(hwnd, 0);
     2311      if (!inidata ||
     2312          !*inidata->ininame ||
     2313          !*inidata->applname ||
     2314          (!*inidata->keyname &&
     2315           (SHORT1FROMMP(mp1) == INI_RENAMEKEY ||
     2316            SHORT1FROMMP(mp1) == INI_COPYKEY)))
     2317        break;
    18772318      {
    1878         Win_Error2(hwnd,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
    1879       }
    1880       if (!WinCreateWindow(hwnd,WC_LISTBOX,(PSZ)NULL,WS_VISIBLE | LS_HORZSCROLL |
    1881                       LS_NOADJUSTPOS, 0,0,0,0,hwnd,HWND_TOP,
    1882                       INI_KEYLIST,NULL,NULL))
    1883       {
    1884         Win_Error2(hwnd,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
    1885       }
    1886       if (!WinCreateWindow(hwnd,WC_LISTBOX,(PSZ)NULL,WS_VISIBLE | LS_HORZSCROLL |
    1887                       LS_NOADJUSTPOS, 0,0,0,0,hwnd,HWND_TOP,
    1888                       INI_DATALIST,NULL,NULL))
    1889       {
    1890         Win_Error2(hwnd,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
    1891       }
    1892       if (!WinCreateWindow(hwnd,WC_STATIC,(PSZ)NULL,WS_VISIBLE | SS_TEXT |
    1893                       DT_CENTER | DT_VCENTER,0,0,0,0,hwnd,HWND_TOP,
    1894                       INI_NUMAPPS,NULL,NULL))
    1895       {
    1896         Win_Error2(hwnd,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
    1897       }
    1898       if (!WinCreateWindow(hwnd,WC_STATIC,(PSZ)NULL,WS_VISIBLE | SS_TEXT |
    1899                       DT_CENTER | DT_VCENTER,0,0,0,0,hwnd,HWND_TOP,
    1900                       INI_NUMKEYS,NULL,NULL))
    1901       {
    1902         Win_Error2(hwnd,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
    1903       }
    1904       if (!WinCreateWindow(hwnd,WC_STATIC,(PSZ)NULL,WS_VISIBLE | SS_TEXT |
    1905                       DT_CENTER | DT_VCENTER,0,0,0,0,hwnd,HWND_TOP,
    1906                       INI_NUMDATA,NULL,NULL))
    1907       {
    1908         Win_Error2(hwnd,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
    1909       }
    1910       if (!WinCreateWindow(hwnd,
    1911                       WC_STATIC,
    1912                       GetPString(IDS_APPLICATIONSTITLETEXT),
    1913                       WS_VISIBLE | SS_TEXT |
    1914                       DT_CENTER | DT_VCENTER,
    1915                       0,
    1916                       0,
    1917                       0,
    1918                       0,
    1919                       hwnd,
    1920                       HWND_TOP,
    1921                       INI_APPHDR,
    1922                       NULL,
    1923                       NULL))
    1924       {
    1925         Win_Error2(hwnd,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
    1926       }
    1927       if (!WinCreateWindow(hwnd,
    1928                       WC_STATIC,
    1929                       GetPString(IDS_KEYWORDSTITLETEXT),
    1930                       WS_VISIBLE | SS_TEXT |
    1931                       DT_CENTER | DT_VCENTER,
    1932                       0,
    1933                       0,
    1934                       0,
    1935                       0,
    1936                       hwnd,
    1937                       HWND_TOP,
    1938                       INI_KEYHDR,
    1939                       NULL,
    1940                       NULL))
    1941       {
    1942         Win_Error2(hwnd,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
    1943       }
    1944       if (!WinCreateWindow(hwnd,
    1945                       WC_STATIC,
    1946                       GetPString(IDS_DATABYTESTITLETEXT),
    1947                       WS_VISIBLE | SS_TEXT |
    1948                       DT_CENTER | DT_VCENTER,
    1949                       0,
    1950                       0,
    1951                       0,
    1952                       0,
    1953                       hwnd,
    1954                       HWND_TOP,
    1955                       INI_DATAHDR,
    1956                       NULL,
    1957                       NULL))
    1958       {
    1959         Win_Error2(hwnd,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
    1960       }
    1961 
    1962       inidata->hwndApp = WinWindowFromID(hwnd,INI_APPLIST);
    1963       inidata->hwndKey = WinWindowFromID(hwnd,INI_KEYLIST);
    1964       inidata->hwndData = WinWindowFromID(hwnd,INI_DATALIST);
    1965 
    1966       oldproc = WinSubclassWindow(WinWindowFromID(hwnd,INI_APPLIST),
    1967                                   IniLBSubProc);
    1968       WinSetWindowPtr(WinWindowFromID(hwnd,INI_APPLIST),
    1969                       QWL_USER,
    1970                       (PVOID)oldproc);
    1971       oldproc = WinSubclassWindow(WinWindowFromID(hwnd,INI_KEYLIST),
    1972                                   IniLBSubProc);
    1973       WinSetWindowPtr(WinWindowFromID(hwnd,INI_KEYLIST),
    1974                       QWL_USER,
    1975                       (PVOID)oldproc);
    1976       oldproc = WinSubclassWindow(WinWindowFromID(hwnd,INI_DATALIST),
    1977                                   IniLBSubProc2);
    1978       WinSetWindowPtr(WinWindowFromID(hwnd,INI_DATALIST),
    1979                       QWL_USER,
    1980                       (PVOID)oldproc);
    1981       break;
    1982 
    1983     case UM_FOCUSME:
    1984     case WM_SETFOCUS:
    1985       if(mp2) {
    1986         if(hwndMain && fAutoView)
    1987           PostMsg(hwndMain,
    1988                   UM_LOADFILE,
    1989                   MPVOID,
    1990                   MPVOID);
    1991         inidata = WinQueryWindowPtr(hwnd,0);
    1992         if(inidata && hwndStatus) {
    1993           if(*inidata->ininame) {
    1994             WinSetWindowText(hwndStatus,
    1995                              GetPString(IDS_INTERNALINIVIEWERTEXT));
    1996             if(hwndStatus2)
    1997               WinSetWindowText(hwndStatus2,
    1998                                inidata->ininame);
    1999           }
    2000           else
    2001             PostMsg(hwnd,
    2002                     UM_SETUP,
    2003                     MPVOID,
    2004                     MPVOID);
    2005         }
    2006       }
    2007       if(msg == WM_SETFOCUS)
    2008         break;
    2009       return 0;
    2010 
    2011     case UM_SELECT:
    2012       WinSetFocus(HWND_DESKTOP,
    2013                   WinWindowFromID(hwnd,INI_APPLIST));
    2014       break;
    2015 
    2016     case UM_ACTION:
    2017       SetPresParams(WinWindowFromID(hwnd,INI_APPHDR),
    2018                     &RGBGREY,
    2019                     &RGBBLACK,
    2020                     &RGBBLACK,
    2021                     GetPString(IDS_8HELVBOLDTEXT));
    2022       SetPresParams(WinWindowFromID(hwnd,INI_KEYHDR),
    2023                     &RGBGREY,
    2024                     &RGBBLACK,
    2025                     &RGBBLACK,
    2026                     GetPString(IDS_8HELVBOLDTEXT));
    2027       SetPresParams(WinWindowFromID(hwnd,INI_DATAHDR),
    2028                     &RGBGREY,
    2029                     &RGBBLACK,
    2030                     &RGBBLACK,
    2031                     GetPString(IDS_8HELVBOLDTEXT));
    2032       SetPresParams(WinWindowFromID(hwnd,INI_NUMAPPS),
    2033                     &RGBGREY,
    2034                     &RGBBLACK,
    2035                     &RGBBLACK,
    2036                     GetPString(IDS_8HELVBOLDTEXT));
    2037       SetPresParams(WinWindowFromID(hwnd,INI_NUMKEYS),
    2038                     &RGBGREY,
    2039                     &RGBBLACK,
    2040                     &RGBBLACK,
    2041                     GetPString(IDS_8HELVBOLDTEXT));
    2042       SetPresParams(WinWindowFromID(hwnd,INI_NUMDATA),
    2043                     &RGBGREY,
    2044                     &RGBBLACK,
    2045                     &RGBBLACK,
    2046                     GetPString(IDS_8HELVBOLDTEXT));
    2047       if(!WinSetPresParam(WinWindowFromID(hwnd,INI_DATALIST),
    2048                           PP_FONTNAMESIZE,
    2049                           (ULONG)strlen(GetPString(IDS_5SYSTEMVIOTEXT)) + 1,
    2050                           (PVOID)GetPString(IDS_5SYSTEMVIOTEXT)))
    2051         WinSetPresParam(WinWindowFromID(hwnd,INI_DATALIST),
    2052                         PP_FONTNAMESIZE,
    2053                         (ULONG)strlen(GetPString(IDS_10SYSTEMMONOTEXT)) + 1,
    2054                         (PVOID)GetPString(IDS_10SYSTEMMONOTEXT));
    2055       RestorePresParams(hwnd,
    2056                         "IniUtil");
    2057       return 0;
    2058 
    2059     case WM_PRESPARAMCHANGED:
    2060       PresParamChanged(hwnd,
    2061                        "IniUtil",
    2062                        mp1,
    2063                        mp2);
    2064       break;
    2065 
    2066     case UM_RESCAN:
     2319        INIREC *inirec;
     2320
     2321        inirec = xmallocz(sizeof(INIREC), pszSrcFile, __LINE__);
     2322        if (inirec) {
     2323          inirec->size = sizeof(INIREC);
     2324          inirec->hwndDlg = hwnd;
     2325          inirec->confirm = inidata->confirm;
     2326          inirec->action = (SHORT1FROMMP(mp1) == INI_COPYAPP ||
     2327                            SHORT1FROMMP(mp1) == INI_COPYKEY) ?
     2328            IDM_COPY : IDM_MOVE;
     2329          strcpy(inirec->filename1, inidata->ininame);
     2330          strcpy(inirec->filename2, inidata->ininame);
     2331          if (SHORT1FROMMP(mp1) == INI_COPYKEY ||
     2332              SHORT1FROMMP(mp1) == INI_RENAMEKEY)
     2333            strcpy(inirec->key, inidata->keyname);
     2334          strcpy(inirec->app, inidata->applname);
     2335          if (!WinDlgBox(HWND_DESKTOP,
     2336                         hwnd,
     2337                         IntraIniProc,
     2338                         FM3ModHandle, INII_FRAME, (PVOID) inirec)) {
     2339            free(inirec);
     2340            break;
     2341          }
     2342          if (_beginthread(CopyIniThread, NULL, 122880, (PVOID) inirec) == -1) {
     2343            Runtime_Error(pszSrcFile, __LINE__,
     2344                          GetPString(IDS_COULDNTSTARTTHREADTEXT));
     2345            free(inirec);
     2346          }
     2347        }
     2348      }
     2349      break;
     2350
     2351    case INI_BACKUPINI:
    20672352      inidata = INSTDATA(hwnd);
    2068       if(inidata) {
    2069         if(mp1) {
    2070 
    2071           SHORT numitems,sSelect;
    2072           BOOL  inprofile;
    2073           ULONG size = 0L;
    2074 
    2075           numitems = (SHORT)WinSendDlgItemMsg(hwnd,
    2076                                               INI_APPLIST,
    2077                                               LM_QUERYITEMCOUNT,
    2078                                               MPVOID,
    2079                                               MPVOID);
    2080           if(!numitems) {
    2081             PostMsg(hwnd,
    2082                     WM_COMMAND,
    2083                     MPFROM2SHORT(INI_REFRESH,0),
    2084                     MPVOID);
    2085             return 0;
    2086           }
    2087           size = 0L;
    2088           if(PrfQueryProfileSize(inidata->hini,
    2089                                  (CHAR *)mp1,
    2090                                  NULL,
    2091                                  (PULONG)&size) &&
    2092              size)
    2093             inprofile = TRUE;
    2094           else
    2095             inprofile = FALSE;
    2096           sSelect = (SHORT)WinSendDlgItemMsg(hwnd,
    2097                                              INI_APPLIST,
    2098                                              LM_SEARCHSTRING,
    2099                                              MPFROM2SHORT(LSS_CASESENSITIVE,
    2100                                                           LIT_FIRST),
    2101                                              MPFROMP((CHAR *)mp1));
    2102           if(sSelect >= 0) {
    2103             if(!inprofile)
    2104               WinSendDlgItemMsg(hwnd,
    2105                                 INI_APPLIST,
    2106                                 LM_DELETEITEM,
    2107                                 MPFROMSHORT(sSelect),
    2108                                 MPVOID);
    2109             else if(!strcmp(inidata->applname,(CHAR *)mp1))
    2110               PostMsg(hwnd,
    2111                       WM_CONTROL,
    2112                       MPFROM2SHORT(INI_APPLIST,LN_SELECT),
    2113                       MPFROMLONG(WinWindowFromID(hwnd,INI_APPLIST)));
    2114           }
    2115           else if(inprofile)
    2116             WinSendDlgItemMsg(hwnd,
    2117                               INI_APPLIST,
    2118                               LM_INSERTITEM,
    2119                               MPFROM2SHORT(LIT_SORTASCENDING,0),
    2120                               MPFROMP((CHAR *)mp1));
    2121           if(mp2 && inidata->applname) {
    2122             if(!EnumKeyNames(WinWindowFromID(hwnd,INI_KEYLIST),
    2123                              inidata->hini,inidata->applname))
    2124               PostMsg(hwnd,
    2125                       WM_COMMAND,
    2126                       MPFROM2SHORT(INI_REFRESH,0),
    2127                       MPVOID);
    2128           }
    2129         }
    2130       }
    2131       return 0;
    2132 
    2133     case UM_INITIALSIZE: /* kludge */
    2134       inidata = WinQueryWindowPtr(hwnd,0);
    2135       if(inidata)
    2136         inidata->dontclose = TRUE;
    2137       return 0;
    2138 
    2139     case WM_SIZE:
    2140       {
    2141         SHORT cx = SHORT1FROMMP(mp2);
    2142         SHORT cy = SHORT2FROMMP(mp2);
    2143 
    2144         WinSetWindowPos(WinWindowFromID(hwnd,INI_APPHDR),HWND_TOP,
    2145                         2,cy - 22,(cx / 4) - 4,20,
    2146                         SWP_MOVE | SWP_SIZE);
    2147         WinSetWindowPos(WinWindowFromID(hwnd,INI_NUMAPPS),HWND_TOP,
    2148                         (cx / 4) + 2,cy - 22,(cx / 4) - 4,20,
    2149                         SWP_MOVE | SWP_SIZE);
    2150         WinSetWindowPos(WinWindowFromID(hwnd,INI_APPLIST),HWND_TOP,
    2151                         2,(cy / 2) + 2,(cx / 2) - 4,(cy / 2) - 28,
    2152                         SWP_MOVE | SWP_SIZE);
    2153         WinSetWindowPos(WinWindowFromID(hwnd,INI_KEYHDR),HWND_TOP,
    2154                         (cx / 2) + 2,cy - 22,(cx / 4) - 4,20,
    2155                         SWP_MOVE | SWP_SIZE);
    2156         WinSetWindowPos(WinWindowFromID(hwnd,INI_NUMKEYS),HWND_TOP,
    2157                         (cx - (cx / 4)) + 2,cy - 22,(cx / 4) - 4,20,
    2158                         SWP_MOVE | SWP_SIZE);
    2159         WinSetWindowPos(WinWindowFromID(hwnd,INI_KEYLIST),HWND_TOP,
    2160                         (cx / 2) + 2,(cy / 2) + 2,(cx / 2) - 4,(cy / 2) - 28,
    2161                         SWP_MOVE | SWP_SIZE);
    2162         WinSetWindowPos(WinWindowFromID(hwnd,INI_DATAHDR),HWND_TOP,
    2163                         2,(cy / 2) - 22,(cx / 2) - 4,20,
    2164                         SWP_MOVE | SWP_SIZE);
    2165         WinSetWindowPos(WinWindowFromID(hwnd,INI_NUMDATA),HWND_TOP,
    2166                         (cx / 2) + 2,(cy / 2) - 22,(cx / 2) - 4,20,
    2167                         SWP_MOVE | SWP_SIZE);
    2168         WinSetWindowPos(WinWindowFromID(hwnd,INI_DATALIST),HWND_TOP,
    2169                         2,2,cx - 4,(cy / 2) - 28,
    2170                         SWP_MOVE | SWP_SIZE);
    2171       }
    2172       break;
    2173 
    2174     case UM_LOADFILE:
    2175       /* load initial file */
    2176       inidata = WinQueryWindowPtr(hwnd,0);
    2177       if(inidata) {
    2178         if(mp1) {
    2179           strcpy(inidata->ininame,(CHAR *)mp1);
    2180           inidata->hini = PrfOpenProfile(WinQueryAnchorBlock(hwnd),
    2181                                          inidata->ininame);
    2182           free(mp1);
    2183         }
    2184         else
    2185           inidata->hini = HINI_USERPROFILE;
    2186         if(!inidata->hini) {
    2187           PostMsg(hwnd,
    2188                   WM_CLOSE,
    2189                   MPVOID,
    2190                   MPVOID);
    2191           break;
    2192         }
    2193         WinSendMsg(hwnd,
    2194                    UM_SETUP,
    2195                    MPVOID,
    2196                    MPVOID);
    2197         WinSendMsg(hwnd,
    2198                    UM_SETDIR,
    2199                    MPVOID,
    2200                    MPVOID);
    2201         WinSetWindowPos(WinQueryWindow(hwnd,QW_PARENT),
    2202                         HWND_TOP,
    2203                         0,
    2204                         0,
    2205                         0,
    2206                         0,
    2207                         SWP_SHOW | SWP_ACTIVATE | SWP_ZORDER);
    2208         EnumAppNames(WinWindowFromID(hwnd,INI_APPLIST),
    2209                      inidata->hini);
    2210       }
    2211       else
    2212         PostMsg(hwnd,
    2213                 WM_CLOSE,
    2214                 MPVOID,
    2215                 MPVOID);
    2216       return 0;
    2217 
    2218     case WM_ERASEBACKGROUND:
    2219       WinFillRect((HPS)mp1,
    2220                   (PRECTL)mp2,
    2221                   0x00d0d0d0);
    2222       return 0;
    2223 
    2224     case WM_PAINT:
    2225       {
    2226         HPS    hps;
    2227         RECTL  rcl;
    2228 
    2229         hps = WinBeginPaint(hwnd,(HPS)0,NULL);
    2230         if(hps) {
    2231           WinQueryWindowRect(hwnd,&rcl);
    2232           WinFillRect(hps,
    2233                       &rcl,
    2234                       CLR_PALEGRAY);
    2235           WinEndPaint(hps);
    2236           /*
    2237            * tell status window to paint its box
    2238            */
    2239           PaintRecessedWindow(WinWindowFromID(hwnd,INI_APPHDR),
    2240                               (HPS)0,
    2241                               FALSE,
    2242                               FALSE);
    2243           PaintRecessedWindow(WinWindowFromID(hwnd,INI_KEYHDR),
    2244                               (HPS)0,
    2245                               FALSE,
    2246                               FALSE);
    2247           PaintRecessedWindow(WinWindowFromID(hwnd,INI_DATAHDR),
    2248                               (HPS)0,
    2249                               FALSE,
    2250                               FALSE);
    2251           PaintRecessedWindow(WinWindowFromID(hwnd,INI_NUMAPPS),
    2252                               (HPS)0,
    2253                               FALSE,
    2254                               FALSE);
    2255           PaintRecessedWindow(WinWindowFromID(hwnd,INI_NUMKEYS),
    2256                               (HPS)0,
    2257                               FALSE,
    2258                               FALSE);
    2259           PaintRecessedWindow(WinWindowFromID(hwnd,INI_NUMDATA),
    2260                               (HPS)0,
    2261                               FALSE,
    2262                               FALSE);
    2263           inidata = INSTDATA(hwnd);
    2264           if(inidata && inidata->hwndCurrent)
    2265             BoxWindow(inidata->hwndCurrent,(HPS)0,CLR_RED);
    2266         }
    2267       }
    2268       break;
    2269 
    2270     case WM_CONTROL:
    2271       switch(SHORT1FROMMP(mp1)) {
    2272         case INI_KEYLIST:
    2273         case INI_APPLIST:
    2274         case INI_DATALIST:
    2275           switch(SHORT2FROMMP(mp1)) {
    2276             case LN_SETFOCUS:
    2277               inidata = INSTDATA(hwnd);
    2278               if(inidata) {
    2279                 if(inidata->hwndCurrent)
    2280                   BoxWindow(inidata->hwndCurrent,
    2281                             (HPS)0,
    2282                             CLR_PALEGRAY);
    2283                 inidata->hwndCurrent = WinWindowFromID(hwnd,
    2284                                                        SHORT1FROMMP(mp1));
    2285                 BoxWindow(WinWindowFromID(hwnd,
    2286                                           SHORT1FROMMP(mp1)),
    2287                           (HPS)0,
    2288                           CLR_RED);
    2289               }
    2290               break;
    2291 
    2292             case LN_ENTER:
    2293             case LN_SELECT:
    2294               if(SHORT1FROMMP(mp1) == INI_DATALIST)
    2295                 break;
    2296               {
    2297                 CHAR  applname[CCHMAXPATH],keyname[CCHMAXPATH];
    2298                 SHORT sSelect;
    2299 
    2300                 inidata = INSTDATA(hwnd);
    2301                 if(!inidata || !inidata->hini)
    2302                   break;
    2303                 WinSendMsg(hwnd,UM_SETDIR,MPVOID,MPVOID);
    2304                 inidata->keyindex = inidata->appindex = 0;
    2305                 *applname = *keyname = *inidata->applname =
    2306                   *inidata->keyname = 0;
    2307                 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,
    2308                                                    INI_APPLIST,
    2309                                                    LM_QUERYSELECTION,
    2310                                                    MPFROM2SHORT(LIT_FIRST,0),
    2311                                                    MPVOID);
    2312                 if(sSelect < 0)
    2313                   break;
    2314                 inidata->appindex = sSelect;
    2315                 WinSendDlgItemMsg(hwnd,
    2316                                   INI_APPLIST,
    2317                                   LM_QUERYITEMTEXT,
    2318                                   MPFROM2SHORT(sSelect,CCHMAXPATH - 1),
    2319                                   MPFROMP(applname));
    2320                 if(SHORT1FROMMP(mp1) == INI_APPLIST) {
    2321                   if(!EnumKeyNames(WinWindowFromID(hwnd,INI_KEYLIST),
    2322                                    inidata->hini,
    2323                                    applname))
    2324                     PostMsg(hwnd,
    2325                             WM_COMMAND,
    2326                             MPFROM2SHORT(INI_REFRESH,0),
    2327                             MPVOID);
    2328                 }
    2329                 else {
    2330                   sSelect = (SHORT)WinSendDlgItemMsg(hwnd,INI_KEYLIST,
    2331                                                      LM_QUERYSELECTION,
    2332                                                      MPFROM2SHORT(LIT_FIRST,0),
    2333                                                      MPVOID);
    2334                   if(sSelect < 0)
    2335                     break;
    2336                   inidata->keyindex = sSelect;
    2337                   WinSendDlgItemMsg(hwnd,
    2338                                     INI_KEYLIST,
    2339                                     LM_QUERYITEMTEXT,
    2340                                     MPFROM2SHORT(sSelect,CCHMAXPATH - 1),
    2341                                     MPFROMP(keyname));
    2342                   if(!*keyname || !*applname)
    2343                     break;
    2344                   strcpy(inidata->keyname,keyname);
    2345                   strcpy(inidata->applname,applname);
    2346                   if(inidata->data)
    2347                     free(inidata->data);
    2348                   inidata->data = GetKeyData(WinWindowFromID(hwnd,
    2349                                                              INI_DATALIST),
    2350                                              inidata->hini,
    2351                                              applname,
    2352                                              keyname,
    2353                                              &inidata->datalen);
    2354                   if(!inidata->data)
    2355                     PostMsg(hwnd,
    2356                             WM_COMMAND,
    2357                             MPFROM2SHORT(INI_REFRESH,0),
    2358                             MPVOID);
    2359                 }
    2360               }
    2361               break;
    2362           }
    2363           break;
    2364       }
    2365       return 0;
    2366 
    2367     case UM_SETDIR:
    2368       {
    2369         SHORT num;
    2370         CHAR  s[81];
    2371 
    2372         num = (SHORT)WinSendDlgItemMsg(hwnd,
    2373                                        INI_APPLIST,
    2374                                        LM_QUERYITEMCOUNT,
    2375                                        MPVOID,
    2376                                        MPVOID);
    2377         sprintf(s,"%d",num);
    2378         WinSetDlgItemText(hwnd,INI_NUMAPPS,s);
    2379         num = (SHORT)WinSendDlgItemMsg(hwnd,
    2380                                        INI_KEYLIST,
    2381                                        LM_QUERYITEMCOUNT,
    2382                                        MPVOID,
    2383                                        MPVOID);
    2384         sprintf(s,"%d",num);
    2385         WinSetDlgItemText(hwnd,
    2386                           INI_NUMKEYS,
    2387                           s);
    2388         WinSetDlgItemText(hwnd,
    2389                           INI_NUMDATA,
    2390                           "0");
    2391         WinSendDlgItemMsg(hwnd,
    2392                           INI_DATALIST,
    2393                           LM_DELETEALL,
    2394                           MPVOID,
    2395                           MPVOID);
    2396         inidata = WinQueryWindowPtr(hwnd,0);
    2397       }
    2398       return 0;
    2399 
    2400     case UM_SETUP:
    2401       inidata = INSTDATA(hwnd);
    2402       if(inidata) {
    2403 
    2404         PRFPROFILE prfp;
    2405         CHAR       sysini[CCHMAXPATH + 81];
    2406         CHAR       userini[CCHMAXPATH];
    2407 
    2408         memset(&prfp,0,sizeof(PRFPROFILE));
    2409         prfp.cchUserName = CCHMAXPATH;
    2410         prfp.cchSysName = CCHMAXPATH;
    2411         prfp.pszUserName = (PSZ)userini;
    2412         prfp.pszSysName = (PSZ)sysini;
    2413         if(PrfQueryProfile(WinQueryAnchorBlock(hwnd),&prfp)) {
    2414           if(inidata->hini == HINI_SYSTEMPROFILE)
    2415             strcpy(inidata->ininame,sysini);
    2416           else if(inidata->hini == HINI_USERPROFILE)
    2417             strcpy(inidata->ininame,userini);
    2418           sprintf(sysini,
    2419                   GetPString(IDS_INITITLETEXT),
    2420                   inidata->ininame);
    2421           WinSetWindowText(WinQueryWindow(hwnd,QW_PARENT),
    2422                            sysini);
    2423           if(WinQueryWindow(hwnd,QW_PARENT) ==
    2424              WinQueryActiveWindow(WinQueryWindow(WinQueryWindow(hwnd,QW_PARENT),
    2425                                   QW_PARENT))) {
    2426             if(hwndStatus)
    2427               WinSetWindowText(hwndStatus,
    2428                                GetPString(IDS_INTERNALINIVIEWERTEXT));
    2429             if(hwndStatus2)
    2430               WinSetWindowText(hwndStatus2,
    2431                                inidata->ininame);
    2432           }
    2433         }
    2434         else
    2435           WinSetWindowText(WinQueryWindow(hwnd,QW_PARENT),
    2436                            GetPString(IDS_INIQUERYPRFFAILEDTEXT));
    2437       }
    2438       else
    2439         PostMsg(hwnd,
    2440                 WM_CLOSE,
    2441                 MPVOID,
    2442                 MPVOID);
    2443       return 0;
    2444 
    2445     case WM_CHAR:
    2446       if(!(SHORT1FROMMP(mp1) & KC_KEYUP)) {
    2447         if(SHORT1FROMMP(mp1) & KC_VIRTUALKEY) {
    2448           switch(SHORT2FROMMP(mp2)) {
    2449             case VK_DELETE:
    2450               inidata = INSTDATA(hwnd);
    2451               if(inidata) {
    2452 
    2453                 SHORT cmd;
    2454 
    2455                 cmd = (inidata->hwndCurrent &&
    2456                        WinQueryWindowUShort(inidata->hwndCurrent,QWS_ID) ==
    2457                          INI_APPLIST) ? INI_DELETEAPP : INI_DELETEKEY;
    2458                 PostMsg(hwnd,
    2459                         WM_COMMAND,
    2460                         MPFROM2SHORT(cmd,0),
    2461                         MPVOID);
    2462               }
    2463               break;
    2464           }
    2465         }
    2466       }
    2467       break;
    2468 
    2469     case WM_COMMAND:
    2470       switch(SHORT1FROMMP(mp1)) {
    2471         case IDM_FINDNEXT:
    2472         case IDM_FINDFIRST:
    2473           inidata = INSTDATA(hwnd);
    2474           if(inidata) {
    2475             if(inidata->hwndCurrent) {
    2476 
    2477               STRINGINPARMS sip;
    2478               static CHAR   tofind[258] = "";
    2479               SHORT         x,z;
    2480 
    2481               if(SHORT1FROMMP(mp1) == IDM_FINDFIRST || !*tofind) {
    2482                 z = LIT_FIRST;
    2483                 memset(&sip,0,sizeof(sip));
    2484                 sip.help = GetPString(IDS_INISEARCHHELPTEXT);
    2485                 sip.prompt = GetPString(IDS_INISEARCHPROMPTTEXT);
    2486                 sip.inputlen = 257;
    2487                 sip.ret = tofind;
    2488                 sip.title = GetPString(IDS_INISEARCHTITLETEXT);
    2489                 if(WinDlgBox(HWND_DESKTOP,
    2490                              hwnd,
    2491                              InputDlgProc,
    2492                              FM3ModHandle,
    2493                              STR_FRAME,
    2494                              &sip)) {
    2495                   rstrip(tofind);
    2496                   if (!*tofind) {
    2497                     DosBeep(50,100);
    2498                     break;
    2499                   }
    2500                 }
    2501                 else
    2502                   break;
    2503               }
    2504               else {
    2505                 z = (SHORT)WinSendMsg(inidata->hwndCurrent,
    2506                                       LM_QUERYSELECTION,
    2507                                       MPFROM2SHORT(LIT_CURSOR,0),
    2508                                       MPVOID);
    2509                 if(z < 0)
    2510                   z = LIT_FIRST;
    2511               }
    2512               x = (SHORT)WinSendMsg(inidata->hwndCurrent,
    2513                                     LM_SEARCHSTRING,
    2514                                     MPFROM2SHORT(LSS_SUBSTRING,z),
    2515                                     MPFROMP(tofind));
    2516               if(x >= 0  && x > z) {
    2517                 WinSendMsg(inidata->hwndCurrent,
    2518                            LM_SETTOPINDEX,
    2519                            MPFROM2SHORT(x,0),
    2520                            MPVOID);
    2521                 WinSendMsg(inidata->hwndCurrent,
    2522                            LM_SELECTITEM,
    2523                            MPFROM2SHORT(x,0),
    2524                            MPFROM2SHORT(TRUE,0));
    2525               }
    2526               else
    2527                 DosBeep(250,100);
    2528             }
    2529           }
    2530           break;
    2531 
    2532         case IDM_FILTER:
    2533           inidata = INSTDATA(hwnd);
    2534           if(inidata) {
    2535 
    2536             SHORT numitems;
    2537 
    2538             numitems = (SHORT)WinSendDlgItemMsg(hwnd,
    2539                                                 INI_APPLIST,
    2540                                                 LM_QUERYITEMCOUNT,
    2541                                                 MPVOID,
    2542                                                 MPVOID);
    2543             if(numitems)
    2544               WinDlgBox(HWND_DESKTOP,
    2545                         hwnd,
    2546                         FilterIniProc,
    2547                         FM3ModHandle,
    2548                         IAF_FRAME,
    2549                         (PVOID)inidata);
    2550             else
    2551               DosBeep(50,100);
    2552           }
    2553           break;
    2554 
    2555         case IDM_COPY:
    2556         case IDM_INFO:
    2557         case IDM_MOVE:
    2558           inidata = WinQueryWindowPtr(hwnd,0);
    2559           if(!inidata || !*inidata->ininame)
    2560             break;
    2561           if(mp2) {
    2562 
    2563             INIREC *inirec;
    2564 
    2565             inirec = xmallocz(sizeof(INIREC),pszSrcFile,__LINE__);
    2566             if(inirec) {
    2567               *inirec = *(INIREC *)mp2;
    2568               inirec->hwndDlg = hwnd;
    2569               inirec->confirm = inidata->confirm;
    2570               strcpy(inirec->filename1,inidata->ininame);
    2571               if (_beginthread(CopyIniThread,NULL,122880,(PVOID)inirec) == -1) {
    2572                 Runtime_Error(pszSrcFile, __LINE__, GetPString(IDS_COULDNTSTARTTHREADTEXT));
    2573                 free(inirec);
    2574               }
    2575             }
    2576           }
    2577           break;
    2578 
    2579         case IDM_COMPARE:
    2580           inidata = WinQueryWindowPtr(hwnd,0);
    2581           if(!inidata || !*inidata->ininame)
    2582             break;
    2583           if(mp2) {
    2584 
    2585             INIREC *inirec;
    2586 
    2587             inirec = xmalloc(sizeof(INIREC),pszSrcFile,__LINE__);
    2588             if (inirec) {
    2589               strcpy(inirec->filename2,(CHAR *)(mp2));
    2590               strcpy(inirec->filename1,inidata->ininame);
    2591               inirec->hwndDlg = hwnd;
    2592               if (_beginthread(CompareIniThread,NULL,122880,(PVOID)inirec) == -1) {
    2593                 Runtime_Error(pszSrcFile, __LINE__, GetPString(IDS_COULDNTSTARTTHREADTEXT));
    2594                 free(inirec);
    2595               }
    2596             }
    2597           }
    2598           break;
    2599 
    2600         case INI_COPYAPP:
    2601         case INI_COPYKEY:
    2602         case INI_RENAMEAPP:
    2603         case INI_RENAMEKEY:
    2604           inidata = WinQueryWindowPtr(hwnd,0);
    2605           if(!inidata ||
    2606              !*inidata->ininame ||
    2607              !*inidata->applname ||
    2608              (!*inidata->keyname &&
    2609               (SHORT1FROMMP(mp1) == INI_RENAMEKEY ||
    2610               SHORT1FROMMP(mp1) == INI_COPYKEY)))
    2611             break;
    2612           {
    2613             INIREC *inirec;
    2614 
    2615             inirec = xmallocz(sizeof(INIREC),pszSrcFile,__LINE__);
    2616             if (inirec) {
    2617               inirec->size = sizeof(INIREC);
    2618               inirec->hwndDlg = hwnd;
    2619               inirec->confirm = inidata->confirm;
    2620               inirec->action = (SHORT1FROMMP(mp1) == INI_COPYAPP ||
    2621                                 SHORT1FROMMP(mp1) == INI_COPYKEY) ?
    2622                                 IDM_COPY : IDM_MOVE;
    2623               strcpy(inirec->filename1,inidata->ininame);
    2624               strcpy(inirec->filename2,inidata->ininame);
    2625               if(SHORT1FROMMP(mp1) == INI_COPYKEY ||
    2626                  SHORT1FROMMP(mp1) == INI_RENAMEKEY)
    2627                 strcpy(inirec->key,inidata->keyname);
    2628               strcpy(inirec->app,inidata->applname);
    2629               if(!WinDlgBox(HWND_DESKTOP,
    2630                             hwnd,
    2631                             IntraIniProc,
    2632                             FM3ModHandle,
    2633                             INII_FRAME,
    2634                             (PVOID)inirec)) {
    2635                 free(inirec);
    2636                 break;
    2637               }
    2638               if (_beginthread(CopyIniThread,NULL,122880,(PVOID)inirec) == -1) {
    2639                 Runtime_Error(pszSrcFile, __LINE__, GetPString(IDS_COULDNTSTARTTHREADTEXT));
    2640                 free(inirec);
    2641               }
    2642             }
    2643           }
    2644           break;
    2645 
    2646         case INI_BACKUPINI:
    2647           inidata = INSTDATA(hwnd);
    2648           if(inidata && *inidata->ininame) {
    2649 
    2650             CHAR filename[CCHMAXPATH],*p;
    2651 
    2652             strcpy(filename,inidata->ininame);
    2653             p = filename;
    2654             while(*p) {
    2655               if(*p == '/')
    2656                 *p = '\\';
    2657               p++;
    2658             }
    2659             p = strrchr(filename,'\\');
    2660             if(p) {
    2661               p++;
    2662               *p = 0;
    2663             }
    2664             else
    2665               *filename = 0;
    2666             strcat(filename,"*.INI");
    2667             if(export_filename(hwnd,filename,TRUE)) {
    2668 
    2669               PPRFPROFILE prfp;
    2670 
    2671               prfp = xmallocz(sizeof(PRFPROFILE),pszSrcFile,__LINE__);
    2672               if (prfp) {
    2673                 prfp->pszUserName = xstrdup(inidata->ininame,pszSrcFile,__LINE__);
    2674                 if (!prfp->pszUserName)
    2675                   free(prfp);
    2676                 else {
    2677                   prfp->cchUserName = strlen(prfp->pszUserName);
    2678                   prfp->pszSysName = xstrdup(filename,pszSrcFile,__LINE__);
    2679                   if (!prfp->pszSysName) {
    2680                     free(prfp->pszUserName);
    2681                     free(prfp);
    2682                   }
    2683                   else {
    2684                     prfp->cchSysName = strlen(prfp->pszSysName);
    2685                     if (_beginthread(BackupIniThread,NULL,122880,(PVOID)prfp) == -1) {
    2686                       Runtime_Error(pszSrcFile, __LINE__, GetPString(IDS_COULDNTSTARTTHREADTEXT));
    2687                       free(prfp->pszSysName);
    2688                       free(prfp->pszUserName);
    2689                       free(prfp);
    2690                     }
    2691                     else
    2692                       DosSleep(250L);
    2693                   }
    2694                 }
    2695               }
    2696             }
    2697           }
    2698           break;
    2699 
    2700         case INI_CHANGEINI:
    2701           inidata = INSTDATA(hwnd);
    2702           if(inidata) {
    2703             if(WinDlgBox(HWND_DESKTOP,
    2704                          hwnd,
    2705                          ChangeIniProc,
    2706                          FM3ModHandle,
    2707                          INIR_FRAME,
    2708                          (PVOID)inidata->ininame)) {
    2709               WinSendMsg(hwnd,
    2710                          UM_SETUP,
    2711                          MPVOID,
    2712                          MPVOID);
    2713               WinSendMsg(hwnd,
    2714                          UM_SETDIR,
    2715                          MPVOID,
    2716                          MPVOID);
    2717               EnumAppNames(WinWindowFromID(hwnd,INI_APPLIST),
    2718                            inidata->hini);
    2719             }
    2720           }
    2721           break;
    2722 
    2723         case INI_SWAPINI:
    2724           inidata = INSTDATA(hwnd);
    2725           if(inidata) {
    2726             if(WinDlgBox(HWND_DESKTOP,
    2727                          hwnd,
    2728                          SwapIniProc,
    2729                          FM3ModHandle,
    2730                          INIR_FRAME,
    2731                          (PVOID)inidata->ininame)) {
    2732               WinSendMsg(hwnd,
    2733                          UM_SETUP,
    2734                          MPVOID,
    2735                          MPVOID);
    2736               WinSendMsg(hwnd,
    2737                          UM_SETDIR,
    2738                          MPVOID,
    2739                          MPVOID);
    2740               EnumAppNames(WinWindowFromID(hwnd,INI_APPLIST),
    2741                            inidata->hini);
    2742             }
    2743           }
    2744           break;
    2745 
    2746         case IDM_NEXTWINDOW:
    2747           inidata = INSTDATA(hwnd);
    2748           if(inidata) {
    2749             inidata->currid++;
    2750             if(inidata->currid > INI_DATALIST)
    2751               inidata->currid = INI_APPLIST;
    2752           }
    2753           WinSetFocus(HWND_DESKTOP,
    2754                       WinWindowFromID(hwnd,inidata->currid));
    2755           break;
    2756 
    2757         case IDM_PREVWINDOW:
    2758           inidata = INSTDATA(hwnd);
    2759           if(inidata) {
    2760             inidata->currid--;
    2761             if(inidata->currid < INI_APPLIST)
    2762               inidata->currid = INI_DATALIST;
    2763           }
    2764           WinSetFocus(HWND_DESKTOP,
    2765                       WinWindowFromID(hwnd,
    2766                                       inidata->currid));
    2767           break;
    2768 
    2769         case INI_CONFIRM:
    2770           inidata = INSTDATA(hwnd);
    2771           if(inidata) {
    2772             inidata->confirm = (inidata->confirm) ? FALSE : TRUE;
    2773             WinCheckMenuItem(inidata->hwndMenu,
    2774                              INI_CONFIRM,
    2775                              inidata->confirm);
    2776 
    2777           }
    2778           break;
    2779 
    2780         case INI_EDITENTRY:
    2781         case INI_ADDENTRY:
    2782           inidata = INSTDATA(hwnd);
    2783           if(inidata) {
    2784             inidata->edit = (SHORT1FROMMP(mp1) == INI_EDITENTRY);
    2785             WinDlgBox(HWND_DESKTOP,
    2786                       hwnd,
    2787                       AddIniProc,
    2788                       FM3ModHandle,
    2789                       IAD_FRAME,
    2790                       (PVOID)inidata);
    2791           }
    2792           break;
    2793 
    2794         case INI_OTHERPROFILE:
    2795           inidata = INSTDATA(hwnd);
    2796           if(inidata) {
    2797 
    2798             CHAR        filename[CCHMAXPATH + 81],*p;
    2799             FILESTATUS3 fsa;
    2800             HINI        hINI;
    2801 
    2802             strcpy(filename,inidata->ininame);
    2803             p = filename;
    2804             while(*p) {
    2805               if(*p == '/')
    2806                 *p = '\\';
    2807               p++;
    2808             }
    2809             p = strrchr(filename,'\\');
    2810             if(p) {
    2811               p++;
    2812               *p = 0;
    2813             }
    2814             else
    2815               *filename = 0;
    2816             strcat(filename,"*.INI");
    2817             if(insert_filename(hwnd,
    2818                                filename,
    2819                                TRUE,
    2820                                TRUE) &&
    2821                *filename &&
    2822                !DosQueryPathInfo(filename,
    2823                                  FIL_STANDARD,
    2824                                  &fsa,
    2825                                  sizeof(fsa))) {
    2826               hINI = PrfOpenProfile(WinQueryAnchorBlock(hwnd),
    2827                                     filename);
    2828               if(!hINI) {
    2829                 Win_Error(hwnd,hwnd,__FILE__,__LINE__,
    2830                           GetPString(IDS_INICANTOPENINITEXT),
    2831                           filename);
     2353      if (inidata && *inidata->ininame) {
     2354
     2355        CHAR filename[CCHMAXPATH], *p;
     2356
     2357        strcpy(filename, inidata->ininame);
     2358        p = filename;
     2359        while (*p) {
     2360          if (*p == '/')
     2361            *p = '\\';
     2362          p++;
     2363        }
     2364        p = strrchr(filename, '\\');
     2365        if (p) {
     2366          p++;
     2367          *p = 0;
     2368        }
     2369        else
     2370          *filename = 0;
     2371        strcat(filename, "*.INI");
     2372        if (export_filename(hwnd, filename, TRUE)) {
     2373
     2374          PPRFPROFILE prfp;
     2375
     2376          prfp = xmallocz(sizeof(PRFPROFILE), pszSrcFile, __LINE__);
     2377          if (prfp) {
     2378            prfp->pszUserName =
     2379              xstrdup(inidata->ininame, pszSrcFile, __LINE__);
     2380            if (!prfp->pszUserName)
     2381              free(prfp);
     2382            else {
     2383              prfp->cchUserName = strlen(prfp->pszUserName);
     2384              prfp->pszSysName = xstrdup(filename, pszSrcFile, __LINE__);
     2385              if (!prfp->pszSysName) {
     2386                free(prfp->pszUserName);
     2387                free(prfp);
    28322388              }
    28332389              else {
    2834                 if(*inidata->ininame) {
    2835                   if(inidata->hini)
    2836                     PrfCloseProfile(inidata->hini);
    2837                   *inidata->ininame = 0;
    2838                 }
    2839                 inidata->hini = hINI;
    2840                 strcpy(inidata->ininame,filename);
    2841                 WinSendMsg(hwnd,
    2842                            UM_SETUP,
    2843                            MPVOID,
    2844                            MPVOID);
    2845                 WinSendMsg(hwnd,
    2846                            UM_SETDIR,
    2847                            MPVOID,
    2848                            MPVOID);
    2849                 EnumAppNames(WinWindowFromID(hwnd,INI_APPLIST),
    2850                              inidata->hini);
    2851               }
    2852             }
    2853           }
    2854           break;
    2855 
    2856         case INI_USERPROFILE:
    2857           inidata = INSTDATA(hwnd);
    2858           if(inidata) {
    2859             if(inidata->hini &&
    2860                inidata->hini != HINI_SYSTEMPROFILE &&
    2861                inidata->hini != HINI_USERPROFILE)
    2862               PrfCloseProfile(inidata->hini);
    2863             *inidata->ininame = 0;
    2864             inidata->hini = HINI_USERPROFILE;
    2865             WinSendMsg(hwnd,
    2866                        UM_SETUP,
    2867                        MPVOID,
    2868                        MPVOID);
    2869             WinSendMsg(hwnd,
    2870                        UM_SETDIR,
    2871                        MPVOID,
    2872                        MPVOID);
    2873             EnumAppNames(WinWindowFromID(hwnd,INI_APPLIST),
    2874                          inidata->hini);
    2875           }
    2876           break;
    2877 
    2878         case INI_SYSTEMPROFILE:
    2879           inidata = INSTDATA(hwnd);
    2880           if(inidata) {
    2881             if(inidata->hini &&
    2882                inidata->hini != HINI_SYSTEMPROFILE &&
    2883                inidata->hini != HINI_USERPROFILE)
    2884               PrfCloseProfile(inidata->hini);
    2885             *inidata->ininame = 0;
    2886             inidata->hini = HINI_SYSTEMPROFILE;
    2887             WinSendMsg(hwnd,
    2888                        UM_SETUP,
    2889                        MPVOID,
    2890                        MPVOID);
    2891             WinSendMsg(hwnd,
    2892                        UM_SETDIR,
    2893                        MPVOID,
    2894                        MPVOID);
    2895             EnumAppNames(WinWindowFromID(hwnd,INI_APPLIST),
    2896                          inidata->hini);
    2897           }
    2898           break;
    2899 
    2900         case INI_REFRESH:
    2901           inidata = INSTDATA(hwnd);
    2902           if(inidata) {
    2903             WinSendMsg(hwnd,
    2904                        UM_SETDIR,
    2905                        MPVOID,
    2906                        MPVOID);
    2907             EnumAppNames(WinWindowFromID(hwnd,INI_APPLIST),
    2908                          inidata->hini);
    2909           }
    2910           break;
    2911 
    2912         case INI_DELETEKEY:
    2913           inidata = INSTDATA(hwnd);
    2914           if(inidata && *inidata->applname &&
    2915              *inidata->keyname) {
    2916 
    2917             SHORT keyindex = inidata->keyindex;
    2918 
    2919             if(inidata->confirm && saymsg(MB_YESNO,
    2920                                           hwnd,
    2921                                           GetPString(IDS_CONFIRMTEXT),
    2922                                           GetPString(IDS_INIDELETEKEYTEXT),
    2923                                           inidata->keyname) ==
    2924                MBID_NO)
    2925               break;
    2926             PrfWriteProfileData(inidata->hini,
    2927                                 inidata->applname,
    2928                                 inidata->keyname,
    2929                                 NULL,
    2930                                 0L);
    2931             *inidata->keyname = 0;
    2932             WinSendDlgItemMsg(hwnd,
    2933                               INI_KEYLIST,
    2934                               LM_DELETEITEM,
    2935                               MPFROM2SHORT(keyindex,0),
    2936                               MPVOID);
    2937             WinSendMsg(hwnd,UM_SETDIR,MPVOID,MPVOID);
    2938             sSel = (SHORT)WinSendDlgItemMsg(hwnd,
    2939                                             INI_KEYLIST,
    2940                                             LM_QUERYITEMCOUNT,
    2941                                             MPVOID,
    2942                                             MPVOID);
    2943             if(!sSel)
    2944               WinSendMsg(hwnd,
    2945                          INI_DELETEAPP,
    2946                          MPVOID,
    2947                          MPVOID);
    2948             else {
    2949               sSel = min(keyindex,sSel - 1);
    2950               WinSendDlgItemMsg(hwnd,
    2951                                 INI_KEYLIST,
    2952                                 LM_SELECTITEM,
    2953                                 MPFROMSHORT(sSel),
    2954                                 MPFROMSHORT(TRUE));
    2955             }
    2956           }
    2957           break;
    2958 
    2959         case INI_DELETEAPP:
    2960           inidata = INSTDATA(hwnd);
    2961           if(inidata && *inidata->applname) {
    2962 
    2963             SHORT appindex = inidata->appindex;
    2964 
    2965             if(inidata->confirm && saymsg(MB_YESNO,
    2966                                           hwnd,
    2967                                           GetPString(IDS_CONFIRMTEXT),
    2968                                           GetPString(IDS_INIDELETEAPPTEXT),
    2969                                           inidata->applname) ==
    2970                MBID_NO)
    2971               break;
    2972             PrfWriteProfileData(inidata->hini,
    2973                                 inidata->applname,
    2974                                 NULL,
    2975                                 NULL,
    2976                                 0L);
    2977             *inidata->applname = *inidata->keyname = 0;
    2978             WinSendMsg(hwnd,
    2979                        UM_SETDIR,
    2980                        MPVOID,
    2981                        MPVOID);
    2982             WinSendDlgItemMsg(hwnd,
    2983                               INI_KEYLIST,
    2984                               LM_DELETEALL,
    2985                               MPVOID,
    2986                               MPVOID);
    2987             WinSendDlgItemMsg(hwnd,
    2988                               INI_APPLIST,
    2989                               LM_DELETEITEM,
    2990                               MPFROM2SHORT(appindex,0),
    2991                               MPVOID);
    2992             WinSendMsg(hwnd,
    2993                        UM_SETDIR,
    2994                        MPVOID,
    2995                        MPVOID);
    2996             sSel = (SHORT)WinSendDlgItemMsg(hwnd,
    2997                                             INI_APPLIST,
    2998                                             LM_QUERYITEMCOUNT,
    2999                                             MPVOID,
    3000                                             MPVOID);
    3001             if(sSel) {
    3002               sSel = min(appindex,sSel - 1);
    3003               WinSendDlgItemMsg(hwnd,
    3004                                 INI_APPLIST,
    3005                                 LM_SELECTITEM,
    3006                                 MPFROMSHORT(sSel),
    3007                                 MPFROMSHORT(TRUE));
    3008             }
    3009           }
    3010           break;
    3011 
    3012         case DID_OK:
    3013         case DID_CANCEL:
    3014           PostMsg(hwnd,
    3015                   WM_CLOSE,
    3016                   MPVOID,
    3017                   MPVOID);
    3018           break;
    3019 
    3020         case IDM_HELP:
    3021           if(hwndHelp)
    3022             WinSendMsg(hwndHelp,
    3023                        HM_DISPLAY_HELP,
    3024                        MPFROM2SHORT(HELP_INI,0),
    3025                        MPFROMSHORT(HM_RESOURCEID));
    3026           break;
    3027 
    3028         case IDM_ABOUT:
    3029           saymsg(MB_ENTER | MB_ICONASTERISK,
    3030                  hwnd,
    3031                  GetPString(IDS_VIEWABOUTTITLETEXT),
    3032                  GetPString(IDS_INIABOUTTEXT));
    3033           break;
    3034       }
    3035       return 0;
    3036 
    3037     case WM_CLOSE:
    3038       if(ParentIsDesktop(WinQueryWindow(hwnd,QW_PARENT),(HWND)0)) {
    3039 
    3040         SWP swp;
    3041 
    3042         WinQueryWindowPos(WinQueryWindow(hwnd,QW_PARENT),&swp);
    3043         if(!(swp.fl & (SWP_HIDE | SWP_MINIMIZE)))
    3044           WinStoreWindowPos(FM2Str,
    3045                             "INIWindowPos",
    3046                             WinQueryWindow(hwnd,QW_PARENT));
    3047         inidata = WinQueryWindowPtr(hwnd,0);
    3048       }
    3049       WinDestroyWindow(WinQueryWindow(hwnd,QW_PARENT));
    3050       return 0;
    3051 
    3052     case WM_DESTROY:
     2390                prfp->cchSysName = strlen(prfp->pszSysName);
     2391                if (_beginthread(BackupIniThread, NULL, 122880, (PVOID) prfp)
     2392                    == -1) {
     2393                  Runtime_Error(pszSrcFile, __LINE__,
     2394                                GetPString(IDS_COULDNTSTARTTHREADTEXT));
     2395                  free(prfp->pszSysName);
     2396                  free(prfp->pszUserName);
     2397                  free(prfp);
     2398                }
     2399                else
     2400                  DosSleep(250L);
     2401              }
     2402            }
     2403          }
     2404        }
     2405      }
     2406      break;
     2407
     2408    case INI_CHANGEINI:
    30532409      inidata = INSTDATA(hwnd);
    3054       {
    3055         BOOL dontclose = FALSE;
    3056 
    3057         if(inidata) {
    3058           dontclose = inidata->dontclose;
    3059           if(inidata->hini)
    3060             PrfCloseProfile(inidata->hini);
    3061           if(inidata->data)
    3062             free(inidata->data);
    3063           if(inidata->hwndPopup)
    3064             WinDestroyWindow(inidata->hwndPopup);
    3065           free(inidata);
    3066         }
    3067         if(!dontclose &&
    3068            ParentIsDesktop(hwnd,WinQueryWindow(WinQueryWindow(hwnd,
    3069                                                               QW_PARENT),
    3070                                                QW_PARENT))) {
    3071           if(!PostMsg((HWND)0,
    3072                       WM_QUIT,
    3073                       MPVOID,
    3074                       MPVOID))
    3075             DosExit(EXIT_PROCESS,1);
    3076         }
    3077       }
    3078       break;
     2410      if (inidata) {
     2411        if (WinDlgBox(HWND_DESKTOP,
     2412                      hwnd,
     2413                      ChangeIniProc,
     2414                      FM3ModHandle, INIR_FRAME, (PVOID) inidata->ininame)) {
     2415          WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
     2416          WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
     2417          EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
     2418        }
     2419      }
     2420      break;
     2421
     2422    case INI_SWAPINI:
     2423      inidata = INSTDATA(hwnd);
     2424      if (inidata) {
     2425        if (WinDlgBox(HWND_DESKTOP,
     2426                      hwnd,
     2427                      SwapIniProc,
     2428                      FM3ModHandle, INIR_FRAME, (PVOID) inidata->ininame)) {
     2429          WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
     2430          WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
     2431          EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
     2432        }
     2433      }
     2434      break;
     2435
     2436    case IDM_NEXTWINDOW:
     2437      inidata = INSTDATA(hwnd);
     2438      if (inidata) {
     2439        inidata->currid++;
     2440        if (inidata->currid > INI_DATALIST)
     2441          inidata->currid = INI_APPLIST;
     2442      }
     2443      WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, inidata->currid));
     2444      break;
     2445
     2446    case IDM_PREVWINDOW:
     2447      inidata = INSTDATA(hwnd);
     2448      if (inidata) {
     2449        inidata->currid--;
     2450        if (inidata->currid < INI_APPLIST)
     2451          inidata->currid = INI_DATALIST;
     2452      }
     2453      WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, inidata->currid));
     2454      break;
     2455
     2456    case INI_CONFIRM:
     2457      inidata = INSTDATA(hwnd);
     2458      if (inidata) {
     2459        inidata->confirm = (inidata->confirm) ? FALSE : TRUE;
     2460        WinCheckMenuItem(inidata->hwndMenu, INI_CONFIRM, inidata->confirm);
     2461
     2462      }
     2463      break;
     2464
     2465    case INI_EDITENTRY:
     2466    case INI_ADDENTRY:
     2467      inidata = INSTDATA(hwnd);
     2468      if (inidata) {
     2469        inidata->edit = (SHORT1FROMMP(mp1) == INI_EDITENTRY);
     2470        WinDlgBox(HWND_DESKTOP,
     2471                  hwnd, AddIniProc, FM3ModHandle, IAD_FRAME, (PVOID) inidata);
     2472      }
     2473      break;
     2474
     2475    case INI_OTHERPROFILE:
     2476      inidata = INSTDATA(hwnd);
     2477      if (inidata) {
     2478
     2479        CHAR filename[CCHMAXPATH + 81], *p;
     2480        FILESTATUS3 fsa;
     2481        HINI hINI;
     2482
     2483        strcpy(filename, inidata->ininame);
     2484        p = filename;
     2485        while (*p) {
     2486          if (*p == '/')
     2487            *p = '\\';
     2488          p++;
     2489        }
     2490        p = strrchr(filename, '\\');
     2491        if (p) {
     2492          p++;
     2493          *p = 0;
     2494        }
     2495        else
     2496          *filename = 0;
     2497        strcat(filename, "*.INI");
     2498        if (insert_filename(hwnd,
     2499                            filename,
     2500                            TRUE,
     2501                            TRUE) &&
     2502            *filename &&
     2503            !DosQueryPathInfo(filename, FIL_STANDARD, &fsa, sizeof(fsa))) {
     2504          hINI = PrfOpenProfile(WinQueryAnchorBlock(hwnd), filename);
     2505          if (!hINI) {
     2506            Win_Error(hwnd, hwnd, __FILE__, __LINE__,
     2507                      GetPString(IDS_INICANTOPENINITEXT), filename);
     2508          }
     2509          else {
     2510            if (*inidata->ininame) {
     2511              if (inidata->hini)
     2512                PrfCloseProfile(inidata->hini);
     2513              *inidata->ininame = 0;
     2514            }
     2515            inidata->hini = hINI;
     2516            strcpy(inidata->ininame, filename);
     2517            WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
     2518            WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
     2519            EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
     2520          }
     2521        }
     2522      }
     2523      break;
     2524
     2525    case INI_USERPROFILE:
     2526      inidata = INSTDATA(hwnd);
     2527      if (inidata) {
     2528        if (inidata->hini &&
     2529            inidata->hini != HINI_SYSTEMPROFILE &&
     2530            inidata->hini != HINI_USERPROFILE)
     2531          PrfCloseProfile(inidata->hini);
     2532        *inidata->ininame = 0;
     2533        inidata->hini = HINI_USERPROFILE;
     2534        WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
     2535        WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
     2536        EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
     2537      }
     2538      break;
     2539
     2540    case INI_SYSTEMPROFILE:
     2541      inidata = INSTDATA(hwnd);
     2542      if (inidata) {
     2543        if (inidata->hini &&
     2544            inidata->hini != HINI_SYSTEMPROFILE &&
     2545            inidata->hini != HINI_USERPROFILE)
     2546          PrfCloseProfile(inidata->hini);
     2547        *inidata->ininame = 0;
     2548        inidata->hini = HINI_SYSTEMPROFILE;
     2549        WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
     2550        WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
     2551        EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
     2552      }
     2553      break;
     2554
     2555    case INI_REFRESH:
     2556      inidata = INSTDATA(hwnd);
     2557      if (inidata) {
     2558        WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
     2559        EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
     2560      }
     2561      break;
     2562
     2563    case INI_DELETEKEY:
     2564      inidata = INSTDATA(hwnd);
     2565      if (inidata && *inidata->applname && *inidata->keyname) {
     2566
     2567        SHORT keyindex = inidata->keyindex;
     2568
     2569        if (inidata->confirm && saymsg(MB_YESNO,
     2570                                       hwnd,
     2571                                       GetPString(IDS_CONFIRMTEXT),
     2572                                       GetPString(IDS_INIDELETEKEYTEXT),
     2573                                       inidata->keyname) == MBID_NO)
     2574          break;
     2575        PrfWriteProfileData(inidata->hini,
     2576                            inidata->applname, inidata->keyname, NULL, 0L);
     2577        *inidata->keyname = 0;
     2578        WinSendDlgItemMsg(hwnd,
     2579                          INI_KEYLIST,
     2580                          LM_DELETEITEM, MPFROM2SHORT(keyindex, 0), MPVOID);
     2581        WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
     2582        sSel = (SHORT) WinSendDlgItemMsg(hwnd,
     2583                                         INI_KEYLIST,
     2584                                         LM_QUERYITEMCOUNT, MPVOID, MPVOID);
     2585        if (!sSel)
     2586          WinSendMsg(hwnd, INI_DELETEAPP, MPVOID, MPVOID);
     2587        else {
     2588          sSel = min(keyindex, sSel - 1);
     2589          WinSendDlgItemMsg(hwnd,
     2590                            INI_KEYLIST,
     2591                            LM_SELECTITEM,
     2592                            MPFROMSHORT(sSel), MPFROMSHORT(TRUE));
     2593        }
     2594      }
     2595      break;
     2596
     2597    case INI_DELETEAPP:
     2598      inidata = INSTDATA(hwnd);
     2599      if (inidata && *inidata->applname) {
     2600
     2601        SHORT appindex = inidata->appindex;
     2602
     2603        if (inidata->confirm && saymsg(MB_YESNO,
     2604                                       hwnd,
     2605                                       GetPString(IDS_CONFIRMTEXT),
     2606                                       GetPString(IDS_INIDELETEAPPTEXT),
     2607                                       inidata->applname) == MBID_NO)
     2608          break;
     2609        PrfWriteProfileData(inidata->hini, inidata->applname, NULL, NULL, 0L);
     2610        *inidata->applname = *inidata->keyname = 0;
     2611        WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
     2612        WinSendDlgItemMsg(hwnd, INI_KEYLIST, LM_DELETEALL, MPVOID, MPVOID);
     2613        WinSendDlgItemMsg(hwnd,
     2614                          INI_APPLIST,
     2615                          LM_DELETEITEM, MPFROM2SHORT(appindex, 0), MPVOID);
     2616        WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
     2617        sSel = (SHORT) WinSendDlgItemMsg(hwnd,
     2618                                         INI_APPLIST,
     2619                                         LM_QUERYITEMCOUNT, MPVOID, MPVOID);
     2620        if (sSel) {
     2621          sSel = min(appindex, sSel - 1);
     2622          WinSendDlgItemMsg(hwnd,
     2623                            INI_APPLIST,
     2624                            LM_SELECTITEM,
     2625                            MPFROMSHORT(sSel), MPFROMSHORT(TRUE));
     2626        }
     2627      }
     2628      break;
     2629
     2630    case DID_OK:
     2631    case DID_CANCEL:
     2632      PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
     2633      break;
     2634
     2635    case IDM_HELP:
     2636      if (hwndHelp)
     2637        WinSendMsg(hwndHelp,
     2638                   HM_DISPLAY_HELP,
     2639                   MPFROM2SHORT(HELP_INI, 0), MPFROMSHORT(HM_RESOURCEID));
     2640      break;
     2641
     2642    case IDM_ABOUT:
     2643      saymsg(MB_ENTER | MB_ICONASTERISK,
     2644             hwnd,
     2645             GetPString(IDS_VIEWABOUTTITLETEXT),
     2646             GetPString(IDS_INIABOUTTEXT));
     2647      break;
     2648    }
     2649    return 0;
     2650
     2651  case WM_CLOSE:
     2652    if (ParentIsDesktop(WinQueryWindow(hwnd, QW_PARENT), (HWND) 0)) {
     2653
     2654      SWP swp;
     2655
     2656      WinQueryWindowPos(WinQueryWindow(hwnd, QW_PARENT), &swp);
     2657      if (!(swp.fl & (SWP_HIDE | SWP_MINIMIZE)))
     2658        WinStoreWindowPos(FM2Str,
     2659                          "INIWindowPos", WinQueryWindow(hwnd, QW_PARENT));
     2660      inidata = WinQueryWindowPtr(hwnd, 0);
     2661    }
     2662    WinDestroyWindow(WinQueryWindow(hwnd, QW_PARENT));
     2663    return 0;
     2664
     2665  case WM_DESTROY:
     2666    inidata = INSTDATA(hwnd);
     2667    {
     2668      BOOL dontclose = FALSE;
     2669
     2670      if (inidata) {
     2671        dontclose = inidata->dontclose;
     2672        if (inidata->hini)
     2673          PrfCloseProfile(inidata->hini);
     2674        if (inidata->data)
     2675          free(inidata->data);
     2676        if (inidata->hwndPopup)
     2677          WinDestroyWindow(inidata->hwndPopup);
     2678        free(inidata);
     2679      }
     2680      if (!dontclose &&
     2681          ParentIsDesktop(hwnd, WinQueryWindow(WinQueryWindow(hwnd,
     2682                                                              QW_PARENT),
     2683                                               QW_PARENT))) {
     2684        if (!PostMsg((HWND) 0, WM_QUIT, MPVOID, MPVOID))
     2685          DosExit(EXIT_PROCESS, 1);
     2686      }
     2687    }
     2688    break;
    30792689  }
    3080   return WinDefWindowProc(hwnd,msg,mp1,mp2);
     2690  return WinDefWindowProc(hwnd, msg, mp1, mp2);
    30812691}
    3082 
Note: See TracChangeset for help on using the changeset viewer.