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
     
    w 512 bajtach ;-)

    • 2:
       
      CommentAuthorbocianu
    • CommentTime24 Mar 2020 zmieniony
     
    • 3: CommentAuthorgorgh
    • CommentTime24 Mar 2020
     
    pięknie, od razu się przypomina quick assembler
    • 4:
       
      CommentAuthorbocianu
    • CommentTime24 Mar 2020
     
    @xxl : gdzieś to udostepnisz? czy tak tylko sie chwalisz, że umiesz? :D chętnie bym potestował
    • 5: CommentAuthorxxl
    • CommentTime24 Mar 2020
     
    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
     


    -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 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
     
    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
     
    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 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
     
    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
     
    i mala poprawka :-)

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