Tein erään ohjeen mukaan eräänlaisen ohjelman tai kaksi oikeastaan.
Siinä on isäntä ja asiakas-ohjelmat, joista isäntä on tälläinen:
DECLARE SUB SetOSFlags () DECLARE SUB StuffBuffer (batch$) DECLARE SUB RunEXEfile (filename$) INPUT m$ SetOSFlags RunEXEfile m$ SUB RunEXEfile (filename$) 'a% = FREEFILE OPEN "_.bat" FOR OUTPUT AS #1 PRINT #1, "@echo off" PRINT #1, filename$ PRINT #1, path$ + "stuffbuf kernel" CLOSE #1 StuffBuffer "_.bat" SYSTEM END SUB SUB SetOSFlags DEF SEG = 0 IF PEEK(&H463) = &HB4 THEN DEF SEG = &HB000 ELSE DEF SEG = &HB800 END IF osint$ = "OS*1" FOR a% = 4001 TO 4004 POKE (a%), ASC(MID$(osint$, a% - 4000, 1)) NEXT END SUB SUB StuffBuffer (batch$) Stuf$ = LEFT$(batch$, 14) + CHR$(13) Length = LEN(Stuf$) DEF SEG = 0 POKE 1050, 30 POKE 1052, 30 + Length * 2 FOR a% = 1 TO Length POKE 1052 + a% * 2, ASC(MID$(Stuf$, a%)) NEXT SYSTEM END SUB
ja asiakas tälläinen:
DECLARE FUNCTION DetectOS% () a% = DetectOS% PRINT a% IF a% THEN PRINT "je" ELSE PRINT "no" END IF PRINT "ACID" DO a$ = INKEY$ LOOP UNTIL a$ = "q" FUNCTION DetectOS% OSint$ = " " FOR a% = 4001 TO 4004 MID$(OSint$, a% - 4000) = CHR$(PEEK(a%)) NEXT IF LEFT$(OSint$, 3) = "OS*" THEN DetectOS% = 1 ELSE DetectOS% = 0 END IF END FUNCTION
Ohjeen mukaan tuon pitäisi tallentaa jonnekkin OS*1 tekstin isännästä ja sitten lukea se asiakkas-ohjelmassa, mutta minulla se joko ei tallenna tai sitten se ei osaa lukea sitä, koska a% on 0 ja se sanoo "no", kun isännän kautta käynnistää asiakkaan. Sama myös vaikka käynnistää asiakas-ohjelman ihan muuten vain... eli siis ei mitään eroa...
EDIT: Tosin suoritan ohjelmaa dosboxin kautta Mac OS X:ssä :/
Moikka juhaz!
NEXT 'Kokeile sanooko tässä PRINT OSint$ '*** 'välissä yhtään mitään IF LEFT$(OSint$, 3) = "OS*" THEN
Se sanoo:
u$³
eli mitä ilmeisemmin väärin jos sen kuuluisi sanoa "OS*1"?
Moikka juhaz!
Aivan oikea päätelmä...
Length = LEN(Stuf$) 'Tee sama jutska tässä Print Stuf$ , Length '*** 'välissä DEF SEG = 0)
Eikö ohjeissa kielletä vastaukset tyyliin "siinä on varmaankin jotain vikaa" jne?
Tarkistapa vielä isäntäohjelmassa juuri ennen sen toisen ajoa ja ajon jälkeen, mitä muistista löytyy. Nyt siis ensimmäinen vaihe olisi tutkia, mistä lähtien sisältö on väärä. Vai tekeekö DosBox ehkä jokaiselle ohjelmalle oman muistipalan? Mitään ei voi sulkea pois.
Tuohon neau33:n juttuun se sanoo _.bat/tyhjää ja 6.
Metabolixin ehdotukselle taas se sanoo aivan oikein eli OS*1 jos käyttää DetectOS% funktiota myös pääohjelmassa.
Moikka juhaz!
Tietysti sanoo, koska muuttujalle annetaan arvo:
END IF
osint$ = "OS*1" '***
FOR a% = 4001 TO 4004
FOR a% = 1 TO Length POKE 1052 + a% * 2, ASC(MID$(Stuf$, a%)) 'Lisää tähän... hlp$ = hlp$ + Str$(Asc(Mid$(Stuf$, a%)))'*** '...väliin NEXT PRINT hlp$ '*** ja tsekkaa Do While Inkey$ = "": Loop '*** täälä...
Aihe on jo aika vanha, joten et voi enää vastata siihen.