/[projet1]/public/pc/tools/osdk/main/makedisk/FloppyBuilder.cpp
Defence Force logotype

Diff of /public/pc/tools/osdk/main/makedisk/FloppyBuilder.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1008 by dbug, Sun Dec 8 10:50:26 2013 UTC revision 1009 by dbug, Wed Dec 11 20:11:41 2013 UTC
# Line 71  void main(int argc, char *argv[]) Line 71  void main(int argc, char *argv[])
71    //char ligne[900];    //char ligne[900];
72    int start=0;    int start=0;
73    
   std::stringstream code_drive;  
   std::stringstream code_sector;  
   std::stringstream code_track;  
   std::stringstream code_nombre_secteur;  
   std::stringstream code_adress_low;  
   std::stringstream code_adress_high;  
   
   code_drive << "datas_lecteur\n.byt ";  
   code_sector << "datas_secteur\n.byt ";  
   code_track << "datas_piste\n.byt ";  
   code_nombre_secteur << "nombre_secteur\n.byt ";  
   code_adress_low << "adresse_chargement_low\n.byt ";  
   code_adress_high << "adresse_chargement_high\n.byt ";  
74    
75    //    //
76    // Open the description file    // Open the description file
# Line 99  void main(int argc, char *argv[]) Line 86  void main(int argc, char *argv[])
86    // Copy the floppy disk    // Copy the floppy disk
87    //    //
88    Floppy floppy;    Floppy floppy;
89    if (!floppy.Load(source_name))    if (!floppy.LoadDisk(source_name))
90    {    {
91      printf("FloppyBuilder: Can't load '%s'\n",source_name);      printf("FloppyBuilder: Can't load '%s'\n",source_name);
92      exit(1);      exit(1);
93    }    }
94    
95    // Example of file:    std::string outputLayoutFileName;
   /*  
   1 13  
   #load it at 1000  
   demo\part_hires_picture.o  
   #load it at 0500  
   demo\part_hires_picture.o  
   #load it at 0500  
   demo\part_motherboard_scroller.o  
   #new position on disk  
   0 5  
   #load it at fc00  
   demo\loader.o  
   #bootsector  
   demo\bootsector.o  
   */  
   
96    
97    //    //
98    // Set some semi sane    // Set some semi sane
# Line 131  void main(int argc, char *argv[]) Line 102  void main(int argc, char *argv[])
102    floppy.SetOffset(currentTrack,currentSector);    floppy.SetOffset(currentTrack,currentSector);
103    
104    int lineNumber=0;    int lineNumber=0;
   int fileCount=0;  
105    for (auto it(script.begin());it!=script.end();++it)    for (auto it(script.begin());it!=script.end();++it)
106    {    {
107      ++lineNumber;      ++lineNumber;
# Line 157  void main(int argc, char *argv[]) Line 127  void main(int argc, char *argv[])
127          // Comments, just skip them          // Comments, just skip them
128        }        }
129        else        else
130          if (tokens[0]=="OutputLayoutFile")
131          {
132            if (tokens.size()==2)
133            {
134              outputLayoutFileName=tokens[1];
135            }
136            else
137            {
138              printf("Syntax error line (%d), syntax is 'OutputLayoutFile FilePath' \n",lineNumber);
139            }
140          }
141          else
142        if (tokens[0]=="SetPosition")        if (tokens[0]=="SetPosition")
143        {        {
144          if (tokens.size()==3)          if (tokens.size()==3)
# Line 178  void main(int argc, char *argv[]) Line 160  void main(int argc, char *argv[])
160            std::string fileName=tokens[2];            std::string fileName=tokens[2];
161            if (tokens[1]=="Microdisc")            if (tokens[1]=="Microdisc")
162            {            {
163              floppy.writeSector(0,2,fileName.c_str());              floppy.WriteSector(0,2,fileName.c_str());
164            }            }
165            else            else
166            if (tokens[1]=="Jasmin")            if (tokens[1]=="Jasmin")
167            {            {
168              floppy.writeSector(0,1,fileName.c_str());              floppy.WriteSector(0,1,fileName.c_str());
169            }            }
170            else            else
171            {            {
# Line 209  void main(int argc, char *argv[]) Line 191  void main(int argc, char *argv[])
191              currentTrack++;              currentTrack++;
192            }            }
193    
194            if (fileCount)            int nb_sectors_by_files=floppy.WriteFile(fileName.c_str(),currentTrack,currentSector,loadAddress);
           {  
             code_adress_low  << ",";  
             code_adress_high << ",";  
   
             code_drive << ",";  
             code_sector << ",";  
             code_track << ",";  
             code_nombre_secteur << ",";  
           }  
           code_adress_low  << "<" << tokens[2];  
           code_adress_high << ">" << tokens[2];  
   
           if (currentTrack>41) // face 2  
           {  
             code_track << currentTrack-42+128;  
           }  
           else  
           {  
             code_track << currentTrack;  
           }  
           code_sector << currentSector;  
   
           code_drive << "0";  
   
           int nb_sectors_by_files=floppy.writeFile(fileName.c_str(),currentTrack,currentSector);  
           code_nombre_secteur << nb_sectors_by_files;  
   
           //floppy.SetOffset(currentTrack,currentSector);  
           ++fileCount;  
195          }          }
196          else          else
197          {          {
# Line 246  void main(int argc, char *argv[]) Line 199  void main(int argc, char *argv[])
199          }          }
200        }        }
201        else        else
202          if (tokens[0]=="AddDefine")
203        {        {
204          printf("Syntax error line (%d), unknown keyword '%s' \n",lineNumber,tokens[0].c_str());          if (tokens.size()==3)
205          exit(1);          {
206        }            floppy.AddDefine(tokens[1],tokens[2]);
207            }
208      }          else
209            {
210    }            printf("Syntax error line (%d), syntax is 'AddDefine DefineName DefineValue' \n",lineNumber);
211            }
   //fscanf(handle_description,"%d %d",&currentTrack,&currentSector);  
   
   /*  
   // On saute grosse bidouille  
   fgets(ligne,900,handle_description);  
   while (fgets(ligne,900,handle_description)!=NULL)  
   {  
     if (detecte_chaine_renvoi_suite("#bootsector",ligne,sortie)==1)  
     {  
       fgets(ligne,900,handle_description); // On lit le fichier installer dans le boot sector  
       floppy.install_boot_sector(ligne);  
     }  
     else  
     if (detecte_chaine_renvoi_suite("#new position on disk",ligne,sortie)==1)  
     {  
       fscanf(handle_description,"%d %d",&currentTrack,&currentSector);  
       fgets(ligne,900,handle_description);  
       fgets(ligne,900,handle_description);  
     }  
     else  
     if (detecte_chaine_renvoi_suite("#load it at ",ligne,sortie)==1)  
     {  
       //printf("%s\n",ligne);  
       if (start==1)  
       {  
         code_adress_low  << ",";  
         code_adress_high << ",";  
       }  
       code_adress_high << "$" << sortie[0] << sortie[1];  
       code_adress_low  << "$" << sortie[2] << sortie[3];  
     }  
     else  
     {  
       if (ligne[strlen(ligne)-1]=='\n') ligne[strlen(ligne)-1]='\0';  
       if (currentSector==taille_piste+1)  
       {  
         currentSector=1;  
         currentTrack++;  
       }  
   
       if (start==1)  
       {  
         code_drive << ",";  
         code_sector << ",";  
         code_track << ",";  
         code_nombre_secteur << ",";  
       }  
   
       if (currentTrack>41) // face 2  
       {  
         code_track << currentTrack-42+128;  
212        }        }
213        else        else
214        {        {
215          code_track << currentTrack;          printf("Syntax error line (%d), unknown keyword '%s' \n",lineNumber,tokens[0].c_str());
216            exit(1);
217        }        }
       code_sector << currentSector;  
   
       code_drive << "0";  
   
       int nb_sectors_by_files=floppy.writeFile(ligne,currentTrack,currentSector);  
       code_nombre_secteur << nb_sectors_by_files;  
   
       start=1;  
218      }      }
219    }    }
   */  
220    
   std::stringstream layoutInfo;  
   layoutInfo << code_drive.str() << "\n";  
   layoutInfo << "nb_prgm\n";  
   layoutInfo << code_sector.str() << "\n";  
   layoutInfo << code_track.str() << "\n";  
   layoutInfo << code_nombre_secteur.str() << "\n";  
   layoutInfo << code_adress_low.str() << "\n";  
   layoutInfo << code_adress_high.str() << "\n";  
221    
222    if (!SaveFile("loader.cod",layoutInfo.str().c_str(),layoutInfo.str().length()))  
223      if (!floppy.SaveDescription(outputLayoutFileName.c_str()))
224    {    {
225      printf("FloppyBuilder: Can't save '%s'\n","loader.cod");      printf("Failed saving description '%s'\n",outputLayoutFileName.c_str());
226      exit(1);      exit(1);
227    }    }
228    
229    if (!floppy.Save(dest_name))    if (!floppy.SaveDisk(dest_name))
230    {    {
231      printf("Failed saving '%s'\n",dest_name);      printf("Failed saving disk '%s'\n",dest_name);
232      exit(1);      exit(1);
233    }    }
234    else    else
235    {    {
236      printf("Successfully created '%s'\n",dest_name);      printf("Successfully created '%s'\n",dest_name);
237    }    }
   printf("FloppyBuilder:  handle_dsk.dsk built successfully\n");  
238  }  }

Legend:
Removed from v.1008  
changed lines
  Added in v.1009

  ViewVC Help
Powered by ViewVC 1.1.26