FYBA
A Storage System for Geo Data in SOSI format.
Last updated: 2014-08-24 by rubund. Translated from the norwegian version dated 2013-10-09

# 1 Introduction

FYBA is a library to handle searching, reading and updating of SOSI-files. FYBA is now compatible with the SOSI-format versjon 4.0, and will be adapted to newer SOSI-versions.
This user manual is made for people who are familiar with SOSI and C-programming. All functions and constants are defined in the file FYBA.H. This file should therefore be included in all files which use the FYBA-functions.
FYBA is written in ANSI C and it should therefore be possible to compile it in all platforms where there is a suitable compiler. There are however some helper functions that are architecture-dependent. These functions were separated into a separate library (UT) and must be adapted to the architecture. They have been tested in DOS, OS/2-16, OS/2-32, Win16, Win32, X64 and various UNIX varieties (POSIX, HPUX, Silicon graphics).

# 2 Overview of the Functionality of FYBA

FYBA is a library that establishes and maintains "index-files" (.IDX) with the necessary information for reading, writing, searching and manipulation of data in SOSI files. As an overview, the following figure can explain the relationship between the SOSI-files, the library and programs linked with the library.

#

##

##

##

##

                             !---------------!
           !---------------->!  Index-files  !<-------!
           !                 !---------------!        !
           !                        ^                 !
           !                        !                 !
           !                    !---!-----!           !   !-----------------!
           !                    !         !           !-->!                 !
           !                    ! Buffer  !               !                 !
    !------!------!  LC_Rxxxx   !         !  LC_PutXxx    ! User-program    !
    ! SOSI-file(s)!<----------- !internal !<------------- !                 !
    !             ! ----------->!         !               !                 !
    !-------------!  LC_Wxxxx   ! in      ! ------------->!                 !
                                !         !  LC_GetXxx    !                 !
                                ! the FYBA!               !                 !
                                !         !               !                 !
                                ! routines!               !-----------------!
                                !         !
                                !---------!

    3 The Internal Workings of the Index System

    The index system consists of a bunch of tables. These are partly kept in RAM, and
    partly as files on the hard drive.

    Below, there is a drawing of these tables.
    This is only for your information. It is not necessary to know them in detail to be able
    to use the library:

    Group table
    Group table
    This is the main table with the information about every single group in the SOSI file.

    !------------------------------:-----------------------------------------------*
    !Start  !Start !Ant.   !Ant.   !            Gruppeinnhold                      !
    ! på    ! i    !tegn   !tegn   !-----------------------------------------------!
    !SOSI-  ! RB   !GINFO- !PINFO- !Gruppe!ant. !ant. !Kvali-  !Enhet ! Div. info  !
    !fil    !      !buffer !buffer !navn  !GINFO! NØ  ! tet    !      ! (bit def.) !
    !-------!------!-------!-------!------!-----!-----!--------!------!------------!
    !sosi_st!rb_st !ulGiLen!ulPiLen!gnavn !ngi  !nko  !Kvalitet!dEnhet! info       !
    !  n64  ! n64  !  ul   !  ul   ! s    !  s  ! l   ! struct !  d   ! us         !
    !       !      !       !       !      !     !     !        !      !0=i         !
    !       !      !       !       !      !     !     !        !      !1=H         !
    !       !      !       !       !      !     !     !        !      !2=KP        !
    !       !      !       !       !      !     !     !        !      !3=REF       !
    !       !      !       !       !      !     !     !        !      !4=REF med ØY!
    !       !      !       !       !      !     !     !        !      !5=sletta    !
    !       !      !       !       !      !     !     !        !      !6=NGIS oppd !
    *------------------------------------------------------------------------------*

    Used table
    Marking of groups
    This table is partly used internally by FYBA and partly by the user program.

    The following bits are defined:
    --------------------------------------------------------------------------------------
     31  The group has been found after a geographical search        -----! Users can read/use
     30  The group has been found with a GINFO selection                  ! these, but it is not
     29  The group has been found after a serial number search            ! allowed to change them.
     28  The group is in the ring buffer                                  !
     27  The group is used in a rewritten block                     ------!
     26                              -----!
      .                                   ! Users have
      .                                   ! full access
      2                                   ! to these.
      1                              -----!
      0  The group is waiting in a line to be written to the SOSI-file

    SOSI buffer
    Binary copy of the SOSI-file
    In order to increase the speed, the library makes a binary copy of the SOSI file.
    This copy is partly stored in RAM and partly on the hard drive.

    The copy consists of group information, coordinates and node information.

    The group information for one group is treated as a long string with pointers
    to the start position for every GINFO-line

    !-----------:-----------:----------:----------------------------------!
    !  GINFO 1  !  GINFO 2  ! GINFO 3  ! .....                            !
    !-----------:-----------:----------:----------------------------------!
     !            !           !
     !---------!  !           !
               !  !           !
    !--------! !  !           !
    ! GINFO  ! !  !           !
    !--------! !  !           !
    ! offset !-!  !           !
    !        !-----           !
    !        !-----------------

    The coordinates are stored in separate arrays. The node information is stored
    as a long string for the entire group with pointers to every node to the start
    position for PINFO for every node in the same way as GINFO.

    !--------! !--------! !----------:-------:--------!
    ! East   ! ! North  ! ! Altitude !  KP   ! PINFO  !
    !--------! !--------! !----------!-------!--------!
    ! double ! ! double ! ! double   ! short ! ushort !
    !   m    ! !   m    ! !   m      !       !  ofset !

    Serial number table
    !-------------*
    ! Group number!
    !-------------!       The line number in the table is the serial number.
    !  lGrNr      !
    !  (long)     !
    *-------------*

## Geographical search table

Geographical search table

    Geopgraphical search is based on a rewritten box.
    The boxes are organised in an R-tree.

    !-----------------------------------*
    !      Rewritte box                 !
    !                                   !
    ! min-N  ! min-E  ! max-N  ! max-E  !
    !        !        !        !        !
    !--------!--------!--------!--------!
    !dMinNord!dMinAust!dMaxNord!dMaxAust!
    !  d     !   d    !   d    !   d    !
    !        !        !        !        !
    *-----------------------------------*

# 4 Naming Conventions

The variable names are freely chosen to say as much about what the variables contain. Many of the names are in Norwegian because of the origin of the library.
Most of the functions in the user interface begin with "LC_":
In addition, there are some special functions that are used to read the file header directly from a SOSI file. These have names that start with "HO_":

# 5 Initialisation and Control

## LC_Init

Initialises FYBA

    =============================================================================
    Purpose:
    Initialises FYBA.
    Parameters:
    Type     Name      I/O   Explanation
    -----------------------------------------------------------------------------
    Usage:
    LC_Init();
       =============================================================================

    SK_EntPnt_FYBA void LC_Init(void)

## LC_InqVer

Identification

    =============================================================================
    Purpose:
    Gets the version of this library.
       =============================================================================

    SK_EntPnt_FYBA char *LC_InqVer(void)

## LC_Close

Closes FYBA

    =============================================================================
    Purpose:
    Closes FYBA.
    Parameters:
    Type     Name      I/O   Explanation
    -----------------------------------------------------------------------------
    Usage:
    LC_Close();
    	=============================================================================

    SK_EntPnt_FYBA void LC_Close(void)

## LC_ErInitiert

Is FYBA initialised

    =============================================================================
    Purpose:
    Checks if FYBA has been initialised / is available.
    Parameters:
    Type   Name     I/O   Explanation
    -----------------------------------------------------------------------------
    short  sStaus    r    0=not initialised, or closed
                          1=initialised
    Usage:
    sStatus = LC_ErInitiert();
       =============================================================================

    SK_EntPnt_FYBA short LC_ErInitiert(void)

## LC_MaxSkriv

Maximum number of times to write before writing to the SOSI file

    ==========================================================================
    Purpose:
    Sets the maximum number of times to write before writing to the SOSI file
    (0 = everything is written directly to the SOSI file.)
    Parameters:
    Type     Name      I/O   Explanation
    -----------------------------------------------------------------------------
    long     number     i    Maxium number of times to write before writing to the SOSI file
    Usage:
    LC_MaxSkriv(number);
       =============================================================================

    SK_EntPnt_FYBA void LC_MaxSkriv(long antall)

## LC_InqMaxSkriv

Maximum number of times to write before writing to the SOSI file

    ==========================================================================
    Purpose:
    Gets the maximum number of times to write before writing to the SOSI file.
    (0 = everything is written directly to the SOSI file.)
    Parameters:
    Type     Name      I/O   Explanation
    -----------------------------------------------------------------------------
    long     number     i    Maxium number of times to write before writing to the SOSI file
    Usage:
    number = LC_InqMaxSkriv();
       =============================================================================

    SK_EntPnt_FYBA long LC_InqMaxSkriv(void)

## LC_SetNgisModus

Choose NGIS mode

    ==========================================================================
    Purpose:
    Sets the way to handle groups that are marked for update by NGIS.
    The default value after LC_Init is NGIS_NORMAL.
    Parameters:
    Type   Name  I/O  Explanation
    --------------------------------------------------------------------------
    short  mode   i   The way to handle:
                            NGIS_NORMAL  (0) = Normal
                            NGIS_SPESIAL (1) = Special mode where it is possible to read
                                               groups that have been marked as deleted
    Usage:
    LC_SetNgisModus(NGIS_NORMAL);
       ==========================================================================

    SK_EntPnt_FYBA void LC_SetNgisModus(short modus)

## LC_SetDefLpfi

Available space between groups

    ==========================================================================
    Purpose:
    Adds default value for the number of letters available behind groups in a .SOS-file
    Parameters:
    Type     Name         I/O   Explanation
    --------------------------------------------------------------------------------
    short    num_letters   i    Number of letters available space.
    Usage:
    LC_SetDefLpfi(ant_tegn);
       =============================================================================

    SK_EntPnt_FYBA void LC_SetDefLpfi(short ant_tegn)

## LC_InqDefLpfi

Gets the available space between groups

    ==========================================================================
    Purpose
    Gets the default value for the number of letters available behind groups in a .SOS-file
    Parameters:
    Type     Name           I/O   Explanation
    ----------------------------------------------------------------------------------
    short    num_letters     r    Number of letters available space.
    Usage:
    ant_tegn = LC_InqDefLpfi();
       =============================================================================

    SK_EntPnt_FYBA short LC_InqDefLpfi(void)

## LC_SetUtvidModus

Set the expanding mode

    ==========================================================================
    Purpose:
    Set the way to handle expanding of SOSI files.
    The default value after LC_Init is LC_UTVID_SIKKER.
    Parameters:
    Type   Name  I/O  Explanation
    --------------------------------------------------------------------------
    short  mode   i   Way to handle:
                        LC_UTVID_SIKKER (0) = The SOSI file is closed and the file size
                                              is updated after every group that is
                                              written in the end of the file.
                        LC_UTVID_RASK   (1) = The SOSI file is not closed after each
                                              group that is written at the end
                                              of the file.
                                              (Only to be used in special circumstances.)
    Usage:
    LC_SetUtvidModus(LC_UTVID_SIKKER);
       ==========================================================================

    SK_EntPnt_FYBA void LC_SetUtvidModus(short modus)

## LC_GetUtvidModus

Get the expanding mode

    ==========================================================================
    Purpose:
    Get the way to handle expanding of SOSI files.
    Parameters:
    Type   Name  I/O  Explanation
    --------------------------------------------------------------------------
    short  mode   r   Way to handle:
                        LC_UTVID_SIKKER (0) = The SOSI file is closed and the file size
                                              is updated after every group that is
                                              written in the end of the file.
                        LC_UTVID_RASK   (1) = The SOSI file is not closed after each
                                              group that is written at the end
                                              of the file.
                                              (Only to be used in special circumstances.)
    Usage:
    short sModus = LC_GetUtvidModus();
       ==========================================================================

    SK_EntPnt_FYBA short LC_GetUtvidModus(void)

# 6 Opening Base and SOSI Files

## LC_OpenBase

Opens a new base

    ==========================================================================
    Purpose:
    Opens a new base, resets the tables.
    If the base is a draft base, a SOSI file with one group is created in the base.
    This is used as a buffer for read / write.
    The draft file is stored in the current directory.
    The draft base is only used when all SOSI files are opened with a sequential read / write.

    The new base is chosen as the active base.
    Parameters:
    Type        Name      I/O  Explanation
    --------------------------------------------------------------------------
    short       sBaseType  i   Base type. Constants defined:
                                LC_BASE  = Standard base.
                                LC_KLADD = Draft base. Only used in special
                                           circumstances if no files is opened
                                           as a LC_BASE_xx.
    LC_BASEADM * pBase      r   Base pointer.
    Usage:
    pBase = LC_OpenBase(sBaseType);
    	==========================================================================

    SK_EntPnt_FYBA LC_BASEADM * LC_OpenBase(short sBaseType)

## LC_CloseBase

Close base

    ==========================================================================
    Purpose:
    Closes all the files in the base, and releases the basee administration block.
    If the active base is closed, the first base in the system is chosen as
    the new active base.
    Parameters:
    Type       Name   I/O Explanation
    --------------------------------------------------------------------------
    PLCBASEADM pBase   i  Pointer to baseAdm
    short      s_stat  i  Close-status
                          RESET_IDX = Removes the index files
                          SAVE_IDX  = Saves the index files
                          ABORT     = Saves the index files (for cancelled index
                                      generation)
    Usage:
    LC_CloseBase(pBase,s_stat);
       ==========================================================================

    SK_EntPnt_FYBA void LC_CloseBase(LC_BASEADM * pBase,short s_stat)

## LC_SelectBase

Selects active base

    ==========================================================================
    Purpose:
    Selects the active base.
    Parameters:
    Type        Name      I/O  Explanation
    --------------------------------------------------------------------------
    LC_BASEADM * pBase      i   Pointer to baseAdm
    Usage:
    LC_SelectBase(pBase);
       ==========================================================================

    SK_EntPnt_FYBA void LC_SelectBase(LC_BASEADM * pBase)

## LC_InqCurBase

Gets the active base

    ==========================================================================
    Purpose:
    Gets the active base.
    Parameters:
    Type        Name      I/O  Explanation
    --------------------------------------------------------------------------
    LC_BASEADM * pBase      r   Base pointer
    Usage:
    pBase = LC_InqCurBase();
       =============================================================================

    SK_EntPnt_FYBA LC_BASEADM * LC_InqCurBase(void)

## LC_OpenSos

Åpner og sjekker SOSI-fil

    ==========================================================================
    Purpose:
    Opens a new file in active base.
    Allocates memory for a new file administration block and initialises it.
    Opens the SOSI file and adds names etc into the file administration block.
    Reads the header and interprets it in the file table.
    The header is not generated for new files. It can be generated with LC_PutGi, or
    LC_NyttHode or copied from another file, and written with LC_WsGr or LC_WxGr.
    Parameters:
    Type    Name   I/O  Explanation
    --------------------------------------------------------------------
    char   *fil        i   Filename including path and file type
                           (If the file type is missing, it assumes .SOS)
    short   sModus     i   File mode
                           LC_BASE_FRAMGR = Foreground file
                           LC_BASE_BAKGR  = Background file (Only read)
                           LC_SEKV_LES    = Sequential, read
                           LC_SEKV_SKRIV  = Sequential, write
                           LC_SEKV_UTVID  = Sequential, expand old file
    short   sNyIdx     i   Index generation:
                           LC_NY_IDX  = Forced new generation
                           LC_GML_IDX = Use old .idx if it is OK
    short   sVisStatus i  Show the index
                           LC_VIS_STATUS   = Show status
                           LC_INGEN_STATUS = Hide status
    LC_FILADM **pFil   u  Pointer to file administration block.
    short  *o_stat     u  Detailed open status:
                             0: Opening and header OK
                            >0: Error when opening
                            -1: Opening OK, empty file / not a SOSI file
                            -2: Not opened, append can not be used on
                                an empty file / not SOSI file
                            -3: (LC_CANCEL): Not opened,
                                index generation cancelled with [Esc].
                                or a file error.
                            -4: (LC_DUBLIKAT): The file is already in the base (pFil)
                            -5: (LC_OPPTATT): The file is opened in another program
    short   status     r  Opening status: UT_TRUE = OK
                                          UT_FALSE = Error, (o_stat contains the details)
    Usage:
    ist=LC_OpenSos(fil,LC_BASE_FRAMGR,LC_NY_IDX,LC_VIS_STATUS,&pFil,&o_stat);
    ist=LC_OpenSos(fil,LC_SEKV_LES,LC_NY_IDX,LC_INGEN_STATUS,&pFil,&o_stat);
       ==========================================================================

    SK_EntPnt_FYBA short LC_OpenSos(const char *fil,short sModus,short sNyIdx,short sVisStatus,
                                    LC_FILADM **pFil, short *o_stat)

## LC_CloseSos

Close SOSI file

    ==========================================================================
    Purpose:
    Closes a SOSI file, and removes it from the base.
    Parameters:
    Type        Name   I/O  Explanation
    --------------------------------------------------------------------------
    LC_FILADM  *pFil     i   Pointer to a filAdm-block
    short       s_stat  i   End-status
                            RESET_IDX = Remove the index files
                            SAVE_IDX  = Saves the index files
    Usage:
    LC_CloseSos(pFil,SAVE_IDX);
       ==========================================================================

    SK_EntPnt_FYBA void LC_CloseSos(LC_FILADM *pFil,short s_stat)

## LC_DelIdx

Delete the index files

    ==========================================================================
    Purpose:
    Deletes the index files for a specified SOSI file
    Parameters:
    Type  Name     I/O Explanation
    --------------------------------------------------------------------------
    char *szSosFil  i  SOSI filename
    Usage:
    LC_DelIdx(szSosFil);
       ==========================================================================

    SK_EntPnt_FYBA void LC_DelIdx(char *szSosFil)

## LC_FcloseSos

Close an opened SOSI file in the file system

    ==========================================================================
    Purpose:
    This function is used to ensure that a file is updated and closed in the file system,
    such that the SOSI file can be read from another program.
    Note!
    Only closes the file in the file system.
    The file is still open in the base.
    FYBA will automatically reopen the file when it is needed.
    Parameters:
    Type        Name    I/O   Explanation
    --------------------------------------------------------------------------
    LC_FILADM  *pFil     i   Pointer to FilAdm-block
    Usage:
    LC_FcloseSos(pFil);
    ==========================================================================

    SK_EntPnt_FYBA void LC_FcloseSos(LC_FILADM *pFil)

# 7 Helper Functions

## 7.1 Base og File

## LC_GetBaOm

Get the base area

    ==========================================================================
    Purpose:
    Gets the base area for the active base (Summary of the headers).
    Sequential files are not included.
    Parameters:
    Type           Name    I/O   Explanation
    --------------------------------------------------------------------------
    unsigned short usLag    i   Choose which "layers" to be searched in.
                                  LC_FRAMGR and /or LC_BAKGR
                                  (Use "|" to combine.)
    double        *nva      u    Lower left east
    double        *nvn      u    Lower left north
    double        *oha      u    Upper right east
    double        *ohn      u    Upper right north
    short          sStatus  r    UT_TRUE=OK, UT_FALSE=No file
    Usage:
    sStatus = LC_GetBaOm(LC_FRAMGR,&nva,&nvn,&oha,&ohn);
       ==========================================================================

    SK_EntPnt_FYBA short LC_GetBaOm(unsigned short usLag,double *nva,double *nvn,double *oha,
                     double *ohn)

## LC_GetFiOm

Get area from the file header

    ==========================================================================
    Purpose:
    Hent område for en SOSI-fil i basen.
    Fungerer ikke mot sekvensielle filer.
    Parameters:
    Type       Name  I/O  Explanation
    --------------------------------------------------------------------------
    LC_FILADM *pFil   i   Peker til FilAdm
    double     nva    u   Nedre venstre øst
    double     nvn    u   Nedre venstre nord
    double     oha    u   Øvre høyre øst
    double     ohn    u   Øvre høyre nord
    short      ist    r   Status (UT_TRUE=OK, UT_FALSE=sekvensiell fil)
    Usage:
    ist = LC_GetFiOm(pFil,&nva,&nvn,&oha,&ohn);
       ==========================================================================

    SK_EntPnt_FYBA short LC_GetFiOm(LC_FILADM *pFil,double *nva,double *nvn,double *oha,double *ohn)

## LC_GetFiNr

Get file number

    ==========================================================================
    Purpose:
    Sjekker alle filer i aktuell base om noen av den har det gitte filnavnet.
    Parameters:
    Type        Name     I/O  Explanation
    --------------------------------------------------------------------------
    char        fil_navn  i   Filnavn
    LC_FILADM  *pFil      r   Peker til FilAdm for filen. (NULL = ukjent fil)
    Usage:
    pFil = LC_GetFiNr(fil_navn);
       ==========================================================================

    SK_EntPnt_FYBA LC_FILADM *LC_GetFiNr(const char *fil_navn)

## LC_GetFiNa

Get filename

    ==========================================================================
    Purpose:
    Henter filnavnet for en fil i basen. Fungerer både for basefiler
    og for sekvensielle filer.
    OBS! Hvis du skal endre på filnavnet må du først kopiere det
         til en lokale varialel.
    Parameters:
    Type        Name      I/O   Explanation
    --------------------------------------------------------------------------
    LC_FILADM  *pFil       i    Peker til FilAdm
    char       *fil_navn   r    Peker til filnavn
    Usage:
    fil_navn = LC_GetFiNa(pFil);
       ==========================================================================

    SK_EntPnt_FYBA char *LC_GetFiNa(LC_FILADM *pFil)

## LC_GetTegnsett

Get encoding

    ==========================================================================
    Purpose:
    Finne tegnsett i ginfo i aktuell gruppe.
    OBS! Forutsetter at aktuell gruppe er et SOSI-filhode.
    Parameters:
    Type    Name       I/O  Explanation
    --------------------------------------------------------------------------
    short  *psTegnsett  u   Tegnsett, konstanter definert:
                               TS_DOSN8   = DOS norsk 8-bits(standardverdi)
                               TS_ND7     = Norsk Data 7-bits
                               TS_ISO8859 = ISO8859-10 norsk/samisk
                               TS_DECM8   = DEC multinasjonal 8-bits
                               TS_DECN7   = DEC norsk 7-bits
    short   sStatus     r   Status: UT_TRUE  = Funnet
                                     UT_FALSE = Ikke funnet
    Usage:
         sStatus = LC_GetTegnsett(&sTegnsett);
    ==========================================================================

    SK_EntPnt_FYBA short LC_GetTegnsett(short *psTegnsett)

## LC_InqLag

Get which layer the active group belongs to

    ==========================================================================
    Purpose:
    Finn hvilket lag aktuell gruppe tilhører.
    Parameters:
    Type            Name    I/O   Explanation
    --------------------------------------------------------------------------
    unsigned short *usLag    u    "Lag":  LC_FRAMGR eller LC_BAKGR
    short           status   r    UT_TRUE = OK, UT_FALSE = Ingen aktuell gruppe
    Usage:
        status = LC_InqLag(&usLag);
       ==========================================================================

    SK_EntPnt_FYBA short LC_InqLag(unsigned short *usLag)

## LC_InqFilLag

Get which layer a file belongs to

    ==========================================================================
    Purpose:
    Finn hvilket lag en fil tilhører.
    Parameters:
    Type            Name    I/O   Explanation
    --------------------------------------------------------------------------
    LC_FILADM      *pFil     i    Filpeker
    unsigned short  usLag    r    "Lag":  LC_FRAMGR eller LC_BAKGR
    Usage:
        usLag = LC_InqFilLag(pFil);
       ==========================================================================

    SK_EntPnt_FYBA unsigned short LC_InqFilLag(LC_FILADM *pFil)

## LC_SetFilLag

Set which layer a file belongs to

    ==========================================================================
    Purpose:
    Velg hvilket lag en fil tilhører.
    Parameters:
    Type            Name    I/O   Explanation
    --------------------------------------------------------------------------
    LC_FILADM      *pFil     i    Filpeker
    unsigned short  usLag    i    "Lag":  LC_FRAMGR eller LC_BAKGR
    Usage:
        LC_SetFilLag(pFil,LC_FRAMGR);
       ==========================================================================

    SK_EntPnt_FYBA void LC_SetFilLag(LC_FILADM *pFil,unsigned short usLag)

## LC_FiLastGr

Find the last group in the file

    ==========================================================================
    Purpose:
    Finner gruppenummer for siste gruppe i filen.
    Parameters:
    Type       Name  I/O   Explanation
    --------------------------------------------------------------------------
    LC_FILADM *pFil   i    Peker til FilAdm
    bgr        long   r    Gruppenummer
    Usage:
    bgr = LC_FiLastGr(pFil);
       ==========================================================================

    SK_EntPnt_FYBA long LC_FiLastGr(LC_FILADM *pFil)

## LC_ErFilBase

Check if the file is in the base

    ==========================================================================
    Purpose:
    Sjekker om en fil er i basen.
    Parameters:
    Type    Name   I/O  Explanation
    --------------------------------------------------------------------
    char   *fil     i   Filnavn inkl. sti og fil-type
                        (Hvis fil-type mangler forutsettes  .SOS)
    short   status  r   Status: UT_TRUE = Filen er med i basen.
                                UT_FALSE = Filen er IKKE med i basen.
    Usage:
    ist = LC_ErFilBase(fil);
       ==========================================================================

    SK_EntPnt_FYBA short LC_ErFilBase(const char *fil)

## LC_ErKoordsysLik

Check that all files in the base have the same coordinate system

    =======================================================================
    Purpose:
    Sjekk at alle filene i basen har samme koordinatsystem.
    Parameters:
    Type    Name   I/O  Explanation
    -----------------------------------------------------------------------
    short   status  r   Status: UT_TRUE = KOORDSYS er lik.
                                UT_FALSE = KOORDSYS er IKKE lik.
    Usage:
    ist = LC_ErKoordsysLik();
    	=======================================================================

    SK_EntPnt_FYBA short LC_ErKoordsysLik(void)

## LC_ErVertdatumLik

Check that all files have the same VERT-DATUM

    =======================================================================
    Purpose:
    Sjekk at alle filene i basen har samme VERT-DATUM.
    Parameters:
    Type    Name   I/O  Explanation
    -----------------------------------------------------------------------
    short   status  r   Status: UT_TRUE = VERT-DATUM er lik.
                                UT_FALSE = VERT-DATUM er IKKE lik.
    Usage:
    ist = LC_ErVertdatumLik();
    	=======================================================================

    SK_EntPnt_FYBA short LC_ErVertdatumLik(void)

## LC_Backup

Make backup of a SOSI file

    ==========================================================================
    Purpose:
    Lag backup av gitt SOSI-fil.
    Kopien legges på en underkatlog med navn "Backup" under den katalogen
    SOSI-filen ligger på. Kopien navnes "Filnavn.nnn" der nnn er et
    fortløpende nummer fra 000 og oppover. Det første ledige numret blir brukt.
    Parameters:
    Type         Name          I/O  Explanation
    --------------------------------------------------------------------------
    LC_FILADM   *pFil           i   Filpeker
    char        *pszBackupPath  i   Katalognavn for lagring av backup.
    short        sStatus        r   UT_TRUE = OK
                                    UT_FALSE = Feil.
    Usage:
        sStatus = LC_Backup(pFil, szBackupPath);
       ==========================================================================

    SK_EntPnt_FYBA short LC_Backup(LC_FILADM *pFil, const char *pszBackupPath)

## LC_GetNgisLag

Get NGIS-LAG from a file

    ==========================================================================
    Purpose:
    Henter NGIS-LAG for gitt fil.
    Strengen ligger i et felles "returbuffer" for alle get-rutiner i fyba.
    Dette blir ødelagt ved neste kall til en "get-rutine". For å ta vare på
    strengen må den kopieres over til egen streng. (Bruk strcpy).
    Parameters:
    Type       Name    I/O  Explanation
    --------------------------------------------------------------------------
    LC_FILADM *pFil     i   Fil det ønskes opplsninger om.
    char*  pszNgisLag   r   NGIS-lag.
                              Tom streng = ..NGIS-LAG er ikke funnet
                              "0"  = Bare leseaksess (..NGIS-LAG 0)
    Usage:
    pszNgisLag = LC_GetNgisLag(pFil);
       ==========================================================================

    SK_EntPnt_FYBA char* LC_GetNgisLag(LC_FILADM *pFil)

## LC_SetFilType

Set file type for a SOSI file

    ==========================================================================
    Purpose:
    Setter filtype for en fil.
    Denne rutinen er primært tenkt brukt i GabEdit hvor det er behov for å
    definere flere typer arbeidsfil.
    Parameters:
    Type         Name   I/O  Explanation
    --------------------------------------------------------------------------
    LC_FILADM *  pFil	   i   Peker til filen
    short        type    i   Filtypen som skal settes
                                LC_FILTYPE_UKJENT
                                LC_FILTYPE_INAKTIV
                                LC_FILTYPE_GAB_EIENDOM
                                LC_FILTYPE_GAB_ADRESSE
                                LC_FILTYPE_GAB_BYGNING
                                LC_FILTYPE_BYGG
                                LC_FILTYPE_DEK
                                LC_FILTYPE_DEK_ENDRING
                                LC_FILTYPE_GRUNNKRETS
                                LC_FILTYPE_POSTKRETS
                                LC_FILTYPE_SKOLEKRETS
                                LC_FILTYPE_KIRKESOGN
                                LC_FILTYPE_TETTSTED
                                LC_FILTYPE_VALGKRETS
    Usage:
    LC_SetFilType(pFil,type);
    =============================================================================

    SK_EntPnt_FYBA void LC_SetFilType(LC_FILADM *pFil, short sType)

## LC_GetFilType

Get file type for a SOSI file

    ==========================================================================
    Purpose:
    Finner filtypen for en fil.
    Parameters:
    Type         Name   I/O  Explanation
    --------------------------------------------------------------------------
    LC_FILADM *  pFil	   i   Peker til filen
    short        type    r   Filtypen som skal settes
                                LC_FILTYPE_UKJENT
                                LC_FILTYPE_INAKTIV
                                LC_FILTYPE_GAB_EIENDOM
                                LC_FILTYPE_GAB_ADRESSE
                                LC_FILTYPE_GAB_BYGNING
                                LC_FILTYPE_BYGG
                                LC_FILTYPE_DEK
                                LC_FILTYPE_DEK_ENDRING
                                LC_FILTYPE_GRUNNKRETS
                                LC_FILTYPE_POSTKRETS
                                LC_FILTYPE_SKOLEKRETS
                                LC_FILTYPE_KIRKESOGN
                                LC_FILTYPE_TETTSTED
                                LC_FILTYPE_VALGKRETS
    Usage:
    type = LC_GetFilType(pFil);
    =============================================================================

    SK_EntPnt_FYBA short LC_GetFilType(LC_FILADM *pFil)

## LC_ErLik_Avrundet

Rund av og sjekk om sammenfallende punkt

    ==========================================================================
    Purpose:
    Runder av til valgt enhet, og sjekker om de to punktene er sammenfallende.
    (Avviket er mindre enn 1/10 enhet både nord og øst)
    Parameters:
    Type     Name    I/O Explanation
    ---------------------------------------------------------------------------
    double   dA1      i  P1
    double   dN1      i
    double   dA2      i  P2
    double   dN2      i
    double   dEnhet   i  Enhet som skal brukes i sammenligningen
    bool     bErLike  r  Status: true  = Samme koordinat
                                 false = Ikke samme koordinat
    Usage:
    bSammenfallende = LC_ErLik(dA1,dN1,dA2,dN2,dEnhet);
       ===========================================================================

    SK_EntPnt_FYBA bool LC_ErLik_Avrundet(double dA1,double dN1,double dA2, double dN2, double dEnhet)

## LC_ErLik_IkkeAvrundet

Sjekk om sammenfallende punkt (uten avrunding)

    ==========================================================================
    Purpose:
    Sjekker om de to punktene er sammenfallende innen gitt nøyaktighet.
    Det skjer ingen avrunding av koordinatene før sammenligningen.
    (Avviket er mindre enn 1/10 enhet både nord og øst)
    Parameters:
    Type     Name    I/O Explanation
    ---------------------------------------------------------------------------
    double   dA1      i  P1
    double   dN1      i
    double   dA2      i  P2
    double   dN2      i
    double   dEnhet   i  Enhet som skal brukes i sammenligningen
    bool     bErLike  r  Status: true  = Samme koordinat
                                 false = Ikke samme koordinat
    Usage:
    bSammenfallende = LC_ErLik(dA1,dN1,dA2,dN2,dEnhet);
       ===========================================================================

    SK_EntPnt_FYBA bool LC_ErLik_IkkeAvrundet(double dA1,double dN1,double dA2, double dN2, double dEnhet)

## LC_ErReferert

Sjekk om gruppe er referert

    ==========================================================================
    Purpose:
    Sjekker om aktuell gruppe er referert fra andre grupper.
    Parameters:
    Type  Name      I/O Explanation
    ---------------------------------------------------------------------------
    bool  bReferert  r  Det finnes referanser til gruppen
    Usage:
    bReferert = LC_ErReferert();
    ===========================================================================

    SK_EntPnt_FYBA bool LC_ErReferert(void)

## 7.2 SOSI Group

## LC_GetGrNr

Hent gruppe-nummer

    ==========================================================================
    Purpose:
    Henter gruppenummer for aktuell gruppe.
    Parameters:
    Type    Name     I/O   Explanation
    --------------------------------------------------------------------------
    LC_BGR * pBgr      iu   Peker til gruppestruktur der gruppenummer lagres
    short   status    r    Status  UT_TRUE=OK, UT_FALSE=ingen aktuell gruppe
    Usage:
        status = LC_GetGrNr(&Bgr)
       ==========================================================================

    SK_EntPnt_FYBA short LC_GetGrNr(LC_BGR * pBgr)

## LC_GetGrPara

Hent gruppe-parametre

    ==========================================================================
    Purpose:
    Henter diverse opplysninger om aktuell gruppe.
    Parameters:
    Type    Name   I/O   Explanation
    ------------------------------------------------------------------------
    short   *ngi    u    Antall linjer GINFO
    long    *nko    u    Antall koordinater
    short   *info   u    Diverse informasjon. En sum av følgende:
                           GI_PINFO = gruppen har PINFO
                           GI_NAH   = gruppen har høyde informasjon (..NØH)
                           GI_NAD   = gruppen har dybde informasjon (..NØD)
                           GI_KP    = gruppen har knutepunkt (...KP n)
                           GI_REF   = gruppen har referanser (.. :n)
                           GI_OY_REF= gruppen har referanser med øy
                           GI_NGIS      = gruppen er tatt ut fra NGIS for oppdat.
                           GI_SLETTA    = gruppen er sletta (merka som sletta)
                           GI_READ_ONLY = gruppen kan ikke endres.
    short   gnavn   r    Gruppenavn. (Se under LC_RxGr)
    Usage:
        gnavn = LC_GetGrPara(&ngi,&nko,&info);
       ==========================================================================

    SK_EntPnt_FYBA short LC_GetGrPara(short *ngi,long *nko,unsigned short *info)

## LC_GetGrParaBgr

Hent gruppe-parametre for gruppe

    =============================================================================
    Purpose:
    Henter diverse opplysninger om gitt gruppenummer.
    Parameters:
    Type            Name I/O  Explanation
    -----------------------------------------------------------------------------
    LC_BGR *         pBgr  i   Gruppenummer det ønskes opplysninger om.
    short          *ngi   u   Antall linjer GINFO  (0=sletta eller ulovlig nummer)
    long           *nko   u   Antall koordinater
    unsigned short *info  u   Diverse informasjon. En sum av følgende:
                              GI_PINFO = gruppen har PINFO
                              GI_NAH   = gruppen har høyde informasjon (..NØH)
                              GI_NAD   = gruppen har døbde informasjon (..NØD)
                              GI_KP    = gruppen har knutepunkt (...KP n)
                              GI_REF   = gruppen har referanser (.. :n)
                              GI_OY_REF= gruppen har referanser med øy
                              GI_NGIS      = gruppen er tatt ut fra NGIS for oppdat.
                              GI_SLETTA    = gruppen er sletta (merka som sletta)
                              GI_READ_ONLY = gruppen kan ikke endres.
    short           gnavn r   Gruppenavn. (Se under LC_RxGr)
    Usage:
        gnavn = LC_GetGrParaBgr(pBgr,&ngi,&nko,&info,&snr);
       =============================================================================

    SK_EntPnt_FYBA short LC_GetGrParaBgr(LC_BGR * pBgr,short *ngi,long *nko,unsigned short *info)

## LC_GetGrFi

Hent gruppe-filnr

    =============================================================================
    Purpose:
    Henter peker til FilAdm for aktuell gruppe.
    Parameters:
    Type         Name    I/O   Explanation
    -----------------------------------------------------------------------------
    LC_FILADM * *ppFil    u   Peker til FilAdm-peker
    short        status   r   UT_TRUE = OK, UT_FALSE = Ingen aktuell gruppe
    Usage:
        status = LC_GetGrFi(&pFil);
       =============================================================================

    SK_EntPnt_FYBA short LC_GetGrFi(LC_FILADM **ppFil)

## LC_SetEndringsstatus

Setter endringsstatus for aktuell gruppe

    ==========================================================================
    Purpose:
    Setter endringsstatus for aktuell gruppe.
    NB! Denne rutinen bør normalt ikke brukes av vanlige klient-program!
    Parameters:
    Type   Name      I/O  Explanation
    --------------------------------------------------------------------------
    short  sStatus    i   Kode for endring:
                            END_UENDRA  0   Ikke endra
                            END_KOPI    1   Endra ved totalkopi fra annen gruppe
                            END_ENDRA   2   Endra ved normal Put fra program
    Usage:
    LC_dg_SetEndringsstatus(END_KOPI);
    =============================================================================

    SK_EntPnt_FYBA void LC_SetEndringsstatus(short sStatus)

## 7.3 Header, active group

## LC_NyttHode

Lager nytt hode

    ==========================================================================
    Purpose:
    Legger inn et standard SOSI-filhode i ginfo i aktuell gruppe.
    Parameters:
        ingen
    Usage:
        LC_NyttHode();
    ==========================================================================

    SK_EntPnt_FYBA void LC_NyttHode(void)

## LC_TestHode

Tester SOSI-hodet

    ==========================================================================
    Purpose:
    Sjekker at ginfo i aktuell gruppe er et lovlig SOSI-filhode.
    Parameters:
     Type    Name    I/O   Explanation
    --------------------------------------------------------------------------
     short   ist      r    status: UT_TRUE=OK, UT_FALSE=feil
    Usage:
        ist = LC_TestHode();
    ==========================================================================

    SK_EntPnt_FYBA short LC_TestHode(void)

## LC_GetOmr

Finner ..OMRÅDE i hodet

    ==========================================================================
    Purpose:
    Henter ut område fra ginfo i aktuell gruppe.
    OBS! Forutsetter at aktuell gruppe er et SOSI-filhode.
    Parameters:
    Type     Name      I/O   Explanation
    --------------------------------------------------------------------------
    double  *nv_a       u    Område
    double  *nv_n       u
    double  *oh_a       u
    double  *oh_n       u
    short    ist        r    status: UT_TRUE=OK, UT_FALSE=feil (navn er ikke funnet)
    Usage:
        ist = LC_GetOmr(&nv_a,&nv_n,&oh_a,&oh_n);
    ==========================================================================

    SK_EntPnt_FYBA short LC_GetOmr(double *nv_a,double *nv_n,double *oh_a,double *oh_n)

## LC_PutOmr

Legger inn ..OMRÅDE i hodet

    ==========================================================================
    Purpose:
    Legger inn område i ginfo i aktuell gruppe.
    Hvis område ikke har noen utstrekning justeres
    dette med 1 meter i hver retning.
    OBS! Forutsetter at aktuell gruppe er et SOSI-filhode av ny type.
    Parameters:
    Type     Name      I/O   Explanation
    --------------------------------------------------------------------------
    double   nv_a       i    Område
    double   nv_n       i
    double   oh_a       i
    double   oh_n       i
    short    ist        r    status: UT_TRUE=OK, UT_FALSE=feil
    Usage:
        ist = LC_PutOmr(nv_a,nv_n,oh_a,oh_n);
    ==========================================================================

    SK_EntPnt_FYBA short LC_PutOmr(double nv_a,double nv_n,double oh_a,double oh_n)

## LC_GetTrans

Finner ..TRANSPAR i hodet

    ==========================================================================
    Purpose:
    Henter ut transformasjonsparametrene fra ginfo i aktuell gruppe.
    Forutsetter at aktuell gruppe er et SOSI-filhode.
    OBS! Denne rutinen opprettholdes bare for bakoverkompatibilitet.
         For nye programmer bør LC_GetTransEx benyttes. LC_GetTransEx er
         kompatibel med nye versjoner av SOSI.
    Parameters:
    Type     Name      I/O   Explanation
    --------------------------------------------------------------------------
    short   *koosys     u    Koordinatsystem
    double  *origo_a    u    Origo øst
    double  *origo_n    u    Origo nord
    double  *enhet      u    Enhet
    double  *enhet_h    u    ...ENHET-H
    double  *enhet_d    u    ...ENHET-D
    short    ist        r    status: UT_TRUE=OK, UT_FALSE=feil (navn er ikke funnet)
    Usage:
        ist = LC_GetTrans(&koosys,&origo_a,&origo_n,&enhet,&enhet_h,&enhet_d);
    ==========================================================================

    SK_EntPnt_FYBA short LC_GetTrans(short *koosys,double *origo_a,double *origo_n,double *enhet,
    					 double *enhet_h,double *enhet_d)

## LC_GetTransEx

Henter ..TRANSPAR fra hodet

    ==========================================================================
    Purpose:
    Henter ut innholdet under ..TRANSPAR fra ginfo i aktuell gruppe.
    OBS! Forutsetter at aktuell gruppe er et SOSI-filhode.
    Må velge mellom KOORDSYS, TRANSSYS eller GEOSYS. Kun en av disse kan benyttes i filhodet.
    KOORDSYS er den mest vanlige måte å definere referansesystem.
    GEOKOORD skal benyttes for GEOSYS og for TRANSSYS
    Må velge mellom VERT-DATUM eller VERT-INT.
    VERT-DATUM er den mest vanlige beskrivelsesmåten.
    Parameters:
    Type            Name      I/O   Explanation
    --------------------------------------------------------------------------
    unsigned short *pusMaske  iu   [Inn] Styrer hvilke deler av TRANSPAR som skal hentes
                                   [Ut]  Viser hvilke deler av TRANSPAR som er funnet/hentet.
                                   Følgende konstanter er definert:
                                     LC_TR_ALLT - Alle deler av ..TRANSPAR hentes
                                     LC_TR_KOORDSYS - Koordsys
                                     LC_TR_TRANSSYS - Transsys
                                     LC_TR_GEOSYS - Geosys
                                     LC_TR_GEOKOORD - Geokoord
                                     LC_TR_ORIGO - Origo-nø
                                     LC_TR_ENHET - Enhet
                                     LC_TR_ENHETH - Enhet-h
                                     LC_TR_ENHETD - Enhet-d
                                     LC_TR_VERTDATUM - Vert-datum
                                     LC_TR_VERTINT - Vert-int
                                     LC_TR_VERTDELTA - Vert-delta
    LC_TRANSPAR *    pTrans    iu   Peker til struktur som skal motta ..TRANSPAR informasjonen.
    short           sStatus   r    Status: UT_TRUE=OK, UT_FALSE=feil (ikke funnet).
    Usage:
    unsigned short usMaske = LC_TR_ALLT;
    LC_TRANSPAR Trans;
    ist = LC_GetTransEx(&usMaske,&Trans);
    ==========================================================================

    SK_EntPnt_FYBA short LC_GetTransEx(unsigned short *pusMaske, LC_TRANSPAR * pTrans)

## LC_PutTrans

Legger inn ..TRANSPAR i hodet

    ==========================================================================
    Purpose:
    Legger inn transformasjonsparametrene i ginfo i aktuell gruppe.
    Forutsetter at aktuell gruppe er et SOSI-filhode versjon 3.x.
    OBS! Denne rutinen opprettholdes bare for bakoverkompatibilitet.
         For nye programmer bør LC_PutTransEx benyttes. LC_PutTransEx er
         kompatibel med nye versjoner av SOSI.
    Parameters:
    Type     Name      I/O   Explanation
    --------------------------------------------------------------------------
    short    koosys     i    Koordinatsystem
    double   origo_a    i    Origo øst
    double   origo_n    i    Origo nord
    double   enhet      i    Enhet
    double   enhet_h    i    Enhet-H
    double   enhet_d    i    Enhet-D
    short    ngi        r    Antall GINFO-linjer etter oppdateringen.
    Usage:
        ngi = LC_PutTrans(koosys,origo_a,origo_n,enhet,enhet_h,enhet_d);
    ==========================================================================

    SK_EntPnt_FYBA short LC_PutTrans(short koosys,double origo_a,double origo_n,
                      double enhet,double enhet_h,double enhet_d)

## LC_PutTransEx

Legger inn ..TRANSPAR i hodet

    ==========================================================================
    Purpose:
    Legger inn innholdet under ..TRANSPAR i ginfo i aktuell gruppe.
    OBS! Forutsetter at aktuell gruppe er et SOSI-filhode versjon 3.x.
    Må velge mellom KOORDSYS, TRANSSYS eller GEOSYS.
    Kun en av disse kan benyttes i filhodet.
    KOORDSYS er den mest vanlige måte å definere referansesystem.
    GEOKOORD skal benyttes for GEOSYS og for TRANSSYS
    Må velge mellom VERT-DATUM eller VERT-INT.
    VERT-DATUM er den mest vanlige beskrivelsesmåten.
    Følgende kompaktifisering brukes:
        ..TRANSPAR
        ...KOORDSYS
        ...TRANSSYS
        ...GEOSYS
        ...GEOKOORD
        ...ORIGO-NØ
        ...ENHET
        ...ENHET-H
        ...ENHET-D
        ...VERT-DATUM
        ...VERT-INT
        ...VERT-DELTA
    Parameters:
    Type           Name    I/O  Explanation
    --------------------------------------------------------------------------
    unsigned short usMaske  i   Maske som styrer hvilke deler av TRANSPAR som brukt
                                Følgende konstanter er definert:
                                 LC_TR_KOORDSYS - Koordsys
                                 LC_TR_TRANSSYS - Transsys
                                 LC_TR_GEOSYS - Geosys
                                 LC_TR_GEOKOORD - Geokoord
                                 LC_TR_ORIGO - Origo-nø
                                 LC_TR_ENHET - Enhet
                                 LC_TR_ENHETH - Enhet-h
                                 LC_TR_ENHETD - Enhet-d
                                 LC_TR_VERTDATUM - Vert-datum
                                 LC_TR_VERTINT - Vert-int
                                 LC_TR_VERTDELTA - Vert-delta
    LC_TRANSPAR *   pTrans   i   Peker til struktur med ..TRANSPAR informasjonen.
    short          ngi      r   Antall GINFO-linjer etter oppdateringen.
    Usage:
    LC_TRANSPAR Trans;
    unsigned short usMaske = LC_TR_KOORDSYS | LC_TR_ORIGO | LC_TR_ENHET;
    Trans.sKoordsys = 32;
    Trans.dOrigoAust = 0.0;
    Trans.dOrigoNord = 0.0;
    Trans.dEnhet = 1.0;
    ngi = LC_PutTransEx(usMaske,&Trans);
    ==========================================================================

    SK_EntPnt_FYBA short LC_PutTransEx(unsigned short usMaske, LC_TRANSPAR * pTrans)

## 7.4 Header, directly from SOSI-file

## HO_New

Lager nytt hode

     =========================================================================
    Purpose:
    Genererer et nytt SOSI-filhode.
    Hvis område ikke har noen utstrekning justeres
    dette med 1 meter i hver retning.
    Parameters:
    Type     Name         I/O    Explanation
    --------------------------------------------------------------------------
    char    *pszFil        i    Fullstendig filnavn
    short    koosys        i    Koordinatsystem
    double   origo_a       i    Origo øst
    double   origo_n       i    Origo nord
    double   enhet         i    Enhet
    double   enhet_h       i    Enhet-H
    double   enhet_d       i    Enhet-D
    double   nv_a          i    Område:  Nedre venstre hjørne
    double   nv_n          i
    double   oh_a          i             Øvre høyre hjørne
    double   oh_n          i
    short    sStatus       r    Status: UT_TRUE  = Funnet
                                        UT_FALSE = Ikke funnet
    Usage:
    sStatus = HO_New(fil,koosys,origo_a,origo_n,enhet,enhet_h-enhet_d,
                     nv_a,nv_n,oh_a,oh_n);
    =============================================================================

    SK_EntPnt_FYBA short HO_New(const char *pszFil,short koosys,double origo_a,double origo_n,
                double enhet,double enhet_h,double enhet_d,
                double nv_a,double nv_n,double oh_a,double oh_n)

## HO_TestSOSI

Tester SOSI-filen

    =============================================================================
    Purpose:
    Sjekker at filen er en SOSI-fil, og finner posisjonen for .SLUTT.
    Parameters:
    Type      Name       I/O   Explanation
    -----------------------------------------------------------------------------
    char     *pszFil      i    Fullstendig filnavn
    UT_INT64 *sluttpos    u    Posisjon for .SLUTT
    short     ist         r    Status: UT_TRUE  = OK
                                     UT_FALSE = feil
    Usage:
        ist = HO_TestSOSI(pszFil,&sluttpos);
    =============================================================================

    SK_EntPnt_FYBA short HO_TestSOSI(const char *pszFil,UT_INT64 *sluttpos)

## HO_GetKvalitet

Finner kvalitetsopplysninger

    =============================================================================
    Purpose:
    Finne kvalitetsopplysninger i filhode.
    (Ikke aktuellt etter SOSI v. 4.00.)
    Parameters:
    Type    Name              I/O  Explanation
    -----------------------------------------------------------------------------
    char   *pszFil             i  Fullstendig filnavn
    short  *psMetode           u  Hvordan data er registrert.
                                    KVAL_MET_UNDEF  metode er udefinert.
    long   *pLNnoyaktighet     u  Registreringsnøyaktighet
                                    KVAL_NOY_UKJENT  nøyaktighet er ukjent.
    short  *psSynbarhet        u  Synbarhet i bilde
                                    KVAL_SYN_UNDEF  synbarhet er udefinert.
    short  *psHoydeMetode      u  Hvordan høyden er registrert.
                                    KVAL_MET_UNDEF  metode er udefinert.
    long   *plHoydeNoyaktighet u  Registreringsnøyaktighet
                                    KVAL_NOY_UKJENT  nøyaktighet er ukjent.
    short   ist                r  Statusvariabel: UT_TRUE  - OK, ..KVALITET er funnet
                                                  UT_FALSE - ikke funnet
    Usage:
         ist = HO_GetKvalitet(fil,&sMetode,&lNoyaktighet,&sSynbarhet,
                              &sHoydeMetode,&lHoydeNoyaktighet);
    =============================================================================

    SK_EntPnt_FYBA short HO_GetKvalitet(const char *pszFil,short *psMetode,long *plNoyaktighet,
                         short *psSynbarhet,short *psHoydeMetode,long *plHoydeNoyaktighet)

## HO_GetTegnsett

Finner tegnsett

    ==========================================================================
    Purpose:
    Finne tegnsett i filhodet.
    Parameters:
    Type     Name      I/O  Explanation
    --------------------------------------------------------------------------
    char   *pszFil      i   Fullstendig filnavn
    short  *psTegnsett  u   Tegnsett, konstanter definert:
                               TS_DOSN8   = DOS norsk 8-bits(standardverdi)
                               TS_ND7     = Norsk Data 7-bits
                               TS_DECM8   = DEC multinasjonal 8-bits
                               TS_ISO8859 = ISO8859-10 Norsk/samisk tegnsett
                               TS_DECN7   = DEC norsk 7-bits
    short   sStatus     r   Status: UT_TRUE  = Funnet
                                    UT_FALSE = Ikke funnet
    Usage:
         sStatus = HO_GetTegnsett(pszFil,&sTegnsett);
    ==========================================================================

    SK_EntPnt_FYBA short HO_GetTegnsett(const char *pszFil,short *psTegnsett)

## HO_GetVal

Finn verdien til et SOSI-navn

    =============================================================================
    Purpose:
    Henter parametrene til et SOSI-navn.
    Strengen ligger i et felles "returbuffer" for alle get-rutiner i fyba.
    Dette blir ødelagt ved neste kall til en "get-rutine". For å ta vare på
    strengen må den kopieres over til egen streng. (Bruk strcpy).
    Parameters:
    Type     Name        I/O  Explanation
    -----------------------------------------------------------------------------
    char    *pszFil       i   Fullstendig filnavn
    char    *sosi_navn    i   SOSI-navn det skal finnes verdi til
    short   *sett_nr     i/u  i: "Sett nummer"(linjenummer) for start søking (min 1)
                              u: Ved tilslag returneres "Sett nummer" for
                                 tilslaget.
    char    *para_peker   r   Peker til parameter-streng avslutta med '/0'.
                              Hvis SOSI-navnet ikke er funnet returneres NULL.
    Usage:
    para_peker = HO_GetVal(fil,sosi_navn,&sett_nr);
    	=============================================================================

    SK_EntPnt_FYBA char *HO_GetVal(const char *pszFil,char *sosi_navn,short *sett_nr)

## HO_GetTrans

Finner .TRANSPAR i hodet

    =============================================================================
    Purpose:
    Henter transformasjonsparametrene fra filhodet.
    OBS! Denne rutinen opprettholdes bare for bakoverkompatibilitet.
         For nye programmer bør HO_GetTransEx benyttes. HO_GetTransEx er
         kompatibel med nye versjoner av SOSI.
    Parameters:
    Type     Name       I/O   Explanation
    -----------------------------------------------------------------------------
    char    *pszFil      i   Fullstendig filnavn
    short   *koosys      u   Koordinatsystem
    double  *origo_a     u   ..ORIGO-AUST
    double  *origo_n     u   ..ORIGO-NORD
    double  *enhet       u   ...ENHET
    double  *enhet_h     u   ...ENHET-H
    double  *enhet_d     u   ...ENHET-D
    short    sStatus     r   UT_TRUE, eller UT_FALSE.
    Usage:
    sStatus = HO_GetTrans(fil,&koosys,&origo_a,&origo_n,&enhet,&enhet_h,&enhet_d);
       =============================================================================

    SK_EntPnt_FYBA short HO_GetTrans(const char *pszFil,short *koosys,double *origo_a,
    					  double *origo_n,double *enhet,double *enhet_h,double *enhet_d)

## HO_GetTransEx

Finner .TRANSPAR i hodet

    =============================================================================
    Purpose:
    Henter ut innholdet under ..TRANSPAR fra fra filhodet.
    Parameters:
    Type            Name      I/O  Explanation
    --------------------------------------------------------------------------
    char           *pszFil     i   Fullstendig filnavn
    unsigned short *pusMaske  iu   [Inn] Styrer hvilke deler av TRANSPAR som skal hentes
                                   [Ut] Viser hvilke deler av TRANSPAR som er funnet/hentet.
                                   Følgende konstanter er definert:
                                     LC_TR_ALLT - Alle deler av ..TRANSPAR hentes
                                     LC_TR_KOORDSYS - Koordsys
                                     LC_TR_TRANSSYS - Transsys
                                     LC_TR_GEOSYS - Geosys
                                     LC_TR_GEOKOORD - Geokoord
                                     LC_TR_ORIGO - Origo-nø
                                     LC_TR_ENHET - Enhet
                                     LC_TR_ENHETH - Enhet-h
                                     LC_TR_ENHETD - Enhet-d
                                     LC_TR_VERTDATUM - Vert-datum
                                     LC_TR_VERTINT - Vert-int
                                     LC_TR_VERTDELTA - Vert-delta
    LC_TRANSPAR *    pTrans    iu   Peker til struktur som skal motta ..TRANSPAR informasjonen.
    short           sStatus   r    Status: UT_TRUE=OK, UT_FALSE=feil (ikke funnet).
    Usage:
    unsigned short usMaske = LC_TR_ALLT;
    LC_TRANSPAR Trans;
    ist = HO_GetTransEx("Test.sos",&usMaske,&Trans);
    ==========================================================================

    SK_EntPnt_FYBA short HO_GetTransEx(const char *pszFil,unsigned short *pusMaske, LC_TRANSPAR * pTrans)

## HO_GetOmr

Finner ..OMRÅDE i hodet

    =============================================================================
    Purpose:
    Henter områdeangivelsen fra filhodet.
    Parameters:
    Type     Name        I/O   Explanation
    -----------------------------------------------------------------------------
    char    *pszFil      i   Fullstendig filnavn
    double  *nv_a        u
    double  *nv_n        u
    double  *oh_a        u
    double  *oh_n        u
    short    sStatus     r   UT_TRUE, eller UT_FALSE.
    Usage:
    sStatus = HO_GetOmr(pszFil,&nv_a,&nv_n,&oh_a,&oh_n);
    	=============================================================================

    SK_EntPnt_FYBA short HO_GetOmr(const char * pszFil,double *nv_a,double *nv_n,double *oh_a,double *oh_n)

## HO_SjekkTegnsett

Sjekker tegnsett på SOSI-filen

    =============================================================================
    Purpose:
    Sjekker faktisk tegnsett i .HODE.
    Parameters:
    Type    Name       I/O   Explanation
    -----------------------------------------------------------------------------
    char   *pszFil      i   Fullstendig filnavn
    short  *psTegnsett  u   Tegnsett, konstanter definert:
                               TS_UKJENT  = Fikk ikke sjekket tegnsett
                               TS_DOSN8   = DOS norsk 8-bits(standardverdi)
                               TS_ND7     = Norsk Data 7-bits
                               TS_DECM8   = DEC multinasjonal 8-bits
                               TS_ISO8859 = ISO8859-10 Norsk/samisk tegnsett
                               TS_DECN7   = DEC norsk 7-bits
    short   sStatus     r   Status:  0  = Ikke funnet
                                     1  = Ett tegnsett funnet
                                     2  = Flere tegnsett funnet
    Usage:
        sStatus = HO_SjekkTegnsett(fpek,tegnsett);
    =============================================================================

    SK_EntPnt_FYBA short HO_SjekkTegnsett(const char *pszFil,short *psTegnsett)

# 8 New Group

## LC_NyGr

Ny gruppe i basen

    ==========================================================================
    Purpose:
    Lager en ny gruppe i basen, og tildeler serienummer.
    Sjekker at gruppenavnet er lovlig i denne versjon av FYBA.
    Ved feil navn vil ".LINJE" bli valgt.
    Legger inn gruppenavn i buffer.
    Gruppen blir "aktuell" gruppe.
    Sjekker ledig plass både for indeks-fil og sosi-fil.
    Parameters:
    Type       Name    I/O   Explanation
    -----------------------------------------------------------------------------
    LC_FILADM  *pFil    i    Peker til FilAdm
    char       *sosi    i    Gruppenavn (Eks. ".KURVE")
    LC_BGR *     pBgr    iu   Tildelt gruppenummer i basen
                             (Bgr.lNr=INGEN_GRUPPE = Feil, ikke oppretta)
    long        snr     u    Tildelt serienummer
    gnavn       short   r    Gruppenavn. (Se under LC_RxGr)
                             INGEN_GRUPPE hvis det ikke er opprettet noen ny gruppe.
    Usage:
    gnavn = LC_NyGr (pFil,sosi,&Bgr,&snr);
       =============================================================================

    SK_EntPnt_FYBA short LC_NyGr (LC_FILADM *pFil,char *sosi,LC_BGR * pBgr,long *snr)

# 9 Direct Read/Write

## LC_RxGr

Les gruppe fra base

    ==========================================================================
    Purpose:
    Velger en gruppe som aktiv gruppe, og leser den fra SOSI-filen hvis den
    ikke er i RB fra før. (Styres også av les_sosi.)
    Hvis gruppen ikke finnes (sletta eller ulovlig gruppenummer) returneres
    ngi=0 og nko=0.
    Parameters:
    Type    Name    I/O  Explanation
    --------------------------------------------------------------------------
    LC_BGR * pBgr     i   Peker til fil- og gruppenummer.
    short   les_sosi i   Lesemetode: Følgende konstanter er definert:
                            LES_OPTIMALT   (0 = Les mest effektivt base/SOSI)
                            LES_SOSI       (1 = Les alltid fra SOSI-filen)
    short  *ngi      u   Antall linjer GINFO
    long   *nko      u   Antall koordinater
    unsigned short *info      u   Diverse informasjon. En sum av følgende:
                          GI_PINFO     = gruppen har PINFO
                          GI_NAH       = gruppen har høyde informasjon (..NØH)
                          GI_NAD       = gruppen har dybde informasjon (..NØD)
                          GI_KP        = gruppen har knutepunkt (...KP n)
                          GI_REF       = gruppen har referanser (.. eller ..REF)
                          GI_OY_REF    = gruppen har referanser med øy
                          GI_NGIS      = gruppen er tatt ut fra NGIS for oppdat.
                          GI_SLETTA    = gruppen er sletta (merka som sletta)
                          GI_READ_ONLY = gruppen kan ikke endres.
    short gnavn     r   Gruppenavn - Følgende konstanter er definert:
                                         INGEN_GRUPPE = Gruppen finnes ikke, ikke lest.
                                         L_SLUTT    =   (.SLUTT)
                                         L_PUNKT    =   (.PUNKT)
                                         L_LINJE    =   (.LINJE)
                                         L_KURVE    =   (.KURVE)
                                         L_BUE      =   (.BUE)
                                         L_BUEP     =   (.BUEP)
                                         L_SIRKEL   =   (.SIRKEL)
                                         L_SIRKELP  =   (.SIRKELP)
                                         L_KLOTOIDE =   (.KLOTOIDE)
                                         L_SVERM    =   (.SVERM)
                                         L_TEKST    =   (.TEKST)
                                         L_TRASE    =   (.TRASE)
                                         L_FLATE    =   (.FLATE)
                                         L_BEZIER   =   (.BEZIER)
                                         L_RASTER   =   (.RASTER)
                                         L_DEF      =   (.DEF)
                                         L_OBJDEF   =   (.OBJDEF)
                                         L_MLINJE   =   (.MLINJE)
                                         L_STRUKTUR =   (.STRUKTUR)
                                         L_OBJEKT   =   (.OBJEKT)
                                         L_SYMBOL   =   (.SYMBOL)
                                         L_HODE     =   (.HODE)

    Usage:
        gnavn = LC_RxGr(&Bgr,LES_OPTIMALT,&ngi,&nko,&info);
        if (info & GI_PINFO)        (gruppen har PINFO)
            ;
        if (info & GI_KP)           (gruppen har KP)
            ;
       ==========================================================================

    SK_EntPnt_FYBA short LC_RxGr(LC_BGR * pBgr,short les_sosi,short *ngi,long *nko,unsigned short *info)

## LC_WxGr

Skriv gruppe til base

    ==========================================================================
    Purpose:
    Skriver aktuell gruppe til tilhørende SOSI-fil.
    Brukerindeks og geografisk indeks oppdateres straks, uavhengig av kø.
    Ledig plass fram til neste gruppe blir blanket.
    Filhode blir ALLTID skrevet direkte til SOSI-filen.
    Parameters:
    Type  Name    I/O  Explanation
    ------------------------------------------------------------------------
    short k_stat   i   Skrivemetode:  Følgende konstanter er definert:
                         SKRIV_OPTIMALT = Skriv mest effektivt kø/SOSI
                         SKRIV_SOSI     = Skriv direkte til SOSI-filen
    short status   r   Status: UT_TRUE = OK
                               UT_FALSE = Ikke utført, pga. feil.
    Usage:
    LC_WxGr(k_stat)
       ==========================================================================

    SK_EntPnt_FYBA short LC_WxGr(short k_stat)

# 10 Sequential Read/Write

## LC_RsGr

Les gruppe sekvensielt

    ==========================================================================
    Purpose:
    Leser en datagruppe fra ekstern SOSI-fil inn i aktuell gruppe i ringbuffer.
    Rutinen tilsvarer put fra brukerprogram inn i ringbufferet, men rutinen
    tildeler selv nødvendig plass..
    Gruppen beholder serienummer tildelt i LC_NyGr.
    Brukerindeks og geografisk-indeks blir ikke oppdatert.
    (Dette skjer først når gruppen skrives til basen.)
    Parameters:
    Type             Name   I/O  Explanation
    --------------------------------------------------------------------------
    short           *rstat  iu   Lesestatus
                                   Inn: 1=Les fra starten, 0=Les neste
                                   Ut:  0=OK, -1=slutten av filen er nådd
    LC_FILADM       *pFil    i   Peker til FilAdm
    short           *ngi     u   Antall linjer GINFO
    long            *nko     u   Antall koordinater
    unsigned short  *info    u   Diverse informasjon. En "sum" av følgende:
                             GI_PINFO     = gruppen har PINFO
                             GI_NAH       = gruppen har høyde informasjon (..NØH)
                             GI_NAD       = gruppen har dybde informasjon (..NØD)
                             GI_KP        = gruppen har knutepunkt (...KP n)
                             GI_REF       = gruppen har referanser (.. eller ..REF)
                             GI_OY_REF    = gruppen har referanser med øy
                             GI_NGIS      = gruppen er tatt ut fra NGIS for oppdat.
                             GI_SLETTA    = gruppen er sletta (merka som sletta)
                             GI_READ_ONLY = gruppen kan ikke endres.
    long             gml_snr u    Serienummer gruppen hadde på ekstern fil
    short            gnavn   r    Gruppenavn. (Se under LC_RxGr)
    Usage:
        gnavn = LC_RsGr(&rstat,pFil,&ngi,&nko,&info,&gml_snr);
        if (info & GI_PINFO)        (gruppen har PINFO)
            ;
        if (info & GI_KP)           (gruppen har KP)
            ;
       ==========================================================================

    SK_EntPnt_FYBA short LC_RsGr(short *rstat,LC_FILADM *pFil,short *ngi,long *nko,
    				  unsigned short *info,long *gml_snr)

## LC_RsHode

Les filhode sekvensiellt

    ==========================================================================
    Purpose:
    Leser et filhode fra ekstern SOSI-fil inn i aktuell gruppe i ringbuffer.
    Rutinen tilsvarer put fra brukerprogram inn i ringbufret, men rutinen
    tildeler selv nødvendig plass i RB.
    Denne rutinen er stort sett lik LC_RsGr, men LC_RsHode forandrer
    ikke aktuell filposisjon på den sekvensielle filen.
    Gruppen beholder serienummer hodet hadde på SOSI-filen.
    Parameters:
    Type             Name   I/O  Explanation
    --------------------------------------------------------------------------
    LC_FILADM       *pFil    i   Peker til FilAdm
    short           *ngi     u   Antall linjer GINFO
    long            *nko     u   Antall koordinater
    unsigned short  *info    u   Diverse informasjon. En "sum" av følgende:
                             GI_PINFO = gruppen har PINFO
                             GI_NAH   = gruppen har høyde informasjon (..NØH)
                             GI_NAD   = gruppen har dybde informasjon (..NØD)
                             GI_KP    = gruppen har knutepunkt (...KP n)
                             GI_REF   = gruppen har referanser (.. :n)
                             GI_OY_REF= gruppen har referanser med øy
    short            gnavn   r    Gruppenavn. (Se under LC_RxGr)
    Usage:
        gnavn = LC_RsHode(pFil,&ngi,&nko,&info);
       =============================================================================

    short LC_RsHode(LC_FILADM *pFil,short *ngi,long *nko,unsigned short *info)

## LC_WsGr

Skriv gruppe sekvensiellt

    =============================================================================
    Purpose:
    Skriver aktuell gruppe til ekstern, sekvensiell SOSI-fil.
    Parameters:
    Type       Name  I/O   Explanation
    -----------------------------------------------------------------------------
    LC_FILADM *pFil   i    Peker til FilAdm
    Usage:
    LC_WsGr(pFil);
       =============================================================================

    SK_EntPnt_FYBA void LC_WsGr(LC_FILADM *pFil)

## LC_WsGrPart

Skriv del av gruppe sekvensiellt

    ==========================================================================
    Purpose:
    Skriver en del av aktuell gruppe til ekstern, sekvensiell SOSI-fil.
    Parameters:
    Type       Name     I/O   Explanation
    --------------------------------------------------------------------------
    LC_FILADM *pFil      i    Peker til FilAdm
    long       fra_punkt i    Punktnummer for første koordinat som skal skrives.
                              (Lovlig:  1  <=  fra_punkt  <=  nko)
    long       antall    i    Antall koordinatlinjer som skal skrives.
                              (Lovlig:  0  <=  antall  <=  nko)
    Usage:
    LC_WsGrPart(pFil,fra_punkt,antall);
       ==========================================================================

    SK_EntPnt_FYBA void LC_WsGrPart(LC_FILADM *pFil,long fra_punkt,long antall)

## LC_EndreHode

Endre hodet på eksisterende SOSI-fil

    =============================================================================
    Purpose:
    Skriver aktuell gruppe til starten av sekvensiell SOSI-fil.
    Det er en forutsetning at aktuell gruppe er et filhode.
    Denne rutinen er stort sett lik LC_WsGr, men LC_EndreHode forandrer ikke
    aktuell filposisjon på den sekvensielle filen.
    OBS!
    Det må være nok ledig plass før neste gruppe for tilbakeskrivingen.
    Det er ikke mulig å forandre koordinatsystem, enhet eller origo på fil
    som inneholder data.
    Parameters:
    Type       Name      I/O   Explanation
    -----------------------------------------------------------------------------
    LC_FILADM *pFil       i    Peker til FilAdm
    short      oppdatert  r    Skrivestatus (1=OK, 0=Det er ikke plass
                                             til å skrive hodet)
    Usage:
    ist = LC_EndreHode(pFil);
       =============================================================================

    SK_EntPnt_FYBA short LC_EndreHode(LC_FILADM *pFil)

# 11 Delete Group

## LC_DelGr

Slett gruppe

    ==========================================================================
    Purpose:
    Fjerner aktuell gruppe fra basen.
    Grupper som er tatt ut fra NGIS for oppdatering blir ikke sletta fra
    SOSI-filen, men de blir merka som sletta. (LC_SetNgisModus avgjør da om
    disse kan leses.)
    Det er ikke mulig å slette grupper fra sekvensielle filer, eller grupper
    som er brukt i flater.
    Parameters:
    Type   Name    I/O   Explanation
    --------------------------------------------------------------------------
    short  sStatus  r    Status:  UT_TRUE  = OK
                                  UT_FALSE = feil, ikke sletta
    Usage:
    sStatus = LC_DelGr();
       ==========================================================================

    SK_EntPnt_FYBA short LC_DelGr(void)

# 12 Storing Back the Buffered Info to a SOSI File

## LC_Save

Tøm skrivekøa

    ==========================================================================
    Purpose:
    Skriver gruppene som ligger i skrivekø ut til SOSI-fil.
    Parameters: ingen
    Usage:
    LC_Save();
       ==========================================================================

    SK_EntPnt_FYBA void LC_Save(void)

# 13 Reserve Space in the Ring Buffer

These are functions to allocate space for Ginfo/coordinates in the ring buffer, and they must be called before data is added to the ring buffer with functions such as LC_PuGi and LC_PuTK Note: The active data group must first be read/selected with the functions LC_RxGr or LC_NyGr

## LC_InsGiL

Skyt inn GINFO-linjer

    =============================================================================
    Purpose:
    Skyter inn linjer GINFO-delen i en gruppe.
    Parameters:
    Type     Name    I/O   Explanation
    -----------------------------------------------------------------------------
    short    linje    i    Linjenummer linjen skal skytes inn forran.
                           (Lovlig: 1  til  ngi+1)
    short    antall   i    Antall linjer som skal skytest inn.
    short    ngi      r    Antall GINFO-linjer i gruppen etter innskuddet.
    Usage:
    ngi = LC_InsGiL(linje, antall);
       =============================================================================

    SK_EntPnt_FYBA short LC_InsGiL(short linje, short antall)

## LC_AppGiL

Heng på en GINFO-linje

    =============================================================================
    Purpose:
    Henger på en linje i GINFO-delen i en gruppe.
    Parameters:
    Type     Name    I/O   Explanation
    -----------------------------------------------------------------------------
    short    ngi      r    Antall GINFO-linjer i gruppen etter utvidelsen.
                           (Linjenumret på den tilføyde linjen.)
    Usage:
    ngi = LC_AppGiL();
       =============================================================================

    SK_EntPnt_FYBA short LC_AppGiL()

## LC_InsKoL

Skyt inn koordinatlinjer

    ==========================================================================
    Purpose:
    Skyter inn linjer koordinatdelen i en gruppe.
    Parameters:
    Type    Name    I/O   Explanation
    --------------------------------------------------------------------------
    long    linje    i    Linjenummer linjen skal skytes inn forran.
                           (Lovlig: 1  til  nko+1)
    long    antall   i    Antall linjer som skal skytest inn.
    long    nko      r    Antall koordinater i gruppen etter innskuddet.
    Usage:
    nko = LC_InsKoL(linje, antall);
       ==========================================================================

    SK_EntPnt_FYBA long LC_InsKoL(long linje, long antall)

## LC_AppKoL

Heng på en koordinatlinje

    ==========================================================================
    Purpose:
    Henger på en linje i koordinatdelen i en gruppe.
    Parameters:
    Type     Name    I/O   Explanation
    --------------------------------------------------------------------------
    long    nko      r    Antall koordinater i gruppen etter utvidelsen.
    Usage:
    nko = LC_AppKoL();
       ==========================================================================

    SK_EntPnt_FYBA long LC_AppKoL()

## LC_DelGiL

Fjern GINFO-linjer

    =============================================================================
    Purpose:
    Fjerner linjer i GINFO-delen i en gruppe.
    Parameters:
    Type     Name    I/O   Explanation
    -----------------------------------------------------------------------------
    short    linje    i    Første linjenummer som skal fjernes.
                           (Lovlig: 2  til  ngi)
    short    antall   i    Antall linjer som skal fjernes.
    short    ngi      r    Antall GINFO-linjer i gruppen etter setting.
    Usage:
    ngi = LC_DelGiL(linje, antall);
       =============================================================================

    SK_EntPnt_FYBA short LC_DelGiL(short linje, short antall)

## LC_DelKoL

Fjern koordinatlinjer

    =============================================================================
    Purpose:
    Fjerner linjer koordinatdelen i en gruppe.
    Parameters:
    Type     Name    I/O   Explanation
    -----------------------------------------------------------------------------
    long    linje    i    Første linje som skal fjernes.
                           (Lovlig: 1  til  nko)
    long    antall   i    Antall linjer som skal fjernes.(Max resten av gruppen)
    long    nko      r    Antall koordinater i gruppen etter blanking.
    Usage:
    nko = LC_DelKoL(linje, antall);
       =============================================================================

    SK_EntPnt_FYBA long LC_DelKoL(long linje, long antall)

# 14 Add Data to the Ring Buffer

These are functions to add data to the ring buffer. The functions interact with the current data group. It is assumed that there is allocated place with the functions in the previous chapter. (LC_AppGiL,LC_InsGiL,LC_AppKoL,LC_InsKoL) Note: After having added all the desired data, it is required to save the data with LC_WxGr.

## 14.1 Copying group

## LC_CopyGr

Kopier gruppe

    ==========================================================================
    Purpose:
    Kopierer fra en annen gruppe inn i aktuell gruppe i buffer.
    Rutinen tilsvarer put fra brukerprogram inn i bufret, men rutinen
    tildeler selv nødvendig plass.
    Gruppen beholder serienummer tildelt i LC_NyGr.
    Geografisk-indeks blir ikke oppdatert før gruppen skrives til basen.
    Enhet blir oppdatert slik at opprinnelig enhet blir bevart. Om nødvendig
    legges det inn ..ENHET i GINFO.
    Kvalitet og dato blir oppdatert hvis SOSI-VERSJON < 4.00.
    Hvis det er filhode som kopieres skjer det ingen endring av egenskaper.
    Parameters:
    Type     Name    I/O   Explanation
    --------------------------------------------------------------------------
    LC_BGR  *pBgr     i    Gruppenummer det skal kopieres fra.
    short    ngis     i    Behandling for ..NGIS-FLAGG:
                             OPPDATER_NGIS (0) = ..NGIS-FLAGG oppdateres i henhold
                                                 til hodet i filen det kopieres til.
                             BEVAR_NGIS (1) = ..NGIS-FLAGG bevares uforandret i kopien
    short    ngi      u    Antall linjer GINFO
    long     nko      u    Antall koordinater
    unsigned short    info     u    Diverse informasjon. (Se under LC_RxGr)
    short    gnavn    r    Gruppenavn. (Se under LC_RxGr)
    Usage:
        gnavn = LC_CopyGr(&Bgr,ngis,&ngi,&nko,&info)
       ==========================================================================

    SK_EntPnt_FYBA short LC_CopyGr (LC_BGR * pBgr,short ngis,short *ngi,long *nko,unsigned short *info)

## LC_CopyCoord

Kopier koordinater fra annen gruppe

    ===========================================================================
    Purpose:
    Kopierer koordinater fra en annen gruppe inn i aktuell gruppe i ringbuffer.
    De kopierte koordinatene kommer som en utvidelse av gruppen.
    Rutinen tilsvarer put fra brukerprogram inn i ringbufret, men rutinen
    tildeler selv nødvendig plass i RB.
    Geografisk-indeks blir ikke oppdatert før gruppen skrives til basen.
    Kvalitet og enhet blir automatisk oppdatert slik at gruppene ikke
    mister informasjon.
    Parameters:
    Type    Name     I/O   Explanation
    -----------------------------------------------------------------------------
    LC_BGR *pBgr      i    Gruppenummer det skal kopieres fra.
    short   retning   i    Buffer-retning:
                                   HENT_FORRFRA ( 1) = vanlig,
                                   HENT_BAKFRA  (-1) = buffer skal snues.
    long   til_linje i    Linjenummer linjen skal skytes inn forran.
                           (Lovlig: 1  til  nko+1)
    short   ngi       u    Antall GINFO-linjer
    long    nko       u    Antall koordinater
    short   info      u    Diverse informasjon. (Se under LC_RxGr)
    short   sStatus   r    Status: UT_TRUE=OK, UT_FALSE=ikke utført.
    Usage:
    sStatus = LC_CopyCoord(bgr,retning,til_linje,&ngi,&nko,&info);
       =============================================================================

    SK_EntPnt_FYBA short LC_CopyCoord(LC_BGR * pBgr,short retning,long til_linje,short *ngi,
                      long *nko,unsigned short *info)

## 14.2 Group Information

## LC_PutGi

Put GINFO-linje

    ==========================================================================
    Purpose:
    Legger inn GINFO-linje rent generellt.
    Dette omfatter også nytt gruppenavn (GINFO-linje 1)
    Ønsker du å endre serienummer må LC_PutSn benyttes.
    Referansenummer legges inn med LC_PutRef.
    Blanke på starten og slutten blir skrella vekk, og SOSI-navnet blir
    konvertert til "store" bokstaver, .ellers lagres det slik det er.
    Parameters:
    Type     Name    I/O   Explanation
    --------------------------------------------------------------------------
    short    lin_nr   i    Linjenummer i GINFO   (1 er første linje)
    char     *ginfo   i    GINFO-streng avslutta med '/0'
    Usage:
    LC_PutGi(lin_nr,ginfo);
    	==========================================================================

    SK_EntPnt_FYBA void LC_PutGi(short lin_nr, const char *pszGinfo)

## LC_PutGP

Put GINFO-parameter

    ==========================================================================
    Purpose:
    Legger inn et SOSI-navn med verdi.
    Denne rutinen kan brukes til å legge inn ginfo med nytt SOSI-navn.
    Rutinen kan endre antall ginfo-linjer.
    Parameters:
    Type     Name        I/O   Explanation
    --------------------------------------------------------------------------
    char     sosi_navn    i    Sosi-navn det skal legges inn verdi til
    char     verdi        i    Streng som skal legges inn.
    short   *linje_nr     u    Linjenummer for endringen.
    short    ngi          r    Ant. ginfo-linjer etter  endringen.
    Usage:
    ngi = LC_PutGP(sosi_navn,verdi,&linje_nr);
       ==========================================================================

    SK_EntPnt_FYBA short LC_PutGP(const char *sosi_navn,const char *verdi,short *linje_nr)

## LC_AppGP

Legg til GINFO-parameter

    ==========================================================================
    Purpose:
    Legger til et SOSI-navn med verdi i GINFO.
    Lik LC_PutGP, men legger alltid til ny linje i ginfo.
    Parameters:
    Type     Name        I/O   Explanation
    --------------------------------------------------------------------------
    char     sosi_navn    i    Sosi-navn det skal legges inn verdi til
    char     verdi        i    Streng som skal legges inn.
    short   *linje_nr     u    Linjenummer for endringen.
    short    ngi          r    Ant. ginfo-linjer etter  endringen.
    Usage:
    ngi = LC_AppGP(sosi_navn,verdi,&linje_nr);
       ==========================================================================

    SK_EntPnt_FYBA short LC_AppGP(const char *sosi_navn,const char *verdi,short *linje_nr)

## LC_UpdateGP

Endre GINFO-parameter

    ==========================================================================
    Purpose:
    Legger inn parametren til et SOSI-navn.
    Rutinen handterer at det er flere SOSI-navn på samme linje.
    OBS! Denne rutinen kan ikke brukes til å legge inn nytt SOSI-navn.
    Parameters:
    Type     Name        I/O   Explanation
    --------------------------------------------------------------------------
    short    linje_nr     i    Linjenummer som skal endres.
    char     sosi_navn    i    Sosi-navn det skal legges inn verdi til
    char     verdi        i    Streng som skall legges inn
    short    ist          r    1=ok, 0=navnet er ikke funnet
    Usage:
    ist = LC_UpdateGP(linje_nr,sosi_navn,verdi);
       ==========================================================================

    SK_EntPnt_FYBA short LC_UpdateGP(short linje_nr,const char *sosi_navn,const char *verdi)

## LC_UpdateGiEnhet

Oppdater ..ENHET i GINFO

    ==========================================================================
    Purpose:
    Setter koordinat-enhet for gruppen.
    Oppdaterer ..ENHET / ..ENHET-H / ..ENHET-D i GINFO.
    Rutinen handterer selv tildeling eller sletting av GINFO-linje.
    Hvis verdien er lik filhodets verdi blir det ikke lagt inn verdi i GINFO.
    Enhet = 0.0 = bruk filhodets enhet, og fører til at det ikke legges inn
    i GINFO. Eventuell eksisterende linje jgernes.
    Parameters:
    Type        Name    I/O   Explanation
    --------------------------------------------------------------------------
    LC_FILADM * pFil     i    Peker til FilAdm
    double      enhet    i    Grunnriss-enhet
    double      enhet_h  i    Høyde-enhet
    double      enhet_d  i    Dybde-enhet
    ngi         short    r    Antall GINFO-linjer etter oppdatering
    Usage:
    ngi = LC_UpdateGiEnhet(pFil,enhet,enhet_h,enhet_d);
       ==========================================================================

    SK_EntPnt_FYBA short LC_UpdateGiEnhet(LC_FILADM *pFil,double enhet,double enhet_h,double enhet_d)

## LC_UpdateGiKvalitet

Oppdaterer ..KVALITET i Ginfo

    ==========================================================================
    Purpose:
    Oppdaterer GINFO med ..KVALITET
    Parameters:
    Type       Name            I/O  Explanation
    --------------------------------------------------------------------------
    Parameters:
    LC_FILADM *pFil              i  Peker til FilAdm for sosifil kvalitet skal
                                    testes mot.
    short      sMetode           i  Metode i ..KVALITET
    long       lNoyaktighet      i  Nøyaktighet i ..KVALITET
    short      sSynbarhet        i  Synbarhet i ..KVALITET
    short      sHoydeMetode      i  HøydeMetode i ..KVALITET
    long       lHoydeNoyaktighet i  HøydeNøyaktighet i ..KVALITET
    short      ngi               r  Antall linjer i ginfo.
    Usage:
         ngi = LC_UpdateGiKvalitet(pFil,sMetode,lNoyaktighet,sSynbarhet,
                                   sHoydeMetode,lHoydeNoyaktighet);
    ==========================================================================

    SK_EntPnt_FYBA short LC_UpdateGiKvalitet(LC_FILADM *pFil,short sMetode,long lNoyaktighet,
                              short sSynbarhet,short sHoydeMetode,long lHoydeNoyaktighet)

## LC_UpdatePiKvalitet

Oppdaterer ...KVALITET i Pinfo

    ==========================================================================
    Purpose:
    Oppdaterer PINFO med ...KVALITET
    Parameters:
    Type        Name             I/O   Explanation
    --------------------------------------------------------------------------
    LC_FILADM * pFil              i  Peker til FilAdm for sosifil kvalitet
                                     skal testes mot.
    long        pnr               i  Punktnummer som skal oppdateres.
    short       sMetode           i  Metode i ..KVALITET
    long        lNoyaktighet      i  Nøyaktighet i ..KVALITET
    short       sSynbarhet        i  Synbarhet i ..KVALITET
    short       sHoydeMetode      i  HøydeMetode i ..KVALITET
    long        lHoydeNoyaktighet i  HøydeNøyaktighet i ..KVALITET
    short       sStatus           r  UT_TRUE = OK,
                                     UT_FALSE = ikke utført (for lite plass tilgjengelig)
    Usage:
    sStatus = LC_UpdatePiKvalitet(pFil,pnr,sMetode,lNoyaktighet,sSynbarhet,
                                  sHoydeMetode,lHoydeNoyaktighet)
    ==========================================================================

    SK_EntPnt_FYBA short LC_UpdatePiKvalitet(LC_FILADM *pFil,long pnr,short sMetode,long lNoyaktighet,
                              short sSynbarhet,short sHoydeMetode,long lHoydeNoyaktighet)

## LC_OppdaterEndret

Oppdater ..NGIS-FLAGG

    ==========================================================================
    Purpose:
    Oppdaterer ..NGIS-FLAGG i GINFO og ajourfører interne tabeller.
    Hvis endring = O_GINFO oppateres tabellene i forhold til
    eksisterende GINFO.
    Parameters:
    Name     Type   I/O  Explanation
    --------------------------------------------------------------------------
    endring  short   i   Kode for endring:
                          O_GINFO   (0) = Oppdater interne tabeller i fht. GINFO
                          O_ENDRET  (1) = Merk for endret og oppdat. tab.
                          O_SLETTET (2) = Merk for slettet og oppdat. tab.
    Usage:
    LC_OppdaterEndret(O_ENDRET);
    =============================================================================

    SK_EntPnt_FYBA void LC_OppdaterEndret(short endring)

## LC_DelGiName

Fjerner egenskap fra GINFO

    ==========================================================================
    Purpose:
    Fjerner alle forekomster av gitt egenskap (SOSI-navn) fra GINFO.
    Parameters:
    Type     Name             I/O   Explanation
    --------------------------------------------------------------------------
    char    *pszEgenskapName   i    SOSI-navn som skal slettes
    short    ngi               r    Antall GINFO-linjer i gruppen etter setting
    Usage:
    ngi = LC_DelGiName("..RADIUS");
       ==========================================================================

    SK_EntPnt_FYBA short LC_DelGiName(char *pszEgenskapName)

## LC_FinnNivo

Beregn nivå

    ==============================================================
    Purpose:
    Teller antall prikker i starten på egenskapsnavn.
    PARAMETERLISTE:
    Type     Name      I/O   Merknad
    -------------------------------------------------------------
    char    *pszGinfo   i    Streng med egenskapsnavn i starten
    short    sNivo      r    Antall prikker
    Usage:
    sNivo = LC_FinnNivo(pszGinfo);
      ================================================================

    SK_EntPnt_FYBA short LC_FinnNivo(const char * pszName)

## 14.3 Serial Number and Reference Number

## LC_PutSn

Put Serienummer

    ==========================================================================
    Purpose:
    Legger inn nytt serienummer på aktuell gruppe.
    Parameters:
    Type     Name    I/O   Explanation
    --------------------------------------------------------------------------
    long     snr      i    Serienummer
    Usage:
    LC_PutSn(snr);
       ==========================================================================

    SK_EntPnt_FYBA void LC_PutSn(long snr)

## LC_PutRef

Legger inn referanser i GINFO

    ==========================================================================
    Purpose:
    Legger inn et array med referanser til GINFO i aktuell gruppe.
    Parameters:
    Type     Name      I/O   Explanation
    --------------------------------------------------------------------------
    long     ref_array  i    Gruppenummer for refererte grupper.
                             Start øy, og slutt øy angis ved fiktive gruppenr.
                             Følgende konstanter er definert:
                                START_OY =  9999999L = Start øy.
                                SLUTT_OY = -9999999L = Slutt øy.
    long     ant_ref    i    Antall linjer i ref_array.
    short    *ngi       r    Antall linjer GINFO
    Usage:
        ngi = LC_PutRef(ref_array,ant_ref);
    ==========================================================================

    SK_EntPnt_FYBA short LC_PutRef(long *ref_array,long ant_ref)

## 14.4 Coordinates

## LC_PutTK

Put koordinat

    ==========================================================================
    Purpose:
    Legger inn et punkts koordinater (n,ø) i meter i terreng
    Parameters:
    Type    Name      I/O   Explanation
    --------------------------------------------------------------------------
    long   punkt_nr   i    Punktnummer (1 er første punkt)
    double  aust       i    Øst-koordinat i meter i terreng
    double  nord       i    Nord-koordinat i meter i terreng
    Usage:
    LC_PutTK(punkt_nr,aust,nord);
       ==========================================================================

    SK_EntPnt_FYBA void LC_PutTK(long punkt_nr,double aust,double nord)

## LC_PutTH

Put høyde

    ==========================================================================
    Purpose:
    Legger inn et punkts høyde i meter i terreng
    Parameters:
    Type    Name      I/O   Explanation
    --------------------------------------------------------------------------
    long    punkt_nr   i    Punktnummer (1 er første punkt)
    double  hoyde      i    Høyde i meter i terreng. Konstanten
                            HOYDE_MANGLER (-999.999) angir at punktet ikke
                            har høydeverdi.
    Usage:
    LC_PutTH(punkt_nr,hoyde);
       ==========================================================================

    SK_EntPnt_FYBA void LC_PutTH(long punkt_nr, double hoyde)

## LC_PutTD

Put dybde

    ==========================================================================
    Purpose:
    Legger inn et punkts dybde i meter i terreng
    Parameters:
    Type    Name      I/O   Explanation
    --------------------------------------------------------------------------
    long    punkt_nr   i    Punktnummer (1 er første punkt)
    double  hoyde      i    Dybde i meter i terreng. Konstanten
                            HOYDE_MANGLER (-999.999) angir at punktet ikke
                            har dybdeverdi.
    Usage:
    LC_PutTD(punkt_nr,dybde);
       ==========================================================================

    SK_EntPnt_FYBA void LC_PutTD(long punkt_nr, double dybde)

## 14.5 Connection Nodes

## LC_PutKp

Put knutepunkt

    ==========================================================================
    Purpose:
    Legger inn knutepunktverdi i punktet. Ny verdi skrives over eksisterende
    verdi. (Multiple KP er ikke mulig.)
    Parameters:
    Type    Name      I/O   Explanation
    --------------------------------------------------------------------------
    long   punkt_nr   i    Punktnummer (1 er første punkt)
    short   kp         i    Knutepunkt (lovlig verdi 0 - SHRT_MAX)
                            kp == 0 fjerner knutepunkt.
    Usage:
    LC_PutKp(punkt_nr,kp);
       ==========================================================================

    SK_EntPnt_FYBA void LC_PutKp(long punkt_nr, short kp)

## 14.6 Node information

## LC_PutPi

Put PINFO

    ==========================================================================
    Purpose:
    Legger inn hele punktinformasjonen på angitte punkt
    Ny verdi skriver over eksisterende verdi.
    Verdi "" fjerner eksisterende PINFO.
    Knutepunkt legges inn med LC_PutKp.
    Parameters:
    Type    Name      I/O   Explanation
    --------------------------------------------------------------------------
    long    punkt_nr   i    Punktnummer (1 er første punkt)
    char   *pinfo      i    PINFO-streng som skal legges inn
                            (Knutepunkt regnes ikke som pinfo)
    short   sStatus    r    UT_TRUE = OK,
                            UT_FALSE = ikke utført (for lite plass tilgjengelig)
    Usage:
    sStatus = LC_PutPi(punkt_nr,pinfo);
       ==========================================================================

    SK_EntPnt_FYBA short LC_PutPi(long punkt_nr, const char *pinfo)

# 15 Get Data from the Ring Buffer

These are functions to get data from the ring buffer. They interact with the current data group. The current data group may be chosen either by reading from a SOSI file or by establishing a new SOSI file.

## 15.1 General Value for a SOSI Name

Regarding the general mechanism in the SOSI file where the information can either be in HODE, GINFO or PINFO, there's a need for a functions that checks everything to find the actual value for this group. This applies mainly for quality information, date etc.

## 15.2 Group Information

## LC_GetGi

Get GINFO-linje

    ==========================================================================
    Purpose:
    Henter en GINFO-linje som en streng rent generellt.
    Dette omfatter også serienummer og referansenummer.
    Strengen ligger i et felles "returbuffer" for alle get-rutiner i fyba.
    Dette blir ødelagt ved neste kall til en "get-rutine". For å ta vare på
    strengen må den kopieres over til egen streng. (Bruk strcpy).
    Parameters:
    Type     Name    I/O   Explanation
    --------------------------------------------------------------------------
    short    lin_nr   i    Linjenummer i GINFO   (1 er første linje)
    char    *ginfo    r    Peker til GINFO-streng avslutta med '/0'
    Usage:
    ginfo = LC_GetGi(lin_nr);
       ==========================================================================

    SK_EntPnt_FYBA char *LC_GetGi(short lin_nr)

## LC_GetGP

Get GINFO-parameter

    ==========================================================================
    Purpose:
    Henter parametrene til et SOSI-navn.
    Strengen ligger i et felles "returbuffer" for alle get-rutiner i fyba.
    Dette blir ødelagt ved neste kall til en "get-rutine". For å ta vare på
    strengen må den kopieres over til egen streng. (Bruk UT_StrCopy).
    Leddnummer, delstreng,skilletegn og formateringskode kan inngå som
    forlengelse av SOSI-navnet.
    Leddnummer for flerleddet parameter angis ved #n.
    Eks: ..GID#2 er bruksnummer.
    Delstreng angis ved: [start:slutt].
    NB! 1 er første tegn.
    Sluttposisjon 0 betyr at resten av strengen skal brukes.
    Eks: ..STRENG[2:0]  Posisjon 2 og resten av strengen.
    Skilletegn for flerleddet GINFO. Dette angis ved ^x hvor x er det tegnet
    som skal skrives ut mellom leddene.
    Formateringskode. Dette brukes for å angi plassering av komma og antall
    desimaler i desimaltall.
    Eks: ..AREAL%-3.2    Betyr at ..AREAL fra GINFO skal formateres slik:
    Komma flyttes 3 posisjoner til venstre (divisjon med tusen) og resultatet
    presenteres avrundet til 2 desimaler.
    Eks: ..DYBDE£-1.2    Betyr at ..DYBDE fra GINFO skal formateres slik:
    Komma flyttes 1 posisjon til venstre (divisjon med ti) og resultatet
    presenteres med 2 desimaler uten avrunding. Spesielt for dybdeverdier.
    Disse tilleggene kan kombineres, slik at  ..GID#2[1:2] betyr at det er
    tegn nummer 1 og 2 i det andre leddet (bruksnumret) som skal brukes.
    Parameters:
    Type     Name        I/O   Explanation
    --------------------------------------------------------------------------
    char     sosi_navn    i    SOSI-navn det skal finnes verdi til.
                               Leddnummer, posisjon, skilletegn
                               og formateringskode kan inngå
                               som forlengelse av navnet.
                               OBS! Store og små bokstaver er signifikante.
    short   *forste_linje iu   GINFO-linjenummer for start søking
                               (1 er første linje i GINFO.)
                               Ved tilslag returneres linjenummer for tilslaget.
    short    siste_linje  i    Siste GINFO-linje det skal søkes i.
    char    *para_peker   r    Peker til parameter-streng avslutta med '/0'.
                               Hvis SOSI-navnet ikke er funnet returneres NULL.
    Usage:
    para_peker = LC_GetGP(sosi_navn,&forste_linje,siste_linje);
       ==========================================================================

    SK_EntPnt_FYBA char *LC_GetGP(const char *sosi_navn,short *forste_linje,short siste_linje)

## 15.3 Serial Number and Reference Number

## LC_GetSn

Get serienummer

    ==========================================================================
    Purpose:
    Henter serienummer for aktuell gruppe.
    Parameters:
    Type  Name  I/O  Explanation
    --------------------------------------------------------------------
    long  snr    r   Serienr.  (INGEN_GRUPPE = ingen aktuell gruppe)
    Usage:
    snr = LC_GetSn();
       ==========================================================================

    SK_EntPnt_FYBA long LC_GetSn(void)

## LC_GetRef

Hent referanser fra GINFO

    ==========================================================================
    Purpose:
    Henter ut et array med referanser fra GINFO i aktuell gruppe.
    Parameters:
    Type     Name      I/O   Explanation
    --------------------------------------------------------------------------
    long    *ref_array  u    Serienr. for refererte grupper.
                             Start øy, og slutt øy angis ved fiktive gruppenr.
                             Følgende konstanter er definert:
                                START_OY =  9999999L = Start øy.
                                SLUTT_OY = -9999999L = Slutt øy.
    long     max_ref    i    Max antall linjer i ref_array.
    short   *gilin      i/u  linje for start referanselesing
    short   *refpos     i/u  posisjon i linja for neste innlegging i array.
    long     ant_ref    r    Antall linjer brukt i ref_array.
    Usage:
        ant_ref = LC_GetRef(ref_array,max_ref,&gilin,&refpos);
    ==========================================================================

    SK_EntPnt_FYBA long LC_GetRef(long *ref_array,long max_ref,short *gilin,short *refpos)

## LC_InqAntRef

Spørr om antall referanser

    ==========================================================================
    Purpose:
    Spørr om antall referanser i GINFO i aktuell gruppe.
    Dette kallet kan brukes til å finne hvor stor array som må allokeres før
    kall til LC_GetRef.
    Parameters:
    Type     Name      I/O   Explanation
    --------------------------------------------------------------------------
    long    ant_ref     r    Antall referanser i GINFO.
                               OBS! Start- og sluttparantes for øy blir regnet
                               som egne referanser.
    Usage:
        long lAntRef;
        short sGiLin,sRefPos;
        long *plRefArray;
        lAntRef = LC_InqAntRef();
        plRefArray = (long *) UT_MALLOC(lAntRef * sizeof(long));
        sGiLin = 2;
        sRefPos = 0;
        LC_GetRef(plRefArray,lAntRef,&sGiLin,&sRefPos);
    ==========================================================================

    SK_EntPnt_FYBA long LC_InqAntRef(void)

## LC_InitGetRefFlate

Initierer status for GetRefFlate

    ==========================================================================
    Purpose:
    Initierer status for GetRefFlate.
    Parameters:
    Type           Name     I/O   Explanation
    --------------------------------------------------------------------------
    LC_GRF_STATUS * pRefStat  iu   Struktur med statusopplysninger.
    Usage:
        LC_InitGetRefFlate(pGrfStat,pBgr);
    ==========================================================================

    SK_EntPnt_FYBA void LC_InitGetRefFlate(LC_GRF_STATUS * pGS)

## LC_GetRefFlate

Hent referanser for flate fra GINFO

    ==========================================================================
    Purpose:
    Henter ut et array med referanser for flate fra GINFO i aktuell gruppe.
    Parameters:
    Type            Name      I/O  Explanation
    -------------------------------------------------------------------------
    LC_GRF_STATUS *  GrfStat    iu  Struktur med statusopplysninger.
    unsigned short  usHent     i   Hva skal hentes:
                                    GRF_YTRE  = Ytre avgrensing
                                    GRF_INDRE = Indre avgrensing, øyer
                                        (kan kombineres med | (or).)
    long           *ref_array  u   GRUPPENUMMER for refererte grupper.
    unsigned char  *ref_status u   Status for gruppene i ref_array.
                                    LC_MED_DIG = Brukes MED dig retning.
                                    LC_MOT_DIG  = Brukes MOT dig retning.
                                    GRF_START_OY     = Første gruppe i øy
                                    GRF_SLUTT_OY     = Siste gruppe i øy
    long            max_ref    i   Max antall linjer i ref_array og ref_status.
    long           ant_ref    r   Antall linjer brukt i ref_array.
                                   0 viser at hele flata er behandla.
    Usage:
       #define  MAX_REF  20
       long ref_arr[MAX_REF];
       char ref_status[MAX_REF];
       long ant_ref;
       LC_GRF_STATUS GrfStat;
       LC_InitGetRefFlate(&GrfStat);
       ant_ref = LC_GetRefFlate(&GrfStat,GRF_YTRE,ref_arr,ref_status,MAX_REF);
       do {
          if (ant_ref > 0) {
             .
             Behandle ytre avgrensing
             .
          }
          [if (ant_ref < MAX_REF)  break;]
          ant_ref = LC_GetRefFlate(&GrfStat,GRF_YTRE,ref_arr,ref_status,MAX_REF);
       } while (ant_ref > 0);
       LC_InitGetRefFlate(&GrfStat);
       ant_ref = LC_GetRefFlate(&GrfStat,GRF_INDRE,ref_arr,ref_status,MAX_REF);
       do {
          if (ant_ref > 0) {
             .
             Behandle indre avgrensing (øy)
             .
          }
          [if (ant_ref < MAX_REF)  break;]
          ant_ref = LC_GetRefFlate(&GrfStat,GRF_INDRE,ref_arr,ref_status,MAX_REF);
       } while (ant_ref > 0);
    ==========================================================================

    SK_EntPnt_FYBA long LC_GetRefFlate(LC_GRF_STATUS * GrfStat,unsigned short usHent,long *ref_array,
                         unsigned char *ref_status,long max_ref)

## LC_ErLinjeRefLin

Sjekk om linje inneholder referanser

    =======================================================================
    Usage:
    sRefLin = LC_ErLinjeRefLin(gp,sRefLin);
    parametere:
    Type    Name        I/O  Explanation
    -----------------------------------------------------------------------
    char   *pszGinfoLin  i   Peikar til GINFO-linje
    short   sRefLin      i   Flagg som viser om forrige linje inneholdt referanser
    short   sRefLin      r   Flagg som viser om aktuell linje inneholdt referanser
    Sjekk om linje er linje med referanser.
    =======================================================================

    short LC_ErLinjeRefLin(char *pszSosiLin, short sRefLin)

## 15.4 Special get functions

## LC_GetBuePar

Beregner parametre som definerer sirkelbue

    ============================================================================
    Purpose:                                                   fi
    Sirkelbue defineres i SOSI ved en av                     /
    geometrielementene .SIRKEL, .SIRKELP,                  /
    .BUE, .BUEP.                                         /       /
    Denne rutina regner om til en intern        as, ns * -radius- )  dfi
    bueangivelse med sirkelsentrum, radius               /       /
    og retning til buens startpunkt samt                   /
    delta for sluttpunktet uansett hvordan                   /
    buen er definert i SOSI.
    NB! Alle retninger i radianer, 0-retning i øst-aksen og positiv
    omløpsretning mot urviseren.
    Parameters:
    Type     Name        I/O   Explanation
    ----------------------------------------------------------------------------
    short    buff_retning i    Buffer-retning (kun for BUE og BUEP)
                                     HENT_FORRFRA  (1) =  Vanlig
                                     HENT_BAKFRA  (-1) =  Buffer skal snues
    double   *as          u    Øst-koordinat sentrum sirkelbue
    double   *an          u    Nord-koordinat sentrum sirkelbue
    double   *radius      u    Radius i sirkelbue.
    double   *fi          u    Retningsvinkel sentrum -> startpunkt bue
    double   *dfi         u    Vinkel mellom fi og sentrum -> sluttpunkt bue
                               dfi > 0  = Positiv omløpsretning(mot klokka)
                               dfi < 0  = Negativ omløpsretning(med klokka)
    short    *sfeil       u    Feilstatus, definert dersom ist = 0
                                       1 = Ulovlig geometritype(ikke bue)
                                       2 = Feil ved beregning av bueparametre
    short    ist          r    Returstatus
                                       UT_TRUE  = Alt OK
                                       UT_FALSE = Feil, se returvariabel sfeil
    Usage:
    ist = LC_GetBuePar(buff_retning, &as, &ns, &radius, &fi, &dfi, &sfeil )
       ============================================================================

    SK_EntPnt_FYBA short LC_GetBuePar(short buff_retning, double *as, double *ns, double *radius,
                       double *fi, double *dfi, short *sfeil)

## LC_GetBue

Hent bue

    ==========================================================================
    Purpose:
    Henter ut nødvendige opplysninger om en bue.
    Parameters:
    Type     Name      I/O   Explanation
    --------------------------------------------------------------------------
    short   retning     i    Buffer-retning:
                                   HENT_FORRFRA ( 1) = vanlig,
                                   HENT_BAKFRA  (-1) = buffer skal snues.
    double  *a1         u    Koordinat i første punkt
    double  *n1         u
    double  *a2         u    Koordinat i siste punkt
    double  *n2         u
    double  *radius     u    Radius
    short   *storbue    u    0=vanlig bue, 1=storbue
    short    ist        r    status: UT_TRUE = OK,
                                     UT_FALSE = feil (Gruppen er ikke OK bue)
    Usage:
        ist = LC_GetBue(retning,&a1,&n1,&a2,&n2,&radius,&storbue);
    ==========================================================================

    SK_EntPnt_FYBA short LC_GetBue(short retning,double *a1,double *n1,double *a2,double *n2,
                    double *radius,short *storbue)

## LC_GetBuep

Hent buep

    ==========================================================================
    Purpose:
    Henter ut nødvendige opplysninger om en buep.
    Parameters:
    Type     Name      I/O   Explanation
    --------------------------------------------------------------------------
    short   retning     i    Buffer-retning:
                                   HENT_FORRFRA ( 1) = vanlig,
                                   HENT_BAKFRA  (-1) = buffer skal snues.
    double  *a1         u    Koordinat i første punkt
    double  *n1         u
    double  *a2         u    Koordinat i midtre punkt
    double  *n2         u
    double  *a3         u    Koordinat i siste punkt
    double  *n3         u
    short    ist        r    status: UT_TRUE = OK,
                                     UT_FALSE = feil (Gruppen er ikke OK buep)
    Usage:
        ist = LC_GetBuep(retning,&a1,&n1,&a2,&n2,&a3,&n3);
    ==========================================================================

    SK_EntPnt_FYBA short LC_GetBuep(short retning,double *a1,double *n1,double *a2,double *n2,
                     double *a3,double *n3)

## LC_GetSirkel

Hent silkel

    ==========================================================================
    Purpose:
    Henter ut nødvendige opplysninger om en sirkel.
    Parameters:
    Type     Name      I/O   Explanation
    --------------------------------------------------------------------------
    double  *as         u    Koordinat i sentrum
    double  *ns         u
    double  *radius     u    Radius
    short    ist        r    status: UT_TRUE = OK,
                                     UT_FALSE = Feil (Gruppen er ikke OK sirkel)
    Usage:
        ist = LC_GetSirkel(&as,&ns,&radius);
    ==========================================================================

    SK_EntPnt_FYBA short LC_GetSirkel(double *as,double *ns,double *radius)

## LC_GetSirkelp

Hent silkelp

    ==========================================================================
    Purpose:
    Henter ut nødvendige opplysninger om en sirkelp.
    Parameters:
    Type     Name      I/O   Explanation
    --------------------------------------------------------------------------
    double  *a1         u    Koordinat i P1
    double  *n1         u
    double  *a2         u    Koordinat i P2
    double  *n2         u
    double  *a3         u    Koordinat i P3
    double  *n3         u
    short    ist        r    status: UT_TRUE = OK,
                                     UT_FALSE = Feil (Gruppen er ikke OK sirkelp)
    Usage:
        ist = LC_GetSirkelp(&a1,&n1,&a2,&n2,&a3,&n3);
    ==========================================================================

    SK_EntPnt_FYBA short LC_GetSirkelp(double *a1,double *n1,double *a2,double *n2,
                    double *a3,double *n3)

## LC_GetKvalitet

Finner kvalitetsopplysninger

    ==========================================================================
    Purpose:
    Finne kvalitetsopplysninger i filhode eller vanlig gruppe.
    (Tolker aktuell gruppe.)
    Parameters:
    Type     Name       I/O   Explanation
    --------------------------------------------------------------------------
    short  *psMetode           u  Hvordan data er registrert.
                                    KVAL_MET_UNDEF  metode er udefinert.
                                    KVAL_MET_STD    standard metode fra nivå over.
    long   *pLNnoyaktighet     u  Registreringsnøyaktighet
                                    KVAL_NOY_UKJENT nøyaktighet er ukjent.
                                    KVAL_NOY_STD    standard nøyaktighet fra nivå over
    short  *psSynbarhet        u  Synbarhet i bilde
                                    KVAL_SYN_UNDEF  synbarhet er udefinert.
                                    KVAL_SYN_STD    standard metode fra nivå over.
    short  *psHoydeMetode      u  Hvordan høyden er registrert.
                                    KVAL_MET_UNDEF  metode er udefinert.
                                    KVAL_MET_STD    standard metode fra nivå over.
    long   *plHoydeNoyaktighet u  Registreringsnøyaktighet
                                    KVAL_NOY_UKJENT nøyaktighet er ukjent.
                                    KVAL_NOY_STD    standard nøyaktighet fra nivå over
    short    ist               r  Status: UT_TRUE  = OK, ..KVALITET er funnet
                                          UT_FALSE = ikke funnet
    Usage:
         ist = LC_GetKvalitet(&sMetode,&lNoyaktighet,&sSynbarhet,
                              &sHoydeMetode,&lHoydeNoyaktighet);
    ==========================================================================

    SK_EntPnt_FYBA short LC_GetKvalitet(short *psMetode,long *plNoyaktighet,short *psSynbarhet,
                         short *psHoydeMetode,long *plHoydeNoyaktighet)

## 15.5 Coordinates

## LC_GetTK

Get koordinat

    ==========================================================================
    Purpose:
    Henter et punkts koordinater (ø,n) i meter i terreng
    Parameters:
    Type    Name      I/O   Explanation
    --------------------------------------------------------------------------
    long   punkt_nr   i    Punktnummer (1 er første punkt)
    double  *aust      u    Øst-koordinat i meter i terreng
    double  *nord      u    Nord-koordinat i meter i terreng
    Usage:
    LC_GetTK(punkt_nr,&aust,&nord);
       ==========================================================================

    SK_EntPnt_FYBA void LC_GetTK(long punkt_nr,double *aust,double *nord)

## LC_GetArrayTK

Hent tabell med koordinater

    ==========================================================================
    Purpose:
    Henter tabell med koordinater (ø,n) i meter i terreng
    Parameters:
    Type    Name       I/O   Explanation
    --------------------------------------------------------------------------
    short   retning     i    Buffer-retning:
                                   HENT_FORRFRA ( 1) = vanlig,
                                   HENT_BAKFRA  (-1) = buffer skal snues.
    long    max_antall  i    Max antall punkt som kan hentes
    long    fra_punkt   i    Fra punktnummer (1 eller nko  er første punkt)
    double  *aust       u    Peker til tab. for øst-koordinater
    double  *nord       u    Peker til tab. for nord-koordinater
    long    *antall     u    Antall punkt hentet
    Usage:
    LC_GetArrayTK(retning,max_antall,fra_punkt,aust,nord,&lest);
       ==========================================================================

    SK_EntPnt_FYBA void LC_GetArrayTK(short retning,long max_antall,long fra_punkt,
                       double *aust,double *nord,long *antall)

## LC_GetTH

Get høyde

    ==========================================================================
    Purpose:
    Henter et punkts høyde i meter i terreng. (Henter BARE FRA PUNKTET.)
    Parameters:
    Type    Name      I/O   Explanation
    --------------------------------------------------------------------------
    long    punkt_nr   i    Punktnummer (1 er første punkt)
    double *hoyde      r    Høyde i meter i terreng. Konstanten
                            HOYDE_MANGLER (-999.999) angir at punktet ikke
                            har høydeverdi.
    Usage:
    hoyde = LC_GetTH(punkt_nr);
       ==========================================================================

    SK_EntPnt_FYBA double LC_GetTH(long punkt_nr)

## LC_GetArrayTH

Hent tabell med høyder

    ==========================================================================
    Purpose:
    Henter tabell med høyder
    Parameters:
    Type    Name       I/O   Explanation
    --------------------------------------------------------------------------
    short   retning     i    Buffer-retning:
                                   HENT_FORRFRA ( 1) = vanlig,
                                   HENT_BAKFRA  (-1) = buffer skal snues.
    long    max_antall  i    Max antall punkt som kan hentes
    long    fra_punkt   i    Fra punktnummer (1 eller nko  er første punkt)
    double  *aust       u    Peker til tab. for høyder
    long   *antall     u    Antall punkt hentet
    Usage:
    LC_GetArrayTH(retning,max_antall,fra_punkt,hoyde,&lest);
       ==========================================================================

    SK_EntPnt_FYBA void LC_GetArrayTH(short retning,long max_antall,long fra_punkt,
                       double *hoyde,long *antall)

## LC_GetHoyde

Get høyde

    ==========================================================================
    Purpose:
    Henter et punkts høyde i meter i terreng. (Henter fra punktet eller fra
    GINFO.)
    Parameters:
    Type    Name      I/O   Explanation
    --------------------------------------------------------------------------
    long    punkt_nr   i    Punktnummer (1 er første punkt)
    double *hoyde      r    Høyde i meter i terreng. Konstanten
                            HOYDE_MANGLER (-999.999) angir at punktet ikke
                            har høydeverdi.
    Usage:
    hoyde = LC_GetHoyde(punkt_nr);
       ==========================================================================

    SK_EntPnt_FYBA double LC_GetHoyde(long punkt_nr)

## LC_GetTD

Get dybde

    ==========================================================================
    Purpose:
    Henter et punkts dybde i meter i terreng. (Henter BARE FRA PUNKTET.)
    Parameters:
    Type    Name      I/O   Explanation
    --------------------------------------------------------------------------
    long    punkt_nr   i    Punktnummer (1 er første punkt)
    double *dybde      r    Dybde i meter i terreng. Konstanten
                            HOYDE_MANGLER (-999.999) angir at punktet ikke
                            har dybdeverdi.
    Usage:
    dybde = LC_GetTD(punkt_nr);
       ==========================================================================

    SK_EntPnt_FYBA double LC_GetTD(long punkt_nr)

## LC_GetDybde

Get dybde

    ==========================================================================
    Purpose:
    Henter et punkts dybde i meter i terreng. (Henter fra punktet eller fra
    GINFO.)
    Parameters:
    Type    Name      I/O   Explanation
    --------------------------------------------------------------------------
    long    punkt_nr   i    Punktnummer (1 er første punkt)
    double *hoyde      r    Dybde i meter i terreng. Konstanten
                            HOYDE_MANGLER (-999.999) angir at punktet ikke
                            har høydeverdi.
    Usage:
    dybde = LC_GetHoyde(punkt_nr);
       ==========================================================================

    SK_EntPnt_FYBA double LC_GetDybde(long punkt_nr)

## 15.6 Connection Nodes

## LC_GetKp

Get knutepunkt

    ==========================================================================
    Purpose:
    Henter knutepunktverdi i punktet.
    Parameters:
    Type    Name      I/O   Explanation
    --------------------------------------------------------------------------
    long   punkt_nr   i    Punktnummer (1 er første punkt)
    short   kp_type    r    Knutepunkttype (1-4095)
                            (0 = punktet har ikke knutepunkt)
    Usage:
    kp = LC_GetKp(punkt_nr);
       ==========================================================================

    SK_EntPnt_FYBA short LC_GetKp(long punkt_nr)

## LC_FinnKp

Finn knutepunkt

    ==========================================================================
    Purpose:
    Skanner gruppe, og finner punkt som er knutepunkt.
    Parameters:
    Type     Name        I/O   Explanation
    --------------------------------------------------------------------------
    long    *forste_punkt iu   Punktnummer for start søking.
                               (1 er første punkt i gruppen.)
                               Ved tilslag returneres punktnummer for tilslaget.
    long     siste_punkt  i    Siste punkt det skal søkes i.
    short   *kp           u    Knutepunkt.
    short    status       r    Søkestatus (1=funnet, 0=ikke funnet)
    Usage:
    status = LC_FinnKp(&forste_punkt,siste_punkt,kp);
       ==========================================================================

    short LC_FinnKp(long *forste_punkt,long siste_punkt,short *kp)

## 15.7 Node Information

## LC_GetPi

Get PINFO

    ==========================================================================
    Purpose:
    Henter punktinformasjon i angitte punkt som en streng.
    Strengen ligger i et felles "returbuffer" for alle get-rutiner i fyba.
    Dette blir ødelagt ved neste kall til en "get-rutine". For å ta vare på
    strengen må den kopieres over til egen streng. (Bruk strcpy).
    Parameters:
    Type    Name      I/O   Explanation
    --------------------------------------------------------------------------
    long   punkt_nr   i    Punktnummer (1 er første punkt)
    char   *pinfo      r    Peker til punktinformasjon eksklusiv knutepunkt
    Usage:
    pinfo = LC_GetPi(punkt_nr);
       ==========================================================================

    SK_EntPnt_FYBA char *LC_GetPi(long punkt_nr)

## LC_InitPP

Initier PINFO-søk

    ==========================================================================
    Purpose:
    Initierer søk etter PINFO.
    Parameters:
    Type            Name        I/O  Explanation
    --------------------------------------------------------------------------
    char            sosi_navn    i   Sosi-navn det skal finnes verdi til
    long            forste_punkt i   Første punkt. (1 er første pkt i gr)
    long            siste_punkt  i   Siste punkt det skal søkes i
    LC_GETPP_STATUS pp_stat      iu  Struktur med statusvariabler. Denne er
                                     bare for intern bruk i InitPP / GetPP.
    Usage:
      Se under LC_GetPP.
       ==========================================================================

    SK_EntPnt_FYBA void LC_InitPP(char *sosi_navn,long forste_punkt,long siste_punkt,
                   LC_GETPP_STATUS *pp_stat)

## LC_GetPP

Utfør PINFO-søk

    ==========================================================================
    Purpose:
    Henter parametrene til et SOSI-navn definert i LC_InitPP.
    Strengen ligger i et felles "returbuffer" for alle get-rutiner i fyba.
    Dette blir ødelagt ved neste kall til en "get-rutine". For å ta vare på
    strengen må den kopieres over til egen streng. (Bruk strcpy).
    Parameters:
    Type     Name               I/O   Explanation
    --------------------------------------------------------------------------
    long    *punkt             u  Ved tilslag returneres punktnummer for
                                  tilslaget.
    LC_GETPP_STATUS pp_stat iu  Struktur med statusvariabler. Denne er
                                  bare for intern bruk i InitPP / GetPP.
    char    *para_peker        r  Peker til para.-streng avslutta med '/0'.
                                  Hvis ingenting er funnet returneres NULL.
    Usage:
    .
      LC_GETPP_STATUS pp_stat;
    .
    LC_InitPP(sosi_navn,forste_punkt,siste_punkt,pp_stat);
    para_peker = LC_GetPP(&punkt,pp_stat);
      .
       =============================================================================

    SK_EntPnt_FYBA char *LC_GetPP(long *punkt,LC_GETPP_STATUS *pp_stat)

## LC_GetPiVerdi

Get PINFO-verdi

    ==========================================================================
    Purpose:
    Henter parametrene til et SOSI-navn.
    Strengen ligger i et felles "returbuffer" for alle get-rutiner i fyba.
    Dette blir ødelagt ved neste kall til en "get-rutine". For å ta vare på
    strengen må den kopieres over til egen streng. (Bruk UT_StrCopy).
    Leddnummer, delstreng og formateringskode kan inngå som
    forlengelse av SOSI-navnet.
    Leddnummer for flerleddet parameter angis ved #n.
    Eks: ...KVALITET#2 er nøyaktighet.
    Delstreng angis ved: [start:slutt].
    NB! 1 er første tegn.
    Sluttposisjon 0 betyr at resten av strengen skal brukes.
    Eks: ..STRENG[2:0]  Posisjon 2 og resten av strengen.
    Formateringskode kan angi skilletegn for flerleddet PINFO. Dette
    angis ved ^x hvor x er det tegnet som skal skrives ut mellom leddene.
    Disse tilleggene kan kombineres, slik at  ...KVALITET#2[1:2] betyr at
    det er tegn nummer 1 og 2 i det andre leddet (nøyaktigheten) som skal
    brukes.
    Parameters:
    Type     Name        I/O   Explanation
    --------------------------------------------------------------------------
    char     pszSosiName  i    SOSI-navn det skal finnes verdi til.
                               Leddnummer posisjon og formateringskode kan
                               inngå som forlengelse av navnet.
                               OBS! Store og små bokstaver er signifikante.
                               HØYDE er spesialverdi som henter formatert
                               høyde fra punktet eller GINFO.
                               KVALITET er spesialverdi som henter formatert
                               kvalitet fra punktet, GINFO eller hode.
    long     lPnr         i    Punktnummer
    short   *sSettNr      iu   PINFO-nummer   (1 er første sett i PINFO.)
                               Ved tilslag returneres settnummer for tilslaget.
    char    *pszVerdi     r    Peker til verdien avslutta med '/0'.
                               Hvis SOSI-navnet ikke er funnet returneres NULL.
    Usage:
    pszVerdi = LC_GetPiVerdi(pszSosiName,lPnr,&sSettNr);
       ==========================================================================

    SK_EntPnt_FYBA char *LC_GetPiVerdi(const char *pszSosiName,long lPnr,short *sSettNr)

## LC_TestPi

Sjekk om punkt har PINFO

    ==========================================================================
    Purpose:
    Sjekker om et punkt har PINFO i en eller annen form.
    (PINFO, KP, høyde.)
    Høyde handteres ikke foreløpig.
    Parameters:
    Type    Name      I/O   Explanation
    --------------------------------------------------------------------------
    long    punkt_nr   i    Punktnummer (1 er første punkt)
    short   sTestHoyde i    Bryter for å si om høyde skal regnes med i sjekken.
    short   sStatus    r    UT_TRUE=har "pinfo", UT_FALSE=har ikke "pinfo"
    Usage:
    sStatus = LC_TestPi(punkt_nr,UT_TRUE);
       ==========================================================================

    SK_EntPnt_FYBA short LC_TestPi(long punkt_nr,short sTestHoyde)

## 15.8 Special get operations

## LC_GetCurEnhet

Hent enhet på angitt nivå

    ==========================================================================
    Purpose:
    Henter ut enhet fra filhode eller GINFO
    Parameters:
    Type        Name    I/O   Explanation
    --------------------------------------------------------------------------
    LC_FILADM * pFil     i    Peker til FilAdm
    short      *nivaa    iu   angir nivå for henting, returnerer aktuelt nivå
                                1 = filhode
                                2 = GINFO
    double     *enhet    u    Aktuell enhet
    double     *enhet_h  u    Aktuell enhet-H
    double     *enhet_d  u    Aktuell enhet-D
    Usage:
        LC_GetCurEnhet(pFil,&nivaa,&enhet,&enhet_h,&enhet_d);
    ==========================================================================

    SK_EntPnt_FYBA void LC_GetCurEnhet(LC_FILADM * pFil,short *nivaa, double *enhet,
                        double *enhet_h, double *enhet_d)

## LC_GetCurKvalitet

Finner kvalitetsopplysninger på angitt nivå

    ==========================================================================
    Purpose:
    Finne kvalitetsopplysninger på angitt nivå, hode ginfo eller pinfo.
    Parameters:
    Type        Name          I/O  Explanation
    --------------------------------------------------------------------------
    LC_FILADM * pFil           i   Peker til FilAdm
    short      *nivaa         iu   Hvor skal det letes.
                                    0 = ikke funnet
                                    1 = hode
                                    2 = ginfo
                                    3 = pinfo
                                    Returnerer aktuelt nivå.
    long        pnr            i    punktnr. ved spørring på pinfo
    short  *psMetode           u   Hvordan data er registrert.
                                    KVAL_MET_UNDEF  metode er udefinert.
    long   *pLNnoyaktighet     u   Registreringsnøyaktighet
                                    KVAL_NOY_UKJENT nøyaktighet er ukjent.
    short  *psSynbarhet        u   Synbarhet i bilde
                                    KVAL_SYN_UNDEF  synbarhet er udefinert.
    short  *psHoydeMetode      u   Hvordan høyden er registrert.
                                    KVAL_MET_UNDEF  metode er udefinert.
    long   *plHoydeNoyaktighet u   Registreringsnøyaktighet
                                    KVAL_NOY_UKJENT nøyaktighet er ukjent.
    short   ist                r   Statusvariabel:
                                    UT_TRUE = OK, KVALITET er funnet
                                    UT_FALSE = KVALITET er ikke funnet
    Usage:
     ist = LC_GetCurKvalitet(pFil,&nivaa,pnr,&sMetode,&lNoyaktighet,
                             &sSynbarhet,&sHoydeMetode,&lHoydeNoyaktighet);
    ==========================================================================

    SK_EntPnt_FYBA short LC_GetCurKvalitet(LC_FILADM *pFil,short *nivaa,long pnr,
                            short *psMetode,long *plNoyaktighet,short *psSynbarhet,
                            short *psHoydeMetode,long *plHoydeNoyaktighet)

## LC_GetObjtypeBgr

Hent objekttype

    =============================================================================
    Purpose:
    Henter objekttype for gitt gruppenummer.
    Parameters:
    Type    Name       I/O  Explanation
    -----------------------------------------------------------------------------
    LC_BGR *pBgr        i   Gruppenummer det ønskes opplysninger om.
    char   *pszObjtype  r   OBJTYPE
                            NULL hvis gruppen ikke finnes
    Usage:
    pszObjtype = LC_GetObjtypeBgr(pBgr);
    =============================================================================

    SK_EntPnt_FYBA const char *LC_GetObjtypeBgr(LC_BGR * pBgr)

## LC_GetElementName

Hent elementnavn

    ==========================================================================
    Purpose:
    Hent et elementnavn fra den interne navnetabellen i FYBA.
    Denne tabellen inneholder både gruppenavn (.LINJE, .KURVE, ...) og
    egenskapsnavn (..OBJTYPE, ..LTEMA, ...)
    Tabellen har tre logiske deler:
     - (Linje 0 - L_HODE): Forhåndsdefinerte gruppenavn.
     - (Linje L_HODE+1 - L_KP): Forhåndsdefinerte egenskapsnavn.
     - (Linje L_KP+1 - n): Andre elementnavn brukt i SOSI-filen etter
                           indeksoppbygging.
    Selv om egenskapen blir fjernet fra SOSI-filen blir navnet fortsatt
    liggende i navnetabellen
    Parameters:
    Type        Name    I/O  Explanation
    --------------------------------------------------------------------------
    LC_FILADM  *pFil     i   Peker til FilAdm
    short       sNameNr  i   Linjenummer i navnetabellen (0 - n)
    bool       *bBrukt       Viser om navnet har/er brukt i filen
                             Hvis det har vært en gruppe som har brukt navnet blir
                             denne stående "true" selv om gruppen er slettet.
    const char *pszName  r   Peker til elementnavn,
                             NULL = ukjent fil eller ulovlig linjenummer
    Usage:
    // Går gjennom alle navnene ut over de forhåndsdefinerte navnene.
    short sNameNr = L_KP+1;
    while ((pszName = LC_GetElementName(pFil,sNameNr)) != NULL)
    {
       // Gjør noe med navnet
       ...
       ++sNameNr;
    }
    =============================================================================

    SK_EntPnt_FYBA const char *LC_GetElementName(LC_FILADM *pFil,short sNameNr,bool *bBrukt)

# 16 Iterating in the Base

## LC_InitNextFil

Initier finn neste fil

    ==========================================================================
    Purpose:
    Initierer pFil for bruk i finn neste fil.
    Parameters:
    Type           Name   I/O  Explanation
    ------------------------------------------------------------------------
    LC_FILADM    **ppFil    u   Peker til FilAdm-peker
    Usage:
        LC_InitNextFil(&pFil)
       ==========================================================================

    SK_EntPnt_FYBA void LC_InitNextFil(LC_FILADM **ppFil)

## LC_NextFil

Finn neste fil

    ==========================================================================
    Purpose:
    Finn neste fil i aktuell base.
    Parameters:
    Type           Name    I/O   Explanation
    --------------------------------------------------------------------------
    LC_FILADM    **ppFil   iu   Peker til FilAdm-peker
    unsigned short usLag    i   Velg hvilke "lag" det skal søkes i.
                                  LC_FRAMGR, LC_BAKGR og /eller LC_SEKV
                                  (Bruk "|" for å kombinere.)
    short          sStatus  r   Status  UT_TRUE=OK, UT_FALSE=ingen flere funnet
    Usage:
        LC_FILADM *pFil;
                  Denne løkka går gjennom alle framgrunns-filene i basen
        LC_InitNextFil(&pFil)
        while (LC_NextFil(&pFil,LC_FRAMGR)) {
          pszFilName = LC_GetFiNa(pFil);
          .
          Behandle filnavnet
          .
        }
       ==========================================================================

    SK_EntPnt_FYBA short LC_NextFil(LC_FILADM **ppFil,unsigned short usLag)

## LC_InitNextBgr

Initier finn neste gruppe

    ==========================================================================
    Purpose:
    Initierer Bgr for bruk i finn neste gruppe.
    Parameters:
    Type           Name   I/O  Explanation
    ------------------------------------------------------------------------
    LC_BGR *        pBgr    iu  Peker til gruppestruktur
    Usage:
        LC_InitNextBgr(&Bgr)
       ==========================================================================

    SK_EntPnt_FYBA void LC_InitNextBgr(LC_BGR * pBgr)

## LC_NextBgr

Finn neste gruppe

    ==========================================================================
    Purpose:
    Finn neste gruppe i aktuell base.
    Sekvensielle filer blir ikke håndtert.
    Parameters:
    Type           Name    I/O   Explanation
    --------------------------------------------------------------------------
    LC_BGR *        pBgr    iu   Peker til gruppestruktur der gruppenummer lagres
    unsigned short usLag    i   Velg hvilke "lag" det skal søkes i.
                                  LC_FRAMGR og /eller LC_BAKGR
                                  (Bruk "|" for å kombinere.)
    short          sStatus  r   Status  UT_TRUE=OK, UT_FALSE=ingen flere grupper
    Usage:
        LC_BGR Bgr;
                  Denne løkka går gjennom alle framgrunns-gruppene i basen
        LC_InitNextBgr(&Bgr);
        while (LC_NextBgr(&Bgr,LC_FRAMGR)) {
          gnavn = LC_RxGr(&Bgr,LES_OPTIMALT,&ngi,&nko,&info);
          .
          Behandle gruppen
          .
        }
       ==========================================================================

    SK_EntPnt_FYBA short LC_NextBgr(LC_BGR * pBgr,unsigned short usLag)

# 17 Geographical Search

## LC_GetGrWin

Hent omskrevet rektangel for gruppe

    ==========================================================================
    Purpose:
    Henter omskrevet rektangel for gitt gruppe.
    For flater er refererte grupper medregnet.
    Parameters:
    Type     Name     I/O   Explanation
    --------------------------------------------------------------------------
    LC_BGR *  pBgr      i    Gruppenummer
    double  *nva       u    Omskrevet rektangel for gruppen. Avrundet utover
    double  *nvn       u    en enhet.
    double  *oha       u
    double  *ohn       u
    short    ist       r    Status. UT_TRUE=OK, UT_FALSE=ulovlig gruppenummer.
    Usage:
       ist = LC_GetGrWin(&Bgr,&nva,&nvn,&oha,&ohn);
       ==========================================================================

    SK_EntPnt_FYBA short LC_GetGrWin(LC_BGR * pBgr,double *nva,double *nvn,double *oha,double *ohn)

## LC_SBFlate

Sett søkegrense for geografisk søk på flate

    =============================================================================
    Purpose:
    Definerer punkt for geografisk søk på flate.
    Parameters:
    Type     Name      I/O  Explanation
    -----------------------------------------------------------------------------
    LC_GEO_STATUS * pGeoStat  iu   Peker til struktur for søkestatus
    unsigned short usLag      i   Velg hvilke "lag" det skal søkes i.
                                  LC_FRAMGR og /eller LC_BAKGR
    double         nv_a       i   Koordinat nedre venstre hjørne
    double         nv_n       i
    double         oh_a       i   Koordinat øvre høyre hjørne
    double         oh_n       i
    Usage:
    LC_GEO_STATUS GeoStat;
    .
    LC_SBFlate(&GeoStat,LC_FRAMGR | LC_BAKGR,nv_a,nv_n,oh_a,oh_n);
    if (LC_FFFlate(&GeoStat,&Bgr)) {
        do{
            . Behandle funnet gruppe
            .
        } while (LC_FNFlate(&GeoStat,&Bgr));
    }
    LC_AvsluttSok(&GeoStat);
    .
       =============================================================================

    SK_EntPnt_FYBA void LC_SBFlate(LC_GEO_STATUS * pGeoStat,unsigned short usLag,
                  double nv_a,double nv_n,double oh_a,double oh_n)

## LC_FFFlate

Finn første ved flatesøk

    =============================================================================
    Purpose:
    Finner første gruppe i det definerte området for flatesøk.
    Parameters:
    Type     Name      I/O  Explanation
    -----------------------------------------------------------------------------
    LC_GEO_STATUS * pGeoStat  iu   Peker til struktur for søkestatus
    LC_BGR *        pBgr       u   Funnet gruppe
    short          sstat      r   Søkestatus (UT_TRUE=Funnet, UT_FALSE=Ingen funnet)
    Usage:
    Se under LC_SBFlate.
       =============================================================================

    SK_EntPnt_FYBA short LC_FFFlate(LC_GEO_STATUS * pGeoStat,LC_BGR * pBgr)

## LC_FNFlate

Finn neste ved flatesøk

    ==========================================================================
    Purpose:
    Finner neste gruppe i det definerte området for flatesøk.
    Parameters:
    Type     Name      I/O  Explanation
    --------------------------------------------------------------------------
    LC_GEO_STATUS * pGeoStat  iu   Peker til struktur for søkestatus
    LC_BGR *        pBgr       u   Funnet gruppe
    short          sstat      r   Søkestatus (UT_TRUE=Funnet, UT_FALSE=Ingen funnet)
    Usage:
    Se under LC_SBFlate.
       ==========================================================================

    SK_EntPnt_FYBA short LC_FNFlate(LC_GEO_STATUS * pGeoStat,LC_BGR * pBgr)

## LC_SBGeo

Sett søkegrense for grov geografisk søk

    =============================================================================
    Purpose:
    Definerer geografisk område for geografisk søk.
    Parameters:
    Type           Name      I/O  Explanation
    -----------------------------------------------------------------------------
    LC_GEO_STATUS * pGeoStat  iu   Peker til struktur for søkestatus.
    unsigned short usLag      i   Velg hvilke "lag" det skal søkes i.
                                  LC_FRAMGR og /eller LC_BAKGR
    double         nv_a       i   Koordinat nedre venstre hjørne.
    double         nv_n       i
    double         oh_a       i   Koordinat øvre høyre hjørne.
    double         oh_n       i
    Usage:
    LC_GEO_STATUS GeoStat;
    .
    LC_SBGeo(&GeoStat,LC_FRAMGR | LC_BAKGR,nv_a,nv_n,oh_a,oh_n);
    if (LC_FFGeo(&GeoStat,&Bgr)) {
        do{
            . Behandle funnet gruppe
            .
        } while (LC_FNGeo(&GeoStat,&bgr));
    }
    LC_AvsluttSok(&GeoStat);
    .
       =============================================================================

    SK_EntPnt_FYBA void LC_SBGeo(LC_GEO_STATUS * pGeoStat,unsigned short usLag,
                  double nv_a,double nv_n,double oh_a,double oh_n)

## LC_FFGeo

Finn første ved geografisk søk

    ==========================================================================
    Purpose:
    Finner første gruppe i det definerte området for kombinert geografisk søk.
    Parameters:
    Type     Name      I/O  Explanation
    --------------------------------------------------------------------------
    LC_GEO_STATUS * pGeoStat  iu   Peker til struktur for søkestatus
    LC_BGR *        pBgr       u   Funnet gruppe
    short          sstat      r   Søkestatus (UT_TRUE=Funnet, UT_FALSE=Ingen funnet)
    Usage:
    Se under LC_SBGeo.
       ==========================================================================

    SK_EntPnt_FYBA short LC_FFGeo(LC_GEO_STATUS * pGeoStat,LC_BGR * pBgr)

## LC_FNGeo

Finn neste ved geografisk søk

    ==========================================================================
    Purpose:
    Finner neste gruppe i det definerte området for geografisk søk.
    Parameters:
    Type           Name      I/O  Explanation
    --------------------------------------------------------------------------
    LC_GEO_STATUS * pGeoStat  iu   Peker til struktur for søkestatus
    LC_BGR *        pBgr       u   Funnet gruppe
    short          sstat      r   Søkestatus (UT_TRUE=Funnet, UT_FALSE=Ingen funnet)
    Usage:
    Se under LC_SBGeo.
       ==========================================================================

    SK_EntPnt_FYBA short LC_FNGeo(LC_GEO_STATUS * pGeoStat,LC_BGR * pBgr)

## LC_FAGeo

Finn alle ved geografisk søk

    ==========================================================================
    Purpose:
    Finn alle i geografisk søkeområde.
    Tilslag merkes i brukttabellen kolonne BT_GEOSOK (15).
    Parameters:
    Type           Name      I/O  Explanation
    --------------------------------------------------------------------------
    LC_GEO_STATUS * pGeoStat  iu   Peker til struktur for søkestatus
    long           lAntall    r   Antall funnet.
    Usage:
    .
    LC_SBGeo(&GeoStat,LC_FRAMGR | LC_BAKGR,nv_a,nv_n,oh_a,oh_n);
    antall = LC_FAGeo(&Bgr);
    .
       =============================================================================

    SK_EntPnt_FYBA long LC_FAGeo(LC_GEO_STATUS * pGeoStat)

## LC_FFGeoFil

Finn første ved geografisk søk i en fil

    ==========================================================================
    Purpose:
    Finner første gruppe i det definerte området for kombinert geografisk søk.
    Søker bare i en gitt fil.
    Parameters:
    Type           Name       I/O  Explanation
    --------------------------------------------------------------------------
    LC_GEO_STATUS * pGeoStat   iu   Peker til struktur for søkestatus
    LC_FILADM *    pOnsketFil  i   Filpeker til den filen det skal søkes i.
    LC_BGR *        pBgr        u   Funnet gruppe
    short          sstat       r   Søkestatus (UT_TRUE=Funnet, UT_FALSE=Ingen funnet)
    Usage:
    Se under LC_SBGeo.
       ==========================================================================

    SK_EntPnt_FYBA short LC_FFGeoFil(LC_GEO_STATUS * pGeoStat,LC_FILADM *pOnsketFil,LC_BGR * pBgr)

## LC_FNGeoFil

Finn neste ved geografisk søk i en fil

    ==========================================================================
    Purpose:
    Finner neste gruppe i det definerte området for geografisk søk.
    Søker bare i en gitt fil.
    Parameters:
    Type           Name      I/O  Explanation
    --------------------------------------------------------------------------
    LC_GEO_STATUS * pGeoStat  iu   Peker til struktur for søkestatus
    LC_FILADM *    pFil      i    Filpeker til den filen det skal søkes i.
    LC_BGR *        pBgr       u   Funnet gruppe
    short          sstat      r   Søkestatus (UT_TRUE=Funnet, UT_FALSE=Ingen funnet)
    Usage:
    Se under LC_SBGeo.
       ==========================================================================

    SK_EntPnt_FYBA short LC_FNGeoFil(LC_GEO_STATUS * pGeoStat,LC_FILADM *pFil,LC_BGR * pBgr)

## LC_AvsluttSok

Avslutter geografisk søk

    =======================================================================
    Usage:
    parametere:
    Type            Name     I/O   Explanation
    -----------------------------------------------------------------------
    LC_GEO_STATUS *  pGeoStat  i    Peker til struktur for søkestatus
    Purpose:
    Avslutter geografisk søk, og frigir kjede med søkeresultat.
    =======================================================================

    SK_EntPnt_FYBA void LC_AvsluttSok(LC_GEO_STATUS * pGeoStat)

## LC_WTst

Vindustest

    ==========================================================================
    Purpose:
    Sjekk om aktuell gruppe berører gitt vindu.
    Tar hensyn til gruppenavnet. Handterer (PUNKT, LINJE, KURVE, BUE,
    BUEP, SIRKEL, SIRKELP, SVERM, TRASE ).
    Parameters:
    Type    Name      I/O   Explanation
    --------------------------------------------------------------------------
    double  nva        i    Avgrensing av vinduet
    double  nvn        i
    double  oha        i
    double  ohn        i
    short   ist        r    status: 0 = ikke berøring
                                    1 = skjæring
    Usage:
    .
    LC_SBGeo(&GeoStat,nv_a,nv_n,oh_a,oh_n);
    if (LC_FFGeo(&GeoStat,&Bgr)){
        do{
            LC_RxGr(&Bgr,LES_OPTIMALT,&ngi,&nko,&info);
            if (LC_WTst(nv_a,nv_n,oh_a,oh_n)) {       (Nøyaktig vindustest)
                . Behandle funnet gruppe
                .
            }
        } while (LC_FNGeo(&GeoStat,&Bgr));
    }
    LC_AvsluttSok(&GeoStat);
    .
       ==========================================================================

    SK_EntPnt_FYBA short LC_WTst(double nva,double nvn,double oha,double ohn)

## LC_PTst

Polygontest

    ==========================================================================
    Purpose:
    Sjekker om gitt punkt ligger innenfor polygon angitt av aktuell gruppe.
    Forutsetter at tabellen danner et lukket polygon
    Parameters:
    Type    Name    I/O   Explanation
    --------------------------------------------------------------------------
    double  a        i    Punkt som skal sjekkes
    double  n        i
    short   ist      r    status: 0 = punktet er utenfor flaten
                                  1 = punktet ligger inne på flaten
    Usage:
    .
    LC_SBFlate(&GeoStat,a-d,n-d,a+d,n+d);
    if (LC_FFFlate(&GeoStat,&Bgr)) {
        do{
            LC_RxGr(&Bgr,LES_OPTIMALT,&ngi,&nko,&info);
            if (LC_PTst(a,n)){          (Nøyaktig polygontest)
                . Behandle funnet gruppe
                .
            }
        } while (LC_FNFlate(&GeoStat,&Bgr));
    }
    LC_AvsluttSok(&GeoStat);
    .
       ==========================================================================

    SK_EntPnt_FYBA short LC_PTst(double a,double n)

## LC_PTstOmkrets

Sjekk om punkt ligger inni polygon

    ==========================================================================
    Purpose:
    Sjekker om gitt punkt ligger innenfor yttergrensen for polygon angitt
    av aktuell gruppe.
    Forutsetter at tabellen danner et lukket polygon
    Parameters:
    Type    Name    I/O   Explanation
    --------------------------------------------------------------------------
    double  a        i    Punkt som skal sjekkes
    double  n        i
    short   ist      r    status: 0 = punktet er utenfor flaten
                                  1 = punktet ligger inne på flaten
    Usage:
    ist = LC_PTstOmkrets(a,n);
       ==========================================================================

    SK_EntPnt_FYBA short LC_PTstOmkrets(double a,double n)

# 18 Serial Number Search

## LC_SBSn

Sett søkegrense for serienummer

    ==========================================================================
    Purpose:
    Setter søkegrenser for serienummersøk.
    Parameters:
    Type        Name     I/O   Explanation
    --------------------------------------------------------------------------
    LC_SNR_ADM * pSnrAdm  iu    Peker til statusblokk for serienummersøk
    LC_FILADM * pFil     i     Peker til FilAdm
    long        lMinSnr  i     Fra og med serienummer
    long        lMaxSnr  i     Til og med serienummer
    Usage:
    LC_SNR_ADM SnrAdm;
    LC_SBSn(&SnrAdm,pFil,lMinSnr,lMaxSnr);
    =============================================================================

    SK_EntPnt_FYBA void LC_SBSn(LC_SNR_ADM * pSnrAdm,LC_FILADM *pFil,long lMinSnr,long lMaxSnr)

## LC_MoveSn

Flytt til gruppenummer for et serienummer

    ==========================================================================
    Purpose:
    Finn gruppenummer for et gitt serienummer i søkeområdet for serienummer.
    Intern "aktuellt serienummer" blir endret, slik at videre søk med
    neste/forrige nå tar utgangspunkt i dette serienummer.
    (Bare hvis snr er funnet).
    Parameters:
    Type     Name     I/O   Explanation
    -----------------------------------------------------------------------------
    LC_SNR_ADM *pSnrAdm  iu    Peker til statusblokk for serienummersøk
    long        lSnr     i     Serienummer som skal finnes
    LC_BGR     *pBgr     u     Gruppenummer i basen
    short       sstat    r     Søkestatus (UT_TRUE=Funnet, UT_FALSE=Ingen funnet)
    Usage:
    sstat = LC_MoveSn(pSnrAdm,snr,&Bgr);
    ================================================================================

    SK_EntPnt_FYBA short LC_MoveSn(LC_SNR_ADM * pSnrAdm,long lSnr,LC_BGR * pBgr)

## LC_FiSn

Finn gruppenummer for et serienummer

    ==========================================================================
    Purpose:
    Finn gruppenummer for et gitt serienummer i søkeområdet for serienummer.
    Endrer IKKE "current gruppe".
    Parameters:
    Type        Name    I/O    Explanation
    -----------------------------------------------------------------------------
    LC_FILADM  *pFil     i     Peker til FilAdm
    long        lSnr     i     Serienummer som skal finnes
    LC_BGR     *pBgr     u     Gruppenummer i basen
    short       sstat    r     Søkestatus (UT_TRUE=Funnet, UT_FALSE=Ingen funnet)
    Usage:
    sstat = LC_FiSn(pFil,lSnr,&Bgr);
    ================================================================================

    SK_EntPnt_FYBA short LC_FiSn(LC_FILADM *pFil,long lSnr,LC_BGR * pBgr)

## LC_FiArraySn

Finn gruppenummer for flere serienummer

    ==========================================================================
    Purpose:
    Finner gruppenummer for tabell med serienummer.
    Endrer IKKE "current gruppe".
    Serienummertabellen kan være "rå" slik den kommer fra GetRef. Linjer med
    start øy og slutt øy overses.
    Parameters:
    Type       Name     I/O   Explanation
    -----------------------------------------------------------------------------
    LC_FILADM *pFil     i     Peker til FilAdm
    short      antall   i     Antall linjer brukt i serienummertabellen
    long      *snr      i     Tabell med serienummer som skal finnes
    long      *bgr      u     Tabell med gruppenummer funnet
                                (INGEN_GRUPPE = ikke funnet)
    Usage:
    LC_FiArraySn(pFil,antall,snr,bgr);
    ================================================================================

    SK_EntPnt_FYBA void LC_FiArraySn(LC_FILADM *pFil,short antall,long *snr,long *bgr)

## LC_FASn

Finn alle serienummer

    ==========================================================================
    Purpose:
    Finner alle grupper i fil/serienummer søkeområdet og merker i kolonne
    BT_SNRSOK i brukttabellen.
    Parameters:
    Type        Name    I/O   Explanation
    --------------------------------------------------------------------------
    LC_SNR_ADM *pSnrAdm  i    Peker til statusblokk for serienummersøk
    long        antall   r    Antall grupper funnet.
    Usage:
    antall_funnet = LC_FASn(&SnrAdm);
    =============================================================================

    SK_EntPnt_FYBA long LC_FASn(LC_SNR_ADM * pSnrAdm)

## LC_FFSn

Finn første serienummer

    =============================================================================
    Purpose:
    Finner første gruppe i fil/serienummer søkeområdet.
    Parameters:
    Type        Name     I/O   Explanation
    -----------------------------------------------------------------------------
    LC_SNR_ADM *pSnrAdm  iu    Peker til statusblokk for serienummersøk
    LC_BGR     *pBgr     u     Gruppenummer
    short       sstat    r     Søkestatus (UT_TRUE=Funnet, UT_FALSE=Ingen funnet)
    Usage:
    sstat = LC_FFSn(&SnrAdm,&Bgr);
    ================================================================================

    SK_EntPnt_FYBA short LC_FFSn(LC_SNR_ADM * pSnrAdm,LC_BGR * pBgr)

## LC_FNSn

Finn neste serienummer

    ==========================================================================
    Purpose:
    Finner neste gruppe i fil/serienummer søkeområdet.
    Parameters:
    Type     Name     I/O   Explanation
    --------------------------------------------------------------------------
    LC_SNR_ADM * pSnrAdm  iu    Peker til statusblokk for serienummersøk
    LC_BGR *     pBgr     u     Gruppenummer
    short        sstat    r     Søkestatus (UT_TRUE=Funnet, UT_FALSE=Ingen funnet)
    Usage:
    sstat = LC_FNSn(&SnrAdm,&Bgr);
    ================================================================================

    SK_EntPnt_FYBA short LC_FNSn(LC_SNR_ADM * pSnrAdm,LC_BGR * pBgr)

## LC_FPSn

Finn forige serienummer

    =============================================================================
    Purpose:
    Finner forrige gruppe i fil/serienummer søkeområdet.
    Parameters:
    Type        Name     I/O   Explanation
    -----------------------------------------------------------------------------
    LC_SNR_ADM *pSnrAdm  iu    Peker til statusblokk for serienummersøk
    LC_BGR     *pBgr     u     Gruppenummer
    short       sstat    r     Søkestatus (UT_TRUE=Funnet, UT_FALSE=Ingen funnet)
    Usage:
    sstat = LC_FPSn(&SnrAdm,&Bgr);
    ================================================================================

    SK_EntPnt_FYBA short LC_FPSn(LC_SNR_ADM * pSnrAdm,LC_BGR * pBgr)

## LC_FLSn

Finn siste serienummer

    =============================================================================
    Purpose:
    Finner siste gruppe i fil/serienummer søkeområdet.
    Parameters:
    Type        Name     I/O   Explanation
    -----------------------------------------------------------------------------
    LC_SNR_ADM *pSnrAdm  iu    Peker til statusblokk for serienummersøk
    LC_BGR     *pBgr     u     Gruppenummer
    short       sstat    r     Søkestatus (UT_TRUE=Funnet, UT_FALSE=Ingen funnet)
    Usage:
    sstat = LC_FLSn(&SnrAdm,&Bgr);
    ================================================================================

    SK_EntPnt_FYBA short LC_FLSn(LC_SNR_ADM * pSnrAdm,LC_BGR * pBgr)

## LC_FFSnBt

Finn første serienummer med tilleggskrav

    ==========================================================================
    Purpose:
    Finner første gruppe som er merka i gitt kolonne i brukttabellen.
    Parameters:
    Type        Name     I/O   Explanation
    --------------------------------------------------------------------------
    LC_SNR_ADM *pSnrAdm   i    Peker til statusblokk for serienummersøk
    short       kolonne   i    Kolonne i brukt-tabellen som skal sjekkes
    LC_BGR     *pBgr      u    Gruppenummer
    short       sstat     r    Søkestatus (UT_TRUE=Funnet, UT_FALSE=Ingen funnet)
    Usage:
    sstat = LC_FFSnBt(&SnrAdm,BT_GEOSOK,&Bgr);
    =============================================================================

    SK_EntPnt_FYBA short LC_FFSnBt(LC_SNR_ADM * pSnrAdm,short kolonne,LC_BGR * pBgr)

## LC_FNSnBt

Finn neste serienummer med tilleggskrav

    ==========================================================================
    Purpose:
    Finner neste gruppe også er merka i gitt kolonne i brukttabellen.
    Parameters:
    Type        Name     I/O   Explanation
    -----------------------------------------------------------------------------
    LC_SNR_ADM *pSnrAdm   i    Peker til statusblokk for serienummersøk
    short       kolonne   i    Kolonne i brukt-tabellen som skal sjekkes
    LC_BGR     *pBgr      u    Gruppenummer
    short       sstat     r    Søkestatus (UT_TRUE=Funnet, UT_FALSE=Ingen funnet)
    Usage:
    sstat = LC_FNSnBt(&SnrAdm,BT_GEOSOK,&Bgr);
    ================================================================================

    SK_EntPnt_FYBA short LC_FNSnBt(LC_SNR_ADM * pSnrAdm,short kolonne,LC_BGR * pBgr)

## LC_FPSnBt

Finn forige serienummer med tilleggskrav

    ==========================================================================
    Purpose:
    Finner forrige gruppe i fil/serienummer søkeområdet, som også er merka i
    gitt kolonne i brukttabellen.
    Parameters:
    Type        Name     I/O   Explanation
    -----------------------------------------------------------------------------
    LC_SNR_ADM *pSnrAdm   i    Peker til statusblokk for serienummersøk
    short       kolonne   i    Kolonne i brukt-tabellen som skal sjekkes
    LC_BGR     *pBgr      u    Gruppenummer
    short       sstat     r    Søkestatus (UT_TRUE=Funnet, UT_FALSE=Ingen funnet)
    Usage:
    sstat = LC_FPSnBt(&SnrAdm,BT_GEOSOK,&Bgr);
    ================================================================================

    SK_EntPnt_FYBA short LC_FPSnBt(LC_SNR_ADM * pSnrAdm,short kolonne,LC_BGR * pBgr)

## LC_FLSnBt

Finn siste serienummer med tilleggskrav

    ==========================================================================
    Purpose:
    Finner siste gruppe i fil/serienummer søkeområdet som også er merka i
    gitt kolonne i brukttabellen.
    Parameters:
    Type        Name     I/O   Explanation
    -----------------------------------------------------------------------------
    LC_SNR_ADM *pSnrAdm   i    Peker til statusblokk for serienummersøk
    short       kolonne   i    Kolonne i brukt-tabellen som skal sjekkes
    LC_BGR     *pBgr      u    Gruppenummer
    short       sstat     r    Søkestatus (UT_TRUE=Funnet, UT_FALSE=Ingen funnet)
    Usage:
    sstat = LC_FLSnBt(&SnrAdm,BT_GEOSOK,&Bgr);
    ================================================================================

    SK_EntPnt_FYBA short LC_FLSnBt(LC_SNR_ADM * pSnrAdm,short kolonne,LC_BGR * pBgr)

# 19 Property Subset

FYBA har en egen "utvalgsmotor" som har et rikt sett av utvalgsmetoder. Disse metodene er spesiellt tilpasset SOSI-formatet.

    Følgende metoder er definert:

     !     Ikke (Tilslag når SOSI-navnet ikke finnes. Bare GINFO.)

     AL    Alle

     <>    Fra-til

     ><    Utenfor

     <     Mindre-enn

     >     Større-enn

     /     Delelig-med, eventuellt med sjekk på om restverdi er 2. verdi

     !/    Ikke-delelig-med

     ()    Inneholder

     =     Lik

     IV    Ikke valgt (Tilslag når gruppen ikke er tegnet ennå.
           Kombineres med SOSI-navnet "..*")

     !=    Ikke lik (Tilslag når denne navn og verdi kombinasjonen ikke
           finnes. (Bare GINFO)

     FL    Flere (Tilslag når SOSI-navnet forekommer flere ganger.)

     !FL   Ikke flere enn (Tilslag når SOSI-navnet IKKE forekommer
           flere ganger enn gitt antall.)

## LC_OpenQuery

Initier query

    ==========================================================================
    Purpose:
    Initierer query mot GINFO/PINFO.
    Tildeler administrasjonsblokk for utvalg.
    Parameters:
    Type         Name   I/O  Explanation
    -----------------------------------------------------------------------
    LC_UT_ADM   *UtAdm   r   Peker til administrasjonsblokk for utvalg.
    Usage:
    pUtAdm = LC_OpenQuery();
       ==========================================================================

    SK_EntPnt_FYBA LC_UT_ADM *LC_OpenQuery(void)

## LC_CloseQuery

Avslutter query

    ==========================================================================
    Purpose:
    Avslutter query mot GINFO/PINFO.
    Frigir minne brukt til administrasjon og utvalgstabeller.
    Parameters:
    Type       Name    I/O   Explanation
    --------------------------------------------------------------------------
    LC_UT_ADM *UtAdm    i    Peker til administrasjonsblokk for utvalg.
    Usage:
    LC_CloseQuery(pUtAdm);
       ==========================================================================

    SK_EntPnt_FYBA void LC_CloseQuery(LC_UT_ADM * pUtAdm)

## LC_PutQueryLine

Legg inn en query-linje

    ==========================================================================
    Purpose:
    Legger inn og tolker en linje med query-tekst.
    Parameters:
    Type       Name  I/O   Explanation
    ------------------------------------------------------------------------
    LC_UT_ADM *UtAdm  i    Peker til administrasjonsblokk for utvalg.
    char      *qulin  i    Linje med query-tekst. (Uten prikker på første nivå).
    short     sType   i    Gruppe eller Punkt (U_GRUPPE eller U_PUNKT).
    short      ist    r    Status (UT_TRUE=OK, UT_FALSE=linjen er ikke OK)
    Usage:
    ist = LC_PutQueryLine(pUtAdm,qulin,sType);
       =============================================================================

    SK_EntPnt_FYBA short LC_PutQueryLine(LC_UT_ADM *pUtAdm,const char *qulin,short sType)

## LC_PutQueryRegel

Legg inn et regelnavn

    ==========================================================================
    Purpose:
    Legger inn et regelnavn på siste linje i utvalgstabellen.
    (Nameet blir intern konvertert til "store" bokstaver.)
    Parameters:
    Type         Name I/O   Explanation
    ------------------------------------------------------------------------
    LC_UTVALG   *pU    i    Peker til utvalg
    char        *navn  i    Regelnavn.
    Usage:
    LC_PutQueryRegel(pU,navn);
       =============================================================================

    SK_EntPnt_FYBA void LC_PutQueryRegel(LC_UTVALG * pU,const char *navn)

## LC_LesUtvalg

Les utvalg i kom.filen

    =============================================================================
    Purpose:
    Leser og tolker gruppe og punktutvalg på kommandofilen og legger i tabell.
    Forutsetter at filen er åpnet på forhånd.
    Parameters:
    Type       Name    I/O   Explanation
    -----------------------------------------------------------------------------
    LC_UT_ADM *pUtAdm   i    Peker til administrasjonsblokk for utvalg.
    FILE      *pKomFil  i    Peker til "handle" for åpnet kommandofil.
    short      sStatus  r    UT_TRUE=OK, UT_FALSE=feil i linjen
    Usage:
    sStatus = LC_LesUtvalg(pUtAdm,pKomFil);
       =============================================================================

    SK_EntPnt_FYBA short LC_LesUtvalg(LC_UT_ADM *pUtAdm,const char *pszKomFil)

## LC_GetUtRegelName

Henter regelnavn

    =============================================================================
    Purpose:
    Henter regelnavn for at programmet utenfor skal kunne sjekke
    at det er tilgjengelig videre behandling av alle definerte navn.
    Parameters:
    Type                         Name I/O   Explanation
    -----------------------------------------------------------------------------
    LC_UT_ADM *pUtAdm     i     Peker til administrasjonsblokk for utvalg.
    short   *ist          iu    Status (Inn: 1=start,  0=neste)
                                       (Ut:  0=OK,    -1=ferdig);
    char    *regelpeker   r     Peker til utvalgsnavn.
    Usage:
    regelpeker = LC_GetUtRegelName(pUtAdm,&ist);
       =============================================================================

    SK_EntPnt_FYBA char *LC_GetUtRegelName(LC_UT_ADM *pUtAdm,short *ist)

## LC_GruppeUtvalg

GINFO-utvalg

    ==========================================================================
    Purpose:
    Sjekker GINFO-delen av aktuell gruppe mot alle gruppeutvalg fra fil.
    Parameters:
    Type       Name     I/O   Explanation
    -----------------------------------------------------------------------------
    LC_UT_ADM *pUtAdm    i    Peker til administrasjonsblokk for utvalg.
    short      sPrior    i    Prioritet.
                              LC_OVERSE_PRIORITET = Tar ikke hensyn til prioritet.
    short     *sstat     iu   Søkestatus, Inn: 1=start søk, 0=fortsett søk
                                          Ut : 0=tilslag, -1=ikke tilslag
    char     **regelnavn  u   Peker til regelnavn
    char      *regelnavn  u   Peker til utvalgsnavn
    Usage:
    pszUtvalgsName = LC_GruppeUtvalg(pUtAdm.sPrior,&sstat,®el);
       =============================================================================

    SK_EntPnt_FYBA char *LC_GruppeUtvalg(LC_UT_ADM *pUtAdm,short sPrior,short *sstat,char **regelnavn)

## LC_PunktUtvalg

PUNKT-utvalg

    =============================================================================
    Purpose:
    Sjekker PINFO-delen av aktuell gruppe for tilslag på PUNKT-UTVALG.
    Parameters:
    Type       Name       I/O   Explanation
    -----------------------------------------------------------------------------
    LC_UT_ADM * pUtAdm      i    Peker til administrasjonsblokk for utvalg.
    short      sPrior      i    Prioritet.
    short     *psStat     iu    Søkestatus, Inn: 1=start søk, 0=fortsett søk
                                            Ut : 0=tilslag, -1=ikke tilslag
    long       lPnr        i    Punktnummer som skal sjekkes.
    char     **ppszRegel   u    Peker til regelnavn
    Usage:
    LC_PunktUtvalg(pUtAdm,sPrior,&psStat,lPnr,&ppszRegel);
       =============================================================================

    SK_EntPnt_FYBA void LC_PunktUtvalg(LC_UT_ADM *pUtAdm,short sPrior,short *psStat,long lPnr,char **ppszRegel)

## LC_FinnPinfoUtvalg

========================================================================== Purpose: Finner et PINFO-UTVALG i kjeden av slike utvalg. Parameters: Type Name I/O Explanation -------------------------------------------------------------------------- LC_UT_ADM * pUtAdm i Peker til administrasjonsblokk for utvalg. char *pszName i Utvalgsnavn LC_UTVALG * pUtvalg r Peker til utvalget. (NULL = ikke funnet) Usage: pUtvalg = LC_FinnPinfoUtvalg(pszName); ========================================================================== SK_EntPnt_FYBA LC_UTVALG * LC_FinnPinfoUtvalg(LC_UT_ADM * pUtAdm,const char *pszName)

## LC_PiTestUtvalg

Sjekk PUNKT/PINFO utvalg

    ==========================================================================
    Purpose:
    Sjekk om PINFO i aktuellt punkt tilfredstiller et punkt-utvalg.
    Parameters:
    Type        Name     I/O  Explanation
    --------------------------------------------------------------------------
    LC_UT_ADM *  pUtAdm    i   Administrasjonsblokk
    LC_UTVALG *  pU        i   Peker til utvalg
    long        lPnr      i    Punktnummer som skal sjekkes.
    short       sTilslag  r   Status: UT_TRUE=tilslag, UT_FALSE=ikke tilslag
    Usage:
    sTilslag = LC_PiTestUtvalg(pUtAdm,pU,lPnr);
       ==========================================================================

    SK_EntPnt_FYBA short LC_PiTestUtvalg(LC_UT_ADM * pUtAdm,LC_UTVALG * pU,long lPnr)

## LC_GiQuery

Query mot aktuell ginfo

    =============================================================================
    Purpose:
    Sjekker GINFO-delen av aktuell gruppe mot aktuellt query-oppsett.
    Parameters:
    Type       Name     I/O   Explanation
    -----------------------------------------------------------------------------
    LC_UT_ADM *pUtAdm    i    Peker til administrasjonsblokk for utvalg.
    short      status    r    Søkestatus, UT_TRUE=tilslag, UT_FALSE=ikke tilslag
    Usage:
    ist = LC_GiQuery(pUtAdm);
       =============================================================================

    SK_EntPnt_FYBA short LC_GiQuery(LC_UT_ADM *pUtAdm)

## LC_FAGiQuery

Finn alle ved query mot ginfo

    =============================================================================
    Purpose:
    Sjekker GINFO-delen av alle grupper mot aktuell queryopsett.
    Tilslag merkes i brukttabellen kolonne BT_GISOK (14).
    [Esc] avbryter utvalget, antall tilslag settes da til -1.
    Parameters:
    Type            Name    I/O   Explanation
    -----------------------------------------------------------------------------
    LC_UT_ADM      *pUtAdm   i    Peker til administrasjonsblokk for utvalg.
    unsigned short  usLag    i    Velg hvilke "lag" det skal søkes i.
                                    LC_FRAMGR og /eller LC_BAKGR
    short           antall   r    Antall tilslag på utvalget.
    Usage:
    antall = LC_FAGiQuery(pUtAdm, LC_FRAMGR | LC_BAKGR);
       =============================================================================

    SK_EntPnt_FYBA long LC_FAGiQuery(LC_UT_ADM *pUtAdm,unsigned short usLag)

## LC_FAGiKombinertFlateQuery

Finn alle ved query mot ginfo i flate og omkrets

    =============================================================================
    Purpose:
    Sjekker GINFO-delen av alle flater mot aktuell queryopsett. Finner de flatene
    som har tilslag på utvalgsblokken pUtAdmFlate og har har referanser til grupper
    som har tilslag på utvalgsblokken pUtAdmOmkrets.
    Tilslag merkes i brukttabellen kolonne BT_GISOK (30).
    [Esc] avbryter utvalget, antall tilslag settes da til -1.
    Parameters:
    Type            Name     I/O   Explanation
    -----------------------------------------------------------------------------
    LC_UT_ADM  *pUtAdmFlate   i    Peker til administrasjonsblokk for utvalg for flata.
    LC_UT_ADM  *pUtAdmOmkrets i    Peker til administrasjonsblokk for utvalg for omkrets.
    unsigned short  usLag     i    Velg hvilke "lag" det skal søkes i.
                                   LC_FRAMGR og /eller LC_BAKGR
    short           sAlle     i    Flagg for hvorvidt utvalg for omkrets må slå til på
                                   alle gruppene i omkretsen. TRUE/FALSE
    short           antall    r    Antall tilslag på utvalget.
    Usage:
    antall = LC_FAGiQuery(pUtAdm, LC_FRAMGR | LC_BAKGR);
       =============================================================================

    SK_EntPnt_FYBA long LC_FAGiKombinertFlateQuery(LC_UT_ADM * pUtAdmFlate,LC_UT_ADM * pUtAdmOmkrets,
                                                   unsigned short usLag,short sMetode)

## LC_QueryGP

Søk i ginfo og finn verdi

    =============================================================================
    Purpose:
    Bruker query-tekst for å finne linje der parameter skal hentes.
    Parameters:
    Type     Name   I/O   Explanation
    ---------------------------------------------------------------------------
    char    *qulin   i    Linje med query-tekst.
    unsigned short    iniv    i    Nivå: Det er definert konstanter som henges
                                sammen med "|".
                                LC_GINFO = søk i GINFO på aktuell gruppe
                                LC_HODE = søk i filhodet
                                Hvis begge er brukt søkes det først i GINFO.
    unsigned short   *univ    u    Nivå: LC_GINFO = parameter er fra GINFO
                                LC_HODE = parameter er fra filhodet
    short   *ulin    u    GINFO-linjenummer for tilslaget.
    char   **para    u    Funnet parameter.
    short     funnet  r    Status: UT_TRUE=funnet, UT_FALSE=ikke funnet
    Usage:
    funnet = LC_QueryGP(qulin,LC_GINFO | LC_HODE,&univ,&ulin,¶);
       =============================================================================

    SK_EntPnt_FYBA short LC_QueryGP(char *qulin,unsigned short iniv,unsigned short *univ,short *ulin,char **para)

## LC_InqMaxPrioritet

Hent største prioritet

    ==========================================================================
    Purpose:
    Henter største prioritet for gitt utvalgstype.
    Parameters:
    Type         Name          I/O   Explanation
    ----------------------------------------------------------------------
    LC_UT_ADM *   pUA            i    Peker til administrasjonsblokk for utvalg.
    short        sMaxPrioritet  r    Max prioritet
    Usage:
    sMaxPrioritet = LC_InqMaxPrioritet(pUA);
       ==========================================================================

    SK_EntPnt_FYBA short LC_InqMaxPrioritet(LC_UT_ADM * pUA)

## LC_TestPrioritetBrukt

Tester om en prioritet er brukt

    ==========================================================================
    Purpose:
    Tester om en prioritet er brukt.
    Parameters:
    Type        Name      I/O   Explanation
    --------------------------------------------------------------------------
    LC_UT_ADM *  pUtAdm     i    Peker til administrasjonsblokk for utvalg.
    short       sPrioritet i    Prioritet som skal testes.
    short       sBrukt     r    Status: UT_TRUE=brukt, UT_FALSE=ikke brukt.
    Usage:
    sBrukt = LC_TestPrioritetBrukt(pUtAdm,sPrioritet);
       ==========================================================================

    SK_EntPnt_FYBA short LC_TestPrioritetBrukt(LC_UT_ADM * pUtAdm,short sPrioritet)

## LC_UtvalgPrioritet

Finn brukt prioritet

    ==========================================================================
    Purpose:
    Sjekker GINFO og PINFO for å finne hvilke prioriteter som "berører" aktuell
    gruppe. Resultatet markeres i Gruppetabellen ulPrior.
    Parameters:
    Type           Name       I/O Explanation
    ---------------------------------------------------------------------------
    LC_UT_ADM     *pUtAdm      i  Peker til administrasjonsblokk for utvalg.
    Usage:
    LC_UtvalgPrioritet(pUtAdm);
       ===========================================================================

    SK_EntPnt_FYBA void LC_UtvalgPrioritet(LC_UT_ADM *pUtAdm)

# 20 Marking Groups

## LC_SetBt

Sett merke i brukttabellen

    ==========================================================================
    Purpose:
    Legg inn merke i brukttabellen.
    Parameters:
    Type    Name      I/O   Explanation
    --------------------------------------------------------------------------
    LC_BGR * pGr       i    Gruppenummer
    short   kolonne   i    Kolonne som skal merkes.
                           (Lovlig BT_MIN_USER - BT_MAX_USER)
    Usage:
    LC_SetBt(pGr,kolonne);
       ==========================================================================

    SK_EntPnt_FYBA void LC_SetBt(LC_BGR * pGr,short kolonne)

## LC_ClrBt

Slett merke i brukttabellen

    ==========================================================================
    Purpose:
    Fjern merke i brukttabellen.
    Parameters:
    Name     Type    I/O   Explanation
    --------------------------------------------------------------------------
    LC_BGR *  pGr      i    Gruppenummer
    kolonne  short    i    Kolonne som skal merkes.
                           (Lovlig BT_MIN_USER - BT_MAX_USER)
    Usage:
    LC_ClrBt(pGr,kolonne);
       ==========================================================================

    SK_EntPnt_FYBA void LC_ClrBt(LC_BGR * pGr,short kolonne)

## LC_GetBt

Hent merke i brukttabellen

    ==========================================================================
    Purpose:
    Hent merke i brukttabellen.
    Parameters:
    Name     Type    I/O   Explanation
    --------------------------------------------------------------------------
    LC_BGR *  pGr      i    Gruppenummer
    kolonne  short    i    Kolonne som skal brukes.
                           (Lovlig BT_MIN_BT - BT_MAX_BT)
    merke    short    r    UT_FALSE = ikke marka,  UT_TRUE = merka
    Usage:
    merke = LC_GetBt(pGr,kolonne);
       ==========================================================================

    SK_EntPnt_FYBA short LC_GetBt(LC_BGR * pGr,short kolonne)

## LC_EraseBt

Slett område i brukttabellen

    ==========================================================================
    Purpose:
    Blanker en eller flere kolonner i brukttabellen i aktuell base.
    Parameters:
    Name     Type    I/O   Explanation
    --------------------------------------------------------------------------
    fra_kol  short    i    Første kolonne som skal blankes.
                           (Lovlig BT_MIN_USER - BT_MAX_USER)
    til_kol  short    i    Siste kolonne som skall blankes.
                           (Lovlig BT_MIN_USER - BT_MAX_USER)
    Usage:
    LC_EraseBt(fra_kol,til_kol);
       ==========================================================================

    SK_EntPnt_FYBA void LC_EraseBt(short fra_kol,short til_kol)

## LC_CopyBt

Kopier kolonne i brukttabellen

    ==========================================================================
    Purpose:
    Kopier kolonne i brukttabellen.
    Samtidig er det mulig å utføre logiske operasjoner mellom de to kolonnene.
    Parameters:
    Type   Name        I/O   Explanation
    --------------------------------------------------------------------------
    short  fra_kol      i    Kolonne det skal kopieres fra. (Lovlig 0 - BT_MAX_BT)
    short  til_kol      i    Kolonne det skal kopieres til. (Lovlig 1 - BT_MAX_USER)
    short  operasjon    i    Logisk operasjon mellom kolonnene.
                              BC_COPY     = Overskriv gammelt innhold.
                              BC_AND      = Logisk AND mellom de to kolonnene.
                              BC_OR       = Logisk OR mellom de to kolonnene.
                              BC_INVERT   = Overskriv gammelt innhold med
                                            invertert verdi.
                              BC_EXCHANGE = Bytter innholdet i de to kolonnene.

    Usage:
    LC_CopyBt(fra_kol,til_kol,operasjon);
       ==========================================================================

    SK_EntPnt_FYBA void LC_CopyBt(short fra_kol,short til_kol,short operasjon)

## LC_SetModusMerk

Setter flag for merking av referert gruppe.

    ==========================================================================
    Purpose:
    Setter flag for merking av referert gruppe.
    Har innvirkning for virkemåten til:
    LC_FAGeo, LC_FASn, og LC_FAGiQuery
    Parameters:
    Type           Name   I/O  Explanation
    -----------------------------------------------------------------------
    unsigned short modus   i   0 = Ikke merk referert gruppe.
                               1 = Merk referert gruppe.
    Usage:
    LC_SetModusMerk(1);
       ==========================================================================

    SK_EntPnt_FYBA void LC_SetModusMerk(unsigned short usModus)

## LC_MerkGr

Merk en gruppe brukttabellen

    ==========================================================================
    Purpose:
    CH Merk aktuell gruppe i brukttabellen. Hvis flag for merking av referert
    gruppe er satt, blir også eventuelle refererte grupper merket.
    Parameters:
    Type    Name      I/O   Explanation
    --------------------------------------------------------------------------
    short   sKolonne   i    Kolonne som skal merkes.
                            (Lovlig BT_MIN_USER - BT_MAX_USER)
    short   sBryter    i    Bryter   1=på, 0=av
    long    lAntall    r    Antall grupper merket.
    Usage:
    lAntall = LC_MerkGr(sKolonne,sBryter);
       ==========================================================================

    SK_EntPnt_FYBA long LC_MerkGr(short sKolonne,short sBryter)

# 21 Special Handling of Polygons

## Polygon Description

Structs for polygon description.

    This is a set of structs that are linked together in order to form complete description
    of a polygon. Examples usage can be found in:
    LC_POL_GetRef.

      !-----------------!
      ! LC_POLYGON      !
      !                 !       !-------------------------!
      ! !- Omkrets --!  !       !   !-----------------!   !---------------!
      ! !LC_POL_OMKR !  !       ! !-!LC_POL_ELEMENT   ! !-!LC_POL_ELEMENT !
      ! !            !  !       ! ! ! - Bgr           ! ! ! - Bgr         !
      ! !- Siste     !--!-------! ! ! - Snr           ! ! ! - Snr         !
      ! !- Første    !--!---------! ! - Retning       ! ! ! - Retning     !
      ! !------------!  !           ! - Forrige (NULL)! ! ! - Forrige     !
      ! !- Hull ------! !           ! - Neste         !-! ! - Neste (NULL)!
      ! !LC_OY_ADM    ! !           !-----------------!   !---------------!
      ! !             ! !
      ! !- Første øy  !-!-!
    !-!-!- Siste øy   ! ! !
    ! ! !-------------! ! !
    ! !-----------------! !
    !   !-----------------!
    !   !                                 !------------------------!
    !   !                  !------------! !   !-----------------! !---------------!
    !  !--------------!  !-!LC_POL_OMKR ! ! !-!LC_POL_ELEMENT   !!!LC_POL_ELEMENT !
    !  !LC_OY_ELEMENT !  ! !            ! ! ! ! - Bgr           !!! - Bgr         !
    !  !- Omkrets     !--! !- Siste     !-! ! ! - Snr           !!! - Snr         !
    !  !- Neste       !-!  !- Første    !---! ! - Retning       !!! - Retning     !
    !  !--------------! !  !------------!     ! - Forrige (NULL)!!! - Forrige     !
    !                   !                     ! - Neste         !!! - Neste (NULL)!
    !                   !                     !-----------------! !---------------!
    !                   !
    !   !---------------!                 !--------------------------!
    !   !                  !------------! !   !-----------------!   !---------------!
    !  !--------------!  !-!LC_POL_OMKR ! ! !-!LC_POL_ELEMENT   ! !-!LC_POL_ELEMENT !
    !--!LC_OY_ELEMENT !  ! !            ! ! ! ! - Bgr           ! ! ! - Bgr         !
       !- Omkrets     !--! !- Siste     !-! ! ! - Snr           ! ! ! - Snr         !
       !- Neste (NULL)!    !- Første    !---! ! - Retning       ! ! ! - Retning     !
       !--------------!    !------------!     ! - Forrige (NULL)! ! ! - Forrige     !
                                              ! - Neste         !-! ! - Neste (NULL)!
                                              !-----------------!   !---------------!

## LC_POL_InitPolygon

Initierer polygon-struktur

    =======================================================================
    Purpose:
    Initierer polygon-struktur.
    Parametere:
    Type        Name     I/O    Explanation
    -----------------------------------------------------------------------
    LC_POLYGON *pPolygon  I     Peikar til polygonbeskrivelse
    Usage:
    LC_POLYGON  Polygon;
    LC_POL_InitPolygon(&Polygon);
    =======================================================================

    SK_EntPnt_FYBA void LC_POL_InitPolygon(LC_POLYGON *pPolygon)

## LC_POL_FrigiPolygon

Frigi minne som er allokert til polygon

    =======================================================================
    Purpose:
    Frigir minne som er allokert til polygon. (Både omkrets og hull.)
    Parametere:
    Type        Name     I/O    Explanation
    -----------------------------------------------------------------------
    LC_POLYGON *pPolygon  I     Peikar til polygonbeskrivelse
    Usage:
    LC_POLYGON  Polygon;
    LC_POL_FrigiPolygon(&Polygon);
    =======================================================================

    SK_EntPnt_FYBA void LC_POL_FrigiPolygon(LC_POLYGON *pPolygon)

## LC_POL_InitOmkrets

Initierer polygon-omkrets

    =======================================================================
    Usage:
    POL_OMKR  YtrePolygon;
    LC_POL_InitOmkrets(YtrePolygon);
    parametere:
    Type         Name     I/O    Explanation
    -----------------------------------------------------------------------
    LC_POL_OMKR *pPO      I/O    Peikar til polygonadministrasjonsblokka
    Initierer administrasjonsblokka for polygonelement
    =======================================================================

    SK_EntPnt_FYBA void LC_POL_InitOmkrets(LC_POL_OMKR *pPO)

## LC_POL_LeggTilGruppeOmkrets

Legg til eit element

    =======================================================================
    Usage:
    LC_POL_OMKR  YtrePolygon;
    pElement = LC_POL_LeggTilGruppeOmkrets(YtrePolygon,pBgr,sRetning,lSnr);
    parametere:
    Type            Name     I/O    Explanation
    -----------------------------------------------------------------------
    LC_POL_OMKR *    pPO      I/O    Peikar til polygonadministrasjonsblokka
    LC_BGR *         pBgr      I     Gruppenummer
    short           sRetning  I     Nøsteretning (LC_MED_DIG eller LC_MOT_DIG)
    long            lSnr      I     Serienummer
    LC_POL_ELEMENT * pElement  R     Peker til innlagt element
    Legg til eit element i kjeden av polygonelement.
    =======================================================================

    SK_EntPnt_FYBA LC_POL_ELEMENT * LC_POL_LeggTilGruppeOmkrets(LC_POL_OMKR *pPO,LC_BGR *pBgr,
                                                    short sRetning, long lSnr)

## LC_POL_FjernGruppeOmkrets

Fjernar element

    =======================================================================
    Usage:
    LC_POL_OMKR  YtrePolygon;
    LC_POL_FjernGruppeOmkrets(&YtrePolygon,);
    parametere:
    Type            Name     I/O    Explanation
    -----------------------------------------------------------------------
    LC_POL_OMKR    *pPO      I/O    Peikar til polygonadministrasjonsblokka
    LC_POL_ELEMENT *pPE       I      Peker til element som skal fjernes
    Fjernar et element i kjeden av polygonelement.
    =======================================================================

    SK_EntPnt_FYBA void LC_POL_FjernGruppeOmkrets(LC_POL_OMKR *pPO, LC_POL_ELEMENT *pPE)

## LC_POL_FjernSisteGruppeOmkrets

Fjernar siste element

    =======================================================================
    Usage:
    LC_POL_OMKR  YtrePolygon;
    LC_POL_FjernSisteGruppeOmkrets(&YtrePolygon);
    parametere:
    Type         Name     I/O    Explanation
    -----------------------------------------------------------------------
    LC_POL_OMKR *  pPO      I/O    Peikar til polygonadministrasjonsblokka
    Fjernar siste element i kjeden av polygonelement.
    =======================================================================

    SK_EntPnt_FYBA void LC_POL_FjernSisteGruppeOmkrets(LC_POL_OMKR *pPO)

## LC_POL_FrigiOmkrets

Frigjer minne som er allokert til kjede av polygonelement

    =======================================================================
    Usage:
    parametere:
    Type         Name     I/O    Explanation
    -----------------------------------------------------------------------
    LC_POL_OMKR *pPO      I/O    Peikar til polygonadministrasjonsblokka
    Frigir minne som er allokert til kjede av polygonelement.
    =======================================================================

    SK_EntPnt_FYBA void LC_POL_FrigiOmkrets(LC_POL_OMKR *pPO)

## LC_POL_InitOy

Initierer øy-kjeden

    =======================================================================
    Usage:
    LC_OY_ADM  OyKjede;
    LC_POL_InitOy(OyKjede);
    parametere:
    Type       Name     I/O    Explanation
    -----------------------------------------------------------------------
    LC_OY_ADM *pOA      I/O    Peikar til øyadministrasjonsblokka
    Initierer øy-kjeden.
    =======================================================================

    SK_EntPnt_FYBA void LC_POL_InitOy(LC_OY_ADM *pOA)

## LC_POL_FrigiAlleOyer

Frigjer minne som er allokert til kjede av øyelement

    =======================================================================
    Usage:
    LC_OY_ADM  OyKjede;
    LC_POL_FrigiAlleOyer(OyKjede);
    parametere:
    Type       Name     I/O    Explanation
    -----------------------------------------------------------------------
    LC_OY_ADM *pOA      I/O    Peikar til øyadministrasjonsblokka
    Frigjer minne som er allokert til kjede av øy (i polygon) - element.
    =======================================================================

    SK_EntPnt_FYBA void LC_POL_FrigiAlleOyer(LC_OY_ADM *pOA)

## LC_POL_FjernOy

Fjernar ei oy frå kjede av øyelement

    =======================================================================
    Usage:
    LC_OY_ADM  OyKjede;
    LC_POL_FjernOy(OyKjede,OyElement);
    parametere:
    Type           Name     I/O    Explanation
    -----------------------------------------------------------------------
    LC_OY_ADM     *pOA      I/O    Peikar til øyadministrasjonsblokka
    LC_OY_ELEMENT *pOE      I/O    Peikar til kjede av oyar
    Frigjer minne som er allokert til kjede av øy (i polygon) - element.
    =======================================================================

    SK_EntPnt_FYBA void LC_POL_FjernOy(LC_OY_ADM *pOA,LC_OY_ELEMENT *pOE)

## LC_POL_LeggTilOy

Legg til eit element

    =======================================================================
    Usage:
    LC_OY_ADM  OyKjede;
    LC_POL_LeggTilOy(&OyKjede,pPO);
    Parametere:
    Type         Name     I/O    Explanation
    -----------------------------------------------------------------------
    LC_OY_ADM   *pOyKjede I/O    Peikar til kjede av øyelement
    LC_POL_OMKR *pPO       I     Peikar til polygonadministrasjonsblokka
    Legg til eit element i kjeden av øyar (i polygon) - element.
    =======================================================================

    SK_EntPnt_FYBA void LC_POL_LeggTilOy(LC_OY_ADM *pOA,LC_POL_OMKR *pPO)

## LC_POL_TestBrukt

Testar om ei gruppe er brukt i polygonet

    =======================================================================
    Usage:
    LC_POL_TestBrukt(pPolygon,&Bgr);
    parametere:
    Type        Name     I/O    Explanation
    -----------------------------------------------------------------------
    LC_POLYGON *pPolygon  I     Peker til polygonbeskrivelse.
    LC_BGR     *pBgr      I     Peikar til gruppe
    short       status    R     Status UT_TRUE = gruppe er brukt i polygonet
                                 Status UT_FALSE = gruppe er IKKJE brukt i polygonet
    Testar om ei gruppe er brukt i gitt polygon.
    =======================================================================

    SK_EntPnt_FYBA short LC_POL_TestBrukt(LC_POLYGON *pPolygon,LC_BGR *pBgr)

## LC_POL_PutRef

Legger inn referanser i GINFO

    =======================================================================
    Purpose:
    Legger inn referanser i GINFO, ut fra beskrivelse i struktur.
    Parametere:
    Type        Name     I/O    Explanation
    -----------------------------------------------------------------------
    LC_POLYGON *pPolygon  I     Polygonbeskrivelse
    short       ngi       r     Antall linjer GINFO
    Usage:
    ngi = LC_POL_PutRef(pPolygon);
    =======================================================================

    SK_EntPnt_FYBA short LC_POL_PutRef(LC_POLYGON *pPolygon)

## LC_POL_GetRef

Hent referanser for flate fra GINFO

    ==========================================================================
    Purpose:
    Henter referanser fra GINFO til struktur.
    Parameters:
    Type         Name      I/O  Explanation
    -----------------------------------------------------------------------
    LC_POLYGON  *pPolygon   I   Peker til adm. for polygonbeskrivelse
    Usage:
       short ngi;
       long nko;
       unsigned short info;
       LC_POLYGON Polygon;
       LC_POL_ELEMENT * pPE;
       LC_OY_ELEMENT * pOE;
       LC_POL_InitPolygon(&Polygon);
       LC_POL_GetRef(&Polygon);
       . Omkretsen .
       for(pPE = Polygon.HovedPO.pForstePE; pPE != NULL; pPE = pPE->pNestePE) {
          gnavn = LC_RxGr(&pPE->Bgr,LES_OPTIMALT,&ngi,&nko,&info);
          .
          Behandle ytre avgrensing
          .
       }
       . Øyer .
       for (pOE = Polygon.OyOA.pForsteOE; pOE != NULL; pOE = pOE->pNesteOE) {
          for (pPE = pOE->PO.pForstePE; pPE != NULL; pPE = pPE->pNestePE) {
             gnavn = LC_RxGr(&pPE->Bgr,LES_OPTIMALT,&ngi,&nko,&info);
             .
             Behandle indre avgrensing (øy)
             .
          }
       }
       . Frigi allokerte kjeder .
       LC_POL_FrigiPolygon(&Polygon);
    ==========================================================================

    SK_EntPnt_FYBA void LC_POL_GetRef(LC_POLYGON *pPolygon)

## LC_POL_GetRefOmkrets

Hent referanser for omkretsen av flate

    ==========================================================================
    Purpose:
    Henter referanser fra GINFO til struktur.
    Rutinen initierer strukturen pPO, men frigir ikke eventuellt gammelt innhold.
    Parameters:
    Type          Name    I/O  Explanation
    -------------------------------------------------------------------------
    LC_POL_OMKR  *pPO;     IU  Peker til kjede som beskriver omkretsen.
    Usage:
       LC_POL_GetRefOmkrets(&OyPO);
    ==========================================================================

    SK_EntPnt_FYBA void LC_POL_GetRefOmkrets(LC_POL_OMKR *pPO)

## LC_POL_PTst

Polygontest

    ==========================================================================
    Purpose:
    Sjekker om gitt punkt ligger innenfor polygon angitt av pPolygon.
    Forutsetter at pPolygon danner et lukket polygon.
    Skifter ikke aktuell gruppe.
    Parameters:
    Type    Name    I/O   Explanation
    --------------------------------------------------------------------------
    double  a        i    Punkt som skal sjekkes
    double  n        i
    short   ist      r    status: UT_FALSE = punktet er utenfor flaten
                                  UT_TRUE = punktet ligger inne på flaten
    Usage:
    .
    ==========================================================================

    SK_EntPnt_FYBA short LC_POL_PTst(LC_POLYGON *pPolygon,double a,double n)

## LC_POL_PTstOmkrets

Sjekk om punkt ligger inni polygonomkrets

    ==========================================================================
    Purpose:
    Sjekker om gitt punkt ligger innenfor yttergrensen for polygon angitt
    av struktur.
    Forutsetter at tabellen danner et lukket polygon
    Skifter ikke aktuell gruppe.
    Parameters:
    Type          Name  I/O   Explanation
    --------------------------------------------------------------------------
    LC_POL_OMKR  *pPO    I/O  Peker til beskrivelse av omkretsen
    double        a      i    Punkt som skal sjekkes
    double        n      i
    short         ist    r    status: UT_FALSE = punktet er utenfor flaten
                                      UT_TRUE  = punktet ligger inne på flaten
    Usage:
    ist = LC_POL_PTstOmkrets(pPO,a,n);
       ==========================================================================

    SK_EntPnt_FYBA short LC_POL_PTstOmkrets(LC_POL_OMKR *pPO,double a,double n)

## LC_POL_Box

Henter omskreven boks

    =======================================================================
    Usage:
    LC_POL_Box(pPA,&nva,&nvn,&oha,&ohn);
    parametere:
    Type          Name     I/O    Explanation
    -----------------------------------------------------------------------
    LC_POL_OMKR  *pPO       I     Peikar til polygonadministrasjonsblokka
    double       *nva       U
    double       *nvn       U
    double       *oha       U
    double       *ohn       U
    Henter omskriven boks for polygon.
    =======================================================================

    SK_EntPnt_FYBA void LC_POL_Box(LC_POL_OMKR *pPO,double *nva,double *nvn, double *oha,double*ohn)

# 22 Various Functions

## 22.1 Calculations

## LC_BerAreal

Calculate the area of the active group

    ==========================================================================
    Purpose:
    Beregner arealet av aktuell gruppe hvis denne er flate.
    Referansene brukes for arealberegningen.
    Tar hensyn til fradrag for øyer.
    Parameters:
    Type     Name     I/O   Explanation
    --------------------------------------------------------------------------
    double   areal     u    Beregnet areal
    Usage:
    areal = LC_BerAreal();
       =============================================================================

    SK_EntPnt_FYBA double LC_BerAreal(void)

## LC_BerLengde

Calculate the horizonal length of the active group

    ==========================================================================
    Purpose:
    Beregn horisontal lengde av aktuell gruppe.
    Tar ikke hensyn til høyde/dybde.
    Referansene brukes IKKE i beregningen.
    Parameters:
    Type     Name     I/O   Explanation
    --------------------------------------------------------------------------
    double   lengde    u    Beregnet lengde
    Usage:
    areal = LC_BerLengde();
    =============================================================================

    SK_EntPnt_FYBA double LC_BerLengde(void)

## LC_BerLengde3D

Calculate the diagonal length of the active group

    ==========================================================================
    Purpose:
    Beregn skrå lengde av aktuell gruppe.
    Krever at det finnes høyde/dybde i alle punkt.
    Referansene brukes IKKE i beregningen.
    Beregner bare for LINJE og KURVE.
    Parameters:
    Type     Name     I/O   Explanation
    --------------------------------------------------------------------------
    double   lengde    u    Beregnet lengde
    bool     beregnet  r    Status som viser om lengde er beregnet
    Usage:
    beregnet = LC_BerLengde3D(&skraa_lengde);
    =============================================================================

    SK_EntPnt_FYBA bool LC_BerLengde3D(double *skraa_lengde)

## LC_BerAvgrensLengde

Calculate the length of the perimeter of a polygon

    ==========================================================================
    Purpose:
    Beregn lengden av avgrensningen av aktuell gruppe hvis denne er flate.
    Både indre og ytre avgrensning beregnes.
    Parameters:
    Type     Name     I/O   Explanation
    --------------------------------------------------------------------------
    double   lengde     u    Beregnet areal
    Usage:
    lengde = LC_BerAvgrensLengde();
    =============================================================================

    SK_EntPnt_FYBA double LC_BerAvgrensLengde(void)

## LC_BerYtreAvgrensLengde

Calculate the length of the outer perimeter of a polygon

    ==========================================================================
    Purpose:
    Beregn lengden av ytre avgrensningen av aktuell gruppe hvis denne er flate.
    Bare ytre avgrensning beregnes.
    Parameters:
    Type     Name     I/O   Explanation
    --------------------------------------------------------------------------
    double   lengde     u    Beregnet lengde
    Usage:
    lengde = LC_BerYtreAvgrensLengde();
    =============================================================================

    SK_EntPnt_FYBA double LC_BerYtreAvgrensLengde(void)

## LC_BerIndreAvgrensLengde

Calculate the length of the inner perimeter of a polygon

    ==========================================================================
    Purpose:
    Beregn lengden av indre avgrensningen av aktuell gruppe hvis denne er flate.
    Bare indre avgrensning beregnes.
    Parameters:
    Type     Name     I/O   Explanation
    --------------------------------------------------------------------------
    double   lengde     u    Beregnet lengde
    Usage:
    lengde = LC_BerIndreAvgrensLengde();
    =============================================================================

    SK_EntPnt_FYBA double LC_BerIndreAvgrensLengde(void)

## LC_RoundKoord

Change the coordinates in the active group to the correct unit

    ===========================================================================
    Purpose:
    Endrer koordinatene i aktuell gruppe i buffer til valgt enhet.
    (Rutinen blir utført fra LC_WxGr.)
    Parameters: ingen
    Usage:
    LC_RoundKoord();
    ==============================================================================

    SK_EntPnt_FYBA void LC_RoundKoord(void)

## 22.2 Structure Changes

## LC_SnuGr

Invert group order

    ===========================================================================
    Purpose:
    Snur en gruppe.
    Rutinen tilsvarer put fra brukerprogram inn i ringbufret.
    Både koordinater, høyde, KP og PINFO blir behandlet.
    For .BUE blir fortegnet på radius endret.
    Fortegnet på referanser til gruppen blir oppdatert.
    Det er ikke mulig å snu gruppe som er referert fra grupper som
    ikke kan oppdateres. (Flate/trase som er sjekket ut av andre i NGIS.)
    Parameters:
    Type    Name    I/O   Explanation
    -----------------------------------------------------------------------------
    short   sStatus  r    Status: UT_TRUE  = OK
                                  UT_FALSE = feil, ikke splittet
    Usage:
       status = LC_SnuGr();
       =============================================================================

    SK_EntPnt_FYBA short LC_SnuGr(void)

## LC_SammenfoyGr

Merge groups

    ==========================================================================
    Purpose:
    Sammenføye to grupper.
    Kopierer koordinater fra gitt gruppe inn i aktuell gruppe.
    De kopierte koordinatene kommer som en utvidelse av gruppen.
    Rutinen tildeler selv nødvendig plass i buffer.
    Kvalitet og enhet blir automatisk oppdatert slik at gruppene ikke
    mister informasjon.
    Gruppen det kopieres fra blir slettet.
    Eventuelle referanser til gruppene blir oppdatert.
    Det er ikke mulig å sammenføye hvis en av gruppene er referert fra grupper
    som ikke kan oppdateres. (Flate/trase som er sjekket ut av andre i NGIS.)
    Parameters:
    Type    Name       I/O   Explanation
    -----------------------------------------------------------------------------
    LC_BGR * pFraBgr    i    Gruppenummer det skal kopieres fra.
    short   retning     i    Buffer-retning:
                                   HENT_FORRFRA ( 1) = vanlig,
                                   HENT_BAKFRA  (-1) = buffer skal snus.
    short   plassering  i    Forteller hvor pFraBgr skal plasseres i
                             aktuell gruppe.
                                LC_SG_FORRAN = Heng den andre gruppen inn
                                               foran første koordinat.
                                LC_SG_BAK    = Heng den andre gruppen inn
                                               etter siste koordinat.
    short   metode      i    Forteller hva som skal skje med sammenføingspunktene.
                                LC_SG_BEHOLD = Begge punktene beholdes.
                                LC_SG_FJERN  = Bare det ene av punktene beholdes.
    short   ngi         u    Antall GINFO-linjer
    long    nko         u    Antall koordinater
    unsigned short info u    Diverse informasjon. (Se under LC_RxGr)
    short   sStatus     r    Status: UT_TRUE=OK, UT_FALSE=ikke utført.
    Usage:
    sStatus = LC_SammenfoyGr(bgr,retning,plassering,metode,&ngi,&nko,&info);
       =============================================================================

    SK_EntPnt_FYBA short LC_SammenfoyGr(LC_BGR * pFraBgr,short retning,short plassering,short metode,
                        short *ngi,long *nko,unsigned short *info)

## LC_SplittGr

Split group

    ==========================================================================
    Purpose:
    Splitter aktuell gruppe i to deler.
    Første del av gruppen beholdes som aktuell gruppe. Denne blir ikke
    skrevet til SOSI-filen, men buffer er oppdatert.
    Siste del av gruppen legges som en ny gruppe på samme fil som
    opprinnelig gruppe. Denne blir skrevet til basen.
    Den delen av gruppen som ligger mellom P1 og P2 blir fjernet.
    Hvis gruppen er BUEP og en av delene får bare to koordinater
    blir det lagt inn et nytt punkt midt på buen.
    Det er ikke mulig å splitte grupper som er referert fra grupper som
    ikke kan oppdateres. (Flate/trase som er sjekket ut av andre i NGIS.)
    Parameters:
    Type     Name   I/O   Explanation
    --------------------------------------------------------------------------
    long    sP1     i    Punktnummer 1.   (Må være større enn 1)
    long    sP2     i    Punktnummer 2.   (Må være mindre enn nko)
    LC_BGR *  pBgr2   u    Nytt gruppenummer for siste del av gruppen.
    short    sStatus r    Status: UT_TRUE  = OK
                                  UT_FALSE = feil, ikke splittet
    Usage:
    sStatus = LC_SplittGr(sP1,sP2,&Bgr2);
       ==========================================================================

    SK_EntPnt_FYBA short LC_SplittGr (long sP1,long sP2,LC_BGR * pBgr2)

## LC_ErstattReferanse

Replace reference

    ==========================================================================
    Purpose:
    Erstatt referanse i alle grupper i gitt fil.
    Parameters:
    Type       Name          I/O  Explanation
    --------------------------------------------------------------------------
    LC_FILADM *pFil           i   Fil som skal behandles
    long       lGmlSnr        i   Gruppe som skal byttes ut
    long       lNyttSnr       i   Ny gruppe
                                  Verdien 0 fører til gammelt serienummer
                                  fjernes uten at det legges inn noe nytt.
    bool       bSammeRetning  i   Gruppene er digitalisert i samme retning
    Usage:
    sStatus = LC_ErstattReferanse(pFil, lGmlSnr, lNyttSnr, bSammeRetning);
    ==========================================================================

    SK_EntPnt_FYBA void LC_ErstattReferanse (LC_FILADM *pFil,long lGmlSnr,long lNyttSnr, bool bSammeRetning)

## 22.3 The Entire Base

## LC_InqAntFiler

Get number of files in the base

    ==========================================================================
    Purpose:
    Finn antall filer i aktuell base.
    Parameters:
    Type           Name    I/O  Explanation
    -------------------------------------------------------------------
    unsigned short usLag    i   Velg hvilke "lag" det skal søkes i.
                                  LC_FRAMGR og /eller LC_BAKGR
                                  (Bruk "|" for å kombinere.)
    short          sAntall  r   Antall filer i aktuell base.
    Usage:
       Finner antall framgrunnsfiler i basen
       sAntall = LC_InqAntFiler(LC_FRAMGR);
       ==========================================================================

    SK_EntPnt_FYBA short LC_InqAntFiler(unsigned short usLag)

## 22.4 Priority

## LC_ClrPrioritet

Clear priority bit

    ==========================================================================
    Purpose:
    Slett prioritets-bit.
    Parameters:
    Name     Type    I/O   Explanation
    --------------------------------------------------------------------------
    LC_BGR *  pGr      i    Gruppenummer
    kolonne  short    i    Kolonne som skal merkes.
                           (Lovlig 0 til LC_MAX_ANT_PRIOR-1)
    Usage:
    LC_ClrPrioritet(pGr,kolonne);
       ==========================================================================

    SK_EntPnt_FYBA void LC_ClrPrioritet(LC_BGR * pGr,short kolonne)

## LC_SetPrioritet

Set priority bit

    ==========================================================================
    Purpose:
    Sett prioritets-bit.
    Parameters:
    Name     Type    I/O   Explanation
    --------------------------------------------------------------------------
    LC_BGR *  pGr      i    Gruppenummer
    kolonne  short    i    Kolonne som skal merkes.
                           (Lovlig 0 til LC_MAX_ANT_PRIOR-1)
    Usage:
    LC_SetPrioritet(pGr,kolonne);
       ==========================================================================

    SK_EntPnt_FYBA void LC_SetPrioritet(LC_BGR * pGr,short kolonne)

## LC_InqPrioritet

Get priority bit

    ==========================================================================
    Purpose:
    Hent prioritets-bit.
    Parameters:
    Name     Type    I/O   Explanation
    --------------------------------------------------------------------------
    LC_BGR *  pGr      i    Gruppenummer
    kolonne  short    i    Kolonne som skal hentes.
                           (Lovlig 0 til LC_MAX_ANT_PRIOR-1)
    short    sAvPaa   r    Av eller På  (UT_TRUE = På, UT_FALSE = Av)
    Usage:
    sAvPaa = LC_InqPrioritet(pGr,kolonne);
       ==========================================================================

    SK_EntPnt_FYBA short LC_InqPrioritet(LC_BGR * pGr,short kolonne)

## LC_ErasePrioritet

Erase priority bit

    ==========================================================================
    Purpose:
    Blank ut prioritets-bit.
    Parameters:
    Name     Type    I/O   Explanation
    --------------------------------------------------------------------------
    LC_BGR *  pGr      i    Gruppenummer
    Usage:
    LC_ErasePrioritet(pGr);
       ==========================================================================

    SK_EntPnt_FYBA void LC_ErasePrioritet(LC_BGR * pGr)

## LC_EraseAllPrioritet

Erase all priority bits

    ==========================================================================
    Purpose:
    Blank ut alle prioritets-bit på alle gruppene i denne filen.
    Parameters:
    Name        Type    I/O   Explanation
    --------------------------------------------------------------------------
    LC_FILADM  *pFil     i    Filpeker
    Usage:
    LC_EraseAllPrioritet(pFil);
       ==========================================================================

    SK_EntPnt_FYBA void LC_EraseAllPrioritet(LC_FILADM *pFil)

## 22.5 Quality

## LC_FormatterKvalitet

Format for KVALITET

    ==========================================================================
    Purpose:
    Formater parameterstrengen for KVALITET.
    Resultatet legges i en intern streng, og må kopieres over til andre
    variabler før endring.
    Parameters:
    Type    Name         I/O   Explanation
    -------------------------------------------------------------------------
    short   sMetode           i Hvordan data er registrert.
                                  KVAL_MET_UNDEF  metode er udefinert.
                                  KVAL_MET_STD    standard metode fra nivå over.
    long    lNoyaktighet      i Registreringsnøyaktighet
                                  KVAL_NOY_UKJENT nøyaktighet er ukjent.
                                  KVAL_NOY_STD    standard nøyaktighet fra nivå over
    short   sSynbarhet        i Synbarhet i bilde
                                  KVAL_SYN_GOD    godt synlig.
                                  KVAL_SYN_UNDEF  synbarhet er udefinert.
                                  KVAL_SYN_STD    standard metode fra nivå over.
    short   sHoydeMetode      i Hvordan data er registrert.
                                  KVAL_MET_UNDEF  metode er udefinert.
                                  KVAL_MET_STD    standard metode fra nivå over.
    long    lHoydeNoyaktighet i Registreringsnøyaktighet
                                  KVAL_NOY_UKJENT nøyaktighet er ukjent.
                                  KVAL_NOY_STD    standard nøyaktighet fra nivå over
    char   *pszParameter      r Peker til '/0'-avslutta streng.
    Usage:
     pszParameter = LC_FormatterKvalitet(sMetode,lNoyaktighet,sSynbarhet,
                                         sHoydeMetode,lHoydeNoyaktighet);
    =============================================================================

    SK_EntPnt_FYBA char *LC_FormatterKvalitet(short sMetode,long lNoyaktighet,short sSynbarhet,
                               short sHoydeMetode,long lHoydeNoyaktighet)

## 22.6 Table Handling

## LC_InitTabel

Initialise the table system

    =============================================================================
    Purpose:
    Initierer tabellsystemet og åpner filen.
    Parameters:
    Type     Name      I/O   Explanation
    -----------------------------------------------------------------------------
    long     n_rec      i    Antall reckords som skal nullstilles. Disse kan
                             etterpå brukes til tilfeldig aksess. Utvidelse
                             av filen kan senere bare skje i fortløpende
                             rekkefølge.
    short    rec_len    i    Reckordlengde. (Bruk sizeof for å finne lengden.)
    void    *buffer     i    Peker til buffer som skal brukes for nullstilling.
    short    ist        r    Status. (0=OK, -1=feil)
    Usage:
     .
     struct{
        long snr;
        short ngi;
        short nko;
     } buffer;
     .
     .
     ist = LC_InitTabel(10000L,sizeof buffer,(void *)(&buffer));
     .
     ist = LC_PutTabel(linje,(void *)&buffer);
     .
     ist = LC_GetTabel(linje,(void *)&buffer);
     .
     LC_CloseTabel();
       =============================================================================

    SK_EntPnt_FYBA short LC_InitTabel(long n_rec,short rec_len,void *buffer)

## LC_PutTabel

Add one line to the table file (push)

    =============================================================================
    Purpose:
    Legg inn en linje fra tabellfilen.
    Parameters:
    Type      Name   I/O   Explanation
    -----------------------------------------------------------------------------
    long      linje   i    Linjenummer som skal legges inn. (0 er første linje)
                           (Største lovlige er 1 større enn det største hittil.)
    void     *buffer  i    Peker til struktur som skal legges inn.
    short     ist     r    Status (0=OK, -1=feil)
    Usage:
    ist = LC_PutTabel(linje,(void *)&buffer);
       =============================================================================

    SK_EntPnt_FYBA short LC_PutTabel(long linje,void *buffer)

## LC_GetTabel

Get one line from the table file

    =============================================================================
    Purpose:
    Henter en linje fra tabellfilen.
    Parameters:
    Type      Name   I/O   Explanation
    -----------------------------------------------------------------------------
    long      linje   i    Linjenummer som skal hentes.  (0 er første linje)
    void     *buffer  i    Peker til struktur som skal ta mot lest reckord.
    short     ist     r    Status (0=OK, -1=feil)
    Usage:
    ist = LC_GetTabel(linje,(void *)&buffer);
       =============================================================================

    SK_EntPnt_FYBA short LC_GetTabel(long linje,void *buffer)

## LC_CloseTabel

Close the table system

    =============================================================================
    Purpose:
    Avslutter tabellsystemet og stenger og sletter filen.
    Tabellen kan nå åpnes på nytt for annen bruk.
    Parameters: ingen

    Usage:
    LC_CloseTabel();
       =============================================================================

    SK_EntPnt_FYBA void LC_CloseTabel(void)

## 22.7 Message Handling

FYBA has a feature which makes it possible to let the calling program handle the messages for the user. This is made up of callback-functions which are called from FYBA for error message handling and to present the progress while the indices are being built. One example implementation can be found in Fyba_Callback.cpp. In order to have a good user interface, these functions should be changed such that they use the message and error handling system that is used by the main program. If FYBA is used as a DLL, the message handling functions must be registered with the following functions:

## LC_SetErrorHandler

Set error handler

    =============================================================================
    Purpose:
    Registrer feilmeldingsrutine.
    Feilmeldingsrutinen blir kallt hvis det oppstår feil.
    Parameters:
    Type   Name                       I/O  Explanation
    -----------------------------------------------------------------------------
    void  (*f) (short ,char *,char *)  i   Peker til feilmeldingsrutine
    Usage:
    LC_SetErrorHandler(ErrorHandler);
    Feilmeldingsrutinen skal ha følgende definisjon:
    void ErrorHandler(short feil_nr,const char *logtx,const char *vartx);
    Med følgende Parameters:
    Type    Name     I/O  Explanation
    -----------------------------------------------------------------------------
    short   feil_nr   i   Feil-nummer
    char   *logtx     i   Tekst som bare skrives til logfil.
                          Eks:"(utført i LC_RxGr)"
    char   *vartx     i   Denne tekststreng henges etter feilmeldingsteksten.
    =============================================================================

    SK_EntPnt_FYBA void LC_SetErrorHandler(void (*f) (short,const char*,const char*))

## LC_SetStartMessageHandler

Set start message handler

    =============================================================================
    Purpose:
    Registrer initieringsrutine.
    Initieringsrutinen blir kalt for å starte visning av framdrift.
    Parameters:
    Type   Name       I/O  Explanation
    -----------------------------------------------------------------------------
    void  (*f)(char*)  i   Peker til initieringsrutine
    Usage:
    LC_SetStartMessageHandler(StartMessageHandler);
    Initieringsrutinen skal ha følgende definisjon:
    void StartMessageHandler(char *pszFilnavn);
    Med følgende Parameters:
    Type     Name        I/O  Explanation
    -----------------------------------------------------------------------------
    char    *pszFilnavn   i   Ekstra meldingstekst  (filnavn)
    =============================================================================

    SK_EntPnt_FYBA void LC_SetStartMessageHandler(void (*f)(const char*))

## LC_SetShowMessageHandler

Set show message handler

    =============================================================================
    Purpose:
    Registrer visningsrutine.
    Visningsrutine blir kalt for å vise framdrift ved indeks-oppbygging.
    Parameters:
    Type   Name       I/O  Explanation
    -----------------------------------------------------------------------------
    void  (*f)(double)  i   Peker til visningsrutine
    Usage:
    LC_SetShowMessageHandler(ShowMessageHandler);
    Visningsrutinen skal ha følgende definisjon:
    void ShowMessageHandler(double prosent);
    Med følgende Parameters:
    Type     Name        I/O  Explanation
    -----------------------------------------------------------------------------
    double   prosent      i   Prosent ferdig (0.0 - 100.0)
    =============================================================================

    SK_EntPnt_FYBA void LC_SetShowMessageHandler(void (*f)(double))

## LC_SetEndMessageHandler

Set end message handler

    =============================================================================
    Purpose:
    Registrer avslutningsrutine.
    Avslutningsrutinen blir kalt for å avslutte visning av framdrift ved indeksoppbygging.
    Parameters:
    Type   Name       I/O  Explanation
    -----------------------------------------------------------------------------
    void  (*f)(void)  i   Peker til avslutningsrutine
    Usage:
    LC_SetEndMessageHandler(EndMessageHandler);
    Avslutningsrutinen skal ha følgende definisjon:
    void EndMessageHandler(void);
    =============================================================================

    SK_EntPnt_FYBA void LC_SetEndMessageHandler(void (*f)(void))

## LC_SetCancelHandler

Set cancel handler

    =============================================================================
    Purpose:
    Registrer avbruddsstyring.
    Rutine for avbruddsstyring blir kalt for å sjekke om bruker ønsker
    å avbryte beregningen.
    Parameters:
    Type   Name       I/O  Explanation
    -----------------------------------------------------------------------------
    short  (*f)(void)  i   Peker til rutine for avbruddsstyring.
    Usage:
    LC_SetCancelHandler(CancelHandler);
    Rutine for avbruddsstyring skal ha følgende definisjon:
    short CancelHandler(void);
    Med følgende Parameters:
    Type   Name      I/O  Explanation
    -----------------------------------------------------------------------------
    short  sAvbrutt   r   UT_TRUE  = Cancel
                          UT_FALSE = ikke avbrudd
    =============================================================================

    SK_EntPnt_FYBA void LC_SetCancelHandler(short (*f)(void))

En tilsvarende enkel feilmeldingshandtering ligger i FYBA_DLL.dll. Denne (DLL'ens) meldingshandteringen blir brukt hvis ekstern meldingshandtering ikke blir aktivisert.

## LC_StartMessage

Start message

    =============================================================================
    Purpose:
    Starter vising av melding om baseoppbygging.
    Parameters:
    Type     Name        I/O  Explanation
    -----------------------------------------------------------------------------
    char    *pszFilnavn   i   Ekstra meldingstekst  (filnavn)
    Usage:
    LC_StartMessage(pszFilnavn);
    =============================================================================

    void LC_StartMessage(const char *pszFilnavn)

## LC_ShowMessage

Show message

    =============================================================================
    Purpose:
    Vising av melding om baseoppbygging.
    Parameters:
    Type     Name        I/O  Explanation
    -----------------------------------------------------------------------------
    double   prosent      i   Prosent ferdig (0.0 - 100.0)
    Usage:
    LC_ShowMessage(prosent);
    =============================================================================

    void LC_ShowMessage(double prosent)

## LC_EndMessage

End message

    =============================================================================
    Purpose:
    Avslutt melding om baseoppbygging.
    Parameters:
    Type     Name        I/O  Explanation
    -----------------------------------------------------------------------------
    Usage:
    LC_EndMessage();
    =============================================================================

    void LC_EndMessage(void)

## LC_Cancel

Check if Esc has been pushed

    ==========================================================================
    Purpose:
    Sjekk om det er trykkt på Esc (Avbryte indeksoppbygging).
    Parameters:
    Type   Name      I/O   Explanation
    --------------------------------------------------------------------------
    short  sAvbrutt   r    UT_TRUE  = Cancel
                           UT_FALSE = ikke avbrudd
    Usage:
    sAvbrutt = LC_Cancel();
    ==========================================================================

    short LC_Cancel(void)

## LC_Error

Error message function

    =============================================================================
    Purpose:
    Standard feilmeldingsrutine.
    Parameters:
    Type     Name        I/O  Explanation
    -----------------------------------------------------------------------------
    short    feil_nr      i   Feil-nummer
    char    *logtx        i   Tekst som bare skrives til logfil.
                              Eks:"(utført i LC_RxGr)"
    char    *vartx        i   Denne tekststreng henges etter feilmeldingsteksten.
    Usage:
    LC_Error(35,"(Kallt i LC_Xxxx)","");
    =============================================================================

    void LC_Error(short feil_nr,const char *logtx,const char *vartx)

## 22.8 Helper Functions for Message Handling

## LC_StrError

Error message text

    ==========================================================================
    Purpose:
    Henter feilmeldingstekst og nivå for et feilmeldingsnummer.
    Strengen legges i en egen feilmeldingsstruktur for feil-rutiner i fyba.
    Dette blir ødelagt ved neste kall til en "feil-rutine". For å ta vare på
    strengen må den kopieres over til egen streng. (Bruk UT_StrCopy).
    Parameters:
    Type     Name        I/O  Explanation
    --------------------------------------------------------------------------
    short    feil_nr      i   Feilmeldingsnummer
    char   **feilmelding  u   Peker til feilmeldingstekst avslutta med '/0'.
    short   *strategi     r   Feilnivå (0-4)
                              0 = Ikke i bruk. (Utkoblet, testmeldinger mm.)
                              1 = Lite alvorlig. Vises kort.
                              2 = Normal feilmelding. Vises ca. 1 sekund.
                              3 = Alvorlig. Krev tastetrykk for å fortsette.
                              4 = Svært alvorlig. Programmet bør avbrytes.
    Usage:
    strategi = LC_StrError(ckap,feil_nr,&feilmeldingspeker);
       ==========================================================================

    SK_EntPnt_FYBA short LC_StrError(short feil_nr,char **feilmelding)

## 22.9 Debugging

## LC_DumpTab

Dump internal tables to stderr

    ==========================================================================
    Purpose:
    Dump internal tables to stderr
    Parameters:
    Type     Name     I/O   Explanation
    --------------------------------------------------------------------------
    Usage:
    LC_DumpTab();
       =============================================================================

    SK_EntPnt_FYBA void LC_DumpTab(void)