/[projet1]/public/pc/tools/osdk/main/bas2tap/sources/bas2tap.cpp
Defence Force logotype

Diff of /public/pc/tools/osdk/main/bas2tap/sources/bas2tap.cpp

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

revision 1480 by dbug, Mon Jun 25 17:06:22 2018 UTC revision 1481 by dbug, Sat Jun 30 14:20:20 2018 UTC
# Line 111  int search_keyword(const char *str) Line 111  int search_keyword(const char *str)
111    
112    
113    
114  void Bas2Tap(const char *sourceFile,const char *destFile,bool autoRun,bool useColor)  void Bas2Tap(const char *sourceFile,const char *destFile,bool autoRun,bool useColor,bool optimize)
115  {  {
116    unsigned char buf[48192];    unsigned char buf[48192];
117    unsigned int end, lastptr, adr;    unsigned int end, lastptr, adr;
# Line 127  void Bas2Tap(const char *sourceFile,cons Line 127  void Bas2Tap(const char *sourceFile,cons
127    
128    std::string currentFile=sourceFile;    std::string currentFile=sourceFile;
129    int currentLineNumber=0;    int currentLineNumber=0;
130    int i=0;    unsigned char* bufPtr = buf;
131    std::vector<std::string>::const_iterator lineIt=textData.begin();    std::vector<std::string>::const_iterator lineIt=textData.begin();
132    while (lineIt!=textData.end())    while (lineIt!=textData.end())
133    {    {
# Line 179  void Bas2Tap(const char *sourceFile,cons Line 179  void Bas2Tap(const char *sourceFile,cons
179          }          }
180    
181          // Standard line          // Standard line
182          buf[i++] = 0;          *bufPtr++ = 0;
183          buf[i++] = 0;          *bufPtr++ = 0;
184    
185          buf[i++]=number&0xFF;          *bufPtr++ =number&0xFF;
186          buf[i++]=number>>8;          *bufPtr++ =number>>8;
187    
188          ptr=0;          ptr=0;
189          rem=0;          rem=0;
# Line 196  void Bas2Tap(const char *sourceFile,cons Line 196  void Bas2Tap(const char *sourceFile,cons
196          {          {
197            if (rem)            if (rem)
198            {            {
199              if (color)              char value = ligne[ptr++];
200                if (!optimize)
201              {              {
202                color=false;                if (color)
203                buf[i++]=27;      // ESCAPE                {
204                buf[i++]='B';     // GREEN labels                  color=false;
205                    *bufPtr++ =27;  // ESCAPE
206                    *bufPtr++ ='B'; // GREEN labels
207                  }
208                  *bufPtr++ =value;
209              }              }
             buf[i++]=ligne[ptr++];  
210            }            }
211            else            else
212            if (string)            if (string)
213            {            {
214              if (ligne[ptr]=='"') string=0;              if (ligne[ptr]=='"') string=0;
215              buf[i++]=ligne[ptr++];              *bufPtr++ =ligne[ptr++];
216            }            }
217            else            else
218            if (data)            if (data)
219            {            {
220              if (ligne[ptr]==':') data=0;              if (ligne[ptr]==':') data=0;
221              buf[i++]=ligne[ptr++];              *bufPtr++ =ligne[ptr++];
222            }            }
223            else            else
224            {            {
# Line 225  void Bas2Tap(const char *sourceFile,cons Line 229  void Bas2Tap(const char *sourceFile,cons
229              if (ligne[ptr]=='"') string=1;              if (ligne[ptr]=='"') string=1;
230              if (keyw>=0)              if (keyw>=0)
231              {              {
232                buf[i++]=keyw+128;                *bufPtr++ =keyw+128;
233                ptr+=strlen(keywords[keyw]);                ptr+=strlen(keywords[keyw]);
234              }              }
235              else              else
236              {              {
237                buf[i++]=ligne[ptr++];                *bufPtr++ =ligne[ptr++];
238              }              }
239            }            }
240          }          }
241          buf[i++]=0;          *bufPtr++ = 0;
242        }        }
243      }      }
244    }    }
245    buf[i++]=0;    *bufPtr++ = 0;
246    buf[i++]=0;    *bufPtr++ = 0;
247    
248    //following line modified by Wilfrid AVRILLON (Waskol) 06/20/2009    //following line modified by Wilfrid AVRILLON (Waskol) 06/20/2009
249    //It should follow this rule of computation : End_Address=Start_Address+File_Size-1    //It should follow this rule of computation : End_Address=Start_Address+File_Size-1
250    //Let's assume a 1 byte program, it starts at address #501 and ends at address #501 (Address=Address+1-1) !    //Let's assume a 1 byte program, it starts at address #501 and ends at address #501 (Address=Address+1-1) !
251    //It was a blocking issue for various utilities (tap2wav for instance)    //It was a blocking issue for various utilities (tap2wav for instance)
252    //end=0x501+i-1;              //end=0x501+i;    //end=0x501+i-1;              //end=0x501+i;
253      int i = bufPtr - buf;
254    end=0x501+i;    end=0x501+i;
255    
256    if (autoRun)  head[7]=0x80;   // Autorun for basic :)    if (autoRun)  head[7]=0x80;   // Autorun for basic :)
# Line 346  int main(int argc, char **argv) Line 351  int main(int argc, char **argv)
351      "  -b2t[0|1] for converting to tape format with autorun (1) or not (0)\r\n"      "  -b2t[0|1] for converting to tape format with autorun (1) or not (0)\r\n"
352      "  -t2b for converting from tape format text\r\n"      "  -t2b for converting from tape format text\r\n"
353      "  -color[0|1] for enabling colored comments"      "  -color[0|1] for enabling colored comments"
354          "\r\n"      "  -optimize[0|1] for allowing for optimizations (disabling comments, etc...)"
355        "\r\n"
356      "Example:\r\n"      "Example:\r\n"
357      "  {ApplicationName} -b2t1 final.txt osdk.tap\r\n"      "  {ApplicationName} -b2t1 final.txt osdk.tap\r\n"
358      "  {ApplicationName} -t2b osdk.tap program.txt\r\n"      "  {ApplicationName} -t2b osdk.tap program.txt\r\n"
# Line 355  int main(int argc, char **argv) Line 361  int main(int argc, char **argv)
361    bool basicToTape=true;    bool basicToTape=true;
362    bool autoRun=true;    bool autoRun=true;
363    bool useColor=false;    bool useColor=false;
364      bool optimize = false;
365    
366    ArgumentParser argumentParser(argc,argv);    ArgumentParser argumentParser(argc,argv);
367    
# Line 378  int main(int argc, char **argv) Line 385  int main(int argc, char **argv)
385        // Handling of color codes        // Handling of color codes
386        useColor=argumentParser.GetBooleanValue(false);        useColor=argumentParser.GetBooleanValue(false);
387      }      }
388        else
389        if (argumentParser.IsSwitch("-optimize"))
390        {
391          // Handling of optimization (disables color if enabled)
392          optimize =argumentParser.GetBooleanValue(false);
393        }
394    }    }
395    
396    if (argumentParser.GetParameterCount()!=NB_ARG)    if (argumentParser.GetParameterCount()!=NB_ARG)
# Line 391  int main(int argc, char **argv) Line 404  int main(int argc, char **argv)
404    
405    if (basicToTape)    if (basicToTape)
406    {    {
407      Bas2Tap(nameSrc.c_str(),nameDst.c_str(),autoRun,useColor);      Bas2Tap(nameSrc.c_str(),nameDst.c_str(),autoRun,useColor, optimize);
408    }    }
409    else    else
410    {    {

Legend:
Removed from v.1480  
changed lines
  Added in v.1481

  ViewVC Help
Powered by ViewVC 1.1.26