#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE_OF_DESCRIPTION 32
#define SIZE_OF_COMMAND 128
#define SIZE_OF_BUFFER 256
struct menuItem_t
{
char HotKey;
char Description[SIZE_OF_DESCRIPTION];
char Command[SIZE_OF_COMMAND];
} menuItem_t, *menuItem;
int main(int argc, char *argv[])
{
int charcode, i, cmdCount = 0;
FILE *CfgFile;
char Buffer[SIZE_OF_BUFFER];
if(argc < 2)
{
printf("Missing config file.\nUsage: %s config_file\nTry to read default config file\n", argv[0]);
// return 1;
}
CfgFile = fopen(argv[1], "rt"
if(CfgFile == NULL)
CfgFile = fopen("./menu.cfg", "rt"
if(CfgFile == NULL) return 1;
while (NULL != fgets(Buffer, SIZE_OF_BUFFER, CfgFile))
{
if(Buffer[0] != '#' && strlen(Buffer) > 10)
cmdCount++;
};
menuItem = calloc(cmdCount, sizeof(menuItem_t));
fseek(CfgFile, 0, SEEK_SET);
for (i = 0; i < cmdCount; )
{
int j = 0;
fgets(Buffer, 256, CfgFile);
for (j = 0; j < strlen(Buffer); j++)
if(Buffer[j] == 0x0D || Buffer[j] == 0x0A) Buffer[j] = 0x0;
if(Buffer[0] != '#' && strlen(Buffer) > 10)
{
int k = 0, stage = 0;
for (j = 0; j < strlen(Buffer); j++)
{
if(Buffer[j] == ',')
{
stage++;
switch (stage)
{
case 1:
{
k = j + 1;
menuItem.HotKey = Buffer[0];
break;
}
case 2:
{
memset(menuItem.Description, 0, SIZE_OF_DESCRIPTION);
memcpy(menuItem.Description, &Buffer[k], j - k);
k = j + 1;
memset(menuItem.Command, 0, SIZE_OF_COMMAND);
strcpy(menuItem.Command, &Buffer[k]);
break;
}
default: break;
}
}
}
i++;
}
}
fclose(CfgFile);
printf("Menu (Press ESC to quit)\nHotkey| Action\n"
for (i = 0; i < cmdCount; i++)
{
printf(" %c |%s\n", menuItem.HotKey, menuItem.Description);//, menuItem.Command);
// printf("%c+%s+%s\n", menuItem.HotKey, menuItem.Description, menuItem.Command);
}
do
{
int cmd_is_exec = 0;
// do{
charcode = getchar();
// }
// while (charcode == ERR);
// putchar(charcode);
for (i = 0; i < cmdCount; i++)
{
if(menuItem.HotKey == charcode)
{
printf("Execute command: %s\n", menuItem.Command);
cmd_is_exec = 1;
system(menuItem.Command);
}
}
// if(cmd_is_exec == 0 && charcode != 27)
// printf("Bad hotkey!\n"
}
while(charcode != 27);
free(menuItem);
return 0;
}