Subversion Repositories Kolibri OS

Rev

Rev 2502 | Rev 3245 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. #include "../program_console.h"
  3.  
  4.  
  5. int program_console(int pid)
  6. {
  7.  
  8. char name[32];
  9. char *buffer;
  10. int result;
  11. int i;
  12. char command;
  13. int size;
  14. int is_end;
  15.  
  16. itoa(pid, name);
  17. strcat(name, "-SHELL");
  18.  
  19. buffer = NULL;
  20.  
  21.  
  22. for (i = 0; i < 30;  i++)
  23.         {
  24.         result = kol_buffer_open(name, SHM_OPEN | SHM_WRITE, 0, &buffer);
  25.         if (buffer != NULL)
  26.                 break;
  27.  
  28.         kol_sleep(2);
  29.         }
  30.  
  31.         if (buffer == NULL)
  32.                 return 0;
  33.         else
  34.                 size = result;
  35.  
  36.         is_end = 0;
  37.         for (;;)
  38.                 {
  39.  
  40.                 command = *(buffer);
  41.        
  42.                 switch (command)
  43.                         {
  44.                        
  45.                         case SC_EXIT:
  46.                                 *buffer = SC_OK;
  47.                                 is_end = 1;
  48.                                 break;
  49.                        
  50.                         case SC_OK:
  51.                                 kol_sleep(5);
  52.                                 break;
  53.  
  54.                         case SC_CLS:
  55.                                 con_cls();
  56.                                 *buffer = SC_OK;
  57.                                 break;
  58.                                
  59.                         case SC_PUTC:
  60.                                 printf("%c", *(buffer+1));
  61.                                 *buffer = SC_OK;
  62.                                 break;
  63.  
  64.                         case SC_PUTS:
  65.                                 printf("%s", buffer+1 );
  66.                                 *buffer = SC_OK;
  67.                                 break;                         
  68.  
  69.                         case SC_GETC:
  70.                                 *(buffer+1) = (char) getch() ;
  71.                                 *buffer = SC_OK;
  72.                                 break; 
  73.  
  74.                         case SC_GETS:
  75.                                 gets(buffer+1, size-2);
  76.                                 *buffer = SC_OK;
  77.                                 break; 
  78.                                
  79.                         default:
  80.                                 #if LANG_ENG
  81.                                         printf ("  Error in console application.\n\r");
  82.                                 #elif LANG_RUS
  83.                                         printf ("  Îøèáêà â êîíñîëüíîì ïðèëîæåíèè.\n\r");
  84.                                 #endif
  85.                                 return 0;
  86.                         };
  87.                 if (is_end)
  88.                         {
  89.                         printf("\n\r");
  90.                         return 1;
  91.                         }
  92.                 }
  93.  
  94. return 9;
  95. }
  96.