This file contains the answers to some commonly asked questions about the programming language Modula-2.
Last-modified: 2003 03 26
Modula-2 Frequently Asked Questions Part 2
4. WHERE CAN I GET SOURCE CODE, OTHER INFO?
4.1.1 Is there source or other info available on the net?
A. Here are some net sites I have accessed at one time or another. I
am not sure if all are still available or what is in them.
ftp://ftp.psg.com/pub/modula-2/http://www.arjay.bc.ca/Modula-2/m2faq.html ( Home of this FAQ)
4.2 What other FAQs or lists of pages are available?
4.3 Where can I find graphics libraries, etc?
A. Try the PMOS library for various platforms at one of the following sites:
ftp://ftp.psg.com/pub/modula-2/code (North America)
ftp://cs.ru.ac.za/pub/languages (South Africa)
ftp://dutiba.twi.tudelft.nl/pub/modula2 (Western Europe)
ftp://ftp.cnit.nsu.ru/pub/msdos/programm.ing/modula2 (Eastern Europe).
4.4 Are there any mathematical libraries available?
A1. See Numerical Procedures in Modula-2 -- authorized translation of
Numerical recipes in Pascal from PolyWare (Klara Vancso):
email@example.com (work) OR firstname.lastname@example.org (home) The CD-ROM has
the Modula-2 sources. See http://www.nr.comNote that sources given in
this book are of the "quick and dirty" variety and cannot be sold as
such, only in compiled form.
A23. LMathLib is a library that defines a number of mathematical
functions for Modula 2 programs. Unlike other libraries of the same
kind, LMathLib patches the Modula 2 compiler. All library functions
are inlined as assembler code for the Floating Point Unit. This
results in faster code compared to the traditional solution with
subroutine calls. Due to this machine dependent technique, you can
use the library ONLY with the (free) GMD Modula System Mocka for
Linux on INTEL based machines. You can get the LMathLib library via
anonymous ftp from
A3. MATHPAK 87/32 is available for most 32-bit compilers. A lite
version for Canterbury M2 is freely downloadable from
Written fully in INTEL CPU machine language
Math Coprocessor control
Basic Math functions
Vector and Vector-Scalar Routines
Vector and Vector-Scalar 'Skip' Procedures
Complex Number Routines
Complex Vector and Vector-Scalar Routines
Polynomial Manipulation Routines
Simple Matrix and Vector-Matrix Routines
Solving Systems of Linear and Nonlinear Equations
Nonlinear Least-Squares Minimization
Eigenvalues and Eigenvectors
Singular Value Decomposition
Extrapolation of Vector-Sequences
Statistical and Data-Fitting Rountines
Fourier Transforms and Convolution
Spectral Analysis Routines
4.5 Where can I get a Modula-2 to C converter?
A: The program mtc is available from
An already ported version for DOS+DJGPP can be found at
Several of the compilers available work or can work by producing C or
C++ code and can also serve this purpose. See p1, XDS and Ulm's m2c
(not the same as mtc) listings for examples.
4.6 Where can I get a Modula-2 to Modula-3 converter?
A. m2tom3 is available under the terms of the GNU Library General
Public License from
m2tom3 is a system to port Modula-2 programs to Modula-3. It consists
of two parts:
- A conversion program which tries to create a Modula-3 source text
with the same semantics as the Modula-2 input while retaining the
original look and feel as good as possible.
- A base library which tries to emulate the Modula-2 standard library
using the Modula-3 standard library.
contact: Peter Klein
office: Ahornstrasse 55, 52074 Aachen, Germany
4.7 Where can I get a Modula-2 to Component Pascal converter?
A.This is available from http://www.lrz.de/~Bernhard_Treutwein/m2o.txt
Note: Component Pascal is an Oberon dialect, but the translator does
not use any CP specific features, i.e. generates standard Oberon-2.
4.8 Are there any Modula-2 applications around?
A. The Idaho National Engineering Laboratory (INEL) develops and
maintains a now
~350,000 line MODULA-2 reusable component library called SAGE. For
more information on SAGE send E-Mail to email@example.com or see
the web site at http://sage.inel.gov/homepage.htm
4.9 Are there any compiler construction tools available?
A1. Some old ones appear in ftp://ftp.gmd.de/GMD/cocktail/
A2. Coco/R generates recursive descent parsers and their associated
scanners from attribute grammars. Full source code, and a variety of
simple example applications are supplied in the distribution kits.
The Modula versions (1.50 is the latest) are available from
ftp://ftp.ssw.uni-linz.ac.at/pub/Coco/ and the Java versions are
there too, at ftp://ftp.ssw.uni-linz.ac.at/pub/Coco/javacoco.htm
There are versions for the MS-DOS compilers (JPI, FST, Logitech,
StonyBrook, Gardens Point), for the Mocka compiler for Linux and
FreeBSD, as well as for the Gardens Point Unix compilers, including
Linux and FreeBSD. There is also a version that produces TurboPascal
units very similar to the Modula-2 modules. This is also FreePascal
compliant now. A port for the p1 compiler on the Mac is also
available. Latest information is available at
http://cs.ru.ac.za/homes/cspt/cocor.htm. Pat Terry's textbook
"Compilers and Compiler Generators" that uses Coco/R is now online at
A2. A copy of the EBNF for ISO Modula-2 can be found in Appendix 3 at:
4.10 Does anyone know of a lexical analysis tool that is written in
Modula-2 and for Modula-2 code?
A.You want rex, part of Cocktail (also ll and lalr parser generators,
abstract syntax trees, attribute grammar evaluators, tree. Free
Commercial version and support:
Dr.-Ing. Josef Grosch Tel. : 0721-697061
CoCoLab Fax : 0721-661966
Hagsfelder Allee 16 EMail : firstname.lastname@example.org
4.11 Is there an applications framework for Windows programming?
A. Try looking at
This software is an application framework that implements a number of
classes that encapsulate the weirdness of the Windows C API and
attempts to present it in a cleaner way to the Modula-2 programmer.
4.12 Does there exist something to convert a C header file to a
Modula-2 DEFINITION MODULE file for me?
A. Try looking at the XDS Ltd site for the H2D freeware product on
4.13 Where can I get the C code of a Modula-2 compiler?
A. Most Modula-2 compilers are written in Modula-2. It seems
rather strange to me that one would want to trust the compilation of a
good language to a tool written in a poor one.
4.14 What can I do with old sources from Modula Corp?
A. From the former president Richard Ohran (ROhran@vinca.com):
"Modula Corp. is dead. Do whatever you like."
4.15 Are there source code examples anywhere for Windows programmers?
A. Translations of Example Programs in Charles Petzold's book
"Programming Windows 95" from Visual C++ to Stony Brook and XDS
Modula-2 by Peter Stadler, Vienna can be found at:
4.16 Isn't there a Modula-Prolog project somewhere?
A. Try ABB Corporate Research and Carlo Muller, who may license it to
you for non-commercial purposes. mailto:email@example.com
4.17 Is C. Lins SCL library available?
A. Yes, at
4.18 Can you help me with my assignments?
A1. Some people may give you hints, but please do not subvert your
professor and your education by submitting work other people do for
A2. Here are two answers submitted to the newsgroup in response to a
desperate student's plea for ANY Modula-2 program. The first is
rather prosaic; the second a little more imaginative:
STextIO.WriteString ("I will do my own homework.");
for(i=0; i<!-- i++)
printf("I will do my own homework.\n");
Followup Question: Is that Modula-2? I just finished my first course
in Modula-2 and that don't look at all familiar. I'm not looking
forward to the final exam.
A. (Pat Terry) Computer Science changes sooo rapidly. Haven't you
discovered Modula-2++ yet?
5. SPECIFIC QUESTIONS ON CODE AND ALGORITHMS
5.0 Where can I get general information on algorithms?
A Try the site http://www.cs.sunysb.edu/~algorith/
5.1 Where can I get an algorithm for an efficient
A1. Pierre L'Ecuyer: Efficient and Portable Combined Random Number
Generators, Communications of the ACM, vol. 31, no. 6, pp. 742-749.
The RNG has a period of approximately 2.3E+18. Generating 1 000 000
numbers per second, that means that it would take over 73 000 years
before it repeated a sequence.
A2.Look in the PMOS library. This one uses the 'Minimal standard
random number generator' described by Park & Miller, CACM 31,10,Oct
88 p1192. The code has been checked for the 10001st random as
specified in Park & Miller p1195. One site is:
A3. A pseudo random generator using the subtractive method taken from
Knuth, Seminumerical Algorithms, 3.2.2 and 3.6, belongs to Ulm's
Modula-2 System that is distributed under the terms of the GPL (and
in case of the library under the terms of the LGPL). More
informations may be found at
5.2 How can I prevent NIL pointer errors?
A.First guard your reference by writing
IF (myPointer # NIL) AND (myPointer^.fieldname =)...etc.
Because Modula-2 has short circuited Boolean expression evaluation,
the first part guards the second from being evaluated
inappropriately. Then, take the radical, unC-like step of checking
your code design for the logical error that led to the incorrect
reference in the first place.
5.3 Why doesn't my IF statement compile?
A.See the example in the last subsection. Boolean expressions must
be delineated with parentheses.
5.4 Can I assume numeric variables are set to zero and Booleans to FALSE?
A. No. The values of variables are random until your code sets them.
Declaring does not initialize.
5.5 Why do conversions from real to whole types sometimes crash?
A.You need to protect your conversion code by using MAX (TYPE) and
MIN (TYPE) which are part of the ISO Modula-2 base language.
5.6 Does a CASE statement always need an ELSE clause?
A. No, but it's not a bad idea, even if you think you have covered
all the cases. If you have, a good compiler might optimize your code
away, but if you haven't, you could be in for trouble.
5.7 What are the system types to which all other parameters are compatible?
A.Just LOC and ARRAY OF LOC (one dimension). This does not work for
multidimensional arrays of LOC, and there are no defined BYTE and
WORD types, though implementations may include them as well.
5.8 How do I control the serial port, mouse, network card, TCP/IP or
other communications protocol or peripheral?
A.These are system dependent, and no modules for this can be found in
the standard. A vendor MAY supply them. Ask.
5.9 Does the object model for OO-Modula-2 have garbage collection or not?
A. BOTH traced (collected) and untraced (roll your own memory
management) objects are available.
5.10 What is the arity of inheritance for OO-Modula-2?
A. Single inheritance only.
5.11 What do you use the generic extensions for?
A. These allow you to write code for structures such as lists or
queues, or for routines such as a sort, without initially specifying
the data types that are in the structure or the target of the
routine. The initial module is called a generic module. Such modules
can be refined for the specific data types by a refining separate
module (library) or a refining local module.
5.12 How do I clear the screen?
A. This non-standard functionality may be present in a module called Terminal.
5.13 How do redirect screen and keyboard I/O?
A. This non-standard functionality may be present in a module called
InOut or (in an extension to ISO versions) in RedirStdIO. The
procedure to use is OpenInput (or OpenOutput). Unfortunately these
behave differently in every version (one of the reasons we built a
standard). Some versions produce a prompt at runtime, others take a
file name. The latter may or may not require a file extension. They
may look for the name as you have provided it and if they don't find
it, try with the default extension .txt Others have a way of entering
the extension. You will have to consult the documentation.
6. WHAT ARE SOME REFERENCE MATERIALS ON MODULA-2?
A1. A shareware text I have written (and that MAY be the only
currently maintained English language instructional text on Modula-2)
is available. See section 1.4.
A2.The manuals for some of the commercial products contain much
A3. The Gardens Point sites have documentation available (see their
A4. A document called Modula-2 for Pascal programmers (Postscript,10
pages) may be fetched by anonymous ftp at
The author has not updated the contents for a couple of years, so
there may be inaccuracies in terms of the current language standard.
A5. A variety of ETH papers are stored at ftp.ftp.ethz.ch in
/doc/diss, /doc/tech-reports and /pub/oberon/docu
A6. What follows is a BIBLIOGRAPHY of some published materials in a
table delimited by two spaces between fields:
Author Title City Publisher Year Subject
Adams, J. Mack Gabrini, Philippe J & Kurtz, Barry L. An
Introduction to Computer Science with Modula-2 Lexington, MA D.C.
Heath & Co 1988
Backhurst, Nigel G. Mastering Modula 2 Wilmslow Sigma 1988
Beidler, John & Jackowitz, Paul Modula-2 Boston Prindle
Weber & Schmidt 1985
Blaschek, G. & Pomberger, G. Introduction To Programming
With Modula-2 Springer-Verlag 1990
Budgen, David Software Development with Modula-2 Reading,
MA Addison-Wesley 1989
Carmony, Lowell A. & Holliday, Robert L. A First Course In
Modula-2 New York Computer Science Press c1990
Carroll, D. W. Advanced Modula-2 Programming for the IBM PC
XT and AT Elsevier 1986
Chirlian, Paul M. Introduction to Modula-2 Beaverton, Or.
Christian, Kaare A guide to Modula-2 New York Springer-Verlag 1986
Cooling, J.E. Modula-2 for Microcomputer Systems Van
Nostrand Reinhold 1988
Cooper, Doug Oh My! Modula-2! New York Norton 1990
Cornelius, Barry Programming with TopSpeed Modula-2
Reading, MA Addison Wesley 1991
Eisenbach, Susan & Sadler, Cristopher Program Design with
Modula-2 Reading, MA Addison-Wesley 1989
Elder, Jim Compiler Construction: A Recursive Descent model
Hemel Hempstead England: Prentice-Hall 1994
Etling, Don Modula-2 Programmer's Resource Book Blue Ridge
Summit, PA Tab Books 1988
Feldman, Michael B. Data Structures with Modula-2 Englewood
Cliffs, NJ Prentice Hall 1988
Ford, Gary & Wiener, Richard. Modula-2: A Software
Development Approach New York Wiley 1985
Gabrini, Philippe J. & Kurtz, Barry L. Data Structures And
Algorithms With Modula-2 Lexington, MA DC Heath c1992
Gleaves, Richard Modula-2 for Pascal Programmers New York
Gough, K. John & Mohay, George M. Modula-2: A Second Course
In Programming Englewood Cliffs, NJ Prentice Hall 1988
Greenfield, Stuart B. Invitation to Modula-2 Petrocelli Books 1985
Harrison, Rachael Abstract Data Types in Modula-2 New York
Wiley 1989 Wiley
Harter, Edward D. Modula-2 Programming. A First Course
Englewood Cliffs, NJ Prentice-Hall 1990
Helman, Paul & Veroff, Robert Walls and Mirrors:
Intermediate Problem Solving and Data. Modula-2 Menlo Park, CA
Benjamin Cummings 1988
Hewitt, Jill A. & Frak, Raymond J. Software Engineering in
Modula-2: an object-oriented approach London Macmillan 1989.
Hille, R.F. Data Abstraction and Program Development Using Modula-2
Sydney Prentice Hall 1989
Hopper, Keith. The Magic of Modula-2 Melbourne Prentice Hall 1991
Johnston, Chris Applying Modula-2 Academic Press 1991
Jones, William C. Jr. Data Structures Using Modula-2 New
York Wiley 1988
Jones, William C. Jr. Modula-2 Problem Solving and
Programming with Style New York Harper & Row 1987
Joyce, Edward J. Modula-2: A Seafarer's Manual & Shipyard
Guide Reading, MA Addison-Wesley 1985
Kaplan, Ian & Miller, Mike Modula-2 Programming Rochelle
Park, NJ Hayden Book Co. 1986
Kelly-Bootle, Stan Modula-2 Primer Howard W. Sams & Co. 1987
King, K.N. Modula-2: A Complete Guide Lexington, MA D.C.
Heath & Co 1988
Knepley, Ed & Platt, Robert Modula-2 Programming Reston, VA
Reston Pub. Co. 1985
Koffman, Elliot B. Problem Solving and Structured
Programming in Modula-2 Reading, MA Addison-Wesley 1988
Kruse, Robert L. Programming With Data Structures Modula-2
Version Englewood Cliffs, NJ Prentice-Hall 1988
Lawrence, Mike Modula-2 And The Amiga Avant-Garde Software 1990?
Leestma, Sanford & Nyhoff, Larry Programming &
Problem-Solving in Modula-2 New York Macmillan 1989
Lins, C. (Charles) The Modula-2 Software Component Library
Volumes I-IV New York Springer-Verlag 1989-
Mayer, Herbert G. Programming in Modula-2. the Art & the
Craft New York Macmillan 1988
McCracken, Daniel D. & W. Salmon A Second Course in Computer
Science with Modula-2 New York Wiley 1987
Messer, P. A. & I. Marshall Modula-2 Constructive Program
Development Oxford Blackwell Scientific Publications 1986
Metrowerks, Inc. Staff Metrowerks Modula-2 Start Pak New
York Macmillan 1990
Mitchell, R. J. Modula-2 Applied London Macmillan 1991
Mitchell, Richard Abstract Data Types And Modula-2 A Worked
Example Of Design Using Data Abstraction Englewood Cliffs, NJ
Prentice Hall 1992
Moore, John B. & McKay, Kenneth N. Modula-2 Text and
Reference Englewood Cliffs, NJ Prentice-Hall 1987
Novak, M.M. Modula-2 in Science & Engineering London McGraw 1990
Nyhoff, Larry & Leestma ,Sanford Data Structures & Advanced
Programming in Modula-2 New York Macmillan 1990
Ogilvie, John W. L. Modula-2 Programming New York McGraw-Hill 1985
Pinson, Lewis Sincovec, Richard & Weiner, Richard A First
Course in Computer Science with Modula-2 New York Wiley 1987
Pittman, Thomas & Peters, James The Art Of Compiler Design
Theory And Practice Englewood Cliffs, NJ Prentice-Hall 1992
Pomberger, Gustav. Software Engineering and Modula-2
Englewood Cliffs, NJ Prentice Hall 1984
Rechenberg, P. & Mössenböck, H. (tr. O'Meara, John) A
Compiler Generator for Microcomputers Englewood Cliffs, NJ Prentice
Hall / Carl Hanser Verlag 1989
Riley, David D. Data Abstraction and Structures: An
Introduction To Computer Science II Boston Boyd & Fraser Pub. Co.
Riley, David D. Using Modula-2: An Introduction To Computer
Science I Boston Boyd & Fraser Pub. Co. 1987
Sale, Arthur H. J. Modula-2: Discipline & Design Sydney
Sawyer, Brian & Foster, Dennis. Programming Expert Systems
in Modula-2 New York Wiley 1986
Schildt, Herbert Advanced Modula-2 Berkeley, CA Osborne
Schildt, Herbert Modula-2 Made Easy Berkeley, CA Osborne
Schiper, Andre; (tr. Howlett, Jack) Concurrent programming:
Illustrated With Examples in Portal, Ada, and Modula-2 Halsted
Schnapp, Russell L. Macintosh Graphics in Modula-2
Englewood Cliffs, NJ Prentice-Hall 1986
Sincovec, Richard F. & Richard S. Wiener. Data Structures
Using Modula-2 New York Wiley 1986
Sincovec, Richard F. & Wiener, Richard S. Modula-2 Software
Components New York Wiley 1987
Stubbs, Daniel F. & Webre, Neil W. Data Structures With
Abstract Data Types and Modula-2 Monterey, CA Brooks/Cole Pub. Co.
Sutcliffe, Richard J. Introduction to Programming Using
Modula-2 Columbus, OH Merrill 1987
Sutcliffe, Richard J. mailto:firstname.lastname@example.org. Modula-2:
Abstractions for Data and Programming Structures (Using ISO-Standard
Modula-2) Mt. Lehman: Arjay Enterprises 1996-2000.
http://www.arjay.bc.ca (1996 09 16)
Sutcliffe, Richard J. Standard Generic Modula-2 (Document
ISO/IEC/JTC1/SC22/WG13 D235) 1996 07 12
ftp://FTP.twu.ca/pub/modula2/WG13/ca101.GenericModula2CD(1996 09 16)
Sutherland, Robert J. The Professional Programmer's Guide to
Modula-2 London Pitman 1988
Terry, Patrick D. An Introduction To Programming with
Modula-2 Reading, MA Addison-Wesley 1987
Thalmann, Daniel Modula-2: An Introduction New York
Tremblay, Jean-Paul DeDourek, John M. & Daoust, David A.
Programming in Modula-2 New York McGraw-Hill 1989
Tucker, Allen B. Jr. Computer science: A Second Course Using
Modula-2 New York McGraw-Hill 1988
Ullmann, Jeffrey Compiling in Modula-2 - A First
Introduction To Classical Recursive Descent Compiling Hemel
Hempstead England: Prentice-Hall 1994
Ural, Saim & Ural, Suzan Introduction to Programming with
Modula-2 New York Harper & Row 1987
Walker, Billy K Modula-2 Programming With Data Structures
Belmont, CA Wadsworth Pub. Co. 1986
Walker, Robert D. Modula-2 Library Modules: A Programmer's
Reference Blue Ridge Summit, PA Tab Books 1988
Ward, Terry A. Advanced Programming Techniques in Modula-2
Glenview, IL Scott Foresman 1987
Welsh, Jim & Elder, John Introduction to Modula-2 Englewood
Cliffs, NJ Prentice-Hall 1987
Wiatrowski, Claude A. & Wiener, Richard S. From C to
Modula-2--and Back - Bridging The Language Gap New York Wiley
Wiener, Richard Modula-2 Wizard's Programming Reference New
York Wiley 1986
Wiener, Richard & Ford, G. Modula-2 A Software Development
Approach New York Wiley 1985
Wiener, Richard & Sincovec, R. F. Software Engineering with
Modula-2 and Ada New York Wiley 1984
Willis, Claire & Paddon, Derek Abstraction And Specification
With Modula-2 London Pitman 1992
Wirth, Niklaus Programming in Modula-2 (3rd corrected ed.)
New York Springer-Verlag 1985
Wirth, Niklaus Algorithms and Data Structures (1986 edition)
Englewood Cliffs, NJ Prentice-Hall 1986
Wirth, Niklaus Programming in Modula-2 (4th ed.) New York
Woodman, Mark et al Portable Modula-2 Programming
Maidenhead, Berkshire UK McGraw-Hill 1989
7. REVIEWS OF MODULA-2 PRODUCTS.
Note: The reviews have been contributed by others and I take no
responsibility for their accuracy or for any opinions expressed
therein. I have updated some of the facts.
p1 Modula-2 v5.2 for Macintosh, by Marc Martin, Dec 1994.This is an
excellent Modula-2 compiler, implemented as an MPW Tool. Highlights
include ISO language extensions & library, a full set of Macintosh
toolbox definitions, language extensions to simplify toolbox
programming, object-oriented extensions and support for MacApp,
greater than 32k code and globals, code generation comparable to
Apple's official compilers, several FPU code options, multi-window
debugger, linkable with other MPW languages, detailed documentation,
and superb technical support via e-mail. Downsides include high cost
(US$400), dependency on MPW, lack of SADE support. Version 6.0 has
been released for creating PowerPC programs under MPW or CodeWarrier.
Appendix: AUTHOR INFORMATION AND DISCLAIMERS
Personal: I have used, written about, and taught Modula-2 (since
1983) and have maintained some of the information in this list for
over seven years. I have used at least a dozen different
compiler/environments in that time on five different platforms, and
have written numerous articles and reviews for publication. I have
been a member of the ISO committee WG13 (Modula-2 standardization)
since its inception and have participated in all the debates and
meetings of WG13 except for meeting #9 at Lake Wanaka. I have written
a text on Modula-2 (now shareware), made numerous submissions to WG13
and directed an implementation of the ISO I/O library in order to
verify its concepts. I am the author and project editor of Standard
(i) I take no responsibility for anyone's use or misuse of this information.
(ii) Apart from having been a beta tester, textbook writer,
programmer and a long time user of Modula-2, I have no financial
connection with any manufacturer or distributor of software. I am the
author of some Modula-2 materials (some of which are shareware) as
noted herein, and of various other books. Some manufacturers may
distribute my shareware on CD-ROM for a previously arranged fee, but
that is not an endorsement of their products by me or of mine by them.
(iii) In producing this material, I am NOT acting in an official
capacity for TWU, WG13, ABC, IEEE, ACM, comp.lang.modula2, or any
(iv) Mention of a book or product is NOT an endorsement unless
(v) Inclusion of materials on this list is based on relevance to
Modula-2 and factual content and is otherwise entirely without
prejudice. I reserve the right to edit all submissions for brevity,
clarity, and usage.
To remain authoritative, this and all versions of this FAQ are
copyright 1991-2002 by Rick Sutcliffe and Arjay Enterprises. This
document may be freely copied and distributed provided it is not
altered and no fee is charged with the exception of normal
downloading or copying costs.
Rick Sutcliffe (aka The Northern Spy in the old days)
Trinity Western University
7600 Glover Rd.,
Langley, B.C. Canada V2Y 1Y1
1 604 888-7511 Fax 1 604 513-2018
see my personal services web page at
Rick Sutcliffe Professor Math/Cmpt Trinity Western University. Try
<http://www.arjay.bc.ca> for Christian SF, books on Modula-2 and
Ethics in Technology. Philology site at <http://www.opundo.com>