#include #include #include "xparameters.h" #include "xbasic_types.h" #include "xuartlite_l.h" char uart_buffer[300]; char *uart_s; int uart_cnt; int uart_gets() { char ch; while(1) { if(XUartLite_IsReceiveEmpty(STDIN_BASEADDRESS )) return 0; ch = inbyte(); switch(ch) { case '\r' : uart_cnt = 0; *uart_s = '\0'; return 1; case '\b': if(uart_cnt > 0) { uart_cnt--; *uart_s-- = ' '; xil_printf("\b \b"); } break; default : if(uart_cnt < 30) { uart_cnt++; *uart_s++ = ch; xil_printf("%c",ch); break; } } } } static const char *delim = " \f\n\r\t\v"; static int parse_args(char *cmdline, char **argv) { char *tok; int argc = 0; argv[argc] = NULL; for (tok = strtok(cmdline, delim); tok; tok = strtok(NULL, delim)) { argv[argc++] = tok; } return argc; } size_t strspn(const char *s, const char *accept) { const char *p; const char *a; size_t count = 0; for (p = s; *p != '\0'; ++p) { for (a = accept; *a != '\0'; ++a) { if (*p == *a) break; } if (*a == '\0') return count; ++count; } return count; } char *___strtok; char *strtok(char *s, const char *ct) { char *sbegin, *send; sbegin = s ? s : ___strtok; if (!sbegin) { return NULL; } sbegin += strspn(sbegin,ct); if (*sbegin == '\0') { ___strtok = NULL; return(NULL); } send = strpbrk(sbegin, ct); if (send && *send != '\0') *send++ = '\0'; ___strtok = send; return (sbegin); } void upper_str(char *str) { while(*str) { *str = toupper(*str); str++; } } unsigned int str_to_uint32(char *p, char **out_p, int base) { unsigned int v = 0; while (isspace(*p)) p++; if (((base == 16) || (base == 0)) && ((*p == '0') && ((p[1] == 'x') || (p[1] == 'X')))) { p += 2; base = 16; } if (base == 0) { if (*p == '0') base = 8; else base = 10; } while (1) { char c = *p; if ((c >= '0') && (c <= '9') && (c - '0' < base)) v = (v * base) + (c - '0'); else if ((c >= 'a') && (c <= 'z') && (c - 'a' + 10 < base)) v = (v * base) + (c - 'a' + 10); else if ((c >= 'A') && (c <= 'Z') && (c - 'A' + 10 < base)) v = (v * base) + (c - 'A' + 10); else break; p++; } if (out_p) *out_p = (char*)p; return v; }