Files
afs2026-hw1/code/userprog/ksyscall.h

80 lines
2.0 KiB
C
Executable File

/**************************************************************
*
* userprog/ksyscall.h
*
* Kernel interface for systemcalls
*
* by Marcus Voelp (c) Universitaet Karlsruhe
*
**************************************************************/
#ifndef __USERPROG_KSYSCALL_H__
#define __USERPROG_KSYSCALL_H__
#define INT_BUF_LENGTH 13
#include "kernel.h"
#include "synchconsole.h"
void SysHalt()
{
kernel->interrupt->Halt();
}
int SysAdd(int op1, int op2)
{
return op1 + op2;
}
int SysCreate(char *filename)
{
// return value
// 1: success
// 0: failed
return kernel->interrupt->CreateFile(filename);
}
void SysPrintInt(int value) {
kernel->interrupt->PrintInt(value);
}
OpenFileId SysOpen(char *name) {
for (int i = 0; i < 20; i++)
if (kernel->fileSystem->fileDescriptorTable[i] == NULL) {
kernel->fileSystem->fileDescriptorTable[i]
= kernel->fileSystem->Open(name);
if (kernel->fileSystem->fileDescriptorTable[i] == NULL)
return -1;
return i + 1; // OpenFileId starts from 1
}
return -1;
}
int SysWrite(char *buffer, int size, OpenFileId id) {
int idx = id - 1; // Convert 1-based id to 0-based index
if (idx < 0 || idx >= 20 || kernel->fileSystem->fileDescriptorTable[idx] == NULL)
return -1;
return kernel->fileSystem->fileDescriptorTable[idx]->Write(buffer, size);
}
int SysRead(char *buffer, int size, OpenFileId id) {
int idx = id - 1; // Convert 1-based id to 0-based index
if (idx < 0 || idx >= 20 || kernel->fileSystem->fileDescriptorTable[idx] == NULL)
return -1;
return kernel->fileSystem->fileDescriptorTable[idx]->Read(buffer, size);
}
int SysClose(OpenFileId id) {
int idx = id - 1; // Convert 1-based id to 0-based index
if (idx < 0 || idx >= 20 || kernel->fileSystem->fileDescriptorTable[idx] == NULL)
return 0;
delete kernel->fileSystem->fileDescriptorTable[idx];
kernel->fileSystem->fileDescriptorTable[idx] = NULL;
return 1;
}
#endif /* ! __USERPROG_KSYSCALL_H__ */