Kern's ToDo List
-                  10 June 2004
+                  20 June 2004
 
 1.35 Items to do:
 - Implement SIGHUP in Dir
   (Implement resources on a single pointer)
+- Make btape release the drive during the "test" append.
 - Do tape alerts -- see tapealert.txt
+- Revisit and revise Disaster Recovery (fix SCSI and RAID 
+  disk detection)
+- Document a get out of jail procedure if everything breaks if 
+  you lost/broke the Catalog -- do the same for "I know my
+  file is there how do I get it back?".
 - When restore started from console, report jobid.
 - Win32 inc problem when new directory added.
 - On Win95
 - Add priority to Scheduled jobs status listing.
 - Add multiple-media-types.txt
 - look at mxt-changer.html
-- Document a get out of jail procedure if everything breaks if you lost/broke
-  the Catalog.
 - Make ? do a help command (no return needed).
 - Implement restore directory.
 - Add All Local Partitions = yes to new style saves.
 - Implement fast tree insert (doubly linked list?)
 - Disallow using Internal database
 - Feedback while the tree is being built.    
-
 
 void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fmt, ...), void *sock)
 {
    URES *res = (URES *)reshdr;
-   int recurse = 1;
+   bool recurse = true;
 
    if (res == NULL) {
       printf("No record for %d %s\n", type, res_to_str(type));
    }
    if (type < 0) {                   /* no recursion */
       type = - type;
-      recurse = 0;
+      recurse = false;
    }
    switch (type) {
       case R_CONSOLE:
 
 void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fmt, ...), void *sock)
 {
    URES *res = (URES *)reshdr;
-   int recurse = 1;
+   bool recurse = true;
 
    if (res == NULL) {
       printf("No record for %d %s\n", type, res_to_str(type));
    }
    if (type < 0) {                   /* no recursion */
       type = - type;
-      recurse = 0;
+      recurse = false;
    }
    switch (type) {
    case R_DIRECTOR:
 
 /* 
  * Handle signals here
  */
-extern "C" {
-    static void signal_handler(int sig);
-}
-
-static void signal_handler(int sig)
+extern "C" void signal_handler(int sig)
 {
    static int already_dead = 0;
 
    /* If we come back more than once, get out fast! */
-   if (already_dead > 1) {
-      exit(1);
-   }
-   /* If we come back once, take normal exit */
    if (already_dead) {
       exit(1);
    }
    Dmsg2(200, "sig=%d %s\n", sig, sig_names[sig]);
-   /* Ignore certain signals */
+   /* Ignore certain signals -- SIGUSR2 used to interrupt threads */
    if (sig == SIGCHLD || sig == SIGUSR2) {
       return;
    }
 
 //   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 //   General Public License for more details.
 //
-//   You should have received a copcloy of the GNU General Public
+//   You should have received a copy of the GNU General Public
 //   License along with this program; if not, write to the Free
 //   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 //   MA 02111-1307, USA.
 extern void d_msg(const char *file, int line, int level, const char *fmt,...);
 extern DWORD   g_platform_id;
 
-// from CYGWIN (should be diff between Jan 1 1601 and Jan 1 1970
+// from MicroSoft SDK (KES) is the diff between Jan 1 1601 and Jan 1 1970
 #ifdef HAVE_MINGW
 #define WIN32_FILETIME_ADJUST 0x19DB1DED53E8000UL //Not sure it works
 #else
         ch2 = *s2;
         s1++;
         s2++;
-       if (ch1 == 0 || tolower(ch1) != tolower(ch2)) break;
+        if (ch1 == 0 || tolower(ch1) != tolower(ch2)) break;
     } 
 
     return(ch1 - ch2);
     int inquote = 0;
     for (const char *cp = cmdline; *cp; cp++)
     {
-       if (*cp == '"') {
-           inquote = !inquote;
-       }
-       if (!inquote && isspace(*cp))
-           break;
+        if (*cp == '"') {
+            inquote = !inquote;
+        }
+        if (!inquote && isspace(*cp))
+            break;
     }
 
-       
+        
     int len = cp - cmdline;
     char *rval = (char *)malloc(len+1);
 
     const char *comspec = getenv("COMSPEC");
     
     if (comspec == NULL) // should never happen
-       return INVALID_HANDLE_VALUE;
+        return INVALID_HANDLE_VALUE;
 
     char *cmdLine = (char *)alloca(strlen(cmdline) + strlen(comspec) + 16);
     
         }
 
         CloseHandle(hChildStdoutRd);
-       hChildStdoutRd = INVALID_HANDLE_VALUE;
+        hChildStdoutRd = INVALID_HANDLE_VALUE;
     }
 
     if (mode_write) {
         }
 
         CloseHandle(hChildStdinWr);
-       hChildStdinWr = INVALID_HANDLE_VALUE;
+        hChildStdinWr = INVALID_HANDLE_VALUE;
     }
     // spawn program with redirected handles as appropriate
     bpipe->worker_pid = (pid_t)
 {
     int rval = _close(fd);
     if (rval == -1)
-       rval = closesocket(fd);
+        rval = closesocket(fd);
     return rval;
 }