void ArgumentProcessor::addSwitch(const std::string &arg, const std::string &desc) { std::string flag = createFlag(arg, true); mSwitches.push_back(flag); mSwitchDesc.push_back(desc); }
void ArgumentProcessor::addArgument(const std::string &arg, const std::string &desc, const bool optional, const std::vector<std::string> allowedValues) { std::string flag = createFlag(arg, optional); if(optional) { mOptionalArguments.push_back(flag); mOptionalArgumentDesc.push_back(desc); if(allowedValues.size()) { mAllowedValues[flag] = allowedValues; } } else { mArguments.push_back(flag); mArgumentDesc.push_back(desc); if(allowedValues.size()) { mAllowedValues[flag] = allowedValues; } } }
void main(void) { char key; //key pressed Flag *flag = createFlag(); PLL_init(); //set system clock freq to 24MHz lcd_init(); //enable lcd display (clear display) keypad_enable(); //enable keypad led_enable(); //enable leds seg7_disable(); //turn off and disable seg7 display set_lcd_addr(0x40); //set display on 2nd line while(1){ key = getkey(); //read keypad if(flag->shift == true) //shift key was pressed shiftMode(key, flag); //operator input keys else stdMode(key, flag); //standard input keys } //end while(1) } //end main
void shiftMode(char key, Flag *flag){ switch(key){ case 0xA: //if memory set (A) key - save number midx = kidx; strcpy(mem, kbuf); //copy data from kbuf to mem flag->save = true; led_on(1); //turn on 2nd led to indicate saved number wait_keyup(); break; case 0xB: //if memory recall (B) key - get saved number if(flag->save == true){ flag->olock = false; flag->nlock = true; strcpy(kbuf, mem); kidx = midx; //kbuf[kidx] = '\0'; clrLine(2); //clear line 2 display(kbuf, kidx, 0x40); wait_keyup(); } break; case 0x1: //if plus '+' (1) key addOper('+', flag); break; case 0x2: //if minus '-' (2) key addOper('-', flag); break; case 0x3: //if mod '%' (3) key addOper('%', flag); break; case 0x4: //if multiply '*' (4) key addOper('*', flag); break; case 0x5: //if divide key '/' (5) key addOper('/', flag); break; case 0x6: //if power '^' (6) key addOper('^', flag); break; case 0x7: //if left parenthesis '(' (7) key if(flag->olock == true){ flag->leftpar += 1; kbuf[kidx++] = '('; display(kbuf,kidx, 0x40); wait_keyup(); } break; case 0x8: //if right parenthesis ')' (8) key if(flag->leftpar>0 && flag->olock==false){ //if '(' present flag->leftpar -= 1; kbuf[kidx++] = ')'; display(kbuf,kidx, 0x40); flag->nlock = true; //nlock = true to stop taking number inputs wait_keyup(); } break; case 0x9: //if factorial '!' (9) key addOper('!', flag); break; case 0xC: //if clear (C) key flag->nlock = false; flag->olock = true; flag->deci = false; flag = createFlag(); clear_lcd(); kidx = 0; //reset kbuf index kbuf[kidx] = '\0'; //clear kbuf oidx = 0; //reset oper index oper[oidx] = '\0'; //clear oper substart = 0; set_lcd_addr(0x40); wait_keyup(); //wait to release key break; case 0xD: // if shift (D) key flag->shift = false; wait_keyup(); //wait to release key break; case 0xF: //if equal (#) key clrLine(1); //-------------------- if(oidx > 0){ strcat(oper, kbuf); oidx += kidx; } else{ oidx = kidx; strcpy(oper, kbuf); } oper[oidx++] = ' '; flag->nlock = false; flag->deci = false; kidx = 0; //------------------- --oidx; //remove space display(oper, oidx, 0x40); wait_keyup(); break; case 0x0: break; default: break; } //end switch }