//See Menus

#define M_OPTION1       1
#define M_OPTION2       2

U0 PullDownMenuDemo()
{
  I64 msg_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(MSG_CMD,M_OPTION1);"
        "  Opt2(MSG_CMD,M_OPTION2);"
        "}"
        "Help {"
        "  Help(,,0x3B0000003B);"
        "  About(,,0x23B0000023B);"
        "}");

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

  do {
    msg_code=GetMsg(&arg1,&arg2,1<<MSG_KEY_DOWN+1<<MSG_CMD);
    "\nCmd:%d ARG1:%X ARG2:%X\n\n",msg_code,arg1,arg2;

    switch (msg_code) {
      case MSG_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 MSG_CMD:
//I Recommend making your menu
      //drive by key strokes, but you can
      //use the MSG_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 (msg_code!=MSG_KEY_DOWN||(arg1!=CH_SHIFT_ESC && arg1!=CH_ESC));
  MenuPop;
}

PullDownMenuDemo;