home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / utility / disk / zorg_134 / tos_40x / lastclst.c next >
C/C++ Source or Header  |  1994-02-02  |  2KB  |  74 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <tos.h>
  4. #include <ctype.h>
  5.  
  6. /********************************************************************
  7. *                                                                    *
  8. *                Récupère le fichier sur le dernier cluster            *
  9. *            Suite à un bug du TOS, ce fichier est inaccessible        *
  10. *                                                                    *
  11. ********************************************************************/
  12.  
  13. int main(void)
  14. {
  15.     unsigned int first_sector = 0;
  16.     long size = 0;
  17.     char device = 0;
  18.     int size_in_sector = 0;
  19.     char ligne[80], name[80] = "", *buff;
  20.     int fd, err;
  21.     BPB bpb;
  22.  
  23.     printf("Récupération du fichier en fin de disque inaccessible avec le TOS 4.0?\nRéalisé par Ludovic Rousseau le 7 Novembre 1993.\nMise à jour le 4 Février 1994.\n\n");
  24.  
  25.     printf("Premier secteur (décimal) : ");
  26.     gets(ligne);
  27.     sscanf(ligne, "%u", &first_sector);
  28.  
  29.     printf("taille en octets : ");
  30.     gets(ligne);
  31.     sscanf(ligne, "%ld", &size);
  32.  
  33.     printf("device (lettre) : ");
  34.     gets(ligne);
  35.     sscanf(ligne, "%c", &device);
  36.     device = toupper(device) - 'A';
  37.  
  38.     printf("nom complet de la copie : ");
  39.     gets(name);
  40.  
  41.     printf("start %u, size %ld, device %c:, copie %s\nOK ? (O/N)", first_sector, size, device+'A', name);
  42.  
  43.     if ((Cconin() & 0xFF) != 'o')
  44.         return 2;
  45.  
  46.     bpb = *Getbpb(device);
  47.  
  48.     size_in_sector = (int)((size + bpb.recsiz) / bpb.recsiz);
  49.     if ((buff = malloc(size_in_sector * bpb.recsiz)) == NULL)
  50.     {
  51.         puts("Pas assez de mémoire");
  52.         return 1;
  53.     }
  54.     
  55.     if ((err = (int)Rwabs(0, buff, size_in_sector, first_sector, device)) < 0)
  56.     {
  57.         printf("Error du Rwabs : %ld\n", err);
  58.         return 1;
  59.     }
  60.     
  61.     if ((fd = (int)Fcreate(name, 0)) < 0)
  62.     {
  63.         printf("Error du Fcreate : %d\n", fd);
  64.         return 1;
  65.     }
  66.  
  67.     Fwrite(fd, size, buff);
  68.     Fclose(fd);
  69.  
  70.     free(buff);
  71.  
  72.     return 0;
  73. } /* main */
  74.