home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / APPS / macutils.lzh / MACUTILS / MACUNPACK / dir.c < prev    next >
C/C++ Source or Header  |  1996-02-02  |  1KB  |  76 lines

  1. #include "globals.h"
  2. #include "../fileio/machdr.h"
  3. #include "../fileio/wrfile.h"
  4. #include "../util/util.h"
  5. #include "../util/masks.h"
  6.  
  7. extern char *malloc();
  8. extern char *realloc();
  9.  
  10. static char *dir_stack;
  11. static int dir_ptr = -64;
  12. static int dir_max;
  13.  
  14. void dir(hdr)
  15. char *hdr;
  16. {
  17. int doit;
  18.  
  19.     if((hdr[I_NAMEOFF] & BYTEMASK) == 0x80) {
  20.     if(dir_skip) {
  21.         dir_skip--;
  22.         return;
  23.     }
  24.     indent--;
  25.     if(list) {
  26.         do_indent(indent);
  27.         (void)fprintf(stderr, "leaving folder \"%s\"\n",
  28.             dir_stack + dir_ptr);
  29.     }
  30.     if(!info_only) {
  31.         enddir();
  32.     }
  33.     dir_ptr -= 64;
  34.     return;
  35.     }
  36.     if(dir_skip) {
  37.     dir_skip++;
  38.     return;
  39.     }
  40.     dir_ptr += 64;
  41.     if(dir_ptr == dir_max) {
  42.     if(dir_max == 0) {
  43.         dir_stack = malloc(64);
  44.     } else {
  45.         dir_stack = realloc(dir_stack, (unsigned)dir_max + 64);
  46.     }
  47.     dir_max += 64;
  48.     if(dir_stack == NULL) {
  49.         (void)fprintf(stderr, "Insufficient memory\n");
  50.         exit(1);
  51.     }
  52.     }
  53.     transname(hdr + I_NAMEOFF + 1, dir_stack + dir_ptr,
  54.           (int)(hdr[I_NAMEOFF] & 0x7f));
  55.     doit = 1;
  56.     if(list) {
  57.     do_indent(indent);
  58.     (void)fprintf(stderr, "folder=\"%s\"", dir_stack + dir_ptr);
  59.     if(query) {
  60.         doit = do_query();
  61.     } else {
  62.         (void)fputc('\n', stderr);
  63.     }
  64.     }
  65.     if(!doit) {
  66.     dir_ptr -= 64;
  67.     dir_skip = 1;
  68.     return;
  69.     }
  70.     if(!info_only) {
  71.     do_mkdir(dir_stack + dir_ptr, hdr);
  72.     }
  73.     indent++;
  74. }
  75.  
  76.