|
|
1.1 ! root 1: /* ! 2: Hatari ! 3: ! 4: common file access ! 5: */ ! 6: ! 7: #include <sys/types.h> ! 8: #include <sys/stat.h> ! 9: #include <fcntl.h> ! 10: ! 11: #include "main.h" ! 12: #include "dialog.h" ! 13: #include "file.h" ! 14: #include "floppy.h" ! 15: #include "createBlankImage.h" ! 16: #include "memAlloc.h" ! 17: #include "misc.h" ! 18: ! 19: ! 20: //OPENFILENAME ofn; ! 21: char szSTFilter[256],szROMFilter[256],szAllFilesFilter[256],szMapFileFilter[256],szYMFileFilter[256],szMemoryFileFilter[256]; ! 22: char szCreateDiscFileName[MAX_FILENAME_LENGTH]; ! 23: BOOL bEjectDisc,bCreateBlankDisc; ! 24: ! 25: /*-----------------------------------------------------------------------*/ ! 26: /* ! 27: Initialize Windows 'Open File' dialogs ! 28: */ ! 29: void File_Init(void) ! 30: { ! 31: /* FIXME */ ! 32: /* ! 33: char chReplace; // string separator for szFilter ! 34: int i,cbString; ! 35: ! 36: // Load '*.ST' filter ! 37: cbString = LoadString(hInst,IDS_STRING1,szSTFilter,sizeof(szSTFilter)); ! 38: chReplace = szSTFilter[cbString - 1]; // retrieve wildcard ! 39: ! 40: for(i=0; szSTFilter[i]!='\0'; i++) { ! 41: if (szSTFilter[i]==chReplace) ! 42: szSTFilter[i]='\0'; ! 43: } ! 44: // Load '*.IMG' filter ! 45: cbString = LoadString(hInst,IDS_STRING2,szROMFilter,sizeof(szROMFilter)); ! 46: chReplace = szROMFilter[cbString - 1]; // retrieve wildcard ! 47: ! 48: for(i=0; szROMFilter[i]!='\0'; i++) { ! 49: if (szROMFilter[i]==chReplace) ! 50: szROMFilter[i]='\0'; ! 51: } ! 52: ! 53: // Load '*.*' filter ! 54: cbString = LoadString(hInst,IDS_STRING3,szAllFilesFilter,sizeof(szAllFilesFilter)); ! 55: chReplace = szAllFilesFilter[cbString - 1]; // retrieve wildcard ! 56: ! 57: for(i=0; szAllFilesFilter[i]!='\0'; i++) { ! 58: if (szAllFilesFilter[i]==chReplace) ! 59: szAllFilesFilter[i]='\0'; ! 60: } ! 61: ! 62: // Load '*.map' filter ! 63: cbString = LoadString(hInst,IDS_STRING4,szMapFileFilter,sizeof(szMapFileFilter)); ! 64: chReplace = szMapFileFilter[cbString - 1]; // retrieve wildcard ! 65: ! 66: for(i=0; szMapFileFilter[i]!='\0'; i++) { ! 67: if (szMapFileFilter[i]==chReplace) ! 68: szMapFileFilter[i]='\0'; ! 69: } ! 70: ! 71: // Load '*.ym' filter ! 72: cbString = LoadString(hInst,IDS_STRING5,szYMFileFilter,sizeof(szYMFileFilter)); ! 73: chReplace = szYMFileFilter[cbString - 1]; // retrieve wildcard ! 74: ! 75: for(i=0; szYMFileFilter[i]!='\0'; i++) { ! 76: if (szYMFileFilter[i]==chReplace) ! 77: szYMFileFilter[i]='\0'; ! 78: } ! 79: ! 80: // Load '*.mem' filter ! 81: cbString = LoadString(hInst,IDS_STRING6,szMemoryFileFilter,sizeof(szMemoryFileFilter)); ! 82: chReplace = szMemoryFileFilter[cbString - 1]; // retrieve wildcard ! 83: ! 84: for(i=0; szMemoryFileFilter[i]!='\0'; i++) { ! 85: if (szMemoryFileFilter[i]==chReplace) ! 86: szMemoryFileFilter[i]='\0'; ! 87: } ! 88: ! 89: Memory_Clear(&ofn,sizeof(OPENFILENAME)); ! 90: ofn.lStructSize = sizeof(OPENFILENAME); ! 91: ofn.hInstance = hInst; ! 92: ofn.nMaxFile = _MAX_PATH; ! 93: ofn.nMaxFileTitle = _MAX_FNAME + _MAX_EXT; ! 94: */ ! 95: } ! 96: ! 97: ! 98: //----------------------------------------------------------------------- ! 99: /* ! 100: Create 'Open File' dialog, and ask user for valid filename ! 101: */ ! 102: BOOL File_OpenDlg(/*HWND hWnd,*/ char *pFullFileName,int Drive) ! 103: { ! 104: /* FIXME */ ! 105: /* ! 106: char szSrcDrive[_MAX_DRIVE],szSrcDir[_MAX_DIR],szSrcName[_MAX_FNAME],szSrcExt[_MAX_EXT]; ! 107: char szTempFileName[MAX_FILENAME_LENGTH]; ! 108: char szTempDir[MAX_FILENAME_LENGTH],szTitleString[64]; ! 109: BOOL bRet; ! 110: ! 111: ofn.hwndOwner = hWnd; ! 112: ofn.lpstrFilter = szSTFilter; ! 113: ofn.lpstrFileTitle = NULL; ! 114: // Copy filename as dialog will change this(may not be valid if cancel) ! 115: strcpy(szTempFileName,pFullFileName); ! 116: // Create filename and directory of previous file ! 117: _splitpath(szTempFileName,szSrcDrive,szSrcDir,szSrcName,szSrcExt); ! 118: ! 119: // Filename only, save FULL path and file back here when quit ! 120: _makepath(szTempFileName,"","",szSrcName,szSrcExt); ! 121: ofn.lpstrFile = szTempFileName; ! 122: // Directory only ! 123: _makepath(szTempDir,szSrcDrive,szSrcDir,"",""); ! 124: if (strlen(szTempDir)>0) ! 125: ofn.lpstrInitialDir = szTempDir; ! 126: else { ! 127: File_AddSlashToEndFileName(ConfigureParams.DiscImage.szDiscImageDirectory); ! 128: ofn.lpstrInitialDir = ConfigureParams.DiscImage.szDiscImageDirectory; ! 129: } ! 130: sprintf(szTitleString,"Select Disc Image for Drive '%c'",Drive+'A'); ! 131: ofn.lpstrTitle = szTitleString; ! 132: ofn.Flags = OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_NOCHANGEDIR | OFN_NOVALIDATE ! 133: | OFN_ENABLETEMPLATE | OFN_EXPLORER | OFN_ENABLEHOOK;// | OFN_SHOWHELP; ! 134: ofn.lpTemplateName = MAKEINTRESOURCE(IDD_DIALOGBAR); ! 135: ofn.hInstance = hInst; ! 136: ofn.lpfnHook = File_OpenDlg_OFNHookProc; ! 137: ! 138: // Set globals for dialog intercept ! 139: bEjectDisc = bCreateBlankDisc = FALSE; ! 140: // Bring up dialog ! 141: bRet = GetOpenFileName(&ofn); ! 142: if (bRet) ! 143: strcpy(pFullFileName,szTempFileName); ! 144: ! 145: // Did we eject the disc? ! 146: if (bEjectDisc) { ! 147: // Did we have a disc inserted? ! 148: _splitpath(pFullFileName,szSrcDrive,szSrcDir,szSrcName,szSrcExt); ! 149: if ( (strlen(szSrcName)>0) || (strlen(szSrcExt)>0) ) { ! 150: Floppy_EjectDiscFromDrive(Drive,TRUE); ! 151: } ! 152: else { ! 153: MessageBox(hWnd,"There is no disc image selected for that drive - Drive is empty.",PROG_NAME,MB_OK | MB_ICONINFORMATION); ! 154: Floppy_EjectDiscFromDrive(Drive,FALSE); ! 155: } ! 156: // Blank disc filename, and return disc change ! 157: strcpy(pFullFileName,""); ! 158: bRet = TRUE; ! 159: } ! 160: if (bCreateBlankDisc) { ! 161: // Do dialog for disc create, filename is in 'szCreateDiscFileName' ! 162: if (CreateBlankImage_DoDialog(hWnd,Drive,szCreateDiscFileName)) { ! 163: // Copy filename, so auto-inserts into drive ! 164: strcpy(pFullFileName,szCreateDiscFileName); ! 165: } ! 166: } ! 167: ! 168: return(bRet); ! 169: */ ! 170: return TRUE; ! 171: } ! 172: ! 173: //----------------------------------------------------------------------- ! 174: /* ! 175: Create 'Open File' dialog, don't have extra buttons via hook ! 176: */ ! 177: /* ! 178: BOOL File_OpenDlg_NoExtraButtons(HWND hWnd, char *pFullFileName) ! 179: { ! 180: char szSrcDrive[_MAX_DRIVE],szSrcDir[_MAX_DIR],szSrcName[_MAX_FNAME],szSrcExt[_MAX_EXT]; ! 181: char szTempFileName[MAX_FILENAME_LENGTH]; ! 182: char szTempDir[MAX_FILENAME_LENGTH],szTitleString[64]; ! 183: BOOL bRet; ! 184: ! 185: ofn.hwndOwner = hWnd; ! 186: ofn.lpstrFilter = szSTFilter; ! 187: ofn.lpstrFileTitle = NULL; ! 188: // Copy filename as dialog will change this(may not be valid if cancel) ! 189: strcpy(szTempFileName,pFullFileName); ! 190: // Create filename and directory of previous file ! 191: _splitpath(szTempFileName,szSrcDrive,szSrcDir,szSrcName,szSrcExt); ! 192: ! 193: // Filename only, save FULL path and file back here when quit ! 194: _makepath(szTempFileName,"","",szSrcName,szSrcExt); ! 195: ofn.lpstrFile = szTempFileName; ! 196: // Directory only ! 197: _makepath(szTempDir,szSrcDrive,szSrcDir,"",""); ! 198: if (strlen(szTempDir)>0) ! 199: ofn.lpstrInitialDir = szTempDir; ! 200: else { ! 201: File_AddSlashToEndFileName(ConfigureParams.DiscImage.szDiscImageDirectory); ! 202: ofn.lpstrInitialDir = ConfigureParams.DiscImage.szDiscImageDirectory; ! 203: } ! 204: sprintf(szTitleString,"Select Disc Image"); ! 205: ofn.lpstrTitle = szTitleString; ! 206: ofn.Flags = OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_NOCHANGEDIR | OFN_NOVALIDATE | OFN_EXPLORER; ! 207: ofn.lpTemplateName = NULL; ! 208: ofn.hInstance = hInst; ! 209: ofn.lpfnHook = File_OpenDlg_OFNHookProc; ! 210: ! 211: // Bring up dialog ! 212: bRet = GetOpenFileName(&ofn); ! 213: if (bRet) ! 214: strcpy(pFullFileName,szTempFileName); ! 215: ! 216: return(bRet); ! 217: } ! 218: */ ! 219: ! 220: //----------------------------------------------------------------------- ! 221: /* ! 222: Create 'Browse' dialog, and ask user for valid directory ! 223: */ ! 224: /* ! 225: BOOL File_OpenBrowseDlg(HWND hWnd, char *pFullFileName,BOOL bTosROM,BOOL bFileMustExist) ! 226: { ! 227: char szChosenPath[MAX_PATH]; ! 228: BROWSEINFO bInfo; ! 229: LPITEMIDLIST idList; ! 230: ! 231: bInfo.hwndOwner = hWnd; ! 232: bInfo.pidlRoot = NULL; ! 233: bInfo.pszDisplayName = szChosenPath; ! 234: bInfo.lpszTitle = "Select a directory:"; ! 235: bInfo.lpfn = NULL; ! 236: bInfo.ulFlags = 0; ! 237: bInfo.lParam = 0; ! 238: bInfo.iImage = 0; ! 239: ! 240: idList = SHBrowseForFolder(&bInfo); ! 241: if (idList != NULL) { ! 242: if (SHGetPathFromIDList(idList, szChosenPath)) { ! 243: strcpy(pFullFileName,szChosenPath); ! 244: return(TRUE); ! 245: } ! 246: } ! 247: ! 248: return(FALSE); ! 249: } ! 250: */ ! 251: ! 252: //----------------------------------------------------------------------- ! 253: /* ! 254: Create 'Open File' dialog, and ask user for TOS image filename ! 255: */ ! 256: BOOL File_OpenSelectDlg(/*HWND hWnd,*/ char *pFullFileName,int FileFilter,BOOL bFileMustExist,BOOL bSaving) ! 257: { ! 258: /* FIXME */ ! 259: /* ! 260: char szSrcDrive[_MAX_DRIVE],szSrcDir[_MAX_DIR],szSrcName[_MAX_FNAME],szSrcExt[_MAX_EXT]; ! 261: char szTempDir[MAX_FILENAME_LENGTH]; ! 262: ! 263: ofn.hwndOwner = hWnd; ! 264: switch (FileFilter) { ! 265: case FILEFILTER_DISCFILES: ! 266: ofn.lpstrFilter = szSTFilter; ! 267: ofn.lpstrTitle = "Select Disc Image"; ! 268: break; ! 269: case FILEFILTER_TOSROM: ! 270: ofn.lpstrFilter = szROMFilter; ! 271: ofn.lpstrTitle = "Select TOS Image"; ! 272: break; ! 273: case FILEFILTER_MAPFILE: ! 274: ofn.lpstrFilter = szMapFileFilter; ! 275: ofn.lpstrTitle = "Select Keyboard Map file"; ! 276: break; ! 277: case FILEFILTER_YMFILE: ! 278: ofn.lpstrFilter = szYMFileFilter; ! 279: ofn.lpstrTitle = "Select YM or WAV file"; ! 280: break; ! 281: case FILEFILTER_MEMORYFILE: ! 282: ofn.lpstrFilter = szMemoryFileFilter; ! 283: ofn.lpstrTitle = "Select Memory Capture file"; ! 284: break; ! 285: ! 286: default: ! 287: ofn.lpstrFilter = szAllFilesFilter; ! 288: ofn.lpstrTitle = NULL; ! 289: break; ! 290: } ! 291: ofn.lpstrFileTitle = NULL; ! 292: // Create filename and directory of previous file ! 293: _splitpath(pFullFileName,szSrcDrive,szSrcDir,szSrcName,szSrcExt); ! 294: ! 295: // Filename only, save FULL path and file back here when quit ! 296: _makepath(pFullFileName,"","",szSrcName,szSrcExt); ! 297: ofn.lpstrFile = pFullFileName; ! 298: // Directory only ! 299: _makepath(szTempDir,szSrcDrive,szSrcDir,"",""); ! 300: ofn.lpstrInitialDir = szTempDir; ! 301: if (bFileMustExist) ! 302: ofn.Flags = OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; ! 303: else ! 304: ofn.Flags = OFN_HIDEREADONLY | OFN_PATHMUSTEXIST; ! 305: ofn.lpTemplateName = MAKEINTRESOURCE(1536); ! 306: ! 307: if (bSaving) ! 308: return GetSaveFileName(&ofn); ! 309: else ! 310: return GetOpenFileName(&ofn); ! 311: */ ! 312: } ! 313: ! 314: //----------------------------------------------------------------------- ! 315: /* ! 316: Remove any '/'s from end of filenames, but keeps / intact ! 317: */ ! 318: void File_CleanFileName(char *pszFileName) ! 319: { ! 320: char szString[MAX_FILENAME_LENGTH]; ! 321: int i=0,j=0; ! 322: ! 323: // Remove end slash from filename! But / remains! Doh! ! 324: if( strlen(pszFileName)>2 && pszFileName[strlen(pszFileName)-1]=='/' ) ! 325: pszFileName[strlen(pszFileName)-1]=0; ! 326: } ! 327: ! 328: //----------------------------------------------------------------------- ! 329: /* ! 330: Add '/' to end of filename ! 331: */ ! 332: void File_AddSlashToEndFileName(char *pszFileName) ! 333: { ! 334: // Check dir/filenames ! 335: if (strlen(pszFileName)!=0) { ! 336: if (pszFileName[strlen(pszFileName)-1]!='/') ! 337: strcat(pszFileName,"/"); // Must use end slash ! 338: } ! 339: } ! 340: ! 341: /*-----------------------------------------------------------------------*/ ! 342: /* ! 343: Does filename extension match? If so, return TRUE ! 344: */ ! 345: BOOL File_DoesFileExtensionMatch(char *pszFileName, char *pszExtension) ! 346: { ! 347: if ( strlen(pszFileName) < strlen(pszExtension) ) ! 348: return(FALSE); ! 349: /* Is matching extension? */ ! 350: if ( !strcasecmp(&pszFileName[strlen(pszFileName)-strlen(pszExtension)], pszExtension) ) ! 351: return(TRUE); ! 352: ! 353: /* No */ ! 354: return(FALSE); ! 355: } ! 356: ! 357: //----------------------------------------------------------------------- ! 358: /* ! 359: Check if filename is from root ! 360: ! 361: Return TRUE if filename is '/', else give FALSE ! 362: */ ! 363: BOOL File_IsRootFileName(char *pszFileName) ! 364: { ! 365: if (pszFileName[0]=='\0') /* If NULL string return! */ ! 366: return(FALSE); ! 367: ! 368: if (pszFileName[0]=='/') ! 369: return(TRUE); ! 370: ! 371: return(FALSE); ! 372: } ! 373: ! 374: //----------------------------------------------------------------------- ! 375: /* ! 376: Return string, to remove 'C:' part of filename ! 377: */ ! 378: char *File_RemoveFileNameDrive(char *pszFileName) ! 379: { ! 380: if ( (pszFileName[0]!='\0') && (pszFileName[1]==':') ) ! 381: return(&pszFileName[2]); ! 382: else ! 383: return(pszFileName); ! 384: } ! 385: ! 386: //----------------------------------------------------------------------- ! 387: /* ! 388: Return string, which is just 'C:\' or '\' ! 389: */ ! 390: char *File_GetFileNameDrive(char *pszFileName) ! 391: { ! 392: /* if ( (pszFileName[0]!='\0') && (pszFileName[1]==':') ) ! 393: pszFileName[3] = '\0';*/ ! 394: if (pszFileName[0]=='/') ! 395: pszFileName[1] = '\0'; ! 396: ! 397: return(pszFileName); ! 398: } ! 399: ! 400: //----------------------------------------------------------------------- ! 401: /* ! 402: Check if filename end with a '/' ! 403: ! 404: Return TRUE if filename ends with '/' ! 405: */ ! 406: BOOL File_DoesFileNameEndWithSlash(char *pszFileName) ! 407: { ! 408: if (pszFileName[0]=='\0') /* If NULL string return! */ ! 409: return(FALSE); ! 410: ! 411: // Does string end in a '\' ! 412: if (pszFileName[strlen(pszFileName)-1]=='/') ! 413: return(TRUE); ! 414: ! 415: return(FALSE); ! 416: } ! 417: ! 418: //----------------------------------------------------------------------- ! 419: /* ! 420: Remove any double '/'s from end of filenames. So just the one ! 421: */ ! 422: void File_RemoveFileNameTrailingSlashes(char *pszFileName) ! 423: { ! 424: int Length; ! 425: ! 426: /* Do have slash at end of filename? */ ! 427: Length = strlen(pszFileName); ! 428: if (Length>=3) { ! 429: if (pszFileName[Length-1]=='/') { /* Yes, have one previous? */ ! 430: if (pszFileName[Length-2]=='/') ! 431: pszFileName[Length-1] = '\0'; /* then remove it! */ ! 432: } ! 433: } ! 434: } ! 435: ! 436: //----------------------------------------------------------------------- ! 437: /* ! 438: Return directory string from full path filename, including trailing '/' ! 439: */ ! 440: void File_GetDirectoryString(char *pszFileName, char *pszDirName) ! 441: { ! 442: fprintf(stderr,"FIXME: File_GetDirectoryString(%s,%s)\n",pszFileName,pszDirName); ! 443: /* FIXME */ ! 444: /* ! 445: char szDrive[_MAX_DRIVE],szDir[_MAX_DIR],szName[_MAX_FNAME],szExt[_MAX_EXT]; ! 446: ! 447: // So, first split name into parts ! 448: _splitpath(pszFileName,szDrive,szDir,szName,szExt); ! 449: if (strlen(szExt)>0) { ! 450: // Recombine, with out filename or extension ! 451: _makepath(pszDirName,szDrive,szDir,"",""); ! 452: } ! 453: else { ! 454: // Was just a directory, so use as is ! 455: strcpy(pszDirName,pszFileName); ! 456: } ! 457: // Make sure ends with a '/' ! 458: File_AddSlashToEndFileName(pszDirName); ! 459: */ ! 460: } ! 461: ! 462: //----------------------------------------------------------------------- ! 463: /* ! 464: Does filename end with a .MSA extension? If so, return TRUE ! 465: */ ! 466: BOOL File_FileNameIsMSA(char *pszFileName) ! 467: { ! 468: return(File_DoesFileExtensionMatch(pszFileName,".msa")); ! 469: } ! 470: ! 471: //----------------------------------------------------------------------- ! 472: /* ! 473: Does filename end with a .ST extension? If so, return TRUE ! 474: */ ! 475: BOOL File_FileNameIsST(char *pszFileName) ! 476: { ! 477: return(File_DoesFileExtensionMatch(pszFileName,".st")); ! 478: } ! 479: ! 480: ! 481: ! 482: //----------------------------------------------------------------------- ! 483: /* ! 484: Read file from PC into memory, allocate memory for it if need to(pass Address as NULL) ! 485: Also may pass 'unsigned long' if want to find size of file read(may pass as NULL) ! 486: */ ! 487: void *File_Read(char *pszFileName, void *pAddress, long *pFileSize, char *ppszExts[]) ! 488: { ! 489: int DiscFile; ! 490: void *pFile=NULL; ! 491: long FileSize=0; ! 492: ! 493: /* Does the file exist? If not, see if can scan for other extensions and try these */ ! 494: if (!File_Exists(pszFileName) && ppszExts) { ! 495: /* Try other extensions, if suceeds correct filename is now in 'pszFileName' */ ! 496: File_FindPossibleExtFileName(pszFileName,ppszExts); ! 497: } ! 498: ! 499: /* Open our file */ ! 500: DiscFile = open(pszFileName, O_RDONLY); ! 501: if (DiscFile>=0) { ! 502: /* Find size of TOS image - 192k or 256k */ ! 503: FileSize = lseek(DiscFile, 0, SEEK_END); ! 504: lseek(DiscFile, 0, SEEK_SET); ! 505: /* Find pointer to where to load, allocate memory if pass NULL */ ! 506: if (pAddress) ! 507: pFile = pAddress; ! 508: else ! 509: pFile = Memory_Alloc(FileSize); ! 510: /* Read in... */ ! 511: if (pFile) ! 512: read(DiscFile,(char *)pFile,FileSize); ! 513: ! 514: close(DiscFile); ! 515: } ! 516: /* Store size of file we read in(or 0 if failed) */ ! 517: if (pFileSize) ! 518: *pFileSize = FileSize; ! 519: ! 520: return(pFile); /* Return to where read in/allocated */ ! 521: } ! 522: ! 523: //----------------------------------------------------------------------- ! 524: /* ! 525: Save file to PC, return FALSE if errors ! 526: */ ! 527: BOOL File_Save(char *pszFileName, void *pAddress,long Size,BOOL bQueryOverwrite) ! 528: { ! 529: int DiscFile; ! 530: BOOL bRet=FALSE; ! 531: ! 532: /* Check if need to ask user if to overwrite */ ! 533: if (bQueryOverwrite) { ! 534: /* If file exists, ask if OK to overwrite */ ! 535: if (!File_QueryOverwrite(pszFileName)) ! 536: return(FALSE); ! 537: } ! 538: ! 539: /* Create our file */ ! 540: DiscFile = open(pszFileName, O_CREAT | O_WRONLY); ! 541: if (DiscFile>=0) { ! 542: /* Write data, set success flag */ ! 543: if (write(DiscFile,(char *)pAddress,Size)==Size) ! 544: bRet = TRUE; ! 545: ! 546: close(DiscFile); ! 547: } ! 548: ! 549: return(bRet); ! 550: } ! 551: ! 552: //----------------------------------------------------------------------- ! 553: /* ! 554: Return size of file, -1 if error ! 555: */ ! 556: int File_Length(char *pszFileName) ! 557: { ! 558: int DiscFile; ! 559: int FileSize; ! 560: ! 561: /* Attempt to open file(with OF_EXIST) */ ! 562: DiscFile = open(pszFileName, O_RDONLY); ! 563: if (DiscFile>=0) { ! 564: /* Find length */ ! 565: FileSize = lseek(DiscFile,0,SEEK_END); ! 566: close(DiscFile); ! 567: ! 568: return(FileSize); ! 569: } ! 570: ! 571: return(-1); ! 572: } ! 573: ! 574: //----------------------------------------------------------------------- ! 575: /* ! 576: Return TRUE if file exists ! 577: */ ! 578: BOOL File_Exists(char *pszFileName) ! 579: { ! 580: int DiscFile; ! 581: ! 582: // Attempt to open file(with OF_EXIST) ! 583: DiscFile = open(pszFileName, O_RDONLY); ! 584: if (DiscFile!=-1) ! 585: return(TRUE); ! 586: return(FALSE); ! 587: } ! 588: ! 589: //----------------------------------------------------------------------- ! 590: /* ! 591: Delete file, return TRUE if OK ! 592: */ ! 593: BOOL File_Delete(char *pszFileName) ! 594: { ! 595: // Delete the file(must be closed first) ! 596: return( remove(pszFileName) ); ! 597: } ! 598: ! 599: //----------------------------------------------------------------------- ! 600: /* ! 601: Find if file exists, and if so ask user if OK to overwrite ! 602: */ ! 603: BOOL File_QueryOverwrite(/*HWND hWnd,*/char *pszFileName) ! 604: { ! 605: ! 606: char szString[MAX_FILENAME_LENGTH]; ! 607: ! 608: // Try and find if file exists ! 609: if (File_Exists(pszFileName)) { ! 610: // File does exist, are we OK to overwrite? ! 611: sprintf(szString,"File '%s' exists, overwrite?",pszFileName); ! 612: /* FIXME: */ ! 613: // if (MessageBox(hWnd,szString,PROG_NAME,MB_YESNO | MB_DEFBUTTON2 | MB_ICONSTOP)==IDNO) ! 614: // return(FALSE); ! 615: } ! 616: ! 617: return(TRUE); ! 618: } ! 619: ! 620: //----------------------------------------------------------------------- ! 621: /* ! 622: Try filename with various extensions and check if file exists - if so return correct name ! 623: */ ! 624: BOOL File_FindPossibleExtFileName(char *pszFileName,char *ppszExts[]) ! 625: { ! 626: /* FIXME */ ! 627: /* ! 628: char szSrcDrive[_MAX_DRIVE],szSrcDir[_MAX_DIR],szSrcName[_MAX_FNAME],szSrcExt[_MAX_EXT]; ! 629: char szTempFileName[MAX_FILENAME_LENGTH]; ! 630: int i=0; ! 631: ! 632: // Split filename into parts ! 633: _splitpath(pszFileName,szSrcDrive,szSrcDir,szSrcName,szSrcExt); ! 634: ! 635: // Scan possible extensions ! 636: while(ppszExts[i]) { ! 637: // Re-build with new file extension ! 638: _makepath(szTempFileName,szSrcDrive,szSrcDir,szSrcName,ppszExts[i]); ! 639: // Does this file exist? ! 640: if (File_Exists(szTempFileName)) { ! 641: // Copy name for return ! 642: strcpy(pszFileName,szTempFileName); ! 643: return(TRUE); ! 644: } ! 645: ! 646: // Next one ! 647: i++; ! 648: } ! 649: */ ! 650: // No, none of the files exist ! 651: return(FALSE); ! 652: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.