atarionline.pl MenuManager - Forum Atarum

    Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

    • :
    • :

    Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

      • 1: CommentAuthorxxl
      • CommentTime24 Mar 2020 00:03
       
      w 512 bajtach ;-)

      • 2:
         
        CommentAuthorbocianu
      • CommentTime24 Mar 2020 01:03 zmieniony
       
      • 3: CommentAuthorgorgh
      • CommentTime24 Mar 2020 11:03
       
      pięknie, od razu się przypomina quick assembler
      • 4:
         
        CommentAuthorbocianu
      • CommentTime24 Mar 2020 12:03
       
      @xxl : gdzieś to udostepnisz? czy tak tylko sie chwalisz, że umiesz? :D chętnie bym potestował
      • 5: CommentAuthorxxl
      • CommentTime24 Mar 2020 16:03
       
      umieszcze jak bedzie optymalne, narazie jeszcze dopracowuje...

      MO
      .word 0
      .byte x
      .byte y
      .byte szerokosc
      .byte wsokosc
      .byte odstep x
      .byte odstep y
      .byte ilosc pozycji
      .byte ilosc kolumn
      .byte pozycja kursora
      .word element1
      ...
      .word element n

      element1
      .byte ID
      ; .byte KEY
      .byte flagi
      .word MO1 submenu lub 0
      .byte tekst
      • 6: CommentAuthorxxl
      • CommentTime25 Mar 2020 20:03
       


      -dodana funkcja do definiowana wlasnego ksztaltu ramki
      -byc moze zwracany bedzie wskaznik a nie wartosc ID
      -byc moze w strukturze menu bedzie przewidziany adres lub indeks do funkcji ktora ma byc wywolana przed otwarciem menu/submenu

      MO
      .byte x
      .byte y
      .byte szerokosc
      .byte wsokosc
      .byte odstep x
      .byte odstep y
      .byte ilosc pozycji
      .byte ilosc kolumn
      .byte pozycja kursora
      .word element1
      ...
      .word element n

      element1
      .byte ID
      ; .byte KEY
      .byte flagi
      .word MO1 submenu lub 0
      .byte tekst
      • 7: CommentAuthorxxl
      • CommentTime26 Mar 2020 10:03 zmieniony
       
      no i jest pierwsza beta:

      klawisze: strzalki, return, esc

      start
      lda #.lo(MO2)
      ldx #.hi(MO2)
      jsr xMenu_OPEN
      sta elemid
      ldx #<hello
      ldy #>hello
      jsr $c642
      jmp start

      hello .byte c'selected ID: '
      elemid .byte $00
      .byte $9b

      MO0
      .byte 7 ; x
      .byte 17 ; y
      .byte 19 ; H
      .byte 2 ; V
      .byte 1 ; margin x
      .byte 1 ; margin y
      .byte 3 ; no of items
      .byte 3 ; cols
      .byte 0 ; cursor pos
      .word MO0_E1 ; items
      .word MO0_E2
      .word MO0_E3
      MO1
      .byte 0
      .byte 15
      .byte 7
      .byte 7
      .byte 1
      .byte 1
      .byte 6
      .byte 1
      .byte 0
      .word MO1_E1
      .word M_SPACE
      .word MO1_E2
      .word MO1_E3
      .word MO1_E4
      .word MO1_E5
      MO2
      .byte 0
      .byte 23
      .byte 7
      .byte 0
      .byte 1
      .byte 0
      .byte 1
      .byte 1
      .byte 0
      .word MO2_E1
      MO2_E1
      .byte c'0' ; ID
      .byte 0 ; FLAGS
      .word MO1 ; MENU
      .byte d'Start',$9b ; LABEL
      M_SPACE
      .byte 0
      .byte $80
      .word 0
      .byte d' ',$9b
      MO1_E1
      .byte c'1'
      .byte 0
      .word 0
      .byte d'Test1',$9b
      MO1_E2
      .byte c'2'
      .byte 0
      .word MO0
      .byte d'Test2',$9b
      MO1_E3
      .byte c'3'
      .byte 0
      .word 0
      .byte d'Test3',$9b
      MO1_E4
      .byte c'4'
      .byte 0
      .word 0
      .byte d'Test4',$9b
      MO1_E5
      .byte c'5'
      .byte 0
      .word 0
      .byte d'Test5',$9b
      MO0_E1
      .byte c'6'
      .byte 0
      .word 0
      .byte d'Test6',$9b
      MO0_E2
      .byte c'7'
      .byte 0
      .word 0
      .byte d'Test7',$9b
      MO0_E3
      .byte c'8'
      .byte 0
      .word 0
      .byte d'Test8',$9b
      • 8: CommentAuthorxxl
      • CommentTime26 Mar 2020 18:03
       
      dodane skroty klawiszowe:

      .byte c'1' ; ID
      .byte $1F ; SHORTCUT KEY
      .byte 0 ; FLAGS
      .word 0 ; MENU
      .byte d'Label',$9b ; LABEL

      teraz programy typu menu driven gdze czekaja na klawisz mozna prosto przerobic na menusowe ;-)
      • 9: CommentAuthorxxl
      • CommentTime26 Mar 2020 22:03
       
      po optymalizacji skrocilo sie o ok. 70 bajtow.

      podczas inicjalizacji struktura menu jest skanowana i tworzona jest tablica skrotow klawiszowych. proramista juz nie musi sie tym martwic...
      • 10: CommentAuthorxxl
      • CommentTime27 Mar 2020 18:03 zmieniony
       
      produkt gotowy, przeszedl kolejne optymalizacje, zajmuje 3 strony pamieci, dodatkowo otrzymal relokator.
      dodajac go do swojego programu wystarczy dolaczyc go na poczatku, po ini sam sie zrelokuje (pierwszy bajt binarki to adres relokacji, mozemy relokowac takze proramowy stos oraz bufor dla tla menu - odpowiednio drugi i trzeci adres na poczatku binarki)
      oczywiscie gdyby korzystac z xBiosa relokacje moznaby przeprowadzic w locie ale dla userow DOS zostala przygotowana wersja samorelokujaca na ini.

      jesli chcemy korzystac ze skrotow klawiszowych wywolujemy procedure ze skasowanym znacznikiem C=0
      c=1 - nie bedzie generowana tablica skrotow klawiszowych

      xMenu_OPEN equ xMenu+$1B

      clc ; + shortcut keys
      ;sec ; without shortcuts keys
      lda #.lo(MenuObject)
      ldx #.hi(MenuObject)
      jsr xMenu_OPEN

      return: A = selected ID


      i tyle.

      przykladowy program:

      xMenu equ $5000
      xMenu_OPEN equ xMenu+1B

      org $2000

      start clc ; + shortcut keys
      ;sec ; without shortcuts keys
      lda #.lo(MO2)
      ldx #.hi(MO2)
      jsr xMenu_OPEN
      sta elemid
      ldx #<hello
      ldy #>hello
      jsr $c642
      jmp start

      hello .byte c'selected ID: '
      elemid .byte $00
      .byte $9b

      MO0
      .byte 9 ; x
      .byte 17 ; y
      .byte 25 ; H
      .byte 2 ; V
      .byte 1 ; margin x
      .byte 1 ; margin y
      .byte 3 ; no of items
      .byte 3 ; cols
      .byte 0 ; cursor pos
      .word MO0_E1 ; items
      .word MO0_E2
      .word MO0_E3
      MO1
      .byte 0
      .byte 15
      .byte 9
      .byte 7
      .byte 1
      .byte 1
      .byte 6
      .byte 1
      .byte 0
      .word MO1_E1
      .word M_SPACE
      .word MO1_E2
      .word MO1_E3
      .word MO1_E4
      .word MO1_E5
      MO2
      .byte 0
      .byte 23
      .byte 7
      .byte 0
      .byte 1
      .byte 0
      .byte 1
      .byte 1
      .byte 0
      .word MO2_E1
      MO2_E1
      .byte c'0' ; ID
      .byte 0 ; KEY
      .byte 0 ; FLAGS
      .word MO1 ; MENU
      .byte d'Start',$9b ; LABEL
      M_SPACE
      .byte 0
      .byte 0
      .byte $80
      .word 0
      .byte d' ',$9b
      MO1_E1
      .byte c'1'
      .byte $1f ;1 ; KEY
      .byte 0
      .word 0
      .byte d'Test ''1',$9b
      MO1_E2
      .byte c'2'
      .byte 0 ; KEY
      .byte 0
      .word MO0
      .byte d'Test2 ',$9b
      MO1_E3
      .byte c'3'
      .byte $1a ;3 ; KEY
      .byte 0
      .word 0
      .byte d'Test ''3',$9b
      MO1_E4
      .byte c'4'
      .byte $18 ;4 ; KEY
      .byte 0
      .word 0
      .byte d'Test ''4',$9b
      MO1_E5
      .byte c'5'
      .byte $1d ;5 ; KEY
      .byte 0
      .word 0
      .byte d'Test ''5',$9b
      MO0_E1
      .byte c'6'
      .byte $1b ;6 ; KEY
      .byte 0
      .word 0
      .byte d'Test ''6',$9b
      MO0_E2
      .byte c'7'
      .byte $33 ;7 ; KEY
      .byte 0
      .word 0
      .byte d'Test ''7',$9b
      MO0_E3
      .byte c'8'
      .byte $35 ;8 ; KEY
      .byte 0
      .word 0
      .byte d'Test ''8',$9b


      run start
      • 11: CommentAuthorxxl
      • CommentTime11 Apr 2020 16:04
       
      kolejny etap, rozbudowalem troche xMENU.

      Tworzmy strukture menu wysylamy do xMENU i czekamy na odpowiedz o wyborze opcji przez usera, odpowiedz wraz ze struktura menu daje pelnie informacji o dzialaniu usera.

      struktury w liscie menu mozna dowolnie zmieniac, kolejnosc, ilosc, mozna je np. laczyc :-)

      nowa rzecza sa tez flagi:

      TOGGLE i CHECKED - informauje, ze pole moze byc zaznaczane / odznaczane

      dodany klawisz space - wybiera opcje bez wyjscia z menu

      flaga ENABLED byla ale teraz mozna zmieniac/konfigurowac menu z czasie rzeczywistym - np. na przerwaniach, plynace napisy w menu/ wlaczenia-wylaczenia, wszelkieo rodzaju zmiany

      ODPOWIEDZI xMENU:

      w A otrzymujemy ID wybranej opcji dodatkowo adres tablicy (zakonczonej $ff) w ktorej mamy ID wszystkich ZMIENIONYCH opcji - jesli zmieniona byla parzysta ilosc razy to tak jakby nie byla mieniona na liscie odpowiedzi jej nie bedzie

      przyklad oczywiscie jest relokowalny.
      • 12: CommentAuthorxxl
      • CommentTime11 Apr 2020 18:04
       
      i mala poprawka :-)

      - klawiszami skrotow tez mozna przelaczac opcje menu (nie tylko spacja)