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 >
C/C++ Source or Header  |  1991-12-31  |  3KB  |  110 lines

  1. /*
  2.  * filereq.c   V1.5
  3.  *
  4.  * file requester stuff
  5.  *
  6.  * (c) 1991 by Stefan Becker
  7.  *
  8.  */
  9. #include "ToolManager.h"
  10.  
  11. struct Library *AslBase; /* Library for file requester */
  12. static struct EasyStruct SaveES={sizeof(struct EasyStruct),0,"Configuration",
  13.                                  "The configuration has been changed.",
  14.                                  "Save First|Continue|Cancel"};
  15.  
  16. /* Open a file requester */
  17. BOOL ShowFileRequester(struct Window *w, char *hail, char **name, int type)
  18. {
  19.  struct FileRequester *req;
  20.  char *cp,*dir,*file,*pat="~(#?.info)";
  21.  UWORD flags1=0,flags2=0;
  22.  BOOL rc=TRUE; /* means "User canceled" or error */
  23.  
  24.  /* Open ASL library */
  25.  if (!(AslBase=OpenLibrary(AslName,0))) goto fre0;
  26.  
  27.  /* Get memory for dir string */
  28.  if (!(dir=malloc(NAMELEN))) goto fre1;
  29.  
  30.  /* Get memory for file string */
  31.  if (!(file=malloc(NAMELEN))) goto fre2;
  32.  
  33.  /* Split file name */
  34.  cp=FilePart(*name);
  35.  if (cp!=*name) strncpy(dir,*name,cp-*name);
  36.  dir[cp-*name]='\0';
  37.  strncpy(file,cp,NAMELEN);
  38.  
  39.  /* Set flags */
  40.  switch(type)
  41.   {
  42.    case FREQ_SAVE:         /* Save requester, display no icons */
  43.     flags1=FILF_PATGAD|FILF_SAVE;
  44.     break;
  45.    case FREQ_FILE:         /* File requester, display no icons */
  46.     flags1=FILF_PATGAD;
  47.     break;
  48.    case FREQ_DIRS:         /* Directory requester, display no files */
  49.     flags2=FIL1F_NOFILES;
  50.     break;
  51.    case FREQ_ICON:         /* Icon requester, display all files */
  52.     pat="#?";
  53.     break;
  54.   }
  55.  
  56.  /* Alloc file requester structure */
  57.  if (!(req=AllocAslRequestTags(ASL_FileRequest,ASL_Hail,hail,
  58.                                                ASL_Window,w,
  59.                                                ASL_LeftEdge,50,
  60.                                                ASL_TopEdge,50,
  61.                                                ASL_Dir,dir,
  62.                                                ASL_File,file,
  63.                                                ASL_FuncFlags,flags1,
  64.                                                ASL_ExtFlags1,flags2,
  65.                                                ASL_Pattern,pat,
  66.                                                TAG_DONE)))
  67.   goto fre3;
  68.  
  69.  /* Open file requester */
  70.  if (AslRequest(req,NULL))
  71.   if (((type==FREQ_DIRS) && *req->rf_Dir) || *req->rf_File) /* Valid name? */
  72.    {
  73.     /* Build complete name */
  74.     if (req->rf_Dir)
  75.      strncpy(dir,req->rf_Dir,NAMELEN);
  76.     else
  77.      dir[0]='\0';
  78.     if (type!=FREQ_DIRS) AddPart(dir,req->rf_File,NAMELEN);
  79.  
  80.     *name=dir;    /* return buffer (MUST BE FREED BY CALLER!!) */
  81.     rc=FALSE;                          /* User selected a file */
  82.    }
  83.  
  84.  /* Free resources */
  85.  FreeAslRequest(req);
  86. fre3: free(file);
  87. fre2: if (rc) free(dir); /* Buffer must be freed by caller! */
  88. fre1: CloseLibrary(AslBase);
  89. fre0: return(rc);
  90. }
  91.  
  92. /* Put up a save config requester */
  93. BOOL ShowSaveConfigRequester(struct Window *w)
  94. {
  95.  BOOL rc=FALSE; /* Means user clicked OK */
  96.  
  97.  /* If config has been changed, Ask if it should be saved */
  98.  if (ConfigChanged)
  99.   switch(EasyRequest(w,&SaveES,NULL,""))
  100.    {
  101.     case 0:                        /* User pressed "Cancel" */
  102.      rc=TRUE;
  103.      break;
  104.     case 1:                        /* User pressed "Save First" */
  105.      rc=WriteConfigFile(w,FALSE);
  106.      break;
  107.    }
  108.  return(rc);
  109. }
  110.