int_InstDisc_01("##---#nsnsnsn","bhohofewho");

//**********
// Funktion:     int_InstDisc_01
// Revision:     1
// Beschreibung:
//   Erkennung bestimmter Praefixe und Generierung Namensbestandteil der Instance
//   Detektierte Praefixe fuer diese Funktion:
//      #
//          ##
//          #---#
//          ##---#
//          #-a-#
//          ##-a-#
// Parameter:
//   ifalias         String mit dem Alias des Interfaces
//   ifname          String mit dem Interfacenamen
// Rueckgabe:
//   Array mit folgenden Werten
//      return[0]        TRUE wenn Interface relevant ist
//      return[1]    Namensbestandteil fuer Instancenamen
// Aenderungslog:
//   13.04.2022  Ka  Ersterstellung
//**********
sub int_InstDisc_01(ifalias,ifname)
 { trace(0,"NT_lib_InstDisc::int_InstDisc_01 called with: ".ifalias." ".ifname);
   
   inst_disc = false;
   array res1;
//   array res2;
// Get inteface names and alias from Netxms database
// ifname = pif->name
// ifalias = ltrim(pif->alias);
// trace(0,"int_InstDisc_01");

   res1 = Parse_Interface_Alias_Prefix(ifalias);
   trace(0,"In int_InstDisc_01 Return Values from Parse_Interface_Alias_Prefix: ".ArrayToString(res1,";").";;".res1->size.";");
//   if (res1[2] == map("NT_Global_Script_Consts","NT_Iprefix_HasParams"))
//     { res2 = Parse_Param_01(res1[3]);
//       trace(0,"In int_InstDisc_01 Return Values from Parse_Param: ".ArrayToString(res2,";"));
//       if (((res2[1] == map("NT_Global_Script_Consts","NT_Iprefix_P2_Frequence_300")) || (res2[1] == map("NT_Global_Script_Consts","NT_Iprefix_P2_NoVal"))) && (res2[0] == map("NT_Global_Script_Consts","NT_Iprefix_P1_NoVal")) && ((res2[2] == map("NT_Global_Script_Consts","NT_Iprefix_P3_NoVal")) || (res2[2] == map("NT_Global_Script_Consts","NT_Iprefix_P3_Retention_367"))))
//         { inst_disc = true;
//         }
//     }
//    else
//     { if (((res1[0] == map("NT_Global_Script_Consts","NT_Iprefix_HasHash")) || (res1[1] == map("NT_Global_Script_Consts","NT_Iprefix_Has2Hash"))))
//         { inst_disc = true;
//         }
//     }
//   if (inst_disc == true)
//     { switch (GetConfigurationVariable("Objects.Interfaces.UseAliases",1000))
//        { case 0:
//            inam = ifname." (".ifalias.")";
//            break;
//          case 1:
//              inam = ifalias;
//            break;
//          case 2:
//            inam = ifname;
//            break;
//          case 3:
//            inam = ifname;
//            break;
//          default:
//            inam = ifname." (".ifalias.")";
//        }
//     }
//   return %(inst_disc, inam);
 }
//*****
// Ende der Funktion int_InstDisc_01
//*****

//**********
// Funktion:     Parse_Interface_Alias_Prefix
// Revision:     2
// Beschreibung:
//   Einfaches Parsen des Alias-Prefixes mit Rueckgabe der relevanten Werte
// Parameter:
//   ifalias         String mit dem Alias des Interfaces
// Rueckgabe:
//   Array mit folgenden Werten
//      return[0]        TRUE if alias starts with #
//      return[1]    TRUE if alias starts with ##
//      return[2]    TRUE if alias has params
//      return[3]    Parameter string between # and #
// Aenderungslog:
//   08.12.2020  Ka  Ersterstellung
//   14.04.2022  Ka  Einfuehrung Global Mapping-Table fuer Konstanten
//**********
sub Parse_Interface_Alias_Prefix(ialias)
{ trace(0,"NT_lib_Parsers::Parse_Interface_Alias_Prefix called with: ".ialias);
  
  array retval;
  
  ialen = length(ialias);
  hasparams = 0;
  hashash = 0;
  has2hash = 0;
  param = "";

  if (ialen != 0)
    { switch (ialen)
       { case 1:
           if (substr(ialias,1,1) == "#")
             { hashash = 1;
             }
           break;
         case 2:
           if (substr(ialias,1,1) == "#")
             { hashash = 1;
             }
           if ((hashash == 1) && (substr(ialias,2,1) == "#"))
             { has2hash = 1;
             }
            break;
         default:
           trace(0,"Parse_Interface_Alias_Prefix IN default:".ialen." ".ialias);
           if (substr(ialias,1,1) == "#")
             { hashash =  1;
             }
           if ((hashash == 1) && (substr(ialias,2,1) == "#"))
             { has2hash = 1;
             }
           if ((has2hash == 1) && (ialen >= 6) && (substr(ialias,6,1) == "#"))
             { hasparams = 1;
               param = upper(substr(ialias,3,3));
             }
           if ((hashash == 1) && (ialen >= 5) && (substr(ialias,5,1) == "#"))
             { hasparams = 1;
               param = upper(substr(ialias,2,3));
             }
       }
    }
//  trace(0,"NT_lib_Parsers::Parse_Interface_Alias_Prefix param:".param);
  retval = %(hashash,has2hash,hasparams,param);
  trace(0,"NT_lib_Parsers::Parse_Interface_Alias_Prefix returns Values (hashash;has2hash;hasparams;param;;arraylength):".ArrayToString(retval,";").";;".retval->size.";");
  return(retval);
}
//**********
// Ende der Funktion Parse_Interface_Alias_Prefix
//**********


//**********
// Funktion:     Parse_Param_01
// Revision:     1
// Beschreibung:
//   Einfaches Parsen des Parameterstrings mit Rueckgabe der Werte
// Parameter:
//   param         String mit dem Alias des Interfaces
// Rueckgabe:
//   Array mit folgenden Werten
//      return[0]        Value fuer Parameter 1
//      return[1]    Value fuer Parameter 2
//      return[2]    Value fuer Parameter 3
// Aenderungslog:
//   14.04.2022  Ka  Ersterstellung
//**********
sub Parse_Param_01(param01)
{ trace(0,"NT_lib_Parsers::Parse_Param_01 called with: ".param01);
  
  array rval;
  
  p1 = map("NT_Global_Script_Consts","NT_Iprefix_Px_NoVal");
  p2 = map("NT_Global_Script_Consts","NT_Iprefix_Px_NoVal");
  p3 = map("NT_Global_Script_Consts","NT_Iprefix_Px_NoVal");
  switch (substr(param01,1,1))
   { case "-":
       p1 = map("NT_Global_Script_Consts","NT_Iprefix_P1_NoVal");
       break;
     case "A":
       p1 = map("NT_Global_Script_Consts","NT_Iprefix_P1_Threshold_85");
       break;
     case "B":
       p1 = map("NT_Global_Script_Consts","NT_Iprefix_P1_Threshold_90");
       break;
     case "C":
       p1 = map("NT_Global_Script_Consts","NT_Iprefix_P1_Threshold_95");
       break;
     case "D":
       p1 = map("NT_Global_Script_Consts","NT_Iprefix_P1_Threshold_98");
       break;  
   } 
  switch (substr(param01,2,1))
   { case "-":
       p2 = map("NT_Global_Script_Consts","NT_Iprefix_P2_NoVal");
       break;
     case "A":
       p2 = map("NT_Global_Script_Consts","NT_Iprefix_P2_Frequence_300");
       break;
     case "B":
       p2 = map("NT_Global_Script_Consts","NT_Iprefix_P2_Frequence_60");
       break;
     case "C":
       p2 = map("NT_Global_Script_Consts","NT_Iprefix_P2_Frequence_30");
       break; 
   }    
  switch (substr(param01,3,1))
   { case "-":
       p3 = map("NT_Global_Script_Consts","NT_Iprefix_P3_NoVal");
       break;
     case "A":
       p3 = map("NT_Global_Script_Consts","NT_Iprefix_P3_Retention_30");
       break;
     case "B":
       p3 = map("NT_Global_Script_Consts","NT_Iprefix_P3_Retention_60");
       break;
     case "C":
       p3 = map("NT_Global_Script_Consts","NT_Iprefix_P3_Retention_90");
       break; 
     case "D":
       p3 = map("NT_Global_Script_Consts","NT_Iprefix_P3_Retention_180");
       break; 
     case "E":
       p3 = map("NT_Global_Script_Consts","NT_Iprefix_P3_Retention_367");
       break;
     case "F":
       p3 = map("NT_Global_Script_Consts","NT_Iprefix_P3_Retention_732");
       break;  
   }
  rval = %(p1,p2,p3);
  trace(0,"NT_lib_Parsers::Parse_Param_01 returns Values: ".ArrayToString(rval,";"));
  return(rval);       
}     
//**********
// Ende der Funktion Parse_Param_01
//**********

