FYBA
Et lagringssystem for geodata på SOSI-format.
Sist oppdatert: 2013-10-09 av rosand

# 1 Innledning

FYBA er et rutinebibliotek for å kunne håndtere SOSI-filer på en mest mulig elegant måte, både mht. søking, lesing og oppdatering. FYBA er nå tilpasset SOSI-format versjon 4.0, og blir fortløpende tilpasset nye SOSI-versjoner.
Dene brukerveiledningen er laget for personell som er familiær med SOSI og C-programmering. Alle rutinegrensesnitt og konstanter er definert på filen FYBA.H. Denne filen bør derfor inkluderes i alle filer som skal bruke FYBA-rutinene.
FYBA er skrevet i ANSI C, og kan i utgangspunktet kompileres på alle platformer der det finnes en passende kompilator. Det er imidlertid en del hjelperutiner som er maskin/operativsystem-avhengig. Disse er skillt ut til et eget bibliotek (UT) som må tilpasses til maskin/opperativsystem. Dette er testet under DOS, OS/2-16, OS/2-32, Win16, Win32, X64 og div. UNIX varianter (POSIX, HPUX, Silicon graphics).

# 2 Oversikt over funksjonaliteten til FYBA

FYBA et rutinebibliotek som etablerer og vedlikeholder egne "indeks-filer" (.IDX) med nødvendige opplysninger for lesing,skriving,søk og manipulering av data på SOSI-filene. Som en oversikt kan følgende figur forklare sammenhengen mellom SOSI-filene ,biblioteket og brukerprogrammene.

#

##

##

##

##

                             !---------------!
           !---------------->! Indeks-filer  !<-------!
           !                 !---------------!        !
           !                        ^                 !
           !                        !                 !
           !                    !---!-----!           !   !-----------------!
           !                    !         !           !-->!                 !
           !                    ! Buffer  !               !                 !
    !------!------!  LC_Rxxxx   !         !  LC_PutXxx    ! Bruker-program  !
    ! SOSI-fil(er)!<----------- ! internt !<------------- !                 !
    !             ! ----------->!         !               !                 !
    !-------------!  LC_Wxxxx   ! i       ! ------------->!                 !
                                !         !  LC_GetXxx    !                 !
                                ! FYBA-   !               !                 !
                                !         !               !                 !
                                ! rutinene!               !-----------------!
                                !         !
                                !---------!

    3 Indeks-systemets oppbygning

    Indeks-systemet er bygt opp av en hel rekke tabeller. Disse ligger
    delevis i minnet, og delevis som filer på disken.

    Nedenfor følger en tegning av aktuelle tabeller.
    Dette bare til informasjon. Bruker behøver stort-sett ikke
    kjenne til oppbygningen av disse:

    Gruppetabell
    Gruppetabell
    Dette er hovedtabellen med informasjon om hver enkelt gruppe på SOSI-filen.

    !------------------------------:-----------------------------------------------*
    !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 !
    *------------------------------------------------------------------------------*

    Brukttabell
    Merking av grupper
    Denne tabellen brukes delevis internt av FYBA, og delevis av brukerprogrammet.

    Følgende bit er definert:
    -------------------------------------------------------------------------
     31  Gruppen er funnet ved geografisk søk   -----! Brukere kan lese/bruke
     30  Gruppen er funnet ved GINFO-utvalg          ! disse, men det er ikke
     29  Gruppen er funnet ved serienummer-søk       ! lov til å endre dem.
     28  Gruppen er i ringbufferet                   !
     27  Referanser er brukt i omskrevet blokk ------!
     26                              -----!
      .                                   ! Brukere har
      .                                   ! full tilgang
      2                                   ! til disse.
      1                              -----!
      0  Gruppen ligger i kø for skriving til SOSI-filen

    SOSI-buffer
    Binær kopi av SOSI-filen
    For å øke hastigheten holder FYBA en binær kopi av SOSI-filen.
    Denne kopien ligger delevis i minne og delevis på disk.

    Denne kopien består av gruppeinformasjon, koordinater og punktinformasjon.

    Gruppeinformasjonen for en gruppe handteres som en lang streng med pekere
    til startposisjon for hver GINFO-linje.

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

    Koordinatene lagres i egne array. Punktinformasjonen lagres som
    en lang streng for hele gruppen med peker for hvert punkt til startposisjon
    for PINFO for hvert punkt på samme måte som GINFO.

    !--------! !--------! !--------:-------:--------!
    ! Øst    ! ! Nord   ! ! Høyde  !  KP   ! PINFO  !
    !--------! !--------! !--------!-------!--------!
    ! double ! ! double ! ! double ! short ! ushort !
    !   m    ! !   m    ! !   m    !       !  ofset !

    Serienummer-tabell
    !-------------*
    ! Gruppenummer!
    !-------------!       Linjenummer i tabellen er serienummer.
    !  lGrNr      !
    !  (long)     !
    *-------------*

## Geografisk-søketabell

Geografisk søketabell

    Geografisk søk er basert på omskrevet boks.
    Boksene organiseres i et R-tre.

    !-----------------------------------*
    !      Omskreven boks               !
    !                                   !
    ! min-N  ! min-Ø  ! max-N  ! max-Ø  !
    !        !        !        !        !
    !--------!--------!--------!--------!
    !dMinNord!dMinAust!dMaxNord!dMaxAust!
    !  d     !   d    !   d    !   d    !
    !        !        !        !        !
    *-----------------------------------*

# 4 Navnekonvensjoner

Variabelnavn er fritt valgt for å si mest mulig om hva variabelen inneholder.
De fleste rutiner i brukergrensesnittet starter med "LC_":
I tillegg kommer noen spesielle rutiner for å lese filhodet direkte fra SOSI-fil. Disse har navn som starter med "HO_":

# 5 Initiering og styring

## LC_Init

Initierer FYBA

    =============================================================================
    Formål:
    Initierer FYBA.
    Parametre:
    Type     Navn      I/U   Forklaring
    -----------------------------------------------------------------------------
    Bruk:
    LC_Init();
       =============================================================================

    SK_EntPnt_FYBA void LC_Init(void)

## LC_InqVer

Identifikasjon

    =============================================================================
    Formål:
    Henter versjons-identifikasjon for dette biblioteket.
       =============================================================================

    SK_EntPnt_FYBA char *LC_InqVer(void)

## LC_Close

Stenger ned FYBA

    =============================================================================
    Formål:
    Stenger ned FYBA.
    Parametre:
    Type     Navn      I/U   Forklaring
    -----------------------------------------------------------------------------
    Bruk:
    LC_Close();
    	=============================================================================

    SK_EntPnt_FYBA void LC_Close(void)

## LC_ErInitiert

Er FYBA initiert

    =============================================================================
    Formål:
    Sjekker om FYBA er initiert / tilgjengelig for bruk.
    Parametre:
    Type   Navn     I/U   Forklaring
    -----------------------------------------------------------------------------
    short  sStaus    r    0=ikke initiert, eller FYBA er stengt ned
                          1=initiert
    Bruk:
    sStatus = LC_ErInitiert();
       =============================================================================

    SK_EntPnt_FYBA short LC_ErInitiert(void)

## LC_MaxSkriv

Max skriv før lagring

    ==========================================================================
    Formål:
    Setter max antall skriv uten lagring til SOSI-filen.
    (0 = allt skrives direkte til SOSI-filen.)
    Parametre:
    Type     Navn      I/U   Forklaring
    -----------------------------------------------------------------------------
    long     antall     i    Max antall skriv uten lagring til SOSI-filen
    Bruk:
    LC_MaxSkriv(antall);
       =============================================================================

    SK_EntPnt_FYBA void LC_MaxSkriv(long antall)

## LC_InqMaxSkriv

Max skriv før lagring

    ==========================================================================
    Formål:
    Spørr etter max antall skriv uten lagring til SOSI-filen.
    (0 = allt skrives direkte til SOSI-filen.)
    Parametre:
    Type     Navn      I/U   Forklaring
    -----------------------------------------------------------------------------
    long     antall     i    Max antall skriv uten lagring til SOSI-filen
    Bruk:
    antall = LC_InqMaxSkriv();
       =============================================================================

    SK_EntPnt_FYBA long LC_InqMaxSkriv(void)

## LC_SetNgisModus

Velg NGIS modus

    ==========================================================================
    Formål:
    Velger handteringsmåte for grupper som er merket for oppdatering av NGIS.
    Standardverdi fra LC_Init er NGIS_NORMAL.
    Parametre:
    Type   Navn  I/U  Forklaring
    --------------------------------------------------------------------------
    short  modus  i   Behandlingsmåte:
    					    NGIS_NORMAL  (0) = Vanlig handtering
    						 NGIS_SPESIAL (1) = Spesialmodus der det er mulig å lese
                                          grupper som er merka som sletta.
    Bruk:
    LC_SetNgisModus(NGIS_NORMAL);
       ==========================================================================

    SK_EntPnt_FYBA void LC_SetNgisModus(short modus)

## LC_SetDefLpfi

Ledig plass mellom grupper

    ==========================================================================
    Formål:
    Legger inn standardverdi for antall tegn ledig plass bak gruppe
    på .SOS-fil.
    Parametre:
    Type     Navn      I/U   Forklaring
    -----------------------------------------------------------------------------
    short    ant_tegn   i    Antall tegn ledig plass.
    Bruk:
    LC_SetDefLpfi(ant_tegn);
       =============================================================================

    SK_EntPnt_FYBA void LC_SetDefLpfi(short ant_tegn)

## LC_InqDefLpfi

Hent ledig plass mellom grupper

    ==========================================================================
    Formål:
    Henter ut standardverdi for antall tegn ledig plass bak gruppe
    på .SOS-fil.
    Parametre:
    Type     Navn      I/U   Forklaring
    -----------------------------------------------------------------------------
    short    ant_tegn   r    Antall tegn ledig plass.
    Bruk:
    ant_tegn = LC_InqDefLpfi();
       =============================================================================

    SK_EntPnt_FYBA short LC_InqDefLpfi(void)

## LC_SetUtvidModus

Velg utvis modus

    ==========================================================================
    Formål:
    Velger handteringsmåte for utvidelse av SOSI-filer.
    Standardverdi fra LC_Init er LC_UTVID_SIKKER.
    Parametre:
    Type   Navn  I/U  Forklaring
    --------------------------------------------------------------------------
    short  modus  i   Behandlingsmåte:
    					    LC_UTVID_SIKKER (0) = SOSI-filen stenges og filstørrelsen
                                             oppdateres etter hver gruppe som er
                                             skrevet på slutten av filen.
    						 LC_UTVID_RASK   (1) = SOSI-filen stenges IKKE etter hver
                                             gruppe som er skrevet på slutten
                                             av filen.
                                             (Må bare brukes i spesielle tilfeller.)
    Bruk:
    LC_SetUtvidModus(LC_UTVID_SIKKER);
       ==========================================================================

    SK_EntPnt_FYBA void LC_SetUtvidModus(short modus)

## LC_GetUtvidModus

Hent utvis modus

    ==========================================================================
    Formål:
    Henter valgt handteringsmåte for utvidelse av SOSI-filer.
    Parametre:
    Type   Navn  I/U  Forklaring
    --------------------------------------------------------------------------
    short  modus  r   Behandlingsmåte:
    					    LC_UTVID_SIKKER (0) = SOSI-filen stenges og filstørrelsen
                                             oppdateres etter hver gruppe som er
                                             skrevet på slutten av filen.
    						 LC_UTVID_RASK   (1) = SOSI-filen stenges IKKE etter hver
                                             gruppe som er skrevet på slutten
                                             av filen.
                                             (Må bare brukes i spesielle tilfeller.)
    Bruk:
    short sModus = LC_GetUtvidModus();
       ==========================================================================

    SK_EntPnt_FYBA short LC_GetUtvidModus(void)

# 6 Åpning av base og sosi-filer

## LC_OpenBase

Åpner ny base

    ==========================================================================
    Formål:
    Åpner en base, nullstiller tabellene.
    Hvis basen er kladdebase opprettes en SOSI-fil med en gruppe i basen,
    denne brukes som buffer for les / skriv.
    Kladdefilen legges på current directory.
    Kladdebase brukes bare når alle SOSI-filer åpnes med sekvensiell les/skriv.

    Den nye basen velges som aktuell base.
    Parametre:
    Type        Navn      I/U  Forklaring
    --------------------------------------------------------------------------
    short       sBaseType  i   Basetype. Konstanter definert:
                                LC_BASE  = Vanlig base.
                                LC_KLADD = Kladdebase. Brukes bare i spesielle
                                           tilfeller hvis ingen fil åpnes
                                           som LC_BASE_xx.
    LC_BASEADM * pBase      r   Basepeker.
    Bruk:
    pBase = LC_OpenBase(sBaseType);
    	==========================================================================

    SK_EntPnt_FYBA LC_BASEADM * LC_OpenBase(short sBaseType)

## LC_CloseBase

Steng base

    ==========================================================================
    Formål:
    Stenger alle filer i basen, og frigir baseadministrasjonsblokken.
    Hvis aktuell base blir stengt blir første base i systemet valgt som ny
    aktuell base.
    Parametre:
    Type       Navn   I/U Forklaring
    --------------------------------------------------------------------------
    PLCBASEADM pBase   i  Peker tilBaseAdm
    short      s_stat  i  Slutt-status
                          RESET_IDX = Fjern indeksfilene
                          SAVE_IDX  = Lagrer indeksfilene.
                          ABORT     = Fjerner indeksfilene (ved avbrutt
                                      indeks oppbygging).
    Bruk:
    LC_CloseBase(pBase,s_stat);
       ==========================================================================

    SK_EntPnt_FYBA void LC_CloseBase(LC_BASEADM * pBase,short s_stat)

## LC_SelectBase

Velg aktuell base

    ==========================================================================
    Formål:
    Velger ny aktuell base.
    Parametre:
    Type        Navn      I/U  Forklaring
    --------------------------------------------------------------------------
    LC_BASEADM * pBase      i   Peker til BasAdm.
    Bruk:
    LC_SelectBase(pBase);
       ==========================================================================

    SK_EntPnt_FYBA void LC_SelectBase(LC_BASEADM * pBase)

## LC_InqCurBase

Aktuell base

    ==========================================================================
    Formål:
    Spørr etter aktuell base.
    Parametre:
    Type        Navn      I/U  Forklaring
    --------------------------------------------------------------------------
    LC_BASEADM * pBase      r   Basepeker.
    Bruk:
    pBase = LC_InqCurBase();
       =============================================================================

    SK_EntPnt_FYBA LC_BASEADM * LC_InqCurBase(void)

## LC_OpenSos

Åpner og sjekker SOSI-fil

    ==========================================================================
    Formål:
    Åpner en ny fil i aktuell base.
    Allokerer minne til ny filadministrasjonsblokk og initierer denne.
    Åpner SOSI-filen og legger navn mm. inn i fil-adm.
    Leser hodet og tolker det inn i filtabellen.
    Hode blir ikke generert for nye filer. Dette kan lages med LC_PutGi, eller
    LC_NyttHode eller kopieres fra annen fil, og skrives med LC_WsGr
    eller LC_WxGr.
    Parametre:
    Type    Navn   I/U  Forklaring
    --------------------------------------------------------------------
    char   *fil        i   Filnavn inkl. sti og fil-type
                           (Hvis fil-type mangler forutsettes  .SOS)
    short   sModus     i   Filmodus
                           LC_BASE_FRAMGR = Framgrunnsfil
                           LC_BASE_BAKGR  = Bakgrunnsfil (Bare les)
                           LC_SEKV_LES    = Sekvensiell, les
                           LC_SEKV_SKRIV  = Sekvensiell, skriv
                           LC_SEKV_UTVID  = Sekvensiell, utvid gammel fil
    short   sNyIdx     i   Indeksgenerering:
                           LC_NY_IDX  = Tvungen nygenerering
                           LC_GML_IDX = Bruk gammel .idx hvis den er OK
    short   sVisStatus i  Vis indeksoppbygging
                           LC_VIS_STATUS   = Vis status
                           LC_INGEN_STATUS = Ikke vis status
    LC_FILADM **pFil   u  Peker til FilAdm blokk.
    short  *o_stat     u  Detaljert åpningsstatus:
                             0: Åpning og hode OK
                            >0: Åpningsfeil feilmelding
                            -1: Åpning OK, tom fil / ikke SOSI-fil
                            -2: Ikke åpnet, kan ikke bruke append på
                                tom fil / ikke sosi-fil
                            -3: (LC_CANCEL): Ikke åpnet,
                                indeksoppbygging avbrutt med [Esc],
                                eller feil på filen.
                            -4: (LC_DUBLIKAT): Filen er i basen fra før (pFil)
                            -5: (LC_OPPTATT): Filen er åpen i annet program
    short   status     r  Åpningsstatus: UT_TRUE = OK
                                         UT_FALSE = Feil, (o_stat gir detalj)
    Bruk:
    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);
       ==========================================================================

    /// LC_OpenSos Åpner og sjekker SOSI-fil FYBA biblioteket.
    ///
    /// Filnavn inkl. sti og fil-type (Hvis fil-type mangler forutsettes  .SOS)
    SK_EntPnt_FYBA short LC_OpenSos(const char *fil,short sModus,short sNyIdx,short sVisStatus,
                                    LC_FILADM **pFil, short *o_stat)

## LC_CloseSos

Steng SOSI-fil

    ==========================================================================
    Formål:
    Stenger en SOSI-fil, og fjerner den fra basen.
    Parametre:
    Type        Navn   I/U  Forklaring
    --------------------------------------------------------------------------
    LC_FILADM  *pFil     i   Peker til FilAdm-blokk
    short       s_stat  i   Slutt-status
                            RESET_IDX = Fjern indeksfilene
                            SAVE_IDX  = Lagrer indeksfilene.
    Bruk:
    LC_CloseSos(pFil,SAVE_IDX);
       ==========================================================================

    SK_EntPnt_FYBA void LC_CloseSos(LC_FILADM *pFil,short s_stat)

## LC_DelIdx

Sletter indeksfilene

    ==========================================================================
    Formål:
    Sletter indeksfilene for gitt SOSI-fil.
    Parametre:
    Type  Navn     I/U Forklaring
    --------------------------------------------------------------------------
    char *szSosFil  i  SOSI-filnavn
    Bruk:
    LC_DelIdx(szSosFil);
       ==========================================================================

    SK_EntPnt_FYBA void LC_DelIdx(char *szSosFil)

## LC_FcloseSos

Steng åpen SOSI-fil i filsystemet

    ==========================================================================
    Formål:
    Denne rutinen brukes til å sikre at en fil er oppdatert og stengt i filsystemet,
    slik at SOSI-filen kan leses fra andre program.
    OBS!
    Stenger bare filen i filsystemet.
    Filen er fortsatt åpen i basen.
    FYBA åpner automatisk filen på nytt når det er behov for dette.
    Parametre:
    Type        Navn    I/U   Forklaring
    --------------------------------------------------------------------------
    LC_FILADM  *pFil     i   Peker til FilAdm-blokk
    Bruk:
    LC_FcloseSos(pFil);
    ==========================================================================

    SK_EntPnt_FYBA void LC_FcloseSos(LC_FILADM *pFil)

# 7 Hjelpefunksjoner

## 7.1 Base og fil

## LC_GetBaOm

Hent baseområde

    ==========================================================================
    Formål:
    Henter baseområdet for aktuell base (Sum av filhodene).
    Sekvensielle filer regnes ikke med.
    Parametre:
    Type           Navn    I/U   Forklaring
    --------------------------------------------------------------------------
    unsigned short usLag    i   Velg hvilke "lag" det skal søkes i.
                                  LC_FRAMGR og /eller LC_BAKGR
                                  (Bruk "|" for å kombinere.)
    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          sStatus  r    UT_TRUE=OK, UT_FALSE=ingen fil
    Bruk:
    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

Hent område fra fil-hode

    ==========================================================================
    Formål:
    Hent område for en SOSI-fil i basen.
    Fungerer ikke mot sekvensielle filer.
    Parametre:
    Type       Navn  I/U  Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
    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 fil nummer

    ==========================================================================
    Formål:
    Sjekker alle filer i aktuell base om noen av den har det gitte filnavnet.
    Parametre:
    Type        Navn     I/U  Forklaring
    --------------------------------------------------------------------------
    char        fil_navn  i   Filnavn
    LC_FILADM  *pFil      r   Peker til FilAdm for filen. (NULL = ukjent fil)
    Bruk:
    pFil = LC_GetFiNr(fil_navn);
       ==========================================================================

    SK_EntPnt_FYBA LC_FILADM *LC_GetFiNr(const char *fil_navn)

## LC_GetFiNa

Hent filnavn

    ==========================================================================
    Formål:
    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.
    Parametre:
    Type        Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    LC_FILADM  *pFil       i    Peker til FilAdm
    char       *fil_navn   r    Peker til filnavn
    Bruk:
    fil_navn = LC_GetFiNa(pFil);
       ==========================================================================

    SK_EntPnt_FYBA char *LC_GetFiNa(LC_FILADM *pFil)

## LC_GetTegnsett

Finner tegnsett

    ==========================================================================
    Formål:
    Finne tegnsett i ginfo i aktuell gruppe.
    OBS! Forutsetter at aktuell gruppe er et SOSI-filhode.
    Parametre:
    Type    Navn       I/U  Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
         sStatus = LC_GetTegnsett(&sTegnsett);
    ==========================================================================

    SK_EntPnt_FYBA short LC_GetTegnsett(short *psTegnsett)

## LC_InqLag

Finn hvilet lag aktuell gruppe tilhører

    ==========================================================================
    Formål:
    Finn hvilket lag aktuell gruppe tilhører.
    Parametre:
    Type            Navn    I/U   Forklaring
    --------------------------------------------------------------------------
    unsigned short *usLag    u    "Lag":  LC_FRAMGR eller LC_BAKGR
    short           status   r    UT_TRUE = OK, UT_FALSE = Ingen aktuell gruppe
    Bruk:
        status = LC_InqLag(&usLag);
       ==========================================================================

    SK_EntPnt_FYBA short LC_InqLag(unsigned short *usLag)

## LC_InqFilLag

Finn hvilet lag en fil tilhører

    ==========================================================================
    Formål:
    Finn hvilket lag en fil tilhører.
    Parametre:
    Type            Navn    I/U   Forklaring
    --------------------------------------------------------------------------
    LC_FILADM      *pFil     i    Filpeker
    unsigned short  usLag    r    "Lag":  LC_FRAMGR eller LC_BAKGR
    Bruk:
        usLag = LC_InqFilLag(pFil);
       ==========================================================================

    SK_EntPnt_FYBA unsigned short LC_InqFilLag(LC_FILADM *pFil)

## LC_SetFilLag

Velg hvilet lag en fil tilhører

    ==========================================================================
    Formål:
    Velg hvilket lag en fil tilhører.
    Parametre:
    Type            Navn    I/U   Forklaring
    --------------------------------------------------------------------------
    LC_FILADM      *pFil     i    Filpeker
    unsigned short  usLag    i    "Lag":  LC_FRAMGR eller LC_BAKGR
    Bruk:
        LC_SetFilLag(pFil,LC_FRAMGR);
       ==========================================================================

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

## LC_FiLastGr

Finn siste gruppe i filen

    ==========================================================================
    Formål:
    Finner gruppenummer for siste gruppe i filen.
    Parametre:
    Type       Navn  I/U   Forklaring
    --------------------------------------------------------------------------
    LC_FILADM *pFil   i    Peker til FilAdm
    bgr        long   r    Gruppenummer
    Bruk:
    bgr = LC_FiLastGr(pFil);
       ==========================================================================

    SK_EntPnt_FYBA long LC_FiLastGr(LC_FILADM *pFil)

## LC_ErFilBase

Sjekker om en fil er i basen

    ==========================================================================
    Formål:
    Sjekker om en fil er i basen.
    Parametre:
    Type    Navn   I/U  Forklaring
    --------------------------------------------------------------------
    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.
    Bruk:
    ist = LC_ErFilBase(fil);
       ==========================================================================

    SK_EntPnt_FYBA short LC_ErFilBase(const char *fil)

## LC_ErKoordsysLik

Sjekker KOORDSYS

    =======================================================================
    Formål:
    Sjekk at alle filene i basen har samme koordinatsystem.
    Parametre:
    Type    Navn   I/U  Forklaring
    -----------------------------------------------------------------------
    short   status  r   Status: UT_TRUE = KOORDSYS er lik.
                                UT_FALSE = KOORDSYS er IKKE lik.
    Bruk:
    ist = LC_ErKoordsysLik();
    	=======================================================================

    SK_EntPnt_FYBA short LC_ErKoordsysLik(void)

## LC_ErVertdatumLik

Sjekker VERT-DATUM

    =======================================================================
    Formål:
    Sjekk at alle filene i basen har samme VERT-DATUM.
    Parametre:
    Type    Navn   I/U  Forklaring
    -----------------------------------------------------------------------
    short   status  r   Status: UT_TRUE = VERT-DATUM er lik.
                                UT_FALSE = VERT-DATUM er IKKE lik.
    Bruk:
    ist = LC_ErVertdatumLik();
    	=======================================================================

    SK_EntPnt_FYBA short LC_ErVertdatumLik(void)

## LC_Backup

Lag backup av gitt SOSI-fil

    ==========================================================================
    Formål:
    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.
    Parametre:
    Type         Navn          I/U  Forklaring
    --------------------------------------------------------------------------
    LC_FILADM   *pFil           i   Filpeker
    char        *pszBackupPath  i   Katalognavn for lagring av backup.
    short        sStatus        r   UT_TRUE = OK
                                    UT_FALSE = Feil.
    Bruk:
        sStatus = LC_Backup(pFil, szBackupPath);
       ==========================================================================

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

## LC_GetNgisLag

Hent NGIS-LAG

    ==========================================================================
    Formål:
    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).
    Parametre:
    Type       Navn    I/U  Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
    pszNgisLag = LC_GetNgisLag(pFil);
       ==========================================================================

    SK_EntPnt_FYBA char* LC_GetNgisLag(LC_FILADM *pFil)

## LC_SetFilType

Setter filtype for en sosifil

    ==========================================================================
    Formål:
    Setter filtype for en fil.
    Denne rutinen er primært tenkt brukt i GabEdit hvor det er behov for å
    definere flere typer arbeidsfil.
    Parametre:
    Type         Navn   I/U  Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
    LC_SetFilType(pFil,type);
    =============================================================================

    SK_EntPnt_FYBA void LC_SetFilType(LC_FILADM *pFil, short sType)

## LC_GetFilType

Henter filtype for en sosifil

    ==========================================================================
    Formål:
    Finner filtypen for en fil.
    Parametre:
    Type         Navn   I/U  Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
    type = LC_GetFilType(pFil);
    =============================================================================

    SK_EntPnt_FYBA short LC_GetFilType(LC_FILADM *pFil)

## LC_ErLik_Avrundet

Rund av og sjekk om sammenfallende punkt

    ==========================================================================
    Formål:
    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)
    Parametre:
    Type     Navn    I/U Forklaring
    ---------------------------------------------------------------------------
    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
    Bruk:
    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)

    ==========================================================================
    Formål:
    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)
    Parametre:
    Type     Navn    I/U Forklaring
    ---------------------------------------------------------------------------
    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
    Bruk:
    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

    ==========================================================================
    Formål:
    Sjekker om aktuell gruppe er referert fra andre grupper.
    Parametre:
    Type  Navn      I/U Forklaring
    ---------------------------------------------------------------------------
    bool  bReferert  r  Det finnes referanser til gruppen
    Bruk:
    bReferert = LC_ErReferert();
    ===========================================================================

    SK_EntPnt_FYBA bool LC_ErReferert(void)

## 7.2 SOSI-gruppe

## LC_GetGrNr

Hent gruppe-nummer

    ==========================================================================
    Formål:
    Henter gruppenummer for aktuell gruppe.
    Parametre:
    Type    Navn     I/U   Forklaring
    --------------------------------------------------------------------------
    LC_BGR * pBgr      iu   Peker til gruppestruktur der gruppenummer lagres
    short   status    r    Status  UT_TRUE=OK, UT_FALSE=ingen aktuell gruppe
    Bruk:
        status = LC_GetGrNr(&Bgr)
       ==========================================================================

    SK_EntPnt_FYBA short LC_GetGrNr(LC_BGR * pBgr)

## LC_GetGrPara

Hent gruppe-parametre

    ==========================================================================
    Formål:
    Henter diverse opplysninger om aktuell gruppe.
    Parametre:
    Type    Navn   I/U   Forklaring
    ------------------------------------------------------------------------
    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)
    Bruk:
        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

    =============================================================================
    Formål:
    Henter diverse opplysninger om gitt gruppenummer.
    Parametre:
    Type            Navn I/U  Forklaring
    -----------------------------------------------------------------------------
    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)
    Bruk:
        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

    =============================================================================
    Formål:
    Henter peker til FilAdm for aktuell gruppe.
    Parametre:
    Type         Navn    I/U   Forklaring
    -----------------------------------------------------------------------------
    LC_FILADM * *ppFil    u   Peker til FilAdm-peker
    short        status   r   UT_TRUE = OK, UT_FALSE = Ingen aktuell gruppe
    Bruk:
        status = LC_GetGrFi(&pFil);
       =============================================================================

    SK_EntPnt_FYBA short LC_GetGrFi(LC_FILADM **ppFil)

## LC_SetEndringsstatus

Setter endringsstatus for aktuell gruppe

    ==========================================================================
    Formål:
    Setter endringsstatus for aktuell gruppe.
    NB! Denne rutinen bør normalt ikke brukes av vanlige klient-program!
    Parametre:
    Type   Navn      I/U  Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
    LC_dg_SetEndringsstatus(END_KOPI);
    =============================================================================

    SK_EntPnt_FYBA void LC_SetEndringsstatus(short sStatus)

## 7.3 Hode, aktuell gruppe

## LC_NyttHode

Lager nytt hode

    ==========================================================================
    Formål:
    Legger inn et standard SOSI-filhode i ginfo i aktuell gruppe.
    Parametre:
        ingen
    Bruk:
        LC_NyttHode();
    ==========================================================================

    SK_EntPnt_FYBA void LC_NyttHode(void)

## LC_TestHode

Tester SOSI-hodet

    ==========================================================================
    Formål:
    Sjekker at ginfo i aktuell gruppe er et lovlig SOSI-filhode.
    Parametre:
     Type    Navn    I/U   Forklaring
    --------------------------------------------------------------------------
     short   ist      r    status: UT_TRUE=OK, UT_FALSE=feil
    Bruk:
        ist = LC_TestHode();
    ==========================================================================

    SK_EntPnt_FYBA short LC_TestHode(void)

## LC_GetOmr

Finner ..OMRÅDE i hodet

    ==========================================================================
    Formål:
    Henter ut område fra ginfo i aktuell gruppe.
    OBS! Forutsetter at aktuell gruppe er et SOSI-filhode.
    Parametre:
    Type     Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
        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

    ==========================================================================
    Formål:
    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.
    Parametre:
    Type     Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
        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

    ==========================================================================
    Formål:
    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.
    Parametre:
    Type     Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
        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

    ==========================================================================
    Formål:
    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.
    Parametre:
    Type            Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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).
    Bruk:
    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

    ==========================================================================
    Formål:
    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.
    Parametre:
    Type     Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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.
    Bruk:
        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

    ==========================================================================
    Formål:
    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
    Parametre:
    Type           Navn    I/U  Forklaring
    --------------------------------------------------------------------------
    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.
    Bruk:
    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 Hode, direkte fra SOSI-fil

## HO_New

Lager nytt hode

     =========================================================================
    Formål:
    Genererer et nytt SOSI-filhode.
    Hvis område ikke har noen utstrekning justeres
    dette med 1 meter i hver retning.
    Parametre:
    Type     Navn         I/U    Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
    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

    =============================================================================
    Formål:
    Sjekker at filen er en SOSI-fil, og finner posisjonen for .SLUTT.
    Parametre:
    Type      Navn       I/U   Forklaring
    -----------------------------------------------------------------------------
    char     *pszFil      i    Fullstendig filnavn
    UT_INT64 *sluttpos    u    Posisjon for .SLUTT
    short     ist         r    Status: UT_TRUE  = OK
                                     UT_FALSE = feil
    Bruk:
        ist = HO_TestSOSI(pszFil,&sluttpos);
    =============================================================================

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

## HO_GetKvalitet

Finner kvalitetsopplysninger

    =============================================================================
    Formål:
    Finne kvalitetsopplysninger i filhode.
    (Ikke aktuellt etter SOSI v. 4.00.)
    Parametre:
    Type    Navn              I/U  Forklaring
    -----------------------------------------------------------------------------
    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
    Bruk:
         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

    ==========================================================================
    Formål:
    Finne tegnsett i filhodet.
    Parametre:
    Type     Navn      I/U  Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
         sStatus = HO_GetTegnsett(pszFil,&sTegnsett);
    ==========================================================================

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

## HO_GetVal

Finn verdien til et SOSI-navn

    =============================================================================
    Formål:
    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).
    Parametre:
    Type     Navn        I/U  Forklaring
    -----------------------------------------------------------------------------
    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.
    Bruk:
    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

    =============================================================================
    Formål:
    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.
    Parametre:
    Type     Navn       I/U   Forklaring
    -----------------------------------------------------------------------------
    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.
    Bruk:
    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

    =============================================================================
    Formål:
    Henter ut innholdet under ..TRANSPAR fra fra filhodet.
    Parametre:
    Type            Navn      I/U  Forklaring
    --------------------------------------------------------------------------
    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).
    Bruk:
    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

    =============================================================================
    Formål:
    Henter områdeangivelsen fra filhodet.
    Parametre:
    Type     Navn        I/U   Forklaring
    -----------------------------------------------------------------------------
    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.
    Bruk:
    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

    =============================================================================
    Formål:
    Sjekker faktisk tegnsett i .HODE.
    Parametre:
    Type    Navn       I/U   Forklaring
    -----------------------------------------------------------------------------
    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
    Bruk:
        sStatus = HO_SjekkTegnsett(fpek,tegnsett);
    =============================================================================

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

# 8 Ny gruppe

## LC_NyGr

Ny gruppe i basen

    ==========================================================================
    Formål:
    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.
    Parametre:
    Type       Navn    I/U   Forklaring
    -----------------------------------------------------------------------------
    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.
    Bruk:
    gnavn = LC_NyGr (pFil,sosi,&Bgr,&snr);
       =============================================================================

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

# 9 Direkte les/skriv

## LC_RxGr

Les gruppe fra base

    ==========================================================================
    Formål:
    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.
    Parametre:
    Type    Navn    I/U  Forklaring
    --------------------------------------------------------------------------
    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)

    Bruk:
        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

    ==========================================================================
    Formål:
    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.
    Parametre:
    Type  Navn    I/U  Forklaring
    ------------------------------------------------------------------------
    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.
    Bruk:
    LC_WxGr(k_stat)
       ==========================================================================

    SK_EntPnt_FYBA short LC_WxGr(short k_stat)

# 10 Sekvensiell les/skriv

## LC_RsGr

Les gruppe sekvensielt

    ==========================================================================
    Formål:
    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.)
    Parametre:
    Type             Navn   I/U  Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
        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

    ==========================================================================
    Formål:
    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.
    Parametre:
    Type             Navn   I/U  Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
        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

    =============================================================================
    Formål:
    Skriver aktuell gruppe til ekstern, sekvensiell SOSI-fil.
    Parametre:
    Type       Navn  I/U   Forklaring
    -----------------------------------------------------------------------------
    LC_FILADM *pFil   i    Peker til FilAdm
    Bruk:
    LC_WsGr(pFil);
       =============================================================================

    SK_EntPnt_FYBA void LC_WsGr(LC_FILADM *pFil)

## LC_WsGrPart

Skriv del av gruppe sekvensiellt

    ==========================================================================
    Formål:
    Skriver en del av aktuell gruppe til ekstern, sekvensiell SOSI-fil.
    Parametre:
    Type       Navn     I/U   Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
    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

    =============================================================================
    Formål:
    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.
    Parametre:
    Type       Navn      I/U   Forklaring
    -----------------------------------------------------------------------------
    LC_FILADM *pFil       i    Peker til FilAdm
    short      oppdatert  r    Skrivestatus (1=OK, 0=Det er ikke plass
                                             til å skrive hodet)
    Bruk:
    ist = LC_EndreHode(pFil);
       =============================================================================

    SK_EntPnt_FYBA short LC_EndreHode(LC_FILADM *pFil)

# 11 Slette gruppe

## LC_DelGr

Slett gruppe

    ==========================================================================
    Formål:
    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.
    Parametre:
    Type   Navn    I/U   Forklaring
    --------------------------------------------------------------------------
    short  sStatus  r    Status:  UT_TRUE  = OK
                                  UT_FALSE = feil, ikke sletta
    Bruk:
    sStatus = LC_DelGr();
       ==========================================================================

    SK_EntPnt_FYBA short LC_DelGr(void)

# 12 Tilbakeskriving av buffret info til SOSI-fil

## LC_Save

Tøm skrivekøa

    ==========================================================================
    Formål:
    Skriver gruppene som ligger i skrivekø ut til SOSI-fil.
    Parametre: ingen
    Bruk:
    LC_Save();
       ==========================================================================

    SK_EntPnt_FYBA void LC_Save(void)

# 13 Reservere plass i ringbuffer

Dette er rutiner for å tildele/reservere plass til Ginfo/Koordinater i ringbufferet, og må utføres før det legges data inn i rungbuffer med rutiner som LC_PuGi og LC_PuTK OBS: Aktuell datagruppe må først være lest/valgt med rutinene LC_RxGr eller LC_NyGr.

## LC_InsGiL

Skyt inn GINFO-linjer

    =============================================================================
    Formål:
    Skyter inn linjer GINFO-delen i en gruppe.
    Parametre:
    Type     Navn    I/U   Forklaring
    -----------------------------------------------------------------------------
    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.
    Bruk:
    ngi = LC_InsGiL(linje, antall);
       =============================================================================

    SK_EntPnt_FYBA short LC_InsGiL(short linje, short antall)

## LC_AppGiL

Heng på en GINFO-linje

    =============================================================================
    Formål:
    Henger på en linje i GINFO-delen i en gruppe.
    Parametre:
    Type     Navn    I/U   Forklaring
    -----------------------------------------------------------------------------
    short    ngi      r    Antall GINFO-linjer i gruppen etter utvidelsen.
                           (Linjenumret på den tilføyde linjen.)
    Bruk:
    ngi = LC_AppGiL();
       =============================================================================

    SK_EntPnt_FYBA short LC_AppGiL()

## LC_InsKoL

Skyt inn koordinatlinjer

    ==========================================================================
    Formål:
    Skyter inn linjer koordinatdelen i en gruppe.
    Parametre:
    Type    Navn    I/U   Forklaring
    --------------------------------------------------------------------------
    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.
    Bruk:
    nko = LC_InsKoL(linje, antall);
       ==========================================================================

    SK_EntPnt_FYBA long LC_InsKoL(long linje, long antall)

## LC_AppKoL

Heng på en koordinatlinje

    ==========================================================================
    Formål:
    Henger på en linje i koordinatdelen i en gruppe.
    Parametre:
    Type     Navn    I/U   Forklaring
    --------------------------------------------------------------------------
    long    nko      r    Antall koordinater i gruppen etter utvidelsen.
    Bruk:
    nko = LC_AppKoL();
       ==========================================================================

    SK_EntPnt_FYBA long LC_AppKoL()

## LC_DelGiL

Fjern GINFO-linjer

    =============================================================================
    Formål:
    Fjerner linjer i GINFO-delen i en gruppe.
    Parametre:
    Type     Navn    I/U   Forklaring
    -----------------------------------------------------------------------------
    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.
    Bruk:
    ngi = LC_DelGiL(linje, antall);
       =============================================================================

    SK_EntPnt_FYBA short LC_DelGiL(short linje, short antall)

## LC_DelKoL

Fjern koordinatlinjer

    =============================================================================
    Formål:
    Fjerner linjer koordinatdelen i en gruppe.
    Parametre:
    Type     Navn    I/U   Forklaring
    -----------------------------------------------------------------------------
    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.
    Bruk:
    nko = LC_DelKoL(linje, antall);
       =============================================================================

    SK_EntPnt_FYBA long LC_DelKoL(long linje, long antall)

# 14 Legge data inn i ringbuffer

Dette er rutiner for legge data inn i ringbufferet. Rutinene arbeider mot aktuell datagruppe. Det forutsettes at det er tildelt plass med rutinene i kapittelet foran. (dvs: LC_AppGiL,LC_InsGiL,LC_AppKoL,LC_InsKoL) OBS: Etter at du er ferdig mned å legge inn nytt innhold må du lagre data med LC_WxGr.

## 14.1 Kopiere gruppe

## LC_CopyGr

Kopier gruppe

    ==========================================================================
    Formål:
    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.
    Parametre:
    Type     Navn    I/U   Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
        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

    ===========================================================================
    Formål:
    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.
    Parametre:
    Type    Navn     I/U   Forklaring
    -----------------------------------------------------------------------------
    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.
    Bruk:
    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 Gruppeinformasjon

## LC_PutGi

Put GINFO-linje

    ==========================================================================
    Formål:
    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.
    Parametre:
    Type     Navn    I/U   Forklaring
    --------------------------------------------------------------------------
    short    lin_nr   i    Linjenummer i GINFO   (1 er første linje)
    char     *ginfo   i    GINFO-streng avslutta med '/0'
    Bruk:
    LC_PutGi(lin_nr,ginfo);
    	==========================================================================

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

## LC_PutGP

Put GINFO-parameter

    ==========================================================================
    Formål:
    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.
    Parametre:
    Type     Navn        I/U   Forklaring
    --------------------------------------------------------------------------
    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.
    Bruk:
    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

    ==========================================================================
    Formål:
    Legger til et SOSI-navn med verdi i GINFO.
    Lik LC_PutGP, men legger alltid til ny linje i ginfo.
    Parametre:
    Type     Navn        I/U   Forklaring
    --------------------------------------------------------------------------
    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.
    Bruk:
    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

    ==========================================================================
    Formål:
    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.
    Parametre:
    Type     Navn        I/U   Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
    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

    ==========================================================================
    Formål:
    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.
    Parametre:
    Type        Navn    I/U   Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
    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

    ==========================================================================
    Formål:
    Oppdaterer GINFO med ..KVALITET
    Parametre:
    Type       Navn            I/U  Forklaring
    --------------------------------------------------------------------------
    Parametre:
    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.
    Bruk:
         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

    ==========================================================================
    Formål:
    Oppdaterer PINFO med ...KVALITET
    Parametre:
    Type        Navn             I/U   Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
    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

    ==========================================================================
    Formål:
    Oppdaterer ..NGIS-FLAGG i GINFO og ajourfører interne tabeller.
    Hvis endring = O_GINFO oppateres tabellene i forhold til
    eksisterende GINFO.
    Parametre:
    Navn     Type   I/U  Forklaring
    --------------------------------------------------------------------------
    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.
    Bruk:
    LC_OppdaterEndret(O_ENDRET);
    =============================================================================

    SK_EntPnt_FYBA void LC_OppdaterEndret(short endring)

## LC_DelGiNavn

Fjerner egenskap fra GINFO

    ==========================================================================
    Formål:
    Fjerner alle forekomster av gitt egenskap (SOSI-navn) fra GINFO.
    Parametre:
    Type     Navn             I/U   Forklaring
    --------------------------------------------------------------------------
    char    *pszEgenskapNavn   i    SOSI-navn som skal slettes
    short    ngi               r    Antall GINFO-linjer i gruppen etter setting
    Bruk:
    ngi = LC_DelGiNavn("..RADIUS");
       ==========================================================================

    SK_EntPnt_FYBA short LC_DelGiNavn(char *pszEgenskapNavn)

## LC_FinnNivo

Beregn nivå

    ==============================================================
    Formål:
    Teller antall prikker i starten på egenskapsnavn.
    PARAMETERLISTE:
    Type     Navn      I/U   Merknad
    -------------------------------------------------------------
    char    *pszGinfo   i    Streng med egenskapsnavn i starten
    short    sNivo      r    Antall prikker
    Bruk:
    sNivo = LC_FinnNivo(pszGinfo);
      ================================================================

    SK_EntPnt_FYBA short LC_FinnNivo(const char * pszNavn)

## 14.3 Serienummer og referansenummer

## LC_PutSn

Put Serienummer

    ==========================================================================
    Formål:
    Legger inn nytt serienummer på aktuell gruppe.
    Parametre:
    Type     Navn    I/U   Forklaring
    --------------------------------------------------------------------------
    long     snr      i    Serienummer
    Bruk:
    LC_PutSn(snr);
       ==========================================================================

    SK_EntPnt_FYBA void LC_PutSn(long snr)

## LC_PutRef

Legger inn referanser i GINFO

    ==========================================================================
    Formål:
    Legger inn et array med referanser til GINFO i aktuell gruppe.
    Parametre:
    Type     Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
        ngi = LC_PutRef(ref_array,ant_ref);
    ==========================================================================

    SK_EntPnt_FYBA short LC_PutRef(long *ref_array,long ant_ref)

## 14.4 Koordinater

## LC_PutTK

Put koordinat

    ==========================================================================
    Formål:
    Legger inn et punkts koordinater (n,ø) i meter i terreng
    Parametre:
    Type    Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
    LC_PutTK(punkt_nr,aust,nord);
       ==========================================================================

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

## LC_PutTH

Put høyde

    ==========================================================================
    Formål:
    Legger inn et punkts høyde i meter i terreng
    Parametre:
    Type    Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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.
    Bruk:
    LC_PutTH(punkt_nr,hoyde);
       ==========================================================================

    SK_EntPnt_FYBA void LC_PutTH(long punkt_nr, double hoyde)

## LC_PutTD

Put dybde

    ==========================================================================
    Formål:
    Legger inn et punkts dybde i meter i terreng
    Parametre:
    Type    Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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.
    Bruk:
    LC_PutTD(punkt_nr,dybde);
       ==========================================================================

    SK_EntPnt_FYBA void LC_PutTD(long punkt_nr, double dybde)

## 14.5 Knutepunkt

## LC_PutKp

Put knutepunkt

    ==========================================================================
    Formål:
    Legger inn knutepunktverdi i punktet. Ny verdi skrives over eksisterende
    verdi. (Multiple KP er ikke mulig.)
    Parametre:
    Type    Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    long   punkt_nr   i    Punktnummer (1 er første punkt)
    short   kp         i    Knutepunkt (lovlig verdi 0 - SHRT_MAX)
                            kp == 0 fjerner knutepunkt.
    Bruk:
    LC_PutKp(punkt_nr,kp);
       ==========================================================================

    SK_EntPnt_FYBA void LC_PutKp(long punkt_nr, short kp)

## 14.6 Punktinformasjon

## LC_PutPi

Put PINFO

    ==========================================================================
    Formål:
    Legger inn hele punktinformasjonen på angitte punkt
    Ny verdi skriver over eksisterende verdi.
    Verdi "" fjerner eksisterende PINFO.
    Knutepunkt legges inn med LC_PutKp.
    Parametre:
    Type    Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
    sStatus = LC_PutPi(punkt_nr,pinfo);
       ==========================================================================

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

# 15 Hente data fra ringbuffer

Dette er rutiner for hente data ut fra ringbufferet. Rutinene arbeider mot current datagruppe. Denne kan du ha fått inn enten ved les fra SOSI-fil eller at du er i etableringsfasen av en ny.

## 15.1 Generell verdi til et SOSI-navn

I henhold til den generelle mekanisme på SOSI-fila hvor info kan være enten i HODE ,GINFO eller PINFO er det behov for rutine som går over det hele for å finne aktuell verdi for denne gruppa Det tenkes her spesiellt på kavlitetsopplysninger, dato etc.

## 15.2 Gruppeinformasjon

## LC_GetGi

Get GINFO-linje

    ==========================================================================
    Formål:
    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).
    Parametre:
    Type     Navn    I/U   Forklaring
    --------------------------------------------------------------------------
    short    lin_nr   i    Linjenummer i GINFO   (1 er første linje)
    char    *ginfo    r    Peker til GINFO-streng avslutta med '/0'
    Bruk:
    ginfo = LC_GetGi(lin_nr);
       ==========================================================================

    SK_EntPnt_FYBA char *LC_GetGi(short lin_nr)

## LC_GetGP

Get GINFO-parameter

    ==========================================================================
    Formål:
    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.
    Parametre:
    Type     Navn        I/U   Forklaring
    --------------------------------------------------------------------------
    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.
    Bruk:
    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 Serienummer og referansenummer

## LC_GetSn

Get serienummer

    ==========================================================================
    Formål:
    Henter serienummer for aktuell gruppe.
    Parametre:
    Type  Navn  I/U  Forklaring
    --------------------------------------------------------------------
    long  snr    r   Serienr.  (INGEN_GRUPPE = ingen aktuell gruppe)
    Bruk:
    snr = LC_GetSn();
       ==========================================================================

    SK_EntPnt_FYBA long LC_GetSn(void)

## LC_GetRef

Hent referanser fra GINFO

    ==========================================================================
    Formål:
    Henter ut et array med referanser fra GINFO i aktuell gruppe.
    Parametre:
    Type     Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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.
    Bruk:
        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

    ==========================================================================
    Formål:
    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.
    Parametre:
    Type     Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    long    ant_ref     r    Antall referanser i GINFO.
                               OBS! Start- og sluttparantes for øy blir regnet
                               som egne referanser.
    Bruk:
        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

    ==========================================================================
    Formål:
    Initierer status for GetRefFlate.
    Parametre:
    Type           Navn     I/U   Forklaring
    --------------------------------------------------------------------------
    LC_GRF_STATUS * pRefStat  iu   Struktur med statusopplysninger.
    Bruk:
        LC_InitGetRefFlate(pGrfStat,pBgr);
    ==========================================================================

    SK_EntPnt_FYBA void LC_InitGetRefFlate(LC_GRF_STATUS * pGS)

## LC_GetRefFlate

Hent referanser for flate fra GINFO

    ==========================================================================
    Formål:
    Henter ut et array med referanser for flate fra GINFO i aktuell gruppe.
    Parametre:
    Type            Navn      I/U  Forklaring
    -------------------------------------------------------------------------
    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.
    Bruk:
       #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

    =======================================================================
    Bruk:
    sRefLin = LC_ErLinjeRefLin(gp,sRefLin);
    parametere:
    Type    Navn        I/U  Forklaring
    -----------------------------------------------------------------------
    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 Spesielle get-rutiner

## LC_GetBuePar

Beregner parametre som definerer sirkelbue

    ============================================================================
    Formål:                                                   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.
    Parametre:
    Type     Navn        I/U   Forklaring
    ----------------------------------------------------------------------------
    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
    Bruk:
    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

    ==========================================================================
    Formål:
    Henter ut nødvendige opplysninger om en bue.
    Parametre:
    Type     Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
        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

    ==========================================================================
    Formål:
    Henter ut nødvendige opplysninger om en buep.
    Parametre:
    Type     Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
        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

    ==========================================================================
    Formål:
    Henter ut nødvendige opplysninger om en sirkel.
    Parametre:
    Type     Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
        ist = LC_GetSirkel(&as,&ns,&radius);
    ==========================================================================

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

## LC_GetSirkelp

Hent silkelp

    ==========================================================================
    Formål:
    Henter ut nødvendige opplysninger om en sirkelp.
    Parametre:
    Type     Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
        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

    ==========================================================================
    Formål:
    Finne kvalitetsopplysninger i filhode eller vanlig gruppe.
    (Tolker aktuell gruppe.)
    Parametre:
    Type     Navn       I/U   Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
         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 Koordinater

## LC_GetTK

Get koordinat

    ==========================================================================
    Formål:
    Henter et punkts koordinater (ø,n) i meter i terreng
    Parametre:
    Type    Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
    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

    ==========================================================================
    Formål:
    Henter tabell med koordinater (ø,n) i meter i terreng
    Parametre:
    Type    Navn       I/U   Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
    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

    ==========================================================================
    Formål:
    Henter et punkts høyde i meter i terreng. (Henter BARE FRA PUNKTET.)
    Parametre:
    Type    Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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.
    Bruk:
    hoyde = LC_GetTH(punkt_nr);
       ==========================================================================

    SK_EntPnt_FYBA double LC_GetTH(long punkt_nr)

## LC_GetArrayTH

Hent tabell med høyder

    ==========================================================================
    Formål:
    Henter tabell med høyder
    Parametre:
    Type    Navn       I/U   Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
    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

    ==========================================================================
    Formål:
    Henter et punkts høyde i meter i terreng. (Henter fra punktet eller fra
    GINFO.)
    Parametre:
    Type    Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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.
    Bruk:
    hoyde = LC_GetHoyde(punkt_nr);
       ==========================================================================

    SK_EntPnt_FYBA double LC_GetHoyde(long punkt_nr)

## LC_GetTD

Get dybde

    ==========================================================================
    Formål:
    Henter et punkts dybde i meter i terreng. (Henter BARE FRA PUNKTET.)
    Parametre:
    Type    Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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.
    Bruk:
    dybde = LC_GetTD(punkt_nr);
       ==========================================================================

    SK_EntPnt_FYBA double LC_GetTD(long punkt_nr)

## LC_GetDybde

Get dybde

    ==========================================================================
    Formål:
    Henter et punkts dybde i meter i terreng. (Henter fra punktet eller fra
    GINFO.)
    Parametre:
    Type    Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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.
    Bruk:
    dybde = LC_GetHoyde(punkt_nr);
       ==========================================================================

    SK_EntPnt_FYBA double LC_GetDybde(long punkt_nr)

## 15.6 Knutepunkt

## LC_GetKp

Get knutepunkt

    ==========================================================================
    Formål:
    Henter knutepunktverdi i punktet.
    Parametre:
    Type    Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    long   punkt_nr   i    Punktnummer (1 er første punkt)
    short   kp_type    r    Knutepunkttype (1-4095)
                            (0 = punktet har ikke knutepunkt)
    Bruk:
    kp = LC_GetKp(punkt_nr);
       ==========================================================================

    SK_EntPnt_FYBA short LC_GetKp(long punkt_nr)

## LC_FinnKp

Finn knutepunkt

    ==========================================================================
    Formål:
    Skanner gruppe, og finner punkt som er knutepunkt.
    Parametre:
    Type     Navn        I/U   Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
    status = LC_FinnKp(&forste_punkt,siste_punkt,kp);
       ==========================================================================

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

## 15.7 Punktinformasjon

## LC_GetPi

Get PINFO

    ==========================================================================
    Formål:
    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).
    Parametre:
    Type    Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    long   punkt_nr   i    Punktnummer (1 er første punkt)
    char   *pinfo      r    Peker til punktinformasjon eksklusiv knutepunkt
    Bruk:
    pinfo = LC_GetPi(punkt_nr);
       ==========================================================================

    SK_EntPnt_FYBA char *LC_GetPi(long punkt_nr)

## LC_InitPP

Initier PINFO-søk

    ==========================================================================
    Formål:
    Initierer søk etter PINFO.
    Parametre:
    Type            Navn        I/U  Forklaring
    --------------------------------------------------------------------------
    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.
    Bruk:
      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

    ==========================================================================
    Formål:
    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).
    Parametre:
    Type     Navn               I/U   Forklaring
    --------------------------------------------------------------------------
    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.
    Bruk:
    .
      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

    ==========================================================================
    Formål:
    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.
    Parametre:
    Type     Navn        I/U   Forklaring
    --------------------------------------------------------------------------
    char     pszSosiNavn  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.
    Bruk:
    pszVerdi = LC_GetPiVerdi(pszSosiNavn,lPnr,&sSettNr);
       ==========================================================================

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

## LC_TestPi

Sjekk om punkt har PINFO

    ==========================================================================
    Formål:
    Sjekker om et punkt har PINFO i en eller annen form.
    (PINFO, KP, høyde.)
    Høyde handteres ikke foreløpig.
    Parametre:
    Type    Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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"
    Bruk:
    sStatus = LC_TestPi(punkt_nr,UT_TRUE);
       ==========================================================================

    SK_EntPnt_FYBA short LC_TestPi(long punkt_nr,short sTestHoyde)

## 15.8 Spesielle henteoperasjoner

## LC_GetCurEnhet

Hent enhet på angitt nivå

    ==========================================================================
    Formål:
    Henter ut enhet fra filhode eller GINFO
    Parametre:
    Type        Navn    I/U   Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
        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å

    ==========================================================================
    Formål:
    Finne kvalitetsopplysninger på angitt nivå, hode ginfo eller pinfo.
    Parametre:
    Type        Navn          I/U  Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
     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

    =============================================================================
    Formål:
    Henter objekttype for gitt gruppenummer.
    Parametre:
    Type    Navn       I/U  Forklaring
    -----------------------------------------------------------------------------
    LC_BGR *pBgr        i   Gruppenummer det ønskes opplysninger om.
    char   *pszObjtype  r   OBJTYPE
                            NULL hvis gruppen ikke finnes
    Bruk:
    pszObjtype = LC_GetObjtypeBgr(pBgr);
    =============================================================================

    SK_EntPnt_FYBA const char *LC_GetObjtypeBgr(LC_BGR * pBgr)

## LC_GetElementNavn

Hent elementnavn

    ==========================================================================
    Formål:
    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
    Parametre:
    Type        Navn    I/U  Forklaring
    --------------------------------------------------------------------------
    LC_FILADM  *pFil     i   Peker til FilAdm
    short       sNavnNr  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 *pszNavn  r   Peker til elementnavn,
                             NULL = ukjent fil eller ulovlig linjenummer
    Bruk:
    // Går gjennom alle navnene ut over de forhåndsdefinerte navnene.
    short sNavnNr = L_KP+1;
    while ((pszNavn = LC_GetElementNavn(pFil,sNavnNr)) != NULL)
    {
       // Gjør noe med navnet
       ...
       ++sNavnNr;
    }
    =============================================================================

    SK_EntPnt_FYBA const char *LC_GetElementNavn(LC_FILADM *pFil,short sNavnNr,bool *bBrukt)

# 16 Blaing i basen

## LC_InitNextFil

Initier finn neste fil

    ==========================================================================
    Formål:
    Initierer pFil for bruk i finn neste fil.
    Parametre:
    Type           Navn   I/U  Forklaring
    ------------------------------------------------------------------------
    LC_FILADM    **ppFil    u   Peker til FilAdm-peker
    Bruk:
        LC_InitNextFil(&pFil)
       ==========================================================================

    SK_EntPnt_FYBA void LC_InitNextFil(LC_FILADM **ppFil)

## LC_NextFil

Finn neste fil

    ==========================================================================
    Formål:
    Finn neste fil i aktuell base.
    Parametre:
    Type           Navn    I/U   Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
        LC_FILADM *pFil;
                  Denne løkka går gjennom alle framgrunns-filene i basen
        LC_InitNextFil(&pFil)
        while (LC_NextFil(&pFil,LC_FRAMGR)) {
          pszFilNavn = LC_GetFiNa(pFil);
          .
          Behandle filnavnet
          .
        }
       ==========================================================================

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

## LC_InitNextBgr

Initier finn neste gruppe

    ==========================================================================
    Formål:
    Initierer Bgr for bruk i finn neste gruppe.
    Parametre:
    Type           Navn   I/U  Forklaring
    ------------------------------------------------------------------------
    LC_BGR *        pBgr    iu  Peker til gruppestruktur
    Bruk:
        LC_InitNextBgr(&Bgr)
       ==========================================================================

    SK_EntPnt_FYBA void LC_InitNextBgr(LC_BGR * pBgr)

## LC_NextBgr

Finn neste gruppe

    ==========================================================================
    Formål:
    Finn neste gruppe i aktuell base.
    Sekvensielle filer blir ikke håndtert.
    Parametre:
    Type           Navn    I/U   Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
        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 Geografisk søking

## LC_GetGrWin

Hent omskrevet rektangel for gruppe

    ==========================================================================
    Formål:
    Henter omskrevet rektangel for gitt gruppe.
    For flater er refererte grupper medregnet.
    Parametre:
    Type     Navn     I/U   Forklaring
    --------------------------------------------------------------------------
    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.
    Bruk:
       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

    =============================================================================
    Formål:
    Definerer punkt for geografisk søk på flate.
    Parametre:
    Type     Navn      I/U  Forklaring
    -----------------------------------------------------------------------------
    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
    Bruk:
    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

    =============================================================================
    Formål:
    Finner første gruppe i det definerte området for flatesøk.
    Parametre:
    Type     Navn      I/U  Forklaring
    -----------------------------------------------------------------------------
    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)
    Bruk:
    Se under LC_SBFlate.
       =============================================================================

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

## LC_FNFlate

Finn neste ved flatesøk

    ==========================================================================
    Formål:
    Finner neste gruppe i det definerte området for flatesøk.
    Parametre:
    Type     Navn      I/U  Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
    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

    =============================================================================
    Formål:
    Definerer geografisk område for geografisk søk.
    Parametre:
    Type           Navn      I/U  Forklaring
    -----------------------------------------------------------------------------
    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
    Bruk:
    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

    ==========================================================================
    Formål:
    Finner første gruppe i det definerte området for kombinert geografisk søk.
    Parametre:
    Type     Navn      I/U  Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
    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

    ==========================================================================
    Formål:
    Finner neste gruppe i det definerte området for geografisk søk.
    Parametre:
    Type           Navn      I/U  Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
    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

    ==========================================================================
    Formål:
    Finn alle i geografisk søkeområde.
    Tilslag merkes i brukttabellen kolonne BT_GEOSOK (15).
    Parametre:
    Type           Navn      I/U  Forklaring
    --------------------------------------------------------------------------
    LC_GEO_STATUS * pGeoStat  iu   Peker til struktur for søkestatus
    long           lAntall    r   Antall funnet.
    Bruk:
    .
    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

    ==========================================================================
    Formål:
    Finner første gruppe i det definerte området for kombinert geografisk søk.
    Søker bare i en gitt fil.
    Parametre:
    Type           Navn       I/U  Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
    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

    ==========================================================================
    Formål:
    Finner neste gruppe i det definerte området for geografisk søk.
    Søker bare i en gitt fil.
    Parametre:
    Type           Navn      I/U  Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
    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

    =======================================================================
    Bruk:
    parametere:
    Type            Navn     I/U   Forklaring
    -----------------------------------------------------------------------
    LC_GEO_STATUS *  pGeoStat  i    Peker til struktur for søkestatus
    Formål:
    Avslutter geografisk søk, og frigir kjede med søkeresultat.
    =======================================================================

    SK_EntPnt_FYBA void LC_AvsluttSok(LC_GEO_STATUS * pGeoStat)

## LC_WTst

Vindustest

    ==========================================================================
    Formål:
    Sjekk om aktuell gruppe berører gitt vindu.
    Tar hensyn til gruppenavnet. Handterer (PUNKT, LINJE, KURVE, BUE,
    BUEP, SIRKEL, SIRKELP, SVERM, TRASE ).
    Parametre:
    Type    Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
    .
    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

    ==========================================================================
    Formål:
    Sjekker om gitt punkt ligger innenfor polygon angitt av aktuell gruppe.
    Forutsetter at tabellen danner et lukket polygon
    Parametre:
    Type    Navn    I/U   Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
    .
    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

    ==========================================================================
    Formål:
    Sjekker om gitt punkt ligger innenfor yttergrensen for polygon angitt
    av aktuell gruppe.
    Forutsetter at tabellen danner et lukket polygon
    Parametre:
    Type    Navn    I/U   Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
    ist = LC_PTstOmkrets(a,n);
       ==========================================================================

    SK_EntPnt_FYBA short LC_PTstOmkrets(double a,double n)

# 18 Serienummer-søking

## LC_SBSn

Sett søkegrense for serienummer

    ==========================================================================
    Formål:
    Setter søkegrenser for serienummersøk.
    Parametre:
    Type        Navn     I/U   Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
    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

    ==========================================================================
    Formål:
    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).
    Parametre:
    Type     Navn     I/U   Forklaring
    -----------------------------------------------------------------------------
    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)
    Bruk:
    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

    ==========================================================================
    Formål:
    Finn gruppenummer for et gitt serienummer i søkeområdet for serienummer.
    Endrer IKKE "current gruppe".
    Parametre:
    Type        Navn    I/U    Forklaring
    -----------------------------------------------------------------------------
    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)
    Bruk:
    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

    ==========================================================================
    Formål:
    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.
    Parametre:
    Type       Navn     I/U   Forklaring
    -----------------------------------------------------------------------------
    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)
    Bruk:
    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

    ==========================================================================
    Formål:
    Finner alle grupper i fil/serienummer søkeområdet og merker i kolonne
    BT_SNRSOK i brukttabellen.
    Parametre:
    Type        Navn    I/U   Forklaring
    --------------------------------------------------------------------------
    LC_SNR_ADM *pSnrAdm  i    Peker til statusblokk for serienummersøk
    long        antall   r    Antall grupper funnet.
    Bruk:
    antall_funnet = LC_FASn(&SnrAdm);
    =============================================================================

    SK_EntPnt_FYBA long LC_FASn(LC_SNR_ADM * pSnrAdm)

## LC_FFSn

Finn første serienummer

    =============================================================================
    Formål:
    Finner første gruppe i fil/serienummer søkeområdet.
    Parametre:
    Type        Navn     I/U   Forklaring
    -----------------------------------------------------------------------------
    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)
    Bruk:
    sstat = LC_FFSn(&SnrAdm,&Bgr);
    ================================================================================

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

## LC_FNSn

Finn neste serienummer

    ==========================================================================
    Formål:
    Finner neste gruppe i fil/serienummer søkeområdet.
    Parametre:
    Type     Navn     I/U   Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
    sstat = LC_FNSn(&SnrAdm,&Bgr);
    ================================================================================

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

## LC_FPSn

Finn forige serienummer

    =============================================================================
    Formål:
    Finner forrige gruppe i fil/serienummer søkeområdet.
    Parametre:
    Type        Navn     I/U   Forklaring
    -----------------------------------------------------------------------------
    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)
    Bruk:
    sstat = LC_FPSn(&SnrAdm,&Bgr);
    ================================================================================

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

## LC_FLSn

Finn siste serienummer

    =============================================================================
    Formål:
    Finner siste gruppe i fil/serienummer søkeområdet.
    Parametre:
    Type        Navn     I/U   Forklaring
    -----------------------------------------------------------------------------
    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)
    Bruk:
    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

    ==========================================================================
    Formål:
    Finner første gruppe som er merka i gitt kolonne i brukttabellen.
    Parametre:
    Type        Navn     I/U   Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
    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

    ==========================================================================
    Formål:
    Finner neste gruppe også er merka i gitt kolonne i brukttabellen.
    Parametre:
    Type        Navn     I/U   Forklaring
    -----------------------------------------------------------------------------
    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)
    Bruk:
    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

    ==========================================================================
    Formål:
    Finner forrige gruppe i fil/serienummer søkeområdet, som også er merka i
    gitt kolonne i brukttabellen.
    Parametre:
    Type        Navn     I/U   Forklaring
    -----------------------------------------------------------------------------
    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)
    Bruk:
    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

    ==========================================================================
    Formål:
    Finner siste gruppe i fil/serienummer søkeområdet som også er merka i
    gitt kolonne i brukttabellen.
    Parametre:
    Type        Navn     I/U   Forklaring
    -----------------------------------------------------------------------------
    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)
    Bruk:
    sstat = LC_FLSnBt(&SnrAdm,BT_GEOSOK,&Bgr);
    ================================================================================

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

# 19 Egenskapsutvalg

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

    ==========================================================================
    Formål:
    Initierer query mot GINFO/PINFO.
    Tildeler administrasjonsblokk for utvalg.
    Parametre:
    Type         Navn   I/U  Forklaring
    -----------------------------------------------------------------------
    LC_UT_ADM   *UtAdm   r   Peker til administrasjonsblokk for utvalg.
    Bruk:
    pUtAdm = LC_OpenQuery();
       ==========================================================================

    SK_EntPnt_FYBA LC_UT_ADM *LC_OpenQuery(void)

## LC_CloseQuery

Avslutter query

    ==========================================================================
    Formål:
    Avslutter query mot GINFO/PINFO.
    Frigir minne brukt til administrasjon og utvalgstabeller.
    Parametre:
    Type       Navn    I/U   Forklaring
    --------------------------------------------------------------------------
    LC_UT_ADM *UtAdm    i    Peker til administrasjonsblokk for utvalg.
    Bruk:
    LC_CloseQuery(pUtAdm);
       ==========================================================================

    SK_EntPnt_FYBA void LC_CloseQuery(LC_UT_ADM * pUtAdm)

## LC_PutQueryLine

Legg inn en query-linje

    ==========================================================================
    Formål:
    Legger inn og tolker en linje med query-tekst.
    Parametre:
    Type       Navn  I/U   Forklaring
    ------------------------------------------------------------------------
    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)
    Bruk:
    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

    ==========================================================================
    Formål:
    Legger inn et regelnavn på siste linje i utvalgstabellen.
    (Navnet blir intern konvertert til "store" bokstaver.)
    Parametre:
    Type         Navn I/U   Forklaring
    ------------------------------------------------------------------------
    LC_UTVALG   *pU    i    Peker til utvalg
    char        *navn  i    Regelnavn.
    Bruk:
    LC_PutQueryRegel(pU,navn);
       =============================================================================

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

## LC_LesUtvalg

Les utvalg i kom.filen

    =============================================================================
    Formål:
    Leser og tolker gruppe og punktutvalg på kommandofilen og legger i tabell.
    Forutsetter at filen er åpnet på forhånd.
    Parametre:
    Type       Navn    I/U   Forklaring
    -----------------------------------------------------------------------------
    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
    Bruk:
    sStatus = LC_LesUtvalg(pUtAdm,pKomFil);
       =============================================================================

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

## LC_GetUtRegelNavn

Henter regelnavn

    =============================================================================
    Formål:
    Henter regelnavn for at programmet utenfor skal kunne sjekke
    at det er tilgjengelig videre behandling av alle definerte navn.
    Parametre:
    Type                         Navn I/U   Forklaring
    -----------------------------------------------------------------------------
    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.
    Bruk:
    regelpeker = LC_GetUtRegelNavn(pUtAdm,&ist);
       =============================================================================

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

## LC_GruppeUtvalg

GINFO-utvalg

    ==========================================================================
    Formål:
    Sjekker GINFO-delen av aktuell gruppe mot alle gruppeutvalg fra fil.
    Parametre:
    Type       Navn     I/U   Forklaring
    -----------------------------------------------------------------------------
    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
    Bruk:
    pszUtvalgsNavn = 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

    =============================================================================
    Formål:
    Sjekker PINFO-delen av aktuell gruppe for tilslag på PUNKT-UTVALG.
    Parametre:
    Type       Navn       I/U   Forklaring
    -----------------------------------------------------------------------------
    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
    Bruk:
    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

========================================================================== Formål: Finner et PINFO-UTVALG i kjeden av slike utvalg. Parametre: Type Navn I/U Forklaring -------------------------------------------------------------------------- LC_UT_ADM * pUtAdm i Peker til administrasjonsblokk for utvalg. char *pszNavn i Utvalgsnavn LC_UTVALG * pUtvalg r Peker til utvalget. (NULL = ikke funnet) Bruk: pUtvalg = LC_FinnPinfoUtvalg(pszNavn); ========================================================================== SK_EntPnt_FYBA LC_UTVALG * LC_FinnPinfoUtvalg(LC_UT_ADM * pUtAdm,const char *pszNavn)

## LC_PiTestUtvalg

Sjekk PUNKT/PINFO utvalg

    ==========================================================================
    Formål:
    Sjekk om PINFO i aktuellt punkt tilfredstiller et punkt-utvalg.
    Parametre:
    Type        Navn     I/U  Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
    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

    =============================================================================
    Formål:
    Sjekker GINFO-delen av aktuell gruppe mot aktuellt query-oppsett.
    Parametre:
    Type       Navn     I/U   Forklaring
    -----------------------------------------------------------------------------
    LC_UT_ADM *pUtAdm    i    Peker til administrasjonsblokk for utvalg.
    short      status    r    Søkestatus, UT_TRUE=tilslag, UT_FALSE=ikke tilslag
    Bruk:
    ist = LC_GiQuery(pUtAdm);
       =============================================================================

    SK_EntPnt_FYBA short LC_GiQuery(LC_UT_ADM *pUtAdm)

## LC_FAGiQuery

Finn alle ved query mot ginfo

    =============================================================================
    Formål:
    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.
    Parametre:
    Type            Navn    I/U   Forklaring
    -----------------------------------------------------------------------------
    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.
    Bruk:
    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

    =============================================================================
    Formål:
    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.
    Parametre:
    Type            Navn     I/U   Forklaring
    -----------------------------------------------------------------------------
    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.
    Bruk:
    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

    =============================================================================
    Formål:
    Bruker query-tekst for å finne linje der parameter skal hentes.
    Parametre:
    Type     Navn   I/U   Forklaring
    ---------------------------------------------------------------------------
    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
    Bruk:
    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

    ==========================================================================
    Formål:
    Henter største prioritet for gitt utvalgstype.
    Parametre:
    Type         Navn          I/U   Forklaring
    ----------------------------------------------------------------------
    LC_UT_ADM *   pUA            i    Peker til administrasjonsblokk for utvalg.
    short        sMaxPrioritet  r    Max prioritet
    Bruk:
    sMaxPrioritet = LC_InqMaxPrioritet(pUA);
       ==========================================================================

    SK_EntPnt_FYBA short LC_InqMaxPrioritet(LC_UT_ADM * pUA)

## LC_TestPrioritetBrukt

Tester om en prioritet er brukt

    ==========================================================================
    Formål:
    Tester om en prioritet er brukt.
    Parametre:
    Type        Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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.
    Bruk:
    sBrukt = LC_TestPrioritetBrukt(pUtAdm,sPrioritet);
       ==========================================================================

    SK_EntPnt_FYBA short LC_TestPrioritetBrukt(LC_UT_ADM * pUtAdm,short sPrioritet)

## LC_UtvalgPrioritet

Finn brukt prioritet

    ==========================================================================
    Formål:
    Sjekker GINFO og PINFO for å finne hvilke prioriteter som "berører" aktuell
    gruppe. Resultatet markeres i Gruppetabellen ulPrior.
    Parametre:
    Type           Navn       I/U Forklaring
    ---------------------------------------------------------------------------
    LC_UT_ADM     *pUtAdm      i  Peker til administrasjonsblokk for utvalg.
    Bruk:
    LC_UtvalgPrioritet(pUtAdm);
       ===========================================================================

    SK_EntPnt_FYBA void LC_UtvalgPrioritet(LC_UT_ADM *pUtAdm)

# 20 Merke grupper

## LC_SetBt

Sett merke i brukttabellen

    ==========================================================================
    Formål:
    Legg inn merke i brukttabellen.
    Parametre:
    Type    Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    LC_BGR * pGr       i    Gruppenummer
    short   kolonne   i    Kolonne som skal merkes.
                           (Lovlig BT_MIN_USER - BT_MAX_USER)
    Bruk:
    LC_SetBt(pGr,kolonne);
       ==========================================================================

    SK_EntPnt_FYBA void LC_SetBt(LC_BGR * pGr,short kolonne)

## LC_ClrBt

Slett merke i brukttabellen

    ==========================================================================
    Formål:
    Fjern merke i brukttabellen.
    Parametre:
    Navn     Type    I/U   Forklaring
    --------------------------------------------------------------------------
    LC_BGR *  pGr      i    Gruppenummer
    kolonne  short    i    Kolonne som skal merkes.
                           (Lovlig BT_MIN_USER - BT_MAX_USER)
    Bruk:
    LC_ClrBt(pGr,kolonne);
       ==========================================================================

    SK_EntPnt_FYBA void LC_ClrBt(LC_BGR * pGr,short kolonne)

## LC_GetBt

Hent merke i brukttabellen

    ==========================================================================
    Formål:
    Hent merke i brukttabellen.
    Parametre:
    Navn     Type    I/U   Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
    merke = LC_GetBt(pGr,kolonne);
       ==========================================================================

    SK_EntPnt_FYBA short LC_GetBt(LC_BGR * pGr,short kolonne)

## LC_EraseBt

Slett område i brukttabellen

    ==========================================================================
    Formål:
    Blanker en eller flere kolonner i brukttabellen i aktuell base.
    Parametre:
    Navn     Type    I/U   Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
    LC_EraseBt(fra_kol,til_kol);
       ==========================================================================

    SK_EntPnt_FYBA void LC_EraseBt(short fra_kol,short til_kol)

## LC_CopyBt

Kopier kolonne i brukttabellen

    ==========================================================================
    Formål:
    Kopier kolonne i brukttabellen.
    Samtidig er det mulig å utføre logiske operasjoner mellom de to kolonnene.
    Parametre:
    Type   Navn        I/U   Forklaring
    --------------------------------------------------------------------------
    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.

    Bruk:
    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.

    ==========================================================================
    Formål:
    Setter flag for merking av referert gruppe.
    Har innvirkning for virkemåten til:
    LC_FAGeo, LC_FASn, og LC_FAGiQuery
    Parametre:
    Type           Navn   I/U  Forklaring
    -----------------------------------------------------------------------
    unsigned short modus   i   0 = Ikke merk referert gruppe.
                               1 = Merk referert gruppe.
    Bruk:
    LC_SetModusMerk(1);
       ==========================================================================

    SK_EntPnt_FYBA void LC_SetModusMerk(unsigned short usModus)

## LC_MerkGr

Merk en gruppe brukttabellen

    ==========================================================================
    Formål:
    CH Merk aktuell gruppe i brukttabellen. Hvis flag for merking av referert
    gruppe er satt, blir også eventuelle refererte grupper merket.
    Parametre:
    Type    Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    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.
    Bruk:
    lAntall = LC_MerkGr(sKolonne,sBryter);
       ==========================================================================

    SK_EntPnt_FYBA long LC_MerkGr(short sKolonne,short sBryter)

# 21 Spesiell handtering av flater

## Polygonbeskrivelse

Strukturer for polygonbeskrivelse.

    Dette er et sett med strukturer som er kjedet sammen til en komplett
    beskrielse av en flate. Eksempel på bruk er gitt under 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

    =======================================================================
    Formål:
    Initierer polygon-struktur.
    Parametere:
    Type        Navn     I/U    Forklaring
    -----------------------------------------------------------------------
    LC_POLYGON *pPolygon  I     Peikar til polygonbeskrivelse
    Bruk:
    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

    =======================================================================
    Formål:
    Frigir minne som er allokert til polygon. (Både omkrets og hull.)
    Parametere:
    Type        Navn     I/U    Forklaring
    -----------------------------------------------------------------------
    LC_POLYGON *pPolygon  I     Peikar til polygonbeskrivelse
    Bruk:
    LC_POLYGON  Polygon;
    LC_POL_FrigiPolygon(&Polygon);
    =======================================================================

    SK_EntPnt_FYBA void LC_POL_FrigiPolygon(LC_POLYGON *pPolygon)

## LC_POL_InitOmkrets

Initierer polygon-omkrets

    =======================================================================
    Bruk:
    POL_OMKR  YtrePolygon;
    LC_POL_InitOmkrets(YtrePolygon);
    parametere:
    Type         Navn     I/U    Forklaring
    -----------------------------------------------------------------------
    LC_POL_OMKR *pPO      I/U    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

    =======================================================================
    Bruk:
    LC_POL_OMKR  YtrePolygon;
    pElement = LC_POL_LeggTilGruppeOmkrets(YtrePolygon,pBgr,sRetning,lSnr);
    parametere:
    Type            Navn     I/U    Forklaring
    -----------------------------------------------------------------------
    LC_POL_OMKR *    pPO      I/U    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

    =======================================================================
    Bruk:
    LC_POL_OMKR  YtrePolygon;
    LC_POL_FjernGruppeOmkrets(&YtrePolygon,);
    parametere:
    Type            Navn     I/U    Forklaring
    -----------------------------------------------------------------------
    LC_POL_OMKR    *pPO      I/U    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

    =======================================================================
    Bruk:
    LC_POL_OMKR  YtrePolygon;
    LC_POL_FjernSisteGruppeOmkrets(&YtrePolygon);
    parametere:
    Type         Navn     I/U    Forklaring
    -----------------------------------------------------------------------
    LC_POL_OMKR *  pPO      I/U    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

    =======================================================================
    Bruk:
    parametere:
    Type         Navn     I/U    Forklaring
    -----------------------------------------------------------------------
    LC_POL_OMKR *pPO      I/U    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

    =======================================================================
    Bruk:
    LC_OY_ADM  OyKjede;
    LC_POL_InitOy(OyKjede);
    parametere:
    Type       Navn     I/U    Forklaring
    -----------------------------------------------------------------------
    LC_OY_ADM *pOA      I/U    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

    =======================================================================
    Bruk:
    LC_OY_ADM  OyKjede;
    LC_POL_FrigiAlleOyer(OyKjede);
    parametere:
    Type       Navn     I/U    Forklaring
    -----------------------------------------------------------------------
    LC_OY_ADM *pOA      I/U    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

    =======================================================================
    Bruk:
    LC_OY_ADM  OyKjede;
    LC_POL_FjernOy(OyKjede,OyElement);
    parametere:
    Type           Navn     I/U    Forklaring
    -----------------------------------------------------------------------
    LC_OY_ADM     *pOA      I/U    Peikar til øyadministrasjonsblokka
    LC_OY_ELEMENT *pOE      I/U    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

    =======================================================================
    Bruk:
    LC_OY_ADM  OyKjede;
    LC_POL_LeggTilOy(&OyKjede,pPO);
    Parametere:
    Type         Navn     I/U    Forklaring
    -----------------------------------------------------------------------
    LC_OY_ADM   *pOyKjede I/U    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

    =======================================================================
    Bruk:
    LC_POL_TestBrukt(pPolygon,&Bgr);
    parametere:
    Type        Navn     I/U    Forklaring
    -----------------------------------------------------------------------
    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

    =======================================================================
    Formål:
    Legger inn referanser i GINFO, ut fra beskrivelse i struktur.
    Parametere:
    Type        Navn     I/U    Forklaring
    -----------------------------------------------------------------------
    LC_POLYGON *pPolygon  I     Polygonbeskrivelse
    short       ngi       r     Antall linjer GINFO
    Bruk:
    ngi = LC_POL_PutRef(pPolygon);
    =======================================================================

    SK_EntPnt_FYBA short LC_POL_PutRef(LC_POLYGON *pPolygon)

## LC_POL_GetRef

Hent referanser for flate fra GINFO

    ==========================================================================
    Formål:
    Henter referanser fra GINFO til struktur.
    Parametre:
    Type         Navn      I/U  Forklaring
    -----------------------------------------------------------------------
    LC_POLYGON  *pPolygon   I   Peker til adm. for polygonbeskrivelse
    Bruk:
       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

    ==========================================================================
    Formål:
    Henter referanser fra GINFO til struktur.
    Rutinen initierer strukturen pPO, men frigir ikke eventuellt gammelt innhold.
    Parametre:
    Type          Navn    I/U  Forklaring
    -------------------------------------------------------------------------
    LC_POL_OMKR  *pPO;     IU  Peker til kjede som beskriver omkretsen.
    Bruk:
       LC_POL_GetRefOmkrets(&OyPO);
    ==========================================================================

    SK_EntPnt_FYBA void LC_POL_GetRefOmkrets(LC_POL_OMKR *pPO)

## LC_POL_PTst

Polygontest

    ==========================================================================
    Formål:
    Sjekker om gitt punkt ligger innenfor polygon angitt av pPolygon.
    Forutsetter at pPolygon danner et lukket polygon.
    Skifter ikke aktuell gruppe.
    Parametre:
    Type    Navn    I/U   Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
    .
    ==========================================================================

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

## LC_POL_PTstOmkrets

Sjekk om punkt ligger inni polygonomkrets

    ==========================================================================
    Formål:
    Sjekker om gitt punkt ligger innenfor yttergrensen for polygon angitt
    av struktur.
    Forutsetter at tabellen danner et lukket polygon
    Skifter ikke aktuell gruppe.
    Parametre:
    Type          Navn  I/U   Forklaring
    --------------------------------------------------------------------------
    LC_POL_OMKR  *pPO    I/U  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
    Bruk:
    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

    =======================================================================
    Bruk:
    LC_POL_Box(pPA,&nva,&nvn,&oha,&ohn);
    parametere:
    Type          Navn     I/U    Forklaring
    -----------------------------------------------------------------------
    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 Diverse funksjoner

## 22.1 Beregninger

## LC_BerAreal

Beregn areal av aktuell FLATE

    ==========================================================================
    Formål:
    Beregner arealet av aktuell gruppe hvis denne er flate.
    Referansene brukes for arealberegningen.
    Tar hensyn til fradrag for øyer.
    Parametre:
    Type     Navn     I/U   Forklaring
    --------------------------------------------------------------------------
    double   areal     u    Beregnet areal
    Bruk:
    areal = LC_BerAreal();
       =============================================================================

    SK_EntPnt_FYBA double LC_BerAreal(void)

## LC_BerLengde

Beregn horisontal lengde av aktuell gruppe

    ==========================================================================
    Formål:
    Beregn horisontal lengde av aktuell gruppe.
    Tar ikke hensyn til høyde/dybde.
    Referansene brukes IKKE i beregningen.
    Parametre:
    Type     Navn     I/U   Forklaring
    --------------------------------------------------------------------------
    double   lengde    u    Beregnet lengde
    Bruk:
    areal = LC_BerLengde();
    =============================================================================

    SK_EntPnt_FYBA double LC_BerLengde(void)

## LC_BerLengde3D

Beregn skrå lengde av aktuell gruppe

    ==========================================================================
    Formål:
    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.
    Parametre:
    Type     Navn     I/U   Forklaring
    --------------------------------------------------------------------------
    double   lengde    u    Beregnet lengde
    bool     beregnet  r    Status som viser om lengde er beregnet
    Bruk:
    beregnet = LC_BerLengde3D(&skraa_lengde);
    =============================================================================

    SK_EntPnt_FYBA bool LC_BerLengde3D(double *skraa_lengde)

## LC_BerAvgrensLengde

Beregn lengden av avgrensning av FLATE

    ==========================================================================
    Formål:
    Beregn lengden av avgrensningen av aktuell gruppe hvis denne er flate.
    Både indre og ytre avgrensning beregnes.
    Parametre:
    Type     Navn     I/U   Forklaring
    --------------------------------------------------------------------------
    double   lengde     u    Beregnet areal
    Bruk:
    lengde = LC_BerAvgrensLengde();
    =============================================================================

    SK_EntPnt_FYBA double LC_BerAvgrensLengde(void)

## LC_BerYtreAvgrensLengde

Beregn lengden av ytre avgrensning av FLATE

    ==========================================================================
    Formål:
    Beregn lengden av ytre avgrensningen av aktuell gruppe hvis denne er flate.
    Bare ytre avgrensning beregnes.
    Parametre:
    Type     Navn     I/U   Forklaring
    --------------------------------------------------------------------------
    double   lengde     u    Beregnet lengde
    Bruk:
    lengde = LC_BerYtreAvgrensLengde();
    =============================================================================

    SK_EntPnt_FYBA double LC_BerYtreAvgrensLengde(void)

## LC_BerIndreAvgrensLengde

Beregn lengden av indre avgrensning av FLATE

    ==========================================================================
    Formål:
    Beregn lengden av indre avgrensningen av aktuell gruppe hvis denne er flate.
    Bare indre avgrensning beregnes.
    Parametre:
    Type     Navn     I/U   Forklaring
    --------------------------------------------------------------------------
    double   lengde     u    Beregnet lengde
    Bruk:
    lengde = LC_BerIndreAvgrensLengde();
    =============================================================================

    SK_EntPnt_FYBA double LC_BerIndreAvgrensLengde(void)

## LC_RoundKoord

Endre koordinatene i buffer til riktig enhet

    ===========================================================================
    Formål:
    Endrer koordinatene i aktuell gruppe i buffer til valgt enhet.
    (Rutinen blir utført fra LC_WxGr.)
    Parametre: ingen
    Bruk:
    LC_RoundKoord();
    ==============================================================================

    SK_EntPnt_FYBA void LC_RoundKoord(void)

## 22.2 Strukturendring

## LC_SnuGr

Snu gruppe

    ===========================================================================
    Formål:
    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.)
    Parametre:
    Type    Navn    I/U   Forklaring
    -----------------------------------------------------------------------------
    short   sStatus  r    Status: UT_TRUE  = OK
                                  UT_FALSE = feil, ikke splittet
    Bruk:
       status = LC_SnuGr();
       =============================================================================

    SK_EntPnt_FYBA short LC_SnuGr(void)

## LC_SammenfoyGr

Sammenføy grupper

    ==========================================================================
    Formål:
    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.)
    Parametre:
    Type    Navn       I/U   Forklaring
    -----------------------------------------------------------------------------
    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.
    Bruk:
    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

Splitt gruppe

    ==========================================================================
    Formål:
    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.)
    Parametre:
    Type     Navn   I/U   Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
    sStatus = LC_SplittGr(sP1,sP2,&Bgr2);
       ==========================================================================

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

## LC_ErstattReferanse

Erstatt referanse

    ==========================================================================
    Formål:
    Erstatt referanse i alle grupper i gitt fil.
    Parametre:
    Type       Navn          I/U  Forklaring
    --------------------------------------------------------------------------
    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
    Bruk:
    sStatus = LC_ErstattReferanse(pFil, lGmlSnr, lNyttSnr, bSammeRetning);
    ==========================================================================

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

## 22.3 Hele basen

## LC_InqAntFiler

Finn antall filer i basen

    ==========================================================================
    Formål:
    Finn antall filer i aktuell base.
    Parametre:
    Type           Navn    I/U  Forklaring
    -------------------------------------------------------------------
    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.
    Bruk:
       Finner antall framgrunnsfiler i basen
       sAntall = LC_InqAntFiler(LC_FRAMGR);
       ==========================================================================

    SK_EntPnt_FYBA short LC_InqAntFiler(unsigned short usLag)

## 22.4 Prioritet

## LC_ClrPrioritet

Slett prioritets-bit

    ==========================================================================
    Formål:
    Slett prioritets-bit.
    Parametre:
    Navn     Type    I/U   Forklaring
    --------------------------------------------------------------------------
    LC_BGR *  pGr      i    Gruppenummer
    kolonne  short    i    Kolonne som skal merkes.
                           (Lovlig 0 til LC_MAX_ANT_PRIOR-1)
    Bruk:
    LC_ClrPrioritet(pGr,kolonne);
       ==========================================================================

    SK_EntPnt_FYBA void LC_ClrPrioritet(LC_BGR * pGr,short kolonne)

## LC_SetPrioritet

Sett prioritets-bit

    ==========================================================================
    Formål:
    Sett prioritets-bit.
    Parametre:
    Navn     Type    I/U   Forklaring
    --------------------------------------------------------------------------
    LC_BGR *  pGr      i    Gruppenummer
    kolonne  short    i    Kolonne som skal merkes.
                           (Lovlig 0 til LC_MAX_ANT_PRIOR-1)
    Bruk:
    LC_SetPrioritet(pGr,kolonne);
       ==========================================================================

    SK_EntPnt_FYBA void LC_SetPrioritet(LC_BGR * pGr,short kolonne)

## LC_InqPrioritet

Hent prioritets-bit

    ==========================================================================
    Formål:
    Hent prioritets-bit.
    Parametre:
    Navn     Type    I/U   Forklaring
    --------------------------------------------------------------------------
    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)
    Bruk:
    sAvPaa = LC_InqPrioritet(pGr,kolonne);
       ==========================================================================

    SK_EntPnt_FYBA short LC_InqPrioritet(LC_BGR * pGr,short kolonne)

## LC_ErasePrioritet

Blank ut prioritets-bit

    ==========================================================================
    Formål:
    Blank ut prioritets-bit.
    Parametre:
    Navn     Type    I/U   Forklaring
    --------------------------------------------------------------------------
    LC_BGR *  pGr      i    Gruppenummer
    Bruk:
    LC_ErasePrioritet(pGr);
       ==========================================================================

    SK_EntPnt_FYBA void LC_ErasePrioritet(LC_BGR * pGr)

## LC_EraseAllPrioritet

Blank ut ALLE prioritets-bit

    ==========================================================================
    Formål:
    Blank ut alle prioritets-bit på alle gruppene i denne filen.
    Parametre:
    Navn        Type    I/U   Forklaring
    --------------------------------------------------------------------------
    LC_FILADM  *pFil     i    Filpeker
    Bruk:
    LC_EraseAllPrioritet(pFil);
       ==========================================================================

    SK_EntPnt_FYBA void LC_EraseAllPrioritet(LC_FILADM *pFil)

## 22.5 Kvalitet

## LC_FormatterKvalitet

Formatter KVALITET

    ==========================================================================
    Formål:
    Formater parameterstrengen for KVALITET.
    Resultatet legges i en intern streng, og må kopieres over til andre
    variabler før endring.
    Parametre:
    Type    Navn         I/U   Forklaring
    -------------------------------------------------------------------------
    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.
    Bruk:
     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 Tabellhandtering

## LC_InitTabel

Åpner tabellsystemet

    =============================================================================
    Formål:
    Initierer tabellsystemet og åpner filen.
    Parametre:
    Type     Navn      I/U   Forklaring
    -----------------------------------------------------------------------------
    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)
    Bruk:
     .
     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

Put tabell-linje

    =============================================================================
    Formål:
    Legg inn en linje fra tabellfilen.
    Parametre:
    Type      Navn   I/U   Forklaring
    -----------------------------------------------------------------------------
    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)
    Bruk:
    ist = LC_PutTabel(linje,(void *)&buffer);
       =============================================================================

    SK_EntPnt_FYBA short LC_PutTabel(long linje,void *buffer)

## LC_GetTabel

Get tabell-linje

    =============================================================================
    Formål:
    Henter en linje fra tabellfilen.
    Parametre:
    Type      Navn   I/U   Forklaring
    -----------------------------------------------------------------------------
    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)
    Bruk:
    ist = LC_GetTabel(linje,(void *)&buffer);
       =============================================================================

    SK_EntPnt_FYBA short LC_GetTabel(long linje,void *buffer)

## LC_CloseTabel

Stenge tabellsystemet

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

    Bruk:
    LC_CloseTabel();
       =============================================================================

    SK_EntPnt_FYBA void LC_CloseTabel(void)

## 22.7 Meldingshandtering

FYBA har en mekanisme som muliggjør at kallende program handterer meldinger til bruker. Dette er callback-rutiner som kalles fra FYBA for feilmeldings-handtering og visning av framdrift under indeksoppbygging. Et eksempel på implementasjon ligger i Fyba_Callback.cpp. For å få et godt brukergrensesnitt bør disse rutinene endres slik at de bruker det meldings og feilhandteringssystemet som brukes av hovedprogrammet. Hvis FYBA brukes som en DLL må meldingshandteringsrutinene registreres med følgende rutiner:

## LC_SetErrorHandler

Registrer feilmeldingsrutine

    =============================================================================
    Formål:
    Registrer feilmeldingsrutine.
    Feilmeldingsrutinen blir kallt hvis det oppstår feil.
    Parametre:
    Type   Navn                       I/U  Forklaring
    -----------------------------------------------------------------------------
    void  (*f) (short ,char *,char *)  i   Peker til feilmeldingsrutine
    Bruk:
    LC_SetErrorHandler(ErrorHandler);
    Feilmeldingsrutinen skal ha følgende definisjon:
    void ErrorHandler(short feil_nr,const char *logtx,const char *vartx);
    Med følgende parametre:
    Type    Navn     I/U  Forklaring
    -----------------------------------------------------------------------------
    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

Registrer initieringsrutine

    =============================================================================
    Formål:
    Registrer initieringsrutine.
    Initieringsrutinen blir kalt for å starte visning av framdrift.
    Parametre:
    Type   Navn       I/U  Forklaring
    -----------------------------------------------------------------------------
    void  (*f)(char*)  i   Peker til initieringsrutine
    Bruk:
    LC_SetStartMessageHandler(StartMessageHandler);
    Initieringsrutinen skal ha følgende definisjon:
    void StartMessageHandler(char *pszFilnavn);
    Med følgende parametre:
    Type     Navn        I/U  Forklaring
    -----------------------------------------------------------------------------
    char    *pszFilnavn   i   Ekstra meldingstekst  (filnavn)
    =============================================================================

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

## LC_SetShowMessageHandler

Registrer visningsrutine

    =============================================================================
    Formål:
    Registrer visningsrutine.
    Visningsrutine blir kalt for å vise framdrift ved indeks-oppbygging.
    Parametre:
    Type   Navn       I/U  Forklaring
    -----------------------------------------------------------------------------
    void  (*f)(double)  i   Peker til visningsrutine
    Bruk:
    LC_SetShowMessageHandler(ShowMessageHandler);
    Visningsrutinen skal ha følgende definisjon:
    void ShowMessageHandler(double prosent);
    Med følgende parametre:
    Type     Navn        I/U  Forklaring
    -----------------------------------------------------------------------------
    double   prosent      i   Prosent ferdig (0.0 - 100.0)
    =============================================================================

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

## LC_SetEndMessageHandler

Registrer avslutningsrutine

    =============================================================================
    Formål:
    Registrer avslutningsrutine.
    Avslutningsrutinen blir kalt for å avslutte visning av framdrift ved indeksoppbygging.
    Parametre:
    Type   Navn       I/U  Forklaring
    -----------------------------------------------------------------------------
    void  (*f)(void)  i   Peker til avslutningsrutine
    Bruk:
    LC_SetEndMessageHandler(EndMessageHandler);
    Avslutningsrutinen skal ha følgende definisjon:
    void EndMessageHandler(void);
    =============================================================================

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

## LC_SetCancelHandler

Registrer avbruddsstyring

    =============================================================================
    Formål:
    Registrer avbruddsstyring.
    Rutine for avbruddsstyring blir kalt for å sjekke om bruker ønsker
    å avbryte beregningen.
    Parametre:
    Type   Navn       I/U  Forklaring
    -----------------------------------------------------------------------------
    short  (*f)(void)  i   Peker til rutine for avbruddsstyring.
    Bruk:
    LC_SetCancelHandler(CancelHandler);
    Rutine for avbruddsstyring skal ha følgende definisjon:
    short CancelHandler(void);
    Med følgende parametre:
    Type   Navn      I/U  Forklaring
    -----------------------------------------------------------------------------
    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

Vise melding

    =============================================================================
    Formål:
    Starter vising av melding om baseoppbygging.
    Parametre:
    Type     Navn        I/U  Forklaring
    -----------------------------------------------------------------------------
    char    *pszFilnavn   i   Ekstra meldingstekst  (filnavn)
    Bruk:
    LC_StartMessage(pszFilnavn);
    =============================================================================

    void LC_StartMessage(const char *pszFilnavn)

## LC_ShowMessage

Vise melding

    =============================================================================
    Formål:
    Vising av melding om baseoppbygging.
    Parametre:
    Type     Navn        I/U  Forklaring
    -----------------------------------------------------------------------------
    double   prosent      i   Prosent ferdig (0.0 - 100.0)
    Bruk:
    LC_ShowMessage(prosent);
    =============================================================================

    void LC_ShowMessage(double prosent)

## LC_EndMessage

Avslutt melding

    =============================================================================
    Formål:
    Avslutt melding om baseoppbygging.
    Parametre:
    Type     Navn        I/U  Forklaring
    -----------------------------------------------------------------------------
    Bruk:
    LC_EndMessage();
    =============================================================================

    void LC_EndMessage(void)

## LC_Cancel

Sjekk om Esc er trykket

    ==========================================================================
    Formål:
    Sjekk om det er trykkt på Esc (Avbryte indeksoppbygging).
    Parametre:
    Type   Navn      I/U   Forklaring
    --------------------------------------------------------------------------
    short  sAvbrutt   r    UT_TRUE  = Cancel
                           UT_FALSE = ikke avbrudd
    Bruk:
    sAvbrutt = LC_Cancel();
    ==========================================================================

    short LC_Cancel(void)

## LC_Error

Feilmeldingsrutine

    =============================================================================
    Formål:
    Standard feilmeldingsrutine.
    Parametre:
    Type     Navn        I/U  Forklaring
    -----------------------------------------------------------------------------
    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.
    Bruk:
    LC_Error(35,"(Kallt i LC_Xxxx)","");
    =============================================================================

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

## 22.8 Hjelperutine for meldingshandtering

## LC_StrError

Feilmeldingstekst

    ==========================================================================
    Formål:
    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).
    Parametre:
    Type     Navn        I/U  Forklaring
    --------------------------------------------------------------------------
    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.
    Bruk:
    strategi = LC_StrError(ckap,feil_nr,&feilmeldingspeker);
       ==========================================================================

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

## 22.9 Feilsøking

## LC_DumpTab

Dump interne tabeller til stderr

    ==========================================================================
    Formål:
    Dump interne tabeller til stderr
    Parametre:
    Type     Navn     I/U   Forklaring
    --------------------------------------------------------------------------
    Bruk:
    LC_DumpTab();
       =============================================================================

    SK_EntPnt_FYBA void LC_DumpTab(void)