@ -109,14 +109,14 @@ int dmu_install_SingOS(char* disk_name) { 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					int  dmu_create_file_system ( char *  disk_name )  { int  dmu_create_file_system ( char *  disk_name )  {  
			
		
	
		
		
			
				
					
					    uint64_t  filesystem_size_in_MB  =  0 ;      uint64_t  filesystem_size_in_MB  =  0 ;   
			
		
	
		
		
			
				
					
					    char  hdd_or_partition [ 8 ] ;  // 1: is harddisk, 2: is partition
      char  hdd_or_partition ;  // 1: is harddisk, 2: is partition
   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					    char  input_size_file_system [ 64 ] ;  // in MB
      char  input_size_file_system [ 64 ] ;  // in MB
   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    do  {      do  {   
			
		
	
		
		
			
				
					
					        printf ( " Create as 1: harddrive or 2: as a single partition (enter 1 or 2):  \n " ) ;          printf ( " Create as 1: harddrive or 2: as a single partition (enter 1 or 2):  \n " ) ;   
			
		
	
		
		
			
				
					
					        scanf ( " %s  " ,  hdd_or_partition ) ;          scanf ( " %c  " ,  hdd_or_partition ) ;   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    }  while  ( ( hdd_or_partition [ 0 ] ! =  ' 1 ' )  & &  ( hdd_or_partition [ 0 ] ! =  ' 2 ' ) ) ;      }  while  ( ( hdd_or_partition  ! =  ' 1 ' )  & &  ( hdd_or_partition  ! =  ' 2 ' ) ) ;   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    printf ( " Enter size of file system in MB (as an integer number):  \n " ) ;      printf ( " Enter size of file system in MB (as an integer number):  \n " ) ;   
			
		
	
		
		
			
				
					
					    scanf ( " %s " ,  input_size_file_system ) ;      scanf ( " %s " ,  input_size_file_system ) ;   
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -135,14 +135,16 @@ int dmu_create_file_system(char* disk_name) { 
			
		
	
		
		
			
				
					
					    return  1 ;      return  1 ;   
			
		
	
		
		
			
				
					
					} }  
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					int  dmu_load_file_system ( char *  disk_name )  { int  dmu_load_file_system ( char *  disk_name )  
 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					{  
			
		
	
		
		
			
				
					
					    disk  =  fopen  (  disk_name  ,  " r+b "  ) ;      disk  =  fopen  (  disk_name  ,  " r+b "  ) ;   
			
		
	
		
		
			
				
					
					    lsfs_disk_load_disk ( ) ;      lsfs_disk_load_disk ( ) ;   
			
		
	
		
		
			
				
					
					    disk_is_loaded  =  1 ;      disk_is_loaded  =  1 ;   
			
		
	
		
		
			
				
					
					    return  1 ;  
     return  1 ;  
  
			
		
	
		
		
			
				
					
					} }  
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					int  dmu_install_bootloader ( char *  disk_name )  { int  dmu_install_bootloader ( char *  disk_name )  
 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					{  
			
		
	
		
		
			
				
					
					    lsfs_disk_install_bootloader ( disk_name ) ;      lsfs_disk_install_bootloader ( disk_name ) ;   
			
		
	
		
		
			
				
					
					    return  1 ;  
     return  1 ;  
  
			
		
	
		
		
			
				
					
					} }  
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -169,12 +171,111 @@ int dmu_print_mtt(char *path) { 
			
		
	
		
		
			
				
					
					} }  
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					typedef  struct  Arguments_Settings  
			
		
	
		
		
			
				
					
					{  
			
		
	
		
		
			
				
					
					    char *  load_diskname ;  
  
			
		
	
		
		
			
				
					
					    char *  new_diskname ;   
			
		
	
		
		
			
				
					
					    int  new_disk_size_mb ;   
			
		
	
		
		
			
				
					
					    char *  install_vbr_path ;   
			
		
	
		
		
			
				
					
					    char *  install_bootloader_path ;   
			
		
	
		
		
			
				
					
					    char *  copy_new_kernel ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					}  Arguments_Settings ;  
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					int  main  ( int  argc ,  char  * argv [ ] ) int  main  ( int  argc ,  char  * argv [ ] )  
			
		
	
		
		
			
				
					
					{     
{     
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    if  ( argc  >  1 )  
     if  ( argc  >  1 )  
  
			
		
	
		
		
			
				
					
					    {      {   
			
		
	
		
		
			
				
					
					        Arguments_Settings *  settings  =  calloc ( 1 ,  sizeof ( Arguments_Settings ) ) ;   
			
		
	
		
		
			
				
					
					        for  ( int  i  =  1 ;  i  <  argc ;  i + + )  
  
			
		
	
		
		
			
				
					
					        {   
			
		
	
		
		
			
				
					
					            // Parse parameters for cmd usage
   
			
		
	
		
		
			
				
					
					            switch ( argv [ i ] [ 1 ] )  
  
			
		
	
		
		
			
				
					
					            {   
			
		
	
		
		
			
				
					
					                case  ' n ' :   
			
		
	
		
		
			
				
					
					                {   
			
		
	
		
		
			
				
					
					                    // Create new disk 
   
			
		
	
		
		
			
				
					
					                    i + + ;  // Go to next parameter which is the path/filename for the new disk 
   
			
		
	
		
		
			
				
					
					                    if  ( i  >  argc )  
  
			
		
	
		
		
			
				
					
					                    {   
			
		
	
		
		
			
				
					
					                        // Go to loop condition to exit
   
			
		
	
		
		
			
				
					
					                        continue ;   
			
		
	
		
		
			
				
					
					                    }   
			
		
	
		
		
			
				
					
					                    settings - > new_diskname  =  argv [ i ] ;   
			
		
	
		
		
			
				
					
					                    printf ( " Creating new disk: %s  \n " ,  settings - > new_diskname ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					                }  break ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					                case  ' s ' :  
  
			
		
	
		
		
			
				
					
					                {   
			
		
	
		
		
			
				
					
					                    // Specify size of new disk 
   
			
		
	
		
		
			
				
					
					                    i + + ;  // Go to next parameter which is the disk size 
   
			
		
	
		
		
			
				
					
					                    if  ( i  >  argc )  
  
			
		
	
		
		
			
				
					
					                    {   
			
		
	
		
		
			
				
					
					                        // Go to loop condition to exit
   
			
		
	
		
		
			
				
					
					                        continue ;   
			
		
	
		
		
			
				
					
					                    }   
			
		
	
		
		
			
				
					
					                    settings - > new_disk_size_mb  =  atoi ( argv [ i ] ) ;  
  
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					                }  break ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					                case  ' v ' :   
			
		
	
		
		
			
				
					
					                {   
			
		
	
		
		
			
				
					
					                    // Update Volume boot record 
   
			
		
	
		
		
			
				
					
					                    i + + ;  // Go to next parameter which is the path for the VBR 
   
			
		
	
		
		
			
				
					
					                    if  ( i  >  argc )  
  
			
		
	
		
		
			
				
					
					                    {   
			
		
	
		
		
			
				
					
					                        // Go to loop condition to exit
   
			
		
	
		
		
			
				
					
					                        continue ;   
			
		
	
		
		
			
				
					
					                    }   
			
		
	
		
		
			
				
					
					                    settings - > install_vbr_path  =  argv [ i ] ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					                }  break ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					                case  ' b ' :   
			
		
	
		
		
			
				
					
					                {   
			
		
	
		
		
			
				
					
					                    // Update bootloader 
   
			
		
	
		
		
			
				
					
					                    i + + ;  // Go to next parameter which is the path for the VBR 
   
			
		
	
		
		
			
				
					
					                    if  ( i  >  argc )  
  
			
		
	
		
		
			
				
					
					                    {   
			
		
	
		
		
			
				
					
					                        // Go to loop condition to exit
   
			
		
	
		
		
			
				
					
					                        continue ;   
			
		
	
		
		
			
				
					
					                    }   
			
		
	
		
		
			
				
					
					                    settings - > install_bootloader_path  =  argv [ i ] ;   
			
		
	
		
		
			
				
					
					                }  break ;   
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        // Now execute the commands. 
   
			
		
	
		
		
			
				
					
					        // First check if we should create a new disk
   
			
		
	
		
		
			
				
					
					        if  ( settings - > new_diskname  ! =  NULL )  
  
			
		
	
		
		
			
				
					
					        {   
			
		
	
		
		
			
				
					
					            // TODO(only harddisk is supported yet)
   
			
		
	
		
		
			
				
					
					            char  hdd_or_partition  =  ' 1 ' ;  // 1 is harddrive
   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					            if  ( settings - > new_disk_size_mb  < =  0 )  
  
			
		
	
		
		
			
				
					
					            {   
			
		
	
		
		
			
				
					
					                settings - > new_disk_size_mb  =  20 ;  // 20MB is default size
   
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					            create_file_system ( settings - > new_diskname ,  hdd_or_partition ,  settings - > new_disk_size_mb ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					            settings - > load_diskname  =  settings - > new_diskname ;  
  
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        // Load the disk to complete the following instructions
   
			
		
	
		
		
			
				
					
					        if  ( settings - > load_diskname  ! =  NULL )  
  
			
		
	
		
		
			
				
					
					        {   
			
		
	
		
		
			
				
					
					            dmu_load_file_system ( settings - > load_diskname ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					            if  ( settings - > install_bootloader_path  ! =  NULL )  
  
			
		
	
		
		
			
				
					
					            {   
			
		
	
		
		
			
				
					
					                lsfs_disk_install_bootloader ( settings - > install_bootloader_path ) ;   
			
		
	
		
		
			
				
					
					            }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        }   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    }      }   
			
		
	
		
		
			
				
					
					    else      else