const char *apps_lst[] = { "", "reboot", "osver", "date", "place", "cls", "memory" }; int apps_count = 7; void apps_osver() { puts("CTA OS v0.1"); puts("\n(c) CTA 2010.\n"); } void apps_date() { puts("Today is "); puts((char*)clock_weekdays[clock.weekday]); puts(", "); putc((clock.day/10)+'0'); putc((clock.day%10)+'0'); puts(" "); puts((char*)clock_months[clock.month]); puts(" "); putc((clock.century/10)+'0'); putc((clock.century%10)+'0'); putc((clock.year/10)+'0'); putc((clock.year%10)+'0'); putc('\n'); } void apps_place() { puts("On your desk, if you didn't notice... \n"); } void apps_clrscr() { clrscr(); } void apps_memory(const int pn, const char* param[]) { if (pn<3) { puts ("Correct syntax: memory [start_address] [end_address] (in hex)\n"); return; } byte *start, *end; byte l1 = strlen(param[1]), l2 = strlen(param[2]); unsigned int a; int i; byte *count; a = 0; for(i = 0; i < l1; i++) { switch (param[1][i]) { case 'a': case 'A': a = a*16 + 10; break; case 'b': case 'B': a = a*16 + 11; break; case 'c': case 'C': a = a*16 + 12; break; case 'd': case 'D': a = a*16 + 13; break; case 'e': case 'E': a = a*16 + 14; break; case 'f': case 'F': a = a*16 + 15; break; default: if (!(param[1][i]>='0' && param[1][i]<='9')) { puts ((char*)param[1]); puts(" is not a valid hex address.\n"); return; } a = a*16 + (param[1][i] - '0'); break; } } start = (byte *)a; a = 0; for(i = 0; i < l2; i++) { switch (param[2][i]) { case 'a': case 'A': a = a*16 + 10; break; case 'b': case 'B': a = a*16 + 11; break; case 'c': case 'C': a = a*16 + 12; break; case 'd': case 'D': a = a*16 + 13; break; case 'e': case 'E': a = a*16 + 14; break; case 'f': case 'F': a = a*16 + 15; break; default: if (!(param[2][i]>='0' && param[2][i]<='9')) { puts ((char*)param[2]); puts(" is not a valid hex address.\n"); return; } a = a*16 + (param[2][i] - '0'); break; } } end = (byte *)a; while (start <= end) { put_hex ((unsigned int) start); puts(": "); for (count = start; count < start+16; count++) { putc(hex[*count/16]); putc(hex[*count%16]); putc(' '); } puts(" "); for (count = start; count < start+16; count++) putc(*count); putc('\n'); start+=16; } }