diff --git a/gopher2600.go b/gopher2600.go index 52bab0fe..15a36893 100644 --- a/gopher2600.go +++ b/gopher2600.go @@ -81,7 +81,6 @@ func play(mf *magicflags.MagicFlags) bool { scaling := mf.SubModeFlags.Float64("scale", 3.0, "television scaling") stable := mf.SubModeFlags.Bool("stable", true, "wait for stable frame before opening display") record := mf.SubModeFlags.Bool("record", false, "record user input to a file") - recording := mf.SubModeFlags.String("recording", "", "the file to use for recording/playback") if mf.SubParse() != magicflags.ParseContinue { return false @@ -89,26 +88,21 @@ func play(mf *magicflags.MagicFlags) bool { switch len(mf.SubModeFlags.Args()) { case 0: - if *recording == "" { - fmt.Println("* 2600 cartridge required") - return false - } - fallthrough + fmt.Println("* 2600 cartridge required") + return false case 1: cartload := cartridgeloader.Loader{ Filename: mf.SubModeFlags.Arg(0), Format: *cartFormat, } - err := playmode.Play(*tvType, float32(*scaling), *stable, *recording, *record, cartload) + err := playmode.Play(*tvType, float32(*scaling), *stable, *record, cartload) if err != nil { fmt.Printf("* %s\n", err) return false } if *record { fmt.Println("! recording completed") - } else if *recording != "" { - fmt.Println("! playback completed") } default: fmt.Printf("* too many arguments for %s mode\n", mf.Mode) diff --git a/playmode/play.go b/playmode/play.go index cbe5595d..6ef2dbff 100644 --- a/playmode/play.go +++ b/playmode/play.go @@ -21,9 +21,20 @@ func uniqueFilename(cartload cartridgeloader.Loader) string { } // Play sets the emulation running - without any debugging features -func Play(tvType string, scaling float32, stable bool, transcript string, newRecording bool, cartload cartridgeloader.Loader) error { +func Play(tvType string, scaling float32, stable bool, newRecording bool, cartload cartridgeloader.Loader) error { + var transcript string + + // if supplied cartridge name is actually a playback file then set + // transcript and dump cartridgeLoader information if recorder.IsPlaybackFile(cartload.Filename) { - return errors.New(errors.PlayError, "specified cartridge is a playback file. use -recording flag") + + // do not allow this if a new recording has been requested + if newRecording { + return errors.New(errors.PlayError, "cannot make a new recording using a playback file") + } + + transcript = cartload.Filename + cartload = cartridgeloader.Loader{} } playtv, err := sdlplay.NewSdlPlay(tvType, scaling, nil) @@ -36,23 +47,13 @@ func Play(tvType string, scaling float32, stable bool, transcript string, newRec return errors.New(errors.PlayError, err) } - // create default recording file name if no name has been supplied - if newRecording && transcript == "" { - n := time.Now() - timestamp := fmt.Sprintf("%04d%02d%02d_%02d%02d%02d", n.Year(), n.Month(), n.Day(), n.Hour(), n.Minute(), n.Second()) - transcript = fmt.Sprintf("recording_%s_%s", cartload.ShortName(), timestamp) - } - // note that we attach the cartridge in three different branches below, // depending on if newRecording { // new recording requested - // no transcript name given so we must generate a suitable default - if transcript == "" { - transcript = uniqueFilename(cartload) - } + transcript = uniqueFilename(cartload) rec, err := recorder.NewRecorder(transcript, vcs) if err != nil { diff --git a/regression/frame.go b/regression/frame.go index 2e405896..142a15c7 100644 --- a/regression/frame.go +++ b/regression/frame.go @@ -185,7 +185,7 @@ func (reg *FrameRegression) regress(newRegression bool, output io.Writer, msg st if reg.State { // create a unique filename - reg.stateFile = uniqueFilename(reg.CartLoad) + reg.stateFile = uniqueFilename("state", reg.CartLoad) // check that the filename is unique nf, _ := os.Open(reg.stateFile) diff --git a/regression/playback.go b/regression/playback.go index c6d98ec7..319e2a4d 100644 --- a/regression/playback.go +++ b/regression/playback.go @@ -168,7 +168,7 @@ func (reg *PlaybackRegression) regress(newRegression bool, output io.Writer, msg // regressionScripts directory if newRegression { // create a unique filename - newScript := uniqueFilename(plb.CartLoad) + newScript := uniqueFilename("playback", plb.CartLoad) // check that the filename is unique nf, _ := os.Open(newScript) diff --git a/regression/timestamp.go b/regression/unique.go similarity index 51% rename from regression/timestamp.go rename to regression/unique.go index 12bf4045..691aecc9 100644 --- a/regression/timestamp.go +++ b/regression/unique.go @@ -7,11 +7,11 @@ import ( "time" ) -// create a unique filename from a CatridgeLoader instance - -func uniqueFilename(cartload cartridgeloader.Loader) string { +// create a unique filename from a CatridgeLoader instance. used when saving +// scripts into regressionScripts directory +func uniqueFilename(prepend string, cartload cartridgeloader.Loader) string { n := time.Now() timestamp := fmt.Sprintf("%04d%02d%02d_%02d%02d%02d", n.Year(), n.Month(), n.Day(), n.Hour(), n.Minute(), n.Second()) - newScript := fmt.Sprintf("%s_%s", cartload.ShortName(), timestamp) + newScript := fmt.Sprintf("%s_%s_%s", prepend, cartload.ShortName(), timestamp) return paths.ResourcePath(regressionScripts, newScript) }