view src/testFS.c @ 118:6186160278c9

I should probably exit the program when it finishes..
author Jonathan Pevarnek <pevarnj@gmail.com>
date Thu, 16 Jun 2011 12:51:43 -0400
parents 1144f2491a39
children
line wrap: on
line source

#include <std.h>
#include <os/fs.h>
#include <error.h>

void dumpText(char *text, int size)
{
	do {
		putline(text, (size > CON_LEN)?CON_LEN:size);
		size -= CON_LEN;
		text += CON_LEN;
	} while(size > 0);
}

u32 listFiles()
{
	size_t i;
	for(i = 0; 1; i++) {
		Direntry de;
		ErrCode err = getFInfo(i, &de);
		if(err == mkError(MODFS, OUTOFRANGE, WARN)) break;
		else if(isError(err)) return err;
		printFname(de.fname), sPrint("\n");
	}
	return 0;
}

void start(u64 __memsize)
{
	init_all(__memsize);
	char buffer[256];
	if(isError(init_fs(0x100, __memsize))) goto END;

	while(1) {
		sPrint("Please select a mode:\n0: show file text\n1: make new file\n2: Append to file\n");
		sPrint("3: Delete File\n4: Write to file\n");
		sGet(buffer, 30);
		int mode = atoi(buffer);
		switch(mode) {
			case 0:
				{
					if(isError(listFiles())) sPrint("WARNING: ERROR IN READING FILE NAMES\n");
					char fname[28];
					sPrint("Please enter the file to read: ");
					getFname(fname);
					u32 fid;
					ErrCode err = lookupFile(fname, &fid);
					if(isError(err)) {
						if(errCode(err) == NOTFILE) sPrint("ERROR: Invalid file name\n");
						continue;
					}
					u32 fileSize;
					if(isError(getFileSize(fid, &fileSize))) continue;
					char *text = malloc(fileSize);
					if(!text) continue;
					if(isError(getFileData(fid, text))) {
						free(text);
						continue;
					}
					dumpText(text, fileSize);
					free(text);
				}
				break;
			case 1:
				{
					char fname[28];
					sPrint("Please enter a name for the new file: ");
					getFname(fname);
					u32 dummy; //I do not care about the fid personally
					if(isError(makeFile(fname, &dummy))) {
						sPrint("ERROR\n");
						continue;
					}
				}
				break;
			case 2:
				{
					if(isError(listFiles())) sPrint("WARNING: ERROR IN READING FILE NAMES\n");
					char fname[28];
					sPrint("Please enter the file to write to: ");
					getFname(fname);
					u32 fid;
					ErrCode err = lookupFile(fname, &fid);
					if(isError(err)) {
						if(errCode(err) == NOTFILE) sPrint("ERROR: Invalid file name\n");
						continue;
					}
					sPrint("Please enter the text to append to the file: ");
					u32 size = getline(buffer, CON_LEN);
					if(isError(fileAppend(fid, buffer, size))) {
						sPrint("ERROR\n");
						continue;
					}
				}
				break;
			case 3:
				{
					if(isError(listFiles())) sPrint("WARNING: ERROR IN READING FILE NAMES\n");
					char fname[28];
					sPrint("Please enter the file to delete: ");
					getFname(fname);
					u32 fid;
					ErrCode err = lookupFile(fname, &fid);
					if(isError(err)) {
						if(errCode(err) == NOTFILE) sPrint("ERROR: Invalid file name\n");
						continue;
					}
					if(isError(deleteFile(fid))) {
						sPrint("ERROR\n");
						continue;
					}
				}
				break;
			case 4:
				{
					if(isError(listFiles())) sPrint("WARNING: ERROR IN READING FILE NAMES\n");
					char fname[28];
					sPrint("Please enter the file to write text to: ");
					getFname(fname);
					u32 fid;
					ErrCode err = lookupFile(fname, &fid);
					if(isError(err)) {
						if(errCode(err) == NOTFILE) sPrint("ERROR: Invalid file name\n");
						continue;
					}
					sPrint("Please enter the offset for the text: ");
					sGet(buffer, 30);
					unsigned int offset = atoi(buffer);
					sPrint("Please enter the text to append to the file: ");
					u32 size = getline(buffer, CON_LEN);
					if(isError(fileWrite(fid, buffer, size, offset))) {
						sPrint("ERROR\n");
						continue;
					}
				}
				break;
		}
	}

END:
	sPrint("DONE\n");
	for(;;) {
		sGet(buffer, 0);
	}
}