Subversion Repositories Kolibri OS

Rev

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

  1.  
  2. #include "all.h"
  3.  
  4. int dir_check(char dir[])
  5. /// just checks, if dir[] is really a directory
  6. {
  7.     kol_struct70        k70;
  8.     int         result;
  9.  
  10.     k70.p00 = 1;
  11.     k70.p04 = 0;
  12.     //k70.p08 = 0;
  13.     k70.p12 = 2; // enough to read . & ..
  14.     k70.p16 = (unsigned)malloc(32+k70.p12*560);
  15.     k70.p20 = 0;
  16.     k70.p21 = dir;
  17.  
  18.     result = kol_file_70(&k70);
  19.  
  20.     free((void*)k70.p16);
  21.  
  22.     if ( (0 == result)||(6 == result) )  // 6 is possible ???
  23.         return TRUE;
  24.     else
  25.         return FALSE;
  26.  
  27. }
  28.  
  29. void dir_truncate(char dir[])
  30. {
  31.     int i;
  32.     i = strlen(dir)-1;
  33.     for (;;i--)
  34.         if ('/' == dir[i])
  35.             {
  36.             dir[i+1] = 0;
  37.             break;
  38.             }
  39. }
  40.  
  41. void get_file_dir_loc(char *filepath, char *dir_path)
  42. {
  43.     char *res = strrchr(filepath, '/');
  44.     if (res == 0)
  45.     {
  46.         dir_path = '\0';
  47.         return;
  48.     }
  49.     size_t pos = res - filepath;
  50.     strncpy(dir_path, filepath, pos);
  51.     dir_path[pos] = '\0';
  52. }
  53.  
  54.  
  55. int file_check(char file[])
  56. {
  57.     kol_struct70        k70;
  58.     int         result;
  59.  
  60.     k70.p00 = 0;
  61.     k70.p04 = 0;
  62.     //k70.p08 = 0;
  63.     k70.p12 = 0;
  64.     k70.p16 = 0;
  65.     k70.p20 = 0;
  66.     k70.p21 = file;
  67.  
  68.     result = kol_file_70(&k70);
  69.  
  70.     if (0 == result)
  71.         return TRUE;
  72.     else
  73.         return FALSE;
  74. }
  75.  
  76.  
  77. void file_not_found(char file[]) {
  78.     printf (FILE_NOT_FOUND_ERROR, file);
  79. }
  80.  
  81.  
  82. int iswhite(char c) {return ((' ' == c) || ('\t' == c) || (13 == c) || (10 == c)); }
  83.  
  84. void trim(char string[])
  85. {
  86.     int i, j;
  87.  
  88.     for (i=0; ;i++)
  89.         if ( !iswhite(string[i]) )
  90.             break;
  91.     j = 0;
  92.     for (;;i++, j++)
  93.         {
  94.         string[j] = string[i];
  95.         if ('\0' == string[i] )
  96.             break;
  97.         }
  98.  
  99.     for (i=0; ;i++)
  100.         if ('\0' == string[i])
  101.             break;
  102.     i--;
  103.     for (;i>0;--i)
  104.         if ( iswhite(string[i]) )
  105.             string[i] = '\0';
  106.         else
  107.             break;
  108. }
  109.  
  110.  
  111. // entry point
  112. int main(int argc, char **argv)
  113. {
  114.     int i; for (i = 1; i < argc; i++) {
  115.         strcat(cmdline, argv[i]);
  116.         if (i != argc - 1) {
  117.             strcat(cmdline, " ");
  118.         }
  119.     }
  120.  
  121.     NUM_OF_CMD = sizeof(COMMANDS)/sizeof(COMMANDS[0]);
  122.     strcpy(title, "SHELL ");
  123.     strcat(title, SHELL_VERSION);
  124.     con_init_opt(-1, -1, -1, -1, title);
  125.  
  126.     //printf("argc = %d\ncmdline = '%s'\n", argc, cmdline);
  127.  
  128.     if (sizeof (kol_struct70) != 25) {
  129.         printf("Invalid struct align kol_struct70, need to fix compile options\n\r");
  130.         kol_exit();
  131.     }
  132.  
  133.     //strcpy(cur_dir, PATH);
  134.     //dir_truncate(cur_dir);
  135.     getcwd(cur_dir, sizeof cur_dir);
  136.     //printf("curdir %s\n", cur_dir);
  137.  
  138.     con_set_cursor_height(con_get_font_height()-1);
  139.  
  140.     ALIASES = malloc(128*1024);
  141.  
  142.     if (!cmdline || cmdline[0] == 0) {
  143.         strcpy(CMD, argv[0]);
  144.         dir_truncate(CMD);
  145.         strcat(CMD, ".shell");
  146.         if ( !file_check(CMD) )
  147.             strcpy(CMD, "/sys/settings/.shell");
  148.     }
  149.     else {
  150.         if (cmdline[0] == '/')
  151.         {
  152.             strcpy(cur_dir, cmdline);
  153.             *(strrchr(cur_dir, '/')+1)=0;
  154.         }
  155.         strcpy(CMD, cmdline);
  156.     }
  157.  
  158.     command_execute();
  159.  
  160.     for (;;) {
  161.         //printf("\033[32;1m");
  162.         printf ("# ");
  163.         //printf("\033[0m");
  164.         command_get();
  165.         command_execute();
  166.     }
  167.  
  168.     con_exit(0);
  169.     kol_exit();
  170. }
  171.