76 lines
1.6 KiB
C
76 lines
1.6 KiB
C
// this code is licenced under Wrathmark licence
|
|
// © 2026 wullie wulliestudio.com
|
|
// please see attached licence for full usage and rights
|
|
|
|
#include "stdWullie.h"
|
|
|
|
// syscall1
|
|
long syscall1(long number, long arg1){
|
|
long result;
|
|
|
|
// asm for a system call with one arg
|
|
__asm__ __volatile(
|
|
"syscall"
|
|
: "=a"(result)
|
|
: "a"(number), "D"(arg1)
|
|
: "rcx", "r11", "memory"
|
|
);
|
|
|
|
return result;
|
|
}
|
|
|
|
// syscall3
|
|
long syscall3(long number, long arg1, long arg2, long arg3){
|
|
|
|
long result;
|
|
|
|
// asm for a system call with 3 args
|
|
__asm__ __volatile(
|
|
"syscall"
|
|
: "=a"(result)
|
|
: "a"(number), "D"(arg1), "S"(arg2), "d"(arg3)
|
|
: "rcx", "r11", "memory"
|
|
);
|
|
|
|
return result;
|
|
}
|
|
|
|
// our own exit LINUX ONLY
|
|
void exit(int code){
|
|
|
|
syscall1(SYS_exit, code);
|
|
for(;;){}
|
|
}
|
|
|
|
|
|
// handles the length of a string for print
|
|
long unsigned strlen(char *string){
|
|
char *cursor = string;
|
|
while(*cursor){
|
|
cursor++;
|
|
}
|
|
long unsigned result = cursor - string;
|
|
return result;
|
|
}
|
|
|
|
|
|
// print
|
|
void print(char *string){
|
|
syscall3(SYS_write, 1, (long)string, strlen(string));
|
|
}
|
|
|
|
// it can do everythig print can but better
|
|
void ColorPrint(char *string, const char *color){
|
|
syscall3(SYS_write, 1, (long)color, strlen(color));
|
|
syscall3(SYS_write, 1, (long)string, strlen(string));
|
|
syscall3(SYS_write, 1, (long)NORMAL, sizeof(NORMAL)-1);
|
|
}
|
|
|
|
// instead of changing the foreground it changes the background
|
|
void BackgroundPrint(char *string, const char *Bcolor){
|
|
syscall3(SYS_write, 1, (long)Bcolor, strlen(Bcolor));
|
|
syscall3(SYS_write, 1, (long)string, strlen(string));
|
|
syscall3(SYS_write, 1, (long)NORMAL, sizeof(NORMAL)-1);
|
|
}
|
|
|