darkvater@135: #include "stdafx.h" darkvater@135: #include "ttd.h" darkvater@135: #include "window.h" darkvater@135: #include "gui.h" darkvater@135: #include "gfx.h" darkvater@135: #include "player.h" darkvater@135: #include "variables.h" darkvater@135: #include "hal.h" darkvater@135: #include darkvater@135: #include "console.h" darkvater@135: darkvater@135: darkvater@135: // ** main console ** // darkvater@135: static bool _iconsole_inited; darkvater@135: static byte* _iconsole_buffer[80]; darkvater@135: static byte _iconsole_cbuffer[80]; darkvater@135: static byte _iconsole_cmdline[255]; darkvater@135: static byte _iconsole_cmdpos; dominik@136: static byte _iconsole_mode = ICONSOLE_CLOSED; darkvater@135: static Window *_iconsole_win = NULL; darkvater@135: static byte _iconsole_scroll; darkvater@135: darkvater@141: // ** main console cmd buffer ** // sign_de: especialy for Celestar :D darkvater@141: static byte* _iconsole_cmdbuffer[20]; darkvater@141: static byte _iconsole_cmdbufferpos; darkvater@141: darkvater@135: // ** console cursor ** // darkvater@135: static bool _icursor_state; darkvater@135: static byte _icursor_rate; darkvater@135: static byte _icursor_counter; darkvater@135: darkvater@135: // ** console window ** // darkvater@135: static void IConsoleWndProc(Window *w, WindowEvent *e); darkvater@135: static const Widget _iconsole_window_widgets[] = {{WWT_LAST}}; darkvater@135: static const WindowDesc _iconsole_window_desc = { darkvater@135: 0, 0, 2, 2, darkvater@135: WC_CONSOLE,0, darkvater@135: WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS, darkvater@135: _iconsole_window_widgets, darkvater@135: IConsoleWndProc, darkvater@135: }; darkvater@135: darkvater@135: // ** console parser ** // darkvater@135: static _iconsole_cmd * _iconsole_cmds; // list of registred commands darkvater@135: static _iconsole_var * _iconsole_vars; // list of registred vars darkvater@135: darkvater@135: // ** console std lib ** // darkvater@135: static byte _stdlib_developer=1; darkvater@141: static bool _stdlib_con_developer=false; darkvater@135: static void IConsoleStdLibRegister(); darkvater@135: darkvater@135: /* *************** */ darkvater@135: /* end of header */ darkvater@135: /* *************** */ darkvater@135: darkvater@135: void IConsoleClearCommand() darkvater@135: { darkvater@135: int i; darkvater@135: for (i=0; i<255; i++) _iconsole_cmdline[i]=0; darkvater@135: _iconsole_cmdpos=0; darkvater@135: SetWindowDirty(_iconsole_win); darkvater@135: } darkvater@135: darkvater@135: static void IConsoleWndProc(Window *w, WindowEvent *e) darkvater@135: { darkvater@135: switch(e->event) { darkvater@135: dominik@136: case WE_PAINT: dominik@136: darkvater@135: GfxFillRect(w->left,w->top,w->width,w->height-1,0); darkvater@135: { darkvater@135: int i=_iconsole_scroll; darkvater@135: int max=(w->height/12)-1; darkvater@135: while ((i>_iconsole_scroll-max) && (_iconsole_buffer[i]!=NULL)) { darkvater@135: DoDrawString(_iconsole_buffer[i],5,w->height-(((_iconsole_scroll+2)-i)*12),_iconsole_cbuffer[i]); darkvater@135: i--; darkvater@135: } darkvater@135: DoDrawString("]",5,w->height-12,_iconsole_color_commands); darkvater@135: DoDrawString((char *)&_iconsole_cmdline,10,w->height-12,_iconsole_color_commands); darkvater@135: } darkvater@135: break; darkvater@135: darkvater@135: case WE_TICK: darkvater@135: darkvater@135: _icursor_counter++; darkvater@135: if (_icursor_counter>_icursor_rate) { darkvater@135: _icursor_state=!_icursor_state; darkvater@135: { darkvater@135: int posx; darkvater@135: int posy; darkvater@135: int color; darkvater@135: _cur_dpi=&_screen; darkvater@135: if (_icursor_state) color=14; else color=0; darkvater@135: posx=10+GetStringWidth((char *)&_iconsole_cmdline); darkvater@135: posy=w->height-3; darkvater@135: GfxFillRect(posx,posy,posx+5,posy+1,color); darkvater@135: _video_driver->make_dirty(posx,posy,5,1); darkvater@135: } darkvater@135: _icursor_counter=0; darkvater@135: } darkvater@135: break; darkvater@135: darkvater@135: case WE_KEYPRESS: darkvater@135: e->keypress.cont=false; darkvater@141: if (e->keypress.keycode == (WKC_UP)) darkvater@141: { darkvater@141: IConsoleCmdBufferNavigate(+1); darkvater@141: SetWindowDirty(w); darkvater@141: } else darkvater@141: if (e->keypress.keycode == (WKC_DOWN)) darkvater@141: { darkvater@141: IConsoleCmdBufferNavigate(-1); darkvater@141: SetWindowDirty(w); darkvater@141: } else darkvater@141: if (e->keypress.keycode == (WKC_SHIFT | WKC_PAGEUP)) darkvater@135: { darkvater@135: if ((_iconsole_scroll - ((w->height/12)-1))<0) { darkvater@135: _iconsole_scroll = 0; darkvater@135: } else { darkvater@135: _iconsole_scroll -= (w->height/12)-1; darkvater@135: } darkvater@135: SetWindowDirty(w); darkvater@135: } else darkvater@141: if (e->keypress.keycode == (WKC_SHIFT | WKC_PAGEDOWN)) darkvater@135: { darkvater@135: if ((_iconsole_scroll + ((w->height/12)-1))>79) { darkvater@135: _iconsole_scroll = 79; darkvater@135: } else { darkvater@135: _iconsole_scroll += (w->height/12)-1; darkvater@135: } darkvater@135: SetWindowDirty(w); darkvater@135: } else darkvater@141: if (e->keypress.keycode == (WKC_SHIFT | WKC_UP)) darkvater@135: { darkvater@135: if ((_iconsole_scroll - 1)<0) { darkvater@135: _iconsole_scroll = 0; darkvater@135: } else { darkvater@135: _iconsole_scroll -= 1; darkvater@135: } darkvater@135: SetWindowDirty(w); darkvater@135: } else darkvater@141: if (e->keypress.keycode == (WKC_SHIFT | WKC_DOWN)) darkvater@135: { darkvater@135: if ((_iconsole_scroll + 1)>79) { darkvater@135: _iconsole_scroll = 79; darkvater@135: } else { darkvater@135: _iconsole_scroll += 1; darkvater@135: } darkvater@135: SetWindowDirty(w); darkvater@135: } else darkvater@135: if (e->keypress.keycode == WKC_BACKQUOTE) darkvater@135: { darkvater@135: IConsoleSwitch(); darkvater@135: } else darkvater@135: if (e->keypress.keycode == WKC_RETURN) darkvater@135: { darkvater@135: IConsolePrintF(_iconsole_color_commands, "] %s", _iconsole_cmdline); darkvater@141: IConsoleCmdBufferAdd(_iconsole_cmdline); darkvater@135: IConsoleCmdExec((byte *) _iconsole_cmdline); darkvater@135: IConsoleClearCommand(); darkvater@135: } else darkvater@135: if (e->keypress.keycode == WKC_BACKSPACE) darkvater@135: { darkvater@135: if (_iconsole_cmdpos!=0) _iconsole_cmdpos--; darkvater@135: _iconsole_cmdline[_iconsole_cmdpos]=0; darkvater@135: SetWindowDirty(w); darkvater@141: _iconsole_cmdbufferpos=19; darkvater@135: } else darkvater@135: if (IS_INT_INSIDE((e->keypress.ascii), 32, 256)) darkvater@135: { darkvater@135: _iconsole_scroll=79; darkvater@135: _iconsole_cmdline[_iconsole_cmdpos]=e->keypress.ascii; darkvater@135: if (_iconsole_cmdpos!=255) _iconsole_cmdpos++; darkvater@135: SetWindowDirty(w); darkvater@141: _iconsole_cmdbufferpos=19; darkvater@135: } else e->keypress.cont=true; darkvater@135: break; darkvater@135: darkvater@135: } darkvater@135: } darkvater@135: darkvater@135: void IConsoleInit() darkvater@135: { darkvater@135: int i; darkvater@135: #if defined(WITH_REV) darkvater@135: extern char _openttd_revision[]; darkvater@135: #endif darkvater@141: _iconsole_color_default = 1; darkvater@141: _iconsole_color_error = 3; darkvater@141: _iconsole_color_debug = 5; darkvater@141: _iconsole_color_commands = 2; darkvater@135: _iconsole_scroll=79; darkvater@141: _iconsole_cmdbufferpos=19; darkvater@135: _iconsole_inited=true; darkvater@135: _iconsole_mode=ICONSOLE_CLOSED; darkvater@135: _iconsole_win=NULL; darkvater@135: _icursor_state=false; darkvater@135: _icursor_rate=5; darkvater@135: _icursor_counter=0; darkvater@141: for (i=0;i<20;i++) { darkvater@141: _iconsole_cmdbuffer[i]=NULL; darkvater@141: } darkvater@141: for (i=0;i<80;i++) { darkvater@141: _iconsole_buffer[i]=NULL; darkvater@141: _iconsole_cbuffer[i]=0; darkvater@141: } darkvater@135: IConsoleStdLibRegister(); darkvater@135: #if defined(WITH_REV) darkvater@141: IConsolePrintF(13,"OpenTTD Game Console Revision 3 - %s",_openttd_revision); darkvater@135: #else darkvater@141: IConsolePrint(13,"OpenTTD Game Console Revision 3"); darkvater@135: #endif darkvater@135: IConsolePrint(12,"---------------------------------"); darkvater@135: IConsolePrint(12,"use \"help\" for more info"); darkvater@135: IConsolePrint(12,""); darkvater@135: IConsoleClearCommand(); darkvater@141: IConsoleCmdBufferAdd(""); darkvater@135: } darkvater@135: darkvater@135: void IConsoleClear() darkvater@135: { darkvater@135: int i; darkvater@135: for (i=0;i<80;i++) if (_iconsole_buffer[i]!=NULL) { darkvater@135: free(_iconsole_buffer[i]); darkvater@135: } darkvater@135: } darkvater@135: darkvater@135: void IConsoleFree() darkvater@135: { darkvater@135: _iconsole_inited=false; darkvater@135: IConsoleClear(); darkvater@135: } darkvater@135: darkvater@135: void IConsoleResize() { darkvater@135: if (_iconsole_win!=NULL) { darkvater@135: _iconsole_win->height = _screen.height / 3; darkvater@135: _iconsole_win->width= _screen.width; darkvater@135: } darkvater@135: } darkvater@135: darkvater@135: void IConsoleSwitch() darkvater@135: { darkvater@135: if (_iconsole_mode==ICONSOLE_CLOSED) { darkvater@135: _iconsole_win = AllocateWindowDesc(&_iconsole_window_desc); darkvater@135: _iconsole_win->height = _screen.height / 3; darkvater@135: _iconsole_win->width= _screen.width; dominik@136: _iconsole_mode=ICONSOLE_OPENED; darkvater@135: } else darkvater@135: if (_iconsole_mode==ICONSOLE_OPENED) { darkvater@135: DeleteWindow(_iconsole_win); darkvater@135: _iconsole_win=NULL; darkvater@135: _iconsole_mode=ICONSOLE_CLOSED; darkvater@135: } darkvater@135: MarkWholeScreenDirty(); darkvater@135: MarkAllViewportsDirty(0,0,_screen.width,_screen.height); darkvater@135: _video_driver->make_dirty(0,0,_screen.width,_screen.height); darkvater@135: } darkvater@135: darkvater@135: void IConsoleClose() { dominik@136: if (_iconsole_mode==ICONSOLE_OPENED) IConsoleSwitch(); dominik@136: _iconsole_mode=ICONSOLE_CLOSED; darkvater@135: } darkvater@135: darkvater@135: void IConsoleOpen() { darkvater@135: if (_iconsole_mode==ICONSOLE_CLOSED) IConsoleSwitch(); darkvater@135: } darkvater@135: darkvater@141: void IConsoleCmdBufferAdd(byte * cmd) { darkvater@141: int i; darkvater@141: if (_iconsole_cmdbufferpos != 19) return; darkvater@141: if (_iconsole_cmdbuffer[18]!=NULL) free(_iconsole_cmdbuffer[18]); darkvater@141: for (i=18; i>0; i--) _iconsole_cmdbuffer[i]=_iconsole_cmdbuffer[i-1]; darkvater@141: i=strlen((char *)cmd); darkvater@141: _iconsole_cmdbuffer[0]=malloc(i+1); darkvater@141: memset(((void *)_iconsole_cmdbuffer[0]),0,i+1); darkvater@141: memcpy(((void *)_iconsole_cmdbuffer[0]),(void *)cmd,i); darkvater@141: _iconsole_cmdbuffer[0][i]=0; darkvater@141: _iconsole_cmdbufferpos = 19; darkvater@141: } darkvater@141: darkvater@141: void IConsoleCmdBufferNavigate(signed char direction) { darkvater@141: int i; darkvater@141: i=_iconsole_cmdbufferpos + direction; darkvater@141: if (i<0) i=19; darkvater@141: if (i>19) i=0; darkvater@141: if (direction>0) while (_iconsole_cmdbuffer[i]==NULL) { darkvater@141: i++; darkvater@141: if (i>19) i=0; darkvater@141: } darkvater@141: if (direction<0) while (_iconsole_cmdbuffer[i]==NULL) { darkvater@141: i--; darkvater@141: if (i<0) i=19; darkvater@141: } darkvater@141: _iconsole_cmdbufferpos = i; darkvater@141: IConsoleClearCommand(); darkvater@141: memcpy((void *)_iconsole_cmdline,(void *)_iconsole_cmdbuffer[i],strlen(_iconsole_cmdbuffer[i])); darkvater@141: _iconsole_cmdpos =strlen(_iconsole_cmdbuffer[i]); darkvater@141: } darkvater@141: darkvater@135: void IConsolePrint(byte color_code, byte* string) darkvater@135: { darkvater@135: byte * _ex; darkvater@135: byte * _new; darkvater@135: byte _exc; darkvater@135: byte _newc; darkvater@135: int i,j; darkvater@135: darkvater@135: if (!_iconsole_inited) return; darkvater@135: darkvater@135: _newc=color_code; darkvater@135: i=strlen((char *)string); darkvater@135: _new=malloc(i+1); darkvater@135: memset(_new,0,i+1); darkvater@135: memcpy(_new,string,i); darkvater@135: darkvater@135: for (j=0;j=0) { darkvater@135: _ex=_iconsole_buffer[i]; darkvater@135: _exc=_iconsole_cbuffer[i]; darkvater@135: _iconsole_buffer[i]=_new; darkvater@135: _iconsole_cbuffer[i]=_newc; darkvater@135: _new=_ex; darkvater@135: _newc=_exc; darkvater@135: i--; darkvater@135: } darkvater@135: if (_ex!=NULL) free(_ex); darkvater@135: darkvater@135: if (_iconsole_win!=NULL) SetWindowDirty(_iconsole_win); darkvater@135: } darkvater@135: darkvater@135: darkvater@135: void IConsolePrintF(byte color_code, const char *s, ...) darkvater@135: { darkvater@135: va_list va; darkvater@135: char buf[1024]; darkvater@135: va_start(va, s); darkvater@135: vsprintf(buf, s, va); darkvater@135: va_end(va); darkvater@135: IConsolePrint(color_code, (byte *) &buf); darkvater@135: } darkvater@135: darkvater@135: void IConsoleDebug(byte* string) { darkvater@135: if (_stdlib_developer>1) IConsolePrintF(_iconsole_color_debug, "DEBUG: %s", string); darkvater@135: } darkvater@135: darkvater@135: void IConsoleError(byte* string) { darkvater@135: if (_stdlib_developer>0) IConsolePrintF(_iconsole_color_error, "ERROR: %s", string); darkvater@135: } darkvater@135: darkvater@135: void IConsoleCmdRegister(byte * name, void * addr) { darkvater@135: byte * _new; darkvater@135: _iconsole_cmd * item; darkvater@135: _iconsole_cmd * item_new; darkvater@135: int i; darkvater@135: darkvater@135: i=strlen((char *)name); darkvater@135: _new=malloc(i+1); darkvater@135: memset(_new,0,i+1); darkvater@135: memcpy(_new,name,i); darkvater@135: darkvater@135: item_new = malloc(sizeof(_iconsole_cmd)); darkvater@135: darkvater@135: item_new->_next = NULL; darkvater@135: item_new->addr = addr; darkvater@135: item_new->name = _new; darkvater@135: darkvater@135: item = _iconsole_cmds; darkvater@135: if (item == NULL) { darkvater@135: _iconsole_cmds = item_new; darkvater@135: } else { darkvater@135: while (item->_next != NULL) { item = item->_next; }; darkvater@135: item->_next = item_new; darkvater@135: } darkvater@135: } darkvater@135: darkvater@135: void* IConsoleCmdGetAddr(byte * name) { darkvater@135: _iconsole_cmd * item; darkvater@135: darkvater@135: item = _iconsole_cmds; darkvater@135: while (item != NULL) { darkvater@135: if (strcmp(item->name,name)==0) return item->addr; darkvater@135: item = item->_next; darkvater@135: } darkvater@135: return NULL; darkvater@135: } darkvater@135: darkvater@135: void IConsoleVarRegister(byte * name, void * addr, byte type) { darkvater@135: byte * _new; darkvater@135: _iconsole_var * item; darkvater@135: _iconsole_var * item_new; darkvater@135: int i; darkvater@135: darkvater@135: i=strlen((char *)name)+1; darkvater@135: _new=malloc(i+1); darkvater@135: memset(_new,0,i+1); darkvater@135: _new[0]='*'; darkvater@135: memcpy(_new+1,name,i); darkvater@135: darkvater@135: item_new = malloc(sizeof(_iconsole_var)); darkvater@135: darkvater@135: item_new->_next = NULL; darkvater@135: item_new->addr = addr; darkvater@135: item_new->name = _new; darkvater@135: item_new->type = type; darkvater@135: item_new->_malloc = false; darkvater@135: darkvater@135: item = _iconsole_vars; darkvater@135: if (item == NULL) { darkvater@135: _iconsole_vars = item_new; darkvater@135: } else { darkvater@135: while (item->_next != NULL) { item = item->_next; }; darkvater@135: item->_next = item_new; darkvater@135: } darkvater@135: } darkvater@135: darkvater@135: void IConsoleVarInsert(_iconsole_var * var, byte * name) { darkvater@135: byte * _new; darkvater@135: _iconsole_var * item; darkvater@135: _iconsole_var * item_new; darkvater@135: int i; darkvater@135: darkvater@135: item_new = var; darkvater@135: darkvater@135: // dont allow to build variable rings darkvater@135: if (item_new->_next != NULL) return; darkvater@135: darkvater@135: i=strlen((char *)name)+1; darkvater@135: _new=malloc(i+1); darkvater@135: memset(_new,0,i+1); darkvater@135: _new[0]='*'; darkvater@135: memcpy(_new+1,name,i); darkvater@135: darkvater@135: item_new->name = _new; darkvater@135: darkvater@135: item = _iconsole_vars; darkvater@135: if (item == NULL) { darkvater@135: _iconsole_vars = item_new; darkvater@135: } else { darkvater@135: while (item->_next != NULL) { item = item->_next; }; darkvater@135: item->_next = item_new; darkvater@135: } darkvater@135: } darkvater@135: darkvater@135: darkvater@135: _iconsole_var * IConsoleVarGet(byte * name) { darkvater@135: _iconsole_var * item; darkvater@135: darkvater@135: item = _iconsole_vars; darkvater@135: while (item != NULL) { darkvater@135: if (strcmp(item->name,name)==0) return item; darkvater@135: item = item->_next; darkvater@135: } darkvater@135: return NULL; darkvater@135: } darkvater@135: darkvater@135: _iconsole_var * IConsoleVarAlloc(byte type) { darkvater@135: _iconsole_var * item; darkvater@135: item=malloc(sizeof(_iconsole_var)); darkvater@135: item->_next = NULL; darkvater@135: item->name = ""; darkvater@135: item->type = type; darkvater@135: switch (item->type) { darkvater@135: case ICONSOLE_VAR_BOOLEAN: darkvater@135: { darkvater@135: item->addr=malloc(sizeof(bool)); darkvater@135: memset(item->addr,0,sizeof(bool)); darkvater@135: item->_malloc=true; darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_BYTE: darkvater@135: { darkvater@135: item->addr=malloc(sizeof(byte)); darkvater@135: memset(item->addr,0,sizeof(byte)); darkvater@135: item->_malloc=true; darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_UINT16: darkvater@135: { darkvater@135: item->addr=malloc(sizeof(unsigned short)); darkvater@135: memset(item->addr,0,sizeof(unsigned short)); darkvater@135: item->_malloc=true; darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_UINT32: darkvater@135: { darkvater@135: item->addr=malloc(sizeof(unsigned int)); darkvater@135: memset(item->addr,0,sizeof(unsigned int)); darkvater@135: item->_malloc=true; darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_INT16: darkvater@135: { darkvater@135: item->addr=malloc(sizeof(signed short)); darkvater@135: memset(item->addr,0,sizeof(signed short)); darkvater@135: item->_malloc=true; darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_INT32: darkvater@135: { darkvater@135: item->addr=malloc(sizeof(signed int)); darkvater@135: memset(item->addr,0,sizeof(signed int)); darkvater@135: item->_malloc=true; darkvater@135: } darkvater@135: break; darkvater@135: default: darkvater@135: item->addr = NULL; darkvater@135: item->_malloc = false; darkvater@135: break; darkvater@135: } darkvater@135: return item; darkvater@135: } darkvater@135: darkvater@135: darkvater@135: void IConsoleVarFree(_iconsole_var * var) { darkvater@135: if (var ->_malloc) { darkvater@135: free(var ->addr); darkvater@135: } darkvater@135: free(var); darkvater@135: } darkvater@135: darkvater@135: void IConsoleVarSetString(_iconsole_var * var, byte * string) { darkvater@135: int l; darkvater@135: darkvater@141: if (string == NULL) return; darkvater@141: darkvater@135: if (var->_malloc) { darkvater@135: free(var->addr); darkvater@135: } darkvater@135: darkvater@135: l=strlen((char *) string); darkvater@135: var->addr=malloc(l+1); darkvater@135: var->_malloc=true; darkvater@135: memset(var->addr,0,l); darkvater@135: memcpy((void *) var->addr,(void *) string, l); darkvater@135: ((byte *)var->addr)[l]=0; darkvater@135: } darkvater@135: darkvater@135: void IConsoleVarSetValue(_iconsole_var * var, int value) { darkvater@135: switch (var->type) { darkvater@135: case ICONSOLE_VAR_BOOLEAN: darkvater@135: { darkvater@135: (*(bool *)var->addr)=(value!=0); darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_BYTE: darkvater@135: { darkvater@135: (*(byte *)var->addr)=value; darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_UINT16: darkvater@135: { darkvater@135: (*(unsigned short *)var->addr)=value; darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_UINT32: darkvater@135: { darkvater@135: (*(unsigned int *)var->addr)=value; darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_INT16: darkvater@135: { darkvater@135: (*(signed short *)var->addr)=value; darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_INT32: darkvater@135: { darkvater@135: (*(signed int *)var->addr)=value; darkvater@135: } darkvater@135: break; darkvater@135: default: darkvater@135: break; darkvater@135: } darkvater@135: } darkvater@135: darkvater@135: void IConsoleVarDump(_iconsole_var * var, byte * dump_desc) { darkvater@135: darkvater@135: byte var_b; // TYPE BYTE darkvater@135: unsigned short var_ui16; // TYPE UINT16 darkvater@135: unsigned int var_ui32; // TYPE UINT32 darkvater@135: signed short var_i16; // TYPE INT16 darkvater@135: signed int var_i32; // TYPE INT32 darkvater@135: byte * var_s; // TYPE STRING darkvater@135: darkvater@135: if (dump_desc==NULL) dump_desc = var->name; darkvater@135: darkvater@135: switch (var->type) { darkvater@135: case ICONSOLE_VAR_BOOLEAN: darkvater@135: { darkvater@135: if (*(bool *)var->addr) { darkvater@135: IConsolePrintF(_iconsole_color_default, "%s = true",dump_desc); darkvater@135: } else { darkvater@135: IConsolePrintF(_iconsole_color_default, "%s = false",dump_desc); darkvater@135: } darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_BYTE: darkvater@135: { darkvater@135: var_b=*(byte *)var->addr; darkvater@135: IConsolePrintF(_iconsole_color_default, "%s = %i",dump_desc,var_b); darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_UINT16: darkvater@135: { darkvater@135: var_ui16=*(unsigned short *)var->addr; darkvater@135: IConsolePrintF(_iconsole_color_default, "%s = %i",dump_desc,var_ui16); darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_UINT32: darkvater@135: { darkvater@135: var_ui32=*(unsigned int *)var->addr; darkvater@135: IConsolePrintF(_iconsole_color_default, "%s = %i",dump_desc,var_ui32); darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_INT16: darkvater@135: { darkvater@135: var_i16=*(signed short *)var->addr; darkvater@135: IConsolePrintF(_iconsole_color_default, "%s = %i",dump_desc,var_i16); darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_INT32: darkvater@135: { darkvater@135: var_i32=*(signed int *)var->addr; darkvater@135: IConsolePrintF(_iconsole_color_default, "%s = %i",dump_desc,var_i32); darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_STRING: darkvater@135: { darkvater@135: var_s=(byte *)var->addr; darkvater@135: IConsolePrintF(_iconsole_color_default, "%s = %s",dump_desc,var_s); darkvater@135: } darkvater@135: break; darkvater@141: case ICONSOLE_VAR_REFERENCE: darkvater@141: IConsolePrintF(_iconsole_color_default, "%s = @%s",dump_desc,((_iconsole_var *)var->addr)->name); darkvater@141: break; darkvater@135: case ICONSOLE_VAR_UNKNOWN: darkvater@135: case ICONSOLE_VAR_POINTER: darkvater@135: { darkvater@135: var_i32=(signed int)((byte *)var->addr); darkvater@135: IConsolePrintF(_iconsole_color_default, "%s = @%i",dump_desc,var_i32); darkvater@135: } darkvater@135: break; darkvater@135: } darkvater@135: darkvater@135: } darkvater@135: darkvater@135: void IConsoleCmdExec(byte * cmdstr) { darkvater@135: _iconsole_var * (*function)(byte argc, byte* argv[], byte argt[]); darkvater@135: byte * tokens[20]; darkvater@135: byte tokentypes[20]; darkvater@135: byte * tokenstream; darkvater@135: byte * tokenstream_s; darkvater@135: byte execution_mode; darkvater@135: _iconsole_var * var = NULL; darkvater@135: _iconsole_var * result = NULL; darkvater@135: darkvater@135: bool longtoken; darkvater@135: bool valid_token; darkvater@135: bool skip_lt_change; darkvater@135: darkvater@135: int c; darkvater@135: int i; darkvater@135: int l; darkvater@135: darkvater@135: //** clearing buffer **// darkvater@135: darkvater@135: for (i=0;i<20;i++) { tokens[i]=NULL; tokentypes[i]=ICONSOLE_VAR_NONE; }; darkvater@135: tokenstream_s=tokenstream=malloc(1024); darkvater@135: memset(tokenstream,0,1024); darkvater@135: darkvater@135: //** parsing **// darkvater@135: darkvater@135: longtoken=false; darkvater@135: valid_token=false; darkvater@135: skip_lt_change=false; darkvater@135: l=strlen((char *) cmdstr); darkvater@135: i=0; darkvater@135: c=0; darkvater@135: tokens[c] = tokenstream; darkvater@135: while (i0) if (strlen((char *) tokens[i])>0) { darkvater@135: if (tokens[i][0]=='*') { darkvater@141: if ((i==2) && (tokentypes[1]==ICONSOLE_VAR_UNKNOWN) && (strcmp(tokens[1],"<<")==0)) { darkvater@141: // dont change the variable to an pointer if execution_mode 4 is being prepared darkvater@141: // this is used to assign one variable the value of the other one [token 0 and 2] darkvater@141: } else { darkvater@141: var = IConsoleVarGet(tokens[i]); darkvater@141: if (var!=NULL) { darkvater@141: tokens[i]=(byte *)var->addr; darkvater@141: tokentypes[i]=var->type; darkvater@141: } darkvater@141: } darkvater@141: } darkvater@141: if (tokens[i]!=NULL) if (tokens[i][0]=='@') if (tokens[i][1]=='*') { darkvater@141: var = IConsoleVarGet(tokens[i]+1); darkvater@135: if (var!=NULL) { darkvater@141: tokens[i]=(byte *)var; darkvater@141: tokentypes[i]=ICONSOLE_VAR_REFERENCE; darkvater@135: } darkvater@135: } darkvater@135: } darkvater@135: } darkvater@135: darkvater@135: execution_mode=0; darkvater@135: darkvater@135: function = IConsoleCmdGetAddr(tokens[0]); darkvater@135: if (function != NULL) { darkvater@135: execution_mode=1; // this is a command darkvater@135: } else { darkvater@135: var = IConsoleVarGet(tokens[0]); darkvater@135: if (var != NULL) { darkvater@135: execution_mode=2; // this is a variable darkvater@135: if (c>2) if (strcmp(tokens[1],"<<")==0) { darkvater@135: // this is command to variable mode [normal] darkvater@135: function = IConsoleCmdGetAddr(tokens[2]); darkvater@135: if (function != NULL) { darkvater@135: execution_mode=3; darkvater@141: } else { darkvater@141: result = IConsoleVarGet(tokens[2]); darkvater@141: if (result != NULL) { darkvater@141: execution_mode=4; darkvater@141: } darkvater@135: } darkvater@135: } darkvater@135: } darkvater@135: } darkvater@135: darkvater@135: //** executing **// darkvater@141: if (_stdlib_con_developer) IConsolePrintF(_iconsole_color_debug,"CONDEBUG: execution_mode: %i",execution_mode); darkvater@135: switch (execution_mode) { darkvater@135: case 0: darkvater@135: { darkvater@135: // not found darkvater@135: IConsoleError("command or variable not found"); darkvater@135: } darkvater@135: break; darkvater@135: case 1: darkvater@135: { darkvater@135: // execution with command syntax darkvater@135: result = function(c,tokens,tokentypes); darkvater@135: if (result!=NULL) { darkvater@135: IConsoleVarDump(result,"result"); darkvater@135: IConsoleVarFree(result); darkvater@135: } darkvater@135: } darkvater@135: break; darkvater@135: case 2: darkvater@135: { darkvater@135: // execution with variable syntax darkvater@141: if ((c==2) || (c==3)) { darkvater@135: // ** variable modifications ** // darkvater@135: switch (var->type) { darkvater@135: case ICONSOLE_VAR_BOOLEAN: darkvater@135: { darkvater@135: if (strcmp(tokens[1],"=")==0) { darkvater@135: if (c==3) { darkvater@135: *(bool *)var->addr=(atoi((char *) tokens[2])!=0); darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } else { darkvater@135: *(bool *)var->addr=false; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: } darkvater@135: else if (strcmp(tokens[1],"++")==0) { darkvater@135: *(bool *)var->addr=!*(bool *)var->addr; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: else if (strcmp(tokens[1],"--")==0) { darkvater@135: *(bool *)var->addr=!*(bool *)var->addr; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: else { IConsoleError("operation not supported"); } darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_BYTE: darkvater@135: { darkvater@135: if (strcmp(tokens[1],"=")==0) { darkvater@135: if (c==3) { darkvater@135: *(byte *)var->addr=atoi((char *) tokens[2]); darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } else { darkvater@135: *(byte *)var->addr=0; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: } darkvater@135: else if (strcmp(tokens[1],"++")==0) { darkvater@135: (*(byte *)var->addr)++; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: else if (strcmp(tokens[1],"--")==0) { darkvater@135: (*(byte *)var->addr)--; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: else { IConsoleError("operation not supported"); } darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_UINT16: darkvater@135: { darkvater@135: if (strcmp(tokens[1],"=")==0) { darkvater@135: if (c==3) { darkvater@135: *(unsigned short *)var->addr=atoi((char *) tokens[2]); darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } else { darkvater@135: *(unsigned short *)var->addr=0; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: } darkvater@135: else if (strcmp(tokens[1],"++")==0) { darkvater@135: (*(unsigned short *)var->addr)++; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: else if (strcmp(tokens[1],"--")==0) { darkvater@135: (*(unsigned short *)var->addr)--; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: else { IConsoleError("operation not supported"); } darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_UINT32: darkvater@135: { darkvater@135: if (strcmp(tokens[1],"=")==0) { darkvater@135: if (c==3) { darkvater@135: *(unsigned int *)var->addr=atoi((char *) tokens[2]); darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } else { darkvater@135: *(unsigned int *)var->addr=0; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: } darkvater@135: else if (strcmp(tokens[1],"++")==0) { darkvater@135: (*(unsigned int *)var->addr)++; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: else if (strcmp(tokens[1],"--")==0) { darkvater@135: (*(unsigned int *)var->addr)--; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: else { IConsoleError("operation not supported"); } darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_INT16: darkvater@135: { darkvater@135: if (strcmp(tokens[1],"=")==0) { darkvater@135: if (c==3) { darkvater@135: *(signed short *)var->addr=atoi((char *) tokens[2]); darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } else { darkvater@135: *(signed short *)var->addr=0; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: } darkvater@135: else if (strcmp(tokens[1],"++")==0) { darkvater@135: (*(signed short *)var->addr)++; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: else if (strcmp(tokens[1],"--")==0) { darkvater@135: (*(signed short *)var->addr)--; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: else { IConsoleError("operation not supported"); } darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_INT32: darkvater@135: { darkvater@135: if (strcmp(tokens[1],"=")==0) { darkvater@135: if (c==3) { darkvater@135: *(signed int *)var->addr=atoi((char *) tokens[2]); darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } else { darkvater@135: *(signed int *)var->addr=0; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: } darkvater@135: else if (strcmp(tokens[1],"++")==0) { darkvater@135: (*(signed int *)var->addr)++; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: else if (strcmp(tokens[1],"--")==0) { darkvater@135: (*(signed int *)var->addr)--; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: else { IConsoleError("operation not supported"); } darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_STRING: darkvater@135: { darkvater@135: if (strcmp(tokens[1],"=")==0) { darkvater@135: if (c==3) { darkvater@135: IConsoleVarSetString(var, tokens[2]); darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } else { darkvater@135: IConsoleVarSetString(var, ""); darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: } darkvater@135: else { IConsoleError("operation not supported"); } darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_POINTER: darkvater@135: { darkvater@135: if (strcmp(tokens[1],"=")==0) { darkvater@135: if (c==3) { darkvater@135: if (tokentypes[2]==ICONSOLE_VAR_UNKNOWN) { darkvater@135: var->addr = (void *)atoi(tokens[2]); darkvater@135: } else { darkvater@135: var->addr = (void *)tokens[2]; darkvater@135: } darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } else { darkvater@135: var->addr = NULL; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: } darkvater@135: else if (strcmp(tokens[1],"++")==0) { darkvater@135: var->addr = ((char *)var->addr)+1; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: else if (strcmp(tokens[1],"--")==0) { darkvater@135: var->addr = ((char *)var->addr)-1;; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: else { IConsoleError("operation not supported"); } darkvater@135: } darkvater@135: break; darkvater@135: } darkvater@135: } darkvater@135: if (c==1) { darkvater@135: // ** variable output ** // darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: } darkvater@135: break; darkvater@135: case 3: darkvater@141: case 4: darkvater@135: { darkvater@141: // execute command with result or assign a variable darkvater@141: if (execution_mode==3) { darkvater@135: int i; darkvater@135: int diff; darkvater@135: void * temp; darkvater@135: byte temp2; darkvater@135: darkvater@141: // tokenshifting darkvater@135: for (diff=0; diff<2; diff++) { darkvater@135: temp=tokens[0]; darkvater@135: temp2=tokentypes[0]; darkvater@135: for (i=1; i<20; i++) { darkvater@135: tokens[i-1]=tokens[i]; darkvater@135: tokentypes[i-1]=tokentypes[i]; darkvater@135: } darkvater@135: tokens[19]=temp; darkvater@135: tokentypes[19]=temp2; darkvater@135: } darkvater@141: darkvater@141: result = function(c,tokens,tokentypes); darkvater@135: } darkvater@135: darkvater@135: if (result!=NULL) { darkvater@135: if (result ->type != var -> type) { darkvater@135: IConsoleError("variable type missmatch"); darkvater@135: } else { darkvater@135: switch (result->type) { darkvater@135: case ICONSOLE_VAR_BOOLEAN: darkvater@135: { darkvater@135: (*(bool *)var->addr)=(*(bool *)result->addr); darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_BYTE: darkvater@135: { darkvater@135: (*(byte *)var->addr)=(*(byte *)result->addr); darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_UINT16: darkvater@135: { darkvater@135: (*(unsigned short *)var->addr)=(*(unsigned short *)result->addr); darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_UINT32: darkvater@135: { darkvater@135: (*(unsigned int *)var->addr)=(*(unsigned int *)result->addr); darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_INT16: darkvater@135: { darkvater@135: (*(signed short *)var->addr)=(*(signed short *)result->addr); darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_INT32: darkvater@135: { darkvater@135: (*(signed int *)var->addr)=(*(signed int *)result->addr); darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: break; darkvater@135: case ICONSOLE_VAR_POINTER: darkvater@135: { darkvater@135: var->addr=result->addr; darkvater@135: IConsoleVarDump(var,NULL); darkvater@135: } darkvater@135: break; darkvater@141: case ICONSOLE_VAR_STRING: darkvater@141: { darkvater@141: IConsoleVarSetString(var,result->addr); darkvater@141: IConsoleVarDump(var,NULL); darkvater@141: } darkvater@141: break; darkvater@135: default: darkvater@135: { darkvater@135: IConsoleError("variable type missmatch"); darkvater@135: } darkvater@135: break; darkvater@135: } darkvater@135: } darkvater@141: darkvater@141: if (execution_mode==3) { darkvater@141: IConsoleVarFree(result); darkvater@141: result = NULL; darkvater@141: } darkvater@135: } darkvater@135: darkvater@135: } darkvater@135: break; darkvater@135: default: darkvater@135: { darkvater@135: // execution mode invalid darkvater@135: IConsoleError("invalid execution mode"); darkvater@135: } darkvater@135: } darkvater@135: darkvater@135: //** freeing the tokens **// darkvater@135: for (i=0;i<20;i++) tokens[i]=NULL; darkvater@135: free(tokenstream_s); darkvater@135: darkvater@135: } darkvater@135: darkvater@135: /* **************************** */ darkvater@135: /* default console commands */ darkvater@135: /* **************************** */ darkvater@135: darkvater@135: darkvater@135: static _iconsole_var * IConsoleStdLibEcho(byte argc, byte* argv[], byte argt[]) { darkvater@135: if (argc<2) return NULL; darkvater@135: IConsolePrint(_iconsole_color_default, argv[1]); darkvater@135: return NULL; darkvater@135: } darkvater@135: darkvater@135: static _iconsole_var * IConsoleStdLibEchoC(byte argc, byte* argv[], byte argt[]) { darkvater@135: if (argc<3) return NULL; darkvater@135: IConsolePrint(atoi(argv[1]), argv[2]); darkvater@135: return NULL; darkvater@135: } darkvater@135: darkvater@135: static _iconsole_var * IConsoleStdLibPrintF(byte argc, byte* argv[], byte argt[]) { darkvater@135: if (argc<3) return NULL; darkvater@135: IConsolePrintF(_iconsole_color_default, argv[1] ,argv[2],argv[3],argv[4],argv[5],argv[6],argv[7],argv[8],argv[9],argv[10],argv[11],argv[12],argv[13],argv[14],argv[15],argv[16],argv[17],argv[18],argv[19]); darkvater@135: return NULL; darkvater@135: } darkvater@135: darkvater@135: static _iconsole_var * IConsoleStdLibPrintFC(byte argc, byte* argv[], byte argt[]) { darkvater@135: if (argc<3) return NULL; darkvater@135: IConsolePrintF(atoi(argv[1]), argv[2] ,argv[3],argv[4],argv[5],argv[6],argv[7],argv[8],argv[9],argv[10],argv[11],argv[12],argv[13],argv[14],argv[15],argv[16],argv[17],argv[18],argv[19]); darkvater@135: return NULL; darkvater@135: } darkvater@135: darkvater@135: static _iconsole_var * IConsoleStdLibScreenShot(byte argc, byte* argv[], byte argt[]) { darkvater@135: darkvater@135: if (argc<2) { darkvater@135: _make_screenshot=1; darkvater@135: } else { darkvater@135: if (strcmp(argv[1],"big")==0) { darkvater@135: _make_screenshot=2; darkvater@135: } darkvater@141: if (strcmp(argv[1],"no_con")==0) { darkvater@141: IConsoleClose(); darkvater@141: _make_screenshot=1; darkvater@141: } darkvater@135: } darkvater@135: darkvater@135: return NULL; darkvater@135: } darkvater@135: darkvater@141: static _iconsole_var * IConsoleStdLibVarInfo(byte argc, byte* argv[], byte argt[]) { darkvater@141: if (argc<2) return NULL; darkvater@141: if (argt[1]!=ICONSOLE_VAR_REFERENCE) { darkvater@141: IConsoleError("variable must be an variable reference"); darkvater@141: } else { darkvater@141: _iconsole_var * item; darkvater@141: item = (_iconsole_var *) argv[1]; darkvater@141: IConsolePrintF(_iconsole_color_default,"variable_name: %s",item->name); darkvater@141: IConsolePrintF(_iconsole_color_default,"variable_type: %i",item->type); darkvater@141: IConsolePrintF(_iconsole_color_default,"variable_addr: %i",item->addr); darkvater@141: if (item->_malloc) IConsolePrintF(_iconsole_color_default,"variable_malloc: internal allocated"); else IConsolePrintF(_iconsole_color_default, "variable_malloc: external allocated"); darkvater@141: } darkvater@141: return NULL; darkvater@141: } darkvater@141: darkvater@135: static _iconsole_var * IConsoleStdLibDebugLevel(byte argc, byte* argv[], byte argt[]) { darkvater@135: if (argc<2) return NULL; darkvater@135: SetDebugString(argv[1]); darkvater@135: return NULL; darkvater@135: } darkvater@135: darkvater@135: static _iconsole_var * IConsoleStdLibExit(byte argc, byte* argv[], byte argt[]) { darkvater@135: _exit_game = true; darkvater@135: return NULL; darkvater@135: } darkvater@135: darkvater@135: static _iconsole_var * IConsoleStdLibHelp(byte argc, byte* argv[], byte argt[]) { darkvater@135: IConsolePrint(13 ," -- console help -- "); darkvater@135: IConsolePrint(1 ," variables: [command to list them: list_vars]"); darkvater@135: IConsolePrint(1 ," *temp_string = \"my little \""); darkvater@135: IConsolePrint(1 ,""); darkvater@135: IConsolePrint(1 ," commands: [command to list them: list_cmds]"); darkvater@135: IConsolePrint(1 ," [command] [\"string argument with spaces\"] [argument 2] ..."); darkvater@135: IConsolePrint(1 ," printf \"%s world\" *temp_string"); darkvater@135: IConsolePrint(1 ,""); darkvater@141: IConsolePrint(1 ," command/variable returning a value into an variable:"); darkvater@135: IConsolePrint(1 ," *temp_uint16 << random"); darkvater@141: IConsolePrint(1 ," *temp_uint16 << *temp_uint16_2"); darkvater@135: IConsolePrint(1 ,""); darkvater@135: return NULL; darkvater@135: } darkvater@135: darkvater@135: static _iconsole_var * IConsoleStdLibRandom(byte argc, byte* argv[], byte argt[]) { darkvater@135: _iconsole_var * result; darkvater@135: result = IConsoleVarAlloc(ICONSOLE_VAR_UINT16); darkvater@135: IConsoleVarSetValue(result,rand()); darkvater@135: return result; darkvater@135: } darkvater@135: darkvater@135: static _iconsole_var * IConsoleStdLibListCommands(byte argc, byte* argv[], byte argt[]) { darkvater@135: _iconsole_cmd * item; darkvater@135: int l = 0; darkvater@135: darkvater@135: if (argv[1]!=NULL) l = strlen((char *) argv[1]); darkvater@135: darkvater@135: item = _iconsole_cmds; darkvater@135: while (item != NULL) { darkvater@135: if (argv[1]!=NULL) { darkvater@135: darkvater@135: if (memcmp((void *) item->name, (void *) argv[1],l)==0) darkvater@135: IConsolePrintF(_iconsole_color_default,"%s",item->name); darkvater@135: darkvater@135: } else { darkvater@135: darkvater@135: IConsolePrintF(_iconsole_color_default,"%s",item->name); darkvater@135: darkvater@135: } darkvater@135: item = item->_next; darkvater@135: } darkvater@135: darkvater@135: return NULL; darkvater@135: } darkvater@135: darkvater@135: static _iconsole_var * IConsoleStdLibListVariables(byte argc, byte* argv[], byte argt[]) { darkvater@135: _iconsole_var * item; darkvater@135: int l = 0; darkvater@135: darkvater@135: if (argv[1]!=NULL) l = strlen((char *) argv[1]); darkvater@135: darkvater@135: item = _iconsole_vars; darkvater@135: while (item != NULL) { darkvater@135: if (argv[1]!=NULL) { darkvater@135: darkvater@135: if (memcmp((void *) item->name, (void *) argv[1],l)==0) darkvater@135: IConsolePrintF(_iconsole_color_default,"%s",item->name); darkvater@135: darkvater@135: } else { darkvater@135: darkvater@135: IConsolePrintF(_iconsole_color_default,"%s",item->name); darkvater@135: darkvater@135: } darkvater@135: item = item->_next; darkvater@135: } darkvater@135: darkvater@135: return NULL; darkvater@135: } darkvater@135: darkvater@135: static _iconsole_var * IConsoleStdLibListDumpVariables(byte argc, byte* argv[], byte argt[]) { darkvater@135: _iconsole_var * item; darkvater@135: int l = 0; darkvater@135: darkvater@135: if (argv[1]!=NULL) l = strlen((char *) argv[1]); darkvater@135: darkvater@135: item = _iconsole_vars; darkvater@135: while (item != NULL) { darkvater@135: if (argv[1]!=NULL) { darkvater@135: darkvater@135: if (memcmp((void *) item->name, (void *) argv[1],l)==0) darkvater@135: IConsoleVarDump(item,NULL); darkvater@135: darkvater@135: } else { darkvater@135: darkvater@135: IConsoleVarDump(item,NULL); darkvater@135: darkvater@135: } darkvater@135: item = item->_next; darkvater@135: } darkvater@135: darkvater@135: return NULL; darkvater@135: } darkvater@135: darkvater@135: static void IConsoleStdLibRegister() { darkvater@135: IConsoleCmdRegister("debug_level",IConsoleStdLibDebugLevel); darkvater@141: IConsoleCmdRegister("dump_vars",IConsoleStdLibListDumpVariables); darkvater@135: IConsoleCmdRegister("echo",IConsoleStdLibEcho); darkvater@135: IConsoleCmdRegister("echoc",IConsoleStdLibEchoC); darkvater@135: IConsoleCmdRegister("exit",IConsoleStdLibExit); darkvater@135: IConsoleCmdRegister("help",IConsoleStdLibHelp); darkvater@135: IConsoleCmdRegister("printf",IConsoleStdLibPrintF); darkvater@135: IConsoleCmdRegister("printfc",IConsoleStdLibPrintFC); darkvater@135: IConsoleCmdRegister("quit",IConsoleStdLibExit); darkvater@135: IConsoleCmdRegister("random",IConsoleStdLibRandom); darkvater@135: IConsoleCmdRegister("list_cmds",IConsoleStdLibListCommands); darkvater@135: IConsoleCmdRegister("list_vars",IConsoleStdLibListVariables); darkvater@135: IConsoleCmdRegister("screenshot",IConsoleStdLibScreenShot); darkvater@141: IConsoleCmdRegister("varinfo",IConsoleStdLibVarInfo); darkvater@135: IConsoleVarRegister("cursor_rate",(void *) &_icursor_rate,ICONSOLE_VAR_BYTE); darkvater@141: IConsoleVarRegister("con_developer",(void *) &_stdlib_con_developer,ICONSOLE_VAR_BOOLEAN); darkvater@135: IConsoleVarRegister("developer",(void *) &_stdlib_developer,ICONSOLE_VAR_BYTE); darkvater@135: #if defined(_DEBUG) darkvater@135: { darkvater@135: _iconsole_var * var; darkvater@135: var = IConsoleVarAlloc(ICONSOLE_VAR_BOOLEAN); darkvater@135: IConsoleVarInsert(var,"temp_bool"); darkvater@135: darkvater@135: var = IConsoleVarAlloc(ICONSOLE_VAR_INT16); darkvater@135: IConsoleVarInsert(var,"temp_int16"); darkvater@135: var = IConsoleVarAlloc(ICONSOLE_VAR_INT32); darkvater@135: IConsoleVarInsert(var,"temp_int32"); darkvater@135: darkvater@135: var = IConsoleVarAlloc(ICONSOLE_VAR_POINTER); darkvater@135: IConsoleVarInsert(var,"temp_pointer"); darkvater@135: darkvater@135: var = IConsoleVarAlloc(ICONSOLE_VAR_UINT16); darkvater@135: IConsoleVarInsert(var,"temp_uint16"); darkvater@141: var = IConsoleVarAlloc(ICONSOLE_VAR_UINT16); darkvater@141: IConsoleVarInsert(var,"temp_uint16_2"); darkvater@135: var = IConsoleVarAlloc(ICONSOLE_VAR_UINT32); darkvater@135: IConsoleVarInsert(var,"temp_uint32"); darkvater@135: darkvater@135: var = IConsoleVarAlloc(ICONSOLE_VAR_STRING); darkvater@135: IConsoleVarInsert(var,"temp_string"); darkvater@141: var = IConsoleVarAlloc(ICONSOLE_VAR_STRING); darkvater@141: IConsoleVarInsert(var,"temp_string2"); darkvater@135: } darkvater@135: #endif darkvater@135: } darkvater@135: darkvater@135: