Xinu7/src/sys/sys/dudir.c

/* dudir.c - dudir */

#include <conf.h>
#include <kernel.h>
#include <io.h>
#include <disk.h>
#include <lfile.h>
#include <dir.h>

/*------------------------------------------------------------------------
 *  dudir  --  print file system directory in readable form on CONSOLE
 *------------------------------------------------------------------------
 */
dudir(diskdev)
int	diskdev;
{
	DBADDR	firstdb, lastdb;
	struct	dir	*dirptr;
	struct	fdes	*fdptr;
	int	i, l;
	char	ps;

	if (isbaddev(diskdev))
		return(SYSERR);
	dirptr = dsdirec(diskdev);
	if (dirptr->d_nfiles < 0 || dirptr->d_nfiles > NFDES
			|| dirptr->d_iblks < 0) {
		kprintf("\n\nError: invalid directory format");
		kprintf(" (id=%d , #files=%d)\n",dirptr->d_id,
				dirptr->d_nfiles);
		return(SYSERR);
	}
	kprintf("\n***Directory     %d files      ", dirptr->d_nfiles);
	kprintf("(free lists: i=%d/%d, d=%d, id=%d)\n",
		dirptr->d_filst, dirptr->d_iblks,
		dirptr->d_fblst, dirptr->d_id);
	if (dirptr->d_nfiles == 0)
		return(OK);
	kprintf("\nFile        Name       Size   First iblock\n");
	for (i=0 ; i<dirptr->d_nfiles ; i++) {
		fdptr = &(dirptr->d_files[i]);
		kprintf("%3d       ",i+1);
		if ((l=strlen(fdptr->fdname))<=0 || l>=FDNLEN)
			kprintf("*ERROR*\n");
		else
			kprintf("%-10s%7D%11d\n",fdptr->fdname,
				fdptr->fdlen, fdptr->fdiba);
	}
	return(OK);
}