Kirjoittaja: thefox
Kirjoitettu: 21.02.2002 – 21.11.2011
Tagit: koodi näytille, vinkki
Ohjelma näyttää, miten keskeytyksiä voidaan kutsua QUICK BASIC -ohjelmasta. Siis toisin sanoen, ohjelma EI TOIMI, QBasicilla! Kyseisessä ohjelmassa kutsutaan funktiota 9h (tekstin tulostus), keskeytyksessä 21h (DOS-keskeytys).
***Koodi ' Esimerkki DOS-funktioiden käytöstä. ' Saa muokata ja käyttää miten huvittaa. ' -fawkz <_____@luukku.com> DECLARE SUB DOSPrint (t AS STRING) TYPE RegType ' RegType määrittelee 8086 koneiden rekisterit AX AS INTEGER ' Mukana ei tosin ole 386-koneista lähtien olleita BX AS INTEGER ' 32-bittisiä rekisterejä: EAX, EBX, jne. CX AS INTEGER DX AS INTEGER BP AS INTEGER SI AS INTEGER DI AS INTEGER FLAGS AS INTEGER DS AS INTEGER ES AS INTEGER END TYPE ' Huom! DOS tulkitsee, että teksti loppuu $-merkkiin, lisäksi ' tarvitsemme vaununpalautuksen ja rivinvaihdon (carriage return ja ' line feed), eli CHR$(13) + CHR$(10). DOSissa on monia käteviä ' funktioita, mm. muistin varaaminen, jne. ' Huono puoli Quick Basicin CALL INTERRUPT:issa on, että sillä ' ei voi erikseen käsitellä esim. AX:n vähiten- tai eniten ' merkitsevää tavua kuten yleensä.. mutta sen kanssa on vain ' elettävä :) DOSPrint "Piupau sano kiinalainen" + CHR$(13) + CHR$(10) + "$" END SUB DOSPrint (t AS STRING) DIM i AS RegType ' funktiolle menevät rekisteriarvot (input) DIM o AS RegType ' funktiolta tulevat rekisteriarvot (output) i.AX = &H900 ' AH = 09h (dos funktio tekstin ulostamiseen ;) i.DX = SADD(t) CALL INTERRUPT(&H21, i, o) END SUB
Hieno vinkki!
Tuollaista olen aina tarvinnut.
Ai niin, ja pitänee mainita, että QuickBasic pitää käynnistää /L parametrilla että tuo toimii.
Ai että se onkin noin yksinkertaista. Kiitos tästä hyvästä vinkistä. Vielä kun kertoisit call absoluten käytön...
Hyvä vinkki tämäkin.. olisi voinut ehkä olla muitakin esimerkkejä dosin funktioista..
Pääpointti ei ollut DOS-funktiot itsessään, vaan niiden kutsuminen QB:stä, mikä ei ole niin suoraviivaista kuin voisi luulla.
Dos-komentoja voi kutsua ihan vaan SHELL-käskyllä!
Esim:
SHELL "echo Pässi"
No shit sherlock :) Tässä ei kutsutakaan mitään echoja. Älä kommentoi jos et ole asiasta yhtään perillä :)
Tuolla voi käyttää ERRORLEVELiä. Tosin jos käytät ERRORLEVELiä QBeestä se ei mee sen jäläkeen takaasi QBeehen(se käyttää asmin lopetusta CALL INTERRUPTilla).
Niin juhko. Hommaisit ny sen QuickBasic 4.5:n.
7.1 hommattu..