comparison menu.c @ 1427:4e5797b3935a

WIP - New savestate format
author Michael Pavone <pavone@retrodev.com>
date Sun, 06 Aug 2017 00:06:36 -0700
parents 9a3e003bdcb3
children 2540c05520f2
comparison
equal deleted inserted replaced
1426:957325c990d5 1427:4e5797b3935a
344 case 4: { 344 case 4: {
345 char *buffer = malloc(SAVE_INFO_BUFFER_SIZE); 345 char *buffer = malloc(SAVE_INFO_BUFFER_SIZE);
346 char *cur = buffer; 346 char *cur = buffer;
347 if (gen->header.next_context && gen->header.next_context->save_dir) { 347 if (gen->header.next_context && gen->header.next_context->save_dir) {
348 char *end = buffer + SAVE_INFO_BUFFER_SIZE; 348 char *end = buffer + SAVE_INFO_BUFFER_SIZE;
349 char slotfile[] = "slot_0.gst"; 349 char slotfile[] = "slot_0.state";
350 char slotfilegst[] = "slot_0.gst";
350 char const * parts[3] = {gen->header.next_context->save_dir, PATH_SEP, slotfile}; 351 char const * parts[3] = {gen->header.next_context->save_dir, PATH_SEP, slotfile};
352 char const * partsgst[3] = {gen->header.next_context->save_dir, PATH_SEP, slotfilegst};
351 struct tm ltime; 353 struct tm ltime;
352 char *fname; 354 char *fname;
353 time_t modtime; 355 time_t modtime;
354 for (int i = 0; i < 10 && cur < end; i++) 356 for (int i = 0; i < 10 && cur < end; i++)
355 { 357 {
360 if (modtime) { 362 if (modtime) {
361 cur += snprintf(cur, end-cur, "Slot %d - ", i); 363 cur += snprintf(cur, end-cur, "Slot %d - ", i);
362 cur += strftime(cur, end-cur, "%c", localtime_r(&modtime, &ltime)); 364 cur += strftime(cur, end-cur, "%c", localtime_r(&modtime, &ltime));
363 365
364 } else { 366 } else {
365 cur += snprintf(cur, end-cur, "Slot %d - EMPTY", i); 367 slotfilegst[5] = i + '0';
368 fname = alloc_concat_m(3, partsgst);
369 modtime = get_modification_time(fname);
370 free(fname);
371 if (modtime) {
372 cur += snprintf(cur, end-cur, "Slot %d - ", i);
373 cur += strftime(cur, end-cur, "%c", localtime_r(&modtime, &ltime));
374 } else {
375 cur += snprintf(cur, end-cur, "Slot %d - EMPTY", i);
376 }
366 } 377 }
367 //advance past the null terminator for this entry 378 //advance past the null terminator for this entry
368 cur++; 379 cur++;
369 } 380 }
370 if (cur < end) { 381 if (cur < end) {
371 parts[2] = "quicksave.gst"; 382 parts[2] = "quicksave.state";
372 fname = alloc_concat_m(3, parts); 383 fname = alloc_concat_m(3, parts);
373 modtime = get_modification_time(fname); 384 modtime = get_modification_time(fname);
374 free(fname); 385 free(fname);
375 if (modtime) { 386 if (modtime) {
376 cur += strftime(cur, end-cur, "Quick - %c", localtime_r(&modtime, &ltime)); 387 cur += strftime(cur, end-cur, "Quick - %c", localtime_r(&modtime, &ltime));
377 } else if ((end-cur) > strlen("Quick - EMPTY")){ 388 } else {
378 cur += strlen(strcpy(cur, "Quick - EMPTY")); 389 parts[2] = "quicksave.gst";
390 fname = alloc_concat_m(3, parts);
391 modtime = get_modification_time(fname);
392 free(fname);
393 if (modtime) {
394 cur += strftime(cur, end-cur, "Quick - %c", localtime_r(&modtime, &ltime));
395 } else if ((end-cur) > strlen("Quick - EMPTY")){
396 cur += strlen(strcpy(cur, "Quick - EMPTY"));
397 }
379 } 398 }
380 //advance past the null terminator for this entry 399 //advance past the null terminator for this entry
381 cur++; 400 cur++;
382 if (cur < end) { 401 if (cur < end) {
383 //terminate the list 402 //terminate the list
399 m68k->should_return = 1; 418 m68k->should_return = 1;
400 break; 419 break;
401 case 6: 420 case 6:
402 //load state 421 //load state
403 if (gen->header.next_context && gen->header.next_context->save_dir) { 422 if (gen->header.next_context && gen->header.next_context->save_dir) {
404 char numslotname[] = "slot_0.gst"; 423 char numslotname[] = "slot_0.state";
405 char *slotname; 424 char *slotname;
406 if (dst == QUICK_SAVE_SLOT) { 425 if (dst == QUICK_SAVE_SLOT) {
407 slotname = "quicksave.gst"; 426 slotname = "quicksave.state";
408 } else { 427 } else {
409 numslotname[5] = '0' + dst; 428 numslotname[5] = '0' + dst;
410 slotname = numslotname; 429 slotname = numslotname;
411 } 430 }
412 char const *parts[] = {gen->header.next_context->save_dir, PATH_SEP, slotname}; 431 char const *parts[] = {gen->header.next_context->save_dir, PATH_SEP, slotname};
413 char *gstpath = alloc_concat_m(3, parts); 432 char *gstpath = alloc_concat_m(3, parts);
414 genesis_context *next = (genesis_context *)gen->header.next_context; 433 genesis_context *next = (genesis_context *)gen->header.next_context;
434
415 uint32_t pc = load_gst(next, gstpath); 435 uint32_t pc = load_gst(next, gstpath);
416 free(gstpath); 436 free(gstpath);
417 if (!pc) { 437 if (!pc) {
418 break; 438 break;
419 } 439 }