Changeset 551 for trunk/dll/assoc.c
- Timestamp:
- Feb 28, 2007, 2:33:51 AM (19 years ago)
- File:
-
- 1 edited
-
trunk/dll/assoc.c (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/assoc.c
r529 r551 32 32 #pragma data_seg(DATA1) 33 33 34 typedef struct { 35 CHAR mask[CCHMAXPATH]; 36 CHAR cl[1001]; 37 CHAR sig[CCHMAXPATH]; 38 LONG offset; 34 typedef struct 35 { 36 CHAR mask[CCHMAXPATH]; 37 CHAR cl[1001]; 38 CHAR sig[CCHMAXPATH]; 39 LONG offset; 39 40 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 } 42 ASSOC; 43 44 typedef struct LINKASSOC 45 { 46 CHAR *mask; 47 CHAR *cl; 48 CHAR *sig; 49 LONG offset; 50 ULONG flags; 48 51 struct LINKASSOC *prev; 49 52 struct LINKASSOC *next; 50 } LINKASSOC;51 52 53 static LINKASSOC *asshead = NULL,*asstail = NULL;54 static BOOL assloaded = FALSE,replace = FALSE;53 } 54 LINKASSOC; 55 56 static LINKASSOC *asshead = NULL, *asstail = NULL; 57 static BOOL assloaded = FALSE, replace = FALSE; 55 58 56 59 static PSZ pszSrcFile = __FILE__; … … 59 62 #pragma alloc_text(ASSOC2,ExecAssociation,AssocTextProc) 60 63 61 MRESULT EXPENTRY AssocTextProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)62 { 63 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd,QWL_USER);64 MRESULT EXPENTRY AssocTextProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 65 { 66 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, QWL_USER); 64 67 static BOOL emphasized = FALSE; 65 68 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; 102 104 } 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 109 VOID free_associations(VOID) 110 { 111 LINKASSOC *info, *next; 111 112 112 113 info = asshead; 113 while (info) {114 while (info) { 114 115 next = info->next; 115 116 free(info->mask); 116 117 free(info->cl); 117 if (info->sig)118 if (info->sig) 118 119 free(info->sig); 119 120 free(info); … … 123 124 } 124 125 125 126 VOID load_associations (VOID) 127 { 128 FILE *fp; 126 VOID load_associations(VOID) 127 { 128 FILE *fp; 129 129 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) 137 137 free_associations(); 138 138 assloaded = TRUE; 139 139 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); 144 144 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; 148 148 mask[CCHMAXPATH] = 0; 149 149 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! */ 157 157 cl[1000] = 0; 158 158 bstripcr(cl); … … 164 164 bstripcr(flags); 165 165 if (!*cl) 166 continue;167 info = xmallocz(sizeof(LINKASSOC), pszSrcFile,__LINE__);166 continue; 167 info = xmallocz(sizeof(LINKASSOC), pszSrcFile, __LINE__); 168 168 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; 190 190 } 191 191 } … … 194 194 } 195 195 196 197 VOID save_associations (VOID) 196 VOID save_associations(VOID) 198 197 { 199 198 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) 204 203 return; 205 204 info = asshead; 206 205 #ifdef NEVER 207 while (info) {206 while (info) { 208 207 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; 220 219 } 221 220 } … … 224 223 #endif 225 224 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__); 230 229 if (fp) { 231 fputs(GetPString(IDS_ASSOCFILETEXT), fp);230 fputs(GetPString(IDS_ASSOCFILETEXT), fp); 232 231 info = asshead; 233 while (info) {232 while (info) { 234 233 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); 243 240 info = info->next; 244 241 } … … 249 246 #pragma alloc_text(ASSOC,add_association,kill_association,AssocDlgProc,EditAssociations) 250 247 251 252 LINKASSOC * add_association (ASSOC *addme) 248 LINKASSOC *add_association(ASSOC * addme) 253 249 { 254 250 LINKASSOC *info; 255 251 256 if (addme && *addme->cl && *addme->mask) {252 if (addme && *addme->cl && *addme->mask) { 257 253 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; 263 259 info = info->next; 264 260 } 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 } 295 291 } 296 292 } … … 299 295 } 300 296 301 302 BOOL kill_association (ASSOC *killme) 297 BOOL kill_association(ASSOC * killme) 303 298 { 304 299 LINKASSOC *info; 305 300 306 if (killme && *killme->mask) {301 if (killme && *killme->mask) { 307 302 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; 332 327 } 333 328 info = info->next; … … 337 332 } 338 333 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; 334 INT 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; 346 340 LINKASSOC *info; 347 341 348 if (!assloaded)342 if (!assloaded) 349 343 load_associations(); 350 if (!asshead)344 if (!asshead) 351 345 return -1; 352 if(!datafile || 353 !*datafile) 346 if (!datafile || !*datafile) 354 347 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) 359 352 file++; 360 353 else 361 354 file = datafile; 362 355 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; 371 363 } 372 364 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, ";"); 461 429 } 462 430 info = info->next; … … 465 433 } 466 434 467 468 MRESULT EXPENTRY AssocDlgProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) 435 MRESULT EXPENTRY AssocDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 469 436 { 470 437 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: 493 616 { 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 } 500 624 } 501 625 break; 502 626 503 case UM_UNDO:627 case DID_OK: 504 628 { 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 926 VOID EditAssociations(HWND hwnd) 1013 927 { 1014 928 static CHAR stop = 0; 1015 929 1016 if (stop)930 if (stop) 1017 931 return; 1018 932 stop++; 1019 if (!assloaded)933 if (!assloaded) 1020 934 load_associations(); 1021 WinDlgBox(HWND_DESKTOP, hwnd,AssocDlgProc,FM3ModHandle,ASS_FRAME,NULL);935 WinDlgBox(HWND_DESKTOP, hwnd, AssocDlgProc, FM3ModHandle, ASS_FRAME, NULL); 1022 936 stop = 0; 1023 937 }
Note:
See TracChangeset
for help on using the changeset viewer.
