home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / unix / unixtools / util / c / dir < prev    next >
Text File  |  1992-07-21  |  1KB  |  65 lines

  1. /* C.Dir: Directory handling */
  2.  
  3. #include "kernel.h"
  4. #include <stddef.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7.  
  8. #include "sys/dir.h"
  9.  
  10. #define ReadDir    9
  11. #define OS_GBPB    0x0C
  12.  
  13. DIR *opendir (char *name)
  14. {
  15.         register DIR *dirp;
  16.  
  17.         dirp = malloc(sizeof(DIR) + strlen(name));
  18.         if ( dirp == 0 )
  19.                 return NULL;
  20.  
  21.         dirp->dd_loc = 0;
  22.  
  23.     if ( *name )
  24.                 strcpy(dirp->dd_name,name);
  25.         else
  26.                 strcpy(dirp->dd_name,"@");
  27.  
  28.         return dirp;
  29. }
  30.  
  31. struct direct *readdir (DIR *dirp)
  32. {
  33.         static struct direct dir;
  34.         _kernel_swi_regs regs;
  35.  
  36.         if ( dirp->dd_loc == -1 )
  37.                 return NULL;
  38.  
  39.         regs.r[0] = ReadDir;
  40.         regs.r[1] = (int)dirp->dd_name;
  41.         regs.r[2] = (int)&dir.d_name;
  42.         regs.r[3] = 1;
  43.         regs.r[4] = (int)dirp->dd_loc;
  44.         regs.r[5] = MAXNAMELEN+1;
  45.         regs.r[6] = (int)"*";
  46.  
  47.         if ( _kernel_swi(OS_GBPB,®s,®s) != NULL )
  48.                 return NULL;
  49.  
  50.         dir.d_ino = 0;
  51.         dir.d_reclen = dir.d_namlen = strlen(dir.d_name);
  52.         dirp->dd_loc = regs.r[4];
  53.  
  54.         if ( regs.r[3] == 0 )
  55.                 return NULL;
  56.         else
  57.                 return &dir;
  58. }
  59.  
  60. extern void closedir (DIR *dirp)
  61. {
  62.         if ( dirp != NULL )
  63.                 free(dirp);
  64. }
  65.