* Copyright (c) 2005 Zmanda Inc. All Rights Reserved.
*
* This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
#ifndef TAPERSCAN_H
#define TAPERSCAN_H
+#include <device.h>
+
+typedef struct taper_scan_tracker_s taper_scan_tracker_t;
/* taper_scan(): Scans the changer to find a tape to use. Reads the tape
* label, or invents a new one if label_new_tapes is in use.
* re-read, because there may not actually exist a label
* on-tape (for WORM or newly-labeled media).
*
+ * This function may be run multiple times consecutively with
+ * the same tracker; each run will return a different elegible
+ * tape. The
+ *
* Inputs: wantlabel
* Outputs: Returns: -1 if an error occured or no tape was found.
* 1 if the most desirable tape was found.
* timestamp: What the timestamp string on-tape was. May be "X".
* error_message: Debugging output.
* tapedev: What device to use from now on.
+ * tracker: Pointer to an allocated taper_scan_tracker_t, used for
+ * persistance between runs.
*
* All returned strings are newly-allocated. */
+typedef void (*TaperscanOutputFunctor)(void * data, char * msg);
+typedef gboolean (*TaperscanProlongFunctor)(void *data);
+
int taper_scan (char* wantlabel,
- char** gotlabel, char** timestamp,
- char **tapedev,
- void taperscan_output_callback(void *data, char *msg),
- void *data);
+ char** gotlabel, char** timestamp,
+ char **tapedev,
+ taper_scan_tracker_t* tracker,
+ TaperscanOutputFunctor output_functor,
+ void *output_data,
+ TaperscanProlongFunctor prolong_functor,
+ void *prolong_data
+ );
void FILE_taperscan_output_callback(void *data, char *msg);
void CHAR_taperscan_output_callback(void *data, char *msg);
+/* Returns a newly allocated tracker object. */
+taper_scan_tracker_t* taper_scan_tracker_new(void);
+
+/* Frees a tracker object. */
+void taper_scan_tracker_free(taper_scan_tracker_t*);
+
#endif /* !TAPERSCAN_H */