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)