/** \brief Load an individual freesat data file * * \param tableid - Table id that should be loaded * \param filename - Filename to load */ static void load_file(int tableid, char *filename) { char buf[1024]; char *from, *to, *binary; FILE *fp; tableid--; if ( ( fp = fopen(filename,"r") ) != NULL ) { isyslog("Loading table %d Filename <%s>",tableid + 1, filename); while ( fgets(buf,sizeof(buf),fp) != NULL ) { from = binary = to = NULL; int elems = sscanf(buf,"%a[^:]:%a[^:]:%a[^:]:", &from, &binary, &to); if ( elems == 3 ) { int bin_len = strlen(binary); int from_char = resolve_char(from); char to_char = resolve_char(to); unsigned long bin = decode_binary(binary); int i = table_size[tableid][from_char]++; tables[tableid][from_char] = (struct hufftab *)realloc(tables[tableid][from_char], (i+1) * sizeof(tables[tableid][from_char][0])); tables[tableid][from_char][i].value = bin; tables[tableid][from_char][i].next = to_char; tables[tableid][from_char][i].bits = bin_len; free(from); free(to); free(binary); } } } else { isyslog("Cannot load <%s> for table %d",filename,tableid + 1); } }
void erl_lua_pushlstring(lua_drv_t *driver_data, char *buf, int index) { char *str; int len; str = decode_binary(buf, &index, &len); lua_pushlstring(driver_data->L, str, len); reply_ok(driver_data); free(str); }
void erl_lual_dostring(lua_drv_t *driver_data, char *buf, int index) { char *code; int len; code = decode_binary(buf, &index, &len); code[len] = '\0'; if (!luaL_dostring(driver_data->L, code)) reply_ok(driver_data); else reply_throw(driver_data, lua_tostring(driver_data->L, -1)); free(code); }