//See Menus

#define M_OPTION1                       1
#define M_OPTION2                       2

U0 PullDownMenuDemo()
{
        I64                     message_code, arg1, arg2;
        CMenuEntry *tmpse;

        MenuPush(       "File {"
                                "  Open(,'O');"
                                "  Save(,'S');"
                                "  Exit(,CH_SHIFT_ESC);"
                                "}"
                                "Edit {"
                                "  Cut(,,SC_DELETE|SCF_SHIFT);"
                                "  Paste(,,SC_INS|SCF_SHIFT);"
                                "}"
                                "Misc {"
                                "  Beep(,CH_SPACE);"
                                "  Opt1(MESSAGE_CMD,M_OPTION1);"
                                "  Opt2(MESSAGE_CMD,M_OPTION2);"
                                "}"
                                "Help {"
                                "  Help(,,0x3B0000003B);"
                                "  About(,,0x23B0000023B);"
                                "}");

        "A pull-down menu will appear "
        "if you move the mouse to the top "
        "of the screen.\n\n";

        do
        {
                message_code = MessageGet(&arg1, &arg2, 1 << MESSAGE_KEY_DOWN + 1 << MESSAGE_CMD);
                "\nCmd:%d ARG1:%X ARG2:%X\n\n", message_code, arg1, arg2;

                switch (message_code)
                {
                        case MESSAGE_KEY_DOWN:
                                switch (arg1)
                                {//ASCII
                                        case CH_SPACE:
                                                Beep;
                                                break;

                                        case 0:
                                                switch (arg2.u8[0])
                                                {//arg2=Scan code
                                                        case SC_F1:
                                                                if (arg2 & SCF_SHIFT)
                                                                        "About PullDown Demo\n";
                                                                else
                                                                        "Test the menu.\n";
                                                                break;

                                                        case SC_DELETE:
                                                                if (arg2 & SCF_SHIFT)
                                                                        "Cut\n";
                                                                break;

                                                        case SC_INS:
                                                                if (arg2 & SCF_SHIFT)
                                                                        "Paste\n";
                                                                break;
                                                }
                                                break;
                                }
                                break;

                        case MESSAGE_CMD:
                        //Feel free to make your menu
                        //drive by key strokes, but you can
                        //use the MESSAGE_CMD val.
                                switch (arg1)
                                {
                                        case M_OPTION1:
                                                "Option # 1\n";
                                                if (tmpse = MenuEntryFind(Fs->cur_menu, "Misc/Opt1"))
                                                        tmpse->checked = !tmpse->checked;
                                                break;

                                        case M_OPTION2:
                                                "Option # 2\n";
                                                if (tmpse = MenuEntryFind(Fs->cur_menu, "Misc/Opt2"))
                                                        tmpse->checked = !tmpse->checked;
                                                break;
                                }
                                break;
                }

        }
        while (message_code != MESSAGE_KEY_DOWN || (arg1 != CH_SHIFT_ESC && arg1 != CH_ESC));

        MenuPop;
}

PullDownMenuDemo;