diff options
| -rw-r--r-- | src/libs/utils.c | 18 | ||||
| -rw-r--r-- | src/libs/utils.h | 1 | ||||
| -rw-r--r-- | src/main.c | 13 |
3 files changed, 14 insertions, 18 deletions
diff --git a/src/libs/utils.c b/src/libs/utils.c index 75b5661..b6500ef 100644 --- a/src/libs/utils.c +++ b/src/libs/utils.c @@ -12,6 +12,7 @@ void memset(u8 *start, u8 value, u32 size){ } } +// The following implementation is incomplete int modulo(int dividend, int divisor){ while((dividend-divisor)>0){dividend-=divisor;} return dividend; @@ -21,14 +22,7 @@ int strlen(char * cp) { int len=0; while( cp[len++]) ; - return len - 1 ; //because it counted the zero which we don't want. -} - -int wordlen(char *s) -{ - int len=0; - while( *s!='\n' && *s!='\0' && *s!=' '){ s++; } - return len - 1 ; //because it counted the zero which we don't want. + return len - 1 ; } u8 strcmp(char *str1, char*str2){ @@ -43,11 +37,11 @@ u8 strcmp(char *str1, char*str2){ u8 strncmp(char *str1, char *str2, int n){ for(int i=0;i<n;i++){ - if(str1[i] == '\0' || str2[i] == '\0') - break; + if(str1[i] == '\0' || str2[i] == '\0'){ + return str1[i] != str2[i]; + } if(str1[i] != str2[i]) return 1; } - - return *str1 != *str2; + return 0; } diff --git a/src/libs/utils.h b/src/libs/utils.h index 140f1fd..8260ca2 100644 --- a/src/libs/utils.h +++ b/src/libs/utils.h @@ -23,7 +23,6 @@ int modulo(int dividend, int divisor); // Assumes that both argument are positve // Strings (not these functions do not follow libc standards and are buggy) int strlen(char * cp); -int wordlen(char *s); u8 strcmp(char *str1, char*str2); u8 strncmp(char *str1, char*str2, int n); @@ -12,10 +12,13 @@ char cmd[64]; char *cmdptr=cmd; // Execute command from cmd buffer +// This is a test function which is buggy void exec(){ - if(!strncmp(cmd, "blink", strlen("exit"))) + if(cmd == cmdptr) + return; + else if(!strncmp(cmd, "blink", 5)) gpio_blink_led(1); - else if(!strncmp(cmd, "help", strlen("help"))) + else if(!strncmp(cmd, "help", 4)) tty_putstr(HELP); else if(cmdptr != cmd) tty_putstr("Unknown command (see help)\n\r"); @@ -30,6 +33,8 @@ void main(){ // REPL + // TODO: Handling arrows etc. + // Pressing arrow freezes the shell char c=tty_getchar(); tty_putstr(MOTD); tty_putstr(PROMPT); @@ -47,14 +52,12 @@ void main(){ cmdptr--; } } - else{ + else if(c>=32 && c <= 127){ // Printable char *cmdptr=c; cmdptr++; tty_putchar(c); } } - - return; } |
