view src/os/scall.c @ 160:3d891b634acb default tip

Fix to make make work
author Jonathan Pevarnek <pevarnj@gmail.com>
date Fri, 25 Nov 2011 23:27:09 -0500
parents 21a0692ee656
children
line wrap: on
line source

#include <os/scall.h>
#include <os/svcNums.h>
#include <os/fs.h>
#include <os/svc.h>
#include <os/heap.h>
#include <memStack.h>

MemStack *ms = NULL;

void end_program()
{
	if(ms) {
		msDestroy(ms, freeHeap);
		ms = NULL;
	}
	setcontext_pcb(&shellPCB);
}

u64 svc_handler(u64 callCode, u64 a, u64 b, u64 c, u64 d)
{
	PCB pcb;
	void* point;
	savecontext_pcb(&pcb);
	switch(callCode) {
		case SVC_EXIT:
			end_program();
			break;
		case SVC_PRINT: //print
			pcb.registers[2] = putline((char*)a, (u32)b);
			break;
		case SVC_READ:
			pcb.registers[2] = getline((char*)a, (u32)b);
			break;
		case SVC_FINFO:
			pcb.registers[2] = getFInfo(a, (void*) b);
			break;
		case SVC_GETHEAP:
			point = allocHeap(a, (void*)b);
			if(!ms) ms = msInit();
			if(ms) {
				msPush(ms, point);
				pcb.registers[2] = (u64)point;
			} else {
				pcb.registers[2] = 0;
			}
			break;
		default:
			pcb.registers[2] = -1; //TODO HACK
			break;
	}
	setcontext_pcb(&pcb);
	return -1; //the code should never get here
}