81 lines
2.4 KiB
C
81 lines
2.4 KiB
C
#include <conio.h>
|
|
#include "apps.h"
|
|
|
|
void get_str(char *str, int len)
|
|
{
|
|
kb_key alpha;
|
|
|
|
int i;
|
|
for (i = 0; i<len-1 ; i++) {
|
|
text_mode_cursor(cursor_x, cursor_y);
|
|
alpha = kb_getkey();
|
|
switch (alpha.character) {
|
|
case 0x00: --i; break; // Ignore null characters
|
|
case 0x7F: --i; break;
|
|
case '\b': // Backspace
|
|
if (i>0) { // Only backspace our string
|
|
if (--cursor_x < 0) { // Begin of row - 1 = End of previous row
|
|
cursor_x = 79; cursor_y--;
|
|
}
|
|
putc_pos(cursor_x, cursor_y, 0);
|
|
str[--i] = 0;
|
|
}
|
|
i--; break;
|
|
|
|
case '\n': str[i]=0; putc('\n'); return;
|
|
|
|
default: putc(alpha.character);
|
|
str[i] = alpha.character;
|
|
str[i+1] = 0;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void shell()
|
|
{
|
|
char str[256];
|
|
char* param[16];
|
|
int i, len, params=0;
|
|
|
|
set_default_colors (0x07, 0x04);
|
|
clrscr();
|
|
|
|
|
|
|
|
for (;;) {
|
|
puts("\n] ");
|
|
get_str(str, 256);
|
|
|
|
len = strlen(str);
|
|
|
|
// Ignore spaces in front of command
|
|
i=0; params = 0;
|
|
while (str[i] == ' ') i++;
|
|
param[params] = str+i; params++; i++; // Parameter 0 = app itself
|
|
|
|
|
|
for (; i < len && params<16; i++) {
|
|
if (str[i] == ' ') str[i]=0;
|
|
|
|
if (str[i] != 0 && str[i-1]==0) {
|
|
param[params] = str+i; params++;
|
|
}
|
|
}
|
|
|
|
for (i = 0; strcmp(apps_lst[i], param[0])!=0 && i<apps_count; i++);
|
|
switch (i) {
|
|
case 0: puts("You must enter a command!\n"); break;
|
|
case 1: reboot();
|
|
case 2: apps_osver(); break;
|
|
case 3: apps_date(); break;
|
|
case 4: apps_place(); break;
|
|
case 5: apps_clrscr(); break;
|
|
case 6: apps_memory(params, (const char**)param); break;
|
|
default: puts("Invalid function: "); puts(param[0]);
|
|
putc('\n');
|
|
break;
|
|
}
|
|
}
|
|
} |