Mercurial > sos > sos
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 }