%recordformatspec Filefm
%recordformatspec Fragmentfm

%recordformat Dlinefm(%integer Line, Ca, %record(DlineFm)%name Link)

%recordformat Filefm(%record(Fragmentfm)%name Frag,
                     %integer                 Disp, Padding, Size, N,
                     %string(255)%name        File,
                     %record(Filefm)%name     Flink, Link)

%recordformat Arrayfm(%integer Total, Type, Lower, Upper)

%recordformat Dvarfm(%integer              Type, Class,
                     %integer              Source Pos, Offset, Size,
                     %record(Arrayfm)%name Array,
                     %record(Dvarfm)%name  Link,
                     %string(255)%name     Ident)

%recordformat Dformatfm(%integer                Bytes, Disp, Fields, Size,
                        %record(Dvarfm)%name    Vars,
                        %record(Dformatfm)%name Link)

%recordformat DformatPfm(%record(Dformatfm)%name F)

%recordformat Fragmentfm(%record(Fragmentfm)%name Link,
                         %integer                 Code, Codesize,
                         %integer                 From, To,
                         %integer                 Size, Padding,
                         %record(Dlinefm)%name    Lines)

%recordformat Preturnfm(%integer Ca, %record(Preturnfm)%name Link)

%recordformat Procedurefm(%integer                  Type, Args,
                          %integer                  Startpos, Endpos, Enditem,
                          %integer                  Nreturns,
                          %record(Preturnfm)%name   Return,
                          %record(Blockfm)%name     Proc,
                          %record(Filefm)%name      Startfile, Endfile,
                          %record(Dvarfm)%name      Vars,
                          %record(Procedurefm)%name Inner, Next,
                          %record(Dformatfm)%name   Formats, 
                          %string(255)%name         Name)

%constrecord(Filefm)     %name FilefmType      == 0
%constrecord(Dlinefm)    %name DlinefmType     == 0
%constrecord(Fragmentfm) %name FragmentfmType  == 0
%constrecord(Procedurefm)%name ProcedurefmType == 0
%constrecord(Preturnfm)  %name PreturnfmType   == 0
%constrecord(Dvarfm)     %name DvarfmType      == 0
%constrecord(Arrayfm)    %name ArrayfmType     == 0
%constrecord(Dformatfm)  %name DformatfmType   == 0
