322 lines
8.0 KiB
Plaintext
322 lines
8.0 KiB
Plaintext
Hi minixers and pascalers,
|
|
here comes the first public pascal compiler and pascal debugger/interpreter
|
|
for Minix 16-Bit. It is developed for Prof. Dr. Tanenbaum's Minix 1.6.25,
|
|
1.6.30 and the newest version 1.7.0. It does NOT work under Minix 1.5.
|
|
This package is copyrighted by Henrik Quintel 1994, 1995 but you can give
|
|
the package away to your friends without anything. This package contains
|
|
no source code. But in the future all my publications will contain the source
|
|
code. I think this will happen, when I have 'learned' to program a compiler
|
|
which understands a OOP-language under a 16-Bit Operating-System like Minix.
|
|
I am working on it.
|
|
|
|
This package contains the following files :
|
|
-------------------------------------------
|
|
file what it is div.
|
|
-------------------------------------------
|
|
qpascal compiler executable
|
|
Qpas small driver shell script
|
|
qpascal_cpp preprocessor executabale
|
|
pas_as assembler executable
|
|
pas_ld linker executable
|
|
pas_ncrtso.o lib opject-code
|
|
paslib.o lib object-code
|
|
pas_libd.a lib object-code
|
|
pas_libc.a lib object-code
|
|
pas_libfp.a lib object-code
|
|
pas_libe.a lib object-code
|
|
pas_end.a lib object-code
|
|
pas_cv conversion executable
|
|
Qdb small driver shell script
|
|
qdebugger debugger /
|
|
interpreter executable
|
|
physik.pas testprogram pascal-source
|
|
README this file ascii-text
|
|
qpas man-page ascii-text
|
|
qdb man-page ascii-text
|
|
|
|
A very important thing is that the size of qdebugger is 20000.
|
|
If you are missing something in the package, please let me know immediately !
|
|
|
|
Not implemented are the following features :
|
|
Filehandling
|
|
Packed array
|
|
Packed records
|
|
'Set of'-construct
|
|
Here is an example to port a set-of construct to an array construct.
|
|
|
|
var a, b: set of [1..10]
|
|
|
|
=> const lwb=1; upb=10;
|
|
type set10 = array [lwb..upb] of boolean;
|
|
var a, b: set10
|
|
|
|
a:= (1; 4; 6);
|
|
=> for i:= lwb to upb do a[i]:= false;
|
|
a[2]:=true; a[4]:=true; a[6]:=true;
|
|
|
|
a:=a*b
|
|
=> procedure intersect(a,b:set10; var res: set10);
|
|
var i: integer;
|
|
begin
|
|
for i:=lwb to upb do res[i]:= a[i] and b[i];
|
|
end;
|
|
|
|
intersect(a, b, a);
|
|
...
|
|
|
|
How can you get the package ?
|
|
Make a ftp to ftp.cs.vu.nl
|
|
Directory : minix/pascal
|
|
set bin
|
|
set hash
|
|
set prompt
|
|
mget *
|
|
-------------------------------------------
|
|
On your system do the following:
|
|
(QCK = Quintel's Compiler Kit)
|
|
Then make a dirrectory in /usr (cd /usr ; mkdir pascal ; cd pascal)
|
|
Put the file QCK.tar there.
|
|
Uncompress the file. (uncompress QCK.tar.Z)
|
|
Then extract the tar file QCK.tar (tar xvf QCK.tar)
|
|
After extracting there are four directories :
|
|
1. compiler
|
|
2. debugger
|
|
3. test
|
|
4. man
|
|
|
|
In the first directory is the compiler and in the second the debugger.
|
|
Make (cd test). Here you find the file testsuite.tar.
|
|
Make (tar xvf testsuite.tar and you have extracted the testsuite.
|
|
So you can see how programming in pascal.
|
|
In the man directory is this file and the man pages.
|
|
|
|
Copy the following files in the mentioned directories
|
|
|
|
qpascal /usr/bin
|
|
Qpas /usr/bin
|
|
qpascal_cpp /usr/lib
|
|
pas_as /usr/lib
|
|
pas_ld /usr/lib
|
|
pas_ncrtso.o /usr/lib
|
|
paslib.o /usr/lib
|
|
pas_libd.A /usr/lib
|
|
pas_libc.A /usr/lib
|
|
pas_libfp.A /usr/lib
|
|
pas_libe.A /usr/lib
|
|
pas_end.A /usr/lib
|
|
pas_cv /usr/lib
|
|
Qdb /usr/bin
|
|
qdebugger /usr/bin
|
|
qpas /usr/man/man1
|
|
qdb /usr/man/man1
|
|
|
|
Of course you can install the files where you want. But then you have to
|
|
change all the PATH in Qpas and in Qdb.
|
|
|
|
IF YOU HAVE PROBLEMS WITH INSTALLING OR PROBLEMS WITH
|
|
COMPILING OR DEBUGGUNG/INTERPRETING YOUR PASCAL-PROGRAMS
|
|
SEND ME THE FOLLOWING FILES :
|
|
|
|
Your PASCAL-PROGRAM (hallo.pas)
|
|
The .qcpp file (hallo.qcpp)
|
|
The assembler output (hallo.as)
|
|
The object file (hallo.o)
|
|
If possible the outputfile (output)
|
|
|
|
TRY *******NNEEVVEERR********* to make changes inside the
|
|
OBJECT FILES WHICH ARE DISTRIBUTED.
|
|
|
|
If I have forgotten a file or have you any questions for
|
|
the standard-pascal or how to use, install the compiler, debugger/interpreter,
|
|
FEEEEEEL FREE and mail to me.
|
|
|
|
Example for the compiler (use the file physik.pas)
|
|
|
|
Starting the compiler :
|
|
Qpas physik (You do not have to write qpas newton.pas, but if you want so,
|
|
you can change it in qpas.)
|
|
|
|
Starting and working with the debugger :
|
|
(The words in the brackets are only commets by me)
|
|
|
|
qdb physik
|
|
(You will see the listing)
|
|
Command ? break 15 (Press Enter)
|
|
Command ? (Press Enter)
|
|
|
|
Enter new number (0 to quit) : 9 (Press Enter)
|
|
|
|
Breakpoint
|
|
At 15: If number = 0
|
|
|
|
Command ?
|
|
9.00000 3.0000
|
|
|
|
5.000000 66.67%
|
|
3.400000 13.33%
|
|
3.023530 0.78%
|
|
3.000092 0.00%
|
|
3.000000 0.00%
|
|
|
|
Enter new number (0 to quit) : (Press CTRL-C)
|
|
(Now you see a heart)
|
|
(Press Enter)
|
|
(There are two error messages - ignore them :-))
|
|
|
|
Command ? assign number := 16
|
|
|
|
Command ? show sqrt(number)
|
|
4
|
|
|
|
Command ? pi/number
|
|
|
|
****Error : undefinded identifier.
|
|
|
|
****Error : Incompatible types.
|
|
|
|
Command ? where
|
|
|
|
At 15: if number = 0
|
|
|
|
Command ? step
|
|
|
|
Command ?
|
|
|
|
At 15 if number = 0
|
|
|
|
Command ?
|
|
|
|
At 18: if number < 0
|
|
|
|
Command ?
|
|
|
|
At 22: sqroot := sqrt(number)
|
|
|
|
Command ?
|
|
|
|
At 23: writeln (number : 12 : 6, sqroot: 12 : 6)
|
|
16.000000 4.0000000
|
|
|
|
Command ?
|
|
|
|
At 24 : writeln
|
|
|
|
Command ?
|
|
|
|
At 26 : root := 1
|
|
|
|
Command ? unstep
|
|
|
|
Command ? trace
|
|
|
|
Command ? (Here you will see a lot of information)
|
|
...
|
|
Enter new number (0 to quit) : <13> 36
|
|
|
|
Breakpoint
|
|
At 15 : If number = 0
|
|
|
|
(Press CTRL-C like at the beginning of the session. You will see a heart)
|
|
(Press Enter)
|
|
|
|
Command ? untrace
|
|
|
|
Command ? store root
|
|
|
|
Command ? watch
|
|
Variables being watched:
|
|
root (store)
|
|
|
|
Command ? break
|
|
Statement breakpoints at:
|
|
15
|
|
|
|
Command ?
|
|
36.000000 6.000000
|
|
..... (There are a lot of stores now)
|
|
|
|
Enter new number (0 to quit) : 0
|
|
(Exit...)
|
|
|
|
Here are the commands for the debugger:
|
|
|
|
Command: break (number)
|
|
breakpoint at each one of them.
|
|
|
|
Command: break
|
|
Print the line numbers of all the breakpoints.
|
|
|
|
Command: unbreak (number)
|
|
Remove the breakpoint from the statement beginning on line (number).
|
|
|
|
Command unbreak
|
|
Remove all breakpoints from all statements.
|
|
|
|
Command: trace
|
|
Turn on statement tracing.
|
|
|
|
Command: untrace
|
|
Turn off statement tracing.
|
|
|
|
Command: entry
|
|
Turn on tracing of procedure and function entries
|
|
|
|
Command: unentry
|
|
Turn off tracing of procedure and function entries.
|
|
|
|
Command: exit
|
|
Turn on tracing of procedure and function exits.
|
|
|
|
Command: unexit
|
|
Turn off tracing of procedure and function exits.
|
|
|
|
Command: step
|
|
Turn on single-stepping
|
|
|
|
Command: unstep
|
|
Turn off single stepping
|
|
|
|
Command: fetch (variable)
|
|
store (variable)
|
|
watch (variable)
|
|
|
|
Command: show (expression)
|
|
Print the value of expression.
|
|
|
|
Command: assign (variable) := (expression)
|
|
(See example)
|
|
|
|
Command: where
|
|
Print the line number followed by the text of the statement to be executed next.
|
|
|
|
Killing the program
|
|
The kill command terminates the program execution.
|
|
|
|
Command: kill
|
|
|
|
If you have questions about the commands or the usage, mail to me.
|
|
|
|
At the moment I program :
|
|
an ansi c compiler
|
|
a modula-2 compiler
|
|
a new assembler / loader
|
|
a new lib
|
|
a forth interpreter
|
|
|
|
BTW, I make some brainstorming sessions to produce a compiler/interpreter
|
|
which understands the concepts of an OOP-language.
|
|
|
|
|
|
If you have ideas or tips, feel free and mail to me.
|
|
|
|
If someone has ideas or something else please write to me !
|
|
|
|
SPECIAL THANKS FOR SUPPORT TO THE FOLLOWING PERSONS :
|
|
Prof. Dr. Andrew S. Tanenbaum ast@cs.vu.nl
|
|
Kees J. Bot kjb@cs.vu.nl
|
|
|
|
--
|
|
quintel@nibelung.Worms.Fh-Rpl.DE | compilers for Minix
|
|
------------------------------------------------------
|
|
compilerwriters use cat > a.out ...
|