Files
xv6-custom-os/sysproc.c
iDunnoDev c23d669858 Added draw menu, vars and additional functions needed for it
Added some functionality to the procdump to show the current console and parent pids of processes for debugging
Added var to clearconsole that enables the internal lock if one wasnt prelocked before hand
Fixed issue where race conditions would stop the title from drawing by drawing it to the buffer too
Fixed issue where the maze function was spamming the conswrite and cons lock by changing it to send an entire line instead of 1 char at a time
2022-12-23 00:48:57 +00:00

159 lines
2.4 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", getconsoleindex(myproc()->consoleptr));
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;
char *title;
if (argint(1, &bgcol) < 0)
{
return -1;
}
if (argstr(0, &title) < 0)
{
return -1;
}
if ((consoleptr = newconsole(title, bgcol)) != 0)
{
curproc->consoleptr = consoleptr;
switchtoconsole(consoleptr);
result = 1;
}
return result;
}
int sys_cls(void)
{
clearscreen(0);
return 0;
}