home *** CD-ROM | disk | FTP | other *** search
- // PickFile.lib - Cmm code wrapper for a simple implementation of the
- // GetOpenFileName() function found in the Windows
- // Common Dialog DLL. You may #include this file in
- // your CMM source to have access to this version of
- // GetOpenFileName().
-
- // GetOpenFileName([MatchingFileSpec[,Title]])
- // MatchingFileSpec: string file specification, including wildcard in the
- // file name. For example "C:\\WIN\\*.TXT" or
- // "*.INI". If this is not supplied or if it is
- // NULL then *.* will be the default.
- // Title: String to be the title of the open dialog box, if this is NULL
- // then Windows defaults to "Open".
- // Return: Return a string that is the full file specification of the
- // file selected, or NULL if no file was selected.
- GetOpenFileName(MatchingFileSpec,Title)
- {
- // The OpenFileName structure is very large, but most of its fields are
- // are not used, so will set it all to zero except the few fields needed.
- #define OFN_MAX_FILESPECLEN 200
- #define OFN_SIZE 72
- #define OFN_FILENAME_OFFSET 24
- #define OFN_INIT_DIR_OFFSET 40
- #define OFN_TITLE_OFFSET 44
- BLObSize(ofn,OFN_SIZE);
- memset(ofn,0,OFN_SIZE);
- BLObPut(ofn,0,OFN_SIZE,UWORD32);
- BLObPut(ofn,4,ScreenHandle(),UWORD16);
- BLObPut(ofn,6,Instance(),UWORD16);
-
- // if a title was supplied, then use it
- if ( 1 < va_arg() && NULL != Title ) {
- BLObPut(ofn,OFN_TITLE_OFFSET,pointer(Title),UWORD32);
- }
-
- // if filename was not supplied, then default to wildcard
- if ( 0 < va_arg() && NULL != MatchingFileSpec ) {
- strcpy(ofn_spec,MatchingFileSpec);
- } else {
- strcpy(ofn_spec,"*.*");
- }
- ofn_parts = SplitFileName(ofn_spec);
-
- // store the dir part of the filename (without extra backslash)
- ofn_dir = FullPath(ofn_parts.dir);
- if ( ofn_dir[strlen(ofn_dir)-1] == '\\' && strcmp(ofn_dir+1,":\\") )
- ofn_dir[strlen(ofn_dir)-1] = 0;
- BLObPut(ofn,OFN_INIT_DIR_OFFSET,pointer(ofn_dir),UWORD32);
-
- // set filename part of the filename, and also initialize it
- memset(ofn_name,0,OFN_MAX_FILESPECLEN);
- strcat(strcpy(ofn_name,ofn_parts.name),ofn_parts.ext);
- BLObPut(ofn,OFN_FILENAME_OFFSET,pointer(ofn_name),UWORD32);
- BLObPut(ofn,OFN_FILENAME_OFFSET+4,OFN_MAX_FILESPECLEN-1,UWORD32);
-
- return( DynamicLink("COMMDLG.DLL","GETOPENFILENAME",SWORD16,PASCAL,ofn)
- ? ofn_name : NULL );
- }
-