void OnlineService::persistSaveGame(const char *filename) { assert(has_user); assert(has_user_controller); assert(state == CONNECTED); const size_t pathsize = 255; char originalfilepath[pathsize]; snprintf(originalfilepath, pathsize, "%s%s", get_save_filename_prefix(), filename); char encodedfilepath[pathsize]; snprintf(encodedfilepath, pathsize, "%s%s.txt", get_save_filename_prefix(), filename); //printf("encoding %s to %s... ", originalfilepath, encodedfilepath); fflush(stdout); ascii85_encode(originalfilepath, encodedfilepath); //printf("done\n"); fflush(stdout); // read encoded save file //printf("reading %s... ", encodedfilepath); fflush(stdout); char *save_data = 0; bFILE *file = open_file(encodedfilepath, "r"); if(!file->open_failure()) { size_t filesize = file->file_size(); save_data = new char[filesize + 1]; file->read(save_data, filesize); save_data[filesize] = 0; //printf("read %i bytes\n", filesize); fflush(stdout); } else { //printf("failed\n"); fflush(stdout); } delete file; file = 0; // write encoded save file to context SC_String_h save_data_string; SC_Error_t newStringResult = SC_String_New(&save_data_string, save_data); SC_Context_h user_context = SC_User_GetContext(scoreloop_user); //printf("putting %s in user context... "); fflush(stdout); SC_Error_t putContextResult = SC_Context_Put(user_context, filename, save_data_string); //printf(putContextResult == SC_OK ? "done\n" : "failed\n"); fflush(stdout); //printf("setting user context... "); fflush(stdout); SC_Error_t setUserContextResult = SC_User_SetContext(scoreloop_user, user_context); //printf(setUserContextResult == SC_OK ? "done\n" : "failed\n"); fflush(stdout); //printf("updating user context...\n"); fflush(stdout); state = SUBMIT_USER_CONTEXT; SC_UserController_UpdateUserContext(scoreloop_user_controller); if (save_data) { delete save_data; save_data = 0; } }
int main(int argc, char *argv[]) { extern char *optarg; extern int optind, optopt, opterr; int opt, long_optind, decode = 0, ignore_garbage = 0, delims = 0, wrap = 76, y_abbr = 0; FILE *fp = stdin; char *opts = "dinw:yh"; struct option long_opts[] = { {"decode", no_argument, NULL, 'd'}, {"ignore-garbage", no_argument, NULL, 'i'}, {"no-delims", no_argument, NULL, 'n'}, {"wrap", required_argument, NULL, 'w'}, {"y-abbr", no_argument, NULL, 'y'}, {"help", no_argument, NULL, 'h'}, {NULL, no_argument, NULL, 0} }; opterr = 0; while ((opt = getopt_long(argc, argv, opts, long_opts, &long_optind)) != -1) { switch (opt) { case 'd': decode = 1; break; case 'i': ignore_garbage = 1; break; case 'n': delims = 0; break; case 'w': sscanf(optarg, "%d", &wrap); break; case 'y': y_abbr = 1; break; case 'h': printf(HELP_TEXT); exit(0); case '?': eprintf("ascii85: "); if (strchr("w", optopt) != NULL) eprintf("option '-%c' requires an argument\n", optopt); else eprintf("invalid option -- %c\n", optopt); eprintf(USAGE_TEXT); exit(1); default: break; } } if (optind == argc - 1 && strcmp(argv[optind], "-")) { fp = fopen(argv[optind], "rb"); if (fp == NULL) { eprintf("ascii85: %s: %s\n", argv[optind], strerror(errno)); exit(1); } } else if (optind > argc) { eprintf("ascii85: too many operands or wrong operand order\n"); eprintf(USAGE_TEXT); exit(1); } if (wrap < 1) wrap = 0; if (decode) ascii85_decode(fp, delims, ignore_garbage); else ascii85_encode(fp, delims, wrap, y_abbr); fflush(stdout); fclose(fp); return 0; }
void send_encoded(uint32_t data) { ascii85_t encoded = ascii85_encode(data); serial_send(encoded.b, 5); }