Onko quickbasicilla mahdollista tehdä jollakin tapaa sillainen jännä juttu fake os ohjelmaan, että userilla voi olla vaikka kolme komentokehoitetta auki ja hän voi surffata niiden välillä?
Yritän esimerkillä esittää sen
-------F1/Screen 1--------
W-UX Version 1.0
$
-------loppui-------------
käyttäjä painaa F2:sta näppäimistössä ja se vaihtaa toiseen screeniin, jossa hän antaa komennon ls ja se näyttää hakemistot ja tiedostot, eli se näyttäisi tältä sitten
------F2/Screen 2---------
W-UX Version 1.0
$ls
\bin
\etc
\tmp
------loppui---------------
ja käyttäjä voi painaa sitten vaikka F1:stä niin hän palaa tuohon ekaan kuvaan, jossa ei oltu kirjoitettu vielä mitään komentoja, mutta jos hän klikkaa F2:sta uudelleen niin hän palaa tuohon tokaan, jossa oli annettu jo komento ls.
Onkohan tälläinen edes mahdollista? Toivottavasti ymmärsitte mitä meinasin...
Tallenna edellisessä ruudussa olevat tekstit väliaikaiseen vaikka tekstitiedostoon aina kun painaa f2 ja kun otetaan ruutu uudelleen esille lataat ne tekstit sieltä. Tajusitko kerralla vai tarviiko koodia. Niinja toivottavasti minä ymmärrsin.
Tuossa tilanteessa tulee vain mieleen toinen kysymys eli kuinka tallentaa ne tekstit väliaikaisesti tekstitiedostoon?
niin että aina kun painaa entter se tallentaa
open "teksti.txt" for append as #1 print #1, tekstirivi close
ja sitten avaa
open "teksti.txt" for input as #1 input #1, a$ do print #1, a$ loop until eof(1) close
Ei tuo kyllä ihan toimi, kun siinä pitäisi kaikki se teksti mitä näytölle tulee saada silloin tallennettua, ei vain sitä mitä käyttäjä kirjoittaa...
No en kyllä osaa auttaa. mutta jos vaikka näin
INPUT N$ IF N$ <> "" THEN 'se tallennus juttu vaikka subi tai joku
eli aina kun painaa entteri se tallentaa.
No tee sitten ohjelma joka lukee näytöllä olevan tekstin ja tallentaa sen tiedostoon. Merkkien ASCII-koodit luetaan näytöltä SCREEN-käskyllä, vähän niin kuin POINT, mutta merkeille. Tai jos SCREEN on liian hidas, niin käytä PEEK:iä. En kyllä tiedä onko se nopeampi.
Hetkonen siis miten voit käyttää Näppäimiä kun käyttää functiota INPUT N$ vai käytätkö tekstin naputeluun jotain muuta systeemiä?
Pitäisi varmaan kehittää jokin future libraryn savescreen... tjs... tyylinen homma, kun tuo future libraryn komentokaan ei toimi ellei käytä sitten jotain set800x600 32 siellä alussa, jolloin input ei toimi, tai toimii, mutta ei näy.
Eli koodi on noin suurinpiirtein tällä hetkellä tälläinen:
print "W-UX Version 1.0" s: input "$", cline$ shell rootdir$ + "\bin\" + cline$ goto s
jolloin tuo sama koodi toistuisi muissakin (voisiko niitä kutsua joksikin virtuaali konsoleiksi / komentokehoitteiksi?)
Tekstinäyttöjä voi olla muistissa samaan aikaan peräti kahdeksan kappaletta. Näyttösivun valinta tapahtuu SCREEN-komennon yhteydessä ja kopiointi PCOPY-komennolla. Tässä on pieni esimerkki:
'tulostus sivulle 0, näkyvissä sivu 0 SCREEN 0, , 0, 0 CLS COLOR 1: PRINT "Eka rivi" COLOR 2: PRINT "Toka rivi" COLOR 3: PRINT "Kolmas rivi" SLEEP 'tulostus sivulle 1, näkyvissä sivu 1 SCREEN 0, , 1, 1 CLS PRINT "Toinen juttu" SLEEP 'tulostus sivulle 0, näkyvissä sivu 1 SCREEN 0, , 0, 1 COLOR 4: PRINT "Neljäs rivi" SLEEP 'tulostus sivulle 0, näkyvissä sivu 0 SCREEN 0, , 0, 0 SLEEP 'kopioidaan sivu 1 sivulle 0 PCOPY 1, 0
Virittelin yön aikana tälläisen virityksen ja on toiminut... mä luulin, että mun olisi pitänyt tehdä ihan ihmeellisiä virityksiä, käyttää jotain apukirjastoja... jne... apuna, mutta vastaus olikin helpompi kuin uskoinkaan. Nyt on vain se ongelma, että ei pysty suorittamaan mitään kunnon ohjelmia, kun se haluaisi sitten tehdä tuon "> test/test2.tmp" homman, mutta jos sinne sitten lisäisi jonkun "exec" komennon, ainoa ongelma, että tuohon ohjelmaan en aikonut upottaa yhtään komentoa vaan kaikki olisivat löytyneet bin-hakemistosta. No se viritys, jonka mä tein oli tälläinen:
alku: print "W-UX Version 1.0" s: input "$", cline$ if cline$ = "command /n" then goto secondd shell cline$ + " > test.tmp": goto ss goto s ss: open "test.tmp" for input as #1 do line input #1, tmp$ print tmp$ loop until eof(1) close #1 goto s second: print "W-UX Version 1.0" se: input "$", c$ if c$ = "command /b" then goto ss shell c$ + " > test2.tmp": goto secondd goto se secondd: open "test2.tmp" for input as #1 do line input #1, temp$ print temp$ loop until eof(1) close #1 goto se
ps: Pitänee tutkia tuota Antin koodia...
Tutkin nyt, kun en ollut niin väsynyt niin tuota omaa koodia ja vaikuttaa kyllä aika kehnolta :(
En ole kuitenkaan vielä Antin koodia tutkinut, mutta kyllä mä uskon, että pakko tähän on jokin keino olla...
Aihe on jo aika vanha, joten et voi enää vastata siihen.