Changeset 551 for trunk/dll/viewinf.c
- Timestamp:
- Feb 28, 2007, 2:33:51 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/viewinf.c
r533 r551 38 38 #pragma alloc_text(VIEWINFS,FillListboxThread,ViewInfProc) 39 39 40 typedef struct { 40 typedef struct 41 { 41 42 USHORT size; 42 43 USHORT help; 43 HWND 44 } DUMMY;45 46 47 static VOID FillListboxThread(VOID * args)44 HWND hwnd; 45 } 46 DUMMY; 47 48 static VOID FillListboxThread(VOID * args) 48 49 { 49 50 HWND hwnd; 50 DUMMY *dummy = (DUMMY *) args;51 HAB 52 HMQ 51 DUMMY *dummy = (DUMMY *) args; 52 HAB hab2; 53 HMQ hmq2; 53 54 BOOL repeating = FALSE; 54 55 55 if (!dummy)56 if (!dummy) 56 57 return; 57 58 hwnd = dummy->hwnd; 58 59 hab2 = WinInitialize(0); 59 if (hab2) {60 hmq2 = WinCreateMsgQueue(hab2, 0);61 if (hmq2) {62 63 CHAR *env, *p,*holdenv;64 65 WinCancelShutdown(hmq2, TRUE);60 if (hab2) { 61 hmq2 = WinCreateMsgQueue(hab2, 0); 62 if (hmq2) { 63 64 CHAR *env, *p, *holdenv; 65 66 WinCancelShutdown(hmq2, TRUE); 66 67 IncrThreadUsage(); 67 68 priority_normal(); 68 if (!dummy->help)69 69 if (!dummy->help) 70 env = getenv("BOOKSHELF"); 70 71 else 71 72 if (!env) {73 74 75 76 77 78 79 72 env = getenv("HELP"); 73 if (!env) { 74 saymsg(MB_CANCEL, 75 hwnd, 76 GetPString(IDS_SYSERRORTEXT), 77 GetPString(IDS_ENVPATHERRORTEXT), 78 (dummy->help) ? "HELP" : "BOOKSHELF", 79 (dummy->help) ? ".HLP" : ".INF"); 80 goto NoEnv; 80 81 } 81 82 else { 82 holdenv = xmalloc(strlen(env) + 2L,pszSrcFile,__LINE__); 83 if (holdenv) { 84 strcpy(holdenv,env); 85 Repeat: 86 if(holdenv[strlen(holdenv) - 1] != ';') 87 strcat(holdenv,";"); 88 p = strtok(holdenv,";"); 89 while(p) { 90 bstrip(p); 91 if(*p) { 92 93 CHAR mask[CCHMAXPATH],*enddir,text[CCHMAXPATH * 2]; 94 FILEFINDBUF3 ffb; 95 HDIR hdir; 96 ULONG nm; 97 98 strcpy(mask,p); 99 if(mask[strlen(mask) - 1] != '\\') 100 strcat(mask,"\\"); 101 enddir = mask + strlen(mask); 102 if(dummy->help) 103 strcat(mask,"*.HLP"); 104 else 105 strcat(mask,"*.INF"); 106 hdir = HDIR_CREATE; 107 nm = 1L; 108 DosError(FERR_DISABLEHARDERR); 109 if(!DosFindFirst(mask,&hdir,FILE_NORMAL | FILE_ARCHIVED, 110 &ffb,sizeof(ffb),&nm,FIL_STANDARD)) { 111 do { 112 priority_normal(); 113 strcpy(enddir,ffb.achName); 114 { 115 FILE *fp; 116 CHAR title[CCHMAXPATH]; 117 118 *title = 0; 119 fp = _fsopen(mask,"rb",SH_DENYNO); 120 if(fp) { 121 fread(title,1,3,fp); 122 if(*title != 'H' || title[1] != 'S' || title[2] != 'P') { 123 fclose(fp); 124 goto Continue; 125 } 126 *title = 0; 127 fseek(fp,107L,SEEK_SET); 128 fread(title,1,CCHMAXPATH - 2,fp); 129 title[CCHMAXPATH - 3] = 0; 130 bstrip(title); 131 fclose(fp); 132 } 133 p = strchr(ffb.achName,'.'); 134 if(p) 135 *p = 0; 136 sprintf(text, 137 "%-10.10s %-42.42s > %s", 138 ffb.achName, 139 title, 140 mask); 141 } 142 if(!WinIsWindow(hab2,hwnd)) 143 break; 144 WinSendDlgItemMsg(hwnd, 145 VINF_LISTBOX, 146 LM_INSERTITEM, 147 MPFROM2SHORT(LIT_SORTASCENDING,0), 148 MPFROMP(text)); 149 Continue: 150 nm = 1L; 151 } while(!DosFindNext(hdir,&ffb,sizeof(ffb),&nm)); 152 DosFindClose(hdir); 153 priority_normal(); 154 } 155 } 156 if(!WinIsWindow(hab2,hwnd)) 157 break; 158 p = strtok(NULL,";"); 159 } 160 free(holdenv); 161 NoEnv: 162 if(WinIsWindow(hab2,hwnd) && !repeating) { 163 164 ULONG size; 165 CHAR *key = "INFPaths"; 166 167 if(dummy->help) 168 key = "HLPPaths"; 169 repeating = TRUE; 170 if(PrfQueryProfileSize(fmprof, 171 FM3Str, 172 key, 173 &size) && 174 size) { 175 holdenv = xmalloc(size + 2L,pszSrcFile,__LINE__); 176 if (holdenv) { 177 if (!PrfQueryProfileData(fmprof,FM3Str,key,holdenv,&size)) { 178 Win_Error(hwnd,hwnd,pszSrcFile,__LINE__,"PrfQueryProfileData"); 179 free(holdenv); 83 holdenv = xmalloc(strlen(env) + 2L, pszSrcFile, __LINE__); 84 if (holdenv) { 85 strcpy(holdenv, env); 86 Repeat: 87 if (holdenv[strlen(holdenv) - 1] != ';') 88 strcat(holdenv, ";"); 89 p = strtok(holdenv, ";"); 90 while (p) { 91 bstrip(p); 92 if (*p) { 93 94 CHAR mask[CCHMAXPATH], *enddir, text[CCHMAXPATH * 2]; 95 FILEFINDBUF3 ffb; 96 HDIR hdir; 97 ULONG nm; 98 99 strcpy(mask, p); 100 if (mask[strlen(mask) - 1] != '\\') 101 strcat(mask, "\\"); 102 enddir = mask + strlen(mask); 103 if (dummy->help) 104 strcat(mask, "*.HLP"); 105 else 106 strcat(mask, "*.INF"); 107 hdir = HDIR_CREATE; 108 nm = 1L; 109 DosError(FERR_DISABLEHARDERR); 110 if (!DosFindFirst(mask, &hdir, FILE_NORMAL | FILE_ARCHIVED, 111 &ffb, sizeof(ffb), &nm, FIL_STANDARD)) { 112 do { 113 priority_normal(); 114 strcpy(enddir, ffb.achName); 115 { 116 FILE *fp; 117 CHAR title[CCHMAXPATH]; 118 119 *title = 0; 120 fp = _fsopen(mask, "rb", SH_DENYNO); 121 if (fp) { 122 fread(title, 1, 3, fp); 123 if (*title != 'H' || title[1] != 'S' || title[2] != 'P') { 124 fclose(fp); 125 goto Continue; 126 } 127 *title = 0; 128 fseek(fp, 107L, SEEK_SET); 129 fread(title, 1, CCHMAXPATH - 2, fp); 130 title[CCHMAXPATH - 3] = 0; 131 bstrip(title); 132 fclose(fp); 133 } 134 p = strchr(ffb.achName, '.'); 135 if (p) 136 *p = 0; 137 sprintf(text, 138 "%-10.10s %-42.42s > %s", 139 ffb.achName, title, mask); 140 } 141 if (!WinIsWindow(hab2, hwnd)) 142 break; 143 WinSendDlgItemMsg(hwnd, 144 VINF_LISTBOX, 145 LM_INSERTITEM, 146 MPFROM2SHORT(LIT_SORTASCENDING, 0), 147 MPFROMP(text)); 148 Continue: 149 nm = 1L; 150 } while (!DosFindNext(hdir, &ffb, sizeof(ffb), &nm)); 151 DosFindClose(hdir); 152 priority_normal(); 153 } 154 } 155 if (!WinIsWindow(hab2, hwnd)) 156 break; 157 p = strtok(NULL, ";"); 158 } 159 free(holdenv); 160 NoEnv: 161 if (WinIsWindow(hab2, hwnd) && !repeating) { 162 163 ULONG size; 164 CHAR *key = "INFPaths"; 165 166 if (dummy->help) 167 key = "HLPPaths"; 168 repeating = TRUE; 169 if (PrfQueryProfileSize(fmprof, FM3Str, key, &size) && size) { 170 holdenv = xmalloc(size + 2L, pszSrcFile, __LINE__); 171 if (holdenv) { 172 if (!PrfQueryProfileData(fmprof, FM3Str, key, holdenv, &size)) { 173 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__, 174 "PrfQueryProfileData"); 175 free(holdenv); 180 176 } 181 182 183 184 185 186 177 else 178 goto Repeat; 179 } 180 } 181 } 182 } 187 183 } 188 184 WinDestroyMsgQueue(hmq2); 189 185 } 190 PostMsg(hwnd, UM_CONTAINER_FILLED,MPVOID,MPVOID);186 PostMsg(hwnd, UM_CONTAINER_FILLED, MPVOID, MPVOID); 191 187 DecrThreadUsage(); 192 188 WinTerminate(hab2); … … 195 191 } 196 192 197 198 MRESULT EXPENTRY ViewInfProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) 193 MRESULT EXPENTRY ViewInfProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 199 194 { 200 static HWND hwndMe = (HWND)0; 201 static BOOL help = FALSE; 202 static BOOL threaddone = TRUE; 203 static LONG ypos = 0; 204 static HPOINTER hptrIcon = (HPOINTER)0; 205 206 switch(msg) { 207 case WM_INITDLG: 208 WinSendDlgItemMsg(hwnd,VINF_ENTRY,EM_SETTEXTLIMIT, 209 MPFROM2SHORT(1000,0),MPVOID); 210 WinSendDlgItemMsg(hwnd,VINF_TOPIC,EM_SETTEXTLIMIT, 211 MPFROM2SHORT(CCHMAXPATH * 2,0),MPVOID); 212 if(hwndMe) { 213 WinSetWindowPos(hwndMe,HWND_TOP,0,0,0,0,SWP_RESTORE | SWP_ZORDER | 214 SWP_ACTIVATE); 215 WinDismissDlg(hwnd,0); 216 break; 217 } 218 help = (mp2 != (MPARAM)0); 219 if (help) { 220 221 SWP swp; 222 223 WinQueryWindowPos(WinWindowFromID(hwnd, 224 VINF_LISTBOX), 225 &swp); 226 WinDestroyWindow(WinWindowFromID(hwnd, 227 VINF_LISTBOX)); 228 if (!WinCreateWindow(hwnd, 229 WC_LISTBOX, 230 (PSZ)NULL, 231 WS_VISIBLE | LS_HORZSCROLL, 232 swp.x, 233 swp.y, 234 swp.cx, 235 swp.cy, 236 hwnd, 237 HWND_TOP, 238 VINF_LISTBOX, 239 NULL, 240 NULL)) 241 { 242 Win_Error2(hwnd,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW); 243 } 195 static HWND hwndMe = (HWND) 0; 196 static BOOL help = FALSE; 197 static BOOL threaddone = TRUE; 198 static LONG ypos = 0; 199 static HPOINTER hptrIcon = (HPOINTER) 0; 200 201 switch (msg) { 202 case WM_INITDLG: 203 WinSendDlgItemMsg(hwnd, VINF_ENTRY, EM_SETTEXTLIMIT, 204 MPFROM2SHORT(1000, 0), MPVOID); 205 WinSendDlgItemMsg(hwnd, VINF_TOPIC, EM_SETTEXTLIMIT, 206 MPFROM2SHORT(CCHMAXPATH * 2, 0), MPVOID); 207 if (hwndMe) { 208 WinSetWindowPos(hwndMe, HWND_TOP, 0, 0, 0, 0, SWP_RESTORE | SWP_ZORDER | 209 SWP_ACTIVATE); 210 WinDismissDlg(hwnd, 0); 211 break; 212 } 213 help = (mp2 != (MPARAM) 0); 214 if (help) { 215 216 SWP swp; 217 218 WinQueryWindowPos(WinWindowFromID(hwnd, VINF_LISTBOX), &swp); 219 WinDestroyWindow(WinWindowFromID(hwnd, VINF_LISTBOX)); 220 if (!WinCreateWindow(hwnd, 221 WC_LISTBOX, 222 (PSZ) NULL, 223 WS_VISIBLE | LS_HORZSCROLL, 224 swp.x, 225 swp.y, 226 swp.cx, 227 swp.cy, 228 hwnd, HWND_TOP, VINF_LISTBOX, NULL, NULL)) { 229 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW); 230 } 231 else { 232 WinSetPresParam(WinWindowFromID(hwnd, VINF_LISTBOX), 233 PP_FONTNAMESIZE, 234 strlen(GetPString(IDS_10SYSTEMMONOTEXT)) + 1, 235 (PVOID) GetPString(IDS_10SYSTEMMONOTEXT)); 236 } 237 WinSetWindowText(hwnd, GetPString(IDS_VIEWHELPFILESTEXT)); 238 WinShowWindow(WinWindowFromID(hwnd, VINF_SRCH), FALSE); 239 WinShowWindow(WinWindowFromID(hwnd, VINF_FILTER), FALSE); 240 WinShowWindow(WinWindowFromID(hwnd, VINF_TOPIC), FALSE); 241 WinShowWindow(WinWindowFromID(hwnd, VINF_TOPICHDR), FALSE); 242 } 243 hptrIcon = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, VINF_FRAME); 244 WinDefDlgProc(hwnd, WM_SETICON, MPFROMLONG(hptrIcon), MPVOID); 245 hwndMe = hwnd; 246 PostMsg(hwnd, UM_STRETCH, MPVOID, MPVOID); 247 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID); 248 break; 249 250 case UM_RESCAN: 251 WinSendDlgItemMsg(hwnd, VINF_LISTBOX, LM_DELETEALL, MPVOID, MPVOID); 252 { 253 DUMMY *d; 254 255 d = xmallocz(sizeof(DUMMY), pszSrcFile, __LINE__); 256 if (!d) { 257 WinDismissDlg(hwnd, 0); 258 return 0; 259 } 260 else { 261 d->size = sizeof(DUMMY); 262 d->hwnd = hwnd; 263 if (help) 264 d->help = 1; 265 if (_beginthread(FillListboxThread, NULL, 65536, (PVOID) d) == -1) { 266 Runtime_Error(pszSrcFile, __LINE__, 267 GetPString(IDS_COULDNTSTARTTHREADTEXT)); 268 free(d); 269 WinDismissDlg(hwnd, 0); 270 return 0; 271 } 272 WinEnableWindow(WinWindowFromID(hwnd, DID_CANCEL), FALSE); 273 threaddone = FALSE; 274 } 275 } 276 return 0; 277 278 case UM_CONTAINER_FILLED: 279 if (!(SHORT) WinSendDlgItemMsg(hwnd, 280 VINF_LISTBOX, 281 LM_QUERYITEMCOUNT, MPVOID, MPVOID)) { 282 saymsg(MB_CANCEL, 283 hwnd, 284 GetPString(IDS_ERRORTEXT), GetPString(IDS_NOFILESFOUNDTEXT)); 285 hwndMe = (HWND) 0; 286 WinDismissDlg(hwnd, 0); 287 } 288 WinEnableWindow(WinWindowFromID(hwnd, DID_CANCEL), TRUE); 289 threaddone = TRUE; 290 return 0; 291 292 case WM_CONTROL: 293 switch (SHORT1FROMMP(mp1)) { 294 case VINF_LISTBOX: 295 switch (SHORT2FROMMP(mp1)) { 296 case LN_ENTER: 297 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(DID_OK, 0), MPVOID); 298 break; 299 } 300 break; 301 case VINF_ENTRY: 302 switch (SHORT2FROMMP(mp1)) { 303 case EN_CHANGE: 304 { 305 SHORT sSelect; 306 CHAR szBuffer[CCHMAXPATH]; 307 308 WinQueryDlgItemText(hwnd, VINF_ENTRY, CCHMAXPATH, szBuffer); 309 bstrip(szBuffer); 310 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, 311 VINF_LISTBOX, 312 LM_SEARCHSTRING, 313 MPFROM2SHORT(LSS_SUBSTRING, 314 LIT_FIRST), 315 MPFROMP(szBuffer)); 316 if (sSelect >= 0) 317 WinSendDlgItemMsg(hwnd, 318 VINF_LISTBOX, 319 LM_SETTOPINDEX, 320 MPFROM2SHORT(sSelect, 0), MPVOID); 321 } 322 break; 323 } 324 break; 325 } 326 return 0; 327 328 case WM_ADJUSTWINDOWPOS: 329 PostMsg(hwnd, UM_STRETCH, MPVOID, MPVOID); 330 break; 331 332 case UM_STRETCH: 333 { 334 SWP swpC, swp; 335 336 WinQueryWindowPos(hwnd, &swp); 337 if (!(swp.fl & (SWP_HIDE | SWP_MINIMIZE))) { 338 WinQueryWindowPos(WinWindowFromID(hwnd, VINF_LISTBOX), &swpC); 339 if (!ypos) 340 ypos = swpC.y; 341 WinSetWindowPos(WinWindowFromID(hwnd, VINF_LISTBOX), HWND_TOP, 342 SysVal(SV_CXSIZEBORDER), 343 ypos, 344 swp.cx - (SysVal(SV_CXSIZEBORDER) * 2), 345 (swp.cy - ypos) - (SysVal(SV_CYTITLEBAR) + 346 SysVal(SV_CYSIZEBORDER)), 347 SWP_MOVE | SWP_SIZE); 348 } 349 } 350 return 0; 351 352 case WM_COMMAND: 353 switch (SHORT1FROMMP(mp1)) { 354 case VINF_RESCAN: 355 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID); 356 break; 357 358 case VINF_SRCH: 359 { 360 SHORT sSelect, sLast = LIT_FIRST; 361 CHAR szBuffer[CCHMAXPATH]; 362 363 *szBuffer = 0; 364 WinQueryDlgItemText(hwnd, VINF_ENTRY, CCHMAXPATH, szBuffer); 365 rstrip(szBuffer); 366 if (!*szBuffer) { 367 sLast = (SHORT) WinSendDlgItemMsg(hwnd, 368 VINF_LISTBOX, 369 LM_QUERYITEMCOUNT, 370 MPVOID, MPVOID); 371 for (sSelect = 0; sSelect < sLast; sSelect++) 372 WinSendDlgItemMsg(hwnd, 373 VINF_LISTBOX, 374 LM_SELECTITEM, 375 MPFROM2SHORT(sSelect, 0), 376 MPFROM2SHORT(FALSE, 0)); 377 break; 378 } 379 for (;;) { 380 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, VINF_LISTBOX, 381 LM_SEARCHSTRING, 382 MPFROM2SHORT(LSS_SUBSTRING, 383 sLast), 384 MPFROMP(szBuffer)); 385 if (sSelect <= sLast) 386 break; 387 if (sSelect >= 0) 388 WinSendDlgItemMsg(hwnd, 389 VINF_LISTBOX, 390 LM_SELECTITEM, 391 MPFROM2SHORT(sSelect, 0), 392 MPFROM2SHORT(TRUE, 0)); 393 else 394 break; 395 sLast = sSelect; 396 } 397 } 398 break; 399 400 case VINF_FILTER: 401 { 402 SHORT sSelect, sTotal; 403 404 sTotal = (SHORT) WinSendDlgItemMsg(hwnd, 405 VINF_LISTBOX, 406 LM_QUERYITEMCOUNT, MPVOID, MPVOID); 407 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, 408 VINF_LISTBOX, 409 LM_QUERYSELECTION, 410 MPFROM2SHORT(LIT_FIRST, 0), 411 MPVOID); 412 if (sSelect == LIT_NONE) { 413 DosBeep(50, 100); 414 break; 415 } 416 #ifdef BUGFIXED 417 sSelect = 0; 418 while (sSelect < sTotal) { 419 if (!WinSendDlgItemMsg(hwnd, 420 VINF_LISTBOX, 421 LM_SELECTITEM, 422 MPFROM2SHORT(sSelect, 0), 423 MPFROM2SHORT(FALSE, 0))) { 424 WinSendDlgItemMsg(hwnd, 425 VINF_LISTBOX, 426 LM_DELETEITEM, 427 MPFROM2SHORT(sSelect, 0), MPVOID); 428 sTotal--; 429 } 430 else 431 sSelect++; 432 } 433 #else // !BUGIFIXED 434 for (sSelect = 0; sSelect < sTotal; sSelect++) 435 WinSendDlgItemMsg(hwnd, 436 VINF_LISTBOX, 437 LM_SETITEMHANDLE, 438 MPFROM2SHORT(sSelect, 0), MPVOID); 439 sSelect = LIT_FIRST; 440 for (;;) { 441 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, 442 VINF_LISTBOX, 443 LM_QUERYSELECTION, 444 MPFROM2SHORT(sSelect, 0), 445 MPVOID); 446 if (sSelect >= 0) 447 WinSendDlgItemMsg(hwnd, 448 VINF_LISTBOX, 449 LM_SETITEMHANDLE, 450 MPFROM2SHORT(sSelect, 0), MPFROMLONG(1L)); 451 else 452 break; 453 } 454 for (sSelect = 0; sSelect < sTotal; sSelect++) 455 WinSendDlgItemMsg(hwnd, 456 VINF_LISTBOX, 457 LM_SELECTITEM, 458 MPFROM2SHORT(sSelect, 0), MPFROM2SHORT(FALSE, 0)); 459 sSelect = 0; 460 while (sSelect < sTotal) { 461 if (!WinSendDlgItemMsg(hwnd, 462 VINF_LISTBOX, 463 LM_QUERYITEMHANDLE, 464 MPFROM2SHORT(sSelect, 0), MPVOID)) { 465 WinSendDlgItemMsg(hwnd, 466 VINF_LISTBOX, 467 LM_DELETEITEM, 468 MPFROM2SHORT(sSelect, 0), MPVOID); 469 sTotal--; 470 } 471 else 472 sSelect++; 473 } 474 #endif // BUGFIXED 475 } 476 break; 477 478 case VINF_DIRS: 479 { 480 CHAR szBuffer[1001], *key = "INFPaths"; 481 482 if (help) 483 key = "HLPPaths"; 484 *szBuffer = 0; 485 WinQueryDlgItemText(hwnd, VINF_ENTRY, 1000, szBuffer); 486 bstrip(szBuffer); 487 PrfWriteProfileData(fmprof, 488 FM3Str, 489 key, 490 (*szBuffer) ? szBuffer : NULL, strlen(szBuffer)); 491 PostMsg(hwnd, UM_RESCAN, MPVOID, MPVOID); 492 } 493 break; 494 495 case DID_CANCEL: 496 hwndMe = (HWND) 0; 497 WinDismissDlg(hwnd, 0); 498 break; 499 500 case DID_OK: 501 { 502 SHORT sSelect; 503 CHAR text[CCHMAXPATH * 2], filename[CCHMAXPATH], *p; 504 FILE *fp; 505 BOOL notfirst = FALSE; 506 507 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, 508 VINF_LISTBOX, 509 LM_QUERYSELECTION, 510 MPFROM2SHORT(LIT_FIRST, 0), 511 MPVOID); 512 if (sSelect < 0) { 513 DosBeep(50, 100); 514 } 244 515 else { 245 WinSetPresParam(WinWindowFromID(hwnd,VINF_LISTBOX), 246 PP_FONTNAMESIZE, 247 strlen(GetPString(IDS_10SYSTEMMONOTEXT)) + 1, 248 (PVOID)GetPString(IDS_10SYSTEMMONOTEXT)); 249 } 250 WinSetWindowText(hwnd, 251 GetPString(IDS_VIEWHELPFILESTEXT)); 252 WinShowWindow(WinWindowFromID(hwnd,VINF_SRCH), 253 FALSE); 254 WinShowWindow(WinWindowFromID(hwnd,VINF_FILTER), 255 FALSE); 256 WinShowWindow(WinWindowFromID(hwnd,VINF_TOPIC), 257 FALSE); 258 WinShowWindow(WinWindowFromID(hwnd,VINF_TOPICHDR), 259 FALSE); 260 } 261 hptrIcon = WinLoadPointer(HWND_DESKTOP,FM3ModHandle,VINF_FRAME); 262 WinDefDlgProc(hwnd,WM_SETICON,MPFROMLONG(hptrIcon),MPVOID); 263 hwndMe = hwnd; 264 PostMsg(hwnd,UM_STRETCH,MPVOID,MPVOID); 265 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID); 266 break; 267 268 case UM_RESCAN: 269 WinSendDlgItemMsg(hwnd, 270 VINF_LISTBOX, 271 LM_DELETEALL, 272 MPVOID, 273 MPVOID); 274 { 275 DUMMY *d; 276 277 d = xmallocz(sizeof(DUMMY),pszSrcFile,__LINE__); 278 if (!d) { 279 WinDismissDlg(hwnd,0); 280 return 0; 281 } 282 else { 283 d->size = sizeof(DUMMY); 284 d->hwnd = hwnd; 285 if (help) 286 d->help = 1; 287 if(_beginthread(FillListboxThread,NULL,65536,(PVOID)d) == -1) { 288 Runtime_Error(pszSrcFile, __LINE__, GetPString(IDS_COULDNTSTARTTHREADTEXT)); 289 free(d); 290 WinDismissDlg(hwnd,0); 291 return 0; 292 } 293 WinEnableWindow(WinWindowFromID(hwnd,DID_CANCEL),FALSE); 294 threaddone = FALSE; 295 } 296 } 516 if (help) { 517 *text = 0; 518 WinSendDlgItemMsg(hwnd, 519 VINF_LISTBOX, 520 LM_QUERYITEMTEXT, 521 MPFROM2SHORT(sSelect, CCHMAXPATH), 522 MPFROMP(text)); 523 p = strchr(text, '>'); 524 if (!p) { 525 DosBeep(50, 100); 526 break; 527 } 528 p++; 529 bstrip(p); 530 if (!*p) 531 DosBeep(50, 100); 532 else 533 ViewHelp(p); 534 break; 535 } 536 save_dir2(filename); 537 if (filename[strlen(filename) - 1] != '\\') 538 strcat(filename, "\\"); 539 strcat(filename, "FM2VINF.CMD"); 540 fp = xfopen(filename, "w", pszSrcFile, __LINE__); 541 if (fp) { 542 fprintf(fp, "@ECHO OFF\nSET FM2REF="); 543 while (sSelect >= 0) { 544 *text = 0; 545 WinSendDlgItemMsg(hwnd, 546 VINF_LISTBOX, 547 LM_QUERYITEMTEXT, 548 MPFROM2SHORT(sSelect, 549 CCHMAXPATH), MPFROMP(text)); 550 p = strchr(text, '>'); 551 if (p) { 552 p++; 553 bstrip(p); 554 if (*p) { 555 if (notfirst) 556 fprintf(fp, "+"); 557 notfirst = TRUE; 558 fprintf(fp, "%s", p); 559 } 560 } 561 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, 562 VINF_LISTBOX, 563 LM_QUERYSELECTION, 564 MPFROM2SHORT(sSelect, 0), 565 MPVOID); 566 } // while 567 *text = 0; 568 WinQueryDlgItemText(hwnd, VINF_TOPIC, CCHMAXPATH * 2, text); 569 bstrip(text); 570 fprintf(fp, 571 "\nVIEW FM2REF%s%s\nDEL %s\n", 572 (*text) ? " " : NullStr, text, filename); 573 fclose(fp); 574 runemf2(SEPARATE | WINDOWED | MINIMIZED | 575 BACKGROUND | INVISIBLE, 576 hwnd, 577 NULL, NULL, "%s /C %s", GetCmdSpec(FALSE), filename); 578 } 579 } 580 } 581 break; 582 583 case IDM_HELP: 584 if (hwndHelp) { 585 if (help) 586 WinSendMsg(hwndHelp, 587 HM_DISPLAY_HELP, 588 MPFROM2SHORT(HELP_VIEWHELPS, 0), 589 MPFROMSHORT(HM_RESOURCEID)); 590 else 591 WinSendMsg(hwndHelp, 592 HM_DISPLAY_HELP, 593 MPFROM2SHORT(HELP_VIEWINF, 0), 594 MPFROMSHORT(HM_RESOURCEID)); 595 } 596 break; 597 } 598 return 0; 599 600 case WM_CLOSE: 601 if (!threaddone) 297 602 return 0; 298 299 case UM_CONTAINER_FILLED: 300 if(!(SHORT)WinSendDlgItemMsg(hwnd, 301 VINF_LISTBOX, 302 LM_QUERYITEMCOUNT, 303 MPVOID, 304 MPVOID)) { 305 saymsg(MB_CANCEL, 306 hwnd, 307 GetPString(IDS_ERRORTEXT), 308 GetPString(IDS_NOFILESFOUNDTEXT)); 309 hwndMe = (HWND)0; 310 WinDismissDlg(hwnd,0); 311 } 312 WinEnableWindow(WinWindowFromID(hwnd,DID_CANCEL),TRUE); 313 threaddone = TRUE; 314 return 0; 315 316 case WM_CONTROL: 317 switch(SHORT1FROMMP(mp1)) { 318 case VINF_LISTBOX: 319 switch(SHORT2FROMMP(mp1)) { 320 case LN_ENTER: 321 PostMsg(hwnd, 322 WM_COMMAND, 323 MPFROM2SHORT(DID_OK,0), 324 MPVOID); 325 break; 326 } 327 break; 328 case VINF_ENTRY: 329 switch(SHORT2FROMMP(mp1)) { 330 case EN_CHANGE: 331 { 332 SHORT sSelect; 333 CHAR szBuffer[CCHMAXPATH]; 334 335 WinQueryDlgItemText(hwnd, 336 VINF_ENTRY, 337 CCHMAXPATH, 338 szBuffer); 339 bstrip(szBuffer); 340 sSelect = (SHORT)WinSendDlgItemMsg(hwnd, 341 VINF_LISTBOX, 342 LM_SEARCHSTRING, 343 MPFROM2SHORT(LSS_SUBSTRING, 344 LIT_FIRST), 345 MPFROMP(szBuffer)); 346 if(sSelect >= 0) 347 WinSendDlgItemMsg(hwnd, 348 VINF_LISTBOX, 349 LM_SETTOPINDEX, 350 MPFROM2SHORT(sSelect,0), 351 MPVOID); 352 } 353 break; 354 } 355 break; 356 } 357 return 0; 358 359 case WM_ADJUSTWINDOWPOS: 360 PostMsg(hwnd,UM_STRETCH,MPVOID,MPVOID); 361 break; 362 363 case UM_STRETCH: 364 { 365 SWP swpC,swp; 366 367 WinQueryWindowPos(hwnd,&swp); 368 if(!(swp.fl & (SWP_HIDE | SWP_MINIMIZE))) { 369 WinQueryWindowPos(WinWindowFromID(hwnd,VINF_LISTBOX),&swpC); 370 if(!ypos) 371 ypos = swpC.y; 372 WinSetWindowPos(WinWindowFromID(hwnd,VINF_LISTBOX),HWND_TOP, 373 SysVal(SV_CXSIZEBORDER), 374 ypos, 375 swp.cx - (SysVal(SV_CXSIZEBORDER) * 2), 376 (swp.cy - ypos) - (SysVal(SV_CYTITLEBAR) + 377 SysVal(SV_CYSIZEBORDER)), 378 SWP_MOVE | SWP_SIZE); 379 } 380 } 381 return 0; 382 383 case WM_COMMAND: 384 switch(SHORT1FROMMP(mp1)) { 385 case VINF_RESCAN: 386 PostMsg(hwnd,UM_RESCAN,MPVOID,MPVOID); 387 break; 388 389 case VINF_SRCH: 390 { 391 SHORT sSelect,sLast = LIT_FIRST; 392 CHAR szBuffer[CCHMAXPATH]; 393 394 *szBuffer = 0; 395 WinQueryDlgItemText(hwnd, 396 VINF_ENTRY, 397 CCHMAXPATH, 398 szBuffer); 399 rstrip(szBuffer); 400 if(!*szBuffer) { 401 sLast = (SHORT)WinSendDlgItemMsg(hwnd, 402 VINF_LISTBOX, 403 LM_QUERYITEMCOUNT, 404 MPVOID, 405 MPVOID); 406 for(sSelect = 0;sSelect < sLast;sSelect++) 407 WinSendDlgItemMsg(hwnd, 408 VINF_LISTBOX, 409 LM_SELECTITEM, 410 MPFROM2SHORT(sSelect,0), 411 MPFROM2SHORT(FALSE,0)); 412 break; 413 } 414 for(;;) { 415 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,VINF_LISTBOX, 416 LM_SEARCHSTRING, 417 MPFROM2SHORT(LSS_SUBSTRING, 418 sLast), 419 MPFROMP(szBuffer)); 420 if(sSelect <= sLast) 421 break; 422 if(sSelect >= 0) 423 WinSendDlgItemMsg(hwnd, 424 VINF_LISTBOX, 425 LM_SELECTITEM, 426 MPFROM2SHORT(sSelect,0), 427 MPFROM2SHORT(TRUE,0)); 428 else 429 break; 430 sLast = sSelect; 431 } 432 } 433 break; 434 435 case VINF_FILTER: 436 { 437 SHORT sSelect,sTotal; 438 439 sTotal = (SHORT)WinSendDlgItemMsg(hwnd, 440 VINF_LISTBOX, 441 LM_QUERYITEMCOUNT, 442 MPVOID, 443 MPVOID); 444 sSelect = (SHORT)WinSendDlgItemMsg(hwnd, 445 VINF_LISTBOX, 446 LM_QUERYSELECTION, 447 MPFROM2SHORT(LIT_FIRST,0), 448 MPVOID); 449 if(sSelect == LIT_NONE) { 450 DosBeep(50,100); 451 break; 452 } 453 #ifdef BUGFIXED 454 sSelect = 0; 455 while(sSelect < sTotal) { 456 if(!WinSendDlgItemMsg(hwnd, 457 VINF_LISTBOX, 458 LM_SELECTITEM, 459 MPFROM2SHORT(sSelect,0), 460 MPFROM2SHORT(FALSE,0))) { 461 WinSendDlgItemMsg(hwnd, 462 VINF_LISTBOX, 463 LM_DELETEITEM, 464 MPFROM2SHORT(sSelect,0), 465 MPVOID); 466 sTotal--; 467 } 468 else 469 sSelect++; 470 } 471 #else // !BUGIFIXED 472 for(sSelect = 0;sSelect < sTotal;sSelect++) 473 WinSendDlgItemMsg(hwnd, 474 VINF_LISTBOX, 475 LM_SETITEMHANDLE, 476 MPFROM2SHORT(sSelect,0), 477 MPVOID); 478 sSelect = LIT_FIRST; 479 for(;;) { 480 sSelect = (SHORT)WinSendDlgItemMsg(hwnd, 481 VINF_LISTBOX, 482 LM_QUERYSELECTION, 483 MPFROM2SHORT(sSelect,0), 484 MPVOID); 485 if(sSelect >= 0) 486 WinSendDlgItemMsg(hwnd, 487 VINF_LISTBOX, 488 LM_SETITEMHANDLE, 489 MPFROM2SHORT(sSelect,0), 490 MPFROMLONG(1L)); 491 else 492 break; 493 } 494 for(sSelect = 0;sSelect < sTotal;sSelect++) 495 WinSendDlgItemMsg(hwnd, 496 VINF_LISTBOX, 497 LM_SELECTITEM, 498 MPFROM2SHORT(sSelect,0), 499 MPFROM2SHORT(FALSE,0)); 500 sSelect = 0; 501 while(sSelect < sTotal) { 502 if(!WinSendDlgItemMsg(hwnd, 503 VINF_LISTBOX, 504 LM_QUERYITEMHANDLE, 505 MPFROM2SHORT(sSelect,0), 506 MPVOID)) { 507 WinSendDlgItemMsg(hwnd, 508 VINF_LISTBOX, 509 LM_DELETEITEM, 510 MPFROM2SHORT(sSelect,0), 511 MPVOID); 512 sTotal--; 513 } 514 else 515 sSelect++; 516 } 517 #endif // BUGFIXED 518 } 519 break; 520 521 case VINF_DIRS: 522 { 523 CHAR szBuffer[1001],*key = "INFPaths"; 524 525 if (help) 526 key = "HLPPaths"; 527 *szBuffer = 0; 528 WinQueryDlgItemText(hwnd, 529 VINF_ENTRY, 530 1000, 531 szBuffer); 532 bstrip(szBuffer); 533 PrfWriteProfileData(fmprof, 534 FM3Str, 535 key, 536 (*szBuffer) ? szBuffer : NULL, 537 strlen(szBuffer)); 538 PostMsg(hwnd, 539 UM_RESCAN, 540 MPVOID, 541 MPVOID); 542 } 543 break; 544 545 case DID_CANCEL: 546 hwndMe = (HWND)0; 547 WinDismissDlg(hwnd,0); 548 break; 549 550 case DID_OK: 551 { 552 SHORT sSelect; 553 CHAR text[CCHMAXPATH * 2],filename[CCHMAXPATH],*p; 554 FILE *fp; 555 BOOL notfirst = FALSE; 556 557 sSelect = (SHORT)WinSendDlgItemMsg(hwnd, 558 VINF_LISTBOX, 559 LM_QUERYSELECTION, 560 MPFROM2SHORT(LIT_FIRST,0), 561 MPVOID); 562 if (sSelect < 0) { 563 DosBeep(50,100); 564 } 565 else { 566 if (help) { 567 *text = 0; 568 WinSendDlgItemMsg(hwnd, 569 VINF_LISTBOX, 570 LM_QUERYITEMTEXT, 571 MPFROM2SHORT(sSelect,CCHMAXPATH), 572 MPFROMP(text)); 573 p = strchr(text,'>'); 574 if(!p) { 575 DosBeep(50,100); 576 break; 577 } 578 p++; 579 bstrip(p); 580 if (!*p) 581 DosBeep(50,100); 582 else 583 ViewHelp(p); 584 break; 585 } 586 save_dir2(filename); 587 if(filename[strlen(filename) - 1] != '\\') 588 strcat(filename,"\\"); 589 strcat(filename,"FM2VINF.CMD"); 590 fp = xfopen(filename,"w",pszSrcFile,__LINE__); 591 if (fp) { 592 fprintf(fp,"@ECHO OFF\nSET FM2REF="); 593 while(sSelect >= 0) { 594 *text = 0; 595 WinSendDlgItemMsg(hwnd, 596 VINF_LISTBOX, 597 LM_QUERYITEMTEXT, 598 MPFROM2SHORT(sSelect, 599 CCHMAXPATH), 600 MPFROMP(text)); 601 p = strchr(text,'>'); 602 if(p) { 603 p++; 604 bstrip(p); 605 if(*p) { 606 if(notfirst) 607 fprintf(fp,"+"); 608 notfirst = TRUE; 609 fprintf(fp,"%s",p); 610 } 611 } 612 sSelect = (SHORT)WinSendDlgItemMsg(hwnd, 613 VINF_LISTBOX, 614 LM_QUERYSELECTION, 615 MPFROM2SHORT(sSelect,0), 616 MPVOID); 617 } // while 618 *text = 0; 619 WinQueryDlgItemText(hwnd, 620 VINF_TOPIC, 621 CCHMAXPATH * 2, 622 text); 623 bstrip(text); 624 fprintf(fp, 625 "\nVIEW FM2REF%s%s\nDEL %s\n", 626 (*text) ? " " : NullStr, 627 text, 628 filename); 629 fclose(fp); 630 runemf2(SEPARATE | WINDOWED | MINIMIZED | 631 BACKGROUND | INVISIBLE, 632 hwnd, 633 NULL, 634 NULL, 635 "%s /C %s", 636 GetCmdSpec(FALSE), 637 filename); 638 } 639 } 640 } 641 break; 642 643 case IDM_HELP: 644 if(hwndHelp) { 645 if(help) 646 WinSendMsg(hwndHelp, 647 HM_DISPLAY_HELP, 648 MPFROM2SHORT(HELP_VIEWHELPS,0), 649 MPFROMSHORT(HM_RESOURCEID)); 650 else 651 WinSendMsg(hwndHelp, 652 HM_DISPLAY_HELP, 653 MPFROM2SHORT(HELP_VIEWINF,0), 654 MPFROMSHORT(HM_RESOURCEID)); 655 } 656 break; 657 } 658 return 0; 659 660 case WM_CLOSE: 661 if(!threaddone) 662 return 0; 663 break; 664 665 case WM_DESTROY: 666 if(hwndMe == hwnd) { 667 hwndMe = (HWND)0; 668 if(hptrIcon) 669 WinDestroyPointer(hptrIcon); 670 hptrIcon = (HPOINTER)0; 671 } 672 break; 603 break; 604 605 case WM_DESTROY: 606 if (hwndMe == hwnd) { 607 hwndMe = (HWND) 0; 608 if (hptrIcon) 609 WinDestroyPointer(hptrIcon); 610 hptrIcon = (HPOINTER) 0; 611 } 612 break; 673 613 } 674 return WinDefDlgProc(hwnd, msg,mp1,mp2);614 return WinDefDlgProc(hwnd, msg, mp1, mp2); 675 615 }
Note:
See TracChangeset
for help on using the changeset viewer.