Changeset 551 for trunk/dll/assoc.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/assoc.c

    r529 r551  
    3232#pragma data_seg(DATA1)
    3333
    34 typedef struct {
    35   CHAR  mask[CCHMAXPATH];
    36   CHAR  cl[1001];
    37   CHAR  sig[CCHMAXPATH];
    38   LONG  offset;
     34typedef struct
     35{
     36  CHAR mask[CCHMAXPATH];
     37  CHAR cl[1001];
     38  CHAR sig[CCHMAXPATH];
     39  LONG offset;
    3940  ULONG flags;
    40 } ASSOC;
    41 
    42 typedef struct LINKASSOC {
    43   CHAR             *mask;
    44   CHAR             *cl;
    45   CHAR             *sig;
    46   LONG              offset;
    47   ULONG             flags;
     41}
     42ASSOC;
     43
     44typedef struct LINKASSOC
     45{
     46  CHAR *mask;
     47  CHAR *cl;
     48  CHAR *sig;
     49  LONG offset;
     50  ULONG flags;
    4851  struct LINKASSOC *prev;
    4952  struct LINKASSOC *next;
    50 } LINKASSOC;
    51 
    52 
    53 static LINKASSOC *asshead     = NULL,*asstail = NULL;
    54 static BOOL       assloaded = FALSE,replace = FALSE ;
     53}
     54LINKASSOC;
     55
     56static LINKASSOC *asshead = NULL, *asstail = NULL;
     57static BOOL assloaded = FALSE, replace = FALSE;
    5558
    5659static PSZ pszSrcFile = __FILE__;
     
    5962#pragma alloc_text(ASSOC2,ExecAssociation,AssocTextProc)
    6063
    61 MRESULT EXPENTRY AssocTextProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
    62 {
    63   PFNWP oldproc = (PFNWP)WinQueryWindowPtr(hwnd,QWL_USER);
     64MRESULT EXPENTRY AssocTextProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
     65{
     66  PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, QWL_USER);
    6467  static BOOL emphasized = FALSE;
    6568
    66   switch(msg) {
    67     case DM_DRAGOVER:
    68       if(!emphasized) {
    69         emphasized = TRUE;
    70         DrawTargetEmphasis(hwnd,emphasized);
    71       }
    72       if(AcceptOneDrop(mp1,mp2))
    73         return MRFROM2SHORT(DOR_DROP,
    74                             DO_MOVE);
    75       return MRFROM2SHORT(DOR_NEVERDROP,0);
    76 
    77     case DM_DRAGLEAVE:
    78       if(emphasized) {
    79         emphasized = FALSE;
    80         DrawTargetEmphasis(hwnd,emphasized);
    81       }
    82       break;
    83 
    84     case DM_DROPHELP:
    85       DropHelp(mp1,mp2,hwnd,GetPString(IDS_ASSOCDROPHELPTEXT));
    86       return 0;
    87 
    88     case DM_DROP:
    89       {
    90         char szFrom[CCHMAXPATH + 5];
    91 
    92         if(emphasized) {
    93           emphasized = FALSE;
    94           DrawTargetEmphasis(hwnd,emphasized);
    95         }
    96         if(GetOneDrop(mp1,mp2,szFrom,CCHMAXPATH)) {
    97           strcat(szFrom," %a");
    98           WinSetWindowText(hwnd,szFrom);
    99         }
    100       }
    101       return 0;
     69  switch (msg) {
     70  case DM_DRAGOVER:
     71    if (!emphasized) {
     72      emphasized = TRUE;
     73      DrawTargetEmphasis(hwnd, emphasized);
     74    }
     75    if (AcceptOneDrop(mp1, mp2))
     76      return MRFROM2SHORT(DOR_DROP, DO_MOVE);
     77    return MRFROM2SHORT(DOR_NEVERDROP, 0);
     78
     79  case DM_DRAGLEAVE:
     80    if (emphasized) {
     81      emphasized = FALSE;
     82      DrawTargetEmphasis(hwnd, emphasized);
     83    }
     84    break;
     85
     86  case DM_DROPHELP:
     87    DropHelp(mp1, mp2, hwnd, GetPString(IDS_ASSOCDROPHELPTEXT));
     88    return 0;
     89
     90  case DM_DROP:
     91    {
     92      char szFrom[CCHMAXPATH + 5];
     93
     94      if (emphasized) {
     95        emphasized = FALSE;
     96        DrawTargetEmphasis(hwnd, emphasized);
     97      }
     98      if (GetOneDrop(mp1, mp2, szFrom, CCHMAXPATH)) {
     99        strcat(szFrom, " %a");
     100        WinSetWindowText(hwnd, szFrom);
     101      }
     102    }
     103    return 0;
    102104  }
    103   return (oldproc) ? oldproc(hwnd,msg,mp1,mp2) :
    104                      WinDefWindowProc(hwnd,msg,mp1,mp2);
    105 }
    106 
    107 
    108 VOID free_associations (VOID)
    109 {
    110   LINKASSOC *info,*next;
     105  return (oldproc) ? oldproc(hwnd, msg, mp1, mp2) :
     106    WinDefWindowProc(hwnd, msg, mp1, mp2);
     107}
     108
     109VOID free_associations(VOID)
     110{
     111  LINKASSOC *info, *next;
    111112
    112113  info = asshead;
    113   while(info) {
     114  while (info) {
    114115    next = info->next;
    115116    free(info->mask);
    116117    free(info->cl);
    117     if(info->sig)
     118    if (info->sig)
    118119      free(info->sig);
    119120    free(info);
     
    123124}
    124125
    125 
    126 VOID load_associations (VOID)
    127 {
    128   FILE      *fp;
     126VOID load_associations(VOID)
     127{
     128  FILE *fp;
    129129  LINKASSOC *info;
    130   CHAR       cl[1024];
    131   CHAR       mask[CCHMAXPATH + 24];
    132   CHAR       sig[CCHMAXPATH + 24];
    133   CHAR       offset[72];
    134   CHAR       flags[72];
    135 
    136   if(asshead)
     130  CHAR cl[1024];
     131  CHAR mask[CCHMAXPATH + 24];
     132  CHAR sig[CCHMAXPATH + 24];
     133  CHAR offset[72];
     134  CHAR flags[72];
     135
     136  if (asshead)
    137137    free_associations();
    138138  assloaded = TRUE;
    139139  save_dir2(mask);
    140   if(mask[strlen(mask) - 1] != '\\')
    141     strcat(mask,"\\");
    142   strcat(mask,"ASSOC.DAT");
    143   fp = _fsopen(mask,"r",SH_DENYWR);
     140  if (mask[strlen(mask) - 1] != '\\')
     141    strcat(mask, "\\");
     142  strcat(mask, "ASSOC.DAT");
     143  fp = _fsopen(mask, "r", SH_DENYWR);
    144144  if (fp) {
    145     while(!feof(fp)) {
    146       if (!xfgets(mask,sizeof(mask),fp,pszSrcFile,__LINE__))    // fixme why +24?
    147         break;
     145    while (!feof(fp)) {
     146      if (!xfgets(mask, sizeof(mask), fp, pszSrcFile, __LINE__))        // fixme why +24?
     147        break;
    148148      mask[CCHMAXPATH] = 0;
    149149      bstripcr(mask);
    150       if(!*mask || *mask == ';')
    151         continue;
    152       if(!xfgets(cl,sizeof(cl),fp,pszSrcFile,__LINE__) ||
    153          !xfgets(sig,CCHMAXPATH + 24,fp,pszSrcFile,__LINE__) ||
    154          !xfgets(offset,sizeof(offset),fp,pszSrcFile,__LINE__) ||
    155          !xfgets(flags,sizeof(flags),fp,pszSrcFile,__LINE__))
    156         break;                       /* error! */
     150      if (!*mask || *mask == ';')
     151        continue;
     152      if (!xfgets(cl, sizeof(cl), fp, pszSrcFile, __LINE__) ||
     153          !xfgets(sig, CCHMAXPATH + 24, fp, pszSrcFile, __LINE__) ||
     154          !xfgets(offset, sizeof(offset), fp, pszSrcFile, __LINE__) ||
     155          !xfgets(flags, sizeof(flags), fp, pszSrcFile, __LINE__))
     156        break;                          /* error! */
    157157      cl[1000] = 0;
    158158      bstripcr(cl);
     
    164164      bstripcr(flags);
    165165      if (!*cl)
    166         continue;
    167       info = xmallocz(sizeof(LINKASSOC),pszSrcFile,__LINE__);
     166        continue;
     167      info = xmallocz(sizeof(LINKASSOC), pszSrcFile, __LINE__);
    168168      if (info) {
    169         info->cl = xstrdup(cl,pszSrcFile,__LINE__);
    170         info->mask = xstrdup(mask,pszSrcFile,__LINE__);
    171         if(*sig)
    172           info->sig = xstrdup(sig,pszSrcFile,__LINE__);
    173         info->offset = atol(offset);
    174         info->flags = atol(flags);
    175         if (!info->cl || !info->mask) {
    176           if (info->cl)
    177             free(info->cl);
    178           if (info->mask)
    179             free(info->mask);
    180           free (info);
    181           break;
    182         }
    183         if(!asshead)
    184           asshead = info;
    185         else {
    186           asstail->next = info;
    187           info->prev = asstail;
    188         }
    189         asstail = info;
     169        info->cl = xstrdup(cl, pszSrcFile, __LINE__);
     170        info->mask = xstrdup(mask, pszSrcFile, __LINE__);
     171        if (*sig)
     172          info->sig = xstrdup(sig, pszSrcFile, __LINE__);
     173        info->offset = atol(offset);
     174        info->flags = atol(flags);
     175        if (!info->cl || !info->mask) {
     176          if (info->cl)
     177            free(info->cl);
     178          if (info->mask)
     179            free(info->mask);
     180          free(info);
     181          break;
     182        }
     183        if (!asshead)
     184          asshead = info;
     185        else {
     186          asstail->next = info;
     187          info->prev = asstail;
     188        }
     189        asstail = info;
    190190      }
    191191    }
     
    194194}
    195195
    196 
    197 VOID save_associations (VOID)
     196VOID save_associations(VOID)
    198197{
    199198  LINKASSOC *info;
    200   FILE      *fp;
    201   CHAR       s[CCHMAXPATH + 14];
    202 
    203   if(!assloaded || !asshead)
     199  FILE *fp;
     200  CHAR s[CCHMAXPATH + 14];
     201
     202  if (!assloaded || !asshead)
    204203    return;
    205204  info = asshead;
    206205#ifdef NEVER
    207   while(info) {
     206  while (info) {
    208207    next = info->next;
    209     if(!strcmp("*",info->mask)) {
    210       if(info != asshead) {                 /* already top record */
    211         if(info->prev)
    212           (info->prev)->next = info->next;
    213         if(info->next)
    214           (info->next)->prev = info->prev;
    215         if(info == asstail)
    216           asstail = info->prev;
    217         info->next = asshead->next;
    218         info->prev = NULL;
    219         asshead = info;
     208    if (!strcmp("*", info->mask)) {
     209      if (info != asshead) {            /* already top record */
     210        if (info->prev)
     211          (info->prev)->next = info->next;
     212        if (info->next)
     213          (info->next)->prev = info->prev;
     214        if (info == asstail)
     215          asstail = info->prev;
     216        info->next = asshead->next;
     217        info->prev = NULL;
     218        asshead = info;
    220219      }
    221220    }
     
    224223#endif
    225224  save_dir2(s);
    226   if(s[strlen(s) - 1] != '\\')
    227     strcat(s,"\\");
    228   strcat(s,"ASSOC.DAT");
    229   fp = xfopen(s,"w",pszSrcFile,__LINE__);
     225  if (s[strlen(s) - 1] != '\\')
     226    strcat(s, "\\");
     227  strcat(s, "ASSOC.DAT");
     228  fp = xfopen(s, "w", pszSrcFile, __LINE__);
    230229  if (fp) {
    231     fputs(GetPString(IDS_ASSOCFILETEXT),fp);
     230    fputs(GetPString(IDS_ASSOCFILETEXT), fp);
    232231    info = asshead;
    233     while(info) {
     232    while (info) {
    234233      fprintf(fp,
    235               ";\n%0.*s\n%0.1000s\n%0.*s\n%lu\n%lu\n",
    236               CCHMAXPATH,
    237               info->mask,
    238               info->cl,
    239               CCHMAXPATH,
    240               (info->sig) ? info->sig : NullStr,
    241               info->offset,
    242               info->flags);
     234              ";\n%0.*s\n%0.1000s\n%0.*s\n%lu\n%lu\n",
     235              CCHMAXPATH,
     236              info->mask,
     237              info->cl,
     238              CCHMAXPATH,
     239              (info->sig) ? info->sig : NullStr, info->offset, info->flags);
    243240      info = info->next;
    244241    }
     
    249246#pragma alloc_text(ASSOC,add_association,kill_association,AssocDlgProc,EditAssociations)
    250247
    251 
    252 LINKASSOC * add_association (ASSOC *addme)
     248LINKASSOC *add_association(ASSOC * addme)
    253249{
    254250  LINKASSOC *info;
    255251
    256   if(addme && *addme->cl && *addme->mask) {
     252  if (addme && *addme->cl && *addme->mask) {
    257253    info = asshead;
    258     while(info) {
    259       if((!replace) && (!stricmp(info->mask,addme->mask) &&
    260         ((!info->sig && !*addme->sig) || (!replace) &&
    261           (info->sig && !strcmp(addme->sig,info->sig)))))
    262         return NULL;
     254    while (info) {
     255      if ((!replace) && (!stricmp(info->mask, addme->mask) &&
     256                        ((!info->sig && !*addme->sig) || (!replace) &&
     257                          (info->sig && !strcmp(addme->sig, info->sig)))))
     258        return NULL;
    263259      info = info->next;
    264260    }
    265     if(!info) {
    266       info = xmallocz(sizeof(LINKASSOC),pszSrcFile,__LINE__);
    267       if(info) {
    268         info->cl = xstrdup(addme->cl,pszSrcFile,__LINE__);
    269         info->mask = xstrdup(addme->mask,pszSrcFile,__LINE__);
    270         if(*addme->sig)
    271           info->sig = xstrdup(addme->sig,pszSrcFile,__LINE__);
    272         if(addme->offset)
    273           info->offset = addme->offset;
    274         if(addme->flags)
    275           info->flags = addme->flags;
    276         if(!info->cl || !info->mask) {
    277           if(info->cl)
    278             free(info->cl);
    279           if(info->mask)
    280             free(info->mask);
    281           free(info);
    282         }
    283         else {
    284           if(!asshead)                         /* only item in list */
    285             asshead = asstail = info;
    286           else {
    287             if(asstail) {                      /* place at tail */
    288               asstail->next = info;
    289               info->prev = asstail;
    290             }
    291             asstail = info;
    292           }
    293           return info;
    294         }
     261    if (!info) {
     262      info = xmallocz(sizeof(LINKASSOC), pszSrcFile, __LINE__);
     263      if (info) {
     264        info->cl = xstrdup(addme->cl, pszSrcFile, __LINE__);
     265        info->mask = xstrdup(addme->mask, pszSrcFile, __LINE__);
     266        if (*addme->sig)
     267          info->sig = xstrdup(addme->sig, pszSrcFile, __LINE__);
     268        if (addme->offset)
     269          info->offset = addme->offset;
     270        if (addme->flags)
     271          info->flags = addme->flags;
     272        if (!info->cl || !info->mask) {
     273          if (info->cl)
     274            free(info->cl);
     275          if (info->mask)
     276            free(info->mask);
     277          free(info);
     278        }
     279        else {
     280          if (!asshead)                 /* only item in list */
     281            asshead = asstail = info;
     282          else {
     283            if (asstail) {              /* place at tail */
     284              asstail->next = info;
     285              info->prev = asstail;
     286            }
     287            asstail = info;
     288          }
     289          return info;
     290        }
    295291      }
    296292    }
     
    299295}
    300296
    301 
    302 BOOL kill_association (ASSOC *killme)
     297BOOL kill_association(ASSOC * killme)
    303298{
    304299  LINKASSOC *info;
    305300
    306   if(killme && *killme->mask) {
     301  if (killme && *killme->mask) {
    307302    info = asshead;
    308     while(info) {
    309         if(!stricmp(info->mask,killme->mask) &&
    310            info->offset == killme->offset &&
    311          (((!info->sig || !*info->sig) && !*killme->sig) ||
    312           (info->sig && !strcmp(killme->sig,info->sig)))) {
    313         if(info == asshead) {
    314           asshead = info->next;
    315           if(info == asstail)
    316             asstail = info->prev;
    317         }
    318         else {
    319           if(info->next)
    320             (info->next)->prev = info->prev;
    321           if(info->prev)
    322             (info->prev)->next = info->next;
    323           if(info == asstail)
    324             asstail = info->prev;
    325         }
    326         free(info->cl);
    327         free(info->mask);
    328        if(info->sig)
    329           free(info->sig);
    330         free(info);
    331         return TRUE;
     303    while (info) {
     304      if (!stricmp(info->mask, killme->mask) &&
     305          info->offset == killme->offset &&
     306          (((!info->sig || !*info->sig) && !*killme->sig) ||
     307           (info->sig && !strcmp(killme->sig, info->sig)))) {
     308        if (info == asshead) {
     309          asshead = info->next;
     310          if (info == asstail)
     311            asstail = info->prev;
     312        }
     313        else {
     314          if (info->next)
     315            (info->next)->prev = info->prev;
     316          if (info->prev)
     317            (info->prev)->next = info->next;
     318          if (info == asstail)
     319            asstail = info->prev;
     320        }
     321        free(info->cl);
     322        free(info->mask);
     323        if (info->sig)
     324          free(info->sig);
     325        free(info);
     326        return TRUE;
    332327      }
    333328      info = info->next;
     
    337332}
    338333
    339 
    340 INT ExecAssociation (HWND hwnd, CHAR *datafile)
    341 {
    342   CHAR      *file,sig[CCHMAXPATH],sigl[CCHMAXPATH],mask[CCHMAXPATH],*p;
    343   FILE      *fp;
    344   BOOL       didmatch,exclude;
    345   ULONG      offset;
     334INT ExecAssociation(HWND hwnd, CHAR * datafile)
     335{
     336  CHAR *file, sig[CCHMAXPATH], sigl[CCHMAXPATH], mask[CCHMAXPATH], *p;
     337  FILE *fp;
     338  BOOL didmatch, exclude;
     339  ULONG offset;
    346340  LINKASSOC *info;
    347341
    348   if(!assloaded)
     342  if (!assloaded)
    349343    load_associations();
    350   if(!asshead)
     344  if (!asshead)
    351345    return -1;
    352   if(!datafile ||
    353      !*datafile)
     346  if (!datafile || !*datafile)
    354347    return -1;
    355   file = strrchr(datafile,'\\');
    356   if(!file)
    357     file = strrchr(datafile,':');
    358   if(file)
     348  file = strrchr(datafile, '\\');
     349  if (!file)
     350    file = strrchr(datafile, ':');
     351  if (file)
    359352    file++;
    360353  else
    361354    file = datafile;
    362355  info = asshead;
    363   while(info) {
    364     strcpy(mask,
    365            info->mask);
    366     p = strtok(mask,";");
    367     while(p) {
    368       if(*p == '/') {
    369         p++;
    370         exclude = TRUE;
     356  while (info) {
     357    strcpy(mask, info->mask);
     358    p = strtok(mask, ";");
     359    while (p) {
     360      if (*p == '/') {
     361        p++;
     362        exclude = TRUE;
    371363      }
    372364      else
    373         exclude = FALSE;
    374       didmatch = wildcard((strchr(p,'\\') ||
    375                            strchr(p,':')) ?
    376                            datafile :
    377                            file,
    378                           p,
    379                           FALSE);
    380       if(exclude &&
    381          didmatch)
    382         didmatch = FALSE;
    383       if(didmatch) {
    384         if(info->sig &&
    385            *info->sig) {
    386           strcpy(sigl,
    387                  info->sig);
    388           literal(sigl);
    389           fp = _fsopen(datafile,"rb",SH_DENYNO);
    390           if (fp) {
    391             if(info->offset < 0L) {
    392               fseek(fp,
    393                     0L,
    394                     SEEK_END);
    395               offset = ftell(fp) + info->offset;
    396             }
    397             else
    398               offset = info->offset;
    399             fseek(fp,
    400                   offset,
    401                   SEEK_SET);
    402             if(fread(sig,
    403                      1,
    404                      strlen(sigl),
    405                      fp) !=
    406                strlen(sigl) ||
    407                strncmp(sigl,
    408                        sig,
    409                        strlen(sigl)))
    410               didmatch = FALSE;
    411             fclose(fp);
    412           }
    413         }
    414       }
    415       if(didmatch) {   /* got a match; do it... */
    416 
    417         CHAR *list[2];
    418         INT   flags,rc;
    419         BOOL  dieafter = FALSE;
    420 
    421         if(fAmAV2) {
    422           if(stristr(info->cl,"AV2.EXE") ||
    423              stristr(info->cl,"AV2.CMD") ||
    424              stristr(info->cl,"<>"))
    425             return -1;
    426         }
    427         if(!strcmp(info->cl,"<>")) {
    428           OpenObject(datafile,
    429                      Default,
    430                      hwnd);
    431           return 0;
    432         }
    433         list[0] = datafile;
    434         list[1] = NULL;
    435         flags = info->flags;
    436         if(!(flags & FULLSCREEN))
    437           flags |= WINDOWED;
    438         if(flags & KEEP)
    439           flags |= SEPARATEKEEP;
    440         else
    441           flags |= SEPARATE;
    442         flags &= (~KEEP);
    443         if(flags & DIEAFTER)
    444           dieafter = TRUE;
    445         flags &= (~DIEAFTER);
    446         rc = ExecOnList(hwnd,
    447                         info->cl,
    448                         flags,
    449                         NULL,
    450                         list,
    451                         GetPString(IDS_EXECASSOCTITLETEXT));
    452         if(rc != -1 &&
    453            dieafter)
    454           PostMsg((HWND)0,
    455                   WM_QUIT,
    456                   MPVOID,
    457                   MPVOID);
    458         return rc;
    459       }
    460       p = strtok(0,";");
     365        exclude = FALSE;
     366      didmatch = wildcard((strchr(p, '\\') ||
     367                           strchr(p, ':')) ? datafile : file, p, FALSE);
     368      if (exclude && didmatch)
     369        didmatch = FALSE;
     370      if (didmatch) {
     371        if (info->sig && *info->sig) {
     372          strcpy(sigl, info->sig);
     373          literal(sigl);
     374          fp = _fsopen(datafile, "rb", SH_DENYNO);
     375          if (fp) {
     376            if (info->offset < 0L) {
     377              fseek(fp, 0L, SEEK_END);
     378              offset = ftell(fp) + info->offset;
     379            }
     380            else
     381              offset = info->offset;
     382            fseek(fp, offset, SEEK_SET);
     383            if (fread(sig,
     384                      1,
     385                      strlen(sigl),
     386                      fp) != strlen(sigl) || strncmp(sigl, sig, strlen(sigl)))
     387              didmatch = FALSE;
     388            fclose(fp);
     389          }
     390        }
     391      }
     392      if (didmatch) {                   /* got a match; do it... */
     393
     394        CHAR *list[2];
     395        INT flags, rc;
     396        BOOL dieafter = FALSE;
     397
     398        if (fAmAV2) {
     399          if (stristr(info->cl, "AV2.EXE") ||
     400              stristr(info->cl, "AV2.CMD") || stristr(info->cl, "<>"))
     401            return -1;
     402        }
     403        if (!strcmp(info->cl, "<>")) {
     404          OpenObject(datafile, Default, hwnd);
     405          return 0;
     406        }
     407        list[0] = datafile;
     408        list[1] = NULL;
     409        flags = info->flags;
     410        if (!(flags & FULLSCREEN))
     411          flags |= WINDOWED;
     412        if (flags & KEEP)
     413          flags |= SEPARATEKEEP;
     414        else
     415          flags |= SEPARATE;
     416        flags &= (~KEEP);
     417        if (flags & DIEAFTER)
     418          dieafter = TRUE;
     419        flags &= (~DIEAFTER);
     420        rc = ExecOnList(hwnd,
     421                        info->cl,
     422                        flags,
     423                        NULL, list, GetPString(IDS_EXECASSOCTITLETEXT));
     424        if (rc != -1 && dieafter)
     425          PostMsg((HWND) 0, WM_QUIT, MPVOID, MPVOID);
     426        return rc;
     427      }
     428      p = strtok(0, ";");
    461429    }
    462430    info = info->next;
     
    465433}
    466434
    467 
    468 MRESULT EXPENTRY AssocDlgProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
     435MRESULT EXPENTRY AssocDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
    469436{
    470437  LINKASSOC *info;
    471   SHORT      x , y;
    472 
    473   switch(msg) {
    474     case WM_INITDLG:
    475       WinSendDlgItemMsg(hwnd,ASS_LISTBOX,LM_DELETEALL,MPVOID,MPVOID);
    476       WinSendDlgItemMsg(hwnd,ASS_MASK,EM_SETTEXTLIMIT,
    477                         MPFROM2SHORT(CCHMAXPATH,0),MPVOID);
    478       WinSendDlgItemMsg(hwnd,ASS_CL,EM_SETTEXTLIMIT,
    479                         MPFROM2SHORT(1000,0),MPVOID);
    480       WinSendDlgItemMsg(hwnd,ASS_SIG,EM_SETTEXTLIMIT,
    481                         MPFROM2SHORT(CCHMAXPATH,0),MPVOID);
    482       WinSendDlgItemMsg(hwnd,ASS_OFFSET,EM_SETTEXTLIMIT,
    483                         MPFROM2SHORT(34,0),MPVOID);
    484       WinSetDlgItemText(hwnd,ASS_MASK,NullStr);
    485       WinSetDlgItemText(hwnd,ASS_CL,NullStr);
    486       WinSetDlgItemText(hwnd,ASS_SIG,NullStr);
    487       WinSetDlgItemText(hwnd,ASS_OFFSET,"0");
    488       WinCheckButton(hwnd,ASS_DEFAULT,TRUE);
    489       WinCheckButton(hwnd,ASS_PROMPT,FALSE);
    490       WinCheckButton(hwnd,ASS_KEEP,FALSE);
    491       WinCheckButton(hwnd,ASS_DIEAFTER,FALSE);
    492       PostMsg(hwnd,UM_UNDO,MPVOID,MPVOID);
     438  SHORT x, y;
     439
     440  switch (msg) {
     441  case WM_INITDLG:
     442    WinSendDlgItemMsg(hwnd, ASS_LISTBOX, LM_DELETEALL, MPVOID, MPVOID);
     443    WinSendDlgItemMsg(hwnd, ASS_MASK, EM_SETTEXTLIMIT,
     444                      MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
     445    WinSendDlgItemMsg(hwnd, ASS_CL, EM_SETTEXTLIMIT,
     446                      MPFROM2SHORT(1000, 0), MPVOID);
     447    WinSendDlgItemMsg(hwnd, ASS_SIG, EM_SETTEXTLIMIT,
     448                      MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
     449    WinSendDlgItemMsg(hwnd, ASS_OFFSET, EM_SETTEXTLIMIT,
     450                      MPFROM2SHORT(34, 0), MPVOID);
     451    WinSetDlgItemText(hwnd, ASS_MASK, NullStr);
     452    WinSetDlgItemText(hwnd, ASS_CL, NullStr);
     453    WinSetDlgItemText(hwnd, ASS_SIG, NullStr);
     454    WinSetDlgItemText(hwnd, ASS_OFFSET, "0");
     455    WinCheckButton(hwnd, ASS_DEFAULT, TRUE);
     456    WinCheckButton(hwnd, ASS_PROMPT, FALSE);
     457    WinCheckButton(hwnd, ASS_KEEP, FALSE);
     458    WinCheckButton(hwnd, ASS_DIEAFTER, FALSE);
     459    PostMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
     460    {
     461      PFNWP oldproc;
     462
     463      oldproc = WinSubclassWindow(WinWindowFromID(hwnd, ASS_CL),
     464                                  (PFNWP) AssocTextProc);
     465      if (oldproc)
     466        WinSetWindowPtr(WinWindowFromID(hwnd, ASS_CL), QWL_USER,
     467                        (PVOID) oldproc);
     468    }
     469    break;
     470
     471  case UM_UNDO:
     472    {
     473      CHAR s[1002 + CCHMAXPATH + 6];
     474
     475      WinSendDlgItemMsg(hwnd, ASS_LISTBOX, LM_DELETEALL, MPVOID, MPVOID);
     476      info = asshead;
     477      while (info) {
     478        sprintf(s,
     479                "%-12s \x1a %-24s %s%s%s",
     480                info->mask,
     481                info->cl,
     482                (info->sig && *info->sig) ?
     483                "[" : NullStr,
     484                (info->sig && *info->sig) ? info->sig : NullStr,
     485                (info->sig && *info->sig) ? "]" : NullStr);
     486        x = (SHORT) WinSendDlgItemMsg(hwnd,
     487                                      ASS_LISTBOX,
     488                                      LM_INSERTITEM,
     489                                      MPFROM2SHORT(LIT_END, 0), MPFROMP(s));
     490        if (x >= 0)
     491          WinSendDlgItemMsg(hwnd,
     492                            ASS_LISTBOX,
     493                            LM_SETITEMHANDLE, MPFROMSHORT(x), MPFROMP(info));
     494        info = info->next;
     495      }
     496      WinSendDlgItemMsg(hwnd,
     497                        ASS_LISTBOX,
     498                        LM_SELECTITEM, MPFROMSHORT(0), MPFROMSHORT(TRUE));
     499    }
     500    return 0;
     501
     502  case WM_CONTROL:
     503    if (SHORT1FROMMP(mp1) == ASS_LISTBOX) {
     504      switch (SHORT2FROMMP(mp1)) {
     505      case LN_ENTER:
     506      case LN_SELECT:
     507        x = (SHORT) WinSendDlgItemMsg(hwnd,
     508                                      ASS_LISTBOX,
     509                                      LM_QUERYSELECTION,
     510                                      MPFROMSHORT(LIT_FIRST), MPVOID);
     511        if (x >= 0) {
     512
     513          CHAR s[36];
     514
     515          info = (LINKASSOC *) WinSendDlgItemMsg(hwnd,
     516                                                 ASS_LISTBOX,
     517                                                 LM_QUERYITEMHANDLE,
     518                                                 MPFROMSHORT(x), MPVOID);
     519          if (!info) {
     520            Runtime_Error(pszSrcFile, __LINE__, "Query item handle failed");
     521            break;
     522          }
     523          WinSetDlgItemText(hwnd, ASS_MASK, info->mask);
     524          WinSetDlgItemText(hwnd, ASS_CL, info->cl);
     525          WinSetDlgItemText(hwnd, ASS_SIG,
     526                            (info->sig && *info->sig) ? info->sig : NullStr);
     527          sprintf(s, "%ld", info->offset);
     528          WinSetDlgItemText(hwnd, ASS_OFFSET, s);
     529          if (!(info->flags & 1023))
     530            WinCheckButton(hwnd, ASS_DEFAULT, TRUE);
     531          else {
     532            if (info->flags & FULLSCREEN)
     533              WinCheckButton(hwnd, ASS_FULLSCREEN, TRUE);
     534            else if (info->flags & MINIMIZED)
     535              WinCheckButton(hwnd, ASS_MINIMIZED, TRUE);
     536            else if (info->flags & MAXIMIZED)
     537              WinCheckButton(hwnd, ASS_MAXIMIZED, TRUE);
     538            else if (info->flags & INVISIBLE)
     539              WinCheckButton(hwnd, ASS_INVISIBLE, TRUE);
     540          }
     541          WinCheckButton(hwnd, ASS_KEEP, ((info->flags & KEEP) != 0));
     542          WinCheckButton(hwnd, ASS_DIEAFTER, ((info->flags & DIEAFTER) != 0));
     543          WinCheckButton(hwnd, ASS_PROMPT, ((info->flags & PROMPT) != 0));
     544          {
     545            CHAR env[1002];
     546            ULONG size;
     547
     548            *env = 0;
     549            size = sizeof(env) - 1;
     550            if (PrfQueryProfileData(fmprof,
     551                                    FM3Str, info->cl, env, &size) && *env)
     552              WinSetDlgItemText(hwnd, ASS_ENVIRON, env);
     553            else
     554              WinSetDlgItemText(hwnd, ASS_ENVIRON, NullStr);
     555          }
     556        }
     557        break;
     558      }
     559    }
     560    return 0;
     561
     562  case WM_COMMAND:
     563    switch (SHORT1FROMMP(mp1)) {
     564    case ASS_TOP:
     565      x = (SHORT) WinSendDlgItemMsg(hwnd, ASS_LISTBOX,
     566                                    LM_QUERYSELECTION,
     567                                    MPFROMSHORT(LIT_FIRST), MPVOID);
     568      if (x >= 0) {
     569        info = (LINKASSOC *) WinSendDlgItemMsg(hwnd, ASS_LISTBOX,
     570                                               LM_QUERYITEMHANDLE,
     571                                               MPFROMSHORT(x), MPVOID);
     572        if (info) {
     573          if (info != asshead) {
     574            if (info->prev)
     575              info->prev->next = info->next;
     576            if (info->next)
     577              info->next->prev = info->prev;
     578            if (info == asstail)
     579              asstail = info->prev;
     580            info->prev = NULL;
     581            info->next = asshead;
     582            asshead->prev = info;
     583            asshead = info;
     584            WinSendMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
     585          }
     586        }
     587      }
     588      break;
     589
     590    case ASS_BOTTOM:
     591      x = (SHORT) WinSendDlgItemMsg(hwnd, ASS_LISTBOX,
     592                                    LM_QUERYSELECTION,
     593                                    MPFROMSHORT(LIT_FIRST), MPVOID);
     594      if (x >= 0) {
     595        info = (LINKASSOC *) WinSendDlgItemMsg(hwnd, ASS_LISTBOX,
     596                                               LM_QUERYITEMHANDLE,
     597                                               MPFROMSHORT(x), MPVOID);
     598        if (info) {
     599          if (info != asstail) {
     600            if (info->next)
     601              info->next->prev = info->prev;
     602            if (info->prev)
     603              info->prev->next = info->next;
     604            if (info == asshead)
     605              asshead = info->next;
     606            info->next = NULL;
     607            info->prev = asstail;
     608            asstail->next = info;
     609            asstail = info;
     610            WinSendMsg(hwnd, UM_UNDO, MPVOID, MPVOID);
     611          }
     612        }
     613      }
     614      break;
     615    case ASS_FIND:
    493616      {
    494         PFNWP oldproc;
    495 
    496         oldproc = WinSubclassWindow(WinWindowFromID(hwnd,ASS_CL),
    497                                     (PFNWP)AssocTextProc);
    498         if(oldproc)
    499           WinSetWindowPtr(WinWindowFromID(hwnd,ASS_CL),QWL_USER,(PVOID)oldproc);
     617        CHAR filename[CCHMAXPATH + 9];
     618
     619        *filename = 0;
     620        if (insert_filename(hwnd, filename, 2, FALSE) && *filename) {
     621          strcat(filename, " %a");
     622          WinSetDlgItemText(hwnd, ASS_CL, filename);
     623        }
    500624      }
    501625      break;
    502626
    503     case UM_UNDO:
     627    case DID_OK:
    504628      {
    505         CHAR s[1002 + CCHMAXPATH + 6];
    506 
    507         WinSendDlgItemMsg(hwnd,
    508                           ASS_LISTBOX,
    509                           LM_DELETEALL,
    510                           MPVOID,
    511                           MPVOID);
    512         info = asshead;
    513         while(info) {
    514           sprintf(s,
    515                   "%-12s \x1a %-24s %s%s%s",
    516                   info->mask,
    517                   info->cl,
    518                   (info->sig && *info->sig) ?
    519                    "[" : NullStr,
    520                    (info->sig && *info->sig) ? info->sig : NullStr,
    521                   (info->sig && *info->sig) ? "]" : NullStr);
    522           x = (SHORT)WinSendDlgItemMsg(hwnd,
    523                                        ASS_LISTBOX,
    524                                        LM_INSERTITEM,
    525                                        MPFROM2SHORT(LIT_END,0),
    526                                        MPFROMP(s));
    527           if(x >= 0)
    528             WinSendDlgItemMsg(hwnd,
    529                               ASS_LISTBOX,
    530                               LM_SETITEMHANDLE,
    531                               MPFROMSHORT(x),
    532                               MPFROMP(info));
    533           info = info->next;
    534         }
    535         WinSendDlgItemMsg(hwnd,
    536                           ASS_LISTBOX,
    537                           LM_SELECTITEM,
    538                           MPFROMSHORT(0),
    539                           MPFROMSHORT(TRUE));
    540       }
    541       return 0;
    542 
    543     case WM_CONTROL:
    544       if(SHORT1FROMMP(mp1) == ASS_LISTBOX) {
    545         switch(SHORT2FROMMP(mp1)) {
    546           case LN_ENTER:
    547           case LN_SELECT:
    548             x = (SHORT)WinSendDlgItemMsg(hwnd,
    549                                          ASS_LISTBOX,
    550                                          LM_QUERYSELECTION,
    551                                          MPFROMSHORT(LIT_FIRST),
    552                                          MPVOID);
    553             if(x >= 0) {
    554 
    555               CHAR s[36];
    556 
    557               info = (LINKASSOC *)WinSendDlgItemMsg(hwnd,
    558                                                     ASS_LISTBOX,
    559                                                     LM_QUERYITEMHANDLE,
    560                                                     MPFROMSHORT(x),
    561                                                     MPVOID);
    562               if(!info) {
    563                 Runtime_Error(pszSrcFile, __LINE__, "Query item handle failed");
    564                 break;
    565               }
    566               WinSetDlgItemText(hwnd,ASS_MASK,info->mask);
    567               WinSetDlgItemText(hwnd,ASS_CL,info->cl);
    568               WinSetDlgItemText(hwnd,ASS_SIG,
    569                                 (info->sig && *info->sig) ? info->sig : NullStr);
    570               sprintf(s,"%ld",info->offset);
    571               WinSetDlgItemText(hwnd,ASS_OFFSET,s);
    572               if(!(info->flags & 1023))
    573                 WinCheckButton(hwnd,ASS_DEFAULT,TRUE);
    574               else {
    575                 if(info->flags & FULLSCREEN)
    576                   WinCheckButton(hwnd,ASS_FULLSCREEN,TRUE);
    577                 else if(info->flags & MINIMIZED)
    578                   WinCheckButton(hwnd,ASS_MINIMIZED,TRUE);
    579                 else if(info->flags & MAXIMIZED)
    580                   WinCheckButton(hwnd,ASS_MAXIMIZED,TRUE);
    581                 else if(info->flags & INVISIBLE)
    582                   WinCheckButton(hwnd,ASS_INVISIBLE,TRUE);
    583               }
    584               WinCheckButton(hwnd,ASS_KEEP,((info->flags & KEEP) != 0));
    585               WinCheckButton(hwnd,ASS_DIEAFTER,((info->flags & DIEAFTER) != 0));
    586               WinCheckButton(hwnd,ASS_PROMPT,((info->flags & PROMPT) != 0));
    587               {
    588                 CHAR  env[1002];
    589                 ULONG size;
    590 
    591                 *env = 0;
    592                 size = sizeof(env) - 1;
    593                 if(PrfQueryProfileData(fmprof,
    594                                        FM3Str,
    595                                        info->cl,
    596                                        env,
    597                                        &size) &&
    598                    *env)
    599                   WinSetDlgItemText(hwnd,
    600                                     ASS_ENVIRON,
    601                                     env);
    602                 else
    603                   WinSetDlgItemText(hwnd,
    604                                     ASS_ENVIRON,
    605                                     NullStr);
    606               }
    607             }
    608             break;
    609         }
    610       }
    611       return 0;
    612 
    613     case WM_COMMAND:
    614       switch(SHORT1FROMMP(mp1)) {
    615         case ASS_TOP:
    616           x = (SHORT)WinSendDlgItemMsg(hwnd,ASS_LISTBOX,
    617                                        LM_QUERYSELECTION,
    618                                        MPFROMSHORT(LIT_FIRST),
    619                                        MPVOID);
    620           if(x >= 0) {
    621             info = (LINKASSOC *)WinSendDlgItemMsg(hwnd,ASS_LISTBOX,
    622                                                   LM_QUERYITEMHANDLE,
    623                                                   MPFROMSHORT(x),
    624                                                   MPVOID);
    625             if(info) {
    626               if(info != asshead) {
    627                 if(info->prev)
    628                   info->prev->next = info->next;
    629                 if(info->next)
    630                   info->next->prev = info->prev;
    631                 if(info == asstail)
    632                   asstail = info->prev;
    633                 info->prev = NULL;
    634                 info->next = asshead;
    635                 asshead->prev = info;
    636                 asshead = info;
    637                 WinSendMsg(hwnd,UM_UNDO,MPVOID,MPVOID);
    638               }
    639             }
    640           }
    641           break;
    642 
    643       case ASS_BOTTOM:
    644           x = (SHORT)WinSendDlgItemMsg(hwnd,ASS_LISTBOX,
    645                                        LM_QUERYSELECTION,
    646                                        MPFROMSHORT(LIT_FIRST),
    647                                        MPVOID);
    648           if(x >= 0) {
    649             info = (LINKASSOC *)WinSendDlgItemMsg(hwnd,ASS_LISTBOX,
    650                                                   LM_QUERYITEMHANDLE,
    651                                                   MPFROMSHORT(x),
    652                                                   MPVOID);
    653             if(info) {
    654               if(info != asstail) {
    655                 if(info->next)
    656                   info->next->prev = info->prev;
    657                 if(info->prev)
    658                   info->prev->next = info->next;
    659                 if(info == asshead)
    660                   asshead = info->next;
    661                 info->next = NULL;
    662                 info->prev = asstail;
    663                 asstail->next = info;
    664                 asstail = info;
    665                 WinSendMsg(hwnd,UM_UNDO,MPVOID,MPVOID);
    666               }
    667             }
    668           }
    669           break;
    670         case ASS_FIND:
    671           {
    672             CHAR filename[CCHMAXPATH + 9];
    673 
    674             *filename = 0;
    675             if(insert_filename(hwnd,filename,2,FALSE) && *filename) {
    676               strcat(filename," %a");
    677               WinSetDlgItemText(hwnd,ASS_CL,filename);
    678             }
    679           }
    680           break;
    681 
    682       case DID_OK:
    683                     {
    684             ASSOC temp;
    685             CHAR  dummy[34];
    686             replace=FALSE;
    687             {
    688             x = (SHORT)WinSendDlgItemMsg(hwnd,
    689                                            ASS_LISTBOX,
    690                                            LM_QUERYSELECTION,
    691                                            MPVOID,
    692                                            MPVOID);
    693             if(x==LIT_NONE)
    694              x = (SHORT) WinSendDlgItemMsg(hwnd,
    695                                            ASS_LISTBOX,
    696                                           LM_SELECTITEM,
    697                                           MPFROMSHORT(0),
    698                                           MPFROMSHORT(TRUE));
    699             }
    700             memset(&temp,0,sizeof(ASSOC));
    701             WinQueryDlgItemText(hwnd,ASS_MASK,sizeof(temp.mask),temp.mask);
    702             WinQueryDlgItemText(hwnd,ASS_CL,sizeof(temp.cl),temp.cl);
    703             WinQueryDlgItemText(hwnd,ASS_SIG,sizeof(temp.sig),temp.sig);
    704             rstrip(temp.sig);
    705             if(*temp.sig) {
    706               WinQueryDlgItemText(hwnd,ASS_OFFSET,sizeof(dummy),dummy);
    707               temp.offset = atol(dummy);
    708             }
    709             bstrip(temp.mask);
    710             bstrip(temp.cl);
    711             if(WinQueryButtonCheckstate(hwnd,ASS_DEFAULT))
    712               temp.flags = 0;
    713             else if(WinQueryButtonCheckstate(hwnd,ASS_FULLSCREEN))
    714               temp.flags = FULLSCREEN;
    715             else if(WinQueryButtonCheckstate(hwnd,ASS_MINIMIZED))
    716               temp.flags = MINIMIZED;
    717             else if(WinQueryButtonCheckstate(hwnd,ASS_MAXIMIZED))
    718               temp.flags = MAXIMIZED;
    719             else if(WinQueryButtonCheckstate(hwnd,ASS_INVISIBLE))
    720               temp.flags = INVISIBLE;
    721             if(WinQueryButtonCheckstate(hwnd,ASS_KEEP))
    722               temp.flags |= KEEP;
    723             if(WinQueryButtonCheckstate(hwnd,ASS_DIEAFTER))
    724               temp.flags |= DIEAFTER;
    725             if(WinQueryButtonCheckstate(hwnd,ASS_PROMPT))
    726               temp.flags |= PROMPT;
    727             info = add_association(&temp);
    728             if(!info)
    729              WinDismissDlg(hwnd,1);/* Runtime_Error(pszSrcFile, __LINE__, "add_association");*/
    730             else {
    731 
    732               CHAR s[1002 + CCHMAXPATH + 6];
    733 
    734               *s = 0;
    735               WinQueryDlgItemText(hwnd,ASS_ENVIRON,1000,s);
    736               bstripcr(s);
    737               if(*s)
    738                 PrfWriteProfileString(fmprof,FM3Str,temp.cl,s);
    739               sprintf(s,"%-12s \x1a %-24s %s%s%s",temp.mask,
    740                       temp.cl,(*temp.sig) ?
    741                       "[" : NullStr,(*temp.sig) ? temp.sig : NullStr,
    742                       (*temp.sig) ? "]" : NullStr);
    743               x = (SHORT)WinSendDlgItemMsg(hwnd,
    744                                            ASS_LISTBOX,
    745                                            LM_INSERTITEM,
    746                                            MPFROM2SHORT(LIT_END,0),
    747                                            MPFROMP(s));
    748               if(x >= 0) {
    749                 WinSendDlgItemMsg(hwnd,
    750                                   ASS_LISTBOX,
    751                                   LM_SETITEMHANDLE,
    752                                   MPFROMSHORT(x),
    753                                   MPFROMP(info));
    754                 WinSendDlgItemMsg(hwnd,
    755                                   ASS_LISTBOX,
    756                                   LM_SELECTITEM,
    757                                   MPFROMSHORT(x),
    758                                   MPFROMSHORT(TRUE));
    759               }
    760               save_associations();
    761             }
    762           }
    763           WinDismissDlg(hwnd,1);
    764           break;
    765 
    766         case DID_CANCEL:
    767           WinDismissDlg(hwnd,0);
    768           break;
    769 
    770         case IDM_HELP:
    771           if(hwndHelp)
    772             WinSendMsg(hwndHelp,HM_DISPLAY_HELP,
    773                        MPFROM2SHORT(HELP_ASSOC,0),
    774                        MPFROMSHORT(HM_RESOURCEID));
    775           break;
    776 
    777         case ASS_ADD:
    778         {
    779             ASSOC temp;
    780             CHAR  dummy[34];
    781             replace=FALSE;
    782 
    783             memset(&temp,0,sizeof(ASSOC));
    784             WinQueryDlgItemText(hwnd,ASS_MASK,sizeof(temp.mask),temp.mask);
    785             WinQueryDlgItemText(hwnd,ASS_CL,sizeof(temp.cl),temp.cl);
    786             WinQueryDlgItemText(hwnd,ASS_SIG,sizeof(temp.sig),temp.sig);
    787             rstrip(temp.sig);
    788             if(*temp.sig) {
    789               WinQueryDlgItemText(hwnd,ASS_OFFSET,sizeof(dummy),dummy);
    790               temp.offset = atol(dummy);
    791             }
    792             bstrip(temp.mask);
    793             bstrip(temp.cl);
    794             if(WinQueryButtonCheckstate(hwnd,ASS_DEFAULT))
    795               temp.flags = 0;
    796             else if(WinQueryButtonCheckstate(hwnd,ASS_FULLSCREEN))
    797               temp.flags = FULLSCREEN;
    798             else if(WinQueryButtonCheckstate(hwnd,ASS_MINIMIZED))
    799               temp.flags = MINIMIZED;
    800             else if(WinQueryButtonCheckstate(hwnd,ASS_MAXIMIZED))
    801               temp.flags = MAXIMIZED;
    802             else if(WinQueryButtonCheckstate(hwnd,ASS_INVISIBLE))
    803               temp.flags = INVISIBLE;
    804             if(WinQueryButtonCheckstate(hwnd,ASS_KEEP))
    805               temp.flags |= KEEP;
    806             if(WinQueryButtonCheckstate(hwnd,ASS_DIEAFTER))
    807               temp.flags |= DIEAFTER;
    808             if(WinQueryButtonCheckstate(hwnd,ASS_PROMPT))
    809               temp.flags |= PROMPT;
    810             info = add_association(&temp);
    811             //Add will fail if mask is not changed
    812             if(info)
    813              {
    814 
    815               CHAR s[1002 + CCHMAXPATH + 6];
    816 
    817               *s = 0;
    818               WinQueryDlgItemText(hwnd,ASS_ENVIRON,1000,s);
    819               bstripcr(s);
    820               if(*s)
    821                 PrfWriteProfileString(fmprof,FM3Str,temp.cl,s);
    822               sprintf(s,"%-12s \x1a %-24s %s%s%s",temp.mask,
    823                       temp.cl,(*temp.sig) ?
    824                       "[" : NullStr,(*temp.sig) ? temp.sig : NullStr,
    825                       (*temp.sig) ? "]" : NullStr);
    826               x = (SHORT)WinSendDlgItemMsg(hwnd,
    827                                            ASS_LISTBOX,
    828                                           LM_INSERTITEM,
    829                                            MPFROM2SHORT(LIT_END,0),
    830                                            MPFROMP(s));
    831               if(x >= 0) {
    832                 WinSendDlgItemMsg(hwnd,
    833                                   ASS_LISTBOX,
    834                                   LM_SETITEMHANDLE,
    835                                   MPFROMSHORT(x),
    836                                   MPFROMP(info));
    837                 WinSendDlgItemMsg(hwnd,
    838                                   ASS_LISTBOX,
    839                                   LM_SELECTITEM,
    840                                   MPFROMSHORT(x),
    841                                   MPFROMSHORT(TRUE));
    842               }
    843               save_associations();
    844             }
    845          }
    846           break;
    847 
    848         case ASS_DELETE:
    849           {
    850             ASSOC temp;
    851             CHAR  dummy[34];
    852 
    853             memset(&temp,0,sizeof(ASSOC));
    854             WinQueryDlgItemText(hwnd,ASS_MASK,sizeof(temp.mask),temp.mask);
    855             WinQueryDlgItemText(hwnd,ASS_SIG,sizeof(temp.sig),temp.sig);
    856             rstrip(temp.sig);
    857             if(*temp.sig) {
    858               WinQueryDlgItemText(hwnd,ASS_OFFSET,sizeof(dummy),dummy);
    859               temp.offset = atol(dummy);
    860             }
    861             bstrip(temp.mask);
    862             PrfWriteProfileData(fmprof,
    863                                 FM3Str,
    864                                 temp.mask,
    865                                 NULL,
    866                                 0L);
    867             if(!kill_association(&temp))
    868               Runtime_Error(pszSrcFile, __LINE__, "kill_association");
    869             else {
    870               x = (SHORT)WinSendDlgItemMsg(hwnd,
    871                                            ASS_LISTBOX,
    872                                            LM_QUERYSELECTION,
    873                                            MPFROMSHORT(LIT_FIRST),
    874                                            MPVOID);
    875               if(x >= 0) {
    876                 WinSendDlgItemMsg(hwnd,
    877                                   ASS_LISTBOX,
    878                                   LM_DELETEITEM,
    879                                   MPFROMSHORT(x),
    880                                   MPVOID);
    881                 WinSendDlgItemMsg(hwnd,ASS_LISTBOX,LM_SELECTITEM,
    882                                   MPFROMSHORT(LIT_NONE),
    883                                   MPFROMSHORT(FALSE));
    884               }
    885               save_associations();
    886             }
    887           }
    888           break;
    889       case ASS_REPLACE:
    890 
    891                        {
    892             ASSOC temp;
    893             CHAR  dummy[34];
    894             replace=TRUE;
    895 
    896             y = (SHORT)WinSendDlgItemMsg(hwnd,
    897                                            ASS_LISTBOX,
    898                                            LM_QUERYSELECTION,
    899                                            MPFROMSHORT(LIT_CURSOR),
    900                                             MPVOID);
    901             memset(&temp,0,sizeof(ASSOC));
    902             WinQueryDlgItemText(hwnd,ASS_MASK,sizeof(temp.mask),temp.mask);
    903             WinQueryDlgItemText(hwnd,ASS_CL,sizeof(temp.cl),temp.cl);
    904             WinQueryDlgItemText(hwnd,ASS_SIG,sizeof(temp.sig),temp.sig);
    905             rstrip(temp.sig);
    906             if(*temp.sig) {
    907               WinQueryDlgItemText(hwnd,ASS_OFFSET,sizeof(dummy),dummy);
    908               temp.offset = atol(dummy);
    909             }
    910             bstrip(temp.mask);
    911             bstrip(temp.cl);
    912             if(WinQueryButtonCheckstate(hwnd,ASS_DEFAULT))
    913               temp.flags = 0;
    914             else if(WinQueryButtonCheckstate(hwnd,ASS_FULLSCREEN))
    915               temp.flags = FULLSCREEN;
    916             else if(WinQueryButtonCheckstate(hwnd,ASS_MINIMIZED))
    917               temp.flags = MINIMIZED;
    918             else if(WinQueryButtonCheckstate(hwnd,ASS_MAXIMIZED))
    919               temp.flags = MAXIMIZED;
    920             else if(WinQueryButtonCheckstate(hwnd,ASS_INVISIBLE))
    921               temp.flags = INVISIBLE;
    922             if(WinQueryButtonCheckstate(hwnd,ASS_KEEP))
    923               temp.flags |= KEEP;
    924             if(WinQueryButtonCheckstate(hwnd,ASS_DIEAFTER))
    925               temp.flags |= DIEAFTER;
    926             if(WinQueryButtonCheckstate(hwnd,ASS_PROMPT))
    927               temp.flags |= PROMPT;
    928             info = add_association(&temp);
    929             //Add will fail if mask is not changed
    930             if(info)
    931              {
    932 
    933               CHAR s[1002 + CCHMAXPATH + 6];
    934 
    935               *s = 0;
    936               WinQueryDlgItemText(hwnd,ASS_ENVIRON,1000,s);
    937               bstripcr(s);
    938               if(*s)
    939                 PrfWriteProfileString(fmprof,FM3Str,temp.cl,s);
    940               sprintf(s,"%-12s \x1a %-24s %s%s%s",temp.mask,
    941                       temp.cl,(*temp.sig) ?
    942                       "[" : NullStr,(*temp.sig) ? temp.sig : NullStr,
    943                       (*temp.sig) ? "]" : NullStr);
    944               x = (SHORT)WinSendDlgItemMsg(hwnd,
    945                                            ASS_LISTBOX,
    946                                           LM_INSERTITEM,
    947                                            MPFROM2SHORT(LIT_END,0),
    948                                            MPFROMP(s));
    949               if(x >= 0) {
    950                 WinSendDlgItemMsg(hwnd,
    951                                   ASS_LISTBOX,
    952                                   LM_SETITEMHANDLE,
    953                                   MPFROMSHORT(x),
    954                                   MPFROMP(info));
    955                 WinSendDlgItemMsg(hwnd,
    956                                   ASS_LISTBOX,
    957                                   LM_SELECTITEM,
    958                                   MPFROMSHORT(x),
    959                                   MPFROMSHORT(TRUE));
    960               }
    961               save_associations();
    962             }
    963          }
    964           {
    965             ASSOC temp;
    966             CHAR  dummy[34];
    967 
    968             WinSendDlgItemMsg(hwnd,
    969                                   ASS_LISTBOX,
    970                                   LM_SELECTITEM,
    971                                   MPFROMSHORT(y),
    972                                   MPFROMSHORT(TRUE));
    973             memset(&temp,0,sizeof(ASSOC));
    974             WinQueryDlgItemText(hwnd,ASS_MASK,sizeof(temp.mask),temp.mask);
    975             WinQueryDlgItemText(hwnd,ASS_SIG,sizeof(temp.sig),temp.sig);
    976             rstrip(temp.sig);
    977             if(*temp.sig) {
    978               WinQueryDlgItemText(hwnd,ASS_OFFSET,sizeof(dummy),dummy);
    979               temp.offset = atol(dummy);
    980             }
    981             bstrip(temp.mask);
    982             PrfWriteProfileData(fmprof,
    983                                 FM3Str,
    984                                 temp.mask,
    985                                 NULL,
    986                                 0L);
    987             if(!kill_association(&temp))
    988               Runtime_Error(pszSrcFile, __LINE__, "kill_association");
    989             else {
    990 
    991               if(y >= 0) {
    992                 WinSendDlgItemMsg(hwnd,
    993                                   ASS_LISTBOX,
    994                                   LM_DELETEITEM,
    995                                   MPFROMSHORT(y),
    996                                   MPVOID);
    997                 WinSendDlgItemMsg(hwnd,ASS_LISTBOX,LM_SELECTITEM,
    998                                   MPFROMSHORT(x-1),
    999                                   MPFROMSHORT(TRUE));
    1000               }
    1001               save_associations();
    1002             }
    1003           }
    1004           break;
    1005       }
    1006       return 0;
    1007    }
    1008   return WinDefDlgProc(hwnd,msg,mp1,mp2);
    1009 }
    1010 
    1011 
    1012 VOID EditAssociations (HWND hwnd)
     629        ASSOC temp;
     630        CHAR dummy[34];
     631
     632        replace = FALSE;
     633        {
     634          x = (SHORT) WinSendDlgItemMsg(hwnd,
     635                                        ASS_LISTBOX,
     636                                        LM_QUERYSELECTION, MPVOID, MPVOID);
     637          if (x == LIT_NONE)
     638            x = (SHORT) WinSendDlgItemMsg(hwnd,
     639                                          ASS_LISTBOX,
     640                                          LM_SELECTITEM,
     641                                          MPFROMSHORT(0), MPFROMSHORT(TRUE));
     642        }
     643        memset(&temp, 0, sizeof(ASSOC));
     644        WinQueryDlgItemText(hwnd, ASS_MASK, sizeof(temp.mask), temp.mask);
     645        WinQueryDlgItemText(hwnd, ASS_CL, sizeof(temp.cl), temp.cl);
     646        WinQueryDlgItemText(hwnd, ASS_SIG, sizeof(temp.sig), temp.sig);
     647        rstrip(temp.sig);
     648        if (*temp.sig) {
     649          WinQueryDlgItemText(hwnd, ASS_OFFSET, sizeof(dummy), dummy);
     650          temp.offset = atol(dummy);
     651        }
     652        bstrip(temp.mask);
     653        bstrip(temp.cl);
     654        if (WinQueryButtonCheckstate(hwnd, ASS_DEFAULT))
     655          temp.flags = 0;
     656        else if (WinQueryButtonCheckstate(hwnd, ASS_FULLSCREEN))
     657          temp.flags = FULLSCREEN;
     658        else if (WinQueryButtonCheckstate(hwnd, ASS_MINIMIZED))
     659          temp.flags = MINIMIZED;
     660        else if (WinQueryButtonCheckstate(hwnd, ASS_MAXIMIZED))
     661          temp.flags = MAXIMIZED;
     662        else if (WinQueryButtonCheckstate(hwnd, ASS_INVISIBLE))
     663          temp.flags = INVISIBLE;
     664        if (WinQueryButtonCheckstate(hwnd, ASS_KEEP))
     665          temp.flags |= KEEP;
     666        if (WinQueryButtonCheckstate(hwnd, ASS_DIEAFTER))
     667          temp.flags |= DIEAFTER;
     668        if (WinQueryButtonCheckstate(hwnd, ASS_PROMPT))
     669          temp.flags |= PROMPT;
     670        info = add_association(&temp);
     671        if (!info)
     672          WinDismissDlg(hwnd, 1);       /* Runtime_Error(pszSrcFile, __LINE__, "add_association"); */
     673        else {
     674
     675          CHAR s[1002 + CCHMAXPATH + 6];
     676
     677          *s = 0;
     678          WinQueryDlgItemText(hwnd, ASS_ENVIRON, 1000, s);
     679          bstripcr(s);
     680          if (*s)
     681            PrfWriteProfileString(fmprof, FM3Str, temp.cl, s);
     682          sprintf(s, "%-12s \x1a %-24s %s%s%s", temp.mask,
     683                  temp.cl, (*temp.sig) ?
     684                  "[" : NullStr, (*temp.sig) ? temp.sig : NullStr,
     685                  (*temp.sig) ? "]" : NullStr);
     686          x = (SHORT) WinSendDlgItemMsg(hwnd,
     687                                        ASS_LISTBOX,
     688                                        LM_INSERTITEM,
     689                                        MPFROM2SHORT(LIT_END, 0), MPFROMP(s));
     690          if (x >= 0) {
     691            WinSendDlgItemMsg(hwnd,
     692                              ASS_LISTBOX,
     693                              LM_SETITEMHANDLE,
     694                              MPFROMSHORT(x), MPFROMP(info));
     695            WinSendDlgItemMsg(hwnd,
     696                              ASS_LISTBOX,
     697                              LM_SELECTITEM,
     698                              MPFROMSHORT(x), MPFROMSHORT(TRUE));
     699          }
     700          save_associations();
     701        }
     702      }
     703      WinDismissDlg(hwnd, 1);
     704      break;
     705
     706    case DID_CANCEL:
     707      WinDismissDlg(hwnd, 0);
     708      break;
     709
     710    case IDM_HELP:
     711      if (hwndHelp)
     712        WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
     713                   MPFROM2SHORT(HELP_ASSOC, 0), MPFROMSHORT(HM_RESOURCEID));
     714      break;
     715
     716    case ASS_ADD:
     717      {
     718        ASSOC temp;
     719        CHAR dummy[34];
     720
     721        replace = FALSE;
     722
     723        memset(&temp, 0, sizeof(ASSOC));
     724        WinQueryDlgItemText(hwnd, ASS_MASK, sizeof(temp.mask), temp.mask);
     725        WinQueryDlgItemText(hwnd, ASS_CL, sizeof(temp.cl), temp.cl);
     726        WinQueryDlgItemText(hwnd, ASS_SIG, sizeof(temp.sig), temp.sig);
     727        rstrip(temp.sig);
     728        if (*temp.sig) {
     729          WinQueryDlgItemText(hwnd, ASS_OFFSET, sizeof(dummy), dummy);
     730          temp.offset = atol(dummy);
     731        }
     732        bstrip(temp.mask);
     733        bstrip(temp.cl);
     734        if (WinQueryButtonCheckstate(hwnd, ASS_DEFAULT))
     735          temp.flags = 0;
     736        else if (WinQueryButtonCheckstate(hwnd, ASS_FULLSCREEN))
     737          temp.flags = FULLSCREEN;
     738        else if (WinQueryButtonCheckstate(hwnd, ASS_MINIMIZED))
     739          temp.flags = MINIMIZED;
     740        else if (WinQueryButtonCheckstate(hwnd, ASS_MAXIMIZED))
     741          temp.flags = MAXIMIZED;
     742        else if (WinQueryButtonCheckstate(hwnd, ASS_INVISIBLE))
     743          temp.flags = INVISIBLE;
     744        if (WinQueryButtonCheckstate(hwnd, ASS_KEEP))
     745          temp.flags |= KEEP;
     746        if (WinQueryButtonCheckstate(hwnd, ASS_DIEAFTER))
     747          temp.flags |= DIEAFTER;
     748        if (WinQueryButtonCheckstate(hwnd, ASS_PROMPT))
     749          temp.flags |= PROMPT;
     750        info = add_association(&temp);
     751        //Add will fail if mask is not changed
     752        if (info) {
     753
     754          CHAR s[1002 + CCHMAXPATH + 6];
     755
     756          *s = 0;
     757          WinQueryDlgItemText(hwnd, ASS_ENVIRON, 1000, s);
     758          bstripcr(s);
     759          if (*s)
     760            PrfWriteProfileString(fmprof, FM3Str, temp.cl, s);
     761          sprintf(s, "%-12s \x1a %-24s %s%s%s", temp.mask,
     762                  temp.cl, (*temp.sig) ?
     763                  "[" : NullStr, (*temp.sig) ? temp.sig : NullStr,
     764                  (*temp.sig) ? "]" : NullStr);
     765          x = (SHORT) WinSendDlgItemMsg(hwnd,
     766                                        ASS_LISTBOX,
     767                                        LM_INSERTITEM,
     768                                        MPFROM2SHORT(LIT_END, 0), MPFROMP(s));
     769          if (x >= 0) {
     770            WinSendDlgItemMsg(hwnd,
     771                              ASS_LISTBOX,
     772                              LM_SETITEMHANDLE,
     773                              MPFROMSHORT(x), MPFROMP(info));
     774            WinSendDlgItemMsg(hwnd,
     775                              ASS_LISTBOX,
     776                              LM_SELECTITEM,
     777                              MPFROMSHORT(x), MPFROMSHORT(TRUE));
     778          }
     779          save_associations();
     780        }
     781      }
     782      break;
     783
     784    case ASS_DELETE:
     785      {
     786        ASSOC temp;
     787        CHAR dummy[34];
     788
     789        memset(&temp, 0, sizeof(ASSOC));
     790        WinQueryDlgItemText(hwnd, ASS_MASK, sizeof(temp.mask), temp.mask);
     791        WinQueryDlgItemText(hwnd, ASS_SIG, sizeof(temp.sig), temp.sig);
     792        rstrip(temp.sig);
     793        if (*temp.sig) {
     794          WinQueryDlgItemText(hwnd, ASS_OFFSET, sizeof(dummy), dummy);
     795          temp.offset = atol(dummy);
     796        }
     797        bstrip(temp.mask);
     798        PrfWriteProfileData(fmprof, FM3Str, temp.mask, NULL, 0L);
     799        if (!kill_association(&temp))
     800          Runtime_Error(pszSrcFile, __LINE__, "kill_association");
     801        else {
     802          x = (SHORT) WinSendDlgItemMsg(hwnd,
     803                                        ASS_LISTBOX,
     804                                        LM_QUERYSELECTION,
     805                                        MPFROMSHORT(LIT_FIRST), MPVOID);
     806          if (x >= 0) {
     807            WinSendDlgItemMsg(hwnd,
     808                              ASS_LISTBOX,
     809                              LM_DELETEITEM, MPFROMSHORT(x), MPVOID);
     810            WinSendDlgItemMsg(hwnd, ASS_LISTBOX, LM_SELECTITEM,
     811                              MPFROMSHORT(LIT_NONE), MPFROMSHORT(FALSE));
     812          }
     813          save_associations();
     814        }
     815      }
     816      break;
     817    case ASS_REPLACE:
     818
     819      {
     820        ASSOC temp;
     821        CHAR dummy[34];
     822
     823        replace = TRUE;
     824
     825        y = (SHORT) WinSendDlgItemMsg(hwnd,
     826                                      ASS_LISTBOX,
     827                                      LM_QUERYSELECTION,
     828                                      MPFROMSHORT(LIT_CURSOR), MPVOID);
     829        memset(&temp, 0, sizeof(ASSOC));
     830        WinQueryDlgItemText(hwnd, ASS_MASK, sizeof(temp.mask), temp.mask);
     831        WinQueryDlgItemText(hwnd, ASS_CL, sizeof(temp.cl), temp.cl);
     832        WinQueryDlgItemText(hwnd, ASS_SIG, sizeof(temp.sig), temp.sig);
     833        rstrip(temp.sig);
     834        if (*temp.sig) {
     835          WinQueryDlgItemText(hwnd, ASS_OFFSET, sizeof(dummy), dummy);
     836          temp.offset = atol(dummy);
     837        }
     838        bstrip(temp.mask);
     839        bstrip(temp.cl);
     840        if (WinQueryButtonCheckstate(hwnd, ASS_DEFAULT))
     841          temp.flags = 0;
     842        else if (WinQueryButtonCheckstate(hwnd, ASS_FULLSCREEN))
     843          temp.flags = FULLSCREEN;
     844        else if (WinQueryButtonCheckstate(hwnd, ASS_MINIMIZED))
     845          temp.flags = MINIMIZED;
     846        else if (WinQueryButtonCheckstate(hwnd, ASS_MAXIMIZED))
     847          temp.flags = MAXIMIZED;
     848        else if (WinQueryButtonCheckstate(hwnd, ASS_INVISIBLE))
     849          temp.flags = INVISIBLE;
     850        if (WinQueryButtonCheckstate(hwnd, ASS_KEEP))
     851          temp.flags |= KEEP;
     852        if (WinQueryButtonCheckstate(hwnd, ASS_DIEAFTER))
     853          temp.flags |= DIEAFTER;
     854        if (WinQueryButtonCheckstate(hwnd, ASS_PROMPT))
     855          temp.flags |= PROMPT;
     856        info = add_association(&temp);
     857        //Add will fail if mask is not changed
     858        if (info) {
     859
     860          CHAR s[1002 + CCHMAXPATH + 6];
     861
     862          *s = 0;
     863          WinQueryDlgItemText(hwnd, ASS_ENVIRON, 1000, s);
     864          bstripcr(s);
     865          if (*s)
     866            PrfWriteProfileString(fmprof, FM3Str, temp.cl, s);
     867          sprintf(s, "%-12s \x1a %-24s %s%s%s", temp.mask,
     868                  temp.cl, (*temp.sig) ?
     869                  "[" : NullStr, (*temp.sig) ? temp.sig : NullStr,
     870                  (*temp.sig) ? "]" : NullStr);
     871          x = (SHORT) WinSendDlgItemMsg(hwnd,
     872                                        ASS_LISTBOX,
     873                                        LM_INSERTITEM,
     874                                        MPFROM2SHORT(LIT_END, 0), MPFROMP(s));
     875          if (x >= 0) {
     876            WinSendDlgItemMsg(hwnd,
     877                              ASS_LISTBOX,
     878                              LM_SETITEMHANDLE,
     879                              MPFROMSHORT(x), MPFROMP(info));
     880            WinSendDlgItemMsg(hwnd,
     881                              ASS_LISTBOX,
     882                              LM_SELECTITEM,
     883                              MPFROMSHORT(x), MPFROMSHORT(TRUE));
     884          }
     885          save_associations();
     886        }
     887      }
     888      {
     889        ASSOC temp;
     890        CHAR dummy[34];
     891
     892        WinSendDlgItemMsg(hwnd,
     893                          ASS_LISTBOX,
     894                          LM_SELECTITEM, MPFROMSHORT(y), MPFROMSHORT(TRUE));
     895        memset(&temp, 0, sizeof(ASSOC));
     896        WinQueryDlgItemText(hwnd, ASS_MASK, sizeof(temp.mask), temp.mask);
     897        WinQueryDlgItemText(hwnd, ASS_SIG, sizeof(temp.sig), temp.sig);
     898        rstrip(temp.sig);
     899        if (*temp.sig) {
     900          WinQueryDlgItemText(hwnd, ASS_OFFSET, sizeof(dummy), dummy);
     901          temp.offset = atol(dummy);
     902        }
     903        bstrip(temp.mask);
     904        PrfWriteProfileData(fmprof, FM3Str, temp.mask, NULL, 0L);
     905        if (!kill_association(&temp))
     906          Runtime_Error(pszSrcFile, __LINE__, "kill_association");
     907        else {
     908
     909          if (y >= 0) {
     910            WinSendDlgItemMsg(hwnd,
     911                              ASS_LISTBOX,
     912                              LM_DELETEITEM, MPFROMSHORT(y), MPVOID);
     913            WinSendDlgItemMsg(hwnd, ASS_LISTBOX, LM_SELECTITEM,
     914                              MPFROMSHORT(x - 1), MPFROMSHORT(TRUE));
     915          }
     916          save_associations();
     917        }
     918      }
     919      break;
     920    }
     921    return 0;
     922  }
     923  return WinDefDlgProc(hwnd, msg, mp1, mp2);
     924}
     925
     926VOID EditAssociations(HWND hwnd)
    1013927{
    1014928  static CHAR stop = 0;
    1015929
    1016   if(stop)
     930  if (stop)
    1017931    return;
    1018932  stop++;
    1019   if(!assloaded)
     933  if (!assloaded)
    1020934    load_associations();
    1021   WinDlgBox(HWND_DESKTOP,hwnd,AssocDlgProc,FM3ModHandle,ASS_FRAME,NULL);
     935  WinDlgBox(HWND_DESKTOP, hwnd, AssocDlgProc, FM3ModHandle, ASS_FRAME, NULL);
    1022936  stop = 0;
    1023937}
Note: See TracChangeset for help on using the changeset viewer.