Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Regard whitespace Rev 1664 → Rev 1665

/programs/system/shell/modules/module_alias.c
0,0 → 1,126
 
/// ===========================================================
 
int alias_check(char alias[])
{
 
unsigned i;
char buf1[256];
char buf2[256];
 
if ( !alias_split (alias, buf1, buf2))
return FALSE;
 
 
for (i = 0; i < NUM_OF_CMD; i++)
if ( !strcmp(COMMANDS[i].name, buf1) )
return -1;
 
if (NULL == ALIASES)
return FALSE;
 
for (i = 0; i < ALIAS_NUM; i++)
{
if ( !strcmp(ALIASES+256*i, buf1) )
return FALSE;
}
 
return TRUE;
}
 
/// ===========================================================
 
int alias_search(char alias[])
{
 
unsigned i;
 
for (i = 0; i < ALIAS_NUM; i++)
{
if ( !strcmp(ALIASES+256*i, alias) )
return i;
}
 
return -1;
}
 
/// ===========================================================
 
int alias_add(char alias[])
{
 
char buf1[256];
char buf2[256];
 
if ( ALIAS_NUM > 255)
return FALSE;
 
if ( !alias_split (alias, buf1, buf2))
return FALSE;
 
strcpy (ALIASES+256*ALIAS_NUM, buf1);
strcpy (ALIASES+256*ALIAS_NUM+64*1024, buf2);
ALIAS_NUM++;
 
return TRUE;
}
 
/// ===========================================================
 
void alias_list()
{
 
unsigned i;
 
if ( 0 == ALIAS_NUM)
return;
 
for (i = 0; i < ALIAS_NUM; i++)
printf (" %s=%s\n\r",ALIASES+256*i, ALIASES+256*i+64*1024);
}
 
/// ===========================================================
 
int alias_split (char alias[], char s1[], char s2[])
{
 
unsigned i, j;
 
if (NULL == strchr(alias, '='))
return FALSE;
 
for (i=0, j = 0;; i++)
{
if ('=' == alias[i])
{
s1[i]='\0';
break;
}
s1[i]=alias[i];
}
 
j = 0;
 
for (;; i++, j++)
{
s2[j]=alias[i];
if ('\0' == alias[i])
break;
}
 
trim(s1);
 
for (i=0;;i++)
{
s2[i] = s2[i+1];
if ('\0' == s2[i] )
break;
}
 
trim(s2);
 
return TRUE;
 
}
 
/// ===========================================================
/programs/system/shell/modules/module_command.c
0,0 → 1,203
 
/// ===========================================================
 
void command_clear()
{
for (;CMD_POS;CMD_POS--)
printf("%c %c", 8, 8);
CMD[0]='\0';
}
 
/// ===========================================================
 
void command_history_add(char command[])
{
 
if ( (0 != strcmp( CMD_HISTORY[0], CMD)) &&
(0 != strcmp( CMD_HISTORY[1], CMD)) &&
(0 != strcmp( CMD_HISTORY[2], CMD)) &&
(0 != strcmp( CMD_HISTORY[3], CMD)) &&
(0 != strcmp( CMD_HISTORY[4], CMD)) )
 
{
strcpy(CMD_HISTORY[4], CMD_HISTORY[3]);
strcpy(CMD_HISTORY[3], CMD_HISTORY[2]);
strcpy(CMD_HISTORY[2], CMD_HISTORY[1]);
strcpy(CMD_HISTORY[1], CMD_HISTORY[0]);
 
strcpy(CMD_HISTORY[0], CMD);
}
 
}
 
/// ===========================================================
 
void command_get()
{
unsigned key;
//unsigned pos = 0;
int hist;
 
CMD_POS = 0;
CMD_NUM = 0;
 
for (;;)
{
key = getch();
if ( 0 != (key & 0xff) )
{
key &= 0xff;
switch (key)
{
case 27: // ESC
command_clear();
break;
 
case 13: // ENTER
CMD[CMD_POS] = '\0';
printf("\n\r");
 
command_history_add(CMD);
return;
 
case 8: // BACKSPACE
if (CMD_POS > 0)
{
printf ("%c %c", 8, 8);
CMD_POS--;
}
break;
 
case 9: // TAB
break;
 
default:
if (CMD_POS < 255)
{
CMD[CMD_POS] = key;
CMD_POS++;
printf("%c", key);
}
break;
};
}
else // îáðàáîòêà ðàñøèðåííûõ êëàâèø
{
key = (key>>8)&0xff;
// printf ("%d\n\r", key);
 
switch (key)
{
 
case 72: // UP
for (hist = 0; hist < CMD_HISTORY_NUM; hist++)
{
command_clear();
 
if (CMD_NUM < CMD_HISTORY_NUM-1)
CMD_NUM++;
else
CMD_NUM = 0;
printf( CMD_HISTORY[CMD_NUM] );
strcpy(CMD, CMD_HISTORY[CMD_NUM]);
if ((CMD_POS = strlen(CMD)) != 0)
break;
}
 
break;
 
case 80: // DOWN
for (hist = 0; hist < CMD_HISTORY_NUM; hist++)
{
command_clear();
 
if (CMD_NUM > 0)
CMD_NUM--;
else
CMD_NUM = CMD_HISTORY_NUM-1;
 
printf( CMD_HISTORY[CMD_NUM] );
strcpy(CMD, CMD_HISTORY[CMD_NUM]);
if ((CMD_POS = strlen(CMD)) != 0)
break;
}
break;
 
case 0: // console window closed
cmd_exit(NULL);
 
};
}
}
}
 
 
 
/// ===========================================================
 
int command_get_cmd(char cmd[])
{
unsigned i;
for (i=0;;i++)
{
cmd[i] = CMD[i];
if (0 == cmd[i])
{
i = -2;
break;
}
if ( iswhite(cmd[i]) )
{
cmd[i] = '\0';
break;
}
}
return i+1;
}
 
/// ===========================================================
 
typedef void (*handler1_t)(char* arg);
 
/// ===========================================================
 
void command_execute()
{
char cmd[256];
char args[256];
unsigned arg;
int i;
 
trim(CMD);
arg = command_get_cmd(cmd);
 
if ( !strlen(cmd) )
return;
 
strcpy(args, CMD+arg);
trim(args);
 
for (i = 0; i < NUM_OF_CMD; i++)
{
if (!strcmp(cmd, COMMANDS[i].name))
{
((handler1_t)COMMANDS[i].handler)(args);
return;
}
}
 
 
if ( -1 != alias_search(CMD) )
{
strcpy(CMD, ALIASES+64*1024+256*alias_search(CMD));
command_execute();
return;
}
 
executable_run(cmd, args);
 
}
 
/// ===========================================================
/programs/system/shell/modules/module_executable.c
0,0 → 1,60
 
/// ===========================================================
 
int executable_run(char cmd[], char args[])
{
 
char exec[256];
char error_starting[]={" No such command '%s'.\n\r"};
int result;
 
if ( '/' == cmd[0]) // åñëè ïóòü àáñîëáòíûé
{
strcpy(exec, cmd);
 
if ( !file_check(exec) ) // ïðîâåðÿåì ñóùåñòâîâàíèå ôàéëà
{
printf(error_starting, cmd);
return FALSE;
}
}
 
else
{
strcpy(exec, cur_dir); // ïðîâåðÿåì ôàéë â òåêóùåì êàòàëîãå
strcat(exec, cmd);
if ( !file_check(exec) ) // ïðîâåðÿåì ñóùåñòâîâàíèå ôàéëà
{
strcpy(exec, "/rd/1/"); // ïðîâåðÿåì ôàéë íà âèðòóàëüíîì äèñêå
strcat(exec, cmd);
if ( !file_check(exec) ) // ïðîâåðÿåì ñóùåñòâîâàíèå ôàéëà
{
printf(error_starting, cmd);
return FALSE;
}
}
}
 
 
if ( script_check(exec) )
{
return script_run(exec, args);
}
 
/* çàïóñê ïðîãðàììû */
result = program_run(exec, args);
if (result > 0)
{
printf (" '%s' started. PID = %d\n\r", cmd, result);
return TRUE;
}
else
{
printf(error_starting, cmd);
return FALSE;
}
 
}
 
/// ===========================================================
/programs/system/shell/modules/module_program.c
0,0 → 1,16
 
int program_run(char cmd[], char param[])
{
 
kol_struct70 k70;
 
k70.p00 = 7;
k70.p04 = 0;
k70.p08 = param;
k70.p12 = 0;
k70.p16 = 0;
k70.p20 = 0;
k70.p21 = cmd;
 
return kol_file_70(&k70);
}
/programs/system/shell/modules/module_script.c
0,0 → 1,102
 
/// ===========================================================
 
int script_check(char file[])
{
 
kol_struct70 k70;
char buf[4];
 
k70.p00 = 0;
k70.p04 = 0;
k70.p08 = 0;
k70.p12 = 4; // ÷èòàòü 4 áàéòà
k70.p16 = buf;
k70.p20 = 0;
k70.p21 = file;
 
kol_file_70(&k70);
 
if ( !strcmp(buf, script_sign) )
return TRUE;
else
return FALSE;
}
 
/// ===========================================================
 
int script_run(char exec[], char args[])
{
 
kol_struct70 k70;
kol_struct_BDVK bdvk;
unsigned result, filesize, pos, i;
char *buf; //áóôåð, êóäà êîïèðóåòñÿ ñêðèïò
 
k70.p00 = 5;
k70.p04 = k70.p08 = k70.p12 = 0;
k70.p16 = &bdvk;
k70.p20 = 0;
k70.p21 = exec;
 
result = kol_file_70(&k70); // ïîëó÷àåì èíôîðìàöèþ î ôàéëå
if ( 0 != result )
return FALSE;
 
filesize = bdvk.p32[0]; // ïîëó÷àåì ðàçìåð ôàéëà
 
buf = malloc(filesize+256);
if (NULL == buf)
return FALSE;
 
buf[filesize]=0;
 
k70.p00 = 0;
k70.p04 = k70.p08 = 0;
k70.p12 = filesize;
k70.p16 = buf;
k70.p20 = 0;
k70.p21 = exec;
 
result = kol_file_70(&k70); // ñ÷èòûâàåì ôàéë â áóôåð
if ( 0 != result )
{
free(buf);
return FALSE;
}
 
pos = 0;
 
for (;;) // îáðàáîòêà ñêðèïòà
{
 
if (pos > filesize)
break;
 
for (i=0;;i++) // ñ÷èòûâàíèå ñòðîêè
{
if ((0x0A == buf[pos])||(0x0D == buf[pos])||(0 == buf[pos]))
{
pos++;
CMD[i] = '\0';
break;
}
CMD[i] = buf[pos];
pos++;
}
 
if ( 0 == strlen(CMD) ) // ïóñòàÿ ñòðîêà
continue;
 
if ('#' == CMD[0]) // êîììåíòàðèé
continue;
 
command_execute();
 
}
 
free(buf);
return TRUE;
}
 
/// ===========================================================
/programs/system/shell/modules/.
Property changes:
Added: tsvn:logminsize
+5
\ No newline at end of property