home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d5xx
/
d512
/
m2pascal.lha
/
M2Pascal
/
src
/
scan.def
< prev
next >
Wrap
Text File
|
1991-07-20
|
3KB
|
120 lines
DEFINITION MODULE scan;
(*
* SCAN *
by - Greg Mumm
This module reads multiple symbols one by one on a per line basis.
Look-Ahead is possible and it can handle multiple files.
*)
FROM FileSystem IMPORT File;
CONST
StringMax = 161 ; (* 160 column support ( 2 lines ) *)
SPACE = ' ' ;
TAB = 11C ;
EOLN = 12C ;
Q1 = "'" ; (* single quote string *)
Q2 = '"' ; (* double quote string *)
LPAR = "(" ;
RPAR = ")" ;
TYPE
STRING = ARRAY [ 0 .. StringMax ] OF CHAR;
StringPtrType = POINTER TO STRING;
NameString = ARRAY [ 0 .. 255 ] OF CHAR; (* FileName *)
SymbolType = ( number, identifier, end, literal, blanks, other,
nothing );
(* This holds left margin information contained in the invisible
space before the first symbol.
*)
IndentArray = ARRAY [ 1..StringMax ] OF CHAR ;
(* Set 'DeleteFile' to TRUE if you want to automatically delete a file
if present. ( eg. when WRITING to a file ).
Set 'DeleteFile' to FALSE for normal READ operations.
*)
PROCEDURE OpenInFile ( FileName : NameString ;
DeleteFile : BOOLEAN ;
VAR successful : BOOLEAN );
PROCEDURE OpenOutFile ( FileName : NameString ;
DeleteFile : BOOLEAN ;
VAR successful : BOOLEAN );
PROCEDURE CloseAllFiles ();
PROCEDURE eof () : BOOLEAN;
PROCEDURE eoln () : BOOLEAN;
(* The following two procedures are used to detect eof and eoln
conditions WHEN READING AHEAD. Do NOT use the above procedures
when reading ahead.
*)
PROCEDURE EofAhead () : BOOLEAN;
PROCEDURE EolnAhead () : BOOLEAN;
(* eof OR eoln
*)
PROCEDURE HitABrickWall () : BOOLEAN;
(* Look-ahead buffer is full if this is set
*)
PROCEDURE TooFar () : BOOLEAN;
(* Normally after reading ahead, the following read-ahead will return NEW
unanalized data. ( Previous access is stored ). This proceedure will
allow the 2'nd read-ahead to read the same data read the first time.
A FastForward does the opposite of above. It will automatically signal
the next ReadAhead procedure to use new data regardless of whether the
previous access was a ReadAhead or just a Read.
*)
PROCEDURE rewind ();
PROCEDURE FastForward ();
PROCEDURE ReadLine (VAR indent : IndentArray ) : BOOLEAN;
PROCEDURE ReadAheadLine ( VAR indent : IndentArray ) : BOOLEAN;
PROCEDURE ReadSymbol ( VAR symbol : STRING;
VAR SymbolClass : SymbolType ) ;
PROCEDURE ReadAheadSymbol ( VAR symbol : STRING;
VAR SymbolClass : SymbolType );
(* Print currently processing line number to screen.
*)
PROCEDURE PrintLineNumber ();
PROCEDURE write (char : CHAR) ;
(* DEBUG *)
(* Print input line after we read it in.
*)
PROCEDURE DebugPrintLine ( Indent : IndentArray );
(* Print everything going to a file (write procedure above) to standard
output too.
*)
PROCEDURE DebugOutputToggle ();
END scan.