| 68 | 
   | 
       Result := 4; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 69 | 
   | 
     100..300: | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 70 | 
   | 
       Result := datatype - 100; | 
 
 
 
 
 
 
 
 
 | 71 | 
 + | 
     500..614: | 
 
 
 
 
 
 
 
 
 | 72 | 
 + | 
       Result := 4; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 73 | 
   | 
     1000..9999: | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 74 | 
   | 
       Result := datatype - 1000; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 75 | 
   | 
     10000..65535: | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 130 | 
   | 
  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 131 | 
   | 
 function LoadStructureDefinition(ConnectionID, FileID: Integer): TStructDef; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 132 | 
   | 
 var | 
 
 
 
 
 
 
 
 
 
 | 131 | 
 – | 
   i:      Integer; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 133 | 
   | 
   current_type: Byte; //0: Global, 1: Undynamic, 2: Dynamic | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 134 | 
   | 
   current_base, current_package, current_package_size: Integer; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 135 | 
   | 
   packages: Integer; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 178 | 
   | 
               3: | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 179 | 
   | 
               begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 180 | 
   | 
                 current_type := 1; | 
 
 
 
 
 
 
 
 
 
 
 
 | 181 | 
 < | 
                 current_base := HexToLong(fields[2]); | 
 
 
 
 
 
 
 
 
 
 | 181 | 
 > | 
                 current_base := StrToInt(fields[2]); | 
 
 
 
 
 
 
 
 
 
 
 
 | 182 | 
   | 
                 SetLength(Result.Subs, Length(Result.Subs) + 1); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 183 | 
   | 
                 Result.Subs[High(Result.Subs)].SubName := | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 184 | 
   | 
                   MidStr(fields[0], 2, Length(fields[0]) - 1); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 187 | 
   | 
               6: | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 188 | 
   | 
               begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 189 | 
   | 
                 current_type    := 2; | 
 
 
 
 
 
 
 
 
 
 
 
 | 190 | 
 < | 
                 current_base    := HexToLong(fields[2]); | 
 
 
 
 
 
 
 
 
 
 | 190 | 
 > | 
                 current_base    := StrToInt(fields[2]); | 
 
 
 
 
 
 
 
 
 
 
 
 | 191 | 
   | 
                 current_package := 0; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 192 | 
   | 
                 current_package_size := StrToInt(fields[5]); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 193 | 
   | 
                 if fields[4][1] <> '$' then | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 194 | 
   | 
                 begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 195 | 
   | 
                   case StrToInt(fields[4]) of | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 196 | 
   | 
                     1: | 
 
 
 
 
 
 
 
 
 
 
 
 | 197 | 
 < | 
                       packages := Data[HexToLong(fields[3])]; | 
 
 
 
 
 
 
 
 
 
 | 197 | 
 > | 
                       packages := Data[StrToInt(fields[3])]; | 
 
 
 
 
 
 
 
 
 
 
 
 | 198 | 
   | 
                     2: | 
 
 
 
 
 
 
 
 
 
 
 
 | 199 | 
 < | 
                       packages := Data[HexToLong(fields[3])] + Data[HexToLong(fields[3]) + 1] * 256; | 
 
 
 
 
 
 
 
 
 
 | 199 | 
 > | 
                       packages := Data[StrToInt(fields[3])] + Data[StrToInt(fields[3]) + 1] * 256; | 
 
 
 
 
 
 
 
 
 
 
 
 | 200 | 
   | 
                     4: | 
 
 
 
 
 
 
 
 
 
 
 
 | 201 | 
 < | 
                       packages := Data[HexToLong(fields[3])] + Data[HexToLong(fields[3]) + 1] * | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 202 | 
 < | 
                         256 + Data[HexToLong(fields[3]) + 2] * 256 * 256 + Data[HexToLong(fields[3]) + 3] * 256 * 256 * 256; | 
 
 
 
 
 
 
 
 
 
 | 201 | 
 > | 
                       packages := Data[StrToInt(fields[3])] + Data[StrToInt(fields[3]) + 1] * | 
 
 
 
 
 
 | 202 | 
 > | 
                         256 + Data[StrToInt(fields[3]) + 2] * 256 * 256 + Data[StrToInt(fields[3]) + 3] * 256 * 256 * 256; | 
 
 
 
 
 
 
 
 
 
 
 
 | 203 | 
   | 
                   end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 204 | 
   | 
                 end | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 205 | 
   | 
                 else | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 206 | 
   | 
                 begin | 
 
 
 
 
 
 
 
 
 
 
 
 | 207 | 
 < | 
                   packages := HexToLong(fields[4]); | 
 
 
 
 
 
 
 
 
 
 | 207 | 
 > | 
                   packages := StrToInt(fields[4]); | 
 
 
 
 
 
 
 
 
 
 
 
 | 208 | 
   | 
                 end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 209 | 
   | 
                 SetLength(Result.Subs, Length(Result.Subs) + packages); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 210 | 
   | 
                 for current_package := 0 to packages - 1 do | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 238 | 
   | 
                   structentry.description := ''; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 239 | 
   | 
                 if current_type in [0, 1] then | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 240 | 
   | 
                 begin | 
 
 
 
 
 
 
 
 
 
 
 
 | 241 | 
 < | 
                   structentry.offset := HexToLong(fields[1]) + current_base; | 
 
 
 
 
 
 
 
 
 
 | 241 | 
 > | 
                   structentry.offset := StrToInt(fields[1]) + current_base; | 
 
 
 
 
 
 
 
 
 
 
 
 | 242 | 
   | 
                   if Length(Result.Subs) = 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 243 | 
   | 
                   begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 244 | 
   | 
                     SetLength(Result.Global, Length(Result.Global) + 1); | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 257 | 
   | 
                   for current_package := 0 to packages - 1 do | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 258 | 
   | 
                   begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 259 | 
   | 
                     structentry.offset := | 
 
 
 
 
 
 
 
 
 
 
 
 | 260 | 
 < | 
                       current_base + current_package * current_package_size + HexToLong(fields[1]); | 
 
 
 
 
 
 
 
 
 
 | 260 | 
 > | 
                       current_base + current_package * current_package_size + StrToInt(fields[1]); | 
 
 
 
 
 
 
 
 
 
 
 
 | 261 | 
   | 
                     with Result.Subs[High(Result.Subs) - packages + current_package + 1] do | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 262 | 
   | 
                     begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 263 | 
   | 
                       SetLength(Entries, Length(Entries) + 1); |