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


    -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
    • CommentTime5 dni temu 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
    • CommentTime5 dni temu
     
    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
    • CommentTime5 dni temu
     
    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
    • CommentTime4 dni temu 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