Newsgroup: it.comp.lang.pascal
Titolo: [CAC] E' pericoloso quando mi annio...

Ciao a tutti,
si sono ancora vivo... o almeno credo :D l'università è un noia 
mortale... { se mai è stata divertente } e oggi mentre stavo chiedendomi 
cosa stava dicendo la professoressa di IA { Inteligenza Artificiale } ho 
inizato a riflettere sul Assembler e sulla possibilità di fare un 
compliatore scritto in pascal e... beh ho inizato a scarabocchiare 
qualcosa... quindi beh tempo e noia permettendo intedo scrivere un 
compilatore x86 { a dire il vero vorre farlo anche a 64bit ma teniamoci 
bassi... }. Cosa ho fatto oggi? Niente :D Ma volevo avvertirvi che 
potresti ricevere altri post { con codice } a tal proposito se vi 
interessa beh i comenti, gli insuti e tutto il resto sono ben accetti. I 
post sono riconoscibili da tag "[CAC]". Per il momento ho solo fatto 
questa scandalosa "classe" inizamo con qualcosa di "soft"
Unit UFile;
interface
	Uses Objects;
	type
		TFile = object( TObject )
			private
				Source : Text;
				FIsOpen : Boolean;
			public
				constructor Init;
				destructor Done; virtual;
				procedure Close;
				function Eof : Boolean;
				function IsOpen : Boolean;
				procedure Open( FileName : String );
				function ReadLn : String;
				procedure Reset;
		end;
	function FileExists( FileName : String ) : Boolean;
implementation
	constructor TFile.Init;
	begin
		FIsOpen := False;
	end;
	destructor TFile.Done;
	begin
		Self.Close;
	end;
	procedure TFile.Close;
	begin
		System.Close( Source );
		FIsOpen := False;
	end;
	function TFile.Eof : Boolean;
	begin
		Eof := System.Eof( Source )
	end;
	function TFile.IsOpen : Boolean;
	begin
		IsOpen := FIsOpen;
	end;
	procedure TFile.Open( FileName : String );
	begin
		if FIsOpen then Close;
		if FileExists ( FileName ) then begin
			Assign( Source, FileName );
			Reset;
		end;
	end;
	function TFile.ReadLn : String;
	var Line : String;
	begin
		System.ReadLn( Source, Line );
		ReadLn := Line;
	end;
	procedure TFile.Reset;
	begin
		System.Reset( Source );
	end;
	function FileExists( FileName: String ): Boolean;
	var F: file;
	begin
		{$I-}
		Assign( F, FileName );
		FileMode := 0;  { Set file access to read only }
		Reset(F);
		Close(F);
		{$I+}
		FileExists := (IOResult = 0) and (FileName <> '');
	end;
end.
PS: c'è un errore chi lo trova ? :P
Io programmo in Trubo pascal 7, se programmassi in Delphi { o in FP } 
potrei usare strumenti più interessanti come le eccezzioni e le classi.
-- 
Il Razziatore,
The Only Good Windows is an uninstalled Windows
-----------------------------------------------
MSN   : 
IlRazz...@netscape.net
ICQ   : 67552596
Yhaoo : Razziatore82
-----------------------------------------------
Founder of MediaPlayer Project
http://mpp.iwebland.com

nn perdere tempo a scivere cose che gia' esistono...
prova ad arricchire invece quelle esistenti.....
ad esempio servirebbe una libreria in tp/fpc per dos
che consenta di nascondere/riabilitare il messaggio (da dos reale: non
da windows)
"inserire il disco nell'unita' ... e premere... per continure"
( e similmente : errore generale ... Annulla, riprova.....)
si deve usare l'int 24H
provaci e incolla il codice... dovrebbe esssre+semplice
 d scrivere un compilatore :)
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 
Quello che voglio fare non esiste fidati :) Altrimenti lo userei ma il 
vero motivo e che ho bisogno sia di un compilatore pascal particolare 
che un compilatore Assembler particolare. Il compilatore pascal è troppo 
impegnativo, ma per il momento faccio quello assembler...
Prima o poi faro anche quello che è il mio vero intento :) Credi che sia 
una perdità di tempo? NOn leggere i mei post :)


Se fai un giro su sourceforge troverai vari compilatori pascal ed 
assembler già pronti con sorgenti.

 assembler già pronti con sorgenti.
Lo so... ma non vanno bene per i miei scopi... quindi devo scrivermelo 
da me... ma poi cavolo... mi voglio diverire a scrivere un 
compilatore... che c'è di male in questo?


>che consenta di nascondere/riabilitare il messaggio (da dos reale: non
Cosa intendi per nascondere? L'int 24h viene invocato automaticamente in 
seguito ad un errore critico DOS. Se lo vuoi evitare devi evitare in 
primo luogo l'errore critico (ad esempio controllando se il drive č 
accessibile prima di accedervi).
In alternativa si puň scrivere un gestore dell'errore ed installarlo.
MOV AL, 3
IRET
"fallisce silenziosamente" la chiamata. Si possono fare gestori piů 
complessi, ma ci sono certi limiti alle chiamate che si possono fare 
dall'interno del gestore:
http://www.arl.wustl.edu/~lockwood/class/cs306/books/artofasm/Chapter_19/C
H19-2.html
Luigi D. Sandon - D&amp;D Support Team
--- posted by geoForum on 
http://www.delphiedintorni.it

 un compilatore... che c'è di male in questo?
Nulla. E non sei tenuto a dare nessuna giustificazione. Se ci fosse
anche l'unico pro di imparare qualcosa in più, tanto basta.
Poi si sente che mancano i fondi per l'innovazione. A me pare che
manchi la spinta da parte degli innovatori. Bah..!
-- 
« Invento ergo sum »
[G]reedy[F]ly aka Shuren @ 
irc.azzurra.org
Powered by Slackware Linux
Linux User #283140
GPG: 
http://xoomer.virgilio.it/greedyfly/directory/michele.asc


L'erorre sta nel metodo "open" infatti manca l'istruzione FIsOpen := True;
     procedure TFile.Open( FileName : String );
     begin
         if FIsOpen then Close;
         if FileExists ( FileName ) then begin
             Assign( Source, FileName );
             Reset;
             FIsOpen := True; { Istruzione mancante }
         end;
     end;
Beh l'errore non era poi cosi grave.
