Files
xv6-custom-os/sysproc.c
iDunnoDev c65c58a954 Added the drawtitle function to console
Added ability to pick a bg preset for the title bar
Added counting program
Added function to set the current consoles title name
Removed some of the debug code
2022-12-16 15:23:38 +00:00

152 lines
2.3 KiB
C

#include "types.h"
#include "x86.h"
#include "defs.h"
#include "date.h"
#include "param.h"
#include "memlayout.h"
#include "mmu.h"
#include "proc.h"
int sys_fork(void)
{
return fork();
}
int sys_exit(void)
{
exit();
return 0; // not reached
}
int sys_wait(void)
{
return wait();
}
int sys_kill(void)
{
int pid;
if (argint(0, &pid) < 0)
{
return -1;
}
return kill(pid);
}
int sys_getpid(void)
{
return myproc()->pid;
}
int sys_sbrk(void)
{
int addr;
int n;
if (argint(0, &n) < 0)
{
return -1;
}
addr = myproc()->sz;
if (growproc(n) < 0)
{
return -1;
}
return addr;
}
int sys_sleep(void)
{
int n;
uint ticks0;
if (argint(0, &n) < 0)
{
return -1;
}
acquire(&tickslock);
ticks0 = ticks;
while (ticks - ticks0 < n)
{
if (myproc()->killed)
{
release(&tickslock);
return -1;
}
sleep(&ticks, &tickslock);
}
release(&tickslock);
return 0;
}
// return how many clock tick interrupts have occurred
// since start.
int sys_uptime(void)
{
uint xticks;
acquire(&tickslock);
xticks = ticks;
release(&tickslock);
return xticks;
}
int sys_greeting(void)
{
cprintf("Hello again\n");
cprintf("Using Console: %d\n", getcurrentconsoleindex());
cprintf("Current PID: %d\n", myproc()->pid);
cprintf("Current Parent PID: %d\n", myproc()->parent->pid);
//cprintf("Process Console: %d\n", myproc()->consoleptr->consoleindex);
return 0;
}
int sys_shutdown(void)
{
int restart;
if (argint(0, &restart) < 0)
{
return -1;
}
if (restart == 1)
{
unsigned char good = 0x02;
while (good & 0x02) {
good = inb(0x64);
}
outb(0x64, 0xFE);
}
else
{
outw(0x604, 0x2000);
}
return 0;
}
int sys_screen(void)
{
struct proc *curproc = myproc();
int result = 0;
struct vconsole* consoleptr = 0;
int bgcol;
if (argint(0, &bgcol) < 0)
{
return -1;
}
if ((consoleptr = newconsole(bgcol)) != 0)
{
curproc->consoleptr = consoleptr;
switchtoconsole(consoleptr);
result = 1;
}
return result;
}
int sys_cls(void)
{
clearscreen();
return 0;
}