Subversion Repositories Kolibri OS

Rev

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

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