Subversion Repositories Kolibri OS

Rev

Rev 8633 | 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. char *buf1k;
  11. int result;
  12. int i;
  13. char command;
  14. int size;
  15. int is_end;
  16.  
  17. itoa(pid, name);
  18. strcat(name, "-SHELL");
  19.  
  20. buffer = NULL;
  21. buf1k = NULL;
  22.  
  23. for (i = 0; i < 30;  i++)
  24.         {
  25.         result = kol_buffer_open(name, SHM_OPEN | SHM_WRITE, 0, &buffer);
  26.         if (buffer != NULL)
  27.                 break;
  28.  
  29.         kol_sleep(2);
  30.         }
  31.  
  32.         if (buffer == NULL)
  33.                 return 0;
  34.         else
  35.                 size = result;
  36.  
  37.         is_end = 0;
  38.         for (;;)
  39.                 {
  40.  
  41.                 command = *(buffer);
  42.        
  43.                 switch (command)
  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.                         case SC_PID:
  80.                                 buf1k=malloc(1024);
  81.                                 kol_process_info(-1, buf1k);
  82.                                 memcpy(buffer+1, buf1k+30, sizeof(unsigned));
  83.                                 *buffer = SC_OK;
  84.                                 free(buf1k);
  85.                                 break;
  86.                
  87.                         case SC_PING:
  88.                                 *buffer = SC_OK;
  89.                                 break;
  90.                
  91.                         default:
  92.                                 #if LANG_ENG
  93.                                         printf ("  Error in console application.\n\r");
  94.                                 #elif LANG_RUS
  95.                                         printf ("  Žè¨¡ª  ¢ ª®­á®«ì­®¬ ¯à¨«®¦¥­¨¨.\n\r");
  96.                                 #endif
  97.                                 return 0;
  98.                         };
  99.                 if (is_end)
  100.                         {
  101.                         printf("\n\r");
  102.                         return 1;
  103.                         }
  104.                 }
  105.  
  106. return 9;
  107. }
  108.  
  109.