void medkey_init() { PHYSFS_file * keyfile; char keypress[100]; char line_buffer[200]; int key; int i; //, size; int np; char * LispCommand; MALLOC( LispCommand, char, DIAGNOSTIC_MESSAGE_MAX ); for (i=0; i<2048; i++ ) KeyFunction[i] = NULL; keyfile = PHYSFSX_openReadBuffered( "GLOBAL.KEY" ); if (keyfile) { while (PHYSFSX_fgets(line_buffer, 200, keyfile)) { sscanf(line_buffer, " %s %s ", keypress, LispCommand); //ReadLispMacro( keyfile, LispCommand ); if ( (key=DecodeKeyText( keypress ))!= -1 ) { Assert( key < 2048); KeyFunction[key] = func_get( LispCommand, &np ); } else { Error( "Bad key %s in GLOBAL.KEY!", keypress ); } } PHYSFS_close(keyfile); } d_free( LispCommand ); }
void medKeyInit() { FILE * keyfile; char keypress[100]; int key; int i; //, size; int np; char * LispCommand; MALLOC( LispCommand, char, DIAGNOSTIC_MESSAGE_MAX ); for (i=0; i<2048; i++ ) KeyFunction[i] = NULL; keyfile = fopen( "GLOBAL.KEY", "rt" ); if (keyfile) { while (fscanf( keyfile, " %s %s ", keypress, LispCommand ) != EOF ) { //ReadLispMacro( keyfile, LispCommand ); if ( (key=DecodeKeyText( keypress ))!= -1 ) { Assert( key < 2048); KeyFunction[key] = func_get( LispCommand, &np ); } else { Error( "Bad key %s in GLOBAL.KEY!", keypress ); } } fclose(keyfile); } D2_FREE( LispCommand ); }
int binhack_render(BYTE *binhack_buf, size_t target_addr, const char *binhack_str) { const char *c = binhack_str; const char *fs = NULL; // function start size_t written = 0; int func_rel = 0; // Relative function pointer flag char conv[3]; int ret = 0; if(!binhack_buf || !binhack_str) { return -1; } conv[2] = 0; while(*c) { if(!fs && is_valid_hex(*c) && is_valid_hex(*(c+1)) ) { memcpy(conv, c, 2); *binhack_buf = (char)strtol(conv, NULL, 16); binhack_buf++; c++; written++; } else if(*c == '[' || *c == '<') { if(fs) { log_printf("ERROR: Nested function pointers near %s!\n", c); return 0; } func_rel = (*c == '['); fs = c + 1; } else if(fs && (*c == ']' || *c == '>')) { VLA(char, function, (c - fs) + 1); size_t fp = 0; strncpy(function, fs, c - fs); function[c - fs] = 0; fp = (size_t)func_get(function); if(fp) { if(func_rel) { fp -= target_addr + written + sizeof(void*); } memcpy(binhack_buf, &fp, sizeof(void*)); binhack_buf += sizeof(void*); written += sizeof(void*); } else { log_printf("ERROR: No pointer for function '%s'...\n", function); ret = 2; } fs = NULL; VLA_FREE(function); if(ret) { break; } } c++; }
int binhack_render(BYTE *binhack_buf, size_t target_addr, const char *binhack_str) { const char *c = binhack_str; const char *fs = NULL; // function start size_t written = 0; int func_rel = 0; // Relative function pointer flag int ret = 0; if(!binhack_buf || !binhack_str) { return -1; } while(*c) { if(*c == '[' || *c == '<') { if(fs) { log_printf("ERROR: Nested function pointers near %s!\n", c); return 0; } func_rel = (*c == '['); fs = c + 1; c++; } else if(fs && (*c == ']' || *c == '>')) { VLA(char, function, (c - fs) + 1); defer({ VLA_FREE(function); }); size_t fp = 0; strncpy(function, fs, c - fs); function[c - fs] = 0; fp = (size_t)func_get(function); if(fp) { if(func_rel) { fp -= target_addr + written + sizeof(void*); } memcpy(binhack_buf, &fp, sizeof(void*)); binhack_buf += sizeof(void*); written += sizeof(void*); } else { return hackpoints_error_function_not_found(function, 2); } fs = NULL; if(ret) { break; } c++; } else if(fs) {
Message Daemon::execute_command(const Message &msg) { if (!msg.Payload().size()) return Message(MessageType::Exception, "Unknown operation", msg); char command[MESSAGE_SIZE] = { 0 }; int arg_cnt; char * arg_val[MESSAGE_SIZE] = { NULL }; strcpy(command, msg.Payload().c_str()); arg_cnt = parse(command, arg_val); if (strcasecmp(command, "put") == 0) return func_put(arg_cnt, arg_val, msg); if (strcasecmp(command, "get") == 0) return func_get(arg_cnt, arg_val, msg); if (strcasecmp(command, "remove") == 0) return func_remove(arg_cnt, arg_val, msg); if (strcasecmp(command, "list") == 0) return func_list(arg_cnt, arg_val, msg); return Message(MessageType::Exception, "Unknown operation", msg); }
void menubar_init( char * file ) { int i,j, np; int aw, w, h; CFILE * infile; char buffer[200]; char buf1[200]; char buf2[200]; int menu, item; num_menus = state = 0; for (i=0; i < MAXMENUS; i++ ) { Menu[i].x = Menu[i].y = Menu[i].w = Menu[i].h = 0; Menu[i].ShowBar = 0; Menu[i].CurrentItem = 0; Menu[i].NumItems = 0; Menu[i].Displayed = 0; Menu[i].Background = 0; for (j=0; j< MAXITEMS; j++ ) { Menu[i].Item[j].x = Menu[i].Item[j].y = Menu[i].Item[j].w = Menu[i].Item[j].h = 0; Menu[i].Item[j].Text = NULL; Menu[i].Item[j].Hotkey = -1; Menu[i].Item[j].user_function = NULL; } } infile = cfopen( file, "rt" ); if (!infile) return; while ( cfgets( buffer, 200, infile) != NULL ) { if ( buffer[0] == ';' ) continue; //mprintf( 0, "%s\n", buffer ); CommaParse( 0, buf1, buffer ); menu = atoi( buf1 ); if (menu >= MAXMENUS) Error("Too many menus (%d).",menu); CommaParse( 1, buf1, buffer ); item = atoi(buf1 ); if (item >= MAXITEMS) Error("Too many items (%d) in menu %d.",item+1,menu); CommaParse( 2, buf1, buffer ); ul_xlate(buf1); if (buf1[0] != '-' ) { sprintf( buf2, " %s ", buf1 ); Menu[menu].Item[item].Text = d_strdup(buf2); } else Menu[menu].Item[item].Text = d_strdup(buf1); Menu[menu].Item[item].InactiveText = d_strdup(Menu[menu].Item[item].Text); j= 0; for (i=0; i<=strlen(Menu[menu].Item[item].Text); i++ ) { np = Menu[menu].Item[item].Text[i]; if (np != CC_UNDERLINE) Menu[menu].Item[item].InactiveText[j++] = np; } CommaParse( 3, buf1, buffer ); if (buf1[0]=='{' && buf1[1] =='}') Menu[menu].Item[item].Hotkey = -1; else { i = DecodeKeyText(buf1); if (i<1) { Error("Unknown key, %s, in %s\n", buf1, file ); } else { Menu[menu].Item[item].Hotkey = i; } } CommaParse( 4, buf1, buffer ); if (strlen(buf1)) { Menu[menu].Item[item].user_function = func_get(buf1, &np); // if (!strcmp(buf1,"do-wall-dialog")) { // mprintf( 0, "Found function %s\n", buf1); // mprintf( 0, "User function %s\n", Menu[menu].Item[item].user_function); // } if (Menu[menu].Item[item].user_function==NULL) { Error( "Unknown function, %s, in %s\n", buf1, file ); //ui_messagebox( -2, -2, 1, buffer, "Ok" ); } } Menu[menu].Item[item].x = Menu[menu].x; Menu[menu].Item[item].y = Menu[menu].y; if ( Menu[menu].Item[item].Text[0] == '-' ) { w = 1; h = 3; } else { gr_get_string_size( Menu[menu].Item[item].Text, &w, &h, &aw ); w += 2; h += 2; } if (menu==0) { Menu[0].h = h; Menu[0].Item[item].x = Menu[0].x + Menu[0].w; Menu[0].Item[item].y = Menu[0].y; Menu[item+1].x = Menu[0].x + Menu[0].w; Menu[item+1].y = Menu[0].h - 2; Menu[0].Item[item].w = w; Menu[0].Item[item].h = h; Menu[0].w += w; }else { if ( w > Menu[menu].w ) { Menu[menu].w = w; for (i=0; i< Menu[menu].NumItems; i++ ) Menu[menu].Item[i].w = Menu[menu].w; } Menu[menu].Item[item].w = Menu[menu].w; Menu[menu].Item[item].x = Menu[menu].x; Menu[menu].Item[item].y = Menu[menu].y+Menu[menu].h; Menu[menu].Item[item].h = h; Menu[menu].h += h; } if ( item >= Menu[menu].NumItems ) { Menu[menu].NumItems = item+1; } if ( menu >= num_menus ) num_menus = menu+1; } Menu[0].w = 700; cfclose( infile ); for (i=0; i<num_menus; i++ ) Menu[i].Background = gr_create_bitmap(Menu[i].w, Menu[i].h ); menubar_hid = 1; }
void menubar_init( char * file ) { int i,j, np; int aw, w, h; PHYSFS_file * infile; char buffer[200]; char buf1[200]; char buf2[200]; int menu, item; num_menus = state = 0; // This method should be faster than explicitly setting all the variables (I think) memset(Menu, 0, sizeof(Menu)); for (i=0; i < MAXMENUS; i++ ) for (j=0; j< MAXITEMS; j++ ) Menu[i].Item[j].Hotkey = -1; infile = PHYSFSX_openReadBuffered( file ); if (!infile) return; while ( PHYSFSX_fgets( buffer, 200, infile) != NULL ) { if ( buffer[0] == ';' ) continue; CommaParse( 0, buf1, buffer ); menu = atoi( buf1 ); if (menu >= MAXMENUS) Error("Too many menus (%d).",menu); CommaParse( 1, buf1, buffer ); item = atoi(buf1 ); if (item >= MAXITEMS) Error("Too many items (%d) in menu %d.",item+1,menu); CommaParse( 2, buf1, buffer ); ul_xlate(buf1); if (buf1[0] != '-' ) { sprintf( buf2, " %s ", buf1 ); Menu[menu].Item[item].Text = d_strdup(buf2); } else Menu[menu].Item[item].Text = d_strdup(buf1); Menu[menu].Item[item].InactiveText = d_strdup(Menu[menu].Item[item].Text); j= 0; for (i=0; i<=strlen(Menu[menu].Item[item].Text); i++ ) { np = Menu[menu].Item[item].Text[i]; if (np != CC_UNDERLINE) Menu[menu].Item[item].InactiveText[j++] = np; } CommaParse( 3, buf1, buffer ); if (buf1[0]=='{' && buf1[1] =='}') Menu[menu].Item[item].Hotkey = -1; else { i = DecodeKeyText(buf1); if (i<1) { Error("Unknown key, %s, in %s\n", buf1, file ); } else { Menu[menu].Item[item].Hotkey = i; } } CommaParse( 4, buf1, buffer ); if (strlen(buf1)) { Menu[menu].Item[item].user_function = func_get(buf1, &np); if (Menu[menu].Item[item].user_function==NULL) { Error( "Unknown function, %s, in %s\n", buf1, file ); //ui_messagebox( -2, -2, 1, buffer, "Ok" ); } } Menu[menu].Item[item].x = Menu[menu].x; Menu[menu].Item[item].y = Menu[menu].y; if ( Menu[menu].Item[item].Text[0] == '-' ) { w = 1; h = 3; } else { gr_get_string_size( Menu[menu].Item[item].Text, &w, &h, &aw ); w += 2; h += 2; } if (menu==0) { Menu[0].h = h; Menu[0].Item[item].x = Menu[0].x + Menu[0].w; Menu[0].Item[item].y = Menu[0].y; Menu[item+1].x = Menu[0].x + Menu[0].w; Menu[item+1].y = Menu[0].h - 2; Menu[0].Item[item].w = w; Menu[0].Item[item].h = h; Menu[0].w += w; }else { if ( w > Menu[menu].w ) { Menu[menu].w = w; for (i=0; i< Menu[menu].NumItems; i++ ) Menu[menu].Item[i].w = Menu[menu].w; } Menu[menu].Item[item].w = Menu[menu].w; Menu[menu].Item[item].x = Menu[menu].x; Menu[menu].Item[item].y = Menu[menu].y+Menu[menu].h; Menu[menu].Item[item].h = h; Menu[menu].h += h; } if ( item >= Menu[menu].NumItems ) { Menu[menu].NumItems = item+1; } if ( menu >= num_menus ) num_menus = menu+1; } Menu[0].w = 700; PHYSFS_close( infile ); }
static void exec_function(char **argv) { assert(argv && argv[0]); //FIXME: add arguments transmission here exec_node(func_get(shell->func, argv[0])); }