X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Ftape.c;h=f9c56d1ad12c2d4168522ee4b66c37abfc83a4cf;hb=08097448ca93da43b5f12df9fd180c2375eb6018;hp=fb00fcd561e7fdc220ff2ac5b14422dcaf3f707d;hpb=81cbb1611f72a0b338aac54f43e020555f5a28f0;p=rocksndiamonds.git diff --git a/src/tape.c b/src/tape.c index fb00fcd5..f9c56d1a 100644 --- a/src/tape.c +++ b/src/tape.c @@ -629,6 +629,30 @@ static void CloseTapeLogfile(void) // tape control functions // ============================================================================ +void TapeSetDateFromIsoDateString(char *date) +{ + int i; + + // check ISO date string for correct length + if (strlen(date) != 10) + return; + + // check ISO date string for correct format + for (i = 0; i < strlen(date); i++) + if (((i != 4 && i != 7) && (date[i] < '0' || date[i] > '9')) || + ((i == 4 || i == 7) && (date[i] != '-'))) + return; + + int yy = (date[2] - '0') * 10 + (date[3] - '0'); + int mm = (date[5] - '0') * 10 + (date[6] - '0'); + int dd = (date[8] - '0') * 10 + (date[9] - '0'); + + if (mm < 1 || mm > 12 || dd < 1 || dd > 31) + return; + + tape.date = 10000 * yy + 100 * (mm - 1) + dd; +} + void TapeSetDateFromEpochSeconds(time_t epoch_seconds) { struct tm *lt = localtime(&epoch_seconds); @@ -779,7 +803,9 @@ static void TapeAppendRecording(void) void TapeHaltRecording(void) { - tape.counter++; + // only advance tape counter if any input events have been recorded + if (tape.pos[tape.counter].delay > 0) + tape.counter++; // initialize delay for next tape entry (to be able to continue recording) if (tape.counter < MAX_TAPE_LEN) @@ -934,6 +960,10 @@ void TapeTogglePause(boolean toggle_mode) ModifyPauseButtons(); } + + // stop tape when leaving auto-pause after completely replaying tape + if (tape.playing && !tape.pausing && tape.counter >= tape.length) + TapeStop(); } void TapeStartPlaying(void)