Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1. /* asmfnums.c */
  2. /*****************************************************************************/
  3. /* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only                     */
  4. /*                                                                           */
  5. /* AS-Portierung                                                             */
  6. /*                                                                           */
  7. /* Verwaltung von Datei-Nummern                                              */
  8. /*                                                                           */
  9. /*****************************************************************************/
  10.  
  11. #include "stdinc.h"
  12. #include <string.h>
  13.  
  14. #include "strutil.h"
  15. #include "chunks.h"
  16. #include "asmdef.h"
  17. #include "asmsub.h"
  18. #include "asmpars.h"
  19.  
  20. #include "asmfnums.h"
  21.  
  22. typedef struct sToken
  23. {
  24.   struct sToken *Next;
  25.   LargeWord FirstAddr, LastAddr;
  26.   char *Name;
  27. } TToken, *PToken;
  28.  
  29. static PToken FirstFile;
  30. static int FileCount;
  31.  
  32. void InitFileList(void)
  33. {
  34.   FirstFile = NULL;
  35.   FileCount = 0;
  36. }
  37.  
  38. void ClearFileList(void)
  39. {
  40.   PToken F;
  41.  
  42.   while (FirstFile)
  43.   {
  44.     F = FirstFile->Next;
  45.     free(FirstFile->Name);
  46.     free(FirstFile);
  47.     FirstFile = F;
  48.   }
  49.   FileCount = 0;
  50. }
  51.  
  52. static PToken SearchToken(int Num)
  53. {
  54.   PToken Lauf = FirstFile;
  55.  
  56.   while (Num > 0)
  57.   {
  58.     if (!Lauf)
  59.       return NULL;
  60.     Num--;
  61.     Lauf = Lauf->Next;
  62.   }
  63.   return Lauf;
  64. }
  65.  
  66. void AddFile(char *FName)
  67. {
  68.   PToken Lauf, Neu;
  69.  
  70.   if (GetFileNum(FName) != -1)
  71.     return;
  72.  
  73.   Neu = (PToken) malloc(sizeof(TToken));
  74.   Neu->Next = NULL;
  75.   Neu->Name = as_strdup(FName);
  76.   Neu->FirstAddr = IntTypeDefs[LargeUIntType].Max;
  77.   Neu->LastAddr  = IntTypeDefs[LargeUIntType].Min;
  78.   if (!FirstFile)
  79.     FirstFile = Neu;
  80.   else
  81.   {
  82.     Lauf = FirstFile;
  83.     while (Lauf->Next)
  84.       Lauf = Lauf->Next;
  85.     Lauf->Next = Neu;
  86.   }
  87.   FileCount++;
  88. }
  89.  
  90. Integer GetFileNum(char *Name)
  91. {
  92.   PToken FLauf = FirstFile;
  93.   int Cnt = 0;
  94.  
  95.   while ((FLauf) && (strcmp(FLauf->Name,Name)))
  96.   {
  97.     Cnt++;
  98.     FLauf = FLauf->Next;
  99.   }
  100.   return FLauf ? Cnt : -1;
  101. }
  102.  
  103. const char *GetFileName(int Num)
  104. {
  105.   PToken Lauf = SearchToken(Num);
  106.  
  107.   return Lauf ? Lauf->Name : "";
  108. }
  109.  
  110. Integer GetFileCount(void)
  111. {
  112.   return FileCount;
  113. }
  114.  
  115. void AddAddressRange(int File, LargeWord Start, LargeWord Len)
  116. {
  117.   PToken Lauf = SearchToken(File);
  118.  
  119.   if (!Lauf)
  120.     return;
  121.  
  122.   if (Start < Lauf->FirstAddr)
  123.     Lauf->FirstAddr = Start;
  124.   if ((Len += Start - 1) > Lauf->LastAddr)
  125.     Lauf->LastAddr = Len;
  126. }
  127.  
  128. void GetAddressRange(int File, LargeWord *Start, LargeWord *End)
  129. {
  130.   PToken Lauf = SearchToken(File);
  131.  
  132.   if (!Lauf)
  133.   {
  134.     *Start = IntTypeDefs[LargeUIntType].Max;
  135.     *End   = IntTypeDefs[LargeUIntType].Min;
  136.   }
  137.   else
  138.   {
  139.     *Start = Lauf->FirstAddr;
  140.     *End   = Lauf->LastAddr;
  141.   }
  142. }
  143.  
  144. void ResetAddressRanges(void)
  145. {
  146.   PToken Run;
  147.  
  148.   for (Run = FirstFile; Run; Run = Run->Next)
  149.   {
  150.     Run->FirstAddr = IntTypeDefs[LargeUIntType].Max;
  151.     Run->LastAddr  = IntTypeDefs[LargeUIntType].Min;
  152.   }
  153. }
  154.  
  155. void asmfnums_init(void)
  156. {
  157.    FirstFile = NULL;
  158.    FileCount = 0;
  159. }
  160.