Subversion Repositories Kolibri OS

Rev

Rev 2735 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. #include "system/kolibri.h"
  3. #include "system/string.h"
  4.  
  5. #include "program_console.h"
  6.  
  7. char            *buffer; // используется только одна именованная область, поэтому можно сделать её глобальной переменной
  8. char            name[32]; // имя нужно как для создания области, так и для удаления, поэтому можно сделать её глобальной переменной
  9.  
  10. int sc_init() // инициализация - создание именованной области
  11. {
  12.  
  13. char            *buf1k;
  14. unsigned        PID;
  15. int                     result;
  16.  
  17.  
  18. buf1k = malloc(1024);
  19. if (NULL == buf1k)
  20.         return -1;
  21.  
  22. kol_process_info(-1, buf1k); // получаем СВОЙ (-1) идентификатор процесса
  23. PID = *(buf1k+30);
  24. free(buf1k);
  25.  
  26. itoa(PID, name); // формируем из номера процесса строку
  27. strcat(name, "-SHELL");
  28.  
  29. *buffer = NULL;
  30. result = kol_buffer_open(name, SHM_OPEN_ALWAYS | SHM_WRITE, 1024*16, &buffer); // создаём область (16 кбайт)
  31.  
  32. return result;
  33. }
  34.  
  35.  
  36.  
  37. void sc_puts(char *str)
  38. {
  39. *buffer = SC_PUTS;
  40. strcpy(buffer+1, str);
  41. while (*buffer) kol_sleep(5);
  42. }
  43.  
  44.  
  45. void sc_exit()
  46. {
  47. *buffer = SC_EXIT;
  48. while (*buffer) kol_sleep(5);
  49. kol_buffer_close(name);
  50. }
  51.  
  52.  
  53. void sc_gets(char *str)
  54. {
  55. *buffer = SC_GETS;
  56. while (*buffer) kol_sleep(5);
  57. strcpy(str, buffer+1);
  58. }
  59.  
  60.  
  61. char sc_getc()
  62. {
  63. *buffer = SC_GETC;
  64. while (*buffer) kol_sleep(5);
  65. return *(buffer+1);
  66. }
  67.  
  68.  
  69. void sc_putc(char c)
  70. {
  71. *buffer = SC_PUTC;
  72. *(buffer+1) = c;
  73. while (*buffer) kol_sleep(5);
  74. }
  75.  
  76.  
  77.  
  78. void sc_cls()
  79. {
  80. *buffer = SC_CLS;
  81. while (*buffer) kol_sleep(5);
  82. }
  83.  
  84.  
  85.  
  86.  
  87. void kol_main()
  88. {
  89.  
  90. char string[256];
  91.  
  92. sc_init();
  93.  
  94. sc_cls();
  95. sc_puts("This is a test console application for Shell\n\r");
  96. sc_puts("Type a string (255 symbols max): ");
  97. sc_gets(string);
  98. sc_puts("You typed:\n\r");
  99. sc_puts(string);
  100. sc_puts("Press any key: ");
  101. string[0] = sc_getc();
  102. sc_puts("\n\rYou pressed: ");
  103. sc_putc(string[0]);
  104.  
  105. sc_exit();
  106.  
  107.  
  108.  
  109. }
  110.