
/*
 *  kd_freq.library Extended Select Test
 *
 *  Tested on Manx 3.60a.
 */

#include "KDBase.h"

UBYTE directory[128];
UBYTE filename[32];
UBYTE pattern[32];

/* for Manx.. we don't need any parsing */
void  _wb_parse() {}
void _cli_parse() {}

struct Library *KD_FReqBase, *OpenLibrary();

struct ExtraData extras;

main()
	{
	register struct FileList *ext;

    KD_FReqBase = OpenLibrary(KLIBNAME,KLIBVERSION);

    if (KD_FReqBase) 
		{
        /* Make sure that all default strings are zero'd out. */
		directory[0] = filename[0] = pattern[0] = 0;

        /* Set default wildcard pattern */
		/* strcpy(pattern,"#?.?"); */

        /* Call file requester */

		extras.oktext     = (UBYTE *) "Load";
		extras.canceltext = (UBYTE *) "No Way!";

        if (FReq(NULL,
			"Extended Select Test",
            filename,directory,pattern, FR_CANCELTEXT | FR_EXTENDEDSELECT |
			FR_OKTEXT | FR_AUTOPOSITION | FR_AUTOSIZE | FR_NOINFO | FR_SCREENFONT
			,&extras))
            {	
			/* You can immediately strcat(directory,filename); since
				directory will contain the valid file seperator (either
				/ or : at the end of the directory name
			*/

    		printf("Directory: %s\nFile     : %s\n",directory,filename);

			if (extras.ExtendedList)	/* Check if the user selected a */
				{						/* list of files. */
				ext = extras.ExtendedList;

				printf("\nExtended Select List:  (%ld bytes)\n\n",ext->private);
				printf("    Size  File Name\n");
				printf(" -------  -----------------------------------------\n");

				/* This just prints out the selected files and their size. */
				for (; ext; ext = ext->next)
					{
					printf("%8ld  %s%s\n",ext->FileSize,directory,ext->FileName);
					} 

				/* VERY IMPORTANT!!  YOU MUST HAVE THIS IN! */
				/* If the call returned a pointer to an ExtendedList */
				/* then you must free it before you exit with the following */
				/* FreeMem() call. */
				/* You can also just leave the extras.ExtendedList pointer */
				/* in the extras struct when you call FReq() again.  Freq() */
				/* In this case will FreeMem() the list for you and give you */
				/* a new one if need be. */
				FreeMem(extras.ExtendedList,extras.ExtendedList->private);

				/* Clear out list pointer so that a subsequent call to FReq() */
				/* doesn't try to FreeMem() it. */
				extras.ExtendedList = NULL;

				}	
            }
        else
            {
            printf("Requester Cancelled!\n");
            }

		CloseLibrary(KD_FReqBase);
   	 	}
 	else 
		{
		printf("Can't Open 'kd_freq.library'.  Make sure it is in LIBS:\n");
    	}
	}
