Imported Upstream version 2.6.0
[debian/amanda] / server-src / taperscan.h
index fc0f7ca1124dc991f8d0b59032c19ae8bfea448a..301401815873a1d2d6cb5b66ff0f1cf9de510d0f 100644 (file)
@@ -2,9 +2,8 @@
  * 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
@@ -30,6 +29,9 @@
 #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 */