Tai no toimii siihen asti, kunnes QBasic pitää käynnistää. Kirjoitan ihan normaalisti komentoriville niinkuin pitää ensin hakemiston jossa QBasic minulla on ja siihen perään \qbasic71\QBX.EXE \L UKKONOOA.QLB
Mutta kun 7.1:n alkuikkuna on tullut, siis se että tämä ohjelma on suunniteltu vain DOS-käyttöön ... niin sen jälkeen ohjelma vain sammuu. Kyllähän se ensin jotain tietysti ilmoittaa, mutta siitähän ei kukaan XP:n käyttäjä tule selvää saamaan...
Ai ei saa selvää? Jos dos ikkuna sammuu heti lopetettua ota sen dos ikkunan Ominaisuudet->ohjelma ja katso että sulje lopetettaessa valinruutu ei ole valittu
OK
No nyt se näyttää jotain valid options ja sitten jotain siansaksaa mistä en ymmärrä mitään.
Oppaassa on virhe (joka täytyy heti korjata). Parametria ei näet pidä ilmoittaa kenoviivalla, kuten oppaassa väitetään, vaan kauttaviivalla. Eli oikea muoto on:
QBX.EXE /L UKKONOOA.QLB
Tai lyhennettynä:
QBX.EXE /LUKKONOOA
Nonih, nyt toimii!
Eikus hetkinen taas on ongelmaa. Toi ukkonooa-kirjasto toimii mutta tein juuri äsken uuden GRAFIX05.QLB kirjaston ja sinne SUBIN Smooth, joka on pehmennysohjelma.
Pistän alkuun:
DECLARED SUB Smooth ALIAS "Grafix05" ()
Ja komentorivikin on kunnossa mutta se sanoo silti että SUB PROGRAM Smoothia ei löydy.
ALIAS on siis aliohjelman nimi kirjastossa (alkuperäisessä koodissa). Eli jos aliohjelman nimi GRAFIX05.QLB:ssä on myös Smooth, täytyy määrittelyn olla yksinkertaisesti:
DECLARE SUB Smooth ALIAS "Smooth" ()
Voipa ALIAS-kohdan jättää poiskin, jos aliohjelman nimi on sama sekä ohjelmassa että kirjastossa.
Ai joo käsitin aluksi että tuohon ALIAS juttuun tulee kirjaston nimi.
No voih, nyt se sanoo että Overflow in Quick Library DATABASE. Database on sen alkuperäisen bas-tiedoston nimi, johon Smooth SUB:in tein.
Eiku jaa eipäs mitäään. Se ongelma on kunnossa, mutta onko keinoa keskeyttää ohjelman kesken kirjastosuorituksen?
Siis silloin kun suoritetaan jotain kirjastossa olevaa koodia, vai? Ainakaan minulle ei tule mitään kovin äkkiä mieleen, mutta voisit tehdä suoraan kirjastoon ne keskeytykset esim. virhevaarojen takia. (eli ennen kuin käännät kirjastoksi, laita sinne koodi joka keskeyttää suorituksen virheen ilmaantuessa)
Mutta voihan olla että se jää jumiin (vaikka loputtomaan luuppiin) vaikkei virhettä tapahtuisikaan. Ja kun Control/Break ei toimi kirjastotietoja suoritettaessa. Ilmeni muuten uusikin ongelma:
Enää ei pysty käyttämään COMMON SHARED:ia muuta kuin niihin muuttujiin, jotka löytyvät ohjelmaan ladatuista kirjastoista.
Loputtomat loopit ovat virheitä. Niitä ei saisi muodostua koskaan... ikuisen silmukan syyt pitää kyetä tunnistamaan ja ehkäisemään.
Miten ei pysty? Antaako virhettä tms?
Niin siis virheitähän ne tietysti ovat, mutta luulin että tarkoitit sellaista virhettä mistä QBasic antaa virheilmoituksen, että sieltä pääsisi pois ON ERROR GOTO:lla. Mutta tärkeintä olisi jos joka tapauksessa ohjelman voisi pysäyttää kesken kirjastosuorituksen. Mitenkäs tuo toinen ongelma?
... eli miten COMMON SHARED:ia ei pysty enää käyttämään?
niin ja sitte muistutukseksi että jos on paljon subeja eikä halua kirjoittaa niin paljoa niin nää kaksi asiaa on ihan sama:
DECLARE SUB Smooth ALIAS "Smooth" () DECLARE SUB Smooth ()
Niin siis COMMON SHARED:han jakaa muuttujat kaikkien aliohjelmien kesken, niin että niiden arvot säilyvät siirryttäessä aliohjelmaan. Mutta nyt kun yrittää käyttää COMMON SHARED:ia muuttujien jakamiseen niin se ei toimi, elleivät jaettavat muuttujat löydy myös ohjelman käyttämästä kirjastosta.
Siis ladatussa kirjastossa on teho-muuttuja ja teho-muuttujan arvo määritellään pääohjelmassa, joten siihen täytyy käyttää COMMON SHARED:ia että se säilyisi kirjastossakin. Mutta sitten kun laittaa toisen muuttujan joka on hp COMMON SHARED:illa ohjelman sisäisten aliohjelmien kanssa jaettavaksi, niin tulee ilmoitus:
COMMON IN QUICK LIBRARY TOO SMALL
Ja se sanoo jotain, että COMMON SHARED:ssa on enemmän muuttujia mitä kirjastossa, mutta miksei niitä saisi olla?
Aihe on jo aika vanha, joten et voi enää vastata siihen.