Mercurial > repos > blastem
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, <ime)); | 364 cur += strftime(cur, end-cur, "%c", localtime_r(&modtime, <ime)); |
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, <ime)); | |
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, <ime)); | 387 cur += strftime(cur, end-cur, "Quick - %c", localtime_r(&modtime, <ime)); |
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, <ime)); | |
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 } |