⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 disasm.c

📁 这个是Linux的qt源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
      Dump_GSUB_Lookup_ContextSubst2 (&ContextSubst->csf.csf2, stream, indent+2, is_gsub);      break;  case 3:      Dump_GSUB_Lookup_ContextSubst3 (&ContextSubst->csf.csf3, stream, indent+2, is_gsub);      break;  default:      printf("invalid subformat!!!!!\n");  }}static voidDump_GSUB_Lookup_ChainSubst1 (TTO_ChainContextSubstFormat1 *csf, FILE *stream, int indent, FT_Bool is_gsub){    DUMP("Not implemented!!!\n");}static voidDump_GSUB_Lookup_ChainSubst2 (TTO_ChainContextSubstFormat2 *csf, FILE *stream, int indent, FT_Bool is_gsub){    int i;    RECURSE (Coverage, Coverage, &csf->Coverage);    DUMP_FUINT( csf, MaxBacktrackLength );    RECURSE( ClassDefinition, ClassDefinition, &csf->BacktrackClassDef );    DUMP_FUINT( csf, MaxInputLength );    RECURSE( ClassDefinition, ClassDefinition, &csf->InputClassDef );    DUMP_FUINT( csf, MaxLookaheadLength );    RECURSE( ClassDefinition, ClassDefinition, &csf->LookaheadClassDef );    DUMP_FUINT( csf, ChainSubClassSetCount );    for ( i = 0; i < csf->ChainSubClassSetCount; i++ )	RECURSE( ChainSubClassSet, ChainSubClassSet, &csf->ChainSubClassSet[i] );}static voidDump_GSUB_Lookup_ChainSubst3 (TTO_ChainContextSubstFormat3 *csf, FILE *stream, int indent, FT_Bool is_gsub){    DUMP("Not implemented!!!\n");}static voidDump_GSUB_Lookup_Chain (TTO_SubTable *subtable, FILE *stream, int indent, FT_Bool is_gsub){  int i;  TTO_ChainContextSubst *chain = &subtable->st.gsub.chain;  DUMP_FUINT (chain, SubstFormat);  switch( chain->SubstFormat ) {  case 1:      Dump_GSUB_Lookup_ChainSubst1 (&chain->ccsf.ccsf1, stream, indent+2, is_gsub);      break;  case 2:      Dump_GSUB_Lookup_ChainSubst2 (&chain->ccsf.ccsf2, stream, indent+2, is_gsub);      break;  case 3:      Dump_GSUB_Lookup_ChainSubst3 (&chain->ccsf.ccsf3, stream, indent+2, is_gsub);      break;  default:      printf("invalid subformat!!!!!\n");  }}static voidDump_Device (TTO_Device *Device, FILE *stream, int indent, FT_Bool is_gsub){  int i;  int bits = 0;  int n_per;  unsigned int mask;  DUMP_FUINT (Device, StartSize);  DUMP_FUINT (Device, EndSize);  DUMP_FUINT (Device, DeltaFormat);  switch (Device->DeltaFormat)    {    case 1:      bits = 2;      break;    case 2:      bits = 4;      break;    case 3:      bits = 8;      break;    }  n_per = 16 / bits;  mask = (1 << bits) - 1;  mask = mask << (16 - bits);  DUMP ("<DeltaValue>");  for (i = Device->StartSize; i <= Device->EndSize ; i++)    {      FT_UShort val = Device->DeltaValue[i / n_per];      FT_Short signed_val = ((val << ((i % n_per) * bits)) & mask);      dump (stream, indent, "%d", signed_val >> (16 - bits));      if (i != Device->EndSize)	DUMP (", ");    }  DUMP ("</DeltaValue>\n");}static voidDump_ValueRecord (TTO_ValueRecord *ValueRecord, FILE *stream, int indent, FT_Bool is_gsub, FT_UShort value_format){  if (value_format & HAVE_X_PLACEMENT)    DUMP_FINT (ValueRecord, XPlacement);  if (value_format & HAVE_Y_PLACEMENT)    DUMP_FINT (ValueRecord, YPlacement);  if (value_format & HAVE_X_ADVANCE)    DUMP_FINT (ValueRecord, XAdvance);  if (value_format & HAVE_Y_ADVANCE)    DUMP_FINT (ValueRecord, XAdvance);  if (value_format & HAVE_X_PLACEMENT_DEVICE)    RECURSE (Device, Device, &ValueRecord->XPlacementDevice);  if (value_format & HAVE_Y_PLACEMENT_DEVICE)    RECURSE (Device, Device, &ValueRecord->YPlacementDevice);  if (value_format & HAVE_X_ADVANCE_DEVICE)    RECURSE (Device, Device, &ValueRecord->XAdvanceDevice);  if (value_format & HAVE_Y_ADVANCE_DEVICE)    RECURSE (Device, Device, &ValueRecord->YAdvanceDevice);  if (value_format & HAVE_X_ID_PLACEMENT)    DUMP_FUINT (ValueRecord, XIdPlacement);  if (value_format & HAVE_Y_ID_PLACEMENT)    DUMP_FUINT (ValueRecord, YIdPlacement);  if (value_format & HAVE_X_ID_ADVANCE)    DUMP_FUINT (ValueRecord, XIdAdvance);  if (value_format & HAVE_Y_ID_ADVANCE)    DUMP_FUINT (ValueRecord, XIdAdvance);}static voidDump_GPOS_Lookup_Single (TTO_SubTable *subtable, FILE *stream, int indent, FT_Bool is_gsub){  TTO_SinglePos *SinglePos = &subtable->st.gpos.single;  DUMP_FUINT (SinglePos, PosFormat);  RECURSE (Coverage, Coverage, &SinglePos->Coverage);  DUMP_FUINT (SinglePos, ValueFormat);  if (SinglePos->PosFormat == 1)    {      DUMP_VALUE_RECORD (&SinglePos->spf.spf1.Value, SinglePos->ValueFormat);    }  else    {      int i;      DUMP_FUINT (&SinglePos->spf.spf2, ValueCount);      for (i = 0; i < SinglePos->spf.spf2.ValueCount; i++)	DUMP_VALUE_RECORD (&SinglePos->spf.spf2.Value[i], SinglePos->ValueFormat);    }}static voidDump_PairValueRecord (TTO_PairValueRecord *PairValueRecord, FILE *stream, int indent, FT_Bool is_gsub, FT_UShort ValueFormat1, FT_UShort ValueFormat2){  DUMP_FUINT (PairValueRecord, SecondGlyph);  DUMP_VALUE_RECORD (&PairValueRecord->Value1, ValueFormat1);  DUMP_VALUE_RECORD (&PairValueRecord->Value2, ValueFormat2);}static voidDump_PairSet (TTO_PairSet *PairSet, FILE *stream, int indent, FT_Bool is_gsub, FT_UShort ValueFormat1, FT_UShort ValueFormat2){  int i;  DUMP_FUINT (PairSet, PairValueCount);  for (i = 0; i < PairSet->PairValueCount; i++)    {      DUMP ("<PairValueRecord>\n");      Dump_PairValueRecord (&PairSet->PairValueRecord[i], stream, indent + 1, is_gsub, ValueFormat1, ValueFormat2);      DUMP ("</PairValueRecord>\n");    }}static voidDump_GPOS_Lookup_Pair (TTO_SubTable *subtable, FILE *stream, int indent, FT_Bool is_gsub){  TTO_PairPos *PairPos = &subtable->st.gpos.pair;  DUMP_FUINT (PairPos, PosFormat);  RECURSE (Coverage, Coverage, &PairPos->Coverage);  DUMP_FUINT (PairPos, ValueFormat1);  DUMP_FUINT (PairPos, ValueFormat2);  if (PairPos->PosFormat == 1)    {      int i;      DUMP_FUINT (&PairPos->ppf.ppf1, PairSetCount);      for (i = 0; i < PairPos->ppf.ppf1.PairSetCount; i++)	{	  DUMP ("<PairSet>\n");	  Dump_PairSet (&PairPos->ppf.ppf1.PairSet[i], stream, indent + 1, is_gsub, PairPos->ValueFormat1, PairPos->ValueFormat2);	  DUMP ("</PairSet>\n");	}    }  else    {    }}static voidDump_GPOS_Lookup_Markbase (TTO_SubTable *subtable, FILE *stream, int indent, FT_Bool is_gsub){    int i;    TTO_MarkBasePos *markbase = &subtable->st.gpos.markbase;    DUMP_FUINT( markbase, PosFormat );    RECURSE( Coverage, Coverage, &markbase->MarkCoverage );    RECURSE( Coverage, Coverage, &markbase->BaseCoverage );    DUMP_FUINT( markbase, ClassCount );    RECURSE( MarkArray, MarkArray, &markbase->MarkArray );    DUMP("<BaseArray>\n");    indent++;    for ( i = 0; i < markbase->BaseArray.BaseCount; i++ ) {	int j;	TTO_BaseRecord *r = &markbase->BaseArray.BaseRecord[i];	DUMP("<BaseRecord> <!-- %d -->\n",  i);	for ( j = 0; j < markbase->ClassCount; j++ ) {	    DUMP("   <Anchor>%d</Anchor>\n", r->BaseAnchor->PosFormat );	}	DUMP("<BaseRecord>\n" );    }    indent--;    DUMP("</BaseArray>\n");}DEF_DUMP (Lookup){  int i;  const char *lookup_name = NULL;  void (*lookup_func) (TTO_SubTable *subtable, FILE *stream, int indent, FT_Bool is_gsub) = NULL;  if (is_gsub)    {      switch (Lookup->LookupType)	{	case  GSUB_LOOKUP_SINGLE:	  lookup_name = "SINGLE";	  lookup_func = Dump_GSUB_Lookup_Single;	  break;	case  GSUB_LOOKUP_MULTIPLE:	  lookup_name = "MULTIPLE";	  break;	case  GSUB_LOOKUP_ALTERNATE:	  lookup_name = "ALTERNATE";	  break;	case  GSUB_LOOKUP_LIGATURE:	  lookup_name = "LIGATURE";	  lookup_func = Dump_GSUB_Lookup_Ligature;	  break;	case  GSUB_LOOKUP_CONTEXT:	  lookup_name = "CONTEXT";	  lookup_func = Dump_GSUB_Lookup_Context;	  break;	case  GSUB_LOOKUP_CHAIN:	  lookup_name = "CHAIN";	  lookup_func = Dump_GSUB_Lookup_Chain;	  break;	}    }  else    {      switch (Lookup->LookupType)	{	case GPOS_LOOKUP_SINGLE:	  lookup_name = "SINGLE";	  lookup_func = Dump_GPOS_Lookup_Single;	  break;	case GPOS_LOOKUP_PAIR:	  lookup_name = "PAIR";	  lookup_func = Dump_GPOS_Lookup_Pair;	  break;	case GPOS_LOOKUP_CURSIVE:	  lookup_name = "CURSIVE";	  break;	case GPOS_LOOKUP_MARKBASE:	  lookup_name = "MARKBASE";	  lookup_func = Dump_GPOS_Lookup_Markbase;	  break;	case GPOS_LOOKUP_MARKLIG:	  lookup_name = "MARKLIG";	  break;	case GPOS_LOOKUP_MARKMARK:	  lookup_name = "MARKMARK";	  break;	case GPOS_LOOKUP_CONTEXT:	  lookup_name = "CONTEXT";	  break;	case GPOS_LOOKUP_CHAIN:	  lookup_name = "CHAIN";	  break;	}    }  DUMP("<LookupType>%s</LookupType>\n", lookup_name);  for (i=0; i < Lookup->SubTableCount; i++)    {      DUMP ("<Subtable>\n");      if (lookup_func)	(*lookup_func) (&Lookup->SubTable[i], stream, indent + 1, is_gsub);      DUMP ("</Subtable>\n");    }}DEF_DUMP (LookupList){  int i;  DUMP_FUINT (LookupList, LookupCount);  for (i=0; i < LookupList->LookupCount; i++)    RECURSE_NUM (Lookup, i, Lookup, &LookupList->Lookup[i]);}voidTT_Dump_GSUB_Table (TTO_GSUB gsub, FILE *stream){  int indent = 0;  FT_Bool is_gsub = 1;  RECURSE (ScriptList, ScriptList, &gsub->ScriptList);  RECURSE (FeatureList, FeatureList, &gsub->FeatureList);  RECURSE (LookupList, LookupList, &gsub->LookupList);}voidTT_Dump_GPOS_Table (TTO_GPOS gpos, FILE *stream){  int indent = 0;  FT_Bool is_gsub = 0;  RECURSE (ScriptList, ScriptList, &gpos->ScriptList);  RECURSE (FeatureList, FeatureList, &gpos->FeatureList);  RECURSE (LookupList, LookupList, &gpos->LookupList);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -