Subversion Repositories Kolibri OS

Rev

Rev 8634 | 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.     char name[32];
  7.     char *buffer;
  8.     char *buf1k;
  9.     int result;
  10.     int i;
  11.     char command;
  12.     int size;
  13.     int is_end;
  14.  
  15.     itoa(pid, name);
  16.     strcat(name, "-SHELL");
  17.  
  18.     buffer = NULL;
  19.     buf1k = NULL;
  20.  
  21.     for (i = 0; i < 30;  i++) {
  22.         result = kol_buffer_open(name, SHM_OPEN | SHM_WRITE, 0, &buffer);
  23.         if (buffer != NULL)
  24.             break;
  25.  
  26.         kol_sleep(2);
  27.     }
  28.  
  29.     if (buffer == NULL)
  30.         return 0;
  31.     else
  32.         size = result;
  33.  
  34.     is_end = 0;
  35.     for (;;) {
  36.         command = *(buffer);
  37.    
  38.         switch (command) {
  39.             case SC_EXIT:
  40.                 *buffer = SC_OK;
  41.                 is_end = 1;
  42.                 break;
  43.            
  44.             case SC_OK:
  45.                 kol_sleep(5);
  46.                 break;
  47.  
  48.             case SC_CLS:
  49.                 con_cls();
  50.                 *buffer = SC_OK;
  51.                 break;
  52.                
  53.             case SC_PUTC:
  54.                 printf("%c", *(buffer+1));
  55.                 *buffer = SC_OK;
  56.                 break;
  57.  
  58.             case SC_PUTS:
  59.                 printf("%s", buffer+1 );
  60.                 *buffer = SC_OK;
  61.                 break;
  62.                    
  63.             case SC_GETC:
  64.                 *(buffer+1) = (char) getch() ;
  65.                 *buffer = SC_OK;
  66.                 break; 
  67.  
  68.             case SC_GETS:
  69.                 gets(buffer+1, size-2);
  70.                 *buffer = SC_OK;
  71.                 break; 
  72.        
  73.             case SC_PID:
  74.                 buf1k=malloc(1024);
  75.                 kol_process_info(-1, buf1k);
  76.                 memcpy(buffer+1, buf1k+30, sizeof(unsigned));
  77.                 *buffer = SC_OK;
  78.                 free(buf1k);
  79.                 break;
  80.                
  81.             case SC_PING:
  82.                 *buffer = SC_OK;
  83.                 break;
  84.                
  85.             default:
  86.                 printf (CON_APP_ERROR);
  87.                 return 0;
  88.         };
  89.         if (is_end) {
  90.             printf("\n\r");
  91.             return 1;
  92.         }
  93.     } // for end
  94.     return 9;
  95. }
  96.  
  97.