home *** CD-ROM | disk | FTP | other *** search
/ Hall of Fame / HallofFameCDROM.cdr / comp / pakutl12.lzh / GETFILE.C < prev    next >
Text File  |  1988-08-20  |  2KB  |  77 lines

  1. /*
  2.     getfile.c    DOS filename list subroutine
  3. */
  4.  
  5. /*
  6.     Copyright 1988, Jeffrey J. Nonken
  7.     Released to the Public Domain ... *no* rights reserved.
  8. */
  9. /*
  10. Updates:
  11.     20 Aug 1988, M. J. Housky
  12.     Modified to used DIRFN.C routines instead of assembler subroutine.
  13.     Also added comments for the curious.
  14. */
  15.  
  16. #include <stdio.h>
  17. #include <dos.h>
  18. #include <malloc.h>
  19. #include <memory.h>
  20.  
  21. #include "dirfn.h"
  22.  
  23. /*
  24.     get_files:    Build array of disk filenames matching a given
  25.             filespec and attributes.
  26.  
  27.     Returns number of matched files in list:
  28.         0 if none matched, -1 if out of memory.
  29. */
  30.  
  31. int get_files( char*, int, FILE_TYPE** );
  32.  
  33. int get_files(name,attrib,filez)
  34.     char    *name;        /* filespec to match */
  35.     int        attrib;        /* attributes to match */
  36.     FILE_TYPE    **filez;    /* where to store pointer to malloced */
  37.                     /* result array. */
  38.  
  39. {
  40.     register int i;
  41.     register int j;
  42.     FILE_TYPE    *files;        /* file list pointer */
  43.     FIND_DTA    fdta,        /* DTA for dir_sscan/dir_cscan */
  44.         *pdta;        /* pointer returned by sscan/cscan */
  45.  
  46.     files = (FILE_TYPE *)malloc(sizeof(FILE_TYPE) * 100);
  47.     if (files == NULL)
  48.     return(-1);
  49.     i = 0;
  50.     j = 100;
  51.  
  52.     pdta = dir_sscan( &fdta, name, attrib );
  53.     if ( pdta != NULL )
  54.     {
  55.     memcpy((char *)&files[i++],fdta.name,sizeof(FILE_TYPE));
  56.     do
  57.     {
  58.         pdta = dir_cscan( &fdta );
  59.         if ( pdta != NULL )
  60.         {
  61.         memcpy((char *)&files[i++],fdta.name,sizeof(FILE_TYPE));
  62.         if (i >= j)
  63.         {
  64.             j += 100;
  65.             files = (FILE_TYPE *)realloc((char *)files,
  66.                 j * sizeof(FILE_TYPE));
  67.             if (files == NULL)
  68.             return(-1);
  69.         }
  70.         }
  71.     } while (pdta != NULL);
  72.     }
  73.     files = (FILE_TYPE *)realloc((char *)files,i * sizeof(FILE_TYPE));
  74.     *filez = files;
  75.     return i;
  76. }
  77.