RAS 2.55 Copyright © 1990-94 Romano Tenca (Anarkick) All Rights Reserved Distribuzione ------------- RAS e' un prodotto ShareWare. Tutti i diritti sono riservati all'autore. L'archivio originale e' liberamente distribuibile, ma non a scopo di lucro. E' includibile in librerie PD, tipo Fred Fish. Se si intende includere RAS in un prodotto commerciale o Shareware, e' necessario un permesso scritto dell'autore. Il programma e la documentazione sono rilasciati "come se", senza alcuna garanzia esplicita o implicita. Per registrarsi dovete inviare in contanti in busta chiusa, oppure mediante vaglia postale: 15000 lire all'autore: Romano Tenca Via Ripamonti 286 20141 Milano Italia Ricordatevi di indicare esattamente nome, cognome, indirizzo, causale. riceverete un disco con la versione registrata di RAS e di tutti i file connessi. E' preferibile, se possibile, inviare anche una comunicazione con gli stessi dati a questo indirizzo: Fidonet 2:331/301.14 Internet Romano.Tenca@p14.f301.n331.z2.fidonet.org Commenti sul programma e sui soui bug saranno altamente apprezzati. Che cos'e' RAS? --------------- RAS e' un Ram Disk con le seguenti proprieta': - Sopravvive al reset (come RAD:). - E' veloce (piu' di RAM:). - E' dinamico, cioe' alloca memoria quando ne ha bisogno e la restituisce al sistema in caso contrario (come RAM:). - Alloca la Fast RAM anche quando e' frammentata: il blocco minimo e' di 500 byte circa. - Non usa la Chip RAM quando il blocco piu' largo e' inferiore a 25000 byte, in tal caso usa solo la FAST. - Usa tutta la Fast RAM autoconfig. - Puo' sostituire la RAM di sistema. - Si possono creare piu' RAS: (RAS, RA1, RAM, RAS1...), aggiungendo le opportune entry alla Mountlist. - E' compatibile con 1.2 (non testata), 1.3 (non testata), 2.0, 3.0. - E' automount sotto 2.0+. - E' autoboot sotto 2.0+ . - GoRas si occupa di tutte le operazioni di avvio La versione registrata in piu': - Puo' usare un checksum per i file. Ad ogni reset controlla se sono stati corrotti. - Esegue programmi residenti nella propria memoria. Cosi' i programmi residenti sopravvivono al reset (ottimo per i sistemi a floppy e per chi ama la velocita'). - Ogni singola RAS puo' essere rimossa mediante KillRas. - Con OttRas permette di ottimizzare la gestione di memoria. - Con FixRas permette di recuperare file cancellati. - Con FindCorrupted trova eventuali file corrotti in RAS: I file acclusi -------------- l/Ras-Handler.13 L'handler del DOS per 1.2/1.3 l/Ras-Handler.20 L'handler del DOS per 2.0/3.0 Devs/Mountlist Da aggiungere a DEVS:Mountlist Storage/#? Mountlist aggiuntive per 2.1/3.0 InstallITA Script IconX in italiano per installare RAS InstallENG Script IconX in inglese per installare RAS RASEng.doc Documentazione in inglese RASIta.doc Documentazione in italiano c/GoRas Controlla e monta RAS c/Cleankk Elimina tutte le RAS (e le RAD...) I file aggiuntivi acclusi alla versione registrata -------------------------------------------------- c/KillRas Rimuove una singola istanza RAS c/OttRas Tenta di ottimizzare l'uso della memoria di RAS c/FixRas Tenta di recuperare file cancellati c/FindCorrupted Ricerca eventuali file corrotti in RAS: c/LoadRas Carica file residenti in RAS: Installazione ------------- Si puo' usare l'icona install da Workbench, oppure un Execute Install da Shell dopo un CD verso la directory di RAS. ATTENZIONE: Se usate gia' una vecchia versione di RAS, DOVETE prima cancellare le vecchie entry della Mountlist. Iniziare -------- Per iniziare basta fare: GoRas L'ideale e' modificare la Startup-Sequence per aggiungere verso l'inizio il comando GoRas. RAS: si puo' anche montare direttamente con Mount RAS: ma raccomandiamo GoRas, che offre informazioni utili sullo stato di RAS. GoRas ----- GoRAs monta RAS, se necessario, e controlla il suo stato. Ritorna poi un livello di errore e stampa un messaggio. Usa i comandi DOS Assign e Mount che devono dunque essere nel path (in C: va bene). Uso: NAME,CHECK/S,REMOUNT/S NAME il nome usato per RAS, RAS: (default), RAS1:, RAM:... CHECK controlla RAS, senza montarla REMOUNT rimuove un device preesistente Se indicate il nome RAM dovete usare la keyword REMOUNT. La RAM di sistema sara' sostituita da RAS e sopravvivera' al reset (sara' anche autobbot sotto 2.0+). Potete creare tutte le RAS che volete, aggiungendo altre entry alla mountlist. Fate il copy e paste di una entry preesistente, cambiate il nome e montatela con GoRas . Ecco la entry tipica: RAS: Handler = L:Ras-Handler Stacksize = 6000 Priority = 5 GlobVec = -1 Mount=1 Startup=-1 # Se volete, potete modificare Priority (senza eccedere) che indica la priorita' del task di RAS. Startup indica la priorita' di boot. Livelli di errore (utili per la Startup-Sequence) e messaggi restituiti da GoRas con traduzione italiana: 0 : Has succesfully survived to reset E' sopravissuta al reset senza problemi 1 : Already mounted, no reset made Gia' montata, non e' avvenuto alcun reset 2 : Already mounted, reset made Gia' montata, e' avvenuto il reset 3 : Reset made, data should be OK, code has not survived Il reset e' avvenuto, i dati dovrebbero essere a posto, ma il codice e' stato corrotto WARN 5 : Mounted for the first time E' la prima volta che e' stata montata ERROR 10 : Has survived to reset with some problems You should check its contents to continue E' sopravvissuta al reset, ma con qualche problema Dovreste controllarne il contenuto FAIL 20 : Already mounted, but someone has dismounted it You should reset system. No data should be lost Gia' montata, ma qualcuno l'ha rimossa Dovreste fare un reset. I dati dovrebbero essere integri FAIL 21 : Already mounted, but someone has killed it You should reset system. All data will be lost Gia' montata, ma e' stata "killed" Dovreste fare un reset, ma i dati andranno perduti FAIL 22 : Can't mount RAS DOS command Mount must be in the path, check DEVS:Mountlist Non riesco a montare RAS Mount deve essere nel path, controllate DEVS:Mountlist FAIL 23 : Can't dismount existing device Use keyword REMOUNT, Assign must be in the path Non riesco a rimuovere il device preesistente Usate la keyword REMOUNT, Assign deve stare nel path FAIL 24 : Unexpected condition Have you used the Boot Menu to disable this RAS? Try a reset Condizione inaspettata Avete disabilitato questa RAS con il boot menu? Provate con un reset Sotto 1.2 e 1.3 compare sempre il messaggio: "Handler code is not in memory" "Il codice dell'handler non e' in memoria" E' normale, perche' RAS non e' automount sotto 1.2/1.3. Puo' accadere anche sotto 2.0+, se qualcosa rovina il codice di RAS in memoria. Problemi di sopravvivenza ------------------------- Se caricate il Kickstart 2.0 da un file e RAS non sopravvive al reset in alcun modo, potete provare ad usare la versione 1.3 che potrebbe risolvere certi problemi al reset. Sul 3000 con SoftBoot RAS resiste addirittura al cambio di sistema operativo (da 2.0 a 3.0)! Merito di SoftBoot. Il nome del volume ------------------ RAS, di default, inizializza un Volume AmigaDOS, accessibile anche da Workbench, con il nome ROM:. Tale nome puo' essere modificato con il comando standard RELABEL. Se il nome usato nella mountlist non e' RAS (ad esempio RA1, RAM), il volume si chiamera' VRA1:, VRAM:, verra' cioe' aggiunto "V" a "RA1" o "RAM". Cleankk ------- Cleankk elimina TUTTI i programmi resistenti al reset dalla memoria (RAS, RAD e cosi' via). Scompariranno al reset successivo. Un altro modo per raggiungere lo stesso obiettivo di Cleankk e' premere rapidamente piu' volte di seguito i tasti Control-Amiga-Amiga (oppure fare una "guru meditation profonda"). Checksum -------- RAS possiede molte checksum interne che controlla ad ogni reset e che usa anche per autoripararsi entro certi limiti. In piu', la versione registrata puo' effettuare un checksum di tutti i singoli file. Al reset controllera' che non siano stati corrotti uno per uno. Se lo fossero, fara' lampeggiare lo schermo e inserira' nel commento del file la stringa: "File corrupted or not pure" Cosi' tutti i dati non corrotti saranno disponibili a differenza di quanto accade con la RAD di sistema, che se trova un solo byte corrotto si autoformatta al reset. Per attivare il checksum (che rallenta la creazione/scrittura dei file del 40% sul 3000, ma non la lettura) si deve operare mediante il comando AmigaDOS Protect, attivando il flag p (puro) su una directory: Protect RAS: +p Protect RAS:t +p Da questo momento, tutti i file creati nella directory verranno controllati al momento del reset. Se si crea una subdirectory, questa ereditera' il flag "p". Si puo' attivare il flag "p" direttamente sulla radice (RAS:) per far si' che tutti i file in RAS: abbiano il controllo di checksum. I file caricati con LoadRas (vedi) hanno SEMPRE il controllo di checksum. Se non sono puri, il commento ve lo indichera'. Per trovare eventuali file corrotti in RAS:, potete usare FindCorrupted (vedi) che analizza una o piu' RAS: e tutte le subdirectory. Uso: DIRECTORY/M Esempio: FindCorrupted RAS:c RAM: RA1:t Autoboot -------- Sotto 2.0+ RAS e' autoboot. La priorita' di boot si indica mediante la keyword Startup della Mountlist: Startup= -128 Startup= -1 Startup= 0 Startup= 1 Startup= 127 la priorita' 1 e' superiore a quella dell'hard disk e inferiore a quella di DF0:, cosi' si puo' fare il boot da un dischetto installato. Le priorita' valide vanno da -128 a 127. Se il codice dell'handler e' stato rovinato prima del reset, l'autoboot non potra' avvenire. GoRas carichera' un altro handler (se lo trova in L:) e vi permettera' di recuperare i dati (se non sono stati corrotti anche loro). Se disabilitate RAS mediante il menu di boot del 2.0+, GoRas stampera' il messaggio: Unexpected condition Have you used the Boot Menu to disable this RAS? Try a reset (24) I programmi residenti in RAS ---------------------------- (solo registrata) L'obiettivo perseguito e' stato duplice: a) rendere resistenti al reset i programmi residenti b) rendere utilizzabili da tutti i processi i programmi residenti Per far questo sono stati aggirati i metodi usati da programmi come la Shell dell'Amigados, la Shell dell'ARP, la WShell o qualsiasi altra Shell. Queste rendono si' i programmi residenti, ma permettono poi il loro uso solo alla Shell stessa o alle sue copie. Con RAS:, basta invece caricare in RAS: (o in qualsiasi sua directory) un programma PURO mediante il comando LoadRas accluso e poi eseguirlo come qualsiasi normale programma. In verita', sara' eseguito come programma residente, cioe' senza allocare altra memoria per la sua esecuzione. Cio' si traduce in un risparmio di memoria e di tempo (specie se il programma residente e' lungo). Il programma verra' eseguito usando la stessa memoria usata da RAS:. Ovviamente il programma residente resistera' al reset come tutto cio' che e' in RAS:. Nella Startup-Sequence successiva non sara' necessario caricare di nuovo i programmi residenti, con ulteriore risparmio di tempo. Qualsiasi programma puo' usare i programmi residenti come se fossero contenuti in un qualsiasi dischetto o device del DOS. Anche il Workbench, basta aggiungere l'icona corrispondente (si puo' anche assegnare c: alla RAS: o aggiungere la RAS: nel path). RAS: non modifica affatto le funzioni di libreria di sistema, pertanto dovrebbe essere perfettamente compatibile. Inoltre con i programmi residenti in RAS: si possono usare molti comandi standard dell'AmigaDOS come con file normali. Ecco un elenco dei comandi standard AmigaDOS che e' sensato usare sui programmi residenti di RAS: DIR, LIST, PROTECT, FILENOTE, RENAME, DELETE. I programmi residenti in RAS: possono infatti essere listati come tutti gli altri file mediante comandi come DIR o LIST. Ecco un esempio relativo al programma ARP run e al LATTICE lc1, residenti in RAS: e listati con LIST run 44 ----r-e- Today 16:02:50 : 372 lc1 44 ----r-e- Today 16:02:58 : 103192 Come potete notare i programmi presentano una lunghezza di 44 byte: tutti i programmi residenti in RAS: appariranno al sistema lunghi 44 byte (si tratta di un header che lancia il programma vero e proprio). Inoltre la linea di commento (che puo' essere cambiata dall'utente mediante FILENOTE) contiene la lunghezza reale del programma in memoria, in questo caso 372 byte per RUN e 103192 per LC1, che sono le occupazioni effettive di memoria di tali programmi. Infine i flag: di default sono settati solo "r" ed "e" ad indicare che il file e' leggibile ed eseguibile. E' invece inibita la scrittura e la cancellazione. I flag possono essere modificati dall'utente mediante il programma standard PROTECT; normalmente non si ha bisogno di farlo, tranne in un caso: quando si voglia eliminare un programma residente. Prima di usare il normale domando DELETE dell'AmigaDOS sara' necessario alzare il flag di cancellazione (sotto 2.0 si puo' usare direttamente la keyword FORCE di DELETE). Tutto cio' per evitare cancellazioni involontarie del programma mentre e' in esecuzione, cosa che conduce direttamente in Guru. RAS, infatti non tiene traccia dei programmi che eseguono i suoi file, sta all'utente, quando vuole cancellare un programma residente, assicurarsi che non sia in uso. In verita' si puo' anche effettuare una copia mediante COPY dei programmi residenti in RAS:, in tale caso verra' copiato solo l'header di 44 byte. La cosa curiosa e' che se si esegue tale copia (ovunque sia) verra' comunque lanciato il programma residente in RAS:, in maniera del tutto normale (ammesso che il programma residente originale non sia stato cancellato da RAS: e questo vale anche dopo un reset). Si puo' rinominare normalmente un programma residente in RAS, mediante RENAME. Si possono rendere residenti anche programmi BCPL. Si pososno rendere residenti anche handler, librerie, font, tutto cio' che appare come un programma puro. Ma non raccomandiamo tali soluzioni. L'uso di LoadRas ---------------- (solo registrata) Come gia' detto in precedenza per caricare un programma residente in RAS: occorre usare il programma LoadRas. LoadRas si puo' usare in due modi. Il primo e' il seguente DESTFILE/A,SOURCEFILE/A ove DESTFILE e' il nome del programma residente in RAS: con tutto il path e SOURCEFILE, e' il nome del file da caricare. Ad es. LoadRas RAS:c/run df0:c/run carichera' il file "df0:c/run" in RAS: con il nome "run" nella directory "RAS:c". La directory "c" DEVE essere presente in RAS:, altrimenti LoadRas riportera' l'errore DOS 204 ("Directory not found"). Il secondo modo e' il seguente: DESTDIR/A,SOURCEFILE/A/M In questo caso DESTDIR e' la directory in RAS: che accogliera' i programmi residenti, SOURCEFILE e' il nome di uno o piu' file da caricare in RAS:. Ad es. LoadRas RAS:c DF0:c/run DF0:c/lc1 DF0:c/lc2 DF0:c/dir DF0:c/list carichera' nella directory "c" i programmi RUN, LC1, LC2, DIR e LIST. La directory "c" deve esistere altrimenti LoadRas segnalera' un errore. Si potrebbe anche fare: CD df0:c LoadRas RAS:c run lc1 lc2 dir list ottenendo il medesimo risultato. LoadRas NON e' puro e non puo' essere reso residente. RAS cerca di fornire indicazioni attendibili sull'occupazione di memoria al programma AmiagDOS INFO, ma non contempla nel numero di blocchi in uso la memoria usata dai programmi residenti, per ognuno dei quali indica l'occupazione solo di un solo blocco, anche se il programma e' lungo 100 Kb. L'uso di KillRas ---------------- (solo registrata) E' molto semplice: KillRas RAS KillRas RA1 KillRas RAM RAS: verra' rimossa solo al prossimo reset e, intanto, si potra' continuare ad usarla. L'uso di OttRas --------------- (solo registrata) OttRas tenta di migliorare la gestione di memoria di RAS:. Non si garantiscono risultati sorprendenti. Il programma visualizza la memoria disponibile e i suoi frammenti perche' si possa controllare l'effetto ottenuto. Richiede sia della Fast RAM che della Chip RAM libera perche' funzioni al meglio. Uso: DIRECTORY/M,VERBOSE/S,ALL/S,FAST/S,ANY/S,REVERSE/S,CONTINUE/S DIRECTORY directory (10 max) da ottimizzare, RAS: RA1:c ALL ottimizza anche le subdirectory VERBOSE stampa tutti i nomi dei file FAST usa la Fast per i buffer provvisori ANY usa qualsiasi tipo di memoria per i buffer provvisori REVERSE usa allocazioni rovesciate della memoria (solo 2.0+) (da usarsi SOLO se non si possiede della FastRAM) CONTINUE ripete l'operazione (si ferma quando non c'e' piu' alcun guadagno) Esempio di output: Free Largest Frags Pri Attributes 2596016 2479440 85 30 Fast Public Local 2088 3320 -3 1934688 1931952 8 -10 Chip Public Local 24bitDMA 0 0 0 In questo caso, OttRas ha aumentato la memoria libera di 2088 byte, aumentato il blocco piu' grande di 3320 byte e diminuito di 3 unita' i frammenti di memoria Fast. La Memoria Chip e' rimasta invariata. Consigli per l'uso: - e' meglio chiamarlo almeno due volte a fila (o usare CONTINUE) - e' meglio chiamarlo quando esiste della Fast e/o della Chip libera - e' meglio chiamarlo subito dopo un reset - l'uso tipico e' OttRas RAS: ALL CONTINUE - provate ad usare OttRas con e senza l'opzione FAST - Scopo di OttRas e' liberare la memoria Chip a danno della Fast, se la Fast scarseggia o manca del tutto, i risultati non saranno brillanti, in questo caso usate REVERSE - in alcune condizioni, l'uso di OttRas puo' peggiorare lo stato della memoria - si dovrebbe tenere OttRas in RAS per ottimizzare i risultati - i migliori risultati si ottengono quando sono stati caricati e poi eliminati programmi che occupano grandi quantita' di memoria e utilizzano RAS - non aspettatevi miracoli Se usate OttRas con una RAS in cui tenete la directory ENV, evitate di ottimizzare la directory ENV perche' IPrefs fara' le bizze, aprendo requester su requester, in quanto OttRas "modifica" i suoi file. Bug: L'opzione REVERSE, in qualche caso, puo' generare Guru quando la memoria e' limitata. Non capisco perche', temo sia colpa del sistema operativo. L'uso di FixRas --------------- (solo registrata) FixRas tenta di recuperare file cancellati in una RAS. Ha successo solo se la memoria non e' utilizzata dal sistema operativo o da altri programmi. Se la memoria e' stata usata e rilasciata da altri programmi, i file recuperati potrebbero essere corrotti. Uso: DEVICE/A,DEST/A,FILE,ALL/S DEVICE nome di RAS DEST path della directory destinazione FILE eventuale nome del file da trovare ALL recupera tutti i file FixRas e' interattivo (se non si usa ALL): prima di salvare un file ve lo chiedera'. Dovreste tenere FixRas in RAS: magari per non devastare aree di memoria libera al momento del lancio. Esempio Startup-Sequence ------------------------ Se volete che RAS venga attivata automaticamente ad ogni reset dovete cambiare la Startup-Sequence. Esempio per 2.0+: FAILAT 25 GoRas SET rasret $rc ECHO "RAS return: $rasret" IF VAL $rasret GE 10 ECHO "RAS error" ; ferma la startup-sequence e controlla il contenuto di RAS FindCorrupted RAS: QUIT ELSE IF VAL $rasret GE 5 ; copiate i vostri file in RAS, per ora e' vuota ECHO "RAS e' vuota" MAKEDIR RAS:t ; crea la directory T: PROTECT RAS: +p ; abilita il checksum dei file MAKEDIR RAS:c ; crea la directory C: ; rende qualche comando residente in RAS LoadRas RAS:c c:dir c:list c:delete c:rename c:filenote c:protect ELSE ; RAS e' sopravvissuta al reset senza problemi ; la Startup-Sequence puo' continuare ECHO "RAS OK" ENDIF ENDIF FAILAT 20 ; o quello che preferite ASSIGN C: RAS:C ADD ASSIGN T: RAS:T Questo script per 2.0+, che potreste imitare nella vostra Startup-Sequence, monta RAS e controlla il livello d'errore restituito da GoRas. Se e' >= 10 (ERROR), lo script termina dopo aver chiamato FindCorrupted. Se e' >= 5, si tratta del primo boot (oppure del fatto che la RAS non e' sopravvissuta al reset) e RAS viene inizializzata. Dapprima, crea la directory RAS:t. Poi, Protect abilita il checksum di tutti i file in RAS (tuttavia, i file in RAS:T non saranno controllati perche' RAS:t e' stata creata prima di questo comando). Poi lo script crea la directory RAS:c e vi carica dei programmi residenti, cioe' DIR, LIST, DELETE, RENAME, FILENOTE e PROTECT. Ovviamente, se volete potete caricare altri programmi. Poi assegna C: a RAS:C e T: a RAS:T. Un file analogo viene copiato nella directory S: dal programma di installazione. Potete quindi inserire verso l'inizio della Startup-Sequence il comando: Execute S:RASStartup.20 Se volete qualcosa di meno complicato da usare anche sotto 1.2/1.3, potete usare: FAILAT 20 GoRas IF WARN ; copiate i vostri file in RAS, e' vuota ECHO "RAS is empty" MAKEDIR RAS:t ; crea la directory T: PROTECT RAS: +p ; abilita il checksum dei file MAKEDIR RAS:c ; crea la directory C: ; caricate qualche file residente in RAS a vostra scelta LoadRas RAS:c c:dir c:list c:delete c:rename c:filenote c:protect ENDIF ASSIGN C: RAS:C ASSIGN T: RAS:T Un file analogo viene copiato nella directory S: dal programma di installazione. Potete quindi inserire verso l'inizio della Startup-Sequence il comando: Execute S:RASStartup.13 Per usare RAS come RAM:, dovete usare: GoRas RAM: REMOUNT e cambiare RAS: con RAM: nello script. Bug Noti -------- L'opzione REVERSE di OttRas puo' generare un crash quando la memoria e' poca e non c'e' Fast. Il menu di boot del 3.0 puo' evidenziare degli strani caratteri in un campo destinato a RAS. Non dovrebbe causare problemi. Se tentate di stabilire la velocita' di RAS: mediante SysInfo (opzione Drives/Speed) andrete incontro a una guru metitation. L'errore e' di SysInfo. Supporto -------- Via Email: Romano Tenca Fidonet 2:331/301.14 Internet Romano.Tenca@p14.f301.n331.z2.fidonet.org Ringraziamenti -------------- Ringrazio soprattutto Matteo Tenca per l'intenso lavoro di beta testing e poi tutti gli altri, fra cui Domenico Pavone, per l'aiuto fornito. Ringrazio inoltre BBS2000 e il suo sysop Vertigo. Autore ------ Sun Oct 23 16:08:48 1994 Romano Tenca Fidonet 2:331/301.14 Internet Romano.Tenca@p14.f301.n331.z2.fidonet.org Romano Tenca Via Ripamonti 286 20141 Milano Italy --- This is the end ---