TML Pascal

TML Pascal for the Apple II gs was produced by TML Systems, Inc. in Colorado from 1987 to 1989.  The company ceased to exist when their offices burned down and all of the information apparently went with it except for copies of the program which had already been released.

Originally Paul Zaleski and Michael Stephens were the two people in the Apple II community who brought the TML Pascal system to light for the rest of us. Lim Thye Chean used it and extended the community by teaching TML pascal to his children who then went on to become globally recognized as app programmers at the age of 9.

According to Michael’s original website on 22 April 2009, “After some discussion with Vince M. Cooper, the legal copyright holder of Complete Pascal, I received the following email from Vince confirming Complete Pascal as being freely distributable:”

You are free to distribute as long as there is absolutely no charge to the user.
    - Vince

Since the websites which contained TML and Complete Pascal are no longer in existence, we have posted it here under the terms expressed by the copyright owner so that it remains available to the Apple II Community at large.



  • TML Pascal II – Reference Manual
  • TML Pascal – User’s Guide and Reference Manual
  • TML Pascal – Reference Manual Supplement
  • TML Pascal – License Agreement
  • TML Pascal – Errata Sheet

Complete Pascal 2.0 Disk Images

  • Complete Pascal 2.0

Older TML Pascal II Disk Images

  • TML Pascal II v1.1 – System Disk
  • TML Pascal II v1.1 – Source Code Library
  • TML Pascal V.1.5
  • TML Pascal V.1.5 – APW Version
  • TML Pascal V.1.5 – Source Code Library
  • TML Pascal V.1.0
  • TML Pascal V.1.0 – Source Code Library

Program Description (By Paul Zaleski)

Complete Pascal (formerly TML Pascal) is a native code Pascal compiler for the Apple IIGS which provides an elegant yet powerful programming environment that lets you write, edit, compile and run applications and desk accessories using the Apple IIGS Toolbox with incredible speed and simplicity, Complete Pascal also allows the programmer to write “textbook” programs which do not require knowledge or use of the Toolbox – an excellent means of learning Pascal. The language is solidly based upon the American National Standard for the Pascal Language with numerous extensions for programmers accustomed to other Pascal implementations, thus achieving the greatest amount of compatibility possible.

Complete Pascal is implemented as an integrated development environment which includes a multi-window mouse-based text editor, Pascal compiler, linker, and resource editor. The language supports separately compiled units, Pascal strings, random disk I/O, and standard subroutines such as MoveLeft, FillChar, etc. that are found in UCSD Pascal implementations such as Apple Pascal. Language features from the Macintosh version of TML Pascal such as type casting, bit operations, CYCLE and LEAVE statements, and many more are included.

Complete Pascal runs in full 16-bit native mode under GS/OS taking full advantage of the features and capabilities specific to the Apple IIGS. Unrestricted access from Pascal is provided to every routine of the Apple IIGS Toolbox as well as to GS/OS and its resources enabling programmers to develop stand-alone GS/OS applications (either text mode or graphical) as well as CDA and NDA desk accessories.

In addition to developing applications which take advantage of the Apple IIGS Toolbox, Complete Pascal allows you to develop “plain vanilla” or “textbox” applications. This feature enables you to enter programs directly from textbook examples and compile them. In this environment, Complete Pascal provides a 20 row by 80 column console window in Super Hi-Res 640 Mode which behaves as a standard CRT terminal.

In order to use Complete Pascal, you’ll need an Apple IIGS with at least 768k of memory, one 3.5″ disk drive, and GS/OS System 5.0.4 or higher. A hard disk is recommended. Complete Pascal is compatible with all known Apple IIGS emulators.

History (By Paul Zaleski)

Complete Pascal 2.0 is the final version of an Apple IIGS Pascal programming development system first created by TML Systems. The original version of this software, TML Pascal, was released in 1987. It further evolved into the GS/OS based TML Pascal II and later became Complete Pascal when Complete Technology, Inc took over development. Unfortunately, soon after the release of Complete Pascal 2.0 in 1991, the company closed its doors. The current status of the software is abandonware since Complete Pascal has not been offered for sale nor has the owner been heard from in over 15 years. Attempts to track him down have proven unsuccessful.

Following is a list of the known chronology of major revisions of this software:

  • TML Pascal 1.0  (1987)
  • TML Pascal 1.1  (1987)
  • TML Pascal 1.5  (1988)
  • TML Pascal II 1.0  (1989)
  • TML Pascal II 1.1  (1989)
  • TML Pascal II 1.5
  • Complete Pascal 1.0  (Essentially a rebadged TML Pascal II 1.5)
  • Complete Pascal 2.0  (1991)

Further Information

This information below is taken from the Appendix of the original TML Pascal v1.0 manual. There have been several revisions to the language since, however most of these still apply to Complete Pascal v2.0. For additional clarification see Appendix E of the TML Pascal II Reference Manual.

Comparing TML Pascal with ANS Pascal

This appendix compares TML Pascal with the American National Standard (ANS) Pascal as defined by ANSI/IEEE770X3.97-1983 in the book American National Standard Pascal Computer Programming Language (ISBN 0-471-88944-X, published by The Institute of Electrical and Electronics Engineers in New York).

Extensions to ANS Pascal

The following TML Pascal features are extensions to Pascal as specified by ANSI/IEEE770X.97-1983.

  • Additional reserved words in TML Pascal: body    interface    unit       implementation
    uses    otherwise    strings


  • An identifier may contain underscore characters after the first character.

  • Integer constants may be written in hexadecimal notation. Such constants are prefixed by a $.

  • String constants are compatible with the TML Pascal string types.

  • Label , constant, type, variable, procedure, and function declarations may occur any number of times in any order in a block

  • A signed constant identifier may denote a value of type Integer, LongInt, or Extended.

  • TML Pascal implements the additional integer type LongInt, and the additional real types Single, Double, Comp, and Extended.

  • Arithmetic operations on Integer operands produce Integer results. Arithmetic on LongInt operands or mixed Integer and LongInt operands produce LongInt results. LongInt values are compatible with the Integer type provided they are in the Integer range.

  • Arithmetic operations on real type operands or mixed integer type and real type operands produce Extended values. Extended values are compatible with the Single, Real, Double, and Comp, types provided they are in the range of those types.

  • TML Pascal implements string types, which differ from the packaged string types defined by ANS Pascal in that they include a dynamic length attribute that may vary during execution.

  • The type compatibility rules are extended to make char types and packaged sting types compatible with string types.

  • String type variables can be indexed as arrays to access individual characters in a string.

  • The type of a variable reference can be changed to another type though a variable type cast.

  • The relational operators can be used to compare stings.

  • TML Pascal implements the @ operator, which is used for obtaining the address of a variable or a procedure of function.

  • The type of an expression can be changed to another type though a value type cast.

  • The case statement allows an optional otherwise part.

  • TML Pascal implements Units, Unit Specifications and Unit Bodies to facilitate modular programming and separate compilation.

  • TML Pascal implements the following file handling procedures and functions, which are not available in ANS Pascal: Close    Rename      Seek
    Erase    IOResult    File Pos


  • String type values may be input and output with the Read, ReadLn, Write, and WriteLn standard procedures.

  • TML Pascal implements the following standard procedures and functions, which are not found in ANS Pascal: Exit    Length    Pointer     MoveRight   HiWord
    Halt    Cycle     Insert      MoveLeft    LoWord
    Ord4    Concat    SizeOf      ScanEQ      Inc
    Copy    Delete    FillChar    ScanNE      Dec
    Pos     Leave     IsToolError

Exceptions to ANS Pascal Requirements

  • In ANS Pascal, an identifier may be of any length and all characters are significant. In TML Pascal, an identifier may be of any length, but only the first 255 characters are significant. Note that most editors restrict line lengths to at least this length.

  • In ANS Pascal, the @ symbol is an alternative for the ^ symbol. In TML Pascal, the @ symbol is an operator.

  • In ANS Pascal, a comment may begin with { and end with *), or begin with (* and end with }. In TML Pascal, comments must begin and end with the same set of symbols.

  • In ANS Pascal, a file variable has an associated buffer variable, which is referenced by writing the ^ symbol after the file variable. In TML Pascal, a file variable does not have an associated buffer variable, and writing the ^ symbol after a file variable is an error.

  • In ANS Pascal, the statement past of a function must contain at least one assignment to the function identifier. In TML Pascal, this requirement is not enforced.

  • In ANS Pascal, a field that is the selector of a variant part may not be an actual variable parameter. In TML Pascal, this requirement is not enforced.

  • In ANS Pascal, procedures and functions allow procedural and functional parameters; these parameters are not implemented in TML Pascal.

  • In ANS Pascal, the standard procedures Reset and Rewrite take only one parameter, a file variable. In TML Pascal, Reset and Rewrite allow an optional second parameter, a string type expression, which names an external file.

  • ANS Pascal defines the standard procedures Get and Put, which are used to read from and write to files. These procedures are not defined in TML Pascal.

  • In ANS Pascal, the standard procedures Read and Write are defined in terms of Get and Put and are references to buffer variables. In TML Pascal, Read and Write function as in ANS Pascal, but they are automatic operations.

  • In ANS Pascal, the syntax New(p,cl,…,cn) creates a dynamic variable with a specific active variant. In TML Pascal, this variation of the New procedure is not allowed.

  • In ANS Pascal, the syntax Dispose(q,kl,…km> removes a dynamic variable with a specific active variant. In TML Pascal, this variation of the Dispose procedure is not allowed.

  • ANS Pascal defines the standard procedures Pack and Unpack, which are used to “pack” and “unpack” packed variables. These procedures are not defined in TML Pascal.

  • In ANS Pascal, a goto statement within a block may refer to a level in an enclosing block. In TML Pascal, this is an error.

  • In ANS Pascal, it is an error if the value of the selector in a case statement is not equal to any of the case consonants. In TML Pascal, this is not an error; instead the case statement is ignored unless it contains an otherwise clause.

  • In ANS Pascal, a Read from a text file with a char type variable assigns a blank to the variable if Eoln was True before the Read. In TML Pascal. a carriage return character (Chr(13) is assigned to the variable in this situation.

  • In ANS Pascal, a Read from a text file with an integer tupe or a real type variable ceases as soon as the next character in the file is not part of a signed-integer or a signed-number. In TML Pascal, reading ceases when the next character in the file is a blank, a tab or an end of line character.

  • In ANS Pascal, a Write to a text file with a packed string type causes the string to be truncated if the specified field width is less tan the length of the sting. In TML Pascal, the string is always written in full, even if it is longer than the specified field width.

Implementation Dependent Features

The effect of using an implementation dependent feature of Pascal, as defined by ANSI/IEEE770X3.97-1983, is unspecified. Programs should not depend on any specific path being taken in cases where an implementation dependent feature is being used. Implementation dependent features include:

  • The order of evaluation of index expressions in a variable reference.

  • The order of evaluation of expressions in a set constructor.

  • The order of evaluation of operands of binary operator.

  • The order of evaluation of actual parameters in a function call.

  • The order of evaluation of the left and right sides of an assignment.

  • The order of evaluation of actual parameters in a procedure statement.

  • The effect of reading a text file to which the procedure Page was applied during its creation.

  • The binding of variable denoted by the program parameters to entities external to the program.

The Complete PASCAL Press Release


May 20, 1991

Complete Technology, Inc.
Vince M. Cooper
2443 S. Colorado Blvd. Suite 221
Denver, Colorado 80222

Complete Technology, Inc. Announces
COMPLETE Pascal Version 2.0

Denver, Colorado: Complete Technology, Inc. announced the release of
COMPLETE Pascal version 2.0 today. This new compiler upgrade will begin
shipping on June 5th, 1991.

COMPLETE Pascal 2.0 upgrades many of the features found in Complete Pascal
1.0 (TML Pascal II), with major emphasis placed on the graphic based resource
editor. We believe this upgrade makes COMPLETE Pascal the most up to date
and full featured Pascal development environment now available for the Apple
IIGS computer, states Vince Cooper, president of Complete Technology.

COMPLETE Pascal 2.0’s new resource editor now fully supports virtually every
resource type defined for the Apple IIGS. New resource importing features
make it possible for a user to incorporate resources from various outside
sources, as well as to re-use resources created for use in other applications
created with the integrated editor.

The new resource editor contains full graphic Icon and Cursor Editors,
support for Picture controls, List controls, and several string controls not
supported by earlier versions of the software system. All string editors
have been rewritten making them simpler for a programmer to create and edit
all types of string controls. In particular the Alert/Error String editor
now fully supports all available options, including custom window sizes and
replacement strings. In addition, COMPLETE Pascal 2.0’s resource editor
allows most of the newly supported controls to easily be added to a window’s
content control list without any additional work on the programmer’s part.

The Cut and Paste features of the new resource editor have also been
considerably enhanced. Programmers may now have multiple resource forks open
on the desktop and freely copy resources between them. When pasting a
resource or super resource from another file all duplicate control ID numbers
are changed in the receiving file so that no items are overwritten. Deleting
a super resource such as a window and its associated controls or a menu and
its associated strings now causes all dependent controls to also be removed
from the file.

A new Import feature added to COMPLETE Pascal 2.0’s resource editor now
allows a programmer to attach a Code Resource to a program. We have also
added a “CallCode” procedure to the CTIUtils library which allows the user to
easily call the installed code resource. This new feature now makes it
possible to easily take advantage of assembly language subroutines from
within a COMPLETE Pascal 2.0 program. The import feature also allows the
addition of user created resources, sound resources, and resource types that
are as of yet undefined.

A new Hex/Ascii viewer now allows the user to view resource definitions that
are not editable using the COMPLETE Pascal resource editor. Clicking on
undefined resources in the editor will now automatically bring up the viewer
so that a programmer may determine the type and content of the resource.

Several known bugs in both the compiler and the resource editor have also
been repaired making COMPLETE Pascal 2.0 the most problem free and enjoyable
programming environment produced by Complete Technology. We have also added
some new demo programs to the disk showing how to use the printer and other
devices from within a Pascal program, as well as how to create and use data
files from the generic Pascal file system.

New documentation will be shipped with all upgrade orders. Our manual has
been updated to include all of the new features found in Pascal 2.0, and at
the request of a large number of product owners is now bound in a large 3-
ring binder which easily remains open to the correct page while on your desk.
We believe you will find our new manual to be complete and much easier to

The COMPLETE Pascal 2.0 upgrade is available for only $34.95 plus $7.00
shipping and handling to those individuals and organizations that elected to
become part of Complete Technology’s support and update system for TML’s
former clients. Those that did not elect to become part of the support
system may still obtain COMPLETE Pascal 2.0 for $59.95 plus $7.00 shipping
and handling. Lab Pack and Network version owners may also upgrade by
calling Complete Technology for details.

Orders are being accepted now. Charge cards will be charged 24 hours before
shipment, checks will be deposited 5 days before shipment to allow them to
clear our bank. We have made changes and hired new people in our shipping
department in an effort to speed up our product delivery. All orders are
now shipped within 48 hours of receipt. Overnight orders received before
3:00 P.M. are shipped on the same day they are received. Overnight shipping
is available for an additional $12.00, and are shipped via Airborne Express.