# Fonction PCODE ID = 660004265
REGISTRE POINTEUR pt_MCCMNC
REGISTRE ENTIER date_art
REGISTRE POINTEUR pt_Table_Externe
REGISTRE POINTEUR pt_param_cle

REGISTRE  ENTIER       nb_entree
REGISTRE  ENTIER       indice
REGISTRE  ENTIER       erreur
REGISTRE  ENTIER       res
REGISTRE  ENTIER       pos_sep
REGISTRE  ENTIER       caract
REGISTRE  POINTEUR     pt_cle
REGISTRE  POINTEUR     pt_valeur
REGISTRE  POINTEUR     pt_clevaleur

pt_MCCMNC = depilerPOINTEUR()
date_art = depilerENTIER()
pt_Table_Externe = depilerPOINTEUR()
pt_param_cle = depilerPOINTEUR()

pt_cle="pt_cle0123456789012345678901234567890123456789-0123456789012345678901234567890123456789"
pt_valeur="pt_valeur01234567890123456789"
pt_clevaleur="pt_clevaleur0123456789012345678901234567890123456789-0123456789012345678901234567890123456789;01234567890123456789"
indice=0

#-- recuperer le nombre d entree dans la table exterbe pt_Table_Externe

nb_entree=i_get_tab_nb_entries(pt_Table_Externe,date_art)

# Pour chaque entree

SI (nb_entree==0)
ALORS
  i_strcpy(pt_MCCMNC,g_inull)
  RETOUR 0
FINSI

indice=0

POINT BOUCLE_NB_ENTRY

erreur=i_get_tab_one_entry (pt_Table_Externe,date_art,indice,pt_clevaleur)

SI (!i_strcmp(pt_clevaleur,g_inull))
ALORS
#   cle non trouve EOF table externe

  i_strcpy(pt_MCCMNC,g_inull)
  RETOUR 0
FINSI

# Appel a la fonction i_recuperValeur pour extraire la cle et la valeur

erreur=i_recupererValeur(pt_clevaleur,pt_cle,100,';')

SI (erreur!=0)
ALORS
  trace("SMS-C Erreur fonction i_recupererValeur")
  i_strcpy(pt_MCCMNC,g_inull)
  RETOUR 0
FINSI

erreur=i_recupererValeur(pt_clevaleur,pt_valeur,21,';')

SI (erreur!=0)
ALORS
  trace("SMS-C Erreur fonction i_recupererValeur")
  i_strcpy(pt_MCCMNC,g_inull)
  RETOUR 0
FINSI

#-- la cle pt_cle peut etre un intervalle ou une expression reguliere
# pour distinguer l intervalle de la valeur on va tester si le caracter '-' existe dans la chaine
pos_sep=i_strlen(pt_cle)
pos_sep=pos_sep/2
caract=i_strtab(pt_cle,pos_sep)
SI (caract != '-')
ALORS
# Cas ou la cle est une expression reguliere

  SI ( i_adequation_chaine_expreg(pt_param_cle, pt_cle)==0 )
  ALORS
    trace("SMS-C cle trouvee dans la table externe, strcmp")
    i_strcpy(pt_MCCMNC,pt_valeur)
    RETOUR 1
  FINSI
SINON
# Cas ou la cle est un intervall -> i_tester_Intervalle

  res=i_tester_intervalle(pt_cle,pt_param_cle)
  SI (res==1)
  ALORS
    trace("SMS-C cle trouvee dans la table, i_teste_intervalle")
    i_strcpy(pt_MCCMNC,pt_valeur)
    RETOUR 1
  FINSI
FINSI
indice=indice+1
SI (indice<nb_entree)
ALORS
  SAUT BOUCLE_NB_ENTRY
SINON
  trace("SMS-C cle non trouvee dans la table externe")
  i_strcpy(pt_MCCMNC,g_inull)
  RETOUR 0
FINSI

