+/* ------------------------------------------------------------------------- *
+ * tape autoplay functions
+ * ------------------------------------------------------------------------- */
+
+void AutoPlayTape()
+{
+ static LevelDirTree *autoplay_leveldir = NULL;
+ static boolean autoplay_initialized = FALSE;
+ static int autoplay_level_nr = -1;
+
+ if (autoplay_initialized)
+ {
+ /* just finished auto-playing tape */
+ printf("%s.\n", tape.auto_play_level_solved ? "solved" : "NOT SOLVED");
+ }
+ else
+ {
+ autoplay_leveldir = getTreeInfoFromIdentifier(leveldir_first,
+ options.autoplay_leveldir);
+
+ if (autoplay_leveldir == NULL)
+ Error(ERR_EXIT, "no such level identifier: '%s'",
+ options.autoplay_leveldir);
+
+ leveldir_current = autoplay_leveldir;
+
+ autoplay_level_nr = autoplay_leveldir->first_level;
+
+ printf("Playing tapes of level series '%s'.\n", options.autoplay_leveldir);
+
+ autoplay_initialized = TRUE;
+ }
+
+ while (autoplay_level_nr <= autoplay_leveldir->last_level)
+ {
+ level_nr = autoplay_level_nr++;
+
+ TapeErase();
+
+ printf("Level %03d: ", level_nr);
+
+ LoadLevel(level_nr);
+ if (level.no_level_file)
+ {
+ printf("(no level file)\n");
+ continue;
+ }
+
+ LoadTape(level_nr);
+ if (TAPE_IS_EMPTY(tape))
+ {
+ printf("(no tape file)\n");
+ continue;
+ }
+
+ break;
+ }
+
+ if (autoplay_level_nr >= autoplay_leveldir->last_level)
+ CloseAllAndExit(0);
+
+ printf("playing tape ... ");
+
+ TapeStartGamePlaying();
+ TapeStartIndexSearch();
+}
+
+