Note: This file does not display well in WWW. Just save this file as lsof.c and remove everything above the <PRE> next and the </PRE> at the end.
/* to be compiled with EMX/gcc */

#include 
#include 
#include 
#include 
#include "dosqss.h"

extern APIRET APIENTRY DosQuerySysState (ULONG func, 
				ULONG par1, ULONG pid, ULONG _reserved_,
				PVOID buf,
				ULONG bufsz);

static void dump_files(PQTOPLEVEL);

main(void)
{
	int i;
	APIRET rc;

#define BUFSIZE 128000l
#define RESERVED 0
	char *buf = malloc(BUFSIZE);
	memset(buf,0,BUFSIZE);

	rc = DosQuerySysState(0x1f, RESERVED, RESERVED, RESERVED, (PCHAR)buf, BUFSIZE);

	if (!rc) {
		PQTOPLEVEL top = (PQTOPLEVEL)buf;
		dump_files(top);
	}
}

static void dump_files(PQTOPLEVEL top)
{
	PQFILE f = (PQFILE)top->filedata;
	PQFDS fd;

	printf("SFN   Opncnt  Flags   Accmode    Size   Volhnd Attrib Name\n");
	printf("----- ------ -------- -------- -------- ------ ------ ----------------\n");

	while (f && f->rectype == 8) {
		fd = f->filedata;
		printf("%5x %6d %08x %08x %8d %05x ",
			fd->sfn,
			f->opencnt,
			fd->flags,
			fd->accmode,
			fd->filesize,
			fd->volhnd);
		putchar((fd->attrib & 0x20) ? 'A' : '-');
		putchar((fd->attrib & 0x10) ? 'D' : '-');
 		putchar((fd->attrib & 0x08) ? 'L' : '-');
		putchar((fd->attrib & 0x04) ? 'S' : '-');
		putchar((fd->attrib & 0x02) ? 'H' : '-');
		putchar((fd->attrib & 0x01) ? 'R' : '-');
		printf(" %s\n",f->name);
		f = f->next;
	}
}