Subversion Repositories SvarDOS

Rev

Rev 1394 | Rev 1396 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1394 Rev 1395
Line 800... Line 800...
800
};
800
};
801
 
801
 
802
static enum MENU_ACTION ui_menu(void) {
802
static enum MENU_ACTION ui_menu(void) {
803
  unsigned short i, curchoice, attr, x, slen;
803
  unsigned short i, curchoice, attr, x, slen;
804
  unsigned short xorigin, yorigin;
804
  unsigned short xorigin, yorigin;
805
  uidirty.from = 0;
-
 
806
  uidirty.to = 0xff;
-
 
807
  uidirty.statusbar = 1;
-
 
808
 
805
 
809
  /* find out the longest string */
806
  /* find out the longest string */
810
  slen = 0;
807
  slen = 0;
811
  for (i = MENU_OPEN; i <= MENU_QUIT; i++) {
808
  for (i = MENU_OPEN; i <= MENU_QUIT; i++) {
812
    x = strlen(svarlang_str(8, i));
809
    x = strlen(svarlang_str(8, i));
813
    if (x > slen) slen = x;
810
    if (x > slen) slen = x;
814
  }
811
  }
815
 
812
 
816
  /* calculate where to draw the menu on screen */
813
  /* calculate where to draw the menu on screen */
817
  xorigin = (screenw - (slen + 5)) / 2;
814
  xorigin = (screenw - (slen + 5)) / 2;
818
  yorigin = (screenh - (MENU_QUIT - MENU_OPEN + 5)) / 2;
815
  yorigin = (screenh - (MENU_QUIT - MENU_OPEN + 6)) / 2;
-
 
816
 
-
 
817
  /* */
-
 
818
  uidirty.from = yorigin;
-
 
819
  uidirty.to = 0xff;
-
 
820
  uidirty.statusbar = 1;
-
 
821
 
-
 
822
  /* hide the cursor */
-
 
823
  mdr_cout_cursor_hide();
819
 
824
 
820
  curchoice = MENU_OPEN;
825
  curchoice = MENU_OPEN;
821
  for (;;) {
826
  for (;;) {
822
    /* render menu */
827
    /* render menu */
823
    for (i = MENU_NONE; i <= MENU_QUIT + 1; i++) {
828
    for (i = MENU_NONE; i <= MENU_QUIT + 1; i++) {
Line 829... Line 834...
829
        attr = SCHEME_MENU;
834
        attr = SCHEME_MENU;
830
      }
835
      }
831
      x = mdr_cout_str(yorigin + i, xorigin + 2, svarlang_str(8, i), attr, slen);
836
      x = mdr_cout_str(yorigin + i, xorigin + 2, svarlang_str(8, i), attr, slen);
832
      if (i == curchoice) {
837
      if (i == curchoice) {
833
        mdr_cout_char_rep(yorigin + i, xorigin + x + 2, ' ', SCHEME_MENU_SEL, slen - x + 1);
838
        mdr_cout_char_rep(yorigin + i, xorigin + x + 2, ' ', SCHEME_MENU_SEL, slen - x + 1);
834
        mdr_cout_locate(yorigin + i, xorigin + x + 2);
-
 
835
      }
839
      }
836
    }
840
    }
837
    /* wait for key */
841
    /* wait for key */
838
    switch (keyb_getkey()) {
842
    switch (keyb_getkey()) {
839
      case '\r': return(curchoice); /* ENTER */
-
 
840
      case 0x150: /* down */
843
      case 0x150: /* down */
841
        if (curchoice == MENU_QUIT) {
844
        if (curchoice == MENU_QUIT) {
842
          curchoice = MENU_OPEN;
845
          curchoice = MENU_OPEN;
843
        } else {
846
        } else {
844
          curchoice++;
847
          curchoice++;
Line 849... Line 852...
849
          curchoice = MENU_QUIT;
852
          curchoice = MENU_QUIT;
850
        } else {
853
        } else {
851
          curchoice--;
854
          curchoice--;
852
        }
855
        }
853
        break;
856
        break;
-
 
857
      default:
854
      default: return(MENU_NONE);
858
        curchoice = MENU_NONE;
-
 
859
        /* FALLTHRU */
-
 
860
      case '\r': /* ENTER */
-
 
861
        mdr_cout_cursor_show();
-
 
862
        return(curchoice);
855
    }
863
    }
856
  }
864
  }
857
}
865
}
858
 
866
 
859
 
867
 
Line 1054... Line 1062...
1054
            if (saveflag == 0) memcpy(db->fname, fname, sizeof(fname));
1062
            if (saveflag == 0) memcpy(db->fname, fname, sizeof(fname));
1055
          } else {
1063
          } else {
1056
            saveflag = savefile(db, NULL);
1064
            saveflag = savefile(db, NULL);
1057
          }
1065
          }
1058
 
1066
 
-
 
1067
          mdr_cout_cursor_hide();
-
 
1068
 
1059
          if (saveflag == 0) {
1069
          if (saveflag == 0) {
1060
            db->modflag = 0;
1070
            db->modflag = 0;
1061
            ui_msg(svarlang_str(0, 2), NULL, SCHEME_MSG);
1071
            ui_msg(svarlang_str(0, 2), NULL, SCHEME_MSG);
1062
            mdr_bios_tickswait(11); /* 11 ticks is about 600 ms */
1072
            mdr_bios_tickswait(11); /* 11 ticks is about 600 ms */
1063
          } else {
1073
          } else {
1064
            ui_msg(svarlang_str(0, 3), NULL, SCHEME_ERR);
1074
            ui_msg(svarlang_str(0, 3), NULL, SCHEME_ERR);
1065
            mdr_bios_tickswait(36); /* 2s */
1075
            mdr_bios_tickswait(36); /* 2s */
1066
          }
1076
          }
-
 
1077
          mdr_cout_cursor_show();
1067
          break;
1078
          break;
1068
 
1079
 
1069
        case MENU_CLOSE:
1080
        case MENU_CLOSE:
1070
          if (ui_confirm_if_unsaved(db) == 0) {
1081
          if (ui_confirm_if_unsaved(db) == 0) {
1071
            loadfile(db, "");
1082
            loadfile(db, "");