AcePerl
view release on metacpan or search on metacpan
acelib/filsubs.c view on Meta::CPAN
messcrash ("filtmpopen requires a non-null nameptr") ;
if (!strcmp (spec, "r"))
return filopen (*nameptr, 0, spec) ;
#if defined(SUN) || defined(SOLARIS)
if (!(*nameptr = tempnam ("/var/tmp", "ACEDB")))
#else
if (!(*nameptr = tempnam ("/tmp", "ACEDB")))
#endif
{
messerror ("failed to create temporary file (%s)",
messSysErrorText()) ;
return 0 ;
}
if (!tmpFiles)
tmpFiles = assCreate () ;
assInsert (tmpFiles, *nameptr, *nameptr) ;
return filopen (*nameptr, 0, spec) ;
} /* filtmpopen */
/************************************************************/
UTIL_FUNC_DEF BOOL filtmpremove (char *name) /* delete and free() */
{ BOOL result = filremove (name, 0) ;
free (name) ; /* NB free since allocated by tempnam */
assRemove (tmpFiles, name) ;
return result ;
}
/************************************************************/
UTIL_FUNC_DEF void filtmpcleanup (void)
{ char *name = 0 ;
if (tmpFiles)
while (assNext (tmpFiles, &name, 0))
{ filremove (name, 0) ;
free (name) ;
}
}
/************* filqueryopen() ****************/
static QueryOpenRoutine queryOpenFunc = 0 ;
UTIL_FUNC_DEF QueryOpenRoutine filQueryOpenRegister (QueryOpenRoutine new)
{ QueryOpenRoutine old = queryOpenFunc ; queryOpenFunc = new ; return old ; }
UTIL_FUNC_DEF FILE *filqueryopen (char *dname, char *fname, char *end, char *spec, char *title)
{
Stack s ;
FILE* fil = 0 ;
int i ;
/* use registered routine if available */
if (queryOpenFunc)
return (*queryOpenFunc)(dname, fname, end, spec, title) ;
/* otherwise do here and use messprompt() */
s = stackCreate(50);
if (dname && *dname)
{ pushText(s, dname) ; catText(s,"/") ; }
if (fname)
catText(s,fname) ;
if (end && *end)
{ catText(s,".") ; catText(s,end) ; }
lao:
if (!messPrompt("File name please", stackText(s,0), "w"))
{ stackDestroy(s) ;
return 0 ;
}
i = stackMark(s) ;
pushText(s, freepath()) ; /* freepath needed by WIN32 */
if (spec[0] == 'w' &&
(fil = fopen (stackText(s,i), "r")))
{ if ( fil != stdin && fil != stdout && fil != stderr)
fclose (fil) ;
fil = 0 ;
if (messQuery (messprintf ("Overwrite %s?",
stackText(s,i))))
{
if ((fil = fopen (stackText(s,i), spec)))
goto bravo ;
else
messout ("Sorry, can't open file %s for writing",
stackText (s,i)) ;
}
goto lao ;
}
else if (!(fil = fopen (stackText(s,i), spec)))
messout ("Sorry, can't open file %s",
stackText(s,i)) ;
bravo:
stackDestroy(s) ;
return fil ;
} /* filqueryopen */
/*********************************************/
static Associator mailFile = 0, mailAddress = 0 ;
UTIL_FUNC_DEF void filclose (FILE *fil)
{
char *address ;
char *filename ;
if (!fil || fil == stdin || fil == stdout || fil == stderr)
return ;
fclose (fil) ;
if (mailFile && assFind (mailFile, fil, &filename))
{ if (assFind (mailAddress, fil, &address))
callScript ("mail", messprintf ("%s %s", address, filename)) ;
else
messerror ("Have lost the address for mailfile %s", filename) ;
assRemove (mailFile, fil) ;
assRemove (mailAddress, fil) ;
unlink (filename) ;
( run in 0.720 second using v1.01-cache-2.11-cpan-6aa56a78535 )