Tämä siis ei niin varsinaisesti ole muistiin tallentamisesta kysymys....
No eli olen tekemässä Fake OS:siin osaa, johon ohjelmat tallentuvat tavallaan "muistiin", että niitä voi käynnistää parilla hassulla kirjaimella tai yhdellä...... No olen sen onnistunutkin jo tekemään siis yhden ohjelman tallentamisen "muistiin", mutta entäs usean ohjelman tallentaminen?
Olen käyttänyt tämän tyylistä koodia tallentamiseen "muistiin"
input "ajettava ohjelma: ", run$
open "run.bat" for output as #1
print #1, run$
close #1
-----------------------------------------------------------------
Ja tälläistä näyttämään mitä muistista löytyy:
open "run.bat" for input as #1
input #1, run$
close #1
print "ID 1"; run$
print "r = run ID 1, t = tyhjennä, q = pois ohjelmasta"
input "", c$
if c$ = "r" then shell run$
if c$ = "t" then goto tyhjenna
if c$ = "q" then end
tyhjenna:
'tällä voi poistaa "muistista" ohjelmat/pelit
open "run.bat" for output as #1
print #1, ""
close #1
----------------------------------------------------------------------
Eli ongelmana on kuinka voin saada monta ohjelmaa/peliä muistiin?
Kuinka esimerkiksi ohjelman saa katsomaan onko muistissa kohdassa 1 jo jotain ja jos on niin sitten tallentaa uuden jutun seuraavaan kohtaan?
Noh tuota noin... jos nyt oikein ymmärsin niin..
input "ajettava ohjelma: ", run$ open "run.bat" for append as #1 print #1, run$ close #1
Tuolla tavalla voit tallentaa sinne perään.
Ja sitten kun haluat ulostaa ne niin kannattaa vääntää vaikka taulukko niille ja tunkea kaikki sinne.. Tietysti ei voi tietää montako niitä on mutta pistät maksimimääräksi vaikka 30 :p
dim t(29) as string, c as integer open "run.bat" for input as #1 c=0 do while not eof(1) input #1, t(c) c=c+1 loop close #1
Ja sitten kun käyttäjä haluaa ajaa ohjelman ja antaa ID:n niin ajat vain tyyliin:
shell t(id)
Tuota.... enpä tiedä ymmärsitkö oikein vai enkö mä taas saanut tuota toimimaan.......
Yritän selittää nyt niin hyvin kuin vaan voin!
Eli minulla on pääohjelma, josta käyttäjä antaa komennon käynnistää vaikka C:\windows\notepad.exe, jonka hän sitten sammuttaa, mutta käyttäjän tietämättä ohjelma on tallentanut tiedon ohjelmasta (osoitteen) muistiin "run.bat" tiedostoon, jota myöhemmin käyttäjä voi katsoa muistin hallinnassa vai mikä piru se nyt sitten onkaan ja siellä lukee sitten tuo tiedoston osoite ja siellä sitten myös on mahdollisuus käynnistää tuo ohjelma uudelleen helposti yhdellä kirjaimella tai sitten sulkea täydellisesti, jolloin tuo tieto katoaa tuolta "run.bat" tiedostosta.
Ongelmana minulla on se, että en saa eikä varmaan kuin jollain isommalla työllä saa aikaseksi, että tuolla missä käyttäjältä kysytään ohjelman osoite ja siinä käytetään run$, mutta sitä voi käyttää vain kerran, koska se tallentaa samaan juttuun sitten missä jo on, kun pitäisi saada ihan uusi osoite tallennettua......
Yritän selittää kuvan muodossa!
http://koti.mbnet.fi/juha2002/Kuvat/jokin.bmp
Kuvaan tuli pikku moka! Kerta 1 on sama kuin Ohjelma 1 ja kerta 2 tietenkin ohjelma 2 ja niiden kummankin pitäisi olla mahdollista olla tavallaan muistissa, josta voi valita jommankumman käyttöön, kun haluaa.
Eli jotakuinkin näin pitäisi ohjelman toimia:
1.Ohjelma kysyy ohjelman/pelin osoitetta
2.Ohjelma tallentaa osoitteen run.bat tiedostoon ja käynnistää samalla käyttäjän haluaman ohjelman
3.Kun käyttäjä sammuttaa ohjelman niin se ei "katoa", että pitäisi uudelleen käynnistää kirjoittamalla pitkä osoite vaan voi mennä jonkin sorttiseen projektin hallintaan, jossa sen voi käynnistää uudelleen kirjoittamalla vaikka R + ID numero esimerkiksi R 1
jos vaikka kohdassa yksi olisi vaikka "C:\windows\notepad.exe" niin tuo käynnistyisi, kun käyttäjä kirjoittaa tuon R 1 ja painaa enteriä.
Varmaan saisi rakennettua sen mitä haluan jollain sillaisella tavalla, että ohjelma tarkistaisi, että onko rivillä yksi jotain ja jos on niin se katsoisi seuraavan rivin ja jos siellä on tilaa niin se tallentaisi sitten siihen sen tiedon ja noudattaa samaa keinoa jos siinäkin sitten on jotain.
Siis tuo fawkzin kertoma append lisää tiedoston perään aina uudet bitit, joten sinun ei tarvitse sitä erikseen tarkistaa onko sillä ja sillä rivillä vielä mitään.. Ja sitte kun kutsutaan niin tosiaankin katsotaan se rivinumero vaan ja otetaan sen rivin tiedot, ja sitten sen rivin ohjelma avataan. Yksinkertaista.
Jaa..... no enpä nyt ole varma mitä pitää tehdä, mutta minulla ilmeisesti ei kyllä tainnut toimia aivan oikein nyt....????
Onnistuin saada ohjelman tallentamaan run.bat tiedostoon riville yksi kolme kohtaa, mutta jokainen niistä oli sama, joten niinkään se ei toiminut, kun pitäisi saada eri ohjelmia tallennettua.
Noo täytyy katsoa.....
Hmm, tajusinkohan mä edes tehtävänantoa oikein.. Siis haluat tallentaa ohjelmien polut johonkin tiedostoon (eikä sillä ole väliä onko se .bat vai .txt vai onko tässä?) josta sitten myöhemmin katsotaan et mikä oli sen ja sen koko tiedostopolku..
Toi nyt ainakin vb:llä lisää rivin aina loppuun.. ja jos sen ajaa kolmesti tulee kolme alekkain.. kun en QB:n syntaksista ihan varma ollut, kun en sitä niin taida.. niin siksi vb..
Private Sub Command1_Click() 'Aina ajettaessa lisää yhden rivin, tietenkin tuo ohjelma-muuttuja on määriteltynä jo siellä joskus.. et siihen sit tulee kolme eri ohjelmaa ohjelma = "G:\Tuomaksen\Ohjelmat\Kissa.exe" Open App.Path & "/kissa.bat" For Append As #1 Print #1, ohjelma Close #1 End Sub
toi nyt on tossa napissa, mut pistä johonki proseduuriin se ja sit kutsut sitä aina, ja muistat määritellä ohjelma muuttujan sisällön sillon aikasemmin.. tai hmm.. voithan sä pistää parametriksikin ton ohjelma homman..
Kyllä tuossa fawkzin esimerkissä varmaan se eka toimi, mutta nyt uudelleen yrittämällä vika aiheuttaa vaan jonkun err code 9:n ja se oli joku out of.....?
Nyt tiedän millainen siis pitäisi kuitenkin saada...... highscore lista, joka on vaan otettu toiseen käyttöön.
Löysin muutaman esimerkin tuollaisen teosta vaan ne eivät toimineet, koska ne olivat "päästä" otettuja ja se, joka sen kertoi sanoi itsekkin, että ei toimi, mutta siinä oli käytelty kaikenlaista jänskää komentoa, joka listasi nimet toistensa perään seuraaville riveille.
http://www.basicguru.com/files/abc/abc9807/
Tuossa on sillainen mitä olette kertoneet jotakuinkin ainakin minulle ja tuo toimii ja on muuten hyvä, mutta siinä on tauko ennenkuin se näyttää seuraavan ja sitä mä en siihen ohjelmaan halua vaan sen, että se näyttää ne sitten heti.
Jos tuo jotain erhettä aiheuttaa niin pistetään sitten tarkat ilmoitukset :) Oliko se virhe Input past end of file tai jotain? Mutta kokeiles vaikka näin:
dim t(29) as string, c as integer open "run.bat" for input as #1 c=0 do input #1, t(c) c=c+1 loop until eof(1) close #1
Aihe on jo aika vanha, joten et voi enää vastata siihen.