home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / THIN C 2.0 / Projects / cdFiler / cdFiles.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-04-18  |  2.1 KB  |  138 lines  |  [TEXT/THIN]

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define CD_FILE_NAME    "cdData"
  5.  
  6. #define MAX_ARTIST_CHARS    50
  7. #define MAX_TITLE_CHARS        50
  8.  
  9. struct CDInfo
  10. {
  11.     char            rating;
  12.     char            artist[ MAX_ARTIST_CHARS ];
  13.     char            title[ MAX_TITLE_CHARS ];
  14.     struct CDInfo    *next;
  15. };
  16.  
  17. extern    struct CDInfo *gFirstPtr;
  18.  
  19.  
  20. /********************************  CountCDs  ***/
  21.  
  22. int    CountCDs()
  23. {
  24.     struct CDInfo    *infoPtr;
  25.     int                numCDs;
  26.     
  27.     infoPtr = gFirstPtr;
  28.     numCDs = 0;
  29.     
  30.     while ( infoPtr != NULL )
  31.     {
  32.         infoPtr = infoPtr->next;
  33.         numCDs++;
  34.     }
  35.     
  36.     return( numCDs );
  37. }
  38.  
  39.  
  40. /********************************  FlushFile  ***/
  41.  
  42. void    FlushFile( FILE *fp )
  43. {
  44.     int    c;
  45.     
  46.     while ( ( (c = fgetc( fp )) != '\n') && (c != EOF ) )
  47.         ;
  48. }
  49.  
  50.  
  51. /********************************  ReadFileLine  ***/
  52.  
  53. void    ReadFileLine( FILE *fp, char *line )
  54. {
  55.     char c;
  56.     
  57.     while ( (c = fgetc( fp )) != '\n' )
  58.     {
  59.         *line = c;
  60.         line++;
  61.     }
  62.     
  63.     *line = 0;
  64. }
  65.  
  66.  
  67. /********************************  ReadFile  ***/
  68.  
  69. char    ReadFile()
  70. {
  71.     FILE            *fp;
  72.     struct CDInfo    *infoPtr;
  73.     int                numCDs, num, i;
  74.     
  75.     if ( ( fp = fopen( CD_FILE_NAME, "r" ) ) == NULL )
  76.         return( FALSE );
  77.     
  78.     fscanf( fp, "%d", &numCDs );
  79.     FlushFile( fp );
  80.     
  81.     for ( i=1; i<=numCDs; i++ )
  82.     {
  83.         infoPtr = malloc( sizeof( struct CDInfo ) );
  84.         
  85.         if ( infoPtr == NULL )
  86.         {
  87.             printf( "Out of memory!!!  Goodbye!\n" );
  88.             exit( 0 );
  89.         }
  90.         
  91.         ReadFileLine( fp, infoPtr->artist );
  92.         ReadFileLine( fp, infoPtr->title );
  93.         fscanf( fp, "%d", &num );
  94.         infoPtr->rating = num;
  95.         FlushFile( fp );
  96.         
  97.         AddToList( infoPtr );
  98.     }
  99.     
  100.     fclose( fp );
  101.     
  102.     return( TRUE );
  103. }
  104.  
  105.  
  106. /********************************  WriteFile  ***/
  107.  
  108. void    WriteFile()
  109. {
  110.     FILE            *fp;
  111.     struct CDInfo    *infoPtr;
  112.     int                numCDs, i, num;
  113.     
  114.     if ( ( fp = fopen( CD_FILE_NAME, "w" ) ) == NULL )
  115.     {
  116.         printf( "***ERROR: Could not write CD file!" );
  117.     }
  118.     else
  119.     {
  120.         numCDs = CountCDs();
  121.         
  122.         fprintf( fp, "%d\n", numCDs );
  123.         
  124.         infoPtr = gFirstPtr;
  125.         
  126.         for ( i=1; i<=numCDs; i++ )
  127.         {
  128.             fprintf( fp, "%s\n", infoPtr->artist );
  129.             fprintf( fp, "%s\n", infoPtr->title );
  130.  
  131.             num = infoPtr->rating;
  132.             fprintf( fp, "%d\n", num );
  133.             infoPtr = infoPtr->next;
  134.         }
  135.         
  136.         fclose( fp );
  137.     }
  138. }