/* * 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); }