home *** CD-ROM | disk | FTP | other *** search
- /*
- * filereq.c V1.5
- *
- * file requester stuff
- *
- * (c) 1991 by Stefan Becker
- *
- */
- #include "ToolManager.h"
-
- struct Library *AslBase; /* Library for file requester */
- static struct EasyStruct SaveES={sizeof(struct EasyStruct),0,"Configuration",
- "The configuration has been changed.",
- "Save First|Continue|Cancel"};
-
- /* Open a file requester */
- BOOL ShowFileRequester(struct Window *w, char *hail, char **name, int type)
- {
- struct FileRequester *req;
- char *cp,*dir,*file,*pat="~(#?.info)";
- UWORD flags1=0,flags2=0;
- BOOL rc=TRUE; /* means "User canceled" or error */
-
- /* Open ASL library */
- if (!(AslBase=OpenLibrary(AslName,0))) goto fre0;
-
- /* Get memory for dir string */
- if (!(dir=malloc(NAMELEN))) goto fre1;
-
- /* Get memory for file string */
- if (!(file=malloc(NAMELEN))) goto fre2;
-
- /* Split file name */
- cp=FilePart(*name);
- if (cp!=*name) strncpy(dir,*name,cp-*name);
- dir[cp-*name]='\0';
- strncpy(file,cp,NAMELEN);
-
- /* Set flags */
- switch(type)
- {
- case FREQ_SAVE: /* Save requester, display no icons */
- flags1=FILF_PATGAD|FILF_SAVE;
- break;
- case FREQ_FILE: /* File requester, display no icons */
- flags1=FILF_PATGAD;
- break;
- case FREQ_DIRS: /* Directory requester, display no files */
- flags2=FIL1F_NOFILES;
- break;
- case FREQ_ICON: /* Icon requester, display all files */
- pat="#?";
- break;
- }
-
- /* Alloc file requester structure */
- if (!(req=AllocAslRequestTags(ASL_FileRequest,ASL_Hail,hail,
- ASL_Window,w,
- ASL_LeftEdge,50,
- ASL_TopEdge,50,
- ASL_Dir,dir,
- ASL_File,file,
- ASL_FuncFlags,flags1,
- ASL_ExtFlags1,flags2,
- ASL_Pattern,pat,
- TAG_DONE)))
- goto fre3;
-
- /* Open file requester */
- if (AslRequest(req,NULL))
- if (((type==FREQ_DIRS) && *req->rf_Dir) || *req->rf_File) /* Valid name? */
- {
- /* Build complete name */
- if (req->rf_Dir)
- strncpy(dir,req->rf_Dir,NAMELEN);
- else
- dir[0]='\0';
- if (type!=FREQ_DIRS) AddPart(dir,req->rf_File,NAMELEN);
-
- *name=dir; /* return buffer (MUST BE FREED BY CALLER!!) */
- rc=FALSE; /* User selected a file */
- }
-
- /* Free resources */
- FreeAslRequest(req);
- fre3: free(file);
- fre2: if (rc) free(dir); /* Buffer must be freed by caller! */
- fre1: CloseLibrary(AslBase);
- fre0: return(rc);
- }
-
- /* Put up a save config requester */
- BOOL ShowSaveConfigRequester(struct Window *w)
- {
- BOOL rc=FALSE; /* Means user clicked OK */
-
- /* If config has been changed, Ask if it should be saved */
- if (ConfigChanged)
- switch(EasyRequest(w,&SaveES,NULL,""))
- {
- case 0: /* User pressed "Cancel" */
- rc=TRUE;
- break;
- case 1: /* User pressed "Save First" */
- rc=WriteConfigFile(w,FALSE);
- break;
- }
- return(rc);
- }
-