simplify some code and fix tiny bugs
This commit is contained in:
		
							parent
							
								
									9a437218a2
								
							
						
					
					
						commit
						e267e6f907
					
				
							
								
								
									
										72
									
								
								CLI/CLI.c
									
									
									
									
									
								
							
							
						
						
									
										72
									
								
								CLI/CLI.c
									
									
									
									
									
								
							| @ -10,6 +10,24 @@ CLI_charOutFn CLI_charOut; | |||||||
| CMDList_t* CMDList; | CMDList_t* CMDList; | ||||||
| FIFOBuffChar_t* FIFO; | FIFOBuffChar_t* FIFO; | ||||||
| 
 | 
 | ||||||
|  | void CLI_charOut_save(char ch) | ||||||
|  | { | ||||||
|  | 	if (CLI_charOut != NULL) | ||||||
|  | 	{ | ||||||
|  | 		// create string of size one to be compatable with string print function
 | ||||||
|  | 		char c[2] = {ch, 0}; | ||||||
|  | 		(*CLI_charOut)(&c[0]); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void CLI_stringOut(char* str) | ||||||
|  | { | ||||||
|  | 	for (; *str != 0; str++) | ||||||
|  | 	{ | ||||||
|  | 		CLI_charOut_save(*str); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // initilize and register the lineout print function
 | // initilize and register the lineout print function
 | ||||||
| bool CLI_init(CLI_charOutFn lineOut, CMDList_t* cmdList) | bool CLI_init(CLI_charOutFn lineOut, CMDList_t* cmdList) | ||||||
| { | { | ||||||
| @ -20,8 +38,7 @@ bool CLI_init(CLI_charOutFn lineOut, CMDList_t* cmdList) | |||||||
| 
 | 
 | ||||||
| 	if (CLI_charOut != NULL) | 	if (CLI_charOut != NULL) | ||||||
| 	{ | 	{ | ||||||
| 		(*CLI_charOut)(">"); | 		CLI_stringOut((char*)"> "); | ||||||
| 		(*CLI_charOut)(" "); |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return true; | 	return true; | ||||||
| @ -61,11 +78,7 @@ int tryExecute(FIFOBuffChar_t* fifo) | |||||||
| 	{ | 	{ | ||||||
| 		(*(cmd->fn))(line); | 		(*(cmd->fn))(line); | ||||||
| 
 | 
 | ||||||
| 		if (CLI_charOut != NULL) | 		CLI_stringOut((char*)"> "); | ||||||
| 		{ |  | ||||||
| 			(*CLI_charOut)(">"); |  | ||||||
| 			(*CLI_charOut)(" "); |  | ||||||
| 		} |  | ||||||
| 		return true; | 		return true; | ||||||
| 	} | 	} | ||||||
| 	else | 	else | ||||||
| @ -74,11 +87,7 @@ int tryExecute(FIFOBuffChar_t* fifo) | |||||||
| 		{ | 		{ | ||||||
| 			char err[100]; | 			char err[100]; | ||||||
| 			sprintf(&err[0], "command not found: %s\n> ", line); | 			sprintf(&err[0], "command not found: %s\n> ", line); | ||||||
| 			for (int i=0; err[i] != 0; i++) | 			CLI_stringOut(&err[0]); | ||||||
| 			{ |  | ||||||
| 				char c[2] = {err[i], 0}; |  | ||||||
| 				(*CLI_charOut)(&c[0]); |  | ||||||
| 			} |  | ||||||
| 		} | 		} | ||||||
| 		return false; | 		return false; | ||||||
| 	} | 	} | ||||||
| @ -88,24 +97,22 @@ int tryExecute(FIFOBuffChar_t* fifo) | |||||||
| bool CLI_charIn(char c) | bool CLI_charIn(char c) | ||||||
| { | { | ||||||
| 	bool ok = true; | 	bool ok = true; | ||||||
| 	if ((c >= 'a') && (c <= 'z')) | 	char C = c; | ||||||
|  | 	if ((C >= 'a') && (C <= 'z')) | ||||||
| 	{ | 	{ | ||||||
| 		c &= (~0x20); // convert to uppercase
 | 		C &= (~0x20); // convert to uppercase
 | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if ( //TODO: update list of accepted characters
 | 	if ( //TODO: update list of accepted characters
 | ||||||
| 			   ((c >= 'A') && (c <= 'Z')) | 			   ((C >= 'A') && (C <= 'Z')) | ||||||
| 			|| ((c >= '0') && (c <= '9')) | 			|| ((c >= '0') && (c <= '9')) | ||||||
| 			|| (c == ' ') | 			|| (c == ' ') | ||||||
| 			|| (c == '-') | 			|| (c == '-') | ||||||
| 			|| (c == '_') | 			|| (c == '_') | ||||||
| 		) | 		) | ||||||
| 	{ | 	{ | ||||||
| 		FIFOBuffChar_put(FIFO, c); // save char in buffer
 | 		FIFOBuffChar_put(FIFO, C); // save char in buffer
 | ||||||
| 		if (CLI_charOut != NULL) | 		CLI_charOut_save(c); | ||||||
| 		{ // echo to terminal
 |  | ||||||
| 			(*CLI_charOut)(&c); |  | ||||||
| 		} |  | ||||||
| 	} | 	} | ||||||
| 	else | 	else | ||||||
| 	{ | 	{ | ||||||
| @ -116,7 +123,8 @@ bool CLI_charIn(char c) | |||||||
| 			case '\r': | 			case '\r': | ||||||
| 				if (CLI_charOut != NULL) | 				if (CLI_charOut != NULL) | ||||||
| 				{ // echo to terminal
 | 				{ // echo to terminal
 | ||||||
| 					(*CLI_charOut)(&c); | 					char ch[2] = {c, 0}; | ||||||
|  | 					(*CLI_charOut)(&ch[0]); | ||||||
| 				} | 				} | ||||||
| 				FIFOBuffChar_t* fifo = FIFO; | 				FIFOBuffChar_t* fifo = FIFO; | ||||||
| 				FIFO = FIFOBuffChar_create(); | 				FIFO = FIFOBuffChar_create(); | ||||||
| @ -126,33 +134,19 @@ bool CLI_charIn(char c) | |||||||
| 			 | 			 | ||||||
| 			case 127: // backspace
 | 			case 127: // backspace
 | ||||||
| 				if (FIFOBuffChar_pop(FIFO)) | 				if (FIFOBuffChar_pop(FIFO)) | ||||||
| 				{ | 				{ // pop something of the buffer
 | ||||||
| 					(*CLI_charOut)("\x1b"); | 					CLI_stringOut((char*)"\x1b[D \x1b[D"); // "<left arrow><space><left arrow>"
 | ||||||
| 					(*CLI_charOut)("["); |  | ||||||
| 					(*CLI_charOut)("D"); |  | ||||||
| 					(*CLI_charOut)(" "); |  | ||||||
| 					(*CLI_charOut)("\x1b"); |  | ||||||
| 					(*CLI_charOut)("["); |  | ||||||
| 					(*CLI_charOut)("D"); |  | ||||||
| 				} | 				} | ||||||
| 				break; | 				break; | ||||||
| 
 | 
 | ||||||
| 			case 27: // escape (start for arrow keys)
 | 			case 27: // escape (start for arrow keys)
 | ||||||
| 				sprintf(&str[0], "\ninvlid char: ESC - (%i)\n", c); | 				sprintf(&str[0], "\ninvlid char: ESC - (%i)\n", c); | ||||||
| 				for (int i=0; str[i] != 0; i++) | 				CLI_stringOut(&str[0]); | ||||||
| 				{ |  | ||||||
| 					char ch[2] = {str[i], 0}; |  | ||||||
| 					(*CLI_charOut)(&ch[0]); |  | ||||||
| 				} |  | ||||||
| 				break; | 				break; | ||||||
| 
 | 
 | ||||||
| 			default: | 			default: | ||||||
| 				sprintf(&str[0], "\ninvlid char: '%c' - (%i)\n", c, c); | 				sprintf(&str[0], "\ninvlid char: '%c' - (%i)\n", c, c); | ||||||
| 				for (int i=0; str[i] != 0; i++) | 				CLI_stringOut(&str[0]); | ||||||
| 				{ |  | ||||||
| 					char ch[2] = {str[i], 0}; |  | ||||||
| 					(*CLI_charOut)(&ch[0]); |  | ||||||
| 				} |  | ||||||
| 				break; | 				break; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user