---------------------------------------------------------
|TESINA DI ARCHITETTURA DEGLI ELABORATORI (LABORATORIO) |
---------------------------------------------------------
|| di Mirko MANEA (IN000071) ||
|| ||
|| Università degli Studi di VERONA ||
|| ||
|| A.A. 1993/1994 ||
--------------------------------------
||Data progetto: Maggio / Giugno '94||
--------------------------------------
Codice sorgente: fview.asm
Documentazione: fview.doc
Eseguibile dos: fview.com
------------------------------------------
1. Introduzione
------------------------------------------
Questa programma e' un semplice visualizzatore di files, siano essi in
formato ASCII o binario. Praticamente e' un clone del comando dos type, ma
in piu' offre la possibilita' di fermarsi ad ogni pagina (tipo il filtro
MORE) e non dipende dal carattere di fine fine (EOF). Cio' significa che
la visualizzazione non si basa sul CTRL-Z (1AH), ma sulla lunghezza del file.
------------------------------------------
2. Descrizione dei programmi utilizzati
------------------------------------------
Per la stesura del programma e' stato utilizzato l'ambiente MACRO, con la
libreria GIOBE.LIB e le macro GIOBE.MAC.
Il programma e' stato steso utilizzando la maschera standard per la creazione
di file .COM di tipo NEAR.
------------------------------------------
2.1 Le varie procedure
------------------------------------------
Qui di seguito sono presentate le procedure piu' importanti, ossia quelle
che non sono costituite da soli interrupts del DOS o del BIOS.
Viene riportata solo la descrizione e il funzionamento delle routine, dato
che un commento piu' dettagliato si trova nel file .ASM stesso.
------------------------------------------
2.1.1 Procedura FLeggi
------------------------------------------
Questa procedura legge il filename e lo mette nella locazione di memoria
puntata da FNAME. Il tutto avviene tramite il servizio di lettura bufferiz-
zata di una stringa (servizio 0AH, int 21H). Data la struttura della stringa
che poi ne viene prodotta (FNAME -> numero caratteri, numero caratteri effet-
tivamente letti, stringa, CR), e' necessario porre degli spazi dopo la
stringa per eliminare il CR e aggiungere il "tappo" alla fine (00H).
La stringa cosi' modificata e' pronta per essere usata per aprire il file.
------------------------------------------
2.1.2 Procedura StpFILE
------------------------------------------
Questa routine nasce dal fatto che i dati sono memorizzati su disco in
modo sequenziale, con tutti i codici di controllo (CR, LF, TAB), e la stampa
a video ne richiede necessariamente una corretta interpretazione. In questo
senso, quando nella scansione del BUFFER di lettura si trova un CR, auto-
maticamente si procede con il portare il cursore alla colonna 0 (carriage
return) e a fare un avanzamento di riga (line feed). In questo modo non si
controlla mai la presenza di un LF, in quanto un CR implica sempre un LF.
Per quanto riguarda invece il problema del TAB, la questione e' stata risolta
assumendo un TAB = 8 spazi bianchi, e a seconda della colonna in cui e' stato
riscontrato, si ha il posizionamento del cursore alla piu' vicina occorrenza
della tabulazione (colonne 8, 16, 24, 32, 40, 48, 56, 64, 72). Questo ultimo
compito e' assolto dalla procedura CHK_TAB.
------------------------------------------
2.1.3 Procedura CLEAR1
------------------------------------------
La procedura CLEAR1 serve per pulire la pagina video corrente. Questa
scelta viene dettata dal fatto che cambiare la modalita' video per eseguire
un clear screen e' un po' piu' lento che pulire la pagina video. Il probelma
nasce dal fatto che quando si scorre il testo velocemente, bisogna avere una
cancellazione veloce del video, affinche' si eviti di dare all'utente una
sgradevole sensazione. Inoltre cancellando in questo modo si puo' mantenere
la cornice che delimita la pagina di testo dal bordo del monitor.
------------------------------------------
2.1.4 Procedura Aspetta
------------------------------------------
Questa routine serve per inserire una pausa che consenta di far visualiz-
zare i messaggi. In questa procedura viene utilizzato il timer di sistema
per mezzo del servizio AH=00, INT=1AH, che restituisce i ticks trascorsi
dall'ultimo re-boot della macchina. In modo approssimativo ma pratico, si
ha che 18 ticks sono uguali a 1 secondo.
Ottenuti i ticks, questi vengono sommati a una quantita' definita (12H=18=
=1 secondo), poi si va a leggere alla locazione 0000:046C (ticks attuali)
e finche' i due valori non sono uguali si continua a ciclare a vuoto creando
la pausa richiesta.