亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ctdunpak.pas

?? Citadel v.1.6 Full Sources
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
unit ctdUnpak;

interface

{$INCLUDE ctdDefs.inc}

uses Windows, Classes, Consts, Controls, ctdAux;

const
  MaxPropPathCount   = 100;
  PropPathCountValue = (Low(Smallint) + 1) + MaxPropPathCount;

  vaIdentInt8  = 255;
  vaIdentInt16 = 254;
  vaIdentInt32 = 253;
  vaIdentInt64 = 252;

  procedure CtdObjectPackedToBinary(RootClass: TComponentClass;
    Input, Output: TStream);
  {$ifndef CtdNoRTLog}
  procedure CtdDummyWriteToLog(const Text: String;
    LogMode: TCtdLogModes = [lmLogOnly, lmSecondary]);
  {$endif CtdNoRTLog}

var
  DsgnGetFieldClassByIndexRoutine: function(AClass: TClass; var Index: Smallint): TPersistentClass = nil;
  {$ifndef CtdNoRTLog}
  WriteToLog: procedure(const Text: String;
    LogMode: TCtdLogModes = [lmLogOnly, lmSecondary]);
  {$endif CtdNoRTLog}
  RuntimeLog: Boolean = False;

implementation

uses
  {$ifdef D6UP}
  RTLConsts,
  {$endif D6UP}
  SysUtils,
  TypInfo;

type
  TCtdWriter = class(TWriter);

  PFieldClassTable = ^TFieldClassTable;
  TFieldClassTable = packed record
    Count: Smallint;
    Classes: array[0..8191] of ^TPersistentClass;
  end;

{$ifndef CtdNoRTLog}
procedure CtdDummyWriteToLog(const Text: String;
  LogMode: TCtdLogModes = [lmLogOnly, lmSecondary]);
begin
end;
{$endif CtdNoRTLog}

function GetFieldClassTable(AClass: TClass): PFieldClassTable; assembler;
asm
        MOV     EAX,[EAX].vmtFieldTable
        OR      EAX,EAX
        JE      @@1
        MOV     EAX,[EAX+2].Integer
@@1:
end;

function GetFieldClassByIndex(AClass: TClass; var Index: Smallint): TPersistentClass;
var
  Found,
  GetCount: Boolean;
  Count: SmallInt;
  ClassTable: PFieldClassTable;
  aux: TClass;
begin
  Result   := nil;
  GetCount := Index = High(Smallint);
  Count    := 0;
  if Assigned(DsgnGetFieldClassByIndexRoutine)
  then Result := DsgnGetFieldClassByIndexRoutine(AClass, Index)
  else
  begin
    aux        := AClass;
    ClassTable := nil;
    Found      := False;
    while(not Found) and (aux <> TPersistent) do
    begin
      ClassTable := GetFieldClassTable(aux);
      if ClassTable <> nil then
      begin
        Inc(Count, ClassTable.Count);
        if Index >= ClassTable.Count
        then Dec(Index, ClassTable.Count)
        else Found := True;
      end;
      if not Found then
        aux := aux.ClassParent;
    end;
    if Found
    then Result := ClassTable^.Classes[Index]^
    else
    begin
      if GetCount
      then Index := Count
      else raise Exception.Create(
                   'Citadel error: class index ' + IntToStr(Index) +
                   ' not found in class ' + AClass.ClassName);
    end;
  end;
end;

function GetFieldClassByName(AClass: TClass; Name: String): TComponentClass;
var
  Found: Boolean;
  ClassTable: PFieldClassTable;
  aux: TClass;
  i: Integer;
begin
  aux        := AClass;
  Result     := nil;
  Found      := False;
  while(not Found) and (aux <> TPersistent) do
  begin
    ClassTable := GetFieldClassTable(aux);
    if ClassTable <> nil then
    begin
      for i := 0 to ClassTable^.Count - 1 do
      begin
        Found := CompareText(ClassTable^.Classes[i]^.ClassName, Name) = 0;
        if Found then
        begin
          Result := TComponentClass(ClassTable^.Classes[i]^);
          break;
        end;
      end;
    end;
    if not Found then
      aux := aux.ClassParent;
  end;
end;

procedure CtdObjectPackedToBinary(RootClass: TComponentClass;
  Input, Output: TStream);
var
  SaveSeparator: Char;
  Reader: TReader;
  Writer: TWriter;
  RootName: String;

  procedure ConvertValue(ObjectName, OwnerName: String; PropTypeInfo: PTypeInfo;
    PropInfo: PPropInfo); forward;

  function ReadStringIndex(var Index: Smallint; var Str: String): Boolean;
  var
    auxW: Smallint;
    auxC: Char;
    Length: Integer;
  begin
    Reader.Read(auxW, 2);
    auxC := Char(Lo(auxW));
    if auxC > 'z'
    then // It's an index
    begin
      auxW   := Swap(auxW);
      Index  := -auxW - 1;
      Result := True;
    end
    else // It's a string
    begin
      Length := Lo(auxW);
      SetString(Str, PChar(nil), Length);
      Str[1] := Char(Hi(auxW));
      Reader.Read(Str[2], Length - 1);
      Index := -1;
      Result := False;
    end;
  end;
                                                   
  function ConvertHeader(var OwnerClass: TComponentClass;
    var OwnerName, ObjectName, ClassName: String; IsRoot: Boolean): PTypeInfo;
  var
    Flags: TFilerFlags;
    Position: Integer;
    aux: string;
    Index,
    FieldIndex: Smallint;
    Size: Shortint;
    ComponentClass: TComponentClass;
    IsInline,
    IsInherited: Boolean;
    {$ifdef D6UP}
    OldGroup: TPersistentClass;
    {$endif D6UP}
    {$ifndef CtdNoRTLog}
    auxClass: TClass;
    DsgPropCount,
    PropCount: Word;
    FieldsCount,
    DsgFieldsCount: Smallint;
    {$endif CtdNoRTLog}
  begin
    Result         := nil;
    ComponentClass := nil;
    Reader.ReadPrefix(Flags, Position);
    IsInline    := ffInline    in Flags;
    IsInherited := ffInherited in Flags;
    if IsInline and IsInherited then
      Exclude(Flags, ffInline);
    TCtdWriter(Writer).WritePrefix(Flags, Position);

    {$ifndef CtdNoRTLog}
    if IsInline then
      WriteToLog('Inline');
    if ffChildPos in Flags then
      WriteToLog('ChildPos');
    if IsInherited then
      WriteToLog('Inherited');
    {$endif CtdNoRTLog}

    if ReadStringIndex(Index, ClassName)
    then
    begin
      {$ifndef CtdNoRTLog}
      WriteToLog('Class is packed');
      {$endif CtdNoRTLog}
      if Index = -(Low(Smallint) + 1)
      then
      begin
        Assert(RootClass <> nil);
        ComponentClass := RootClass;
      end
      else
      begin
        if OwnerClass <> nil then
        begin
          FieldIndex := -(Low(Smallint) + Index + 2);
          Assert(OwnerClass <> nil);
          ComponentClass :=
            TComponentClass(GetFieldClassByIndex(OwnerClass, FieldIndex));
        end;
      end;
      Assert(ComponentClass <> nil);
      ClassName := ComponentClass.ClassName;
    end
    else
    begin
      if ComponentClass = nil then
      begin
        {$ifdef D6UP}
        OldGroup := ActivateClassGroup(TControl);
        try
        {$endif D6UP}
          ComponentClass := TComponentClass(GetClass(ClassName));
        {$ifdef D6UP}
        finally
          ActivateClassGroup(OldGroup);
        end;
        {$endif D6UP}

        if(ComponentClass = nil) and
          (not Assigned(DsgnGetFieldClassByIndexRoutine)) then
          ComponentClass := GetFieldClassByName(OwnerClass, ClassName);
      end;
    end;

    {$ifndef CtdNoRTLog}
    WriteToLog('ClassName: ' + ClassName);
    {$endif CtdNoRTLog}

    if ComponentClass <> nil
    then
    begin
      {$ifndef CtdNoRTLog}
      WriteToLog('ComponentClass: ' + ComponentClass.ClassName);
      {$endif CtdNoRTLog}

      Result := PTypeInfo(ComponentClass.ClassInfo);
      {$ifndef CtdNoRTLog}
      if(Index <> -1) and RunTimeLog then
      begin
        Reader.Read(DsgPropCount, SizeOf(Word));
        PropCount := GetTypeData(Result)^.PropCount;
        WriteToLog('PropCount: ' + IntToStr(PropCount));
        auxClass  := ComponentClass;
        while PropCount > DsgPropCount do
        begin
          auxClass := auxClass.ClassParent;
          PropCount := GetTypeData(PTypeInfo(auxClass.ClassInfo))^.PropCount;
        end;
        if PropCount <> DsgPropCount then
          raise Exception.Create('Citadel error: properties count for ' +
            ClassName + ' differs at design (' + IntToStr(DsgPropCount) +
            ') and runtime (' + IntToStr(PropCount) + ')');

        if IsRoot or IsInline  then
        begin
          Reader.Read(DsgFieldsCount, SizeOf(Word));
          FieldsCount := High(Smallint);
          GetFieldClassByIndex(ComponentClass, FieldsCount);
          WriteToLog('FieldsCount: ' + IntToStr(FieldsCount));
          if FieldsCount <> DsgFieldsCount then
            raise Exception.Create('Citadel error: fields count for ' +
              ClassName + ' differs at design (' + IntToStr(DsgFieldsCount) +
              ') and runtime (' + IntToStr(FieldsCount) + ')');
        end;
      end
      else
      begin
        WriteToLog('PropCount: ' + IntToStr(GetTypeData(Result)^.PropCount));
        if IsRoot or IsInline  then
        begin
          FieldsCount := High(Smallint);
          GetFieldClassByIndex(ComponentClass, FieldsCount);
          WriteToLog('FieldsCount: ' + IntToStr(FieldsCount));
        end;
      end;
      {$endif CtdNoRTLog}
    end
    {$ifndef CtdNoRTLog}
    else WriteToLog('ComponentClass unknown');
    {$else};
    {$endif CtdNoRTLog}

    Writer.WriteStr(ClassName);

    if Shortint(Reader.NextValue) < 0
    then
    begin
      ObjectName := Copy(ClassName, 2, Length(ClassName) - 1);
      Reader.Read(Size, SizeOf(Byte));
      Size := (-Size) - Length(ObjectName);
      if Size > 0 then
      begin
        SetString(aux, PChar(nil), Size);
        Reader.Read(aux[1], Size);
        ObjectName := ObjectName + aux;
      end;
    end
    else ObjectName := Reader.ReadStr;
    Writer.WriteStr(ObjectName);

    {$ifndef CtdNoRTLog}
    WriteToLog('ObjectName: ' + ObjectName);
    {$endif CtdNoRTLog}

    if IsInline then
    begin
      OwnerClass := ComponentClass;
      OwnerName  := ObjectName;

      {$ifndef CtdNoRTLog}
      WriteToLog('New Owner: ' + ObjectName);
      {$endif CtdNoRTLog}
    end;
  end;

  procedure ConvertBinary;
  const
    BufSize = 4096;
  var
    Buffer: PChar;
    N,
    Count: Integer;
  begin
    {$ifndef CtdNoRTLog}
    WriteToLog('Unpacking binary');
    {$endif CtdNoRTLog}
    TCtdWriter(Writer).WriteValue(Reader.ReadValue);
    Reader.Read(Count, SizeOf(Count));
    Writer.Write(Count, SizeOf(Count));
    GetMem(Buffer, BufSize);
    try
      while Count > 0 do
      begin
        if Count > BufSize
        then N := BufSize
        else N := Count;
        Reader.Read(Buffer^, N);
        Writer.Write(Buffer^, N);
        Dec(Count, N);
      end;
    finally
      FreeMem(Buffer);
    end;
  end;

  procedure ConvertProperty(TypeInfo: PTypeInfo;
    ObjectName, OwnerName, ClassName: String); forward;

  procedure UnpackInt(ValueType: TValueType; Value: Integer);
  begin
    case ValueType of
      vaInt8:
      begin
        {$ifndef CtdNoRTLog}
        WriteToLog('Unpacking Shortint');
        {$endif CtdNoRTLog}
        TCtdWriter(Writer).WriteValue(vaInt8);
        Writer.Write(Value, SizeOf(Shortint));
      end;
      vaInt16:
      begin
        {$ifndef CtdNoRTLog}
        WriteToLog('Unpacking Smallint');
        {$endif CtdNoRTLog}
        TCtdWriter(Writer).WriteValue(vaInt16);
        Writer.Write(Value, SizeOf(Smallint));
      end;
      vaInt32:
      begin
        {$ifndef CtdNoRTLog}
        WriteToLog('Unpacking Integer');
        {$endif CtdNoRTLog}
        TCtdWriter(Writer).WriteValue(vaInt32);
        Writer.Write(Value, SizeOf(Integer));
      end;
    end;
  end;

  procedure SetIdentInt(ValueType: TValueType; PropTypeInfo: PTypeInfo;
    const Value: Integer);
  var
    IntToIdent: TIntToIdent;
    Ident: string;
  begin
    IntToIdent := FindIntToIdent(PropTypeInfo);
    if Assigned(IntToIdent) and IntToIdent(Value, Ident)
    then
    begin
      {$ifndef CtdNoRTLog}
      WriteToLog('Ident: ' + Ident);
      {$endif CtdNoRTLog}
      Writer.WriteIdent(Ident);
    end
    else
    begin
      {$ifndef CtdNoRTLog}
      WriteToLog('Warning: can''t read identifier. Using integer value (' + IntToStr(Value) + ').');
      {$endif CtdNoRTLog}
      Writer.WriteInteger(Value);
    end;
  end;

  procedure SetSetInt(PropTypeInfo: PTypeInfo; const Value: Integer);
  var
    i: Integer;
    BaseType: PTypeInfo;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线播放一区二区三区| 欧美日韩精品三区| 欧美色视频在线| 精品1区2区在线观看| 亚洲不卡av一区二区三区| 国产成a人亚洲精| 日韩一区二区免费电影| 日韩伦理免费电影| 国产精品一区二区黑丝| 91精品国产91热久久久做人人| 国产精品毛片高清在线完整版| 久久国产人妖系列| 欧美精品丝袜中出| 亚洲一区二区精品视频| 91网页版在线| 亚洲欧洲综合另类| 成人av资源在线观看| 国产性色一区二区| 国产一区二区三区精品欧美日韩一区二区三区 | 国产精品成人在线观看| 精彩视频一区二区| 日韩三级免费观看| 久久精品国产亚洲一区二区三区| 欧美精品国产精品| 香蕉成人伊视频在线观看| 在线观看视频一区二区| 亚洲精品日产精品乱码不卡| 99久久久久免费精品国产| 国产精品色在线观看| 丁香六月久久综合狠狠色| 中文字幕精品—区二区四季| 风间由美中文字幕在线看视频国产欧美| 欧美成人午夜电影| 麻豆久久久久久久| 久久久亚洲高清| 国产精品18久久久久久久久 | 亚洲高清不卡在线| 91精品视频网| 久久99精品国产麻豆婷婷| 日韩欧美www| 国产一区在线视频| 国产精品丝袜久久久久久app| 波多野结衣中文字幕一区二区三区| 国产欧美精品一区| 91在线视频免费91| 亚洲情趣在线观看| 欧美精品久久久久久久多人混战| 日韩经典一区二区| 精品国产91久久久久久久妲己| 国产精品66部| 国产精品传媒视频| 在线播放国产精品二区一二区四区 | 最好看的中文字幕久久| 91国产成人在线| 久久精品国产一区二区三区免费看| 久久免费国产精品| 色激情天天射综合网| 日日嗨av一区二区三区四区| 亚洲精品一区二区三区香蕉 | 一区二区免费在线| 日韩一区二区在线播放| 大胆亚洲人体视频| 亚洲香肠在线观看| 久久久久一区二区三区四区| 色狠狠av一区二区三区| 美女高潮久久久| 国产精品国产精品国产专区不蜜 | 亚洲综合在线第一页| 日韩视频在线你懂得| caoporm超碰国产精品| 午夜在线成人av| 中文字幕国产精品一区二区| 欧美精品乱码久久久久久| 懂色一区二区三区免费观看| 亚洲成av人片观看| 国产精品电影一区二区三区| 91精品久久久久久久91蜜桃| 粉嫩在线一区二区三区视频| 石原莉奈在线亚洲二区| 一区在线观看视频| 久久天堂av综合合色蜜桃网| 欧美日韩精品一区二区三区| av网站免费线看精品| 久久精品99国产精品| 亚洲伦理在线精品| 国产女人aaa级久久久级| 欧美丰满高潮xxxx喷水动漫| 在线亚洲人成电影网站色www| 国产一区999| 蜜臀av一区二区在线免费观看| 亚洲日本乱码在线观看| 欧美高清在线一区二区| 久久久久久久久久久电影| 宅男在线国产精品| 欧美色视频在线观看| 在线观看av一区| 色中色一区二区| 91免费国产在线观看| av在线不卡网| 成人免费毛片app| 国产91综合网| 国产成人av电影在线播放| 狠狠色2019综合网| 久久99精品一区二区三区| 美国十次了思思久久精品导航| 亚洲一级二级三级| 亚洲制服丝袜av| 亚洲最新视频在线播放| 亚洲欧美激情插| 依依成人精品视频| 一区二区三区在线看| 亚洲一区二区精品视频| 狠狠色狠狠色综合系列| 美国一区二区三区在线播放| 久久成人18免费观看| 久久99国内精品| 国产乱码精品一区二区三区五月婷| 日本麻豆一区二区三区视频| 日本在线播放一区二区三区| 蜜桃一区二区三区在线| 狠狠色2019综合网| 国产成+人+日韩+欧美+亚洲 | 久久精品99国产国产精| 国产一区二区三区不卡在线观看 | 久久这里只精品最新地址| 久久久亚洲国产美女国产盗摄| 久久久久久毛片| 欧美激情一二三区| 亚洲人成人一区二区在线观看| 亚洲一区二区欧美日韩| 久久精品国产一区二区三| 福利91精品一区二区三区| 91香蕉视频mp4| 欧美一区二区播放| 久久精品人人做| 一区二区三区日韩| 蜜桃传媒麻豆第一区在线观看| 国产一区二区三区国产| 色综合久久66| 精品日韩欧美在线| 亚洲欧洲在线观看av| 偷拍自拍另类欧美| 国产成人aaa| 884aa四虎影成人精品一区| 久久一日本道色综合| 一区二区不卡在线视频 午夜欧美不卡在| 日韩成人av影视| 成人黄色电影在线 | 麻豆高清免费国产一区| 懂色av一区二区在线播放| 欧美视频在线播放| 国产亚洲欧美日韩俺去了| 亚洲一区影音先锋| 国产福利一区在线| 欧美无砖砖区免费| 国产午夜精品久久久久久久| 亚洲午夜国产一区99re久久| 精品一区二区在线免费观看| 在线亚洲一区观看| 国产欧美综合色| 日韩av网站在线观看| 91蝌蚪国产九色| 久久精品人人做人人综合 | 粉嫩欧美一区二区三区高清影视| 欧美性猛交xxxx乱大交退制版| 国产喂奶挤奶一区二区三区| 日精品一区二区三区| 色嗨嗨av一区二区三区| 中文字幕第一页久久| 激情六月婷婷综合| 欧美精品日韩综合在线| 亚洲激情欧美激情| 懂色av中文字幕一区二区三区| 精品三级av在线| 青青草视频一区| 欧美日韩国产美| 一区二区在线观看不卡| 精品福利一二区| 亚洲国产一区二区视频| 色婷婷亚洲一区二区三区| 国产精品欧美经典| 成人免费视频网站在线观看| 精品久久人人做人人爽| 老鸭窝一区二区久久精品| 在线成人小视频| 日韩精品成人一区二区三区| 欧美精品自拍偷拍动漫精品| 亚洲6080在线| 欧美日韩高清一区二区三区| 亚洲午夜电影在线| 欧美日韩精品一区二区在线播放| 亚洲一区二区视频在线观看| 色婷婷亚洲一区二区三区| 亚洲三级电影网站| 色悠久久久久综合欧美99| 中文字幕成人在线观看| 99久久精品国产毛片| 亚洲欧美国产三级| 欧美日韩在线直播| 奇米777欧美一区二区|