/******************************************************************************

    MODUL
	$Id: filereq.c 1.2 1994/09/09 12:31:30 digulla Exp digulla $

    DESCRIPTION
	All routines that handle file-requesters. We try to open ASL and
	if that's not possible, REQTOOLS.

    HISTORY
	28. Nov 1992	ada created
	$Log: filereq.c $
 * Revision 1.2  1994/09/09  12:31:30  digulla
 * added new style Prototypes, DEFCMD and DEFHELP
 *
 * Revision 1.1  1994/08/14  12:30:15  digulla
 * Initial revision
 *

******************************************************************************/

/**************************************
		Includes
**************************************/
#include "defs.h"
#include <clib/reqtools_protos.h>
#include <proto/reqtools.h>
#include <proto/asl.h>


/**************************************
	    Globale Variable
**************************************/
Prototype struct FileRequester	 * FReq;
Prototype struct ReqToolsBase	 * ReqToolsBase;
Prototype struct rtFileRequester * RFReq;

struct FileRequester   * FReq;	  /* File-Req. structure */
struct rtFileRequester * RFReq;
struct ReqToolsBase    * ReqToolsBase;


/**************************************
      Interne Defines & Strukturen
**************************************/


/**************************************
	    Interne Variable
**************************************/
Prototype char pattern[];
char pattern[64] = "";
static char file[108];
static char dir[PATHSIZE];


/**************************************
	   Interne Prototypes
**************************************/


/*DEFHELP #cmd prefs,io,requester PATTERN pat - sets the pattern for the filerequesters. */

DEFUSERCMD("pattern", 1, CF_VWM|CF_COK|CF_ICO, void, do_pattern, (void),)
{
    strncpy (pattern, av[1], 63);
    pattern[63] = 0;
}


/*DEFHELP #cmd requester,io ARPLOAD - NEWFILE with filerequester */

DEFUSERCMD("arpload", 0, CF_VWM, void, do_aslload, (void),)
{
    BPTR oldlock;
    BOOL ret;

    oldlock = CurrentDir (Ep->dirlock);

    splitpath (Ep->name, file, dir);

DEFMESSAGE( __unnamed, "unnamed" )
    if (!stricmp (file, __unnamed))
	*file = 0;

    fixdirname (dir);

    if (AslBase)
    {		       /* If we have asl.library & requester */
	if (!FReq)
	    FReq = AllocAslRequest (ASL_FileRequest, NULL);

	if (!FReq)
	{
	    nomemory ();
	    return;
	}

	ret = AslRequestTags ((APTR)FReq,
DEFMESSAGE( _REQ_load_new_file, "XDME Load New File" )
		ASL_Hail,	_REQ_load_new_file,
DEFMESSAGE( _REQ_ok_load, "Load" )
		ASL_OKText,	_REQ_ok_load,
		ASL_Window,	Ep->win,
		ASL_FuncFlags,	FILF_NEWIDCMP | FILF_PATGAD,
		ASL_Dir,	dir,
		ASL_File,	file,
		ASL_Pattern,	pattern,
		ASL_LeftEdge,	Ep->config.aslleft + Ep->win->LeftEdge,     /* use config coords */
		ASL_TopEdge,	Ep->config.asltop + Ep->win->TopEdge,
		ASL_Width,	Ep->config.aslwidth,
		ASL_Height,	Ep->config.aslheight,
		TAG_DONE
	);

	Ep->config.asltop    = FReq->rf_TopEdge - Ep->win->TopEdge;	 /* save coords */
	Ep->config.aslleft   = FReq->rf_LeftEdge - Ep->win->LeftEdge;
	Ep->config.aslwidth  = FReq->rf_Width;
	Ep->config.aslheight = FReq->rf_Height;

	if (ret)
	{
	    BPTR newlock;

	    if ((newlock = Lock (FReq->rf_Dir, SHARED_LOCK)))
	    {
		BPTR cd = CurrentDir (oldlock);

		Ep->dirlock = (long)newlock;

		strcpy (pattern, FReq->rf_Pat);

		av[0] = (UBYTE *)"n";
		av[1] = (UBYTE *) FReq->rf_File;

		if (do_edit () == -1)
		{
		    Ep->dirlock = (long)cd;
		    UnLock (newlock);
		}
		else
		    UnLock (cd);
	    }
	} else
	{
	    SETF_ABORTCOMMAND(Ep,1);
	    CurrentDir (oldlock);
	}
    } else
    {		   /* no asl.library? try reqtools */
	do_reqload ();
    }
} /* do_aslload */


Prototype int aslsave (void);

int aslsave (void)
{
    BPTR oldlock = CurrentDir (Ep->dirlock);
    BOOL ret;

    splitpath (Ep->name, file, dir);

DEFMESSAGE( __unnamed, "unnamed" )
    if (!stricmp (file, __unnamed))
	*file = 0;

    fixdirname (dir);

    if (AslBase)
    {
	if (!FReq)
	    FReq = AllocAslRequest (ASL_FileRequest, NULL);

	if (!FReq)
	{
	    nomemory ();
	    return (FALSE);
	}

loop:
	ret = AslRequestTags( (APTR)FReq,
DEFMESSAGE( _REQ_save_file, "XDME Save File" )
		ASL_Hail,	_REQ_save_file,
DEFMESSAGE( _REQ_save_ok, "Save" )
		ASL_OKText,	_REQ_save_ok,
		ASL_Window,	Ep->win,
		ASL_FuncFlags,	FILF_NEWIDCMP | FILF_SAVE,
		ASL_Dir,	dir,
		ASL_File,	file,
		ASL_LeftEdge,	Ep->config.aslleft + Ep->win->LeftEdge,     /* use config coords */
		ASL_TopEdge,	Ep->config.asltop + Ep->win->TopEdge,
		ASL_Width,	Ep->config.aslwidth,
		ASL_Height,	Ep->config.aslheight,
		TAG_DONE
	);

	Ep->config.asltop    = FReq->rf_TopEdge - Ep->win->TopEdge;	 /* save coords */
	Ep->config.aslleft   = FReq->rf_LeftEdge - Ep->win->LeftEdge;
	Ep->config.aslwidth  = FReq->rf_Width;
	Ep->config.aslheight = FReq->rf_Height;

	if (ret)
	{
	    BPTR tmp_lock;

DEFMESSAGE( __unnamed, "unnamed" )
	    if (!stricmp (FReq->rf_File, __unnamed))
	    {
DEFMESSAGE( _REQ_cant_saveas_unnamed, "%s:\nCannot save file as\n`unnamed'" )
		error (_REQ_cant_saveas_unnamed, av[0], __unnamed);
		*file = 0;
		goto loop;
	    }

	    CurrentDir (oldlock);

	    strcpy (file, FReq->rf_File);
	    strcpy (dir, FReq->rf_Dir);
	    strcpy (pattern, FReq->rf_Pat);

	    if (!*file)
	    {
DEFMESSAGE( _REQ_a_name_is_needed, "%s:\nYou must specify a name" )
		error (_REQ_a_name_is_needed, av[0]);
		goto loop;
	    }

	    AddPart (dir, file, PATHSIZE);

	    av[1] = (UBYTE *)dir;

	    if ((tmp_lock = Lock (dir, ACCESS_READ)))
	    {
		UnLock (tmp_lock);

DEFMESSAGE( __xdme_warning, "XDME Warning" )
		if (!getyn ("XDME Warning",
DEFMESSAGE( _REQ_file_exists_overwrite, "The file\n`%s'\ndoes already exist.Do you want to overwrite it ?" )
			_REQ_file_exists_overwrite,
DEFMESSAGE( __ok_cancel, "Yes|No" )
			__ok_cancel, dir) )
		    return (FALSE);
	    }

	    return (do_saveas ());
	} else
	{
	    SETF_ABORTCOMMAND(Ep,1);
	    CurrentDir (oldlock);
	}
    } else
    {
	return (do_reqsave ());
    }

    return (FALSE);
} /* aslsave */


/*DEFHELP #cmd requester,io ARPINSFILE - INSFILE with filerequester */

DEFUSERCMD("arpinsfile", 0, 0, void, do_aslinsfile, (void),)
{
    BPTR oldlock = CurrentDir (Ep->dirlock);
    BOOL ret;

    splitpath (Ep->name, file, dir);

DEFMESSAGE( __unnamed, "unnamed" )
    if (!stricmp (file, __unnamed))
	*file = 0;

    fixdirname (dir);

    if (AslBase)
    {
	if (!FReq)
	    FReq = AllocAslRequest (ASL_FileRequest, NULL);

	if (!FReq)
	{
	    nomemory ();
	    return;
	}

	ret = AslRequestTags ((APTR)FReq,
DEFMESSAGE( _REQ_insert_file, "XDME Insert File" )
		ASL_Hail,	_REQ_insert_file,
DEFMESSAGE( _REQ_ok_insert, "Insert" )
		ASL_OKText,	_REQ_ok_insert,
		ASL_Window,	Ep->win,
		ASL_FuncFlags,	FILF_NEWIDCMP | FILF_PATGAD,
		ASL_Dir,	dir,
		ASL_File,	file,
		ASL_Pattern,	pattern,
		ASL_LeftEdge,	Ep->config.aslleft + Ep->win->LeftEdge,     /* use config coords */
		ASL_TopEdge,	Ep->config.asltop + Ep->win->TopEdge,
		ASL_Width,	Ep->config.aslwidth,
		ASL_Height,	Ep->config.aslheight,
		TAG_DONE );

	Ep->config.asltop    = FReq->rf_TopEdge - Ep->win->TopEdge;	 /* save coords */
	Ep->config.aslleft   = FReq->rf_LeftEdge - Ep->win->LeftEdge;
	Ep->config.aslwidth  = FReq->rf_Width;
	Ep->config.aslheight = FReq->rf_Height;

	if (ret)
	{
	    CurrentDir (oldlock);

	    /* Fields are READ-ONLY */
	    strcpy (file, FReq->rf_File);
	    strcpy (dir, FReq->rf_Dir);
	    strcpy (pattern, FReq->rf_Pat);

	    AddPart (dir, file, PATHSIZE);

	    av[0] = (UBYTE *)"i";
	    av[1] = (UBYTE *)dir;

	    do_edit ();
	} else
	{
	    SETF_ABORTCOMMAND(Ep,1);
	    CurrentDir (oldlock);
	}
    } else
    {
	do_reqinsfile ();
    }
} /* do_aslinsfile */


/*DEFHELP #cmd requester,font ARPFONT - SETFONT with fontrequester */

DEFUSERCMD("arpfont", 0, CF_VWM, void, do_aslfont, (void),)
{
    if (AslBase)
    {
	struct FontRequester *fontreq;

#ifdef _DCC
	ULONG fwin = (ULONG)Ep->win;  /* put ASL on correct screen */
#endif

	struct TagItem FontTags[] =
	{   /* DICE 2.06.37 allows us to initialize this here... */
#ifdef _DCC
	    ASL_Window,     fwin,
	    ASL_LeftEdge,   Ep->config.aslleft + Ep->win->LeftEdge,	/* use config coords */
	    ASL_TopEdge,    Ep->config.asltop + Ep->win->TopEdge,
	    ASL_Hail,	    (ULONG)_REQ_fixed_width_font,
#else
	    ASL_Window,     0L,
	    ASL_LeftEdge,   0L,
	    ASL_TopEdge,    0L,
	    ASL_Hail,	    0L,
#endif
	    ASL_FuncFlags,  FILF_NEWIDCMP | FONF_FIXEDWIDTH,
	    /* Removed Min & MaxHeight since I cannot figure out what the
	       user may want */
	    TAG_DONE
	};

#ifndef _DCC
	FontTags[0].ti_Data = (ULONG)Ep->win;
	FontTags[1].ti_Data = Ep->config.aslleft + Ep->win->LeftEdge;
	FontTags[2].ti_Data = Ep->config.asltop + Ep->win->TopEdge;
DEFMESSAGE( _REQ_fixed_width_font, "XDME fixed width font" )
	FontTags[3].ti_Data = (ULONG)_REQ_fixed_width_font;
#endif

	if ((fontreq = (struct FontRequester *)
				AllocAslRequest (ASL_FontRequest,FontTags) ))
	{

	    if (AslRequest (fontreq, NULL))
	    {

		/*  Since we have GetFont() already, just pass
		 *   the name and size from fontreq's TextAttr to it.
		 *
		 *  What follows mimics SETFONT (in cmnd3.c)
		 */

		FONT * font = (FONT *)GetFont( fontreq->fo_Attr.ta_Name,
					     (short) fontreq->fo_Attr.ta_YSize );
		ED * ep = Ep;

		if (font)
		{
		    if (ep->font)
			CloseFont (ep->font);

		    ep->font = font;

		    SetFont (ep->win->RPort, font);
		    SetRast (ep->win->RPort, 0);

		    RefreshWindowFrame (ep->win);

		    set_window_params ();

		    text_adjust (TRUE);
		} else
		{
DEFMESSAGE( _REQ_cant_find_font, "%s:\nUnable to find font\n%s/%ld" )
		    error (_REQ_cant_find_font, av[0], fontreq->fo_Attr.ta_Name,
			   fontreq->fo_Attr.ta_YSize);
		}
	    }
	    else
		SETF_ABORTCOMMAND(Ep,1);

	    FreeAslRequest (fontreq);
	}
	else
	{
	    nomemory ();
	}
    } else
    {
	do_reqfont ();
    }
} /* do_aslfont */


/*  this little kludge gets a DIR: string for the ASL requester
 */

Prototype void fixdirname (char * dir);

void fixdirname (char * dir)
{
    if (!strlen (dir))
    {		      /* if no DIR; KLUDGE ALERT! */
	if (NameFromLock (Ep->dirlock, dir, PATHSIZE)!=DOSTRUE)
	{
	    dir[0] = 0; /* assumes NameFromLock doesn't clean up on err(??) */
	}
    }
} /* fixdirname */


/*
 *  Search backwards for first ':' or '/' and split path there.
 *  This subroutine may appear to be coded incorrectly to a novice
 *  programmer.  It isn't [now].
 */

Prototype void splitpath (char * name, char * file, char * dir);

void splitpath (char * name, char * file, char * dir)
{
    int i;

    strcpy (file, FilePart (name));

    i = (long)PathPart (name) - (long)name;

    movmem (name, dir, i);
    dir[i] = 0;
} /* splitpath */


/*
 *  The REQ interface uses the reqtools.library if it exists, else tries to
 *  use the ARP interfafce.
 */

/*DEFHELP #cmd requester,io REQLOAD - NEWFILE with ReqTools filerequester */

DEFUSERCMD("reqload", 0, CF_VWM, void, do_reqload, (void),)
{
    BPTR oldlock = CurrentDir (Ep->dirlock);

    splitpath (Ep->name, file, dir);

DEFMESSAGE( __unnamed, "unnamed" )
    if (!stricmp (file, __unnamed))
	*file = 0;

    fixdirname (dir);

    if (ReqToolsBase)
    {		     /* If we have req.library & requester */
	if (!RFReq)
	    RFReq = rtAllocRequestA (RT_FILEREQ, NULL);

	if (!RFReq)
	{
	    nomemory ();
	    return;
	}

	rtChangeReqAttr (RFReq, RTFI_Dir, dir, TAG_DONE);

DEFMESSAGE( _REQ_load_new_file, "XDME Load New File" )
	if (rtFileRequest (RFReq, file, _REQ_load_new_file,
DEFMESSAGE( _REQ_ok_load, "Load" )
		RTFI_OkText,	_REQ_ok_load,
		RT_Window,	Ep->win,
		RT_ReqPos,	REQPOS_TOPLEFTSCR,
		RT_LeftOffset,	Ep->config.aslleft,
		RT_TopOffset,	Ep->config.asltop,
		RTFI_Height,	Ep->config.aslheight,
		TAG_DONE ))
		{
	    BPTR newlock;

	    if ((newlock = Lock (RFReq->Dir, SHARED_LOCK)))
	    {
		BPTR cd = CurrentDir (oldlock);

		Ep->dirlock = (long)newlock;

		strcpy (dir, RFReq->Dir);
		AddPart (dir, file, PATHSIZE);

		av[0] = (UBYTE *)"n";
		av[1] = (UBYTE *) file;

		if (do_edit () == -1)
		{
		    Ep->dirlock = (long)cd;
		    UnLock (newlock);
		}
		else
		    UnLock (cd);
	    }
	} else
	{
	    SETF_ABORTCOMMAND(Ep,1);
	    CurrentDir (oldlock);
	}
    } else
    {		   /* no req.library? Gulp */
	if (AslBase)
DEFMESSAGE( _REQ_try_arp, "%s:\nNo ReqTools.Library\nTry ARP equivalent" )
	    error (_REQ_try_arp, av[0]);
	else
DEFMESSAGE( _REQ_need_req_or_asl, "For filerequester,\nI need REQ- or ASL.LIBRARY !" )
	    error (_REQ_need_req_or_asl);
    }
} /* do_reqload */


Prototype int reqsave (void);

int reqsave (void)
{
    BPTR oldlock = CurrentDir(Ep->dirlock);

    splitpath (Ep->name, file, dir);

DEFMESSAGE( __unnamed, "unnamed" )
    if (!stricmp (file, __unnamed))
	*file = 0;

    fixdirname (dir);

    if (ReqToolsBase)
    {		     /* If we have req.library & requester */
	if (!RFReq)
	    RFReq = rtAllocRequestA (RT_FILEREQ, NULL);

	if (!RFReq)
	{
	    nomemory ();
	    return (FALSE);
	}

	rtChangeReqAttr (RFReq, RTFI_Dir, dir, TAG_DONE);

loop:
DEFMESSAGE( _REQ_save_file, "XDME Save File" )
	if (rtFileRequest (RFReq, file, _REQ_save_file,
DEFMESSAGE( _REQ_save_ok, "Save" )
		RTFI_OkText,	_REQ_save_ok,
		RT_Window,	Ep->win,
		RTFI_Flags,	FREQF_SAVE,
		RT_ReqPos,	REQPOS_TOPLEFTSCR,
		RT_LeftOffset,	Ep->config.aslleft,
		RT_TopOffset,	Ep->config.asltop,
		RTFI_Height,	Ep->config.aslheight,
		TAG_DONE ))
	{
	    BPTR tmp_lock;

DEFMESSAGE( __unnamed, "unnamed" )
	    if (!stricmp (file, __unnamed))
	    {
DEFMESSAGE( _REQ_cant_saveas_unnamed, "%s:\nCannot save file as\n`unnamed'" )
		error (_REQ_cant_saveas_unnamed, av[0], __unnamed);
		goto loop;
	    }

	    CurrentDir (oldlock);

	    strcpy (dir, RFReq->Dir);
	    AddPart (dir, file, PATHSIZE);

	    if (!*file)
	    {
DEFMESSAGE( _REQ_a_name_is_needed, "%s:\nYou must specify a name" )
		error (_REQ_a_name_is_needed, av[0]);
		goto loop;
	    }

	    av[1] = (UBYTE *)dir;

	    if ((tmp_lock = Lock (dir, ACCESS_READ)))
	    {
		UnLock (tmp_lock);

DEFMESSAGE( __xdme_warning, "XDME Warning" )
		if (!getyn (__xdme_warning,
DEFMESSAGE( _REQ_file_exists_overwrite, "The file\n`%s'\ndoes already exist.Do you want to overwrite it ?" )
			_REQ_file_exists_overwrite,
DEFMESSAGE( __ok_cancel, "Yes|No" )
			__ok_cancel, dir) )
		    return (FALSE);
	    }

	    return (do_saveas ());
	} else
	{
	    SETF_ABORTCOMMAND(Ep,1);
	    CurrentDir (oldlock);
	}
    } else
    {
	if (AslBase)
DEFMESSAGE( _REQ_try_arp, "%s:\nNo ReqTools.Library\nTry ARP equivalent" )
	    error (_REQ_try_arp, av[0]);
	else
DEFMESSAGE( _REQ_need_req_or_asl, "For filerequester,\nI need REQ- or ASL.LIBRARY !" )
	    error (_REQ_need_req_or_asl);
    }

    return (FALSE);
} /* reqsave */


/*DEFHELP #cmd requester,io REQINSFILE - INSFILE with ReqTools filerequester */

DEFUSERCMD("reqinsfile", 0, 0, void, do_reqinsfile, (void),)
{
    BPTR oldlock = CurrentDir (Ep->dirlock);

    splitpath (Ep->name, file, dir);

DEFMESSAGE( __unnamed, "unnamed" )
    if (!stricmp (file, __unnamed))
	*file = 0;

    fixdirname (dir);

    if (ReqToolsBase)
    {		     /* If we have req.library & requester */
	if (!RFReq)
	    RFReq = rtAllocRequestA (RT_FILEREQ, NULL);

	if (!RFReq)
	{
	    nomemory ();
	    return;
	}

	rtChangeReqAttr (RFReq, RTFI_Dir, dir, TAG_DONE);

DEFMESSAGE( _REQ_insert_file, "XDME Insert File" )
	if (rtFileRequest (RFReq, file, _REQ_insert_file,
DEFMESSAGE( _REQ_ok_insert, "Insert" )
		RTFI_OkText,	_REQ_ok_insert,
		RT_ReqPos,	REQPOS_TOPLEFTSCR,
		RT_Window,	Ep->win,
		RT_LeftOffset,	Ep->config.aslleft,
		RT_TopOffset,	Ep->config.asltop,
		RTFI_Height,	Ep->config.aslheight,
		TAG_DONE ))
	{

	    CurrentDir (oldlock);

	    strcpy (dir, RFReq->Dir);
	    AddPart (dir, file, PATHSIZE);

	    av[0] = (UBYTE *)"i";
	    av[1] = (UBYTE *)file;

	    do_edit ();
	} else
	{
	    SETF_ABORTCOMMAND(Ep,1);
	    CurrentDir (oldlock);
	}
    } else
    {
	if (AslBase)
DEFMESSAGE( _REQ_try_arp, "%s:\nNo ReqTools.Library\nTry ARP equivalent" )
	    error (_REQ_try_arp, av[0]);
	else
DEFMESSAGE( _REQ_need_req_or_asl, "For filerequester,\nI need REQ- or ASL.LIBRARY !" )
	    error (_REQ_need_req_or_asl, av[0]);
    }
} /* do_reqinsfile */


/*DEFHELP #cmd requester,io REQFONT - SETFONT with ReqTools fontrequester */

DEFUSERCMD("reqfont", 0, CF_VWM, void, do_reqfont, (void),)
{
    if (ReqToolsBase)
    {
	struct rtFontRequester *fontreq;

#ifdef _DCC
	struct Window *fwin = Ep->win;	/* put ASL on correct screen */
#endif

	struct TagItem FontTags[] =
	{   /* DICE 2.06.37 allows us to initialize this here... */
#ifdef _DCC
	    RT_Window,	    fwin,
#else
	    RT_Window,	    NULL,
#endif
	    RTFO_MinHeight, 6,
	    RTFO_MaxHeight, 24,
	    RTFO_Flags,     FREQF_FIXEDWIDTH, /* | FILF_NEWIDCMP */
	    TAG_DONE };

#ifndef _DCC
	    FontTags[0].ti_Data = (ULONG)Ep->win;
#endif

	if ((fontreq = rtAllocRequestA (RT_FONTREQ, NULL)))
	{
DEFMESSAGE( _REQ_fixed_width_font, "XDME fixed width font" )
	    if (rtFontRequestA (fontreq, _REQ_fixed_width_font, FontTags))
	    {

		/*  Since we have GetFont() already, just pass
		 *   the name and size from fontreq's TextAttr to it.
		 *
		 *  What follows mimics SETFONT (in cmnd3.c)
		 */

		FONT * font = (FONT *)GetFont (fontreq->Attr.ta_Name,
					     (short) fontreq->Attr.ta_YSize );
		ED   * ep   = Ep;

		if (font)
		{
		    if (ep->font)
			CloseFont (ep->font);

		    ep->font = font;

		    SetFont (ep->win->RPort, font);
		    SetRast (ep->win->RPort, 0);

		    RefreshWindowFrame (ep->win);
		    set_window_params ();

		    text_adjust (TRUE);
		} else
		{
DEFMESSAGE( _REQ_cant_find_font, "%s:\nUnable to find font\n%s/%ld" )
		    error (_REQ_cant_find_font, av[0], fontreq->Attr.ta_Name,
			   fontreq->Attr.ta_YSize);
		}
	    }
	    else
		SETF_ABORTCOMMAND(Ep,1);

	    rtFreeRequest (fontreq);
	} else
	{
	    nomemory ();
	}
    } else
    {
	if (AslBase)
DEFMESSAGE( _REQ_try_arp, "%s:\nNo ReqTools.Library\nTry ARP equivalent" )
	    error (_REQ_try_arp, av[0]);
	else
DEFMESSAGE( _REQ_font_need_req_or_asl, "For fontrequester,\nI need REQ- or ASL.LIBRARY !" )
	    error (_REQ_font_need_req_or_asl);
    }
} /* do_reqfont */


/******************************************************************************
*****  ENDE filereq.c
******************************************************************************/
