<l>
/* Listing #15 */

#include <workbench/startup.h>
#include <proto/icon.h>
#include <proto/dos.h>
#include <string.h>

#define ARG_FILE 0
#define ARG_QUICK 1
#define ARG_BUFFER 2
#define TEMPLATE "FILE/K,QUICK/S,BUFFER=BUF/K/N"

LONG buf=10;
LONG args[]={(LONG)"plik-domyôlny", FALSE, (LONG)&buf};

int main(int argc, char *argv[])
{
	struct RDArgs *rda=NULL;
	struct DiskObject *dob=NULL;
	BPTR out;

	if (argc)
	{
		if (!(rda=ReadArgs(TEMPLATE, args, NULL)))
		{
			PrintFault(IoErr(), argv[0]);
			return 10;
		}
		out=Output();
	}
	else
	{	/* Zakîadamy, ûe kompilator sam otworzy "icon.library". */
		struct WBStartup *wbs=(struct WBStartup*)argv;
		struct WBArg *wba=&wbs->sm_ArgList[wbs->sm_NumArgs-1];
		BPTR oldcd;

		if (!(*wba->wa_Name))
			return 10;

		oldcd=CurrentDir(wba->wa_Lock);
		if (dob=GetDiskObjectNew(wba->wa_Name))
		{
			char *str;
			LONG num;
			if (str=FindToolType(dob->do_ToolTypes, "FILE"))
				args[ARG_FILE]=(LONG)str;
			if (str=FindToolType(dob->do_ToolTypes, "QUICK"))
			{
				if (MatchToolValue(str,"YES"))
					args[ARG_QUICK]=TRUE;
				if (MatchToolValue(str,"NO"))
					args[ARG_QUICK]=FALSE;
			}
			if ((str=FindToolType(dob->do_ToolTypes, "BUFFER")) && StrToLong(str, &num)>0)
				*(LONG*)args[ARG_BUFFER]=num;
		}
		CurrentDir(oldcd);
		out=Open("CON:////Okienko/AUTO/CLOSE/WAIT", MODE_NEWFILE);
	}

	if (out)
	{
		FPrintf(out,"FILE\t: %s\n", args[ARG_FILE]);
		FPrintf(out,"QUICK\t: %s\n", (args[ARG_QUICK] ? "YES" : "NO"));
		FPrintf(out,"BUFFER\t: %ld\n", *(LONG*)args[ARG_BUFFER]);
	}
	if (rda)
		FreeArgs(rda);
	if (dob)
		FreeDiskObject(dob);
	return 0;
}

#ifdef _DCC
int wbmain(struct WBStartup* wbs)
{
	return main(0, (char**)wbs);
}
#endif
