/*********************************************************************** $Id: inis.c 118 2004-12-05 00:12:55Z root $ Copyright (c) 1993-98 M. Kimes Copyright (c) 2004 Steven H.Levine Revisions 01 Aug 04 SHL - Rework lstrip/rstrip usage 01 Aug 04 SHL - Rework fixup usage ***********************************************************************/ #define INCL_WIN #define INCL_GPI #define INCL_DOS #define INCL_DOSERRORS #include #include #include #include #include #include #include "fm3dll.h" #include "fm3dlg.h" #include "fm3str.h" #include "mle.h" #pragma data_seg(DATA2) #pragma alloc_text(INIS,EnumAppNames,GetKeyData,EnumKeyNames,AddIniProc,IniProc,BackupIni,ChangeIniProc,SwapIniProc,IniLBSubProc,IniLBSubProc2,CopyIni,CompareIni,IntraIniProc,FilterIniProc) #pragma alloc_text(STARTUP,StartIniEditor) typedef struct { USHORT size; CHAR ininame[CCHMAXPATH]; HINI hini; BOOL working; BOOL edit; BOOL confirm; HWND hwndMenu; CHAR applname[CCHMAXPATH]; CHAR keyname[CCHMAXPATH]; CHAR *data; ULONG datalen; SHORT appindex; SHORT keyindex; BOOL dontclose; USHORT currid; BOOL isbinary; HWND hwndIni; HWND hwndApp; HWND hwndKey; HWND hwndData; HWND hwndPopup; HWND hwndCurrent; } INIDATA; typedef struct { USHORT size; USHORT action; CHAR filename1[CCHMAXPATH]; CHAR filename2[CCHMAXPATH]; CHAR app[CCHMAXPATH]; CHAR key[CCHMAXPATH]; CHAR app2[CCHMAXPATH]; CHAR key2[CCHMAXPATH]; HWND hwndDlg; HWND hwndSource; BOOL confirm; } INIREC; VOID CopyIni (VOID *args) { INIREC *inirec = (INIREC *)args; HAB hab2; HMQ hmq2; HINI hini1 = (HINI)0,hini2 = (HINI)0; PRFPROFILE cprfp; CHAR userini[CCHMAXPATH],sysini[CCHMAXPATH]; if(inirec) { hab2 = WinInitialize(0); if(hab2) { hmq2 = WinCreateMsgQueue(hab2,0); if(hmq2) { WinCancelShutdown(hmq2,TRUE); *userini = *sysini = 0; memset(&cprfp,0,sizeof(PRFPROFILE)); cprfp.cchUserName = CCHMAXPATH; cprfp.cchSysName = CCHMAXPATH; cprfp.pszUserName = (PSZ)userini; cprfp.pszSysName = (PSZ)sysini; if(PrfQueryProfile(hab2,&cprfp)) { if(!stricmp(cprfp.pszUserName,inirec->filename1)) hini1 = HINI_USERPROFILE; else if(!stricmp(cprfp.pszSysName,inirec->filename1)) hini1 = HINI_SYSTEMPROFILE; if(!stricmp(cprfp.pszUserName,inirec->filename2)) hini2 = HINI_USERPROFILE; else if(!stricmp(cprfp.pszSysName,inirec->filename2)) hini2 = HINI_SYSTEMPROFILE; } if(!hini1) hini1 = PrfOpenProfile(hab2,inirec->filename1); if(!hini2) { if(!stricmp(inirec->filename1,inirec->filename2)) hini2 = hini1; else hini2 = PrfOpenProfile(hab2,inirec->filename2); } if(hini1 && hini2 && (*inirec->app2 || hini1 != hini2)) { PVOID pDataK,pData; PBYTE pCurrentK; ULONG ulSize = 0L; if(inirec->action == IDM_MOVE || inirec->action == IDM_COPY) { if(!*inirec->key) { if(inirec->confirm && PrfQueryProfileSize(hini1,(PSZ)((*inirec->app2) ? inirec->app2 : inirec->app),NULL, (PULONG)&ulSize) && ulSize) { if(saymsg(MB_YESNOCANCEL, HWND_DESKTOP, GetPString(IDS_CONFIRMTEXT), GetPString(IDS_INIOVERAPPNAMETEXT), ((*inirec->app2) ? inirec->app2 : inirec->app), inirec->filename1) != MBID_YES) goto Abort; } if(PrfQueryProfileSize(hini2, (PSZ)inirec->app, NULL, (PULONG)&ulSize) && ulSize) { pDataK = malloc(ulSize); /* allocate space for keynames */ if(pDataK) { /* get keynames */ if(PrfQueryProfileString(hini2, (PSZ)inirec->app, NULL, "\0", pDataK, ulSize)) { pCurrentK = pDataK; /* step through keynames */ while (*pCurrentK) { if(PrfQueryProfileSize(hini2,inirec->app, pCurrentK, (PULONG)&ulSize) && ulSize) { pData = malloc(ulSize); if(pData) { /* get data */ if(PrfQueryProfileData(hini2,inirec->app, pCurrentK, pData, (PULONG)&ulSize)) /* write data to new ini file */ PrfWriteProfileData(hini1,((*inirec->app2) ? inirec->app2 : inirec->app), pCurrentK,pData, ulSize); free(pData); /* free data */ } } while(*pCurrentK) /* next keyname */ pCurrentK++; pCurrentK++; } } free(pDataK); /* free keynames */ } } } else { if(inirec->confirm && PrfQueryProfileSize(hini1,(PSZ)((*inirec->app2) ? inirec->app2 : inirec->app), ((*inirec->key2) ? inirec->key2 : inirec->key), (PULONG)&ulSize) && ulSize) { if(saymsg(MB_YESNOCANCEL, HWND_DESKTOP, GetPString(IDS_CONFIRMTEXT), GetPString(IDS_INIOVERAPPKEYNAMETEXT), ((*inirec->app2) ? inirec->app2 : inirec->app), ((*inirec->key2) ? inirec->key2 : inirec->key), inirec->filename1) != MBID_YES) goto Abort; } if(PrfQueryProfileSize(hini2,inirec->app, inirec->key, (PULONG)&ulSize) && ulSize) { pData = malloc(ulSize); if(pData) { /* get data */ if(PrfQueryProfileData(hini2,inirec->app, inirec->key, pData, (PULONG)&ulSize)) /* write data to new ini file */ PrfWriteProfileData(hini1,((*inirec->app2) ? inirec->app2 : inirec->app), ((*inirec->key2) ? inirec->key2 : inirec->key), pData,ulSize); free(pData); /* free data */ } } } if(inirec->action == IDM_MOVE) { if(inirec->confirm && saymsg(MB_YESNOCANCEL, HWND_DESKTOP, GetPString(IDS_CONFIRMTEXT), GetPString(IDS_INIDELETEMOVEDTEXT), inirec->filename2) != MBID_YES) goto Abort; PrfWriteProfileData(hini2, inirec->app, ((*inirec->key) ? inirec->key : NULL), NULL, 0L); } } } Abort: if(hini1) PrfCloseProfile(hini1); if(hini2) PrfCloseProfile(hini2); WinDestroyMsgQueue(hmq2); } WinTerminate(hab2); } PostMsg(inirec->hwndDlg,WM_COMMAND,MPFROM2SHORT(INI_REFRESH,0), MPVOID); if(inirec->action == IDM_MOVE && inirec->hwndSource && inirec->hwndSource != inirec->hwndDlg) PostMsg(inirec->hwndSource,WM_COMMAND,MPFROM2SHORT(INI_REFRESH,0), MPVOID); free(inirec); } } VOID CompareIni (VOID *args) { INIREC *inirec = (INIREC *)args; HAB hab2; HMQ hmq2; if(inirec) { hab2 = WinInitialize(0); if(hab2) { hmq2 = WinCreateMsgQueue(hab2,0); if(hmq2) { WinCancelShutdown(hmq2,TRUE); WinDestroyMsgQueue(hmq2); } WinTerminate(hab2); } free(inirec); } } VOID BackupIni (VOID *args) { PPRFPROFILE prfp = (PPRFPROFILE)args; HAB hab2; HMQ hmq2; HINI orig = (HINI)0,new; PVOID pDataA,pDataK,pData; PBYTE pCurrentA,pCurrentK; ULONG ulSize = 0L; PRFPROFILE cprfp; CHAR userini[CCHMAXPATH],sysini[CCHMAXPATH]; if(prfp) { hab2 = WinInitialize(0); if(hab2) { hmq2 = WinCreateMsgQueue(hab2,0); if(hmq2) { WinCancelShutdown(hmq2,TRUE); *userini = *sysini = 0; memset(&cprfp,0,sizeof(PRFPROFILE)); cprfp.cchUserName = CCHMAXPATH; cprfp.cchSysName = CCHMAXPATH; cprfp.pszUserName = (PSZ)userini; cprfp.pszSysName = (PSZ)sysini; if(PrfQueryProfile(hab2,&cprfp)) { if(!stricmp(cprfp.pszUserName,prfp->pszUserName)) orig = HINI_USERPROFILE; else if(!stricmp(cprfp.pszSysName,prfp->pszUserName)) orig = HINI_SYSTEMPROFILE; } if(!orig) orig = PrfOpenProfile(hab2,prfp->pszUserName); if(orig) { new = PrfOpenProfile(hab2,prfp->pszSysName); if(new) { if(PrfQueryProfileSize(orig,NULL,NULL,(PULONG)&ulSize) && ulSize) { pDataA = malloc(ulSize); /* allocate space for applnames */ if(pDataA) { /* get applnames */ if(PrfQueryProfileString(orig,NULL,NULL,"\0",pDataA,ulSize)) { pCurrentA = pDataA; /* step through applnames */ while (*pCurrentA) { /* now keynames for this applname */ if (PrfQueryProfileSize(orig,(PSZ)pCurrentA,NULL, (PULONG)&ulSize) && ulSize) { pDataK = malloc(ulSize); /* allocate space for keynames */ if(pDataK) { /* get keynames */ if(PrfQueryProfileString(orig,(PSZ)pCurrentA,NULL, "\0",pDataK,ulSize)) { pCurrentK = pDataK; /* step through keynames */ while (*pCurrentK) { if(PrfQueryProfileSize(orig,pCurrentA, pCurrentK, (PULONG)&ulSize) && ulSize) { pData = malloc(ulSize); if(pData) { /* get data */ if(PrfQueryProfileData(orig,pCurrentA, pCurrentK, pData, (PULONG)&ulSize)) /* write data to new ini file */ PrfWriteProfileData(new,pCurrentA, pCurrentK,pData, ulSize); free(pData); /* free data */ } } while(*pCurrentK) /* next keyname */ pCurrentK++; pCurrentK++; } } free(pDataK); /* free keynames */ } } while(*pCurrentA) /* next applname */ pCurrentA++; pCurrentA++; } } free(pDataA); /* free applnames */ } } PrfCloseProfile(new); } PrfCloseProfile(orig); } WinDestroyMsgQueue(hmq2); } WinTerminate(hab2); } free(prfp->pszUserName); free(prfp->pszSysName); free(prfp); } } static BOOL EnumAppNames (HWND hwndList,HINI hini) { PVOID pData; PBYTE pCurrent; ULONG ulSize = 0L; WinSendMsg(hwndList,LM_DELETEALL,NULL,NULL); if(PrfQueryProfileSize(hini,NULL,NULL,(PULONG)&ulSize) && ulSize) { pData = malloc(ulSize); if(!pData) return TRUE; if(PrfQueryProfileString(hini,NULL,NULL,"\0",pData,ulSize)) { pCurrent = pData; WinEnableWindowUpdate(hwndList,FALSE); while (*pCurrent) { WinSendMsg(hwndList,LM_INSERTITEM,MPFROMSHORT(LIT_SORTASCENDING), MPFROMP(pCurrent)); while(*pCurrent) pCurrent++; pCurrent++; } WinSendMsg(hwndList,LM_SELECTITEM,MPFROMSHORT(0),MPFROMSHORT(TRUE)); WinEnableWindowUpdate(hwndList,TRUE); } free(pData); return TRUE; } DosBeep(250,100); return FALSE; } static CHAR * GetKeyData (HWND hwndList,HINI hini,PSZ pAppName, PSZ pKeyName,PULONG datalen) { ULONG ulKeySize = 0L; PVOID pKeyData = NULL; *datalen = 0L; if(PrfQueryProfileSize(hini,pAppName,pKeyName, (PULONG)&ulKeySize)) { pKeyData = malloc(ulKeySize + 1L); if(pKeyData) { if(PrfQueryProfileData(hini,pAppName,pKeyName, pKeyData,(PULONG)&ulKeySize)) { HexDump(hwndList,pKeyData,ulKeySize); { CHAR s[81]; sprintf(s, GetPString(IDS_INIBYTESTEXT), ulKeySize, &"s"[ulKeySize == 1]); WinSetDlgItemText(WinQueryWindow(hwndList,QW_PARENT), INI_NUMDATA, s); } *datalen = ulKeySize; return (CHAR *)pKeyData; } } } DosBeep(250,100); return NULL; } static BOOL EnumKeyNames (HWND hwndList,HINI hini,PSZ pAppName) { PVOID pData; PBYTE pCurrent; ULONG ulSize = 0L; WinSendMsg(hwndList,LM_DELETEALL,NULL,NULL); if(PrfQueryProfileSize(hini,pAppName,NULL, (PULONG)&ulSize)) { if(!ulSize) { PrfWriteProfileData(hini,pAppName,NULL,"\0",0L); return FALSE; } pData = malloc(ulSize + 1L); if(pData) { if(PrfQueryProfileString(hini,pAppName,NULL, "\0",pData,ulSize)) { pCurrent = pData; WinEnableWindowUpdate(hwndList,FALSE); while (*pCurrent) { WinSendMsg(hwndList,LM_INSERTITEM,MPFROMSHORT(LIT_SORTASCENDING), MPFROMP(pCurrent)); while(*pCurrent) pCurrent++; pCurrent++; } WinSendMsg(hwndList,LM_SELECTITEM,MPFROMSHORT(0),MPFROMSHORT(TRUE)); WinEnableWindowUpdate(hwndList,TRUE); } free(pData); return TRUE; } } DosBeep(250,100); return FALSE; } #define hwndMLE WinWindowFromID(hwnd,IAF_MLE) MRESULT EXPENTRY FilterIniProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) { INIDATA *inidata; static CHAR lasttext[8192] = ""; switch(msg) { case WM_INITDLG: WinSetWindowPtr(hwnd,0,mp2); inidata = (INIDATA *)mp2; WinSendDlgItemMsg(hwnd,IAF_SAVENAME,EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH,0),MPVOID); MLEsetformat(hwndMLE,MLFIE_NOTRANS); MLEsetlimit(hwndMLE,8192); WinSetWindowText(hwndMLE,lasttext); { FILEFINDBUF3 ffb; ULONG nm; HDIR hdir; hdir = HDIR_CREATE; nm = 1L; DosError(FERR_DISABLEHARDERR); if(!DosFindFirst("*.IST", &hdir, FILE_NORMAL | FILE_ARCHIVED, &ffb, sizeof(ffb), &nm, FIL_STANDARD)) { do { priority_bumped(); WinSendDlgItemMsg(hwnd,IAF_LISTBOX,LM_INSERTITEM, MPFROMSHORT(LIT_SORTASCENDING), MPFROMP(ffb.achName)); nm = 1L; } while(!DosFindNext(hdir,&ffb,sizeof(ffb),&nm)); DosFindClose(hdir); priority_bumped(); } } break; case WM_ADJUSTWINDOWPOS: PostMsg(hwnd,UM_SETDIR,MPVOID,MPVOID); break; case UM_SETDIR: PaintRecessedWindow(WinWindowFromID(hwnd,IAF_HELP),(HPS)0,FALSE,TRUE); PaintRecessedWindow(WinWindowFromID(hwnd,IAF_SAVENAME),(HPS)0,FALSE,FALSE); PaintRecessedWindow(WinWindowFromID(hwnd,IAF_LISTBOX),(HPS)0,FALSE,FALSE); PaintRecessedWindow(WinWindowFromID(hwnd,IAF_MLE),(HPS)0,FALSE,FALSE); return 0; case WM_CONTROL: switch(SHORT1FROMMP(mp1)) { case IAF_SAVENAME: if(SHORT2FROMMP(mp1) == EN_KILLFOCUS) WinSetDlgItemText(hwnd, IAF_HELP, NullStr); if(SHORT2FROMMP(mp1) == EN_SETFOCUS) WinSetDlgItemText(hwnd, IAF_HELP, GetPString(IDS_MASKLISTNAMEHELPTEXT)); break; case IAF_LISTBOX: if(SHORT2FROMMP(mp1) == LN_KILLFOCUS) WinSetDlgItemText(hwnd, IAF_HELP, NullStr); if(SHORT2FROMMP(mp1) == LN_SETFOCUS) WinSetDlgItemText(hwnd, IAF_HELP, GetPString(IDS_MASKLISTFILESHELPTEXT)); else if(SHORT2FROMMP(mp1) == LN_ENTER) PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(IAF_LOAD,0), MPVOID); break; case IAF_MLE: if(SHORT2FROMMP(mp1) == MLN_KILLFOCUS) WinSetDlgItemText(hwnd, IAF_HELP, NullStr); if(SHORT2FROMMP(mp1) == MLN_SETFOCUS) WinSetDlgItemText(hwnd, IAF_HELP, GetPString(IDS_MASKLISTMASKSHELPTEXT)); break; } return 0; case WM_COMMAND: switch(SHORT1FROMMP(mp1)) { case DID_OK: inidata = INSTDATA(hwnd); if(inidata) { CHAR s[8193],app[1024]; register CHAR *p; SHORT sSelect,numitems; BOOL match; *s = 0; WinQueryWindowText(hwndMLE,8192,s); if(*s) { strcpy(lasttext,s); p = s; while(*p) { if(*p == '\r') { memmove(p,p + 1,strlen(p)); continue; } if(*p == '\n') *p = 0; p++; } p++; *p = 0; } else { DosBeep(250,100); break; } numitems = (SHORT)WinSendMsg(inidata->hwndApp, LM_QUERYITEMCOUNT, MPVOID, MPVOID); if(numitems) { WinSetPointer(HWND_DESKTOP,hptrBusy); WinSetDlgItemText(hwnd, IAF_HELP, GetPString(IDS_FILTERINGTEXT)); sSelect = 0; while(numitems) { *app = 0; WinSendMsg(inidata->hwndApp, LM_QUERYITEMTEXT, MPFROM2SHORT(sSelect,1024), MPFROMP(app)); match = FALSE; if(*app) { p = s; while(*p) { if(*p != '/') { if(wildcard(app,p,TRUE)) match = TRUE; } else if(wildcard(app,p + 1,TRUE)) { match = FALSE; break; } while(*p) p++; p++; } } if(!match) WinSendMsg(inidata->hwndApp,LM_DELETEITEM, MPFROMSHORT(sSelect),MPVOID); else sSelect++; numitems--; } WinSetPointer(HWND_DESKTOP,hptrArrow); } else { DosBeep(250,100); break; } } WinDismissDlg(hwnd,1); break; case IAF_LOAD: { CHAR s[8193]; FILE *fp; INT len; SHORT sSelect; sSelect = (SHORT)WinSendDlgItemMsg(hwnd,IAF_LISTBOX, LM_QUERYSELECTION, MPFROM2SHORT(LIT_FIRST,0), MPVOID); if(sSelect >= 0) { *s = 0; WinSendDlgItemMsg(hwnd,IAF_LISTBOX,LM_QUERYITEMTEXT, MPFROM2SHORT(sSelect,CCHMAXPATH), MPFROMP(s)); bstrip(s); if(*s) { fp = _fsopen(s,"r",SH_DENYWR); if(fp) { len = fread(s,1,8192,fp); s[len] = 0; WinSetWindowText(hwndMLE,s); fclose(fp); } else DosBeep(250,100); } } else DosBeep(50,100); } break; case IAF_SAVE: { CHAR s[8193],filename[CCHMAXPATH],*p; FILE *fp; *filename = 0; WinQueryDlgItemText(hwnd, IAF_SAVENAME, CCHMAXPATH, filename); bstrip(filename); if(*filename) { p = strchr(filename,'.'); if(p) { strcpy(p,".IST"); WinSetDlgItemText(hwnd, IAF_SAVENAME, filename); } *s = 0; WinQueryWindowText(hwndMLE,8192,s); if(*s) { fp = fopen(filename,"w"); if(fp) { fwrite(s,1,strlen(s),fp); fclose(fp); WinSendDlgItemMsg(hwnd, IAF_LISTBOX, LM_INSERTITEM, MPFROMSHORT(LIT_SORTASCENDING), MPFROMP(filename)); } else DosBeep(250,100); } else DosBeep(50,100); } } break; case IAF_DELETE: { CHAR s[CCHMAXPATH]; SHORT sSelect; sSelect = (SHORT)WinSendDlgItemMsg(hwnd,IAF_LISTBOX, LM_QUERYSELECTION, MPFROM2SHORT(LIT_FIRST,0), MPVOID); if(sSelect >= 0) { *s = 0; WinSendDlgItemMsg(hwnd,IAF_LISTBOX,LM_QUERYITEMTEXT, MPFROM2SHORT(sSelect,CCHMAXPATH), MPFROMP(s)); bstrip(s); if(*s) { unlinkf(s); WinSendDlgItemMsg(hwnd,IAF_LISTBOX,LM_DELETEITEM, MPFROMSHORT(sSelect),MPVOID); } } } break; case DID_CANCEL: WinDismissDlg(hwnd,0); break; case IDM_HELP: if(hwndHelp) WinSendMsg(hwndHelp,HM_DISPLAY_HELP, MPFROM2SHORT(HELP_FILTERINI,0), MPFROMSHORT(HM_RESOURCEID)); break; } return 0; } return WinDefDlgProc(hwnd,msg,mp1,mp2); } MRESULT EXPENTRY IntraIniProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) { INIREC *inirec; switch(msg) { case WM_INITDLG: WinSetWindowPtr(hwnd,0,mp2); inirec = (INIREC *)mp2; WinSendDlgItemMsg(hwnd, INII_NEWAPP, EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH,0), MPVOID); WinSendDlgItemMsg(hwnd, INII_NEWKEY, EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH,0), MPVOID); { CHAR s[CCHMAXPATH + 34]; sprintf(s, GetPString(IDS_INIWASTEXT), inirec->app); WinSetDlgItemText(hwnd, INII_OLDAPP, s); } if(!*inirec->key) { WinEnableWindow(WinWindowFromID(hwnd,INII_NEWKEY),FALSE); WinEnableWindow(WinWindowFromID(hwnd,INII_NEWKEYHDR),FALSE); switch(inirec->action) { case IDM_MOVE: WinSetWindowText(hwnd, GetPString(IDS_INIRENAMEAPPTITLETEXT)); break; case IDM_COPY: WinSetWindowText(hwnd, GetPString(IDS_INICOPYAPPTITLETEXT)); break; } } else { { CHAR s[CCHMAXPATH + 34]; sprintf(s, GetPString(IDS_INIWASTEXT), inirec->key); WinSetDlgItemText(hwnd, INII_OLDKEY, s); } WinSetDlgItemText(hwnd, INII_NEWAPP, inirec->app); WinSendDlgItemMsg(hwnd, INII_NEWAPP, EM_SETSEL, MPFROM2SHORT(0,CCHMAXPATH), MPVOID); switch(inirec->action) { case IDM_MOVE: WinSetWindowText(hwnd, GetPString(IDS_INIRENAMEKEYTITLETEXT)); break; case IDM_COPY: WinSetWindowText(hwnd, GetPString(IDS_INICOPYKEYTITLETEXT)); break; } } break; case WM_COMMAND: switch(SHORT1FROMMP(mp1)) { case DID_OK: inirec = (INIREC *)WinQueryWindowPtr(hwnd,0); if(inirec) { WinQueryDlgItemText(hwnd, INII_NEWAPP, CCHMAXPATH, inirec->app2); bstrip(inirec->app2); if(!*inirec->app2) { DosBeep(50,100); break; } if(*inirec->key) { WinQueryDlgItemText(hwnd, INII_NEWKEY, CCHMAXPATH, inirec->key2); bstrip(inirec->key2); if(!*inirec->key2) { DosBeep(50,100); break; } } WinDismissDlg(hwnd,1); } break; case DID_CANCEL: WinDismissDlg(hwnd,0); break; case IDM_HELP: if(hwndHelp) WinSendMsg(hwndHelp, HM_DISPLAY_HELP, MPFROM2SHORT(HELP_INTRAINI,0), MPFROMSHORT(HM_RESOURCEID)); break; } return 0; } return WinDefDlgProc(hwnd,msg,mp1,mp2); } MRESULT EXPENTRY ChangeIniProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) { switch(msg) { case WM_INITDLG: WinSetWindowPtr(hwnd,0,mp2); WinSendDlgItemMsg(hwnd,INIR_USERPROFILE,EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH,0),MPVOID); WinSendDlgItemMsg(hwnd,INIR_SYSTEMPROFILE,EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH,0),MPVOID); break; case WM_COMMAND: switch(SHORT1FROMMP(mp1)) { case INIR_FIND: { CHAR filename[CCHMAXPATH],*p,*ininame; USHORT id = 0; HWND hwndFocus; hwndFocus = WinQueryFocus(HWND_DESKTOP); if(hwndFocus) id = WinQueryWindowUShort(hwndFocus,QWS_ID); if(id != INIR_SYSTEMPROFILE) id = INIR_USERPROFILE; ininame = INSTDATA(hwnd); if(ininame && *ininame) { strcpy(filename,ininame); p = filename; while(*p) { if(*p == '/') *p = '\\'; p++; } p = strrchr(filename,'\\'); if(p) { p++; *p = 0; } else *filename = 0; } else *filename = 0; strcat(filename,"*.INI"); if(insert_filename(hwnd, filename, TRUE, FALSE) && *filename) WinSetDlgItemText(hwnd, id, filename); } break; case DID_OK: { HINI testini; PRFPROFILE prfp; CHAR sysini[CCHMAXPATH]; CHAR userini[CCHMAXPATH]; WinQueryDlgItemText(hwnd,INIR_USERPROFILE,CCHMAXPATH,userini); WinQueryDlgItemText(hwnd,INIR_SYSTEMPROFILE,CCHMAXPATH,sysini); testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd),userini); if(!testini) { saymsg(MB_CANCEL, hwnd, GetPString(IDS_ERRORTEXT), GetPString(IDS_INICANTOPENUSERTEXT), userini); break; } PrfCloseProfile(testini); testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd),sysini); if(!testini) { saymsg(MB_CANCEL, hwnd, GetPString(IDS_ERRORTEXT), GetPString(IDS_INICANTOPENSYSTEXT), sysini); break; } PrfCloseProfile(testini); memset(&prfp,0,sizeof(PRFPROFILE)); prfp.cchUserName = strlen(sysini); prfp.cchSysName = strlen(userini); prfp.pszUserName = (PSZ)userini; prfp.pszSysName = (PSZ)sysini; if(PrfReset(WinQueryAnchorBlock(hwnd),&prfp)) WinDismissDlg(hwnd,1); else General_Error(WinQueryAnchorBlock(hwnd), hwnd, __FILE__, __LINE__, GetPString(IDS_INIPRFRESETFAILEDTEXT)); } break; case DID_CANCEL: WinDismissDlg(hwnd,0); break; case IDM_HELP: if(hwndHelp) WinSendMsg(hwndHelp,HM_DISPLAY_HELP, MPFROM2SHORT(HELP_CHANGEINI,0), MPFROMSHORT(HM_RESOURCEID)); break; } return 0; } return WinDefDlgProc(hwnd,msg,mp1,mp2); } MRESULT EXPENTRY SwapIniProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) { switch(msg) { case WM_INITDLG: WinSetWindowPtr(hwnd,0,mp2); WinSendDlgItemMsg(hwnd, INIR_USERPROFILE, EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH,0), MPVOID); WinSendDlgItemMsg(hwnd, INIR_SYSTEMPROFILE, EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH,0), MPVOID); WinSetWindowText(hwnd, GetPString(IDS_INISWAPOS2INISTITLETEXT)); break; case WM_COMMAND: switch(SHORT1FROMMP(mp1)) { case INIR_FIND: { CHAR filename[CCHMAXPATH],*p,*ininame; USHORT id = 0; HWND hwndFocus; hwndFocus = WinQueryFocus(HWND_DESKTOP); if(hwndFocus) id = WinQueryWindowUShort(hwndFocus,QWS_ID); if(id != INIR_SYSTEMPROFILE) id = INIR_USERPROFILE; ininame = INSTDATA(hwnd); if(ininame && *ininame) { strcpy(filename,ininame); p = filename; while(*p) { if(*p == '/') *p = '\\'; p++; } p = strrchr(filename,'\\'); if(p) { p++; *p = 0; } else *filename = 0; } else *filename = 0; strcat(filename,"*.INI"); if(insert_filename(hwnd, filename, TRUE, FALSE) && *filename) WinSetDlgItemText(hwnd, id, filename); } break; case DID_OK: { HINI testini; PRFPROFILE prfp; CHAR sysini[CCHMAXPATH]; CHAR userini[CCHMAXPATH]; CHAR oldsysini[CCHMAXPATH]; CHAR olduserini[CCHMAXPATH]; CHAR tempsysini[CCHMAXPATH]; CHAR tempuserini[CCHMAXPATH]; CHAR tempsysini2[CCHMAXPATH]; CHAR tempuserini2[CCHMAXPATH]; CHAR *p; APIRET rc; *tempuserini = 0; *tempsysini = 0; *tempuserini2 = 0; *tempsysini2 = 0; memset(&prfp,0,sizeof(PRFPROFILE)); prfp.cchUserName = CCHMAXPATH; prfp.cchSysName = CCHMAXPATH; prfp.pszUserName = (PSZ)olduserini; prfp.pszSysName = (PSZ)oldsysini; if(!PrfQueryProfile(WinQueryAnchorBlock(hwnd),&prfp)) { General_Error(WinQueryAnchorBlock(hwnd), hwnd, __FILE__, __LINE__, GetPString(IDS_INIQUERYPRFFAILEDTEXT)); break; } WinQueryDlgItemText(hwnd, INIR_USERPROFILE, CCHMAXPATH, userini); WinQueryDlgItemText(hwnd, INIR_SYSTEMPROFILE, CCHMAXPATH, sysini); MakeFullName(userini); MakeFullName(sysini); testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd), userini); if(!testini) { saymsg(MB_CANCEL, hwnd, GetPString(IDS_ERRORTEXT), GetPString(IDS_INICANTOPENUSERTEXT), userini); break; } PrfCloseProfile(testini); testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd),sysini); if(!testini) { saymsg(MB_CANCEL, hwnd, GetPString(IDS_ERRORTEXT), GetPString(IDS_INICANTOPENSYSTEXT), sysini); break; } PrfCloseProfile(testini); /* make copies of new inis */ *tempuserini = 0; *tempsysini = 0; save_dir2(tempuserini); if(tempuserini[strlen(tempuserini) - 1] != '\\') strcat(tempuserini,"\\"); strcat(tempuserini,"TEMPUSER.INI"); rc = DosCopy(userini,tempuserini,DCPY_EXISTING); if(rc) { Dos_Error(MB_CANCEL, rc, hwnd, __FILE__, __LINE__, GetPString(IDS_COMPCOPYFAILEDTEXT), userini, tempuserini); break; } save_dir2(tempsysini); if(tempsysini[strlen(tempsysini) - 1] != '\\') strcat(tempsysini,"\\"); strcat(tempsysini,"TEMPSYS.INI"); rc = DosCopy(sysini, tempsysini, DCPY_EXISTING); if(rc) { Dos_Error(MB_CANCEL, rc, hwnd, __FILE__, __LINE__, GetPString(IDS_COMPCOPYFAILEDTEXT), sysini, tempsysini); break; } memset(&prfp,0,sizeof(PRFPROFILE)); prfp.cchUserName = strlen(tempuserini); prfp.cchSysName = strlen(tempsysini); prfp.pszUserName = (PSZ)tempuserini; prfp.pszSysName = (PSZ)tempsysini; if(PrfReset(WinQueryAnchorBlock(hwnd),&prfp)) { /* backup old inis */ strcpy(tempuserini2,olduserini); p = strrchr(tempuserini2,'\\'); if(!p) *tempuserini2 = 0; else { p++; *p = 0; } strcat(tempuserini2,"OS2INI.BAK"); rc = DosCopy(olduserini, tempuserini2, DCPY_EXISTING); if(rc) { Dos_Error(MB_CANCEL, rc, hwnd, __FILE__, __LINE__, GetPString(IDS_COMPCOPYFAILEDTEXT), olduserini, tempuserini2); WinDismissDlg(hwnd,1); break; } strcpy(tempsysini2,oldsysini); p = strrchr(tempsysini2,'\\'); if(!p) *tempsysini2 = 0; else { p++; *p = 0; } strcat(tempsysini2,"OS2SYINI.BAK"); rc = DosCopy(oldsysini, tempsysini2, DCPY_EXISTING); if(rc) { Dos_Error(MB_CANCEL, rc, hwnd, __FILE__, __LINE__, GetPString(IDS_COMPCOPYFAILEDTEXT), oldsysini, tempsysini2); WinDismissDlg(hwnd,1); break; } /* copy new inis to old ini names */ rc = DosCopy(userini, olduserini, DCPY_EXISTING); if(rc) { Dos_Error(MB_CANCEL, rc, hwnd, __FILE__, __LINE__, GetPString(IDS_COMPCOPYFAILEDTEXT), userini, olduserini); WinDismissDlg(hwnd,1); break; } rc = DosCopy(sysini, oldsysini, DCPY_EXISTING); if(rc) { Dos_Error(MB_CANCEL, rc, hwnd, __FILE__, __LINE__, GetPString(IDS_COMPCOPYFAILEDTEXT), userini, olduserini); WinDismissDlg(hwnd,1); break; } /* replace temp inis with new permanent inis */ memset(&prfp,0,sizeof(PRFPROFILE)); prfp.cchUserName = strlen(oldsysini); prfp.cchSysName = strlen(olduserini); prfp.pszUserName = (PSZ)olduserini; prfp.pszSysName = (PSZ)oldsysini; if(!PrfReset(WinQueryAnchorBlock(hwnd),&prfp)) General_Error(WinQueryAnchorBlock(hwnd), hwnd, __FILE__, __LINE__, GetPString(IDS_INIPRFRESETFAILEDTEXT)); else { Notify(GetPString(IDS_SUCCESSTEXT)); unlinkf(tempuserini); unlinkf(tempsysini); } WinDismissDlg(hwnd,1); } else General_Error(WinQueryAnchorBlock(hwnd), hwnd, __FILE__, __LINE__, GetPString(IDS_INIPRFRESETFAILEDTEXT)); } break; case DID_CANCEL: WinDismissDlg(hwnd,0); break; case IDM_HELP: if(hwndHelp) WinSendMsg(hwndHelp,HM_DISPLAY_HELP, MPFROM2SHORT(HELP_SWAPINI,0), MPFROMSHORT(HM_RESOURCEID)); break; } return 0; } return WinDefDlgProc(hwnd,msg,mp1,mp2); } MRESULT EXPENTRY AddIniProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) { INIDATA *inidata; switch(msg) { case WM_INITDLG: if(!mp2) { WinDismissDlg(hwnd,0); break; } inidata = (INIDATA *)mp2; if(inidata->edit) WinSetWindowText(hwnd, GetPString(IDS_INIEDITINITITLETEXT)); WinSetWindowPtr(hwnd,0,(PVOID)mp2); WinSendDlgItemMsg(hwnd, IAD_APPNAME, EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH,0), MPVOID); WinSendDlgItemMsg(hwnd, IAD_KEYNAME, EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH,0), MPVOID); WinSendDlgItemMsg(hwnd, IAD_DATA, EM_SETTEXTLIMIT, MPFROM2SHORT(32767,0), MPVOID); WinEnableWindow(WinWindowFromID(hwnd,DID_OK), FALSE); WinSetDlgItemText(hwnd, IAD_APPNAME, inidata->applname); if(inidata->edit) { WinSetDlgItemText(hwnd, IAD_KEYNAME, inidata->keyname); if(inidata->data && inidata->datalen) { CHAR *p; inidata->isbinary = FALSE; p = inidata->data; while((p - inidata->data) < inidata->datalen - 1) { if(*p < ' ' || !isprint(*p)) { inidata->isbinary = TRUE; break; } p++; } if(inidata->isbinary) { inidata->isbinary = TRUE; WinCheckButton(hwnd,IAD_ISBINARY,TRUE); if(saymsg(MB_ENTERCANCEL | MB_ICONEXCLAMATION, hwnd, GetPString(IDS_WARNINGTEXT), GetPString(IDS_INIBINARYDATASKIPTEXT)) == MBID_CANCEL) WinDismissDlg(hwnd,0); p = malloc(inidata->datalen * 2); if(p) { memset(p,0,inidata->datalen * 2); fixup(inidata->data, p, inidata->datalen * 2, inidata->datalen); WinSetDlgItemText(hwnd,IAD_DATA,p); free(p); } } else WinSetDlgItemText(hwnd,IAD_DATA,inidata->data); } PostMsg(hwnd,UM_SETDIR,MPFROMLONG(1L),MPVOID); } else PostMsg(hwnd,UM_SETDIR,MPVOID,MPVOID); { CHAR s[32]; *s = 0; WinQueryDlgItemText(hwnd,IAD_DATA,32,s); if(*s) WinEnableWindow(WinWindowFromID(hwnd,DID_OK),TRUE); } WinSendDlgItemMsg(hwnd,IAD_APPNAME,EM_QUERYCHANGED,MPVOID,MPVOID); WinSendDlgItemMsg(hwnd,IAD_KEYNAME,EM_QUERYCHANGED,MPVOID,MPVOID); WinSendDlgItemMsg(hwnd,IAD_DATA,EM_QUERYCHANGED,MPVOID,MPVOID); break; case UM_SETDIR: if(mp1) WinSetFocus(HWND_DESKTOP,WinWindowFromID(hwnd,IAD_DATA)); else WinSetFocus(HWND_DESKTOP,WinWindowFromID(hwnd,IAD_KEYNAME)); return 0; case UM_SETUP: saymsg(MB_ENTER | MB_ICONASTERISK, hwnd, GetPString(IDS_WARNINGTEXT), GetPString(IDS_INIAPPKEYEXISTSTEXT)); return 0; case WM_CONTROL: switch(SHORT2FROMMP(mp1)) { case EN_KILLFOCUS: inidata = INSTDATA(hwnd); if(inidata) { CHAR s[CCHMAXPATH],applname[CCHMAXPATH]; BOOL appchanged = FALSE,keychanged = FALSE; *applname = 0; WinQueryDlgItemText(hwnd,IAD_APPNAME,CCHMAXPATH,applname); bstrip(applname); if(*applname) { *s = 0; WinQueryDlgItemText(hwnd,IAD_KEYNAME,CCHMAXPATH,s); bstrip(s); if(*s) { appchanged = (BOOL)WinSendDlgItemMsg(hwnd,IAD_APPNAME, EM_QUERYCHANGED, MPVOID,MPVOID); keychanged = (BOOL)WinSendDlgItemMsg(hwnd,IAD_KEYNAME, EM_QUERYCHANGED, MPVOID,MPVOID); if(appchanged || keychanged) { ULONG size = 0L; if(PrfQueryProfileSize(inidata->hini,applname,s,&size)) PostMsg(hwnd,UM_SETUP,MPVOID,MPVOID); } *s = 0; WinQueryDlgItemText(hwnd,IAD_DATA,CCHMAXPATH,s); bstrip(s); WinEnableWindow(WinWindowFromID(hwnd,DID_OK),(*s != 0)); } else WinEnableWindow(WinWindowFromID(hwnd,DID_OK),FALSE); } else WinEnableWindow(WinWindowFromID(hwnd,DID_OK),FALSE); } break; } return 0; case WM_COMMAND: switch(SHORT1FROMMP(mp1)) { case DID_OK: { CHAR applname[CCHMAXPATH],keyname[CCHMAXPATH],data[CCHMAXPATH]; INT len; inidata = INSTDATA(hwnd); if(!inidata) { DosBeep(50,100); break; } inidata->isbinary = WinQueryButtonCheckstate(hwnd,IAD_ISBINARY); *applname = 0; WinQueryDlgItemText(hwnd,IAD_APPNAME,CCHMAXPATH,applname); bstrip(applname); if(*applname) { *keyname = 0; WinQueryDlgItemText(hwnd,IAD_KEYNAME,CCHMAXPATH,keyname); bstrip(keyname); if(*keyname) { *data = 0; WinQueryDlgItemText(hwnd,IAD_DATA,CCHMAXPATH,data); if(*data) { if(inidata->isbinary) len = literal(data); else len = strlen(data) + 1; PrfWriteProfileData(inidata->hini,applname,keyname,data, (ULONG)len); WinSendMsg(inidata->hwndIni,UM_RESCAN, MPFROMP(applname), MPFROMP(keyname)); WinDismissDlg(hwnd,1); } } } } break; case DID_CANCEL: WinDismissDlg(hwnd,0); break; case IDM_HELP: if(hwndHelp) WinSendMsg(hwndHelp,HM_DISPLAY_HELP, MPFROM2SHORT(HELP_INIADD,0), MPFROMSHORT(HM_RESOURCEID)); break; } return 0; } return WinDefDlgProc(hwnd,msg,mp1,mp2); } static ULONG flFrameFlags = FCF_SYSMENU | FCF_SIZEBORDER | FCF_ICON | FCF_TITLEBAR | FCF_MINMAX | FCF_MENU | FCF_ACCELTABLE | FCF_NOBYTEALIGN; HWND StartIniEditor (HWND hwnd,CHAR *fname,INT flags) { /* * create an ini editor window * bitmapped flags: * 2 = don't position window for non-desktop client * 4 = don't kill proc when closed */ HWND hwndFrame,hwndClient; HINI hINI; HAB useHab = (HAB)0; CHAR *filename = NULL; if(fExternalINIs || strcmp(realappname,FM3Str)) hwnd = HWND_DESKTOP; if(hwnd != HWND_DESKTOP) useHab = WinQueryAnchorBlock(hwnd); if(fname && *fname) { filename = strdup(fname); if(!filename) return (HWND)0; hINI = PrfOpenProfile(useHab,filename); if(!hINI) { free(filename); return (HWND)0; } else PrfCloseProfile(hINI); } if(ParentIsDesktop(hwnd,hwnd)) flFrameFlags |= FCF_TASKLIST; hwndFrame = WinCreateStdWindow(hwnd, 0, &flFrameFlags, GetPString(IDS_WCINIEDITOR), NullStr, fwsAnimate, FM3ModHandle, INI_FRAME, &hwndClient); if(hwndFrame) { WinSetWindowUShort(hwndFrame,QWS_ID,INI_FRAME); if(!ParentIsDesktop(hwndFrame,hwnd) && !(flags & 2)) { SWP swp; FillClient(hwnd,&swp,NULL,FALSE); WinSetWindowPos(hwndFrame,HWND_TOP,swp.x,swp.y,swp.cx,swp.cy, SWP_SIZE | SWP_MOVE); } else if(ParentIsDesktop(hwndFrame,hwnd)) { if(!WinRestoreWindowPos(FM2Str, "INIWindowPos", hwndFrame)) { ULONG fl = SWP_MOVE | SWP_SIZE; SWP swp; WinQueryTaskSizePos(WinQueryAnchorBlock(hwndFrame),0L,&swp); if(swp.fl & (SWP_MINIMIZE | SWP_HIDE)) fl = swp.fl; else if(swp.fl & SWP_ACTIVATE) fl |= SWP_ACTIVATE; WinSetWindowPos(hwndFrame,HWND_TOP,swp.x,swp.y,swp.cx,swp.cy,fl); } } PostMsg(hwndClient,UM_SELECT,MPVOID,MPVOID); PostMsg(hwndClient,UM_ACTION,MPVOID,MPVOID); if(!PostMsg(hwndClient,UM_LOADFILE,MPFROMP(((filename && *filename) ? filename : NULL)), MPVOID)) WinSendMsg(hwndClient,UM_LOADFILE,MPFROMP(((filename && *filename) ? filename : NULL)), MPVOID); if(flags & 4) PostMsg(hwndClient,UM_INITIALSIZE,MPVOID,MPVOID); } else if(filename) free(filename); return hwndFrame; } MRESULT EXPENTRY IniLBSubProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) { PFNWP oldproc = (PFNWP)WinQueryWindowPtr(hwnd,0); static HWND hwndPopup = (HWND)0; switch(msg) { case WM_SETFOCUS: if(mp2) PostMsg(WinQueryWindow(hwnd,QW_PARENT),UM_FOCUSME,mp1,mp2); break; case WM_MENUEND: if(hwndPopup == (HWND)mp2) { WinDestroyWindow(hwndPopup); hwndPopup = (HWND)0; } break; case WM_CONTEXTMENU: { USHORT id = WinQueryWindowUShort(hwnd,QWS_ID); switch(id) { case INI_APPLIST: id = INI_APPMENU; break; case INI_KEYLIST: id = INI_KEYMENU; break; default: id = 0; break; } if(id) { if(hwndPopup) WinDestroyWindow(hwndPopup); hwndPopup = WinLoadMenu(HWND_DESKTOP,FM3ModHandle,id); if(hwndPopup) WinPopupMenu(hwnd, WinQueryWindow(hwnd,QW_PARENT), hwndPopup, 8, 8, 0, PU_HCONSTRAIN | PU_VCONSTRAIN | PU_KEYBOARD | PU_MOUSEBUTTON1); } } break; case WM_BEGINDRAG: { PDRAGINFO pDInfo; DRAGITEM DItem; DRAGIMAGE DIcon; INIDATA *inidata; HPOINTER hptrINI; USHORT id; id = WinQueryWindowUShort(hwnd,QWS_ID); inidata = WinQueryWindowPtr(WinQueryWindow(hwnd,QW_PARENT),0); if(!inidata || !*inidata->ininame || !*inidata->applname || !inidata->keyname) { DosBeep(50,100); break; } hptrINI = WinLoadPointer(HWND_DESKTOP,FM3ModHandle,INI_FRAME); memset(&DItem,0,sizeof(DItem)); memset(&DIcon,0,sizeof(DIcon)); DIcon.cb = sizeof(DIcon); DIcon.cptl = 0; DIcon.hImage = hptrINI; DIcon.fl = DRG_ICON; DIcon.sizlStretch.cx = 32; DIcon.sizlStretch.cy = 32; DIcon.cxOffset = -16; DIcon.cyOffset = 0; DItem.hwndItem = hwnd; DItem.ulItemID = 0L; DItem.hstrType = DrgAddStrHandle(DRT_UNKNOWN); DItem.hstrRMF = DrgAddStrHandle(""); DItem.hstrContainerName = DrgAddStrHandle(inidata->ininame); DItem.hstrSourceName = DrgAddStrHandle(inidata->applname); if(id == INI_APPLIST) DItem.hstrTargetName = DrgAddStrHandle(NullStr); else DItem.hstrTargetName = DrgAddStrHandle(inidata->keyname); DItem.fsControl = 0; DItem.fsSupportedOps = DO_COPYABLE | DO_LINKABLE | DO_MOVEABLE; pDInfo = DrgAllocDraginfo(1L); DrgSetDragitem(pDInfo,&DItem,sizeof(DRAGITEM),0L); DrgDrag(hwnd,pDInfo,&DIcon,1L,VK_ENDDRAG,(PVOID)NULL); DrgFreeDraginfo(pDInfo); WinDestroyPointer(hptrINI); } break; case DM_DRAGOVER: { PDRAGINFO pDInfo = (PDRAGINFO)mp1; PDRAGITEM pDItem; /* Pointer to DRAGITEM */ DrgAccessDraginfo(pDInfo); /* Access DRAGINFO */ pDItem = DrgQueryDragitemPtr(pDInfo, /* Access DRAGITEM */ 0); /* Index to DRAGITEM */ if(DrgVerifyRMF(pDItem, /* Check valid rendering */ DRM_OS2FILE, /* mechanisms and data */ NULL)) { DrgFreeDraginfo(pDInfo); /* Free DRAGINFO */ return(MRFROM2SHORT(DOR_DROP, /* Return okay to drop */ DO_LINK)); } else if(DrgVerifyRMF(pDItem, DRM_FM2INIRECORD, DRF_FM2INI)) { if(WinQueryWindow(pDInfo->hwndSource,QW_PARENT) == WinQueryWindow(hwnd,QW_PARENT)) { DrgFreeDraginfo(pDInfo); return MRFROM2SHORT(DOR_NEVERDROP,0); } DrgFreeDraginfo(pDInfo); /* Free DRAGINFO */ return(MRFROM2SHORT(DOR_DROP, ((fCopyDefault) ? DO_COPY : DO_MOVE))); } DrgFreeDraginfo(pDInfo); /* Free DRAGINFO */ return MRFROM2SHORT(DOR_NEVERDROP,0); } case DM_DRAGLEAVE: break; case DM_DROP: { PDRAGINFO pDInfo = (PDRAGINFO)mp1; PDRAGITEM pDItem; /* Pointer to DRAGITEM */ ULONG numitems,curitem = 0L,len; USHORT action; CHAR szFrom[CCHMAXPATH + 2],szDir[CCHMAXPATH + 1], szTemp[CCHMAXPATH + 2]; FILESTATUS3 fsa; INIREC inirec; DrgAccessDraginfo(pDInfo); /* Access DRAGINFO */ numitems = DrgQueryDragitemCount(pDInfo); while(curitem < numitems) { pDItem = DrgQueryDragitemPtr(pDInfo, curitem); if(DrgVerifyRMF(pDItem,DRM_OS2FILE,NULL)) { if(pDItem->fsControl & DC_PREPARE) DrgSendTransferMsg(pDItem->hwndItem, DM_ENDCONVERSATION, MPFROMLONG(pDItem->ulItemID), MPFROMLONG(DMFL_TARGETFAIL)); else { if(FullDrgName(pDItem,szFrom,sizeof(szFrom)) && !DosQueryPathInfo(szFrom,FIL_STANDARD,&fsa, (ULONG)sizeof(FILESTATUS3))) WinSendMsg(WinQueryWindow(hwnd,QW_PARENT),WM_COMMAND, MPFROM2SHORT(IDM_COMPARE,0),MPFROMP(szFrom)); DrgSendTransferMsg(pDItem->hwndItem, DM_ENDCONVERSATION, MPFROMLONG(pDItem->ulItemID), MPFROMLONG(DMFL_TARGETFAIL)); } } else if(DrgVerifyRMF(pDItem, DRM_FM2INIRECORD, DRF_FM2INI)) { *szDir = *szFrom = *szTemp = 0; len = DrgQueryStrName(pDItem->hstrContainerName, CCHMAXPATH,szDir); szDir[len] = 0; len = DrgQueryStrName(pDItem->hstrSourceName, CCHMAXPATH,szFrom); szFrom[len] = 0; len = DrgQueryStrName(pDItem->hstrTargetName, CCHMAXPATH,szTemp); szTemp[len] = 0; switch(pDInfo->usOperation) { case DO_MOVE: action = IDM_MOVE; break; case DO_COPY: action = IDM_COPY; break; default: action = IDM_INFO; break; } memset(&inirec,0,sizeof(inirec)); inirec.size = sizeof(inirec); strcpy(inirec.filename2,szDir); strcpy(inirec.app,szFrom); strcpy(inirec.key,szTemp); inirec.action = action; inirec.hwndSource = WinQueryWindow(pDInfo->hwndSource,QW_PARENT); WinSendMsg(WinQueryWindow(hwnd,QW_PARENT),WM_COMMAND, MPFROM2SHORT(action,0),MPFROMP(&inirec)); DrgSendTransferMsg(pDItem->hwndItem, DM_ENDCONVERSATION, MPFROMLONG(pDItem->ulItemID), MPFROMLONG(DMFL_TARGETFAIL)); } curitem++; } DrgDeleteDraginfoStrHandles(pDInfo); DrgFreeDraginfo(pDInfo); } return 0; case WM_DESTROY: if(hwndPopup) WinDestroyWindow(hwndPopup); hwndPopup = (HWND)0; break; } if(oldproc) return oldproc(hwnd,msg,mp1,mp2); return WinDefWindowProc(hwnd,msg,mp1,mp2); } MRESULT EXPENTRY IniLBSubProc2 (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) { PFNWP oldproc = (PFNWP)WinQueryWindowPtr(hwnd,0); switch(msg) { case WM_SETFOCUS: if(mp2) PostMsg(WinQueryWindow(hwnd,QW_PARENT),UM_FOCUSME,mp1,mp2); break; } if(oldproc) return oldproc(hwnd,msg,mp1,mp2); return WinDefWindowProc(hwnd,msg,mp1,mp2); } MRESULT EXPENTRY IniProc (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) { INIDATA *inidata; SHORT sSel; switch(msg) { case WM_CREATE: inidata = malloc(sizeof(INIDATA)); if(!inidata) { PostMsg(hwnd,WM_CLOSE,MPVOID,MPVOID); break; } memset(inidata,0,sizeof(INIDATA)); inidata->size = sizeof(INIDATA); inidata->confirm = TRUE; inidata->currid = INI_APPLIST; inidata->hwndMenu = WinWindowFromID(WinQueryWindow(hwnd,QW_PARENT), FID_MENU); inidata->hwndIni = hwnd; WinSetWindowPtr(hwnd,0,(PVOID)inidata); WinCheckMenuItem(inidata->hwndMenu,INI_CONFIRM,inidata->confirm); WinCreateWindow(hwnd,WC_LISTBOX,(PSZ)NULL,WS_VISIBLE | LS_HORZSCROLL | LS_NOADJUSTPOS, 0,0,0,0,hwnd,HWND_TOP, INI_APPLIST,NULL,NULL); WinCreateWindow(hwnd,WC_LISTBOX,(PSZ)NULL,WS_VISIBLE | LS_HORZSCROLL | LS_NOADJUSTPOS, 0,0,0,0,hwnd,HWND_TOP, INI_KEYLIST,NULL,NULL); WinCreateWindow(hwnd,WC_LISTBOX,(PSZ)NULL,WS_VISIBLE | LS_HORZSCROLL | LS_NOADJUSTPOS, 0,0,0,0,hwnd,HWND_TOP, INI_DATALIST,NULL,NULL); WinCreateWindow(hwnd,WC_STATIC,(PSZ)NULL,WS_VISIBLE | SS_TEXT | DT_CENTER | DT_VCENTER,0,0,0,0,hwnd,HWND_TOP, INI_NUMAPPS,NULL,NULL); WinCreateWindow(hwnd,WC_STATIC,(PSZ)NULL,WS_VISIBLE | SS_TEXT | DT_CENTER | DT_VCENTER,0,0,0,0,hwnd,HWND_TOP, INI_NUMKEYS,NULL,NULL); WinCreateWindow(hwnd,WC_STATIC,(PSZ)NULL,WS_VISIBLE | SS_TEXT | DT_CENTER | DT_VCENTER,0,0,0,0,hwnd,HWND_TOP, INI_NUMDATA,NULL,NULL); WinCreateWindow(hwnd, WC_STATIC, GetPString(IDS_APPLICATIONSTITLETEXT), WS_VISIBLE | SS_TEXT | DT_CENTER | DT_VCENTER, 0, 0, 0, 0, hwnd, HWND_TOP, INI_APPHDR, NULL, NULL); WinCreateWindow(hwnd, WC_STATIC, GetPString(IDS_KEYWORDSTITLETEXT), WS_VISIBLE | SS_TEXT | DT_CENTER | DT_VCENTER, 0, 0, 0, 0, hwnd, HWND_TOP, INI_KEYHDR, NULL, NULL); WinCreateWindow(hwnd, WC_STATIC, GetPString(IDS_DATABYTESTITLETEXT), WS_VISIBLE | SS_TEXT | DT_CENTER | DT_VCENTER, 0, 0, 0, 0, hwnd, HWND_TOP, INI_DATAHDR, NULL, NULL); inidata->hwndApp = WinWindowFromID(hwnd,INI_APPLIST); inidata->hwndKey = WinWindowFromID(hwnd,INI_KEYLIST); inidata->hwndData = WinWindowFromID(hwnd,INI_DATALIST); { PFNWP oldproc; oldproc = WinSubclassWindow(WinWindowFromID(hwnd,INI_APPLIST), (PFNWP)IniLBSubProc); if(oldproc) WinSetWindowPtr(WinWindowFromID(hwnd,INI_APPLIST), 0, (PVOID)oldproc); oldproc = WinSubclassWindow(WinWindowFromID(hwnd,INI_KEYLIST), (PFNWP)IniLBSubProc); if(oldproc) WinSetWindowPtr(WinWindowFromID(hwnd,INI_KEYLIST), 0, (PVOID)oldproc); oldproc = WinSubclassWindow(WinWindowFromID(hwnd,INI_DATALIST), (PFNWP)IniLBSubProc2); if(oldproc) WinSetWindowPtr(WinWindowFromID(hwnd,INI_DATALIST), 0, (PVOID)oldproc); } break; case UM_FOCUSME: case WM_SETFOCUS: if(mp2) { if(hwndMain && fAutoView) PostMsg(hwndMain, UM_LOADFILE, MPVOID, MPVOID); inidata = WinQueryWindowPtr(hwnd,0); if(inidata && hwndStatus) { if(*inidata->ininame) { WinSetWindowText(hwndStatus, GetPString(IDS_INTERNALINIVIEWERTEXT)); if(hwndStatus2) WinSetWindowText(hwndStatus2, inidata->ininame); } else PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID); } } if(msg == WM_SETFOCUS) break; return 0; case UM_SELECT: WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd,INI_APPLIST)); break; case UM_ACTION: SetPresParams(WinWindowFromID(hwnd,INI_APPHDR), &RGBGREY, &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT)); SetPresParams(WinWindowFromID(hwnd,INI_KEYHDR), &RGBGREY, &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT)); SetPresParams(WinWindowFromID(hwnd,INI_DATAHDR), &RGBGREY, &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT)); SetPresParams(WinWindowFromID(hwnd,INI_NUMAPPS), &RGBGREY, &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT)); SetPresParams(WinWindowFromID(hwnd,INI_NUMKEYS), &RGBGREY, &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT)); SetPresParams(WinWindowFromID(hwnd,INI_NUMDATA), &RGBGREY, &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT)); if(!WinSetPresParam(WinWindowFromID(hwnd,INI_DATALIST), PP_FONTNAMESIZE, (ULONG)strlen(GetPString(IDS_5SYSTEMVIOTEXT)) + 1, (PVOID)GetPString(IDS_5SYSTEMVIOTEXT))) WinSetPresParam(WinWindowFromID(hwnd,INI_DATALIST), PP_FONTNAMESIZE, (ULONG)strlen(GetPString(IDS_10SYSTEMMONOTEXT)) + 1, (PVOID)GetPString(IDS_10SYSTEMMONOTEXT)); RestorePresParams(hwnd, "IniUtil"); return 0; case WM_PRESPARAMCHANGED: PresParamChanged(hwnd, "IniUtil", mp1, mp2); break; case UM_RESCAN: inidata = INSTDATA(hwnd); if(inidata) { if(mp1) { SHORT numitems,sSelect; BOOL inprofile; ULONG size = 0L; numitems = (SHORT)WinSendDlgItemMsg(hwnd, INI_APPLIST, LM_QUERYITEMCOUNT, MPVOID, MPVOID); if(!numitems) { PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH,0), MPVOID); return 0; } size = 0L; if(PrfQueryProfileSize(inidata->hini, (CHAR *)mp1, NULL, (PULONG)&size) && size) inprofile = TRUE; else inprofile = FALSE; sSelect = (SHORT)WinSendDlgItemMsg(hwnd, INI_APPLIST, LM_SEARCHSTRING, MPFROM2SHORT(LSS_CASESENSITIVE, LIT_FIRST), MPFROMP((CHAR *)mp1)); if(sSelect >= 0) { if(!inprofile) WinSendDlgItemMsg(hwnd, INI_APPLIST, LM_DELETEITEM, MPFROMSHORT(sSelect), MPVOID); else if(!strcmp(inidata->applname,(CHAR *)mp1)) PostMsg(hwnd, WM_CONTROL, MPFROM2SHORT(INI_APPLIST,LN_SELECT), MPFROMLONG(WinWindowFromID(hwnd,INI_APPLIST))); } else if(inprofile) WinSendDlgItemMsg(hwnd, INI_APPLIST, LM_INSERTITEM, MPFROM2SHORT(LIT_SORTASCENDING,0), MPFROMP((CHAR *)mp1)); if(mp2 && inidata->applname) { if(!EnumKeyNames(WinWindowFromID(hwnd,INI_KEYLIST), inidata->hini,inidata->applname)) PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH,0), MPVOID); } } } return 0; case UM_INITIALSIZE: /* kludge */ inidata = WinQueryWindowPtr(hwnd,0); if(inidata) inidata->dontclose = TRUE; return 0; case WM_SIZE: { SHORT cx = SHORT1FROMMP(mp2); SHORT cy = SHORT2FROMMP(mp2); WinSetWindowPos(WinWindowFromID(hwnd,INI_APPHDR),HWND_TOP, 2,cy - 22,(cx / 4) - 4,20, SWP_MOVE | SWP_SIZE); WinSetWindowPos(WinWindowFromID(hwnd,INI_NUMAPPS),HWND_TOP, (cx / 4) + 2,cy - 22,(cx / 4) - 4,20, SWP_MOVE | SWP_SIZE); WinSetWindowPos(WinWindowFromID(hwnd,INI_APPLIST),HWND_TOP, 2,(cy / 2) + 2,(cx / 2) - 4,(cy / 2) - 28, SWP_MOVE | SWP_SIZE); WinSetWindowPos(WinWindowFromID(hwnd,INI_KEYHDR),HWND_TOP, (cx / 2) + 2,cy - 22,(cx / 4) - 4,20, SWP_MOVE | SWP_SIZE); WinSetWindowPos(WinWindowFromID(hwnd,INI_NUMKEYS),HWND_TOP, (cx - (cx / 4)) + 2,cy - 22,(cx / 4) - 4,20, SWP_MOVE | SWP_SIZE); WinSetWindowPos(WinWindowFromID(hwnd,INI_KEYLIST),HWND_TOP, (cx / 2) + 2,(cy / 2) + 2,(cx / 2) - 4,(cy / 2) - 28, SWP_MOVE | SWP_SIZE); WinSetWindowPos(WinWindowFromID(hwnd,INI_DATAHDR),HWND_TOP, 2,(cy / 2) - 22,(cx / 2) - 4,20, SWP_MOVE | SWP_SIZE); WinSetWindowPos(WinWindowFromID(hwnd,INI_NUMDATA),HWND_TOP, (cx / 2) + 2,(cy / 2) - 22,(cx / 2) - 4,20, SWP_MOVE | SWP_SIZE); WinSetWindowPos(WinWindowFromID(hwnd,INI_DATALIST),HWND_TOP, 2,2,cx - 4,(cy / 2) - 28, SWP_MOVE | SWP_SIZE); } break; case UM_LOADFILE: /* load initial file */ inidata = WinQueryWindowPtr(hwnd,0); if(inidata) { if(mp1) { strcpy(inidata->ininame,(CHAR *)mp1); inidata->hini = PrfOpenProfile(WinQueryAnchorBlock(hwnd), inidata->ininame); free(mp1); } else inidata->hini = HINI_USERPROFILE; if(!inidata->hini) { PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID); break; } WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID); WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID); WinSetWindowPos(WinQueryWindow(hwnd,QW_PARENT), HWND_TOP, 0, 0, 0, 0, SWP_SHOW | SWP_ACTIVATE | SWP_ZORDER); EnumAppNames(WinWindowFromID(hwnd,INI_APPLIST), inidata->hini); } else PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID); return 0; case WM_ERASEBACKGROUND: WinFillRect((HPS)mp1, (PRECTL)mp2, 0x00d0d0d0); return 0; case WM_PAINT: { HPS hps; RECTL rcl; hps = WinBeginPaint(hwnd,(HPS)0,NULL); if(hps) { WinQueryWindowRect(hwnd,&rcl); WinFillRect(hps, &rcl, CLR_PALEGRAY); WinEndPaint(hps); /* * tell status window to paint its box */ PaintRecessedWindow(WinWindowFromID(hwnd,INI_APPHDR), (HPS)0, FALSE, FALSE); PaintRecessedWindow(WinWindowFromID(hwnd,INI_KEYHDR), (HPS)0, FALSE, FALSE); PaintRecessedWindow(WinWindowFromID(hwnd,INI_DATAHDR), (HPS)0, FALSE, FALSE); PaintRecessedWindow(WinWindowFromID(hwnd,INI_NUMAPPS), (HPS)0, FALSE, FALSE); PaintRecessedWindow(WinWindowFromID(hwnd,INI_NUMKEYS), (HPS)0, FALSE, FALSE); PaintRecessedWindow(WinWindowFromID(hwnd,INI_NUMDATA), (HPS)0, FALSE, FALSE); inidata = INSTDATA(hwnd); if(inidata && inidata->hwndCurrent) BoxWindow(inidata->hwndCurrent,(HPS)0,CLR_RED); } } break; case WM_CONTROL: switch(SHORT1FROMMP(mp1)) { case INI_KEYLIST: case INI_APPLIST: case INI_DATALIST: switch(SHORT2FROMMP(mp1)) { case LN_SETFOCUS: inidata = INSTDATA(hwnd); if(inidata) { if(inidata->hwndCurrent) BoxWindow(inidata->hwndCurrent, (HPS)0, CLR_PALEGRAY); inidata->hwndCurrent = WinWindowFromID(hwnd, SHORT1FROMMP(mp1)); BoxWindow(WinWindowFromID(hwnd, SHORT1FROMMP(mp1)), (HPS)0, CLR_RED); } break; case LN_ENTER: case LN_SELECT: if(SHORT1FROMMP(mp1) == INI_DATALIST) break; { CHAR applname[CCHMAXPATH],keyname[CCHMAXPATH]; SHORT sSelect; inidata = INSTDATA(hwnd); if(!inidata || !inidata->hini) break; WinSendMsg(hwnd,UM_SETDIR,MPVOID,MPVOID); inidata->keyindex = inidata->appindex = 0; *applname = *keyname = *inidata->applname = *inidata->keyname = 0; sSelect = (SHORT)WinSendDlgItemMsg(hwnd, INI_APPLIST, LM_QUERYSELECTION, MPFROM2SHORT(LIT_FIRST,0), MPVOID); if(sSelect < 0) break; inidata->appindex = sSelect; WinSendDlgItemMsg(hwnd, INI_APPLIST, LM_QUERYITEMTEXT, MPFROM2SHORT(sSelect,CCHMAXPATH - 1), MPFROMP(applname)); if(SHORT1FROMMP(mp1) == INI_APPLIST) { if(!EnumKeyNames(WinWindowFromID(hwnd,INI_KEYLIST), inidata->hini, applname)) PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH,0), MPVOID); } else { sSelect = (SHORT)WinSendDlgItemMsg(hwnd,INI_KEYLIST, LM_QUERYSELECTION, MPFROM2SHORT(LIT_FIRST,0), MPVOID); if(sSelect < 0) break; inidata->keyindex = sSelect; WinSendDlgItemMsg(hwnd, INI_KEYLIST, LM_QUERYITEMTEXT, MPFROM2SHORT(sSelect,CCHMAXPATH - 1), MPFROMP(keyname)); if(!*keyname || !*applname) break; strcpy(inidata->keyname,keyname); strcpy(inidata->applname,applname); if(inidata->data) free(inidata->data); inidata->data = GetKeyData(WinWindowFromID(hwnd, INI_DATALIST), inidata->hini, applname, keyname, &inidata->datalen); if(!inidata->data) PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH,0), MPVOID); } } break; } break; } return 0; case UM_SETDIR: { SHORT num; CHAR s[81]; num = (SHORT)WinSendDlgItemMsg(hwnd, INI_APPLIST, LM_QUERYITEMCOUNT, MPVOID, MPVOID); sprintf(s,"%d",num); WinSetDlgItemText(hwnd,INI_NUMAPPS,s); num = (SHORT)WinSendDlgItemMsg(hwnd, INI_KEYLIST, LM_QUERYITEMCOUNT, MPVOID, MPVOID); sprintf(s,"%d",num); WinSetDlgItemText(hwnd, INI_NUMKEYS, s); WinSetDlgItemText(hwnd, INI_NUMDATA, "0"); WinSendDlgItemMsg(hwnd, INI_DATALIST, LM_DELETEALL, MPVOID, MPVOID); inidata = WinQueryWindowPtr(hwnd,0); } return 0; case UM_SETUP: inidata = INSTDATA(hwnd); if(inidata) { PRFPROFILE prfp; CHAR sysini[CCHMAXPATH + 81]; CHAR userini[CCHMAXPATH]; memset(&prfp,0,sizeof(PRFPROFILE)); prfp.cchUserName = CCHMAXPATH; prfp.cchSysName = CCHMAXPATH; prfp.pszUserName = (PSZ)userini; prfp.pszSysName = (PSZ)sysini; if(PrfQueryProfile(WinQueryAnchorBlock(hwnd),&prfp)) { if(inidata->hini == HINI_SYSTEMPROFILE) strcpy(inidata->ininame,sysini); else if(inidata->hini == HINI_USERPROFILE) strcpy(inidata->ininame,userini); sprintf(sysini, GetPString(IDS_INITITLETEXT), inidata->ininame); WinSetWindowText(WinQueryWindow(hwnd,QW_PARENT), sysini); if(WinQueryWindow(hwnd,QW_PARENT) == WinQueryActiveWindow(WinQueryWindow(WinQueryWindow(hwnd,QW_PARENT), QW_PARENT))) { if(hwndStatus) WinSetWindowText(hwndStatus, GetPString(IDS_INTERNALINIVIEWERTEXT)); if(hwndStatus2) WinSetWindowText(hwndStatus2, inidata->ininame); } } else WinSetWindowText(WinQueryWindow(hwnd,QW_PARENT), GetPString(IDS_INIQUERYPRFFAILEDTEXT)); } else PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID); return 0; case WM_CHAR: if(!(SHORT1FROMMP(mp1) & KC_KEYUP)) { if(SHORT1FROMMP(mp1) & KC_VIRTUALKEY) { switch(SHORT2FROMMP(mp2)) { case VK_DELETE: inidata = INSTDATA(hwnd); if(inidata) { SHORT cmd; cmd = (inidata->hwndCurrent && WinQueryWindowUShort(inidata->hwndCurrent,QWS_ID) == INI_APPLIST) ? INI_DELETEAPP : INI_DELETEKEY; PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(cmd,0), MPVOID); } break; } } } break; case WM_COMMAND: switch(SHORT1FROMMP(mp1)) { case IDM_FINDNEXT: case IDM_FINDFIRST: inidata = INSTDATA(hwnd); if(inidata) { if(inidata->hwndCurrent) { STRINGINPARMS sip; static CHAR tofind[258] = ""; SHORT x,z; if(SHORT1FROMMP(mp1) == IDM_FINDFIRST || !*tofind) { z = LIT_FIRST; memset(&sip,0,sizeof(sip)); sip.help = GetPString(IDS_INISEARCHHELPTEXT); sip.prompt = GetPString(IDS_INISEARCHPROMPTTEXT); sip.inputlen = 257; sip.ret = tofind; sip.title = GetPString(IDS_INISEARCHTITLETEXT); if(WinDlgBox(HWND_DESKTOP, hwnd, InputDlgProc, FM3ModHandle, STR_FRAME, &sip)) { rstrip(tofind); if (!*tofind) { DosBeep(50,100); break; } } else break; } else { z = (SHORT)WinSendMsg(inidata->hwndCurrent, LM_QUERYSELECTION, MPFROM2SHORT(LIT_CURSOR,0), MPVOID); if(z < 0) z = LIT_FIRST; } x = (SHORT)WinSendMsg(inidata->hwndCurrent, LM_SEARCHSTRING, MPFROM2SHORT(LSS_SUBSTRING,z), MPFROMP(tofind)); if(x >= 0 && x > z) { WinSendMsg(inidata->hwndCurrent, LM_SETTOPINDEX, MPFROM2SHORT(x,0), MPVOID); WinSendMsg(inidata->hwndCurrent, LM_SELECTITEM, MPFROM2SHORT(x,0), MPFROM2SHORT(TRUE,0)); } else DosBeep(250,100); } } break; case IDM_FILTER: inidata = INSTDATA(hwnd); if(inidata) { SHORT numitems; numitems = (SHORT)WinSendDlgItemMsg(hwnd, INI_APPLIST, LM_QUERYITEMCOUNT, MPVOID, MPVOID); if(numitems) WinDlgBox(HWND_DESKTOP, hwnd, FilterIniProc, FM3ModHandle, IAF_FRAME, (PVOID)inidata); else DosBeep(50,100); } break; case IDM_COPY: case IDM_INFO: case IDM_MOVE: inidata = WinQueryWindowPtr(hwnd,0); if(!inidata || !*inidata->ininame) break; if(mp2) { INIREC *inirec; inirec = malloc(sizeof(INIREC)); if(inirec) { memset(inirec,0,sizeof(INIREC)); *inirec = *(INIREC *)mp2; inirec->hwndDlg = hwnd; inirec->confirm = inidata->confirm; strcpy(inirec->filename1,inidata->ininame); if(_beginthread(CopyIni, NULL, 122880, (PVOID)inirec) == -1) { DosBeep(250,100); free(inirec); } } else DosBeep(50,100); } break; case IDM_COMPARE: inidata = WinQueryWindowPtr(hwnd,0); if(!inidata || !*inidata->ininame) break; if(mp2) { INIREC *inirec; inirec = malloc(sizeof(INIREC)); if(inirec) { strcpy(inirec->filename2,(CHAR *)(mp2)); strcpy(inirec->filename1,inidata->ininame); inirec->hwndDlg = hwnd; if(_beginthread(CompareIni, NULL, 122880, (PVOID)inirec) == -1) { DosBeep(250,100); free(inirec); } } } break; case INI_COPYAPP: case INI_COPYKEY: case INI_RENAMEAPP: case INI_RENAMEKEY: inidata = WinQueryWindowPtr(hwnd,0); if(!inidata || !*inidata->ininame || !*inidata->applname || (!*inidata->keyname && (SHORT1FROMMP(mp1) == INI_RENAMEKEY || SHORT1FROMMP(mp1) == INI_COPYKEY))) break; { INIREC *inirec; inirec = malloc(sizeof(INIREC)); if(inirec) { memset(inirec,0,sizeof(INIREC)); inirec->size = sizeof(INIREC); inirec->hwndDlg = hwnd; inirec->confirm = inidata->confirm; inirec->action = (SHORT1FROMMP(mp1) == INI_COPYAPP || SHORT1FROMMP(mp1) == INI_COPYKEY) ? IDM_COPY : IDM_MOVE; strcpy(inirec->filename1,inidata->ininame); strcpy(inirec->filename2,inidata->ininame); if(SHORT1FROMMP(mp1) == INI_COPYKEY || SHORT1FROMMP(mp1) == INI_RENAMEKEY) strcpy(inirec->key,inidata->keyname); strcpy(inirec->app,inidata->applname); if(!WinDlgBox(HWND_DESKTOP, hwnd, IntraIniProc, FM3ModHandle, INII_FRAME, (PVOID)inirec)) { free(inirec); break; } if(_beginthread(CopyIni, NULL, 122880, (PVOID)inirec) == -1) { DosBeep(250,100); free(inirec); } } else DosBeep(50,100); } break; case INI_BACKUPINI: inidata = INSTDATA(hwnd); if(inidata && *inidata->ininame) { CHAR filename[CCHMAXPATH],*p; strcpy(filename,inidata->ininame); p = filename; while(*p) { if(*p == '/') *p = '\\'; p++; } p = strrchr(filename,'\\'); if(p) { p++; *p = 0; } else *filename = 0; strcat(filename,"*.INI"); if(export_filename(hwnd,filename,TRUE)) { PPRFPROFILE prfp; prfp = malloc(sizeof(PRFPROFILE)); if(prfp) { memset(prfp,0,sizeof(PRFPROFILE)); prfp->pszUserName = strdup(inidata->ininame); if(prfp->pszUserName) { prfp->cchUserName = strlen(prfp->pszUserName); prfp->pszSysName = strdup(filename); if(prfp->pszSysName) { prfp->cchSysName = strlen(prfp->pszSysName); if(_beginthread(BackupIni, NULL, 122880, (PVOID)prfp) == -1) { free(prfp->pszSysName); free(prfp->pszUserName); free(prfp); DosBeep(250,100); } else DosSleep(250L); } else { free(prfp->pszUserName); free(prfp); DosBeep(250,100); } } else { free(prfp); DosBeep(250,100); } } } } break; case INI_CHANGEINI: inidata = INSTDATA(hwnd); if(inidata) { if(WinDlgBox(HWND_DESKTOP, hwnd, ChangeIniProc, FM3ModHandle, INIR_FRAME, (PVOID)inidata->ininame)) { WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID); WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID); EnumAppNames(WinWindowFromID(hwnd,INI_APPLIST), inidata->hini); } } break; case INI_SWAPINI: inidata = INSTDATA(hwnd); if(inidata) { if(WinDlgBox(HWND_DESKTOP, hwnd, SwapIniProc, FM3ModHandle, INIR_FRAME, (PVOID)inidata->ininame)) { WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID); WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID); EnumAppNames(WinWindowFromID(hwnd,INI_APPLIST), inidata->hini); } } break; case IDM_NEXTWINDOW: inidata = INSTDATA(hwnd); if(inidata) { inidata->currid++; if(inidata->currid > INI_DATALIST) inidata->currid = INI_APPLIST; } WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd,inidata->currid)); break; case IDM_PREVWINDOW: inidata = INSTDATA(hwnd); if(inidata) { inidata->currid--; if(inidata->currid < INI_APPLIST) inidata->currid = INI_DATALIST; } WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, inidata->currid)); break; case INI_CONFIRM: inidata = INSTDATA(hwnd); if(inidata) { inidata->confirm = (inidata->confirm) ? FALSE : TRUE; WinCheckMenuItem(inidata->hwndMenu, INI_CONFIRM, inidata->confirm); } break; case INI_EDITENTRY: case INI_ADDENTRY: inidata = INSTDATA(hwnd); if(inidata) { inidata->edit = (SHORT1FROMMP(mp1) == INI_EDITENTRY); WinDlgBox(HWND_DESKTOP, hwnd, AddIniProc, FM3ModHandle, IAD_FRAME, (PVOID)inidata); } break; case INI_OTHERPROFILE: inidata = INSTDATA(hwnd); if(inidata) { CHAR filename[CCHMAXPATH + 81],*p; FILESTATUS3 fsa; HINI hINI; strcpy(filename,inidata->ininame); p = filename; while(*p) { if(*p == '/') *p = '\\'; p++; } p = strrchr(filename,'\\'); if(p) { p++; *p = 0; } else *filename = 0; strcat(filename,"*.INI"); if(insert_filename(hwnd, filename, TRUE, TRUE) && *filename && !DosQueryPathInfo(filename, FIL_STANDARD, &fsa, sizeof(fsa))) { hINI = PrfOpenProfile(WinQueryAnchorBlock(hwnd), filename); if(hINI) { if(*inidata->ininame) { if(inidata->hini) PrfCloseProfile(inidata->hini); *inidata->ininame = 0; } inidata->hini = hINI; strcpy(inidata->ininame,filename); WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID); WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID); EnumAppNames(WinWindowFromID(hwnd,INI_APPLIST), inidata->hini); } else General_Error(WinQueryAnchorBlock(hwnd), hwnd, __FILE__, __LINE__, GetPString(IDS_INICANTOPENINITEXT), filename); } } break; case INI_USERPROFILE: inidata = INSTDATA(hwnd); if(inidata) { if(inidata->hini && inidata->hini != HINI_SYSTEMPROFILE && inidata->hini != HINI_USERPROFILE) PrfCloseProfile(inidata->hini); *inidata->ininame = 0; inidata->hini = HINI_USERPROFILE; WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID); WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID); EnumAppNames(WinWindowFromID(hwnd,INI_APPLIST), inidata->hini); } break; case INI_SYSTEMPROFILE: inidata = INSTDATA(hwnd); if(inidata) { if(inidata->hini && inidata->hini != HINI_SYSTEMPROFILE && inidata->hini != HINI_USERPROFILE) PrfCloseProfile(inidata->hini); *inidata->ininame = 0; inidata->hini = HINI_SYSTEMPROFILE; WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID); WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID); EnumAppNames(WinWindowFromID(hwnd,INI_APPLIST), inidata->hini); } break; case INI_REFRESH: inidata = INSTDATA(hwnd); if(inidata) { WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID); EnumAppNames(WinWindowFromID(hwnd,INI_APPLIST), inidata->hini); } break; case INI_DELETEKEY: inidata = INSTDATA(hwnd); if(inidata && *inidata->applname && *inidata->keyname) { SHORT keyindex = inidata->keyindex; if(inidata->confirm && saymsg(MB_YESNO, hwnd, GetPString(IDS_CONFIRMTEXT), GetPString(IDS_INIDELETEKEYTEXT), inidata->keyname) == MBID_NO) break; PrfWriteProfileData(inidata->hini, inidata->applname, inidata->keyname, NULL, 0L); *inidata->keyname = 0; WinSendDlgItemMsg(hwnd, INI_KEYLIST, LM_DELETEITEM, MPFROM2SHORT(keyindex,0), MPVOID); WinSendMsg(hwnd,UM_SETDIR,MPVOID,MPVOID); sSel = (SHORT)WinSendDlgItemMsg(hwnd, INI_KEYLIST, LM_QUERYITEMCOUNT, MPVOID, MPVOID); if(!sSel) WinSendMsg(hwnd, INI_DELETEAPP, MPVOID, MPVOID); else { sSel = min(keyindex,sSel - 1); WinSendDlgItemMsg(hwnd, INI_KEYLIST, LM_SELECTITEM, MPFROMSHORT(sSel), MPFROMSHORT(TRUE)); } } break; case INI_DELETEAPP: inidata = INSTDATA(hwnd); if(inidata && *inidata->applname) { SHORT appindex = inidata->appindex; if(inidata->confirm && saymsg(MB_YESNO, hwnd, GetPString(IDS_CONFIRMTEXT), GetPString(IDS_INIDELETEAPPTEXT), inidata->applname) == MBID_NO) break; PrfWriteProfileData(inidata->hini, inidata->applname, NULL, NULL, 0L); *inidata->applname = *inidata->keyname = 0; WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID); WinSendDlgItemMsg(hwnd, INI_KEYLIST, LM_DELETEALL, MPVOID, MPVOID); WinSendDlgItemMsg(hwnd, INI_APPLIST, LM_DELETEITEM, MPFROM2SHORT(appindex,0), MPVOID); WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID); sSel = (SHORT)WinSendDlgItemMsg(hwnd, INI_APPLIST, LM_QUERYITEMCOUNT, MPVOID, MPVOID); if(sSel) { sSel = min(appindex,sSel - 1); WinSendDlgItemMsg(hwnd, INI_APPLIST, LM_SELECTITEM, MPFROMSHORT(sSel), MPFROMSHORT(TRUE)); } } break; case DID_OK: case DID_CANCEL: PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID); break; case IDM_HELP: if(hwndHelp) WinSendMsg(hwndHelp, HM_DISPLAY_HELP, MPFROM2SHORT(HELP_INI,0), MPFROMSHORT(HM_RESOURCEID)); break; case IDM_ABOUT: saymsg(MB_ENTER | MB_ICONASTERISK, hwnd, GetPString(IDS_VIEWABOUTTITLETEXT), GetPString(IDS_INIABOUTTEXT)); break; } return 0; case WM_CLOSE: if(ParentIsDesktop(WinQueryWindow(hwnd,QW_PARENT),(HWND)0)) { SWP swp; WinQueryWindowPos(WinQueryWindow(hwnd,QW_PARENT),&swp); if(!(swp.fl & (SWP_HIDE | SWP_MINIMIZE))) WinStoreWindowPos(FM2Str, "INIWindowPos", WinQueryWindow(hwnd,QW_PARENT)); inidata = WinQueryWindowPtr(hwnd,0); } WinDestroyWindow(WinQueryWindow(hwnd,QW_PARENT)); return 0; case WM_DESTROY: inidata = INSTDATA(hwnd); { BOOL dontclose = FALSE; if(inidata) { dontclose = inidata->dontclose; if(inidata->hini) PrfCloseProfile(inidata->hini); if(inidata->data) free(inidata->data); if(inidata->hwndPopup) WinDestroyWindow(inidata->hwndPopup); free(inidata); } if(!dontclose && ParentIsDesktop(hwnd,WinQueryWindow(WinQueryWindow(hwnd, QW_PARENT), QW_PARENT))) { if(!PostMsg((HWND)0, WM_QUIT, MPVOID, MPVOID)) DosExit(EXIT_PROCESS,1); } } break; } return WinDefWindowProc(hwnd,msg,mp1,mp2); }