/programs/system/shell/globals.h |
---|
1,5 → 1,5 |
#define SHELL_VERSION "0.7.8" |
#define SHELL_VERSION "0.7.8a" |
extern char PATH[256]; |
extern char PARAM[256]; |
/programs/system/shell/modules/module_executable.c |
---|
7,29 → 7,27 |
char exec[FILENAME_MAX]; |
int result; |
if ( '/' == cmd[0]) // ¥á«¨ ¯ãâì ¡á®«îâë© |
if ( '/' == cmd[0]) // if path is absolute |
{ |
strcpy(exec, cmd); |
if ( !file_check(exec) ) // ¯à®¢¥à塞 áãé¥á⢮¢ ¨¥ ä ©« |
if (!file_check(exec) ) // check file existense |
{ |
file_not_found(cmd); |
return FALSE; |
} |
} |
else |
{ |
strcpy(exec, cur_dir); // ¯à®¢¥à塞 ä ©« ¢ ⥪ã饬 ª â «®£¥ |
strcpy(exec, cur_dir); // check file in current directory |
if (exec[strlen(exec)-1] != '/') |
strcat(exec, "/"); // add slash |
strcat(exec, cmd); |
if ( !file_check(exec) ) // ¯à®¢¥à塞 áãé¥á⢮¢ ¨¥ ä ©« |
if ( !file_check(exec) ) // check file existense |
{ |
strcpy(exec, "/rd/1/"); // ¯à®¢¥à塞 ä ©« ¢¨àâ㠫쮬 ¤¨áª¥ |
strcpy(exec, "/rd/1/"); // check file on virtual disk |
strcat(exec, cmd); |
if ( !file_check(exec) ) // ¯à®¢¥à塞 áãé¥á⢮¢ ¨¥ ä ©« |
if ( !file_check(exec) ) // check file existense |
{ |
file_not_found(cmd); |
return FALSE; |
37,15 → 35,12 |
} |
} |
// if file exists: |
if ( script_check(exec) ) |
return script_run(exec, args); |
/* § ¯ã᪠¯à®£à ¬¬ë */ |
// try to run as a program |
result = program_run(exec, args); |
if (result > 0) |
{ |
if ( !program_console(result) ) |
{ |
LAST_PID = result; |
59,9 → 54,19 |
} |
else |
{ |
file_not_found(cmd); |
if ( script_check(exec) ) // if file is a valid script |
{ |
return script_run(exec, args); |
} else |
{ |
#if LANG_ENG |
printf ("Error in '%s' : script must start with #SHS line\n\r", cmd); |
#elif LANG_RUS |
printf ("訡ª ¢ '%s' : áªà¨¯â ¤®«¦¥ ç¨ âìáï á® áâà®çª¨ #SHS\n\r", cmd); |
#endif |
return FALSE; |
} |
} |
} |
/programs/system/shell/modules/module_script.c |
---|
10,7 → 10,7 |
k70.p00 = 0; |
k70.p04 = 0; |
//k70.p08 = 0; |
k70.p12 = 4; // ÷èòàòü 4 áàéòà |
k70.p12 = 4; // read 4 bytes |
k70.p16 = (unsigned) buf; |
k70.p20 = 0; |
k70.p21 = file; |
17,7 → 17,7 |
kol_file_70(&k70); |
if ( !strcmp(buf, script_sign) ) |
if ( !strcmp(buf, script_sign) ) // if we found the script signature |
return TRUE; |
else |
return FALSE; |
32,7 → 32,7 |
kol_struct_BDVK bdvk; |
unsigned result, i; |
unsigned long long filesize, pos; |
char *buf; //áóôåð, êóäà êîïèðóåòñÿ ñêðèïò |
char *buf; // buffer, where script is copied |
k70.p00 = 5; |
k70.p04 = k70.p12 = 0; |
41,11 → 41,11 |
k70.p20 = 0; |
k70.p21 = exec; |
result = kol_file_70(&k70); // ïîëó÷àåì èíôîðìàöèþ î ôàéëå |
result = kol_file_70(&k70); // get file info |
if ( 0 != result ) |
return FALSE; |
filesize = bdvk.p32; // ïîëó÷àåì ðàçìåð ôàéëà |
filesize = bdvk.p32; // get file size |
buf = malloc(filesize+256); // may fail for over 4Gb file, but impossible case |
if (NULL == buf) |
61,7 → 61,7 |
k70.p20 = 0; |
k70.p21 = exec; |
result = kol_file_70(&k70); // ñ÷èòûâàåì ôàéë â áóôåð |
result = kol_file_70(&k70); // read file to the buffer |
if ( 0 != result ) |
{ |
free(buf); |
70,13 → 70,13 |
pos = 0; |
for (;;) // îáðàáîòêà ñêðèïòà |
for (;;) // script processing |
{ |
if (pos > filesize) |
break; |
for (i=0;;i++) // ñ÷èòûâàíèå ñòðîêè |
for (i=0;;i++) // reading a string |
{ |
if ((0x0A == buf[pos])||(0x0D == buf[pos])||(0 == buf[pos])) |
{ |
88,10 → 88,10 |
pos++; |
} |
if ( 0 == strlen(CMD) ) // ïóñòàÿ ñòðîêà |
if ( 0 == strlen(CMD) ) // empty string |
continue; |
if ('#' == CMD[0]) // êîììåíòàðèé |
if ('#' == CMD[0]) // comment |
continue; |
command_execute(); |