home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 February / CHIP_2_98.iso / misc / src / trees / syslinux / source / mkrls.c < prev    next >
C/C++ Source or Header  |  1995-08-29  |  2KB  |  98 lines

  1. /*
  2.  * mkrls.c
  3.  *
  4.  * Converts the output of TLINK or EXE2BIN (LDLINUX.BIN) into a boot
  5.  * sector/ldlinux .c file and a raw LDLINUX.SYS file
  6.  *
  7.  * Usage:
  8.  *   mkrls ldlinux.com asmcode.c ldlinux.sys
  9.  */
  10.  
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13.  
  14. #define BOOTSEC_AT  (0x7C00-0x0100) /* Offset in file for bootsec */
  15. #define BOOTSEC_LEN 512             /* Must be a multiple of 8 */
  16.  
  17. main(int argc, char *argv[])
  18. {
  19.     unsigned char buffer[BOOTSEC_LEN];
  20.     FILE *in, *out, *sys;
  21.     int i, j, n;
  22.     int sys_len;
  23.     char *start;
  24.  
  25.     if ( argc < 4 )
  26.         exit(1);
  27.  
  28.     in = fopen(argv[1],"rb");
  29.     if ( in == NULL )
  30.     {
  31.         perror(argv[1]);
  32.         exit(1);
  33.     }
  34.     fseek(in,BOOTSEC_AT,SEEK_SET);
  35.  
  36.     out = fopen(argv[2],"wt");
  37.     if ( out == NULL )
  38.     {
  39.         perror(argv[2]);
  40.         fclose(in);
  41.         exit(1);
  42.     }
  43.     fputs("#include <stdio.h>\n\n", out);   /* For size_t definition */
  44.  
  45.  
  46.     fread(buffer,1,BOOTSEC_LEN,in);
  47.  
  48.     start = "char boot_sector[] =\n{\n\t";
  49.     for ( i = 0 ; i < BOOTSEC_LEN ; i += 8 )
  50.     {
  51.         fputs(start, out);
  52.         for ( j = 0 ; j < 7 ; j++ )
  53.         {
  54.             fprintf(out, "0x%02x, ", buffer[i+j]);
  55.         }
  56.         fprintf(out, "0x%02x", buffer[i+7]);
  57.         start = ",\n\t";
  58.     }
  59.     fprintf(out, "\n};\n");
  60.  
  61.     sys = fopen(argv[3],"wb");
  62.     if ( sys == NULL )
  63.     {
  64.         perror(argv[3]);
  65.         fclose(in);
  66.         fclose(out);
  67.         exit(1);
  68.     }
  69.  
  70.     start = "\nchar ldlinux_sys[] =\n{\n\t";
  71.     sys_len = 0;
  72.  
  73.     while ( (n = fread(buffer,1,BOOTSEC_LEN,in)) > 0 )
  74.     {
  75.         sys_len += n;
  76.         fwrite(buffer,1,n,sys);
  77.         for ( i = 0 ; i < n ; i += 8 )
  78.         {
  79.             fputs(start, out);
  80.             for ( j = 0 ; j < 7 && i+j < n-1 ; j++ )
  81.             {
  82.                 fprintf(out, "0x%02x, ", buffer[i+j]);
  83.             }
  84.             fprintf(out, "0x%02x", buffer[i+j]);
  85.             start = ",\n\t";
  86.         }
  87.     }
  88.     fprintf(out, "\n};\n\nsize_t ldlinux_len = %d;\n", sys_len);
  89.  
  90.     fclose(sys);
  91.     fclose(out);
  92.     fclose(in);
  93.  
  94.     return 0;
  95. }
  96.  
  97.  
  98.