root/tools/build.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. die
  2. usage
  3. main

   1 #include <stdio.h>      /* fprintf */
   2 #include <stdlib.h>     /* contains exit */
   3 #include <sys/types.h>  /* unistd.h needs this */
   4 #include <unistd.h>     /* contains read/write */
   5 #include <fcntl.h>
   6 
   7 #define MINIX_HEADER 32
   8 #define GCC_HEADER 1024
   9 
  10 void die(char * str)
     /* [previous][next][first][last][top][bottom][index][help] */
  11 {
  12         fprintf(stderr,"%s\n",str);
  13         exit(1);
  14 }
  15 
  16 void usage(void)
     /* [previous][next][first][last][top][bottom][index][help] */
  17 {
  18         die("Usage: build boot system [> image]");
  19 }
  20 
  21 int main(int argc, char ** argv)
     /* [previous][next][first][last][top][bottom][index][help] */
  22 {
  23         int i,c,id;
  24         char buf[1024];
  25 
  26         if (argc != 3)
  27                 usage();
  28         for (i=0;i<sizeof buf; i++) buf[i]=0;
  29         if ((id=open(argv[1],O_RDONLY,0))<0)
  30                 die("Unable to open 'boot'");
  31         if (read(id,buf,MINIX_HEADER) != MINIX_HEADER)
  32                 die("Unable to read header of 'boot'");
  33         if (((long *) buf)[0]!=0x04100301)
  34                 die("Non-Minix header of 'boot'");
  35         if (((long *) buf)[1]!=MINIX_HEADER)
  36                 die("Non-Minix header of 'boot'");
  37         if (((long *) buf)[3]!=0)
  38                 die("Illegal data segment in 'boot'");
  39         if (((long *) buf)[4]!=0)
  40                 die("Illegal bss in 'boot'");
  41         if (((long *) buf)[5] != 0)
  42                 die("Non-Minix header of 'boot'");
  43         if (((long *) buf)[7] != 0)
  44                 die("Illegal symbol table in 'boot'");
  45         i=read(id,buf,sizeof buf);
  46         fprintf(stderr,"Boot sector %d bytes.\n",i);
  47         if (i>510)
  48                 die("Boot block may not exceed 510 bytes");
  49         buf[510]=0x55;
  50         buf[511]=0xAA;
  51         i=write(1,buf,512);
  52         if (i!=512)
  53                 die("Write call failed");
  54         close (id);
  55         
  56         if ((id=open(argv[2],O_RDONLY,0))<0)
  57                 die("Unable to open 'system'");
  58         if (read(id,buf,GCC_HEADER) != GCC_HEADER)
  59                 die("Unable to read header of 'system'");
  60         if (((long *) buf)[5] != 0)
  61                 die("Non-GCC header of 'system'");
  62         for (i=0 ; (c=read(id,buf,sizeof buf))>0 ; i+=c )
  63                 if (write(1,buf,c)!=c)
  64                         die("Write call failed");
  65         close(id);
  66         fprintf(stderr,"System %d bytes.\n",i);
  67         return(0);
  68 }

/* [previous][next][first][last][top][bottom][index][help] */