// Generates smart error-messages on failure
// To be used by the parser
void CFunctionCollection::VerifyExistence(CString name) {
  if (Exists(name)) return;
  // Error: function does not exist
  CString message;
  message.Format("Function used but never defined> %s\n\n", name);
  CString similar_name = GetSimilarNameWithDifferentCases(name);
  name = name.MakeLower();
  if (similar_name != "") {
     message += "Did you mean ";
     message += similar_name;
     message += " instead?";
  } else if (name.Left(5) == "hand$" || name.Left(6) == "board$" || name.Left(4) == "user") {
    message += "hand$ and board$ expressions and user-variables\n";
    message += "are built-in and must be lower-cases.";
  } else {
    // Else: general error-message
  }
  OH_MessageBox_Interactive(message, "Error", 0);
}
// Generates smart error-messages on failure
// To be used by the parser
void CFunctionCollection::VerifyExistence(CString name) {
  if (Exists(name)) return;
  // Error: function does not exist
  CString similar_name = GetSimilarNameWithDifferentCases(name);
  if (similar_name != "") {
    CString message;
    message.Format("%s%s%s%s%s",
      "Function used but never defined: ",
      name, 
      "\nDid you mean ",
      similar_name,
      " instead?");
    OH_MessageBox_Interactive(message, "Error", 0);
    return;
  } 
  // Else: general error-message
  CString message;
  message.Format("Function used but never defined\n%s", name);
  OH_MessageBox_Interactive(message, "Error", 0);
}
// Generates smart error-messages on failure
// To be used by the parser
void CFunctionCollection::VerifyExistence(CString name) {
  // The OpenPPL-symbol "Random" is no longer implemented in the library
  // but as a built-in symbol to prevent symbol-caching.
  // Therefore we don't want to check if it is "missing" in the library.
  // http://www.maxinmontreal.com/forums/viewtopic.php?f=111&t=19611
  if (name == "Random") return;
  if (Exists(name)) return;
  // Error: function does not exist
  CString message;
  message.Format("Function used but never defined: %s\n\n", name);
  CString similar_name = GetSimilarNameWithDifferentCases(name);
  name = name.MakeLower();
  if (similar_name != "") {
     message += "Did you mean ";
     message += similar_name;
     message += " instead?";
  } else if (name.Left(5) == "hand$" || name.Left(6) == "board$" || name.Left(4) == "user") {
    message += "hand$ and board$ expressions and user-variables\n";
    message += "are built-in and must be lower-cases.";
  } else {
    // Else: general error-message
  }
  OH_MessageBox_Interactive(message, "Error", 0);
}