0,0 → 1,65 |
#include "kolibri.h" |
|
#define __stdcall __attribute__((stdcall)) |
#define _cdecl __attribute__((cdecl)) |
#define _stdcall __attribute__((stdcall)) |
|
void (* _stdcall con_init)(unsigned w_w, unsigned w_h, unsigned s_w, unsigned s_h, const char* t); |
int (* _cdecl con_printf)(const char* format,...); |
void (* _stdcall con_exit)(char bCloseWindow); |
void (* __stdcall con_gets)(char* str, int n); |
|
void CONSOLE_INIT(const char title[]) |
{ |
kol_struct_import *imp; |
|
if (!(imp = kol_cofflib_load("/sys/lib/console.obj")) || |
!(con_init = ( _stdcall void (*)(unsigned, unsigned, unsigned, unsigned, const char*)) |
kol_cofflib_procload (imp, "con_init")) || |
!(con_printf = ( _cdecl int (*)(const char*,...)) |
kol_cofflib_procload (imp, "con_printf"))|| |
!(con_gets = ( __stdcall void (*)(char*, int)) |
kol_cofflib_procload (imp, "con_gets"))|| |
!(con_exit = ( _stdcall void (*)(char)) |
kol_cofflib_procload (imp, "con_exit"))) |
{ |
kol_exit(); |
} |
con_init(-1, -1, -1, -1, title); |
} |
kol_struct_import* kol_cofflib_load(char *name) |
{ |
kol_struct_import* result; |
asm ("int $0x40":"=a"(result):"a"(68), "b"(19), "c"(name)); |
return result; |
} |
|
void* kol_cofflib_procload (kol_struct_import *imp, char *name) |
{ |
int i; |
for (i=0;;i++) |
{ |
if ( NULL == ((imp+i) -> name)) |
break; |
else |
if ( 0 == strcmp(name, (imp+i)->name) ) |
return (imp+i)->data; |
} |
return NULL; |
} |
|
void kol_board_puts(char *s) |
{ |
unsigned i; |
i = 0; |
while (*(s+i)) |
{ |
asm ("int $0x40"::"a"(63), "b"(1), "c"(*(s+i))); |
i++; |
} |
} |
|
void kol_exit() |
{ |
asm ("int $0x40"::"a"(-1)); |
} |