Subversion Repositories Kolibri OS

Rev

Rev 8474 | Blame | Last modification | View Log | Download | RSS feed

  1. #include "kolibri.h"
  2. /*
  3. #define __stdcall __attribute__((stdcall))
  4. #define _cdecl __attribute__((cdecl))
  5. #define _stdcall __attribute__((stdcall))
  6. */
  7. void (* _stdcall con_init)(unsigned w_w, unsigned w_h, unsigned s_w, unsigned s_h, const char* t);
  8. int (* _cdecl con_printf)(const char* format,...);
  9. void (* _stdcall con_exit)(char bCloseWindow);
  10. void (* __stdcall con_gets)(char* str, int n);
  11. void (* _stdcall con_set_title)(const char* title);
  12.  
  13. void CONSOLE_INIT(const char title[])
  14. {
  15.   kol_struct_import *imp;
  16.  
  17.   if (!(imp = kol_cofflib_load("/sys/lib/console.obj")) ||
  18.       !(con_init = ( _stdcall  void (*)(unsigned, unsigned, unsigned, unsigned, const char*))
  19.                   kol_cofflib_procload (imp, "con_init")) ||
  20.       !(con_printf = ( _cdecl int (*)(const char*,...))
  21.                   kol_cofflib_procload (imp, "con_printf"))||
  22.       !(con_gets = ( __stdcall void (*)(char*, int))
  23.                   kol_cofflib_procload (imp, "con_gets"))||
  24.       !(con_exit = ( _stdcall void (*)(char))
  25.                   kol_cofflib_procload (imp, "con_exit")) ||
  26.       !(con_set_title = ( _stdcall void (*)(const char*))
  27.                   kol_cofflib_procload (imp, "con_set_title")))
  28.   {
  29.     kol_exit();
  30.   }
  31.   con_init(-1, -1, -1, -1, title);
  32. }
  33. kol_struct_import* kol_cofflib_load(char *name)
  34. {
  35.   kol_struct_import* result;
  36.   asm ("int $0x40":"=a"(result):"a"(68), "b"(19), "c"(name));
  37.   return result;
  38. }
  39.  
  40. void* kol_cofflib_procload (kol_struct_import *imp, char *name)
  41. {
  42.   int i;
  43.   for (i=0;;i++)
  44.   {
  45.     if ( NULL == ((imp+i) -> name))
  46.       break;
  47.     else
  48.       if ( 0 == strcmp(name, (imp+i)->name) )
  49.         return (imp+i)->data;
  50.   }
  51.   return NULL;
  52. }
  53.  
  54. void kol_board_puts(char *s)
  55. {
  56.   unsigned i;
  57.   i = 0;
  58.   while (*(s+i))
  59.   {
  60.     asm ("int $0x40"::"a"(63), "b"(1), "c"(*(s+i)));
  61.     i++;
  62.   }
  63. }
  64.  
  65. void kol_exit()
  66. {
  67.   asm ("int $0x40"::"a"(-1));
  68. }
  69.