home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_progs
/
ui_utils
/
toolman.lzh
/
ToolManager
/
Source
/
filereq.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-12-31
|
3KB
|
110 lines
/*
* 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);
}