Shell 0.4.4 (All)
git-svn-id: svn://kolibrios.org@1665 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
c801706373
commit
3256dedea8
5
programs/system/shell/bin/.shell
Normal file
5
programs/system/shell/bin/.shell
Normal file
@ -0,0 +1,5 @@
|
||||
#SHS
|
||||
|
||||
about
|
||||
echo Type 'help' for help
|
||||
echo
|
BIN
programs/system/shell/bin/shell.kex
Normal file
BIN
programs/system/shell/bin/shell.kex
Normal file
Binary file not shown.
2
programs/system/shell/clean.bat
Normal file
2
programs/system/shell/clean.bat
Normal file
@ -0,0 +1,2 @@
|
||||
del shell.kex
|
||||
del *.o
|
17
programs/system/shell/cmd/cmd_about.c
Normal file
17
programs/system/shell/cmd/cmd_about.c
Normal file
@ -0,0 +1,17 @@
|
||||
|
||||
int cmd_about(char param[])
|
||||
{
|
||||
|
||||
char message[] = {
|
||||
"\
|
||||
\n\r\
|
||||
Shell for KolibriOS\n\r\
|
||||
version %s\n\r\n\r\
|
||||
author: Oleksandr Bogomaz aka Albom\n\r\
|
||||
e-mail: albom85@yandex.ru\n\r\
|
||||
site: http://albom85.narod.ru/\n\r\n\r\
|
||||
"};
|
||||
|
||||
printf(message, SHELL_VERSION);
|
||||
return TRUE;
|
||||
}
|
19
programs/system/shell/cmd/cmd_alias.c
Normal file
19
programs/system/shell/cmd/cmd_alias.c
Normal file
@ -0,0 +1,19 @@
|
||||
|
||||
int cmd_alias(char arg[])
|
||||
{
|
||||
|
||||
int result;
|
||||
|
||||
if (NULL == arg)
|
||||
{
|
||||
alias_list();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
result = alias_check(arg);
|
||||
|
||||
if ( ( 0 != result ) && ( -1 != result ) )
|
||||
alias_add(arg);
|
||||
|
||||
return TRUE;
|
||||
}
|
33
programs/system/shell/cmd/cmd_ccpuid.c
Normal file
33
programs/system/shell/cmd/cmd_ccpuid.c
Normal file
@ -0,0 +1,33 @@
|
||||
|
||||
int cmd_ccpuid(char param[])
|
||||
{
|
||||
unsigned a, b, c, d;
|
||||
char str[13];
|
||||
|
||||
str[12] = '\0';
|
||||
|
||||
asm ("cpuid" :
|
||||
"=a" (a),
|
||||
"=b" (b),
|
||||
"=c" (c),
|
||||
"=d" (d):
|
||||
"a"(0));
|
||||
|
||||
str[0] = (b&0x000000ff) >> 0;
|
||||
str[1] = (b&0x0000ff00) >> 8;
|
||||
str[2] = (b&0x00ff0000) >> 16;
|
||||
str[3] = (b&0xff000000) >> 24;
|
||||
|
||||
str[4] = (d&0x000000ff) >> 0;
|
||||
str[5] = (d&0x0000ff00) >> 8;
|
||||
str[6] = (d&0x00ff0000) >> 16;
|
||||
str[7] = (d&0xff000000) >> 24;
|
||||
|
||||
str[8] = (c&0x000000ff) >> 0;
|
||||
str[9] = (c&0x0000ff00) >> 8;
|
||||
str[10] = (c&0x00ff0000) >> 16;
|
||||
str[11] = (c&0xff000000) >> 24;
|
||||
|
||||
printf("%s\n\r", str);
|
||||
return TRUE;
|
||||
}
|
47
programs/system/shell/cmd/cmd_cd.c
Normal file
47
programs/system/shell/cmd/cmd_cd.c
Normal file
@ -0,0 +1,47 @@
|
||||
|
||||
int cmd_cd(char dir[])
|
||||
{
|
||||
|
||||
char temp[256];
|
||||
unsigned result;
|
||||
|
||||
if (NULL == dir)
|
||||
{
|
||||
printf(" cd directory\n\r");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ( 0 == strcmp(dir, ".") )
|
||||
return FALSE;
|
||||
|
||||
if ( ( 0 == strcmp(dir, "..") ) && ( 0 != strcmp(cur_dir, "/")) )
|
||||
{
|
||||
cur_dir[strlen(cur_dir)-1]='\0';
|
||||
dir_truncate(cur_dir);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ( '/' == dir[0])
|
||||
{
|
||||
if ( dir_check(dir) )
|
||||
{
|
||||
strcpy(cur_dir, dir);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(temp, cur_dir);
|
||||
strcat(temp, dir);
|
||||
|
||||
if ( dir_check(temp) )
|
||||
{
|
||||
strcpy(cur_dir, temp);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
}
|
6
programs/system/shell/cmd/cmd_clear.c
Normal file
6
programs/system/shell/cmd/cmd_clear.c
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
int cmd_clear(char param[])
|
||||
{
|
||||
con_cls();
|
||||
return TRUE;
|
||||
}
|
23
programs/system/shell/cmd/cmd_date.c
Normal file
23
programs/system/shell/cmd/cmd_date.c
Normal file
@ -0,0 +1,23 @@
|
||||
|
||||
|
||||
int cmd_date(char param[])
|
||||
{
|
||||
unsigned date;
|
||||
unsigned time;
|
||||
|
||||
date = kol_system_date_get();
|
||||
printf(" date [dd.mm.yy]: %x%x.%x%x.%x%x",
|
||||
(date&0xf00000)>>20, (date&0xf0000)>>16, // day
|
||||
(date&0xf000)>>12, (date&0xf00)>>8, //month
|
||||
(date&0xf0)>>4, (date&0xf) ); // year
|
||||
|
||||
|
||||
time = kol_system_time_get();
|
||||
|
||||
printf("\n\r time [hh:mm:ss]: %x%x:%x%x:%x%x\n\r",
|
||||
(time&0xf0)>>4, (time&0xf), // hours
|
||||
(time&0xf000)>>12, (time&0xf00)>>8, // minutes
|
||||
(time&0xf00000)>>20, (time&0xf0000)>>16 ); // seconds
|
||||
|
||||
return TRUE;
|
||||
}
|
6
programs/system/shell/cmd/cmd_echo.c
Normal file
6
programs/system/shell/cmd/cmd_echo.c
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
int cmd_echo(char text[])
|
||||
{
|
||||
printf("%s\n\r", text);
|
||||
return TRUE;
|
||||
}
|
8
programs/system/shell/cmd/cmd_exit.c
Normal file
8
programs/system/shell/cmd/cmd_exit.c
Normal file
@ -0,0 +1,8 @@
|
||||
|
||||
int cmd_exit(char param[])
|
||||
{
|
||||
free(ALIASES);
|
||||
_exit(1);
|
||||
kol_exit();
|
||||
return TRUE;
|
||||
}
|
14
programs/system/shell/cmd/cmd_free.c
Normal file
14
programs/system/shell/cmd/cmd_free.c
Normal file
@ -0,0 +1,14 @@
|
||||
|
||||
int cmd_free(char param[])
|
||||
{
|
||||
unsigned total, free, used;
|
||||
|
||||
total = kol_system_mem();
|
||||
free = kol_system_memfree();
|
||||
used = total - free;
|
||||
|
||||
printf (" total [kB / MB / %%]: %-7d / %-5d / 100\n\r free [kB / MB / %%]: %-7d / %-5d / %d\n\r used [kB / MB / %%]: %-7d / %-5d / %d\n\r",
|
||||
total, total/1024, free, free/1024, (free*100)/total, used, total/1024-free/1024, 100-(free*100)/total );
|
||||
|
||||
return TRUE;
|
||||
}
|
32
programs/system/shell/cmd/cmd_help.c
Normal file
32
programs/system/shell/cmd/cmd_help.c
Normal file
@ -0,0 +1,32 @@
|
||||
|
||||
int cmd_help(char cmd[])
|
||||
{
|
||||
|
||||
int i;
|
||||
|
||||
char available[]={" %d commands available:\n\r"};
|
||||
|
||||
if ( !strlen(cmd) )
|
||||
{
|
||||
printf (available, NUM_OF_CMD);
|
||||
for (i = 0; i < NUM_OF_CMD; i++)
|
||||
printf(" %s\n\r", COMMANDS[i].name);
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i=0; i<NUM_OF_CMD; i++)
|
||||
if ( !strcmp(cmd, COMMANDS[i].name) )
|
||||
{
|
||||
printf(COMMANDS[i].help);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
printf (" Command \'%s\' not found.\n\r", cmd);
|
||||
printf (available, NUM_OF_CMD);
|
||||
for (i = 0; i < NUM_OF_CMD; i++)
|
||||
printf(" %s\n\r", COMMANDS[i].name);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
43
programs/system/shell/cmd/cmd_kill.c
Normal file
43
programs/system/shell/cmd/cmd_kill.c
Normal file
@ -0,0 +1,43 @@
|
||||
|
||||
|
||||
int _atoi ( char *s )
|
||||
{
|
||||
int i, n;
|
||||
|
||||
n = 0;
|
||||
for ( i = 0; s[i]!= '\0'; ++i)
|
||||
if ((s[i]<'0') || (s[i]>'9'))
|
||||
return 0;
|
||||
else
|
||||
n = 10 * n + s[i] - '0';
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int cmd_kill(char process[])
|
||||
{
|
||||
|
||||
unsigned proc;
|
||||
int result;
|
||||
|
||||
if (NULL == process)
|
||||
{
|
||||
printf(" kill PID\n\r");
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
proc = _atoi(process);
|
||||
if ( 0 != proc )
|
||||
{
|
||||
result = kol_process_kill_pid(proc);
|
||||
if (result < 0)
|
||||
return FALSE;
|
||||
else
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
47
programs/system/shell/cmd/cmd_ls.c
Normal file
47
programs/system/shell/cmd/cmd_ls.c
Normal file
@ -0,0 +1,47 @@
|
||||
|
||||
int cmd_ls(char dir[])
|
||||
{
|
||||
|
||||
kol_struct70 k70;
|
||||
unsigned *n;
|
||||
unsigned num_of_file;
|
||||
unsigned *t;
|
||||
unsigned type_of_file;
|
||||
int i;
|
||||
|
||||
k70.p00 = 1;
|
||||
k70.p04 = 0;
|
||||
k70.p08 = 0;
|
||||
k70.p12 = 2*1024*1024; // 2 MB
|
||||
k70.p16 = malloc(2*1024*1024);
|
||||
k70.p20 = 0;
|
||||
|
||||
/// !!!
|
||||
// Åñëè ls çàïóñêàåòñÿ áåç ïàðàìåòðîâ, ïðîñìàòðèâàåì òåêóùèé êàòàëîã
|
||||
if ( !strlen(dir) )
|
||||
k70.p21 = cur_dir;
|
||||
else
|
||||
k70.p21 = dir;
|
||||
|
||||
if ( !kol_file_70(&k70) ) // ïðîâåðÿåì ñóùåñòâîâàíèå êàòàëîãà
|
||||
{
|
||||
free(k70.p16);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
n = k70.p16+8;
|
||||
num_of_file = *n; // ÷èñëî ôàéëîâ â êàòàëîãå
|
||||
|
||||
for (i = 0; i < num_of_file; i++)
|
||||
{
|
||||
printf (" %s", k70.p16+32+40+(264+40)*i);
|
||||
t = k70.p16+32+(264+40)*i;
|
||||
type_of_file = *t;
|
||||
if ( (0x10 == (type_of_file&0x10)) || (8 == (type_of_file&8)) )
|
||||
printf ("/");
|
||||
printf ("\n\r");
|
||||
}
|
||||
|
||||
free(k70.p16);
|
||||
return TRUE;
|
||||
}
|
44
programs/system/shell/cmd/cmd_mkdir.c
Normal file
44
programs/system/shell/cmd/cmd_mkdir.c
Normal file
@ -0,0 +1,44 @@
|
||||
|
||||
int cmd_mkdir(char dir[])
|
||||
{
|
||||
|
||||
char temp[256];
|
||||
kol_struct70 k70;
|
||||
unsigned result;
|
||||
|
||||
if (NULL == dir)
|
||||
{
|
||||
printf(" mkdir directory\n\r");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
if ( 0 == strcmp(dir, ".") || ( 0 == strcmp(dir, "..") ) || ( 0 == strcmp(cur_dir, "/")) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
k70.p00 = 9;
|
||||
k70.p04 = 0;
|
||||
k70.p08 = 0;
|
||||
k70.p12 = 0;
|
||||
k70.p16 = 0;
|
||||
k70.p20 = 0;
|
||||
|
||||
if ( '/' == dir[0])
|
||||
k70.p21 = dir;
|
||||
else
|
||||
{
|
||||
strcpy(temp, cur_dir);
|
||||
strcat(temp, dir);
|
||||
k70.p21 = temp;
|
||||
}
|
||||
|
||||
result = kol_file_70(&k70);
|
||||
|
||||
if (0 == result)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
|
||||
}
|
87
programs/system/shell/cmd/cmd_more.c
Normal file
87
programs/system/shell/cmd/cmd_more.c
Normal file
@ -0,0 +1,87 @@
|
||||
|
||||
int cmd_more(char file[])
|
||||
{
|
||||
|
||||
kol_struct70 k70;
|
||||
kol_struct_BDVK bdvk;
|
||||
unsigned result, filesize, pos, i;
|
||||
char buf[81]; //áóôåð
|
||||
char temp[256];
|
||||
unsigned flags;
|
||||
|
||||
if (NULL == file)
|
||||
{
|
||||
printf (" less filename\n\r");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ( '/' == file[0])
|
||||
{
|
||||
strcpy(temp, file);
|
||||
|
||||
if ( !file_check(temp) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(temp, cur_dir);
|
||||
strcat(temp, file);
|
||||
|
||||
if ( !file_check(temp) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
k70.p00 = 5;
|
||||
k70.p04 = k70.p08 = k70.p12 = 0;
|
||||
k70.p16 = &bdvk;
|
||||
k70.p20 = 0;
|
||||
k70.p21 = temp;
|
||||
|
||||
result = kol_file_70(&k70); // ïîëó÷àåì èíôîðìàöèþ î ôàéëå
|
||||
if ( 0 != result )
|
||||
return FALSE;
|
||||
|
||||
filesize = bdvk.p32[0]; // ïîëó÷àåì ðàçìåð ôàéëà
|
||||
|
||||
buf[80]=0;
|
||||
flags = con_get_flags();
|
||||
|
||||
for (pos=0;pos<filesize;pos+=80)
|
||||
{
|
||||
|
||||
memset(buf, 0, 80);
|
||||
|
||||
k70.p00 = 0;
|
||||
k70.p04 = pos;
|
||||
k70.p08 = 0;
|
||||
k70.p12 = 80;
|
||||
k70.p16 = buf;
|
||||
k70.p20 = 0;
|
||||
k70.p21 = temp;
|
||||
|
||||
result = kol_file_70(&k70); // ÷òåíèå 80 ñèìâîëîâ
|
||||
for (i=0; i<80; i++)
|
||||
{
|
||||
|
||||
if (27 == buf[i])
|
||||
con_set_flags(flags|0x100);
|
||||
else con_set_flags(flags);
|
||||
|
||||
printf ("%c", buf[i]);
|
||||
}
|
||||
if ( 0 != result )
|
||||
{
|
||||
con_set_flags(flags);
|
||||
printf ("\n\r");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
}
|
||||
con_set_flags(flags);
|
||||
printf ("\n\r");
|
||||
return TRUE;
|
||||
}
|
32
programs/system/shell/cmd/cmd_ps.c
Normal file
32
programs/system/shell/cmd/cmd_ps.c
Normal file
@ -0,0 +1,32 @@
|
||||
|
||||
int cmd_ps(char param[])
|
||||
{
|
||||
|
||||
int i, n;
|
||||
char *buf1k;
|
||||
unsigned PID;
|
||||
unsigned *p;
|
||||
short *s;
|
||||
short STATE;
|
||||
|
||||
buf1k = malloc(1024);
|
||||
if (NULL == buf1k)
|
||||
return FALSE;
|
||||
|
||||
for (i = 1;;i++)
|
||||
{
|
||||
n = kol_process_info(i, buf1k);
|
||||
p = buf1k+30;
|
||||
PID = *p;
|
||||
s = buf1k+50;
|
||||
STATE = *s;
|
||||
if ( 9 != STATE)
|
||||
printf (" %7d %s\n\r", PID, buf1k+10);
|
||||
if (i == n)
|
||||
break;
|
||||
}
|
||||
|
||||
free(buf1k);
|
||||
return TRUE;
|
||||
|
||||
}
|
6
programs/system/shell/cmd/cmd_pwd.c
Normal file
6
programs/system/shell/cmd/cmd_pwd.c
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
int cmd_pwd(char param[])
|
||||
{
|
||||
printf (" %s\n\r", cur_dir);
|
||||
return TRUE;
|
||||
}
|
6
programs/system/shell/cmd/cmd_reboot.c
Normal file
6
programs/system/shell/cmd/cmd_reboot.c
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
int cmd_reboot(char param[])
|
||||
{
|
||||
kol_system_end(3);
|
||||
return TRUE;
|
||||
}
|
50
programs/system/shell/cmd/cmd_rm.c
Normal file
50
programs/system/shell/cmd/cmd_rm.c
Normal file
@ -0,0 +1,50 @@
|
||||
|
||||
int cmd_rm(char file[])
|
||||
{
|
||||
|
||||
kol_struct70 k70;
|
||||
char temp[256];
|
||||
unsigned result;
|
||||
|
||||
if (NULL == file)
|
||||
{
|
||||
printf (" rm filename\n\r");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ( '/' == file[0])
|
||||
{
|
||||
strcpy(temp, file);
|
||||
|
||||
if ( !file_check(temp) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(temp, cur_dir);
|
||||
strcat(temp, file);
|
||||
|
||||
if ( !file_check(temp) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
k70.p00 = 8;
|
||||
k70.p04 = 0;
|
||||
k70.p08 = 0;
|
||||
k70.p12 = 0;
|
||||
k70.p16 = 0;
|
||||
k70.p20 = 0;
|
||||
k70.p21 = temp;
|
||||
|
||||
result = kol_file_70(&k70);
|
||||
|
||||
if (0 == result)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
|
||||
}
|
46
programs/system/shell/cmd/cmd_rmdir.c
Normal file
46
programs/system/shell/cmd/cmd_rmdir.c
Normal file
@ -0,0 +1,46 @@
|
||||
|
||||
int cmd_rmdir(char dir[])
|
||||
{
|
||||
|
||||
char temp[256];
|
||||
kol_struct70 k70;
|
||||
unsigned result;
|
||||
|
||||
if (NULL == dir)
|
||||
{
|
||||
printf(" rmdir directory\n\r");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ( ( 0 == strcmp(dir, ".") ) || ( 0 == strcmp(dir, "..") ) || ( 0 == strcmp(cur_dir, "/")) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
k70.p00 = 8;
|
||||
k70.p04 = 0;
|
||||
k70.p08 = 0;
|
||||
k70.p12 = 0;
|
||||
k70.p16 = 0;
|
||||
k70.p20 = 0;
|
||||
|
||||
if ( '/' == dir[0])
|
||||
k70.p21 = dir;
|
||||
else
|
||||
{
|
||||
strcpy(temp, cur_dir);
|
||||
strcat(temp, dir);
|
||||
k70.p21 = temp;
|
||||
}
|
||||
|
||||
if ( !dir_check(temp) )
|
||||
return FALSE;
|
||||
|
||||
result = kol_file_70(&k70);
|
||||
|
||||
if (0 == result)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
|
||||
}
|
12
programs/system/shell/cmd/cmd_sleep.c
Normal file
12
programs/system/shell/cmd/cmd_sleep.c
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
int cmd_sleep(char param[])
|
||||
{
|
||||
int delay;
|
||||
|
||||
if (!strlen(param))
|
||||
return FALSE;
|
||||
|
||||
delay = _atoi(param);
|
||||
kol_sleep((unsigned)delay);
|
||||
return TRUE;
|
||||
}
|
54
programs/system/shell/cmd/cmd_touch.c
Normal file
54
programs/system/shell/cmd/cmd_touch.c
Normal file
@ -0,0 +1,54 @@
|
||||
|
||||
int cmd_touch(char file[])
|
||||
{
|
||||
|
||||
kol_struct70 k70;
|
||||
char temp[256];
|
||||
unsigned result;
|
||||
|
||||
if (NULL == file)
|
||||
{
|
||||
printf(" touch filename\n\r");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ( ( 0 == strcmp(file, ".") ) || ( 0 == strcmp(file, "..") ) || ( 0 == strcmp(cur_dir, "/")) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ( '/' == file[0])
|
||||
{
|
||||
strcpy(temp, file);
|
||||
|
||||
if ( !file_check(temp) )
|
||||
k70.p00 = 2;
|
||||
else
|
||||
k70.p00 = 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(temp, cur_dir);
|
||||
strcat(temp, file);
|
||||
|
||||
if ( !file_check(temp) )
|
||||
k70.p00 = 2;
|
||||
else
|
||||
k70.p00 = 3;
|
||||
}
|
||||
|
||||
k70.p04 = 0;
|
||||
k70.p08 = 0;
|
||||
k70.p12 = 0;
|
||||
k70.p16 = 0;
|
||||
k70.p20 = 0;
|
||||
k70.p21 = temp;
|
||||
|
||||
result = kol_file_70(&k70);
|
||||
|
||||
if (0 == result)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
|
||||
}
|
6
programs/system/shell/cmd/cmd_ver.c
Normal file
6
programs/system/shell/cmd/cmd_ver.c
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
int cmd_ver(char param[])
|
||||
{
|
||||
printf (" %s\n\r", SHELL_VERSION);
|
||||
return TRUE;
|
||||
}
|
126
programs/system/shell/modules/module_alias.c
Normal file
126
programs/system/shell/modules/module_alias.c
Normal file
@ -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;
|
||||
|
||||
}
|
||||
|
||||
/// ===========================================================
|
203
programs/system/shell/modules/module_command.c
Normal file
203
programs/system/shell/modules/module_command.c
Normal file
@ -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);
|
||||
|
||||
}
|
||||
|
||||
/// ===========================================================
|
60
programs/system/shell/modules/module_executable.c
Normal file
60
programs/system/shell/modules/module_executable.c
Normal file
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// ===========================================================
|
16
programs/system/shell/modules/module_program.c
Normal file
16
programs/system/shell/modules/module_program.c
Normal file
@ -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);
|
||||
}
|
102
programs/system/shell/modules/module_script.c
Normal file
102
programs/system/shell/modules/module_script.c
Normal file
@ -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;
|
||||
}
|
||||
|
||||
/// ===========================================================
|
41
programs/system/shell/start.asm
Normal file
41
programs/system/shell/start.asm
Normal file
@ -0,0 +1,41 @@
|
||||
|
||||
format MS COFF
|
||||
|
||||
public Start
|
||||
public _PATH
|
||||
public _PARAM
|
||||
|
||||
extrn Memory
|
||||
extrn hEnd
|
||||
|
||||
extrn _kol_main
|
||||
|
||||
section ".text" code
|
||||
db "MENUET01"
|
||||
dd 1, Start, hEnd, Memory, hStack, _PARAM, _PATH
|
||||
|
||||
Start:
|
||||
|
||||
; èíèöèàëèçàöèÿ êó÷è
|
||||
mov eax, 68
|
||||
mov ebx, 11
|
||||
int 0x40
|
||||
|
||||
; âûçîâ ãëàâíîé ïðîöåäóðû
|
||||
mov eax, _kol_main
|
||||
call eax
|
||||
|
||||
; çàâåðøåíèå ðàáîòû ïðîãðàììû
|
||||
mov eax, -1
|
||||
int 0x40
|
||||
|
||||
section ".bss"
|
||||
|
||||
_PARAM:
|
||||
rb 256
|
||||
|
||||
_PATH:
|
||||
rb 256
|
||||
|
||||
rb 8*1024
|
||||
hStack:
|
3
programs/system/shell/system/boolean.h
Normal file
3
programs/system/shell/system/boolean.h
Normal file
@ -0,0 +1,3 @@
|
||||
|
||||
#define FALSE 0
|
||||
#define TRUE 1
|
88
programs/system/shell/system/console.c
Normal file
88
programs/system/shell/system/console.c
Normal file
@ -0,0 +1,88 @@
|
||||
|
||||
///===========================
|
||||
|
||||
#define CON_COLOR_BLUE 1
|
||||
#define CON_COLOR_GREEN 2
|
||||
#define CON_COLOR_RED 4
|
||||
#define CON_COLOR_BRIGHT 8
|
||||
/* öâåò ôîíà */
|
||||
#define CON_BGR_BLUE 0x10
|
||||
#define CON_BGR_GREEN 0x20
|
||||
#define CON_BGR_RED 0x40
|
||||
#define CON_BGR_BRIGHT 0x80
|
||||
|
||||
///===========================
|
||||
|
||||
void (* _stdcall con_init)(unsigned w_w, unsigned w_h, unsigned s_w, unsigned s_h, const char* t);
|
||||
void (* _cdecl printf)(const char* format,...);
|
||||
void (* _stdcall _exit)(char bCloseWindow);
|
||||
void (* __stdcall gets)(char* str, int n);
|
||||
int (* __stdcall getch)(void);
|
||||
int (* __stdcall con_get_font_height)(void);
|
||||
int (* __stdcall con_set_cursor_height)(int new_height);
|
||||
unsigned (*__stdcall con_get_flags)(void);
|
||||
unsigned (*__stdcall con_set_flags)(unsigned new_flags);
|
||||
void (*__stdcall con_cls)(void);
|
||||
|
||||
///===========================
|
||||
|
||||
void CONSOLE_INIT(char title[])
|
||||
{
|
||||
kol_struct_import *imp;
|
||||
|
||||
imp = kol_cofflib_load("/sys/lib/console.obj");
|
||||
if (imp == NULL)
|
||||
kol_exit();
|
||||
|
||||
con_init = ( _stdcall void (*)(unsigned, unsigned, unsigned, unsigned, const char*))
|
||||
kol_cofflib_procload (imp, "con_init");
|
||||
if (con_init == NULL)
|
||||
kol_exit();
|
||||
|
||||
printf = ( _cdecl void (*)(const char*,...))
|
||||
kol_cofflib_procload (imp, "con_printf");
|
||||
if (printf == NULL)
|
||||
kol_exit();
|
||||
|
||||
_exit = ( _stdcall void (*)(char))
|
||||
kol_cofflib_procload (imp, "con_exit");
|
||||
if (_exit == NULL)
|
||||
kol_exit();
|
||||
|
||||
gets = ( _stdcall void (*)(char*, int))
|
||||
kol_cofflib_procload (imp, "con_gets");
|
||||
if (gets == NULL)
|
||||
kol_exit();
|
||||
|
||||
getch = ( _stdcall int (*)(void))
|
||||
kol_cofflib_procload (imp, "con_getch2");
|
||||
if (getch == NULL)
|
||||
kol_exit();
|
||||
|
||||
con_get_font_height = ( _stdcall int (*)(void))
|
||||
kol_cofflib_procload (imp, "con_get_font_height");
|
||||
if (con_get_font_height == NULL)
|
||||
kol_exit();
|
||||
|
||||
con_set_cursor_height = ( _stdcall int (*)(int))
|
||||
kol_cofflib_procload (imp, "con_set_cursor_height");
|
||||
if (con_set_cursor_height == NULL)
|
||||
kol_exit();
|
||||
|
||||
con_get_flags = ( _stdcall unsigned (*)(void))
|
||||
kol_cofflib_procload (imp, "con_get_flags");
|
||||
if (con_get_flags == NULL)
|
||||
kol_exit();
|
||||
|
||||
con_set_flags = ( _stdcall unsigned (*)(unsigned))
|
||||
kol_cofflib_procload (imp, "con_set_flags");
|
||||
if (con_set_flags == NULL)
|
||||
kol_exit();
|
||||
|
||||
con_cls = ( _stdcall void (*)(void))
|
||||
kol_cofflib_procload (imp, "con_cls");
|
||||
if (con_cls == NULL)
|
||||
kol_exit();
|
||||
|
||||
con_init(-1, -1, -1, -1, title);
|
||||
}
|
412
programs/system/shell/system/kolibri.c
Normal file
412
programs/system/shell/system/kolibri.c
Normal file
@ -0,0 +1,412 @@
|
||||
|
||||
#include "kolibri.h"
|
||||
#include "string.h"
|
||||
|
||||
|
||||
extern char KOL_PATH[256];
|
||||
extern char KOL_PARAM[256];
|
||||
extern char KOL_DIR[256];
|
||||
|
||||
|
||||
void kol_exit()
|
||||
{
|
||||
asm ("int $0x40"::"a"(-1));
|
||||
}
|
||||
|
||||
|
||||
void kol_sleep(unsigned d)
|
||||
{
|
||||
asm ("int $0x40"::"a"(5), "b"(d));
|
||||
}
|
||||
|
||||
|
||||
void kol_wnd_define(unsigned x, unsigned y, unsigned w, unsigned h, unsigned c)
|
||||
{
|
||||
asm ("nop"::"a"(0), "b"(x*65536+w), "c"(y*65536+h), "d"(c));
|
||||
asm ("movl $0xffffff, %esi \n int $0x40");
|
||||
}
|
||||
|
||||
|
||||
void kol_wnd_move(unsigned x, unsigned y)
|
||||
{
|
||||
asm ("nop"::"a"(67), "b"(x), "c"(y));
|
||||
asm ("movl $-1, %edx \n movl $-1, %esi \n int $0x40");
|
||||
}
|
||||
|
||||
|
||||
void kol_event_mask(unsigned e)
|
||||
{
|
||||
asm ("int $0x40"::"a"(40), "b"(e));
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_event_wait()
|
||||
{
|
||||
asm ("int $0x40"::"a"(10));
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_event_wait_time(unsigned time)
|
||||
{
|
||||
asm ("int $0x40"::"a"(23), "b"(time));
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_event_check()
|
||||
{
|
||||
asm ("int $0x40"::"a"(11));
|
||||
}
|
||||
|
||||
|
||||
void kol_paint_start()
|
||||
{
|
||||
asm ("int $0x40"::"a"(12), "b"(1));
|
||||
}
|
||||
|
||||
|
||||
void kol_paint_end()
|
||||
{
|
||||
asm ("int $0x40"::"a"(12), "b"(2));
|
||||
}
|
||||
|
||||
|
||||
void kol_paint_pixel(unsigned x, unsigned y, unsigned c)
|
||||
{
|
||||
asm ("int $0x40"::"a"(1), "b"(x), "c"(y), "d"(c));
|
||||
}
|
||||
|
||||
|
||||
void kol_paint_bar(unsigned x, unsigned y, unsigned w, unsigned h, unsigned c)
|
||||
{
|
||||
asm ("int $0x40"::"a"(13), "b"(x*65536+w), "c"(y*65536+h), "d"(c));
|
||||
}
|
||||
|
||||
|
||||
void kol_paint_line(unsigned x1, unsigned y1, unsigned x2, unsigned y2, unsigned c)
|
||||
{
|
||||
asm ("int $0x40"::"a"(38), "b"(x1*65536+x2), "c"(y1*65536+y2), "d"(c));
|
||||
}
|
||||
|
||||
|
||||
void kol_paint_string(unsigned x, unsigned y, char *s, unsigned c)
|
||||
{
|
||||
asm ("int $0x40"::"a"(4), "b"(x*65536+y), "c"(c), "d"(s));
|
||||
}
|
||||
|
||||
|
||||
void kol_paint_image(unsigned x, unsigned y, unsigned w, unsigned h, char *d)
|
||||
{
|
||||
asm ("int $0x40"::"a"(7), "c"(w*65536+h), "d"(x*65536+y), "b"(d));
|
||||
}
|
||||
|
||||
|
||||
void kol_paint_image_pal(unsigned x, unsigned y, unsigned w, unsigned h, char *d, unsigned *palette)
|
||||
{
|
||||
asm ("nop"::"c"(w*65536+h), "d"(x*65536+y), "b"(d));
|
||||
asm ("nop"::"a"(palette));
|
||||
asm ("movl %eax, %edi");
|
||||
asm ("xor %eax, %eax");
|
||||
asm ("movl %eax, %ebp");
|
||||
asm ("pushl $8");
|
||||
asm ("popl %esi");
|
||||
asm ("int $0x40"::"a"(65));
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_key_get()
|
||||
{
|
||||
asm ("int $0x40"::"a"(2));
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_key_control()
|
||||
{
|
||||
asm ("int $0x40"::"a"(66), "b"(3));
|
||||
}
|
||||
|
||||
|
||||
void kol_key_lang_set(unsigned lang)
|
||||
{
|
||||
asm ("int $0x40"::"a"(21), "b"(2), "c"(9), "d"(lang));
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_key_lang_get()
|
||||
{
|
||||
asm ("int $0x40"::"a"(26), "b"(2), "c"(9));
|
||||
}
|
||||
|
||||
|
||||
void kol_key_mode_set(unsigned mode)
|
||||
{
|
||||
asm ("int $0x40"::"a"(66), "b"(1), "c"(mode));
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_key_mode_get()
|
||||
{
|
||||
asm ("int $0x40"::"a"(66), "b"(2));
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_btn_get()
|
||||
{
|
||||
asm ("int $0x40"::"a"(17));
|
||||
}
|
||||
|
||||
|
||||
void kol_btn_define(unsigned x, unsigned y, unsigned w, unsigned h, unsigned d, unsigned c)
|
||||
{
|
||||
asm ("nop"::"b"(x*65536+w), "c"(y*65536+h), "d"(d));
|
||||
asm ("nop"::"a"(c));
|
||||
asm ("movl %eax, %esi");
|
||||
asm ("int $0x40"::"a"(8));
|
||||
}
|
||||
|
||||
|
||||
void kol_btn_type(unsigned t)
|
||||
{
|
||||
asm ("int $0x40"::"a"(48), "b"(1), "c"(t));
|
||||
}
|
||||
|
||||
|
||||
void kol_wnd_caption(char *s)
|
||||
{
|
||||
asm ("int $0x40"::"a"(71), "b"(1), "c"(s));
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_mouse_pos()
|
||||
{
|
||||
asm ("int $0x40"::"a"(37), "b"(0));
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_mouse_posw()
|
||||
{
|
||||
asm ("int $0x40"::"a"(37), "b"(1));
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_mouse_btn()
|
||||
{
|
||||
asm ("int $0x40"::"a"(37), "b"(2));
|
||||
}
|
||||
|
||||
|
||||
void kol_board_putc(char c)
|
||||
{
|
||||
asm ("int $0x40"::"a"(63), "b"(1), "c"(c));
|
||||
}
|
||||
|
||||
|
||||
void kol_board_puts(char *s)
|
||||
{
|
||||
unsigned i;
|
||||
i = 0;
|
||||
while (*(s+i))
|
||||
{
|
||||
asm ("int $0x40"::"a"(63), "b"(1), "c"(*(s+i)));
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void kol_board_puti(int n)
|
||||
{
|
||||
char c;
|
||||
int i = 0;
|
||||
do
|
||||
{
|
||||
c = n % 10 + '0';
|
||||
asm ("int $0x40"::"a"(63), "b"(1), "c"(c));
|
||||
i++;
|
||||
}
|
||||
while ((n /= 10) > 0);
|
||||
}
|
||||
|
||||
|
||||
int kol_file_70(kol_struct70 *k)
|
||||
{
|
||||
asm ("int $0x40"::"a"(70), "b"(k));
|
||||
}
|
||||
|
||||
|
||||
kol_struct_import* kol_cofflib_load(char *name)
|
||||
{
|
||||
asm ("int $0x40"::"a"(68), "b"(19), "c"(name));
|
||||
}
|
||||
|
||||
|
||||
void* kol_cofflib_procload (kol_struct_import *imp, char *name)
|
||||
{
|
||||
int i;
|
||||
for (i=0;;i++)
|
||||
if ( NULL == ((imp+i) -> name))
|
||||
break;
|
||||
else
|
||||
if ( 0 == strcmp(name, (imp+i)->name) )
|
||||
return (imp+i)->data;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_cofflib_procnum (kol_struct_import *imp)
|
||||
{
|
||||
unsigned i, n;
|
||||
|
||||
for (i=n=0;;i++)
|
||||
if ( NULL == ((imp+i) -> name))
|
||||
break;
|
||||
else
|
||||
n++;
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
|
||||
void kol_cofflib_procname (kol_struct_import *imp, char *name, unsigned n)
|
||||
{
|
||||
unsigned i;
|
||||
*name = 0;
|
||||
|
||||
for (i=0;;i++)
|
||||
if ( NULL == ((imp+i) -> name))
|
||||
break;
|
||||
else
|
||||
if ( i == n )
|
||||
{
|
||||
strcpy(name, ((imp+i)->name));
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_system_cpufreq()
|
||||
{
|
||||
asm ("int $0x40"::"a"(18), "b"(5));
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_system_mem()
|
||||
{
|
||||
asm ("int $0x40"::"a"(18), "b"(17));
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_system_memfree()
|
||||
{
|
||||
asm ("int $0x40"::"a"(18), "b"(16));
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_system_time_get()
|
||||
{
|
||||
asm ("int $0x40"::"a"(3));
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_system_date_get()
|
||||
{
|
||||
asm ("int $0x40"::"a"(29));
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_system_end(unsigned param)
|
||||
{
|
||||
asm ("int $0x40"::"a"(18), "b"(9), "c"(param));
|
||||
}
|
||||
|
||||
|
||||
void kol_path_file2dir(char *dir, char *fname)
|
||||
{
|
||||
unsigned i;
|
||||
strcpy (dir, fname);
|
||||
for ( i = strlen(dir);; --i)
|
||||
if ( '/' == dir[i])
|
||||
{
|
||||
dir[i] = '\0';
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void kol_path_full(char *full, char *fname)
|
||||
{
|
||||
char temp[256];
|
||||
|
||||
switch (*fname)
|
||||
{
|
||||
|
||||
case '/':
|
||||
strncpy(temp, fname+1, 2);
|
||||
temp[2]=0;
|
||||
if ( (!strcmp("rd", temp)) || (!strcmp("hd", temp)) || (!strcmp("cd", temp)) )
|
||||
strcpy (full, fname);
|
||||
break;
|
||||
|
||||
case '.':
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void kol_screen_wait_rr()
|
||||
{
|
||||
asm ("int $0x40"::"a"(18), "b"(14));
|
||||
}
|
||||
|
||||
|
||||
|
||||
void kol_screen_get_size(unsigned *w, unsigned *h)
|
||||
{
|
||||
unsigned size;
|
||||
asm ("int $0x40":"=a"(size):"a"(14));
|
||||
*w = size / 65536;
|
||||
*h = size % 65536;
|
||||
}
|
||||
|
||||
|
||||
|
||||
unsigned kol_skin_height()
|
||||
{
|
||||
asm ("int $0x40"::"a"(48), "b"(4));
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_thread_start(unsigned start, unsigned stack)
|
||||
{
|
||||
asm ("int $0x40"::"a"(51), "b"(1), "c"(start), "d"(stack));
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_time_tick()
|
||||
{
|
||||
asm ("int $0x40"::"a"(26), "b"(9));
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_sound_speaker(char data[])
|
||||
{
|
||||
asm ("movl %0, %%esi"::"a"(data));
|
||||
asm ("int $0x40"::"a"(55), "b"(55));
|
||||
}
|
||||
|
||||
|
||||
unsigned kol_process_info(unsigned slot, char buf1k[])
|
||||
{
|
||||
asm ("int $0x40"::"a"(9), "b"(buf1k), "c"(slot));
|
||||
}
|
||||
|
||||
|
||||
int kol_process_kill_pid(unsigned process)
|
||||
{
|
||||
asm ("int $0x40"::"a"(18), "b"(18), "c"(process));
|
||||
}
|
90
programs/system/shell/system/kolibri.h
Normal file
90
programs/system/shell/system/kolibri.h
Normal file
@ -0,0 +1,90 @@
|
||||
|
||||
#define NULL ((void*)0)
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned p00 __attribute__((packed));
|
||||
unsigned p04 __attribute__((packed));
|
||||
unsigned p08 __attribute__((packed));
|
||||
unsigned p12 __attribute__((packed));
|
||||
unsigned p16 __attribute__((packed));
|
||||
char p20 __attribute__((packed));
|
||||
char *p21 __attribute__((packed));
|
||||
} kol_struct70 __attribute__((packed));
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned p00 __attribute__((packed));
|
||||
char p04 __attribute__((packed));
|
||||
char p05[3] __attribute__((packed));
|
||||
unsigned p08 __attribute__((packed));
|
||||
unsigned p12 __attribute__((packed));
|
||||
unsigned p16 __attribute__((packed));
|
||||
unsigned p20 __attribute__((packed));
|
||||
unsigned p24 __attribute__((packed));
|
||||
unsigned p28 __attribute__((packed));
|
||||
unsigned p32[2] __attribute__((packed));
|
||||
unsigned p40 __attribute__((packed));
|
||||
} kol_struct_BDVK __attribute__((packed));
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char *name __attribute__((packed));
|
||||
void *data __attribute__((packed));
|
||||
} kol_struct_import __attribute__((packed));
|
||||
|
||||
|
||||
void kol_exit();
|
||||
void kol_sleep(unsigned d);
|
||||
void kol_wnd_define(unsigned x, unsigned y, unsigned w, unsigned h, unsigned c);
|
||||
void kol_wnd_move(unsigned x, unsigned y);
|
||||
void kol_wnd_caption(char *s);
|
||||
void kol_event_mask(unsigned e);
|
||||
unsigned kol_event_wait();
|
||||
unsigned kol_event_wait_time(unsigned time);
|
||||
unsigned kol_event_check();
|
||||
void kol_paint_start();
|
||||
void kol_paint_end();
|
||||
void kol_paint_pixel(unsigned x, unsigned y, unsigned c);
|
||||
void kol_paint_bar(unsigned x, unsigned y, unsigned w, unsigned h, unsigned c);
|
||||
void kol_paint_line(unsigned x1, unsigned y1, unsigned x2, unsigned y2, unsigned c);
|
||||
void kol_paint_string(unsigned x, unsigned y, char *s, unsigned c);
|
||||
void kol_paint_image(unsigned x, unsigned y, unsigned w, unsigned h, char *d);
|
||||
void kol_paint_image_pal(unsigned x, unsigned y, unsigned w, unsigned h, char *d, unsigned *palette);
|
||||
unsigned kol_key_get();
|
||||
unsigned kol_key_control();
|
||||
void kol_key_lang_set(unsigned lang);
|
||||
unsigned kol_key_lang_get();
|
||||
void kol_key_mode_set(unsigned mode);
|
||||
unsigned kol_key_mode_get();
|
||||
void kol_btn_define(unsigned x, unsigned y, unsigned w, unsigned h, unsigned d, unsigned c);
|
||||
unsigned kol_btn_get();
|
||||
void kol_btn_type(unsigned t);
|
||||
unsigned kol_mouse_pos();
|
||||
unsigned kol_mouse_posw();
|
||||
unsigned kol_mouse_btn();
|
||||
void kol_board_putc(char c);
|
||||
void kol_board_puts(char *s);
|
||||
void kol_board_puti(int n);
|
||||
int kol_file_70(kol_struct70 *k);
|
||||
kol_struct_import* kol_cofflib_load(char *name);
|
||||
void* kol_cofflib_procload (kol_struct_import *imp, char *name);
|
||||
unsigned kol_cofflib_procnum (kol_struct_import *imp);
|
||||
void kol_cofflib_procname (kol_struct_import *imp, char *name, unsigned n);
|
||||
unsigned kol_system_end(unsigned param);
|
||||
unsigned kol_system_cpufreq();
|
||||
unsigned kol_system_mem();
|
||||
unsigned kol_system_memfree();
|
||||
unsigned kol_system_time_get();
|
||||
unsigned kol_system_date_get();
|
||||
void kol_path_file2dir(char *dir, char *fname);
|
||||
void kol_path_full(char *full, char *fname);
|
||||
void kol_screen_wait_rr();
|
||||
void kol_screen_get_size(unsigned *w, unsigned *h);
|
||||
unsigned kol_skin_height();
|
||||
unsigned kol_thread_start(unsigned start, unsigned stack);
|
||||
unsigned kol_time_tick();
|
||||
unsigned kol_sound_speaker(char data[]);
|
||||
unsigned kol_process_info(unsigned slot, char buf1k[]);
|
||||
int kol_process_kill_pid(unsigned process);
|
33
programs/system/shell/system/stdlib.c
Normal file
33
programs/system/shell/system/stdlib.c
Normal file
@ -0,0 +1,33 @@
|
||||
|
||||
unsigned int seed_o = 0x45168297;
|
||||
|
||||
|
||||
void srand (unsigned seed)
|
||||
{
|
||||
seed_o = seed;
|
||||
}
|
||||
|
||||
|
||||
int rand (void)
|
||||
{
|
||||
seed_o = seed_o * 0x15a4e35 + 1;
|
||||
return(seed_o >> 16);
|
||||
}
|
||||
|
||||
|
||||
void* malloc(unsigned s)
|
||||
{
|
||||
asm ("int $0x40"::"a"(68), "b"(12), "c"(s) );
|
||||
}
|
||||
|
||||
|
||||
void free(void *p)
|
||||
{
|
||||
asm ("int $0x40"::"a"(68), "b"(13), "c"(p) );
|
||||
}
|
||||
|
||||
|
||||
void* realloc(void *p, unsigned s)
|
||||
{
|
||||
asm ("int $0x40"::"a"(68), "b"(12), "c"(p), "d"(s) );
|
||||
}
|
14
programs/system/shell/system/stdlib.h
Normal file
14
programs/system/shell/system/stdlib.h
Normal file
@ -0,0 +1,14 @@
|
||||
|
||||
#define RAND_MAX 0x7FFFU
|
||||
|
||||
#define isspace(c) ((c)==' ')
|
||||
#define abs(i) (((i)<0)?(-(i)):(i))
|
||||
|
||||
#define random(num) ((rand()*(num))/((RAND_MAX+1)))
|
||||
|
||||
void* malloc(unsigned size);
|
||||
void free(void *pointer);
|
||||
void* realloc(void* pointer, unsigned size);
|
||||
|
||||
void srand (unsigned seed);
|
||||
int rand (void);
|
124
programs/system/shell/system/string.c
Normal file
124
programs/system/shell/system/string.c
Normal file
@ -0,0 +1,124 @@
|
||||
|
||||
#include "string.h"
|
||||
|
||||
void* memset(void *mem, int c, unsigned size)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
for ( i = 0; i < size; i++ )
|
||||
*((char *)mem+i) = (char) c;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
void* memcpy(void *dst, const void *src, unsigned size)
|
||||
{
|
||||
|
||||
unsigned i;
|
||||
|
||||
for ( i = 0; i < size; i++)
|
||||
*(char *)(dst+i) = *(char *)(src+i);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
int memcmp(const void* buf1, const void* buf2, int count)
|
||||
{
|
||||
int i;
|
||||
for (i=0;i<count;i++)
|
||||
{
|
||||
if (*(unsigned char*)buf1<*(unsigned char*)buf2)
|
||||
return -1;
|
||||
if (*(unsigned char*)buf1>*(unsigned char*)buf2)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void strcat(char strDest[], char strSource[])
|
||||
{
|
||||
|
||||
int i, j;
|
||||
|
||||
i = j = 0;
|
||||
while (strDest[i] != '\0')
|
||||
i++;
|
||||
|
||||
while ((strDest[i++] = strSource[j++]) != '\0')
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
int strcmp(const char* string1, const char* string2)
|
||||
{
|
||||
|
||||
while (1)
|
||||
{
|
||||
if (*string1<*string2)
|
||||
return -1;
|
||||
if (*string1>*string2)
|
||||
return 1;
|
||||
|
||||
if (*string1=='\0')
|
||||
return 0;
|
||||
|
||||
string1++;
|
||||
string2++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void strcpy(char strDest[], const char strSource[])
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
i = 0;
|
||||
while ((strDest[i] = strSource[i]) != '\0')
|
||||
i++;
|
||||
|
||||
}
|
||||
|
||||
|
||||
char* strncpy(char *strDest, const char *strSource, unsigned n)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
if (! n )
|
||||
return strDest;
|
||||
|
||||
i = 0;
|
||||
while ((strDest[i] = strSource[i]) != '\0')
|
||||
if ( (n-1) == i )
|
||||
break;
|
||||
else
|
||||
i++;
|
||||
|
||||
return strDest;
|
||||
}
|
||||
|
||||
|
||||
int strlen(const char* string)
|
||||
{
|
||||
int i;
|
||||
|
||||
i=0;
|
||||
while (*string++) i++;
|
||||
return i;
|
||||
}
|
||||
|
||||
|
||||
|
||||
char* strchr(const char* string, int c)
|
||||
{
|
||||
while (*string)
|
||||
{
|
||||
if (*string==c)
|
||||
return (char*)string;
|
||||
string++;
|
||||
}
|
||||
return (char*)0;
|
||||
}
|
||||
|
15
programs/system/shell/system/string.h
Normal file
15
programs/system/shell/system/string.h
Normal file
@ -0,0 +1,15 @@
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL ((void*)0)
|
||||
#endif
|
||||
|
||||
void* memset(void *mem, int c, unsigned size);
|
||||
void* memcpy(void *dst, const void *src, unsigned size);
|
||||
int memcmp(const void* buf1, const void* buf2, int count);
|
||||
|
||||
void strcat(char strDest[], char strSource[]);
|
||||
int strcmp(const char* string1, const char* string2);
|
||||
void strcpy(char strDest[], const char strSource[]);
|
||||
char* strncpy(char *strDest, const char *strSource, unsigned n);
|
||||
int strlen(const char* string);
|
||||
char *strchr(const char* string, int c);
|
Loading…
Reference in New Issue
Block a user