home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / system / grabkick / grabkick.c < prev    next >
C/C++ Source or Header  |  1995-02-27  |  2KB  |  78 lines

  1. /* GRABKICK  Copy Kickstart ROM into a file                         ***RGR***
  2.    MANX Aztec C 5.2: cc GrabKick; ln GrabKick -lm -lc               23-dec-92
  3.    Author:   Ralf Gruner, An der Sense 5a, D-02779 Großschönau, Germany.
  4. */
  5.  
  6. #include <stdio.h>
  7. #include <libraries/dos.h>
  8.  
  9. main(int argc, char *argv[])
  10. {
  11.     void grab(char *kickfile);
  12.     char *msg="\n GrabKick Version 1.1 - 1992 by Ralf Gruner, Großschönau, Germany.\n";
  13.  
  14.     if(argc == 0)
  15.     {
  16.         /* Start from WorkBench */
  17.         printf(msg);
  18.         grab("Kickfile");
  19.         Delay(500L);
  20.     }
  21.  
  22.     if((argc != 2)&&(argc != 1)||(*argv[1]=='?'))
  23.     {
  24.         printf("\n Copy Kickstart ROM to file.");
  25.         printf(msg);
  26.         printf(" Usage: GrabKick [<destination file name>]\n\n");
  27.     }
  28.     else
  29.         if(argc == 2)
  30.         {
  31.             grab(argv[1]);
  32.         }
  33.         else
  34.             grab("Kickfile");
  35. }
  36.  
  37. void grab(char *kickfile)
  38. {
  39.     FILE *ausgabe, *fopen();
  40.     long anzahl = 0;
  41.     unsigned short *version;
  42.     char c, *romptr, *romstart, *romend=(char *)0x00ffffff;
  43.  
  44.     if(!(ausgabe = fopen(kickfile, "w")))
  45.         {
  46.             printf("cannot open: %s\n",kickfile);
  47.             return;
  48.         }
  49.     romstart= (char *) (romend- *(unsigned long *)(romend - 0x13) +1);
  50.     printf("\nROMstart: %lX\n",romstart);
  51.     printf("ROMend :  %lX\n",romend);
  52.  
  53.     version=(unsigned short*)(romstart+12);
  54.     printf("Copying Kickstart version %u.%u to file %s\n",*version,*(version+1),kickfile);
  55.  
  56.     for(romptr= romstart; romptr< (char *)(romend +1); ++romptr)
  57.     {
  58.         c=*romptr;
  59.         if(fputc( c, ausgabe)==EOF)
  60.         {
  61.             printf("\nError while writing.");
  62.             fclose(ausgabe);
  63.             if(remove(kickfile)==0)
  64.                 printf(" File %s removed.",kickfile);
  65.             printf("\n\n");
  66.             anzahl=-1;
  67.             break;
  68.         }
  69.         anzahl++;
  70.     }
  71.     if(anzahl>=0L)
  72.     {
  73.         fclose(ausgabe);
  74.         printf("%ld bytes (%ld KB).\n\n", anzahl,anzahl/1024);
  75.     }
  76. }
  77.  
  78.