Changeset 1159 for trunk/dll/viewinf.c


Ignore:
Timestamp:
Sep 5, 2008, 11:41:13 PM (17 years ago)
Author:
John Small
Message:

Ticket 187: Draft 1: Functions only

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/viewinf.c

    r1104 r1159  
    2323#include <string.h>
    2424#include <share.h>
    25 #include <process.h>                    // _beginthread
     25#include <process.h>                    // _beginthread
    2626
    2727#define INCL_DOS
     
    3131#include "fm3dlg.h"
    3232#include "fm3str.h"
    33 #include "errutil.h"                    // Dos_Error...
    34 #include "strutil.h"                    // GetPString
     33#include "errutil.h"                    // Dos_Error...
     34#include "strutil.h"                    // GetPString
    3535#include "pathutil.h"                   // BldFullPathName
    3636#include "fm3dll.h"
     37#include "viewinf.h"
     38#include "misc.h"                       // ViewHelp
    3739#include "fortify.h"
    3840
     
    7476      priority_normal();
    7577      if (!dummy->help)
    76         env = getenv("BOOKSHELF");
     78        env = getenv("BOOKSHELF");
    7779      else
    78         env = getenv("HELP");
     80        env = getenv("HELP");
    7981      if (!env) {
    80         saymsg(MB_CANCEL,
    81                hwnd,
    82                GetPString(IDS_SYSERRORTEXT),
    83                GetPString(IDS_ENVPATHERRORTEXT),
    84                (dummy->help) ? "HELP" : "BOOKSHELF",
    85                (dummy->help) ? ".HLP" : ".INF");
    86         goto NoEnv;
     82        saymsg(MB_CANCEL,
     83               hwnd,
     84               GetPString(IDS_SYSERRORTEXT),
     85               GetPString(IDS_ENVPATHERRORTEXT),
     86               (dummy->help) ? "HELP" : "BOOKSHELF",
     87               (dummy->help) ? ".HLP" : ".INF");
     88        goto NoEnv;
    8789      }
    8890      else {
    89         holdenv = xmalloc(strlen(env) + 2, pszSrcFile, __LINE__);
    90         if (holdenv) {
    91           strcpy(holdenv, env);
    92         Repeat:
    93           if (holdenv[strlen(holdenv) - 1] != ';')
    94             strcat(holdenv, ";");
    95           p = strtok(holdenv, ";");
    96           while (p) {
    97             bstrip(p);
    98             if (*p) {
    99 
    100               CHAR mask[CCHMAXPATH], *enddir, text[CCHMAXPATH * 2];
    101               FILEFINDBUF3 ffb;
    102               HDIR hdir;
    103               ULONG nm;
    104 
    105               strcpy(mask, p);
    106               if (mask[strlen(mask) - 1] != '\\')
    107                 strcat(mask, "\\");
    108               enddir = mask + strlen(mask);
    109               if (dummy->help)
    110                 strcat(mask, "*.HLP");
    111               else
    112                 strcat(mask, "*.INF");
    113               hdir = HDIR_CREATE;
    114               nm = 1;
    115               DosError(FERR_DISABLEHARDERR);
    116               if (!DosFindFirst(mask, &hdir, FILE_NORMAL | FILE_ARCHIVED,
    117                                 &ffb, sizeof(ffb), &nm, FIL_STANDARD)) {
    118                 do {
    119                   priority_normal();
    120                   strcpy(enddir, ffb.achName);
    121                   {
    122                     FILE *fp;
    123                     CHAR title[CCHMAXPATH];
    124 
    125                     *title = 0;
    126                     fp = _fsopen(mask, "rb", SH_DENYNO);
    127                     if (fp) {
    128                       fread(title, 1, 3, fp);
    129                       if (*title != 'H' || title[1] != 'S' || title[2] != 'P') {
    130                         fclose(fp);
    131                         goto Continue;
    132                       }
    133                       *title = 0;
    134                       fseek(fp, 107, SEEK_SET);
    135                       fread(title, 1, CCHMAXPATH - 2, fp);
    136                       title[CCHMAXPATH - 3] = 0;
    137                       bstrip(title);
    138                       fclose(fp);
    139                     }
    140                     p = strchr(ffb.achName, '.');
    141                     if (p)
    142                       *p = 0;
    143                     sprintf(text,
    144                             "%-10.10s  %-42.42s > %s",
    145                             ffb.achName, title, mask);
    146                   }
    147                   if (!WinIsWindow(hab2, hwnd))
    148                     break;
    149                   WinSendDlgItemMsg(hwnd,
    150                                     VINF_LISTBOX,
    151                                     LM_INSERTITEM,
    152                                     MPFROM2SHORT(LIT_SORTASCENDING, 0),
    153                                     MPFROMP(text));
    154                 Continue:
    155                   nm = 1;
    156                 } while (!DosFindNext(hdir, &ffb, sizeof(ffb), &nm));
    157                 DosFindClose(hdir);
    158                 priority_normal();
    159               }
    160             }
    161             if (!WinIsWindow(hab2, hwnd))
    162               break;
    163             p = strtok(NULL, ";");
    164           }
    165           free(holdenv);
    166         NoEnv:
    167           if (WinIsWindow(hab2, hwnd) && !repeating) {
    168 
    169             ULONG size;
    170             CHAR *key = "INFPaths";
    171 
    172             if (dummy->help)
    173               key = "HLPPaths";
    174             repeating = TRUE;
    175             if (PrfQueryProfileSize(fmprof, FM3Str, key, &size) && size) {
    176               holdenv = xmalloc(size + 2, pszSrcFile, __LINE__);
    177               if (holdenv) {
    178                 if (!PrfQueryProfileData(fmprof, FM3Str, key, holdenv, &size)) {
    179                   Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
    180                             "PrfQueryProfileData");
    181                   free(holdenv);
    182                 }
    183                 else
    184                   goto Repeat;
    185               }
    186             }
    187           }
    188         }
     91        holdenv = xmalloc(strlen(env) + 2, pszSrcFile, __LINE__);
     92        if (holdenv) {
     93          strcpy(holdenv, env);
     94        Repeat:
     95          if (holdenv[strlen(holdenv) - 1] != ';')
     96            strcat(holdenv, ";");
     97          p = strtok(holdenv, ";");
     98          while (p) {
     99            bstrip(p);
     100            if (*p) {
     101
     102              CHAR mask[CCHMAXPATH], *enddir, text[CCHMAXPATH * 2];
     103              FILEFINDBUF3 ffb;
     104              HDIR hdir;
     105              ULONG nm;
     106
     107              strcpy(mask, p);
     108              if (mask[strlen(mask) - 1] != '\\')
     109                strcat(mask, "\\");
     110              enddir = mask + strlen(mask);
     111              if (dummy->help)
     112                strcat(mask, "*.HLP");
     113              else
     114                strcat(mask, "*.INF");
     115              hdir = HDIR_CREATE;
     116              nm = 1;
     117              DosError(FERR_DISABLEHARDERR);
     118              if (!DosFindFirst(mask, &hdir, FILE_NORMAL | FILE_ARCHIVED,
     119                                &ffb, sizeof(ffb), &nm, FIL_STANDARD)) {
     120                do {
     121                  priority_normal();
     122                  strcpy(enddir, ffb.achName);
     123                  {
     124                    FILE *fp;
     125                    CHAR title[CCHMAXPATH];
     126
     127                    *title = 0;
     128                    fp = _fsopen(mask, "rb", SH_DENYNO);
     129                    if (fp) {
     130                      fread(title, 1, 3, fp);
     131                      if (*title != 'H' || title[1] != 'S' || title[2] != 'P') {
     132                        fclose(fp);
     133                        goto Continue;
     134                      }
     135                      *title = 0;
     136                      fseek(fp, 107, SEEK_SET);
     137                      fread(title, 1, CCHMAXPATH - 2, fp);
     138                      title[CCHMAXPATH - 3] = 0;
     139                      bstrip(title);
     140                      fclose(fp);
     141                    }
     142                    p = strchr(ffb.achName, '.');
     143                    if (p)
     144                      *p = 0;
     145                    sprintf(text,
     146                            "%-10.10s  %-42.42s > %s",
     147                            ffb.achName, title, mask);
     148                  }
     149                  if (!WinIsWindow(hab2, hwnd))
     150                    break;
     151                  WinSendDlgItemMsg(hwnd,
     152                                    VINF_LISTBOX,
     153                                    LM_INSERTITEM,
     154                                    MPFROM2SHORT(LIT_SORTASCENDING, 0),
     155                                    MPFROMP(text));
     156                Continue:
     157                  nm = 1;
     158                } while (!DosFindNext(hdir, &ffb, sizeof(ffb), &nm));
     159                DosFindClose(hdir);
     160                priority_normal();
     161              }
     162            }
     163            if (!WinIsWindow(hab2, hwnd))
     164              break;
     165            p = strtok(NULL, ";");
     166          }
     167          free(holdenv);
     168        NoEnv:
     169          if (WinIsWindow(hab2, hwnd) && !repeating) {
     170
     171            ULONG size;
     172            CHAR *key = "INFPaths";
     173
     174            if (dummy->help)
     175              key = "HLPPaths";
     176            repeating = TRUE;
     177            if (PrfQueryProfileSize(fmprof, FM3Str, key, &size) && size) {
     178              holdenv = xmalloc(size + 2, pszSrcFile, __LINE__);
     179              if (holdenv) {
     180                if (!PrfQueryProfileData(fmprof, FM3Str, key, holdenv, &size)) {
     181                  Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
     182                            "PrfQueryProfileData");
     183                  free(holdenv);
     184                }
     185                else
     186                  goto Repeat;
     187              }
     188            }
     189          }
     190        }
    189191      }
    190192      WinDestroyMsgQueue(hmq2);
     
    211213  case WM_INITDLG:
    212214    WinSendDlgItemMsg(hwnd, VINF_ENTRY, EM_SETTEXTLIMIT,
    213                       MPFROM2SHORT(1000, 0), MPVOID);
     215                      MPFROM2SHORT(1000, 0), MPVOID);
    214216    WinSendDlgItemMsg(hwnd, VINF_TOPIC, EM_SETTEXTLIMIT,
    215                       MPFROM2SHORT(CCHMAXPATH * 2, 0), MPVOID);
     217                      MPFROM2SHORT(CCHMAXPATH * 2, 0), MPVOID);
    216218    if (hwndMe) {
    217219      WinSetWindowPos(hwndMe, HWND_TOP, 0, 0, 0, 0, SWP_RESTORE | SWP_ZORDER |
    218                       SWP_ACTIVATE);
     220                      SWP_ACTIVATE);
    219221      WinDismissDlg(hwnd, 0);
    220222      break;
     
    228230      WinDestroyWindow(WinWindowFromID(hwnd, VINF_LISTBOX));
    229231      if (!WinCreateWindow(hwnd,
    230                            WC_LISTBOX,
    231                            (PSZ) NULL,
    232                            WS_VISIBLE | LS_HORZSCROLL,
    233                            swp.x,
    234                            swp.y,
    235                            swp.cx,
    236                            swp.cy,
    237                            hwnd, HWND_TOP, VINF_LISTBOX, NULL, NULL)) {
    238         Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
     232                           WC_LISTBOX,
     233                           (PSZ) NULL,
     234                           WS_VISIBLE | LS_HORZSCROLL,
     235                           swp.x,
     236                           swp.y,
     237                           swp.cx,
     238                           swp.cy,
     239                           hwnd, HWND_TOP, VINF_LISTBOX, NULL, NULL)) {
     240        Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
    239241      }
    240242      else {
    241         WinSetPresParam(WinWindowFromID(hwnd, VINF_LISTBOX),
    242                         PP_FONTNAMESIZE,
    243                         strlen(GetPString(IDS_10SYSTEMMONOTEXT)) + 1,
    244                         (PVOID) GetPString(IDS_10SYSTEMMONOTEXT));
     243        WinSetPresParam(WinWindowFromID(hwnd, VINF_LISTBOX),
     244                        PP_FONTNAMESIZE,
     245                        strlen(GetPString(IDS_10SYSTEMMONOTEXT)) + 1,
     246                        (PVOID) GetPString(IDS_10SYSTEMMONOTEXT));
    245247      }
    246248      WinSetWindowText(hwnd, GetPString(IDS_VIEWHELPFILESTEXT));
     
    264266      d = xmallocz(sizeof(DUMMY), pszSrcFile, __LINE__);
    265267      if (!d) {
    266         WinDismissDlg(hwnd, 0);
    267         return 0;
     268        WinDismissDlg(hwnd, 0);
     269        return 0;
    268270      }
    269271      else {
    270         d->size = sizeof(DUMMY);
    271         d->hwnd = hwnd;
    272         if (help)
    273           d->help = 1;
    274         if (_beginthread(FillListboxThread, NULL, 65536, (PVOID) d) == -1) {
    275           Runtime_Error(pszSrcFile, __LINE__,
    276                         GetPString(IDS_COULDNTSTARTTHREADTEXT));
    277           free(d);
    278           WinDismissDlg(hwnd, 0);
    279           return 0;
    280         }
    281         WinEnableWindow(WinWindowFromID(hwnd, DID_CANCEL), FALSE);
    282         threaddone = FALSE;
     272        d->size = sizeof(DUMMY);
     273        d->hwnd = hwnd;
     274        if (help)
     275          d->help = 1;
     276        if (_beginthread(FillListboxThread, NULL, 65536, (PVOID) d) == -1) {
     277          Runtime_Error(pszSrcFile, __LINE__,
     278                        GetPString(IDS_COULDNTSTARTTHREADTEXT));
     279          free(d);
     280          WinDismissDlg(hwnd, 0);
     281          return 0;
     282        }
     283        WinEnableWindow(WinWindowFromID(hwnd, DID_CANCEL), FALSE);
     284        threaddone = FALSE;
    283285      }
    284286    }
     
    287289  case UM_CONTAINER_FILLED:
    288290    if (!(SHORT) WinSendDlgItemMsg(hwnd,
    289                                    VINF_LISTBOX,
    290                                    LM_QUERYITEMCOUNT, MPVOID, MPVOID)) {
     291                                   VINF_LISTBOX,
     292                                   LM_QUERYITEMCOUNT, MPVOID, MPVOID)) {
    291293      saymsg(MB_CANCEL,
    292              hwnd,
    293              GetPString(IDS_ERRORTEXT), GetPString(IDS_NOFILESFOUNDTEXT));
     294             hwnd,
     295             GetPString(IDS_ERRORTEXT), GetPString(IDS_NOFILESFOUNDTEXT));
    294296      hwndMe = (HWND) 0;
    295297      WinDismissDlg(hwnd, 0);
     
    304306      switch (SHORT2FROMMP(mp1)) {
    305307      case LN_ENTER:
    306         PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(DID_OK, 0), MPVOID);
    307         break;
     308        PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(DID_OK, 0), MPVOID);
     309        break;
    308310      }
    309311      break;
     
    311313      switch (SHORT2FROMMP(mp1)) {
    312314      case EN_CHANGE:
    313         {
    314           SHORT sSelect;
    315           CHAR szBuffer[CCHMAXPATH];
    316 
    317           WinQueryDlgItemText(hwnd, VINF_ENTRY, CCHMAXPATH, szBuffer);
    318           bstrip(szBuffer);
    319           sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
    320                                               VINF_LISTBOX,
    321                                               LM_SEARCHSTRING,
    322                                               MPFROM2SHORT(LSS_SUBSTRING,
    323                                                            LIT_FIRST),
    324                                               MPFROMP(szBuffer));
    325           if (sSelect >= 0)
    326             WinSendDlgItemMsg(hwnd,
    327                               VINF_LISTBOX,
    328                               LM_SETTOPINDEX,
    329                               MPFROM2SHORT(sSelect, 0), MPVOID);
    330         }
    331         break;
     315        {
     316          SHORT sSelect;
     317          CHAR szBuffer[CCHMAXPATH];
     318
     319          WinQueryDlgItemText(hwnd, VINF_ENTRY, CCHMAXPATH, szBuffer);
     320          bstrip(szBuffer);
     321          sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
     322                                              VINF_LISTBOX,
     323                                              LM_SEARCHSTRING,
     324                                              MPFROM2SHORT(LSS_SUBSTRING,
     325                                                           LIT_FIRST),
     326                                              MPFROMP(szBuffer));
     327          if (sSelect >= 0)
     328            WinSendDlgItemMsg(hwnd,
     329                              VINF_LISTBOX,
     330                              LM_SETTOPINDEX,
     331                              MPFROM2SHORT(sSelect, 0), MPVOID);
     332        }
     333        break;
    332334      }
    333335      break;
     
    345347      WinQueryWindowPos(hwnd, &swp);
    346348      if (!(swp.fl & (SWP_HIDE | SWP_MINIMIZE))) {
    347         WinQueryWindowPos(WinWindowFromID(hwnd, VINF_LISTBOX), &swpC);
    348         if (!ypos)
    349           ypos = swpC.y;
    350         WinSetWindowPos(WinWindowFromID(hwnd, VINF_LISTBOX), HWND_TOP,
    351                         SysVal(SV_CXSIZEBORDER),
    352                         ypos,
    353                         swp.cx - (SysVal(SV_CXSIZEBORDER) * 2),
    354                         (swp.cy - ypos) - (SysVal(SV_CYTITLEBAR) +
    355                                            SysVal(SV_CYSIZEBORDER)),
    356                         SWP_MOVE | SWP_SIZE);
     349        WinQueryWindowPos(WinWindowFromID(hwnd, VINF_LISTBOX), &swpC);
     350        if (!ypos)
     351          ypos = swpC.y;
     352        WinSetWindowPos(WinWindowFromID(hwnd, VINF_LISTBOX), HWND_TOP,
     353                        SysVal(SV_CXSIZEBORDER),
     354                        ypos,
     355                        swp.cx - (SysVal(SV_CXSIZEBORDER) * 2),
     356                        (swp.cy - ypos) - (SysVal(SV_CYTITLEBAR) +
     357                                           SysVal(SV_CYSIZEBORDER)),
     358                        SWP_MOVE | SWP_SIZE);
    357359      }
    358360    }
     
    367369    case VINF_SRCH:
    368370      {
    369         SHORT sSelect, sLast = LIT_FIRST;
    370         CHAR szBuffer[CCHMAXPATH];
    371 
    372         *szBuffer = 0;
    373         WinQueryDlgItemText(hwnd, VINF_ENTRY, CCHMAXPATH, szBuffer);
    374         rstrip(szBuffer);
    375         if (!*szBuffer) {
    376           sLast = (SHORT) WinSendDlgItemMsg(hwnd,
    377                                             VINF_LISTBOX,
    378                                             LM_QUERYITEMCOUNT,
    379                                             MPVOID, MPVOID);
    380           for (sSelect = 0; sSelect < sLast; sSelect++)
    381             WinSendDlgItemMsg(hwnd,
    382                               VINF_LISTBOX,
    383                               LM_SELECTITEM,
    384                               MPFROM2SHORT(sSelect, 0),
    385                               MPFROM2SHORT(FALSE, 0));
    386           break;
    387         }
    388         for (;;) {
    389           sSelect = (SHORT) WinSendDlgItemMsg(hwnd, VINF_LISTBOX,
    390                                               LM_SEARCHSTRING,
    391                                               MPFROM2SHORT(LSS_SUBSTRING,
    392                                                            sLast),
    393                                               MPFROMP(szBuffer));
    394           if (sSelect <= sLast)
    395             break;
    396           if (sSelect >= 0)
    397             WinSendDlgItemMsg(hwnd,
    398                               VINF_LISTBOX,
    399                               LM_SELECTITEM,
    400                               MPFROM2SHORT(sSelect, 0),
    401                               MPFROM2SHORT(TRUE, 0));
    402           else
    403             break;
    404           sLast = sSelect;
    405         }
     371        SHORT sSelect, sLast = LIT_FIRST;
     372        CHAR szBuffer[CCHMAXPATH];
     373
     374        *szBuffer = 0;
     375        WinQueryDlgItemText(hwnd, VINF_ENTRY, CCHMAXPATH, szBuffer);
     376        rstrip(szBuffer);
     377        if (!*szBuffer) {
     378          sLast = (SHORT) WinSendDlgItemMsg(hwnd,
     379                                            VINF_LISTBOX,
     380                                            LM_QUERYITEMCOUNT,
     381                                            MPVOID, MPVOID);
     382          for (sSelect = 0; sSelect < sLast; sSelect++)
     383            WinSendDlgItemMsg(hwnd,
     384                              VINF_LISTBOX,
     385                              LM_SELECTITEM,
     386                              MPFROM2SHORT(sSelect, 0),
     387                              MPFROM2SHORT(FALSE, 0));
     388          break;
     389        }
     390        for (;;) {
     391          sSelect = (SHORT) WinSendDlgItemMsg(hwnd, VINF_LISTBOX,
     392                                              LM_SEARCHSTRING,
     393                                              MPFROM2SHORT(LSS_SUBSTRING,
     394                                                           sLast),
     395                                              MPFROMP(szBuffer));
     396          if (sSelect <= sLast)
     397            break;
     398          if (sSelect >= 0)
     399            WinSendDlgItemMsg(hwnd,
     400                              VINF_LISTBOX,
     401                              LM_SELECTITEM,
     402                              MPFROM2SHORT(sSelect, 0),
     403                              MPFROM2SHORT(TRUE, 0));
     404          else
     405            break;
     406          sLast = sSelect;
     407        }
    406408      }
    407409      break;
     
    409411    case VINF_FILTER:
    410412      {
    411         SHORT sSelect, sTotal;
    412 
    413         sTotal = (SHORT) WinSendDlgItemMsg(hwnd,
    414                                            VINF_LISTBOX,
    415                                            LM_QUERYITEMCOUNT, MPVOID, MPVOID);
    416         sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
    417                                             VINF_LISTBOX,
    418                                             LM_QUERYSELECTION,
    419                                             MPFROM2SHORT(LIT_FIRST, 0),
    420                                             MPVOID);
    421         if (sSelect == LIT_NONE) {
    422           DosBeep(50, 100);
    423           break;
    424         }
     413        SHORT sSelect, sTotal;
     414
     415        sTotal = (SHORT) WinSendDlgItemMsg(hwnd,
     416                                           VINF_LISTBOX,
     417                                           LM_QUERYITEMCOUNT, MPVOID, MPVOID);
     418        sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
     419                                            VINF_LISTBOX,
     420                                            LM_QUERYSELECTION,
     421                                            MPFROM2SHORT(LIT_FIRST, 0),
     422                                            MPVOID);
     423        if (sSelect == LIT_NONE) {
     424          DosBeep(50, 100);
     425          break;
     426        }
    425427#ifdef BUGFIXED
    426         sSelect = 0;
    427         while (sSelect < sTotal) {
    428           if (!WinSendDlgItemMsg(hwnd,
    429                                 VINF_LISTBOX,
    430                                 LM_SELECTITEM,
    431                                 MPFROM2SHORT(sSelect, 0),
    432                                 MPFROM2SHORT(FALSE, 0))) {
    433             WinSendDlgItemMsg(hwnd,
    434                               VINF_LISTBOX,
    435                               LM_DELETEITEM,
    436                               MPFROM2SHORT(sSelect, 0), MPVOID);
    437             sTotal--;
    438           }
    439           else
    440             sSelect++;
    441         }
     428        sSelect = 0;
     429        while (sSelect < sTotal) {
     430          if (!WinSendDlgItemMsg(hwnd,
     431                                VINF_LISTBOX,
     432                                LM_SELECTITEM,
     433                                MPFROM2SHORT(sSelect, 0),
     434                                MPFROM2SHORT(FALSE, 0))) {
     435            WinSendDlgItemMsg(hwnd,
     436                              VINF_LISTBOX,
     437                              LM_DELETEITEM,
     438                              MPFROM2SHORT(sSelect, 0), MPVOID);
     439            sTotal--;
     440          }
     441          else
     442            sSelect++;
     443        }
    442444#else // !BUGIFIXED
    443         for (sSelect = 0; sSelect < sTotal; sSelect++)
    444           WinSendDlgItemMsg(hwnd,
    445                             VINF_LISTBOX,
    446                             LM_SETITEMHANDLE,
    447                             MPFROM2SHORT(sSelect, 0), MPVOID);
    448         sSelect = LIT_FIRST;
    449         for (;;) {
    450           sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
    451                                               VINF_LISTBOX,
    452                                               LM_QUERYSELECTION,
    453                                               MPFROM2SHORT(sSelect, 0),
    454                                               MPVOID);
    455           if (sSelect >= 0)
    456             WinSendDlgItemMsg(hwnd,
    457                               VINF_LISTBOX,
    458                               LM_SETITEMHANDLE,
    459                               MPFROM2SHORT(sSelect, 0), MPFROMLONG(1));
    460           else
    461             break;
    462         }
    463         for (sSelect = 0; sSelect < sTotal; sSelect++)
    464           WinSendDlgItemMsg(hwnd,
    465                             VINF_LISTBOX,
    466                             LM_SELECTITEM,
    467                             MPFROM2SHORT(sSelect, 0), MPFROM2SHORT(FALSE, 0));
    468         sSelect = 0;
    469         while (sSelect < sTotal) {
    470           if (!WinSendDlgItemMsg(hwnd,
    471                                 VINF_LISTBOX,
    472                                 LM_QUERYITEMHANDLE,
    473                                 MPFROM2SHORT(sSelect, 0), MPVOID)) {
    474             WinSendDlgItemMsg(hwnd,
    475                               VINF_LISTBOX,
    476                               LM_DELETEITEM,
    477                               MPFROM2SHORT(sSelect, 0), MPVOID);
    478             sTotal--;
    479           }
    480           else
    481             sSelect++;
    482         }
     445        for (sSelect = 0; sSelect < sTotal; sSelect++)
     446          WinSendDlgItemMsg(hwnd,
     447                            VINF_LISTBOX,
     448                            LM_SETITEMHANDLE,
     449                            MPFROM2SHORT(sSelect, 0), MPVOID);
     450        sSelect = LIT_FIRST;
     451        for (;;) {
     452          sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
     453                                              VINF_LISTBOX,
     454                                              LM_QUERYSELECTION,
     455                                              MPFROM2SHORT(sSelect, 0),
     456                                              MPVOID);
     457          if (sSelect >= 0)
     458            WinSendDlgItemMsg(hwnd,
     459                              VINF_LISTBOX,
     460                              LM_SETITEMHANDLE,
     461                              MPFROM2SHORT(sSelect, 0), MPFROMLONG(1));
     462          else
     463            break;
     464        }
     465        for (sSelect = 0; sSelect < sTotal; sSelect++)
     466          WinSendDlgItemMsg(hwnd,
     467                            VINF_LISTBOX,
     468                            LM_SELECTITEM,
     469                            MPFROM2SHORT(sSelect, 0), MPFROM2SHORT(FALSE, 0));
     470        sSelect = 0;
     471        while (sSelect < sTotal) {
     472          if (!WinSendDlgItemMsg(hwnd,
     473                                VINF_LISTBOX,
     474                                LM_QUERYITEMHANDLE,
     475                                MPFROM2SHORT(sSelect, 0), MPVOID)) {
     476            WinSendDlgItemMsg(hwnd,
     477                              VINF_LISTBOX,
     478                              LM_DELETEITEM,
     479                              MPFROM2SHORT(sSelect, 0), MPVOID);
     480            sTotal--;
     481          }
     482          else
     483            sSelect++;
     484        }
    483485#endif // BUGFIXED
    484486      }
     
    487489    case VINF_DIRS:
    488490      {
    489         CHAR szBuffer[1001], *key = "INFPaths";
    490 
    491         if (help)
    492           key = "HLPPaths";
    493         *szBuffer = 0;
    494         WinQueryDlgItemText(hwnd, VINF_ENTRY, 1000, szBuffer);
    495         bstrip(szBuffer);
    496         PrfWriteProfileData(fmprof,
    497                             FM3Str,
    498                             key,
    499                             (*szBuffer) ? szBuffer : NULL, strlen(szBuffer));
    500         PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
     491        CHAR szBuffer[1001], *key = "INFPaths";
     492
     493        if (help)
     494          key = "HLPPaths";
     495        *szBuffer = 0;
     496        WinQueryDlgItemText(hwnd, VINF_ENTRY, 1000, szBuffer);
     497        bstrip(szBuffer);
     498        PrfWriteProfileData(fmprof,
     499                            FM3Str,
     500                            key,
     501                            (*szBuffer) ? szBuffer : NULL, strlen(szBuffer));
     502        PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID);
    501503      }
    502504      break;
     
    509511    case DID_OK:
    510512      {
    511         SHORT sSelect;
    512         CHAR text[CCHMAXPATH * 2], filename[CCHMAXPATH], *p;
    513         FILE *fp;
    514         BOOL notfirst = FALSE;
    515 
    516         sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
    517                                             VINF_LISTBOX,
    518                                             LM_QUERYSELECTION,
    519                                             MPFROM2SHORT(LIT_FIRST, 0),
    520                                             MPVOID);
    521         if (sSelect < 0) {
    522           DosBeep(50, 100);
    523         }
    524         else {
    525           if (help) {
    526             *text = 0;
    527             WinSendDlgItemMsg(hwnd,
    528                               VINF_LISTBOX,
    529                               LM_QUERYITEMTEXT,
    530                               MPFROM2SHORT(sSelect, CCHMAXPATH),
    531                               MPFROMP(text));
    532             p = strchr(text, '>');
    533             if (!p) {
    534               DosBeep(50, 100);
    535               break;
    536             }
    537             p++;
    538             bstrip(p);
    539             if (!*p)
    540               DosBeep(50, 100);
    541             else
    542               ViewHelp(p);
    543             break;
     513        SHORT sSelect;
     514        CHAR text[CCHMAXPATH * 2], filename[CCHMAXPATH], *p;
     515        FILE *fp;
     516        BOOL notfirst = FALSE;
     517
     518        sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
     519                                            VINF_LISTBOX,
     520                                            LM_QUERYSELECTION,
     521                                            MPFROM2SHORT(LIT_FIRST, 0),
     522                                            MPVOID);
     523        if (sSelect < 0) {
     524          DosBeep(50, 100);
     525        }
     526        else {
     527          if (help) {
     528            *text = 0;
     529            WinSendDlgItemMsg(hwnd,
     530                              VINF_LISTBOX,
     531                              LM_QUERYITEMTEXT,
     532                              MPFROM2SHORT(sSelect, CCHMAXPATH),
     533                              MPFROMP(text));
     534            p = strchr(text, '>');
     535            if (!p) {
     536              DosBeep(50, 100);
     537              break;
     538            }
     539            p++;
     540            bstrip(p);
     541            if (!*p)
     542              DosBeep(50, 100);
     543            else
     544              ViewHelp(p);
     545            break;
    544546          }
    545547          BldFullPathName(filename, pFM2SaveDirectory, "FM2VINF.CMD");
    546           fp = xfopen(filename, "w", pszSrcFile, __LINE__);
    547           if (fp) {
    548             fprintf(fp, "@ECHO OFF\nSET FM2REF=");
    549             while (sSelect >= 0) {
    550               *text = 0;
    551               WinSendDlgItemMsg(hwnd,
    552                                 VINF_LISTBOX,
    553                                 LM_QUERYITEMTEXT,
    554                                 MPFROM2SHORT(sSelect,
    555                                              CCHMAXPATH), MPFROMP(text));
    556               p = strchr(text, '>');
    557               if (p) {
    558                 p++;
    559                 bstrip(p);
    560                 if (*p) {
    561                   if (notfirst)
    562                     fprintf(fp, "+");
    563                   notfirst = TRUE;
    564                   fprintf(fp, "%s", p);
    565                 }
    566               }
    567               sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
    568                                                   VINF_LISTBOX,
    569                                                   LM_QUERYSELECTION,
    570                                                   MPFROM2SHORT(sSelect, 0),
    571                                                   MPVOID);
    572             }                           // while
    573             *text = 0;
    574             WinQueryDlgItemText(hwnd, VINF_TOPIC, CCHMAXPATH * 2, text);
    575             bstrip(text);
    576             fprintf(fp,
    577                     "\nVIEW FM2REF%s%s\nDEL %s\n",
    578                     (*text) ? " " : NullStr, text, filename);
    579             fclose(fp);
    580             runemf2(SEPARATE | WINDOWED | MINIMIZED |
    581                     BACKGROUND | INVISIBLE,
    582                     hwnd, pszSrcFile, __LINE__,
    583                     NULL, NULL, "%s /C %s", GetCmdSpec(FALSE), filename);
    584           }
    585         }
     548          fp = xfopen(filename, "w", pszSrcFile, __LINE__);
     549          if (fp) {
     550            fprintf(fp, "@ECHO OFF\nSET FM2REF=");
     551            while (sSelect >= 0) {
     552              *text = 0;
     553              WinSendDlgItemMsg(hwnd,
     554                                VINF_LISTBOX,
     555                                LM_QUERYITEMTEXT,
     556                                MPFROM2SHORT(sSelect,
     557                                             CCHMAXPATH), MPFROMP(text));
     558              p = strchr(text, '>');
     559              if (p) {
     560                p++;
     561                bstrip(p);
     562                if (*p) {
     563                  if (notfirst)
     564                    fprintf(fp, "+");
     565                  notfirst = TRUE;
     566                  fprintf(fp, "%s", p);
     567                }
     568              }
     569              sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
     570                                                  VINF_LISTBOX,
     571                                                  LM_QUERYSELECTION,
     572                                                  MPFROM2SHORT(sSelect, 0),
     573                                                  MPVOID);
     574            }                           // while
     575            *text = 0;
     576            WinQueryDlgItemText(hwnd, VINF_TOPIC, CCHMAXPATH * 2, text);
     577            bstrip(text);
     578            fprintf(fp,
     579                    "\nVIEW FM2REF%s%s\nDEL %s\n",
     580                    (*text) ? " " : NullStr, text, filename);
     581            fclose(fp);
     582            runemf2(SEPARATE | WINDOWED | MINIMIZED |
     583                    BACKGROUND | INVISIBLE,
     584                    hwnd, pszSrcFile, __LINE__,
     585                    NULL, NULL, "%s /C %s", GetCmdSpec(FALSE), filename);
     586          }
     587        }
    586588      }
    587589      break;
     
    589591    case IDM_HELP:
    590592      if (hwndHelp) {
    591         if (help)
    592           WinSendMsg(hwndHelp,
    593                      HM_DISPLAY_HELP,
    594                      MPFROM2SHORT(HELP_VIEWHELPS, 0),
    595                      MPFROMSHORT(HM_RESOURCEID));
    596         else
    597           WinSendMsg(hwndHelp,
    598                      HM_DISPLAY_HELP,
    599                      MPFROM2SHORT(HELP_VIEWINF, 0),
    600                      MPFROMSHORT(HM_RESOURCEID));
     593        if (help)
     594          WinSendMsg(hwndHelp,
     595                     HM_DISPLAY_HELP,
     596                     MPFROM2SHORT(HELP_VIEWHELPS, 0),
     597                     MPFROMSHORT(HM_RESOURCEID));
     598        else
     599          WinSendMsg(hwndHelp,
     600                     HM_DISPLAY_HELP,
     601                     MPFROM2SHORT(HELP_VIEWINF, 0),
     602                     MPFROMSHORT(HM_RESOURCEID));
    601603      }
    602604      break;
     
    613615      hwndMe = (HWND) 0;
    614616      if (hptrIcon)
    615         WinDestroyPointer(hptrIcon);
     617        WinDestroyPointer(hptrIcon);
    616618      hptrIcon = (HPOINTER) 0;
    617619    }
Note: See TracChangeset for help on using the changeset viewer.