Invalid library found???

EAL727Capt

Well-known member
In attempting to upload a sketch to Teensy 4.1, I received the following 'error' message during the upload:

Invalid library found in C:\Program Files (x86)\Arduino\libraries\TeensyControls: no headers files (.h) found in C:\Program Files (x86)\Arduino\libraries\TeensyControls

I'm using WIRE.H and CENTIPEDE.H in my sketch.

Judging by this error, I'm guessing that there is some type of '.h' file missing in the Teensy Controls library...yet I've downloaded the 'TeensyControls X-Plane Plugin 1.0' from the PJRC website.

What am I missing here?

Thanks so very much for your help.

Jay
 
With all due respect, I'm seeing other posts in this forum where members have not posted their codes/sketches and honestly, I do not understand what seeing an entire sketch here will do.

But, since you insist....
Code:
//#include <i2c_t3.h>
#include <Wire.h>
#include <Centipede.h>

Centipede CS;
//Transponder Inputs
const int digit1A = 55;
const int digit1B = 54;
const int digit1C = 53;
const int digit2A = 52;
const int digit2B = 51;
const int digit2C = 50;
const int digit3A = 49;
const int digit3B = 48;
const int digit3C = 56;
const int digit4A = 57;
const int digit4B = 58;
const int digit4C = 59;
const int ident = 60;
const int xpdrON = 61;

//NAV1 inputs all CS inputs
const int tensA = 2;
const int unitsA = 12;
const int unitsB = 3;
const int unitsC = 11;
const int unitsD = 4;
const int unitsE = 10;
const int pointTensA = 5;
const int pointTensB = 9;
const int pointTensC = 6;
const int pointTensD = 8;
const int pointTensE = 7;
const int pointHundredsA = 24; //Teensy Input

//NAV2 inputs all Teensy inputs
const int tens2A = 7;
const int units2A = 8;
const int units2B = 9;
const int units2C = 10;
const int units2D = 11;
const int units2E = 12;
const int pointTens2A = 1;
const int pointTens2B = 2;
const int pointTens2C = 3;
const int pointTens2D = 4;
const int pointTens2E = 5;
const int pointHundreds2A = 6;
//COM 1 inputs CS inputs
const int CtensA = 47;
const int CtensB = 32;
const int CtensC = 46;
const int CunitsA = 45;
const int CunitsB = 34;
const int CunitsC = 44;
const int CunitsD = 35;
const int CunitsE = 43;
const int CpointTensA = 36;
const int CpointTensB = 42;
const int CpointTensC = 37;
const int CpointTensD = 41;
const int CpointTensE = 38;
const int CpointHundredsA = 40;
const int CpointHundredsB = 39;
const int CpointHundredsC = 31;
const int CpointHundredsD = 16;
const int CpointHundredsE = 30;
//COM 2 inputs CS inputs
const int C2tensA = 17;
const int C2tensB = 29;
const int C2tensC = 18;
const int C2unitsA = 28;
const int C2unitsB = 19;
const int C2unitsC = 27;
const int C2unitsD = 20;
const int C2unitsE = 26;
const int C2pointTensA = 21;
const int C2pointTensB = 25;
const int C2pointTensC = 22;
const int C2pointTensD = 24;
const int C2pointTensE = 23;
const int C2pointHundredsA = 15;
const int C2pointHundredsB = 0;
const int C2pointHundredsC = 14;
const int C2pointHundredsD = 1;
const int C2pointHundredsE = 13;

FlightSimInteger NavFrequencyHz;
FlightSimInteger Nav2FrequencyHz;
FlightSimInteger ComFrequencyHz;
FlightSimInteger Com2FrequencyHz;
FlightSimInteger xpdrCode;
FlightSimInteger xpdrMode;
FlightSimInteger xpdrIdent;

//Build NAV2 Frequency
int get2Frequency()
{
  int freq = 10000;

  //Deal with tens
  if (!digitalRead(tens2A))
    freq += 1000;

  //Deal with units.
  //First, get our switch states and store them.
  bool ua = !digitalRead(units2A);
  bool ub = !digitalRead(units2B);
  bool uc = !digitalRead(units2C);
  bool ud = !digitalRead(units2D);
  bool ue = !digitalRead(units2E);

  //Lets check that exactly two switches are on.
  //if ((ua + ub + uc + ud + ue) != 2)
  //return -1;

  if (ua)
  {
    if (ub)
      freq += 100;
    if (uc)
      freq += 200;
    if (ud)
      freq += 800;
    if (ue)
      freq += 900;
  }

  if (ub)
  {
    if (uc)
      freq += 300;
    if (ud)
      freq += 400;
    if (ue)
      freq += 000;      //This doesn't do anything, but is here for completeness.
  }

  if (uc)
  {
    if (ud)
      freq += 500;
    if (ue)
      freq += 600;
  }

  if (ud)
  {
    if (ue)
      freq += 700;
  }

  //Deal with point units in exactly the same way.
  bool pua = !digitalRead(pointTens2A);
  bool pub = !digitalRead(pointTens2B);
  bool puc = !digitalRead(pointTens2C);
  bool pud = !digitalRead(pointTens2D);
  bool pue = !digitalRead(pointTens2E);


  if (pua)
  {
    if (pub)
      freq += 10;
    if (puc)
      freq += 20;
    if (pud)
      freq += 80;
    if (pue)
      freq += 90;
  }

  if (pub)
  {
    if (puc)
      freq += 30;
    if (pud)
      freq += 40;
    if (pue)
      freq += 00;      //This doesn't do anything, but is here for completeness.
  }

  if (puc)
  {
    if (pud)
      freq += 50;
    if (pue)
      freq += 60;
  }

  if (pud)
  {
    if (pue)
      freq += 70;
  }
  //Last of all, your point hundreds.
  if (!digitalRead(pointHundreds2A))
    freq += 5;


  return freq;
}
// Get NAV1 Frequency
int getFrequency()
{
  int freq = 10000;

  //Deal with tens
  if (!CS.digitalRead(tensA))
    freq += 1000;

  //Deal with units.
  //First, get our switch states and store them.
  bool ua = !CS.digitalRead(unitsA);
  bool ub = !CS.digitalRead(unitsB);
  bool uc = !CS.digitalRead(unitsC);
  bool ud = !CS.digitalRead(unitsD);
  bool ue = !CS.digitalRead(unitsE);

  if (ua)
  {
    if (ub)
      freq += 100;
    if (uc)
      freq += 200;
    if (ud)
      freq += 800;
    if (ue)
      freq += 900;
  }

  if (ub)
  {
    if (uc)
      freq += 300;
    if (ud)
      freq += 400;
    if (ue)
      freq += 000;      //This doesn't do anything, but is here for completeness.
  }

  if (uc)
  {
    if (ud)
      freq += 500;
    if (ue)
      freq += 600;
  }

  if (ud)
  {
    if (ue)
      freq += 700;
  }

  //Deal with point units in exactly the same way.
  bool pua = !CS.digitalRead(pointTensA);
  bool pub = !CS.digitalRead(pointTensB);
  bool puc = !CS.digitalRead(pointTensC);
  bool pud = !CS.digitalRead(pointTensD);
  bool pue = !CS.digitalRead(pointTensE);

  if (pua)
  {
    if (pub)
      freq += 10;
    if (puc)
      freq += 20;
    if (pud)
      freq += 80;
    if (pue)
      freq += 90;
  }

  if (pub)
  {
    if (puc)
      freq += 30;
    if (pud)
      freq += 40;
    if (pue)
      freq += 00;      //This doesn't do anything, but is here for completeness.
  }

  if (puc)
  {
    if (pud)
      freq += 50;
    if (pue)
      freq += 60;
  }

  if (pud)
  {
    if (pue)
      freq += 70;
  }


  //Last of all, your point hundreds.
  if (!digitalRead(pointHundredsA))
    freq += 5;


  return freq;
}

// Build Com 1 Frequency
int getCFrequency()
{
  int cfreq = 10000;

  // Get switch states and store for ctens
  bool cta = !CS.digitalRead(CtensA);
  bool ctb = !CS.digitalRead(CtensB);
  bool ctc = !CS.digitalRead(CtensC);

  //Deal with ctens
  if (cta)
  {
    if (ctb)
      cfreq += 1000;
    if (ctc)
      cfreq += 2000;
  }
  if (ctb)
  {
    if (ctc)
      cfreq += 3000;
  }

  //Deal with units.
  //First, get our switch states and store them.
  bool cua = !CS.digitalRead(CunitsA);
  bool cub = !CS.digitalRead(CunitsB);
  bool cuc = !CS.digitalRead(CunitsC);
  bool cud = !CS.digitalRead(CunitsD);
  bool cue = !CS.digitalRead(CunitsE);

  //Lets check that exactly two switches are on.

  if (cua)
  {
    if (cub)
      cfreq += 100;
    if (cuc)
      cfreq += 200;
    if (cud)
      cfreq += 800;
    if (cue)
      cfreq += 900;
  }

  if (cub)
  {
    if (cuc)
      cfreq += 300;
    if (cud)
      cfreq += 400;
    if (cue)
      cfreq += 000;      //This doesn't do anything, but is here for completeness.
  }

  if (cuc)
  {
    if (cud)
      cfreq += 500;
    if (cue)
      cfreq += 600;
  }

  if (cud)
  {
    if (cue)
      cfreq += 700;
  }

  //Deal with point units in exactly the same way.
  bool cpua = !CS.digitalRead(CpointTensA);
  bool cpub = !CS.digitalRead(CpointTensB);
  bool cpuc = !CS.digitalRead(CpointTensC);
  bool cpud = !CS.digitalRead(CpointTensD);
  bool cpue = !CS.digitalRead(CpointTensE);

  //Lets check that exactly two switches are on.

  if (cpua)
  {
    if (cpub)
      cfreq += 10;
    if (cpuc)
      cfreq += 20;
    if (cpud)
      cfreq += 80;
    if (cpue)
      cfreq += 90;
  }

  if (cpub)
  {
    if (cpuc)
      cfreq += 30;
    if (cpud)
      cfreq += 40;
    if (cpue)
      cfreq += 00;      //This doesn't do anything, but is here for completeness.
  }

  if (cpuc)
  {
    if (cpud)
      cfreq += 50;
    if (cpue)
      cfreq += 60;
  }

  if (cpud)
  {
    if (cpue)
      cfreq += 70;
  }


  //Last of all, your point hundreds.
  bool cpha = !CS.digitalRead(CpointHundredsA);
  bool cphb = !CS.digitalRead(CpointHundredsB);
  bool cphc = !CS.digitalRead(CpointHundredsC);
  bool cphd = !CS.digitalRead(CpointHundredsD);
  bool cphe = !CS.digitalRead(CpointHundredsE);

  //Lets check that exactly two switches are on.

  if (cphc)
  {
    if (cpha)
      cfreq += 2;
    if (cphd)
      cfreq += 5;
  }
  if (cphe)
  {
    if (cphb)
      cfreq += 0;
    if (cphd)
      cfreq += 7;
  }


  return cfreq;
}
//Build COM2 Frequency
int getC2Frequency()
{
  int cfreq = 10000;

  // Get switch states and store for ctens
  bool cta = !CS.digitalRead(C2tensA);
  bool ctb = !CS.digitalRead(C2tensB);
  bool ctc = !CS.digitalRead(C2tensC);

  //Deal with ctens
  if (cta)
  {
    if (ctb)
      cfreq += 1000;
    if (ctc)
      cfreq += 2000;
  }
  if (ctb)
  {
    if (ctc)
      cfreq += 3000;
  }

  //Deal with units.
  //First, get our switch states and store them.
  bool cua = !CS.digitalRead(C2unitsA);
  bool cub = !CS.digitalRead(C2unitsB);
  bool cuc = !CS.digitalRead(C2unitsC);
  bool cud = !CS.digitalRead(C2unitsD);
  bool cue = !CS.digitalRead(C2unitsE);

  //Lets check that exactly two switches are on.

  if (cua)
  {
    if (cub)
      cfreq += 100;
    if (cuc)
      cfreq += 200;
    if (cud)
      cfreq += 800;
    if (cue)
      cfreq += 900;
  }

  if (cub)
  {
    if (cuc)
      cfreq += 300;
    if (cud)
      cfreq += 400;
    if (cue)
      cfreq += 000;      //This doesn't do anything, but is here for completeness.
  }

  if (cuc)
  {
    if (cud)
      cfreq += 500;
    if (cue)
      cfreq += 600;
  }

  if (cud)
  {
    if (cue)
      cfreq += 700;
  }

  //Deal with point units in exactly the same way.
  bool cpua = !CS.digitalRead(C2pointTensA);
  bool cpub = !CS.digitalRead(C2pointTensB);
  bool cpuc = !CS.digitalRead(C2pointTensC);
  bool cpud = !CS.digitalRead(C2pointTensD);
  bool cpue = !CS.digitalRead(C2pointTensE);

  //Lets check that exactly two switches are on.

  if (cpua)
  {
    if (cpub)
      cfreq += 10;
    if (cpuc)
      cfreq += 20;
    if (cpud)
      cfreq += 80;
    if (cpue)
      cfreq += 90;
  }

  if (cpub)
  {
    if (cpuc)
      cfreq += 30;
    if (cpud)
      cfreq += 40;
    if (cpue)
      cfreq += 00;      //This doesn't do anything, but is here for completeness.
  }

  if (cpuc)
  {
    if (cpud)
      cfreq += 50;
    if (cpue)
      cfreq += 60;
  }

  if (cpud)
  {
    if (cpue)
      cfreq += 70;
  }


  //Last of all, your point hundreds.
  bool cpha = !CS.digitalRead(C2pointHundredsA);
  bool cphb = !CS.digitalRead(C2pointHundredsB);
  bool cphc = !CS.digitalRead(C2pointHundredsC);
  bool cphd = !CS.digitalRead(C2pointHundredsD);
  bool cphe = !CS.digitalRead(C2pointHundredsE);

  //Lets check that exactly two switches are on.

  if (cphc)
  {
    if (cpha)
      cfreq += 2;
    if (cphd)
      cfreq += 5;
  }
  if (cphe)
  {
    if (cphb)
      cfreq += 0;
    if (cphd)
      cfreq += 7;
  }

  return cfreq;
}

//Function to build the ATC code
int getAtcFreq()
{
  int freq = 0;
  int digit1 = 0;
  int digit2 = 0;
  int digit3 = 0;
  int digit4 = 0;

  bool a1  = !CS.digitalRead(digit1A);
  bool b1  = !CS.digitalRead(digit1B);
  bool c1  = !CS.digitalRead(digit1C);
  digit1 = ((a1 + b1 * 2 + c1 * 4) * 1000);

  bool a2  = !CS.digitalRead(digit2A);
  bool b2  = !CS.digitalRead(digit2B);
  bool c2  = !CS.digitalRead(digit2C);
  digit2 = ((a2 + b2 * 2 + c2 * 4) * 100);

  bool a3  = !CS.digitalRead(digit3A);
  bool b3  = !CS.digitalRead(digit3B);
  bool c3  = !CS.digitalRead(digit3C);
  digit3 = ((a3 + b3 * 2 + c3 * 4) * 10);

  bool a4  = !CS.digitalRead(digit4A);
  bool b4  = !CS.digitalRead(digit4B);
  bool c4  = !CS.digitalRead(digit4C);
  digit4 = (a4 + b4 * 2 + c4 * 4);

  freq = (digit1 + digit2 + digit3 + digit4);
  return freq;
}

long previousMillis = 0;
long interval = 1000;

void setup()
{
  Wire.begin();
  CS.initialize();
  //Serial.begin(38400);

  CS.portMode(0, 0b1111111111111111); // 0 = output, 1 = input
  CS.portPullup(0, 0b1111111111111111); // 0 = no pullup, 1 = pullup
  CS.portMode(1, 0b1111111111111111); // 0 = output, 1 = input
  CS.portPullup(1, 0b1111111111111111); // 0 = no pullup, 1 = pullup
  CS.portMode(2, 0b1111111111111111); // 0 = output, 1 = input
  CS.portPullup(2, 0b1111111111111111); // 0 = no pullup, 1 = pullup
  CS.portMode(3, 0b1111111111111111); // 0 = output, 1 = input
  CS.portPullup(3, 0b1111111111111111); // 0 = no pullup, 1 = pullup

  pinMode(tens2A, INPUT_PULLUP);
  pinMode(units2A, INPUT_PULLUP);
  pinMode(units2B, INPUT_PULLUP);
  pinMode(units2C, INPUT_PULLUP);
  pinMode(units2D, INPUT_PULLUP);
  pinMode(units2E, INPUT_PULLUP);
  pinMode(pointTens2A, INPUT_PULLUP);
  pinMode(pointTens2B, INPUT_PULLUP);
  pinMode(pointTens2C, INPUT_PULLUP);
  pinMode(pointTens2D, INPUT_PULLUP);
  pinMode(pointTens2E, INPUT_PULLUP);
  pinMode(pointHundredsA, INPUT_PULLUP);
  pinMode(pointHundreds2A, INPUT_PULLUP);

  NavFrequencyHz  = XPlaneRef("sim/cockpit2/radios/actuators/nav1_frequency_hz");
  ComFrequencyHz  = XPlaneRef("sim/cockpit2/radios/actuators/com1_frequency_hz");
  Nav2FrequencyHz = XPlaneRef("sim/cockpit2/radios/actuators/nav2_frequency_hz");
  Com2FrequencyHz = XPlaneRef("sim/cockpit2/radios/actuators/com2_frequency_hz");
  xpdrCode        = XPlaneRef("sim/cockpit2/radios/actuators/transponder_code");
  xpdrMode        = XPlaneRef("sim/cockpit2/radios/actuators/transponder_mode"); //(off=0,stdby=1,on=2,test=3)"
  xpdrIdent       = XPlaneRef("sim/cockpit/radios/transponder_id");
}
void loop()
{
  FlightSim.update();
  bool needsUpdate = false;
  // wait a bit before next read - only to slow down serial output
  //  get rid of the next two statements after debugging
  delay(500);
  //  Serial.print("reading...");
  //
  int newNavFrequencyHz = getFrequency();
  int newComFrequencyHz = getCFrequency();
  int newNav2FrequencyHz = get2Frequency();
  int newCom2FrequencyHz = getC2Frequency();
  int newAtcFreq = getAtcFreq();
  
  // get rid of the next statement after debugging
  //  Serial.println("done");

  if (newNavFrequencyHz != NavFrequencyHz) {
    //    Serial.print("New NAV1 freq: ");
    //   Serial.println(newNavFrequencyHz);
    NavFrequencyHz = newNavFrequencyHz;
    needsUpdate = true;
  }

  if (newComFrequencyHz != ComFrequencyHz) {
    //    Serial.print("New COM1 freq: ");
    //    Serial.println(newComFrequencyHz);
    ComFrequencyHz = newComFrequencyHz;
    needsUpdate = true;
  }
  if (newNav2FrequencyHz != Nav2FrequencyHz) {
    //    Serial.print("New NAV2 freq: ");
    //    Serial.println(newNav2FrequencyHz);
    Nav2FrequencyHz = newNav2FrequencyHz;
    needsUpdate = true;
  }


  if (newCom2FrequencyHz != Com2FrequencyHz) {
    //    Serial.print("New COM2 freq: ");
    //    Serial.println(newCom2FrequencyHz);
    Com2FrequencyHz = newCom2FrequencyHz;
    needsUpdate = true;
  }


  if (newAtcFreq != xpdrCode) {
    //    Serial.print("New XPDR code: ");
    //    Serial.println(newAtcFreq);
    xpdrCode = newAtcFreq;
    needsUpdate = true;
  }


  if (needsUpdate) {
    FlightSim.update();
  }

  if (CS.digitalRead(61) == HIGH) {
    xpdrMode = 1;
  } else {
    xpdrMode = 2;
  }
}

//void loop()
//{
//  FlightSim.update();
//
//  unsigned long currentMillis = millis();
//
//  if (currentMillis - previousMillis > interval) {
//
//    previousMillis = currentMillis;
//    NavFrequencyHz = getFrequency();
//    ComFrequencyHz = getCFrequency();
//    Nav2FrequencyHz = get2Frequency();
//    Com2FrequencyHz = getC2Frequency();
//    xpdrCode = getAtcFreq();
//  }
//Serial.println(NavFrequencyHz);
//Serial.println(ComFrequencyHz);
//Serial.println(Nav2FrequencyHz);
//Serial.println(Com2FrequencyHz);
//Serial.println( xpdrCode);



//  if (CS.digitalRead(61) == HIGH) {
//    xpdrMode = 1;
//  } else {
//    xpdrMode = 2;
//  }

//}
 
Last edited by a moderator:
Respect is always appreciated. When not enough info is given to see a path to the answer seeing the code can be essential.

Never used but this shows up: github.com/PaulStoffregen/X-Plane_Plugin

Presenting a path to an external library in question eliminates questions as well.

On GITHUB that does contain a header file. Was that whole library/repository included in the indicated folder "Arduino\libraries\TeensyControls"?
Code:
C:\Program Files (x86)\Arduino\libraries\TeensyControls: no headers files (.h) found in C:\Program Files (x86)\Arduino\libraries\TeensyControls

Looking at the code there is no: #include <TeensyControls.h>

And somehow that is what the IDE is missing.

If the IDE was not closed after copying it into place it may not find it until the IDE is closed and reopened.
 
I had found that github.com file a short while ago and loaded the .h and .c into the TeensyControl folder in my Arduino Library.

No drama needed.

Thank you very kindly for your reply.
 
TeensyControls is an X-Plane plugin. It runs on your Mac or PC, not on Teensy.

Then for the Teensy side, you click Tools > USB Type and select Flight Sim Controls. There is no additional library to download. It's built into Teensyduino's core library. You just turn it on using that menu.

This feature allows you to create special variables in your program which get linked to "dataref" variables inside X-Plane. As the variable changes due to the flight simulator, your code on Teensy can see the changes. Likewise, if Teensy writes to its copy of the variable, the dataref variable inside X-Plane gets changed. Detailed documentation can be found here:

https://www.pjrc.com/teensy/td_flightsim.html

Maybe you downloaded the code which was meant to be installed on X-Plane to run on your computer, but you extracted the ZIP file into C:\Program Files (x86)\Arduino\libraries based on a mistaken assumption it was code Arduino would need to run on Teensy? If so, I wonder how any of this could possibly work on X-Plane? You need to install that stuff properly on your PC, so the "Plugins" menu in X-Plane has "TeensyControls". If you don't see TeensyControls inside the Plugins menu, then none of this can work and the special variables on Teensy won't sync with the datarefs inside X-Plane.

Newer versions of Arduino will complain if you create library folders and put stuff into them with isn't Arduino libraries. I'm pretty sure that's what went wrong here, at least on the technical side....


Generally speaking, on this forum when you ask for help with some sort of error, we expect you to show us enough info. That's why we have the "Forum Rule" in red at the top of every page. Many people disregard this rule, and the net result is we can't help nearly as well, and often a lot of time is wasted with messages that could have just offered a good solution quickly, but instead end up involving a lot of guesswork or asking for more detail. Ideally we would all have infinite patience for people who ask for help without giving clear info about what they're doing and what code they're running. In practice, things don't always go that smoothly. @EAL727Capt - I hope you can understand the rationale for expecting details shown when asking for help solving a problem.
 
Mr. Stoffregen;

Thank you for taking time out of your busy day to reply. It is greatly appreciated.

I had everything properly and correctly downloaded and installed in both X-Plane and Teensyduino.

As a relative newbie to the world of electronics, interfacing, boards, etc., I have many, many questions and utilize forums such as this for guidance when reference material from a variety of sources does not answer my questions and I'm seeking clarification and further information to advance my education in this newly-found hobby. As such, I find many challenges in fully comprehending many references as they don't often seem to answer the concerns and questions I have. I find most forums to be MORE confusing as I do not speak in such technical terms and couldn't tell you the difference between Vin and Vcc and Vss and the importance of each. In time, I will know and understand and right now, this is not the case. But, this is my issue and no one else's; everyone learns at a different pace. I am a very well-educated man but not on the topic of anything electronics-related.

For what its worth, I'm discovering that many product support pages require much more additional research and reading, Teensy included, which then leads to more questions. In short, the material I'm finding isn't very clear to a newbie like myself. The bottom line here and I say without angst nor prejudice, I do not speak 'geek.' LOL

In this case, no, I do not understand the rationale for the need of posting an entire sketch, particularly one that isn't mine and without the original author's permission to post. Here, an answer was provided that did not require burning-up bandwidth and transitioning through more than one (1) bitter feeling by posting and later having corrected by someone other than myself edit my posting. If further details are required to provide an answer or a solution then certainly, additional information and clarification could be required. Here, it was something as simple as missing an .h and/or .c file in a folder. Nothing more, nothing less.

I find it highly offensive l that I've seen posts throughout this forum where the original poster has asked a question without posting any sketches/codes and has had answers provided and I'm advised I need to post a sketch/code in order to obtain help. Why have rules if they are not always followed by everyone.

Again, with all possible respect, its your forum and as need be, I will abide by and play by your rules.

Most respectfully,

Jay
 
Back
Top