---------------------------------------------------------
        |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.