<l>
/* Listing #14 */

#include <exec/memory.h>

#include <proto/dos.h>
#include <proto/exec.h>

#include <string.h>

#define BUFF 512
#define PLIKDOC "ram:ala ma kota"

char data[LEN_DATSTRING], godzina[LEN_DATSTRING];
struct DateTime dat;
char buff[BUFF]="PROGDIR:";

int main(int argc, char *argv[])
{
	BPTR lock, in, out;
	long read;
	struct FileInfoBlock *fib;

	if (in=Open(strcat(buff, argv[0]), MODE_OLDFILE))
	{
		if (out=Open(PLIKDOC, MODE_NEWFILE))
		{
			while ((read=Read(in, buff, BUFF))>0)
				if (Write(out, buff, read)!=read)
					PrintFault(IoErr(), PLIKDOC);
			if (read==-1)
				PrintFault(IoErr(), argv[0]);
			Close(out);
		}
		else
			PrintFault(IoErr(), PLIKDOC);
		Close(in);
	}
	else
		PrintFault(IoErr(), buff);

	if (fib=AllocMem(sizeof(struct FileInfoBlock), MEMF_PUBLIC))
	{
		if (lock=Lock("PROGDIR:", SHARED_LOCK))
		{
			if (Examine(lock, fib))
			{
				Printf("Znajduj‘ si‘ w katalogu %s\n", fib->fib_FileName);
				while (ExNext(lock, fib))
				{
					if (!(fib->fib_Protection & FIBF_EXECUTE))
						Printf("\033[1m"); /* Wyt’uszczenie tekstu. */
					Printf("Nazwa %8s: %30s", (fib->fib_DirEntryType<0 ? "pliku" : "katalogu"), fib->fib_FileName);
					dat.dat_Stamp=fib->fib_Date;
					dat.dat_Format=FORMAT_DOS; /* dd-mmm-yy */
					dat.dat_StrDate=data;      /* Miejsce na wpisanie daty. */
					dat.dat_StrTime=godzina;   /*   -- // --       godziny. */
					if (DateToStr(&dat))
						Printf(" %s %s\n", data, godzina);
					else
						Printf("\n");
					Printf("\033[0m"); /* Wy’ęczenie atrybutów. */
				}
				if (IoErr()!=ERROR_NO_MORE_ENTRIES)
					PrintFault(IoErr(), "ExNext");
			}
			else
				PrintFault(IoErr(), "Examine");
			UnLock(lock);
		}
		else
			PrintFault(IoErr(), "Lock");
		FreeMem(fib, sizeof(struct FileInfoBlock));
	}
	else
		PrintFault(ERROR_NO_FREE_STORE, "AllocMem");
	return 0;
}
