|
|
1.1 ! root 1: #include "pwalk.h" ! 2: #include <commdlg.h> ! 3: ! 4: ! 5: /* global file name variables */ ! 6: char szExeFilterSpec[128] = "Executable Files (*.EXE)\0*.EXE\0"; ! 7: ! 8: ! 9: /* call the OpenFile common dialog to get a filename */ ! 10: BOOL WINAPI GetFileName ( ! 11: HWND hWnd, ! 12: char *lpszFilePath, ! 13: char *lpszExt) ! 14: { ! 15: OPENFILENAME ofn; ! 16: char szFileOpen[25]; ! 17: char szExt[10]; ! 18: char szTitle[MAX_PATH]; ! 19: ! 20: *szTitle = 0; ! 21: ! 22: if (lpszExt && *lpszExt) ! 23: strcpy (szExt, lpszExt); ! 24: else ! 25: LoadString ((HANDLE)GetModuleHandle (NULL), ! 26: IDS_EXEFILEEXT, ! 27: szExt, ! 28: sizeof (szExt)); ! 29: ! 30: LoadString ((HANDLE)GetModuleHandle (NULL), ! 31: IDS_FILEOPENTITLE, ! 32: szFileOpen, ! 33: sizeof (szFileOpen)); ! 34: ! 35: ofn.lStructSize = sizeof (OPENFILENAME); ! 36: ofn.hwndOwner = NULL; ! 37: ofn.lpstrFilter = szExeFilterSpec; ! 38: ofn.lpstrCustomFilter = NULL; ! 39: ofn.nMaxCustFilter = 0; ! 40: ofn.nFilterIndex = 0; ! 41: ofn.lpstrFile = lpszFilePath; ! 42: ofn.nMaxFile = MAX_PATH; ! 43: ofn.lpstrInitialDir = NULL; ! 44: ofn.lpstrFileTitle = szTitle; ! 45: ofn.nMaxFileTitle = MAX_PATH; ! 46: ofn.lpstrTitle = szFileOpen; ! 47: ofn.lpstrDefExt = szExt; ! 48: ofn.Flags = OFN_FILEMUSTEXIST; ! 49: ! 50: /* call common open dialog and return result */ ! 51: return (GetOpenFileName ((LPOPENFILENAME)&ofn)); ! 52: } ! 53: ! 54: ! 55: ! 56: /* invokes the saveas common dialog to retrieve a file name */ ! 57: /* function retrieves the filename from the path */ ! 58: void WINAPI GetFileFromPath ( ! 59: char *lpszFullPath, ! 60: char *lpszFile) ! 61: { ! 62: char *lpPtr = lpszFullPath + strlen (lpszFullPath); ! 63: ! 64: /* file is at end of path, so search backwards to first \ or : char */ ! 65: while (lpPtr > lpszFullPath) ! 66: { ! 67: if (*lpPtr == '\\' || ! 68: *lpPtr == ':') ! 69: { ! 70: lpPtr++; ! 71: break; ! 72: } ! 73: lpPtr--; ! 74: } ! 75: ! 76: /* return filename if found, or full path passed in */ ! 77: strcpy (lpszFile, lpPtr); ! 78: } ! 79: ! 80: ! 81: ! 82: ! 83: /* validate filename as executable image */ ! 84: BOOL WINAPI IsValidFile ( ! 85: char *lpszFilename) ! 86: { ! 87: OFSTRUCT of; ! 88: int nLen; ! 89: char *pStr; ! 90: ! 91: /* validate filename pointer */ ! 92: if (lpszFilename == NULL || ! 93: !*lpszFilename) ! 94: return FALSE; ! 95: ! 96: /* open the file for existance */ ! 97: if (OpenFile (lpszFilename, &of, OF_EXIST) == -1) ! 98: /* fail validation */ ! 99: return FALSE; ! 100: ! 101: /* test the extension is .EXE */ ! 102: nLen = strlen (lpszFilename); ! 103: pStr = lpszFilename + nLen - 4; ! 104: if (!stricmp (pStr, ".EXE")) ! 105: /* pass validation */ ! 106: return TRUE; ! 107: ! 108: /* fail validation */ ! 109: return FALSE; ! 110: } ! 111: ! 112: ! 113: ! 114: ! 115: /* get win32 command line parameters */ ! 116: BOOL WINAPI GetCmdLine( ! 117: char *lpStr, ! 118: char *lpszCmdLine, ! 119: BOOL *bBkgnd) ! 120: { ! 121: if (*lpStr) ! 122: { ! 123: /* skip application name which precedes parameters */ ! 124: while (*lpStr != ' ' && *lpStr != 0) ! 125: lpStr++; ! 126: ! 127: /* skip spaces */ ! 128: while (*lpStr == ' ' && *lpStr != 0) ! 129: lpStr++; ! 130: ! 131: /* indeed command line parameter(s) present */ ! 132: if (*lpStr != 0) ! 133: { ! 134: /* if background switch, set flag and remove switch from command line */ ! 135: if ((*lpStr == '/' || *lpStr == '-') && ! 136: (*(lpStr+1) == 'b' || *(lpStr+1) == 'B')) ! 137: { ! 138: *bBkgnd = TRUE; ! 139: lpStr += 2; ! 140: ! 141: if (*lpStr == 0) ! 142: *lpszCmdLine = 0; ! 143: else ! 144: strcpy (lpszCmdLine, lpStr); ! 145: } ! 146: /* maybe switch is embedded in parameter(s) somewhere */ ! 147: else ! 148: { ! 149: char *pStr = lpStr; ! 150: char *pCmdLine = lpszCmdLine; ! 151: int i, nCnt; ! 152: ! 153: while (*pStr != 0) ! 154: { ! 155: /* background switch is set, so prepare parameters and set flag */ ! 156: if ((*pStr == '/' || *pStr == '-') && ! 157: (*(pStr+1) == 'b' || *(pStr+1) == 'B')) ! 158: { ! 159: *bBkgnd = TRUE; ! 160: ! 161: /* copy from beg. of lpStr to *pStr to lpszCmdLine */ ! 162: nCnt = pStr - lpStr; ! 163: for (i=0; i<nCnt; i++) ! 164: lpszCmdLine[i] = lpStr[i]; ! 165: lpszCmdLine[i] = 0; ! 166: strcat (lpszCmdLine, (pStr+2)); ! 167: ! 168: /* break from loop */ ! 169: break; ! 170: } ! 171: ! 172: pStr++; ! 173: } ! 174: ! 175: /* no switch found, can only edit one file, remove extra parameters */ ! 176: if (*pStr == 0) ! 177: { ! 178: pStr = lpStr; ! 179: ! 180: while (*pStr != ' ' && *pStr != 0) ! 181: pStr++; ! 182: ! 183: if (*pStr == ' ') ! 184: *pStr = 0; ! 185: ! 186: strcpy (lpszCmdLine, lpStr); ! 187: } ! 188: } ! 189: } ! 190: else ! 191: return FALSE; ! 192: } ! 193: else ! 194: return FALSE; ! 195: ! 196: return TRUE; ! 197: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.