#include<stdio.h>
#include<stdlib.h>
int update(void);
int upgrade(void);
int quit(void);
void show(const char *question, const char **options, int (**actions)(void), int length);
int main(void){
const char *question = "Choose Menu\n";
const char *options[3] = {"Update", "Upgrade", "Quit"};
int (*actions[3])(void) = {update,upgrade,quit};
show(question,options,actions,3);
return 0;
}
int update(void){
return 1;
}
int upgrade(void){
return 1;
}
int quit(void){
return 0;
}
void show(const char *question, const char **options, int (**actions)(void), int length){
int choose = 0, repeat = 1;
int (*act)(void);
do{
printf("\n\t %s \n",question
); for(int i=0;i<length;i++){
printf("%d. %s\n",(i
+1),options
[i
]); }
printf("\nPlease choose an Option: "); if((scanf("%d",&choose
)) != 1){ }
act = actions[choose-1];
repeat = act();
if(act==0){
repeat = 0;
}
}while(repeat == 1);
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CgppbnQgdXBkYXRlKHZvaWQpOwppbnQgdXBncmFkZSh2b2lkKTsKaW50IHF1aXQodm9pZCk7CnZvaWQgc2hvdyhjb25zdCBjaGFyICpxdWVzdGlvbiwgY29uc3QgY2hhciAqKm9wdGlvbnMsIGludCAoKiphY3Rpb25zKSh2b2lkKSwgaW50IGxlbmd0aCk7CgppbnQgbWFpbih2b2lkKXsKICAgIGNvbnN0IGNoYXIgKnF1ZXN0aW9uID0gIkNob29zZSBNZW51XG4iOwogICAgY29uc3QgY2hhciAqb3B0aW9uc1szXSA9IHsiVXBkYXRlIiwgIlVwZ3JhZGUiLCAiUXVpdCJ9OwogICAgaW50ICgqYWN0aW9uc1szXSkodm9pZCkgPSB7dXBkYXRlLHVwZ3JhZGUscXVpdH07CgogICAgc2hvdyhxdWVzdGlvbixvcHRpb25zLGFjdGlvbnMsMyk7CiAgICByZXR1cm4gMDsKfQoKaW50IHVwZGF0ZSh2b2lkKXsKICAgIHByaW50ZigiXG5cdFVwZGF0aW5nLi4uXG4iKTsKICAgIHJldHVybiAxOwp9CgppbnQgdXBncmFkZSh2b2lkKXsKICAgIHByaW50ZigiXG5cdFVwZ3JhZGUuLi5cbiIpOwogICAgcmV0dXJuIDE7Cn0KCmludCBxdWl0KHZvaWQpewogICAgcHJpbnRmKCJcblx0UXVpdC4uLlxuIik7CiAgICByZXR1cm4gMDsKfQoKdm9pZCBzaG93KGNvbnN0IGNoYXIgKnF1ZXN0aW9uLCBjb25zdCBjaGFyICoqb3B0aW9ucywgaW50ICgqKmFjdGlvbnMpKHZvaWQpLCBpbnQgbGVuZ3RoKXsKICAgIGludCBjaG9vc2UgPSAwLCByZXBlYXQgPSAxOwogICAgaW50ICgqYWN0KSh2b2lkKTsKCiAgICBkb3sKICAgICAgICBwcmludGYoIlxuXHQgJXMgXG4iLHF1ZXN0aW9uKTsKICAgICAgICBmb3IoaW50IGk9MDtpPGxlbmd0aDtpKyspewogICAgICAgICAgICBwcmludGYoIiVkLiAlc1xuIiwoaSsxKSxvcHRpb25zW2ldKTsKICAgICAgICB9CgogICAgICAgIHByaW50ZigiXG5QbGVhc2UgY2hvb3NlIGFuIE9wdGlvbjogICIpOwogICAgICAgIGlmKChzY2FuZigiJWQiLCZjaG9vc2UpKSAhPSAxKXsKICAgICAgICAgICAgcHJpbnRmKCJFcnJvclxuIik7CiAgICAgICAgfQogICAgICAgIGFjdCA9IGFjdGlvbnNbY2hvb3NlLTFdOwogICAgICAgIHJlcGVhdCA9IGFjdCgpOwoKICAgICAgICBpZihhY3Q9PTApewogICAgICAgICAgICByZXBlYXQgPSAwOwogICAgICAgIH0KICAgIH13aGlsZShyZXBlYXQgPT0gMSk7Cn0=