Pozdravljeni na straneh programov iz prejšnje Jugoslavije za 8 in 16 bitne mlinčke.



        Commodore C-64


News
ZX Spectrum
Commodore 64
Amiga
Amstrad CPC
Commodore +4
Atari ST
Galaksija
Orao
Orao
ReCracks
Misc
Misc
Forum
  
News
 
Menu
Marjan Šic


       Jezik: Slovenski
    Povzetek: Napravite menu.
     Skupina: Ostalo 
    Komentar: Pretipkano iz "Moj Mikro"
              številka 6, Junij 1987.
  Leto Izida: 1987
      Format: D64
  Download


Opisi:
Moj Mikro, #6, Junij 1987, Uporabni Programi, Marjan Šic

PROGRAM MENU ZA C 64

Preprostejša izbira vsakršnih opcij

  Program Menu je namenjen preprosti  izbiri raznih opcij v menijih.  Meniji so
pri 8-bitnih mlinčkih navadno v naslednji obliki: »1. ... prva opcija, 2.  ....
druga  opcija,  itd.«  Običajno sledi  stavek  »Pritisni  ustrezno številko  za
izbrano opcijo!« Vendar ostajajo za malčke tudi povsem drugačne oblike  menijev
(spomnite se  npr. na  Art studio),  ki že  spominjajo na  »prijazne« menije  v
grafično močnih 16-bitnikih. Program Menu vam omogoča, da pri C 64 uporabite za
izbiro opcij  v svojih  programih podobno  obliko menijev,  obenem pa je najbrž
jasno,  da zadeva  s svojimi  950 byti  ne more  uspešno konkurirati  omenjenim
menijem.
  Po klicu programa  se pojavita na  zaslonu puščica in  glavni meni s  svojimi
opcijami v prvi  zgornji vrstici zaslona.  S puščico, ki  jo vodimo s  palico v
vratih  3,  »povozimo« kako  opcijo  glavnega menija  in  s tem  »odpremo«  nov
podmeni. Opcijo podmenija nato enostavno izberemo tako, da se zapeljemo do nje,
opcija se invertira, pritisnemo še sprožilec na palici ter prepustimo dogajanje
programu, ki izbrano  opcijo izvršuje -  to pa že  ni več stvar  Menija samega,
ampak problem vašega programa.
  Obdelajmo najprej glavni  meni. Na naslova  $9FF8 (desetiško 40952)  in $9FF9
postavimo kazalec (nižji, višji byte), ki kaže na začetek podatkovnega polja  v
glavnem meniju. Polje je sestavljeno iz 40 kod teksta ASCII - to je vrstica, ki
bo kasneje v  prvi vrsti zaslona  - ter štirih  kazalcev na začetke  podatkov v
podmenijih (glej tabelo!). Zaradi  enostavnejšega spreminjanja ASCII v  DISPLAY
naj  bodo  kode  manjše od  96 -  dovolj za  velike črke,  številke in  ločila.
Upoštevajte, da  ima glavni  meni štiri  opcije (za  začetek), zato  je za  eno
opcijo namenjen  prostor 10  znakov. Ker  pa so  posamezne opcije  ločene še  s
pregradami, je znakov, ki sestavljajo sporočilo, lahko le devet.
  Prvi kazalec  (LO,HI) na  polje prvega  podmenija je  na naslovu  ($9FF8)+40,
drugi pa so oddaljeni n*2 byta.
  Prva byta  v podatkovnem  polju nekega  podmenija povesta  koordinati X in Y,
naslednji podatek  je širina,  četrti byte  pa število  opcij kasneje  odprtega
menija. Ko se bo podmeni narisal,  bo njegova oblika nekoliko drugačna, kot  bi
pričakovali po  prvih štirih  podatkih. Ker  je podmeni  obrobljen, bo  njegova
širina za ena večja, kot smo  navedli, višina (boljši izraz bi bil  globina) pa
bo 2*število opcij+3. Opcije so namreč  v vsaki drugi vrstici, trojka pa  je tu
zaradi  okvira.  Paziti  morate, da  bo podmeni  ostal v  mejah zaslona.  Vsota
koordinate X in širine ne sme presegati cifre 39 (tj. meja X zaslona), vsota  Y
(ki mora obvezno biti večji od nič) in višine pa ne večja od 24.
  Za temi  štirimi bvti  sledi na  naslovu ($9FF8)+40+n*2)+4)  tekst ASCII,  ki
predstavlja opcije podmenija. Kode so manjše  od 96, prvi znak vsake opcije  pa
naj bo presledek (koda 32).
  Ko ste pripravili ustrezne pogoje za  delo Menuja, Menu lahko poženete z  JSR
(SYS) 40572 ter  počakate, da bo  nekdo poklical neko  opcijo v meniju.  Katera
opcija  je bila  izbrana, je  moč ugotoviti  po vsebini  dveh byjtov.  Vsebina
naslova  $9FF7  (40951)  pove številko  (od 0  do ...)  odprtega podmenija,  na
naslovu  $9FF6  pa  je  shranjena  zaporedna  številka  izbrane  opcije  v  tem
podmeniju.  Na  temelju  teh  dveh vrednosti  lahko  usmerite  tok  dogajanja v
podprogram, ki bo izbrano opcijo izvršil.
  Program ne razlikuje med morebitnimi opozorili v menijih in pravimi opcijami,
vendar lahko to kontrolirate sami. Če imate  v nekem meniju ali v le eni  izmed
opcij zapisano npr. copyright in ime  programa, ter je nekdo poklikal ravno  to
ime, lahko njegove  odločitev ignorirate s  skokom na $9E97  (40599). Stanje na
zaslonu se zaradi tega ne bo prav nič spremenilo, le uporabnik bo imel občutek,
da klikanje po nekem tekstu noče »prijeti«.
  Vsem morda  ne bo  všeč, da  ima glavni  meni le  štiri opcije,  zato obstaja
možnost, da s štirimi poki dodelite glavnemu  meniju tudi 2, 5, 8 ali 10  opcij
(in  s tem  enako število  možnih podmenijev).  Na naslov  40176 pride  izbrano
število manj  ena, naslov  40178 popokate  z (40/izbrano  število) manj ena, na
naslova 40188 in 40612 pa postavite za ena večje vrednost kot na drugi  naslov.
Po tem posegu morate ustrezno  spremeniti tudi število kazalcev in  podatkovnih
polj podmenijev. 
  Prvi  pogoj,  da bo  program  normalno deloval,  je  seveda ta,  da  pravilno
prepišete  vrstice  DATA.  Demo program  je poleg  stavkov DATA  tudi v  obliki
asemblerskega listinga - kot primer,  kaj približno morate storiti, da  bo Menu
normalno deloval. Demo poleg nekaterih  obveznih stvari preverja v vrstici  16,
ali  je bila  poklikana  kakšna  vrstica menija  št. 3  (tu sta  zapisani imeni
programa in avtorja) ter po potrebi vašo odločitev ignorira za JSR $9E97.
  Večja pomanjkljivost  Menuja je  najbrž ta,  da ne  shranjuje vsebine tistega
dela  zaslona,  kjer  odpre  podmeni, zato  tudi  ne  morete  imeti na  zaslonu
istočasno drugih podatkov, ker jih bo  Menu pobrisal. Problem bi se dalo  sicer
uspešno rešiti z uvedbo dveh podprogramov (shrani-vrni), ki bi ju klicali  pred
oz.  po  risanju  podmenija,  vendar  bi  program  počasi  postal  predolg   za
prepisovanje.
  Morda komu tudi ne bo všeč, kako invertiramo opcije, vendar se to na navadnem
tekstovnem zaslonu dosti bolje ne da urediti.
  Pa  še  nekaj!  Če  boste Menu  uporabljali  iz  kakšnih  mamutskih basicovih
programov s  stavki v  stilu DIM  xyz (1000),  ga je  priporočljivo zaščititi z
ukazi: POKE 55,43: POKE 56,156: CLR.  S tem znižamo basicu dostopen prostor  na
naslovu 39979  ter mu  onemogočimo, da  bi pobrisal  strojno kodo,  ki se sicer
začenja na 39980.

naslovi                vsebina                     komentar
-------------------------------------------------------------------------------
$9FF8                  <>glav. meni                ;kazalec na podatkovno polje
                                                   glavnega menija
glav. meni             "DESK FILE ..."             ;40 ASCII kod za opcije
                                                   glavnega menija

glav. meni+40          <>podmen0                   ;kazalci na začetke polj
glav. meni+40+2        <>podmen1                   podmenijev podatkovna
glav. meni+40+4        <>podmen2                   polja podmenijev
glav. meni+40+6        <>podmen3              

podmenO                X,Y,širina, št. opcij       ;ASCII tekst
podmenO+4              " OPCIJA 0"            
podmen0+4+1*širina     " OPCIJA 1 "           
podmen0+4+2*širina     " OPCIJA 2 "           
                       itd.                   

podmen1                X1,Y1,širina1,št. opcij
podmeni1+4             " in tako dalje ...  "