"Integral file" - russian GIS file format(INF.rfi):
Class: GIS files, Status: Complete, Last change: 16.11.2001 13:22:10

type

TSign array[3] of char

data
0x0000 TSign Sign
0x0003 Byte SignZ

assert (Sign='INF')and(SignZ=0);

descr ('The Integral file - format of Russian GIS.')
descr (NL,
  'Info Src: VS AGP doc. INT_RAS2.DOC',NL)

type

TInfHead struc pas
  BaseName: array[41] of Char,0;
  KlsName: array[13] of Char,0;
  FileCreationDate: array[11] of Char,0;
  FileCreationTime: array[9] of Char,0;
  Xmin: Int
  Ymin: Int
  Xmax: Int
  Ymax: Int
  NumbKVX: Int
  NumbKVY: Int
  SizeKVX: Word
  SizeKVY: Word
  NumbKVAll: Word
ends

type

TRecTag enum int (
  Obj=777
)

TObjCode array[9] of int,0;:displ=(ShowArray(@,(@,'.')))

TObjectRec(N) forward

PObjectRec(N,Base) ^TObjectRec(@:N) near=ulong REF=@*2+@:Base;

TLogSObj set 32 of (//Tþóø¢õ¸úð  °úðûð þñ·õúªð 
  Lin=0, //Tøýõùývù
  Area=1, //¦ûþ•ðôývù      
  Discr=2, //-ø¸úpõªývù     
  Compos=3, //Tþ¸ªðòýþù
  Compl=4, //Tûþöývù
  Closed=5, //¦ðüúýºªvù      
  Strait=6, //¦º¸þ¢ýþ-ÿ¨ üð  
  Arc=7, //Tøýø  þúpºöýþ
  Part=9, //+𸪹 ôpºóþóþ  
  Hole=10, //Týºªpõýýøù úþ  
  Link=11, //Tò ÷ø òvýõ¸õý
  MultyLink=12, //¦ýþóþ¸ò ÷ývù   
  Cut=13, //¦ð÷¨õ÷ðýývù    
  Bit15=15, //+ð¸ªþ ò¸ª¨õ¢ðûþ¸¹
  URRMtr=18 //¦õªpøúð ò L¦¦  
)

TLogSIntr set 32 of (//Tþóø¢õ¸úð  °úðûð ÿpõpvòðýø 
  Lin=0, //Tøýõùývù
  Area=1, //¦ûþ•ðôývù      
  Discr=2, //-ø¸úpõªývù     
  NotAllowed=3, //=õ ôþÿº¸úðõª
  FullDesc=4, //¦þûýþõ þÿø¸ðý  
  Straight=6, //¦º¸þ¢ýþ-ÿ¨ üð  
  Arc=7, //Tøýø  þúpºöýþ
  Dir=8, //=ðÿpðòûõýøõ ¡
  Sem=9, //Tõüðýªø¢õ¸úþõ  
  FixP=10, //=õÿþôòøöýð  ª
  SignChg=11, //Tüõýð ªþÿþ÷ýð
  MtrImp=12, //¦õª¨øúð ÷ðøü¸  
  StrucEl=13, //¦ûõüõýª ¸ª¨ºú  
  MtrOn=14, //¦õª¨øúð òúû¦¢  
  MtrImp1=15, //¦õªpøúð ÷ðøü¸
  PrecCoord=16, //Tþ¢ývõ úþþ¨ôø  
  PointChg=17, //¦ðüõýð ýð ªþ¢  
  MtrImp2=18, //¦õªpøúð ÷ðøü¸  
  Rel=29 //+ªýþ°õýøõ põð
)

TFeatureType enum byte (
  ftInt=1,  // int
  ftDouble=2, // double
  ftFixed=3, //ôõù¸ªòøªõû¹ýþõ ¢ø¸ûþ ò òøôõ ôòº¿ ¡õûv¿ ¢ø¸õû
  ftText=4,  //ªõú¸ª (1-ù ñðùª - úþûø¢õ¸ªòþ ¸øüòþûþò,
             //þ¸ªðû¹ývõ - ¸øüòþûv ò úþôõ ASCII. Tõú¸ª
             //÷ðýøüðõª ÿþûýþõ úþûø¢õ¸ªòþ ¸ûþò)
  ftStrucNum=5,//¸ª¨ºúªº¨ýþõ ¢ø¸ûþ - üð¸¸øò (1-õ ¸ûþòþ -
               //úþûø¢õ¸ªòþ ¸ûþò ò ¢ø¸ûõ, þ¸ªðû¹ývõ -
               //¸ûþò𠸪¨ºúªº¨ýþóþ ¢ø¸ûð)
  ftFloat= 6, // float
  ftNull=7, // ñõ÷ ÷ýð¢õýø 
  ftCoord=8, //óõþó¨ð¯ø¢õ¸úð  úþþ¨ôøýðªð - 8 ñðùª (1-õ
             //¸ûþòþ - ó¨ðôº¸v (int), 2-õ ¸ûþòþ - üøýºªv
             //(int), 3 ø 4-õ ¸ûþòð - ¸õúºýôv (float))
  ftComplex=10 //¨ð÷þñ¨ðýð  ¸ûþöýð  ¿ð¨ðúªõ¨ø¸ªøúð 
)

/*
TFeatCode struc
  byte X //??? =õÿþý ªýþóþ ýð÷ýð¢õýø 
  byte CodeCnt
  array[((@.CodeCnt-1)when(@.CodeCnt>0))exc 0]of byte:displ=(ShowArray(@,(INT(@),'.'))) Code
  align 2 AlCode
ends
*/

//-¨ºóþõ þÿ¨õôõûõýøõ, ¢ªþñv ÿ¨ðòøû¹ýþ þªþñ¨ðö𪹠÷ýð¢õýø  
// ¸ ÿõ¨õÿºªðýývü ÿþ¨ ôúþü ñðùª
TFeatCode struc
  word CntAnd1
  array[@.CntAnd1 shr 9]of Word Code
ends:displ=(Int(@.CntAnd1 shr 8),':',Int(@.CntAnd1 and 0xFF),'.',
  ShowArray(@.Code,(INT(@ shr 8),'.',INT(@ and 0xFF),'.')))

type bit
  TBit1 num+(1)
  TBit8 num+(8)
  TBit11 num+(11)
  TBit20 num+(20)
  TBit23 num+(23)
  TDoubleHi struc
    TBit20 M
    TBit11 P
    TBit1 S //Sign 1->Neg
  ends

  TFloat struc
    TBit23 M
    TBit8 P
    TBit1 S //Sign 1->Neg
  ends: displ=(@.S,' 1.',HEX(@.M*2,6),'*2^',INT(@.P-0x7F));

type
  TDouble struc
    ulong Lo
    TDoubleHi Hi
  ends: displ=(@.Hi.S,' 1.',HEX(@.Hi.M,5),HEX(@.Lo,8),'*2^',INT(@.Hi.P-0x3FF));

  TFixed struc
    int Hi
    word Lo
  ends: displ=(INT(@.Hi),'.',HEX(@.Lo))

  TText struc
    str V
    align 2 Al
  ends

  TStrucNum struc
    int Cnt
    array[@.Cnt/*??? - øûø -1*/] of int:displ=(ShowArray(@,(@,'.'))) V
  ends

  TGeoCoord struc
    int Deg //1-õ ¸ûþòþ - ó¨ðôº¸v (int)
    int Min //2-õ ¸ûþòþ - üøýºªv (int)
    TFloat Sec //3 ø 4-õ ¸ûþòð - ¸õúºýôv (float))
  ends
  
  TMCoord struc
   // int X
   // int Y
    word X
    word Y
  ends

/*
  TComplexFeatVal struc
    word Sz
    raw[] VRest
  ends:[@:Size=(@.Sz+1)*2]
*/

type

TFeatures forward

TFeature struc
  word LX //¨ð÷üõ¨ ¿ð¨ðúªõ¨ø¸ªøúø ò ¸ûþòð¿
  byte T //úþûø¢õ¸ªòþ ªþ¢õú ÿ¨øò ÷úø (0,1,2,3)
  TFeatureType ITP //ªøÿ ¿ð¨ðúªõ¨ø¸ªøúø :
  TFeatCode Code
  case @.ITP of
    ftInt: int
    ftDouble: TDouble
    ftFixed: TFixed
    ftText: TText
    ftStrucNum: TStrucNum
    ftFloat: TFloat
    ftNull: void
    ftCoord: TGeoCoord
    ftComplex: TFeatures//TComplexFeatVal
  endc V //(i+1) - l -  ÷ýð¢õýøõ ¿ð¨ðúªõ¨ø¸ªøúø (õ¸ûø þýþ õ¸ª¹)
  array[@.T]of TMCoord LP //(l+1) - n -  úþþ¨ôøýðªv ªþ¢õú ÿ¨øò ÷úø (õ¸ûø þýø õ¸ª¹)
  raw[] rest
ends:[@:Size=@.LX*2] //:assert[@.LX>0]

/*
TFeatureX try
  F: TFeature
  Z: word
endt
*/

PFeatures(Base) ^TFeatures near=word REF=@*2+@:Base;
TFeatures struc
  word LX //¨ð÷üõ¨ ÿþû  ¿ð¨ðúªõ¨ø¸ªøú ò ¤ûõüõýªð¿ üð¸¸øòð
          // (¸ðü ýºûõòþù ¤ûõüõýª ýõ ò¿þôøª ò ¤ªþª ¨ð÷üõ¨)
  array of TFeature:[@:Size=@@.LX*2] Tbl
ends

PLinks(Base) ^TLinks near=word REF=@*2+@:Base;

TLink struc
  word LS  //O - ¨ð÷üõ¨ ¸ò ÷ø ò ¤ûõüõýªð¿ üð¸¸øòð (¸ðü LS º¢øªvòðõª¸ )
  int KLS //1 - úû¦¢ ¸ò ÷ø, ÿþô úþªþ¨vü þýð ÷ðÿø¸vòðõª¸  ò
          // ñð÷º ôðýýv¿ ø ÿþ úþªþ¨þüº ò ôðû¹ýõù°õü ôþ
          // ýõõ üþöýþ ñv¸ª¨þ ôþñ¨ðª¹¸  (1 - 32767). +¸ûø
          // KLS=0, ªþ ¸ò ÷¹ ýõ º¢ð¸ªòºõª ò þÿõpð¡ø ¿ ÷ðÿø¸ø ø ºôðûõýø 
  TObjCode Code //2 - 10 - úþô ¸ò ÷ðýýþóþ þñ¹õúªð
  int Num //11 - ýþüõ¨ ¸ò ÷ðýýþóþ þñ¹õúªð
  int Rsrv//12 - ò¸õóôð 0
  ulong LogS //13,14 - ûþóø¢õ¸úð  °úðûð ¸ò ÷ø
  TFeatures LSF //15 - ÿþûõ ¿ð¨ðúªõ¨ø¸ªøú, õ¸ûø þýþ õ¸ª¹, øûø 0 ò ¤ûõü.15
ends:[@:Size=@.LS*2]

TLinks struc
  word KS // O - úþûø¢õ¸ªòþ ¸ò ÷õù
  array[@.KS] of TLink Tbl // 1-¸þòþúºÿýþ¸ª¹ ¸ò ÷õù þñ¹õúªð
ends

PIntrs(Base) ^TIntrs near=word REF=@*2+@:Base;

TIntr struc
  word LP  //O - ¨ð÷üõ¨ ÿ¨õ¨vòðýø  ò ¤ûõüõýªð¿ üð¸¸øòð (¸ðü LP º¢øªvòðõª¸ )
  int KLP //1 - úû¦¢ ÿ¨õ¨vòðýø , ÿþô úþªþ¨vü þýþ ÷ðÿø¸vòðõª¸  ò ñð÷º ôðýýv¿
          // (1 - 32767) . õ¸ûø 0, ªþ ÿpõpvòðýøõ ýõ º¢ð¸ªòºõª ò þÿõpð¡ø ¿
          // ÷ðÿø¸ø ø ºôðûõýø  ø ÿþ úþªþ¨þüº ò ôðû¹ýõù°õü
          // ôþ ýõóþ üþöýþ ñv¸ª¨þ ôþñ¨ðª¹¸ 
  TObjCode Code //2 - 10 - úþô ÿ¨õ¨vòð¦•õóþ þñ¹õúªð
  int Num //11 - ýþüõ¨ ÿ¨õ¨vòð¦•õóþ þñ¹õúªð
  int hRefP //12 - ýþüõ¨ ªþ¢úø ò üõª¨øúõ þñ¹õúªð, ú úþªþ¨þù
            // ÿ¨øò ÷ðýþ ÿ¨õ¨vòðýøõ, øûø 0
  TLogSIntr LogS //13,14 - ûþóø¢õ¸úð  °úðûð ÿ¨õ¨vòðýø 
  TFeatures LP //15 - ÿþûõ ¿ð¨ðúªõ¨ø¸ªøú, õ¸ûø þýþ õ¸ª¹, øûø 0 ò ¤ûõü.15
ends:[@:Size=@.LP*2]

TIntrs struc
  word KP // O - úþûø¢õ¸ªòþ ÿ¨õ¨vòðýøù
  array[@.KP] of TIntr Tbl // 1-¸þòþúºÿýþ¸ª¹ ÿ¨õ¨vòðýøù þñ¹õúªð
ends

PMetrics(Base) ^TMetrics near=word REF=@*2+@:Base;
TMetrics struc
  word KM // úþûø¢õ¸ªòþ ¤ûõüõýªþò ÿþ 4  ñðùªð ò ÿþûõ ñõ÷
          // º¢õªð ¸ðüþóþ KM
  array[@.KM] of TMCoord Tbl
    // ªþ¢úø üõªpøúø,  úþªþ¨võ  ÷ðô𦪸   ÿð¨þù
    // úþþ¨ôøý𪠿 ø º, ÷ðýøüð¦•ø¿ ÿþ þôýþüº ¸ûþòº
    // ø òv¨ðöõýýv¿ ¡õûvüø ¢ø¸ûðüø ò ôõ¸ ªv¿ ôþû ¿ üøûûøüõª¨ð.
ends

PSquares(Base) ^TSquares near=word REF=@*2+@:Base;
TSquares struc //T úðúøõ úòðô¨ðªv ÿþÿðôðõª þñ·õúª
  word KK // úþûø¢õ¸ªòþ úòðô¨ðªþò (¤ûõüõýªþò ÿþ 4 ñðùªð)
  array[@.KK] of TMCoord Tbl //¸þòþúºÿýþ¸ª¹ ¤ûõüõýªþò ÿþ 4 ñðùªð 
   //(ýþüõ¨ð úòðô¨ðªþò)
ends

TObjectHdr(N) struc
  TRecTag Tag //0 - üõªúð øýªõó¨ðû¹ýþóþ ¯ðùûð (¢ø¸ûþ 777)
  PFeatures(&@) AX  //1 - ýþüõ¨ ¤ûõüõýªð ò üð¸¸øòõ, ¸ úþªþ¨þóþ
           //ýð¢øýðõª¸  ÿþûõ ¿ð¨ðúªõ¨ø¸ªøú
  PLinks(&@) AS  //2 - ýþüõ¨ ¤ûõüõýªð ò üð¸¸øòõ, ¸ úþªþ¨þóþ
           //ýð¢øýðõª¸  ÿþûõ ¸ò ÷õù
  PIntrs(&@) AP  //3 - ýþüõ¨ ¤ûõüõýªð ò üð¸¸øòõ, ¸ úþªþ¨þóþ
           //ýð¢øýðõª¸  ÿþûõ ÿ¨õ¨vòðýøù
  PSquares(&@) AK  //4 - ýþüõ¨ ¤ûõüõýªð ò üð¸¸øòõ, ¸ úþªþ¨þóþ
           //ýð¢øýðõª¸  ÿþûõ úòðô¨ðªþò
  PMetrics(&@) AM  //5 - ýþüõ¨ ¤ûõüõýªð ò üð¸¸øòõ, ¸ úþªþ¨þóþ
           //ýð¢øýðõª¸  ÿþûõ üõª¨øúø
  int AccLvl //6 - º¨þòõý¹ ôþ¸ªºÿð ú þñ¹õúªº (û¦ñþõ ¢ø¸ûþ þª
           // -32768 ôþ +32767). ¦þû¹÷þòðªõû¹, ºúð÷ðò°øù
           // ÿ¨ø ¢ªõýøø º¨þòõý¹ ôþ¸ªºÿð ýøöõ ÷ðÿø¸ðýýþóþ
           //ò þñ¹õúªõ, ýõ ¸üþöõª õóþ ÿ¨þ¢øªðª¹
  TObjCode Code //7-15 - úþô þñ¹õúªð
  int Num //16 - ýþüõ¨ þñ¹õúªð (> 0 ø <=32767)
  TLogSObj LogS //17,18 - ûþóø¢õ¸úð  °úðûð þñ¹õúªð
  PObjectRec(@:N+1,&@) Size //19,20 - ¨õ÷õ¨ò
//  ulong Size //19,20 - ¨õ÷õ¨ò
//  raw[] at &@; rest
ends:assert[@.Tag=TRecTag.Obj] //:[@:Size=@.Size*2]

TObjectRec(N) try
  H: TObjectHdr(@:N)
  Els: void
endt:autoname=('obj_',INT(@:N))

//TObjectTbl array of TObjectHdr ?@.Tag<>TrecTag.Obj!void;

data
0x04 TInfHead Hdr
//0x60 TObjectTbl ObjTbl
0x60 TObjectRec(0) Obj0


Other specifications.


FlexT home page, Author`s home page.