Category : Pascal Source Code
Archive   : PASS_ALL.ZIP
Filename : TI994.ASC

 
Output of file : TI994.ASC contained in archive : PASS_ALL.ZIP







PRODUCT : Turbo Pascal NUMBER : 994
VERSION : All
OS : DOS
DATE : April 28, 1992 PAGE : 1/9

TITLE : Turbo Pascal vs ANSI Pascal





=================================================================
Comparing Turbo Pascal 6.0 with ANSI Pascal
=================================================================


-----------------------------------------------------------------
Table of Contents
-----------------------------------------------------------------

1. Exceptions to ANSI Pascal requirements
2. Extensions to ANSI Pascal
3. Implementation-dependent features
4. Treatment of errors
-----------------------------------------------------------------

This appendix compares Turbo Pascal to ANSI 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).


===========================================
1. Exceptions to ANSI Pascal requirements
===========================================

Turbo Pascal is unable to detect whether a program violates
any of the exceptions listed here.

Turbo Pascal complies with the requirements of
ANSI/IEEE770X3.97-1983 with the following exceptions:

o In ANSI Pascal, an identifier can be of any length and all
characters are significant. In Turbo Pascal, an identifier
can be of any length, but only the first 63 characters are
significant.

o In ANSI Pascal, the @ symbol is an alternative for the ^
symbol. In Turbo Pascal, the @ symbol is an operator,
which is never treated identically with the ^ symbol.















PRODUCT : Turbo Pascal NUMBER : 994
VERSION : All
OS : DOS
DATE : April 28, 1992 PAGE : 2/9

TITLE : Turbo Pascal vs ANSI Pascal




o In ANSI Pascal, a comment can begin with { and end with
*), or begin with (* and end with }. In Turbo Pascal,
comments must begin and end with the same set of symbols.

o In ANSI Pascal, each possible value of the tag type in a
variant part must appear once. In Turbo Pascal, this
requirement is not enforced.

o In ANSI Pascal, the component type of a file type cannot
be a structured type having a component of a file type. In
Turbo Pascal, this requirement is not enforced.

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

o In ANSI Pascal, the statement part of a function must
contain at least one assignment to the function identifier.
In Turbo Pascal, this requirement is not enforced.

o In ANSI Pascal, a field that is the selector of a variant
part cannot be an actual variable parameter. In Turbo
Pascal, this requirement is not enforced.

o In ANSI Pascal, a component of a variable of a packed type
cannot be an actual variable parameter. In Turbo Pascal,
this requirement is not enforced.

o In ANSI Pascal, a procedural or functional parameter is
declared by writing a procedure or function heading in the
formal parameter list. In Turbo Pascal, the declaration of a
procedural or functional parameter is achieved through a
procedural or functional type, and uses the same syntax as
the declaration of other types of parameters.

o In ANSI Pascal, the standard procedures Reset and Rewrite
do not require pre-initialization of file variables. In
Turbo Pascal, file variables must be assigned the name of an
external file using the Assign procedure before they are
passed to Reset or Rewrite.














PRODUCT : Turbo Pascal NUMBER : 994
VERSION : All
OS : DOS
DATE : April 28, 1992 PAGE : 3/9

TITLE : Turbo Pascal vs ANSI Pascal




o ANSI Pascal defines the standard procedures Get and Put,
which are used to read from and write to files. These
procedures are not defined in Turbo Pascal.

o In ANSI Pascal, the syntax New(p,c1,...,cn) creates a
dynamic variable with a specific active variant. In Turbo
Pascal, this syntax is not allowed.

o In ANSI Pascal, the syntax Dispose(q,k1,...,km) removes a
dynamic variable with a specific active variant. In Turbo
Pascal, this syntax is not allowed.

o ANSI Pascal defines the standard procedures Pack and
Unpack, which are used to "pack" and "unpack" packed
variables. These procedures are not defined in Turbo Pascal.

o In ANSI Pascal, the term i mod j always computes a
positive value, and it is an error if j is zero or negative.
In Turbo Pascal, i mod j is computed as i - (i div j) * j,
and it is not an error if j is negative.

o In ANSI Pascal, a goto statement within a block can refer
to a label in an enclosing block. In Turbo Pascal, this is
an error.

o In ANSI Pascal, it is an error if the value of the
selector in a case statement is not equal to any of the case
constants. In Turbo Pascal, this is not an error; instead,
the case statement is ignored unless it contains an else
clause.

o In ANSI Pascal, statements that threaten the control
variable of a for statement are not allowed. In Turbo
Pascal, this requirement is not enforced.

o In ANSI 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 Turbo Pascal, a carriage return
character (ASCII 13) is assigned to the variable in this
situation.

o In ANSI Pascal, a Read from a text file with an integer-
type or real-type variable ceases as soon as the next













PRODUCT : Turbo Pascal NUMBER : 994
VERSION : All
OS : DOS
DATE : April 28, 1992 PAGE : 4/9

TITLE : Turbo Pascal vs ANSI Pascal




character in the file is not part of a signed integer or a
signed number. In Turbo Pascal, reading ceases when the next
character in the file is a blank or a control character
(including the end-of-line marker).

o In ANSI Pascal, a Write to a text file with a packed
string-type value causes the string to be truncated if the
specified field width is less than the length of the string.
In Turbo Pascal, the string is always written in full, even
if it is longer than the specified field width.

o ANSI Pascal defines the standard procedure Page, which
causes all subsequent output to a specific text file to be
written on a new page. This procedure is not defined in
Turbo Pascal. However, the typical equivalent of Page(F) is
Write(F,Chr(12)).

==============================
2. Extensions to ANSI Pascal
==============================

Turbo Pascal is unable to detect whether a program uses any
of the extensions listed here.

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

o The following are reserved words in Turbo Pascal:

absolute inline shr
assembler interface string
constructor interrupt unit
destructor object virtual
external private uses
far near xor
implementation shl

o An identifier can contain underscore characters (_).

o Integer constants can be written in hexadecimal notation;
such constants are prefixed by a $.

o Identifiers can serve as labels.













PRODUCT : Turbo Pascal NUMBER : 994
VERSION : All
OS : DOS
DATE : April 28, 1992 PAGE : 5/9

TITLE : Turbo Pascal vs ANSI Pascal




o String constants are compatible with the Turbo Pascal
string types, and can contain control characters and other
nonprintable characters.

o Label, constant, type, variable, procedure, and function
declarations can occur any number of times in any order in a
block.

o Wherever the syntax of ANSI Pascal requires a simple
constant, Turbo Pascal allows the use of a constant
expression (also known as a computed constant).

o Turbo Pascal implements the additional integer types
Shortint, Longint, Byte, and Word, and the additional real
types Single, Double, Extended, and Comp.

o Turbo Pascal implements string types, which differ from
the packed string types defined by ANSI Pascal in that they
include a dynamic-length attribute that can vary during
execution.

o Turbo Pascal implements procedural and functional types.
In addition to procedural and functional parameters, these
types make possible the declaration and use of procedural
and functional variables.

o The type compatibility rules are extended to make Char
types and packed string types compatible with string types.

o Variables can be declared at absolute memory addresses
using an absolute clause.

o A variable reference can contain a call to a pointer-type
function, the result of which is then dereferenced to denote
a dynamic variable.

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

o The type of a variable reference can be changed to another
type through a variable typecast.















PRODUCT : Turbo Pascal NUMBER : 994
VERSION : All
OS : DOS
DATE : April 28, 1992 PAGE : 6/9

TITLE : Turbo Pascal vs ANSI Pascal




o Turbo Pascal implements typed constants, which can be used
to declare initialized variables of all types except file
types.

o Turbo Pascal implements three new logical operators: xor,
shl, and shr.

o The not, and, or, and xor operators can be used with
integer-type operands to perform bitwise logical operations.

o The + operator can be used to concatenate strings.

o The relational operators can be used to compare strings.

o Turbo Pascal implements the @ operator, which is used to
obtain the address of a variable or a procedure or function.

o The type of an expression can be changed to another type
through a value typecast.

o The case statement allows constant ranges in case label
lists, and provides an optional else part.

o Procedures and functions can be declared with external,
inline, and interrupt directives to support assembly
language subroutines, inline machine code, and interrupt
procedures.

o A variable parameter can be untyped (typeless), in which
case any variable reference can serve as the actual
parameter.

o Turbo Pascal implements units to facilitate modular
programming and separate compilation.

o Turbo Pascal implements the following file-handling
procedures and functions, which are not available in ANSI
Pascal:

Append FilePos Rename
BlockRead FileSize RmDir
BlockWrite Flush Seek
ChDir GetDir SeekEof













PRODUCT : Turbo Pascal NUMBER : 994
VERSION : All
OS : DOS
DATE : April 28, 1992 PAGE : 7/9

TITLE : Turbo Pascal vs ANSI Pascal




Close MkDir SeekEoln
Erase

o String-type values can be input and output with the Read,
Readln, Write, and Writeln standard procedures.

o Turbo Pascal implements the following standard procedures
and functions, which are not found in ANSI Pascal:

Addr Inc Ptr
Concat Insert Random
Copy Int Randomize
CSeg Length Release
DSeg Lo RunError
Dec Mark SPtr
Delete MaxAvail Seg
Exit MemAvail SizeOf
FillChar Move SSeg
Frac Ofs Str
FreeMem ParamCount Swap
GetMem ParamStr TypeOf
Halt Pi UpCase
Hi Pos Val

o Turbo Pascal implements further standard constants, types,
variables, procedures, and functions through standard units.


======================================
3. 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:

o the order of evaluation of index expressions in a variable
reference















PRODUCT : Turbo Pascal NUMBER : 994
VERSION : All
OS : DOS
DATE : April 28, 1992 PAGE : 8/9

TITLE : Turbo Pascal vs ANSI Pascal




o the order of evaluation of expressions in a set
constructor

o the order of evaluation of operands of a binary operator

o the order of evaluation of actual parameters in a function
call

o the order of evaluation of the left and right sides of an
assignment

o the order of evaluation of actual parameters in a
procedure statement

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

o the binding of variables denoted by the program parameters
to entities external to the program


========================
4. Treatment of errors
========================

This section lists those errors from Appendix D of the ANSI
Pascal Standard that are not automatically detected by Turbo
Pascal. The numbers referred to here are the numbers used in
the ANSI Pascal Standard. Errors 6, 19-22, and 25-31 are not
detected because they are not applicable to Turbo Pascal.

2. If t is a tag field in a variant part and f is a field
within the active variant of that variant part, it is an
error to alter the value of t while a reference to f exists.
This error is not detected.

3. If p is a pointer variable, it is an error to reference
p^ if p is nil. This error is not detected.

4. If p is a pointer variable, it is an error to reference
p^ if p is undefined. This error is not detected.















PRODUCT : Turbo Pascal NUMBER : 994
VERSION : All
OS : DOS
DATE : April 28, 1992 PAGE : 9/9

TITLE : Turbo Pascal vs ANSI Pascal




5. If p is a pointer variable, it is an error to alter the
value of p while a reference to p^ exists. This error is not
detected.

42. The function call Eoln(f) is an error if Eof(f) is True.
In Turbo Pascal this is not an error, and Eoln(f) is True
when Eof(f) is True.

43. It is an error to reference a variable in an expression
if the value of that variable is undefined. This error is
not detected.

46. A term of the form i mod j is an error if j is zero or
negative. In Turbo Pascal, it is not an error if j is
negative.

48. It is an error if a function does not assign a result
value to the function identifier. This error is not
detected.

51. It is an error if the value of the selector in a case
statement is not equal to any of the case constants. In
Turbo Pascal, this is not an error; instead, the case
statement is ignored unless it contains an else clause.



























  3 Responses to “Category : Pascal Source Code
Archive   : PASS_ALL.ZIP
Filename : TI994.ASC

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/