[Lngcompiler-commits] CVS: lngcompiler LngForm.pas,1.19,1.20
Brought to you by:
lovetski,
maximmasiutin
From: Maxim M. <max...@us...> - 2005-02-28 17:27:01
|
Update of /cvsroot/lngcompiler/lngcompiler In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9453/lngcompiler Modified Files: LngForm.pas Log Message: NAMES section is now copied into a Pascal code for easy export Index: LngForm.pas =================================================================== RCS file: /cvsroot/lngcompiler/lngcompiler/LngForm.pas,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** LngForm.pas 28 Feb 2005 11:55:16 -0000 1.19 --- LngForm.pas 28 Feb 2005 17:26:51 -0000 1.20 *************** *** 31,34 **** --- 31,39 ---- Grids, StdCtrls, ExtCtrls, ComCtrls, Menus; + const + ExtraID = $FFFFFFFF; + + exidNames = 3; + type TTokenID = (tidID, tidString, tidChar, tidList); *************** *** 128,131 **** --- 133,138 ---- procedure Add(AName, AValue, ALng: String); procedure AddValues(const AText: String); + procedure SaveToStream(AStream: TStream); + procedure LoadFromStream(AStream: TStream; Clean: Boolean = False); function IndexOfName(AName: String; MustExist: Boolean = True): Integer; property Items[Idx: String]: String read GetItem; *************** *** 444,447 **** --- 451,502 ---- end; + procedure TNamedStrIndex.SaveToStream(AStream: TStream); + var + I: Integer; + + procedure WriteStr(const S: String); + var + L: Integer; + begin + L := Length(S); + AStream.Write(L, SizeOf(Integer)); + if L > 0 then AStream.Write(S[1], L); + end; + + begin + AStream.Write(fCount, SizeOf(Integer)); + for I := 0 to fCount-1 do + begin + WriteStr(Names[I]); + WriteStr(Values[I]); + end; + end; + + procedure TNamedStrIndex.LoadFromStream(AStream: TStream; Clean: Boolean = False); + var + I, C: Integer; + + function GetStr(): String; + var + L: Integer; + begin + Result := ''; + L := 0; + AStream.Read(L, SizeOf(Integer)); + if L > 0 then + begin + SetLength(Result, L); + AStream.Read(Result[1], L); + end; + end; + + begin + if Clean then Clear; + C := 0; + AStream.Read(C, SizeOf(Integer)); + for I := 1 to C do + Add(GetStr, GetStr, ''); + end; + function TNamedStrIndex.AllocStr(const Str: String): Integer; var *************** *** 2938,2944 **** end; ! procedure SaveLng(L: TList; aID: Integer); var I, J, K, O, N{, MP}: Integer; ! LF, LLF: TLngForm; LI: TlngItem; LS: TLngString; --- 2993,2999 ---- end; ! procedure SaveLng(L: TList; aID: Integer; StoreN: Boolean = False); var I, J, K, O, N{, MP}: Integer; ! LF, LLF, NF: TLngForm; LI: TlngItem; LS: TLngString; *************** *** 2946,2949 **** --- 3001,3006 ---- WW: Word; XL: TList; + S: String; + SL: TStringList; begin M.Write(aID, SizeOf(Integer)); *************** *** 2952,2956 **** I := L.Count-1; M.Write(I, SizeOf(I)); ! N := 0; LLF := nil; for J := 0 to L.Count-1 do begin --- 3009,3015 ---- I := L.Count-1; M.Write(I, SizeOf(I)); ! N := 0; ! LLF := nil; ! NF := nil; for J := 0 to L.Count-1 do begin *************** *** 2976,2980 **** end; end else ! if LF.Strings <> nil then LLF := LF; end; --- 3035,3040 ---- end; end else ! if LF.Strings <> nil then LLF := LF else ! if LF.Names <> nil then NF := LF; end; *************** *** 3010,3013 **** --- 3070,3114 ---- I := Integer($FFFFFFFF); M.Write(I, SizeOf(I)); + if (NF <> nil) and (NF.Names <> nil) then + begin + M.Write(I, SizeOf(I)); + J := M.Position; + M.Write(I, SizeOf(I)); + I := exidNames; + M.Write(I, SizeOf(I)); + NF.Names.SaveToStream(M); + if StoreN then + begin + K := 0; S := ''; + SL := TStringList.Create; + for I := 0 to NF.Names.Count-1 do + begin + S := S + ' +'+MakeStr(NF.Names[I]+'='+NF.Names.Values[I])+'#13#10'#13#10; + if Length(S) > 1024 then + begin + if SL.Count > 0 then S[1] := ','; + S[2] := ' '; + SL.Add(S); Inc(K); + S := ''; + end; + end; + if S <> '' then + begin + if SL.Count > 0 then S[1] := ','; + S[2] := ' '; + SL.Add(S); + Inc(K); + end; + SL.Insert(0, Format('const'#13#10' cLngNames: Array[1..%d] of String = (', [K])); + SL.Add(');'); + SL.SaveToFile(AddFileDir('EngNames.INC', WDir)); + SL.Free; + end; + K := M.Position; + M.Position := J; + J := K - J; + M.Write(J, SizeOf(Integer)); + M.Position := K; + end; J := M.Position; I := J-O; *************** *** 3049,3053 **** S := 'FBPRPBP'#13#10; M.Write(S[1], Length(S)); ! SaveLng(FormList, 0); for I := 0 to LngList.Count-1 do SaveLng(LngList[I], TLngFile(LngList[I]).LngID); --- 3150,3154 ---- S := 'FBPRPBP'#13#10; M.Write(S[1], Length(S)); ! SaveLng(FormList, 0, True); for I := 0 to LngList.Count-1 do SaveLng(LngList[I], TLngFile(LngList[I]).LngID); |