@ -109,14 +109,14 @@ int dmu_install_SingOS(char* disk_name) {
					 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					int  dmu_create_file_system ( char *  disk_name )  {  
			
		
	
		
			
				
					    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
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    do  {   
			
		
	
		
			
				
					        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 " ) ;   
			
		
	
		
			
				
					    scanf ( " %s " ,  input_size_file_system ) ;   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -126,7 +126,7 @@ int dmu_create_file_system(char* disk_name) {
					 
			
		
	
		
			
				
					    printf ( " Create new disk img \n " ) ;   
			
		
	
		
			
				
					    create_file_system ( disk_name ,  hdd_or_partition ,  filesystem_size_in_MB ) ;   
			
		
	
		
			
				
					    printf ( " Disk is created as: %s \n " ,  disk_name ) ;   
			
		
	
		
			
				
					     
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    fclose  ( disk ) ;   
			
		
	
		
			
				
					    
  
			
		
	
		
			
				
					    // TODO: Do you want to install SingOS: 
   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -135,14 +135,16 @@ int dmu_create_file_system(char* disk_name) {
					 
			
		
	
		
			
				
					    return  1 ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					int  dmu_load_file_system ( char *  disk_name )  {  
			
		
	
		
			
				
					int  dmu_load_file_system ( char *  disk_name )  
 
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    disk  =  fopen  (  disk_name  ,  " r+b "  ) ;   
			
		
	
		
			
				
					    lsfs_disk_load_disk ( ) ;   
			
		
	
		
			
				
					    disk_is_loaded  =  1 ;   
			
		
	
		
			
				
					    return  1 ;  
  
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					int  dmu_install_bootloader ( char *  disk_name )  {  
			
		
	
		
			
				
					int  dmu_install_bootloader ( char *  disk_name )  
 
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    lsfs_disk_install_bootloader ( disk_name ) ;   
			
		
	
		
			
				
					    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 [ ] )  
			
		
	
		
			
				
					{     
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    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