Trailing-Edge
-
PDP-10 Archives
-
AP-D480B-SB_1978
-
bls7b.doc
There is 1 other file named bls7b.doc in the archive. Click here to see a list.
BLISS.DOC -- Changes from V6(212) to V7B(222)
September 1977
COPYRIGHT (C) 1976,1977 BY
DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE
INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER
COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY
TRANSFERRED.
THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
CORPORATION.
DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
Page 2
BLIS10.DOC Changes from 6(212) to 7B(222)
1.0 SUMMARY
BLISS-10 7B(222) replacing BLISS-10 6(212).
The distribution tape contains the following files:
BLIS10.EXE !BLISS-10 Compiler V7B(222)
BLIS10.ERR !BLISS-10 Error file
BLIS10.DOC !BLISS-10 Document file
BLIS10.HLP !BLISS-10 Help file
DEB10.EXE !BLISS-10 Debugging compiler
SIX12.BLI !SIX12 Source file
SIX12X.REL !SIX12 Object file
This version runs on TOPS-10 monitors from 5.07 to present. It can
run on DECsystem-20 under the compatability package. This version
supercedes 6(212).
A description of BLISS-10 is contained in
DECsystem-10 BLISS-10 Programmer's Reference Manual
DEC-10-LBRMA-A-D
2.0 EXTERNAL CHANGES
The major changes to the compiler have been to the once only
initialization module and the declaration processing modules to
incorporate the first two new language features described below.
2.1 New Features Added Since Version 6(212).
Five new features have been added.
Page 3
1. Initialization of OWN and GLOBAL data segments is now
possible. Initialization of a segment is specified within
its OWN or GLOBAL declaration and consists of an equal sign,
"=", followed by a plit argument. The initialization
specification follows the segment name (and size if any). An
initialization specification must not be factored, nor must
the number of words initialized exceed the data segment size.
Examples:
OWN X=1,Y[2]=(4,5);
GLOBAL STRING[4]= 'This is a String';
The delcaration
OWN X:Y:Z = 1:
only initializes X and gives the warning message for Y and
for Z that factorization of initialization is not allowed.
The declaration
OWN X = (2,3),Y;
produces a warning message stating that overinitialization
has taken place; in this example X will be initialized to 2
and Y to 3.
2. It is now possible to have more than one module in the input
file. Each module is compiled independently and the object
file produced is the concatenation of the ones produced by
compiling each module separately. This new feature is also
the fix of bug 13 listed below. Each module must start on a
new line. Delimiters following and on the same line as
ELUDOM are ignored.
3. Register assignments for each module are now identified in
the relocatable object file. To achieve this, the following
names
.SREG
.FREG
.VREG
.DREGS
are predeclared by the compiler and globally bound to the
negative of SREG, FREG, VREG, and the preserved register
mask, respectively. Thus, two modules with differing
register assignments will produce multiply defined symbols
when linked. These names appear in the listing file as well.
The default register assignment produces:
.SREG=:0
.FREG=:-2
Page 4
.VREG=:-3
.DREGS=:-174000
This states that SREG is 0, FREG is 2, VREG is 3, and
registers 17, 16, 15, 14, and 13 (octal) are preserved.
4. A new command line switch, /Z, is now available. With /Z the
LCG register assignments are chosen as the default. That is,
SREG=#17, FREG=#15, VREG=#1, DREGS=7, and #0 and #16 are
reserved. Of course explicit assignments given in the module
head will override this default.
5. A require file declaration may also have the form
REQUIRE 'file-specification';
where a file-specification is written
device:filename.extension[ppn]
with device:, .extension, and [ppn] being optional. This
corrects the deficiency #10 listed below in section 3.
3.0 KNOWN BUGS AND DEFICIENCIES
The following bugs and deficiencies remain (numbers refer to the
cumulative bug list below):
1,2,3,4,6,9,14,15,16,19,20,23,36, and 38.
The following bugs have been fixed:
5,7,8,10,11,12,13,17,18,21,22,24,25
26,27,28,29,30,31,32,33,34,35, and 37.
1. DEFICIENCY
Case Folding (translation of lower case to upper case) does
not work with macro formal names in strings.
Ex.
EXTERNAL TYPSTR; ! Types an ASCIZ string
MACRO M(H)=TYPSTR('THE MESSAGE IS :h')$;
M(WRONG)
This should type:
THE MESSAGE IS:WRONG
Page 5
Instead it types:
THE MESSAGE IS:h
2. BUG
When processing a quoted string longer than 1000 characters
the compiler gives an error message and aborts.
3. BUG
A compiler error occurs if allocation declarations (LOCAL or
OWN) appear in a BEGIN ... END block of a structure.
4. BUG
A global routine should have a compound expression or block
as its body. Otherwise, an "illegal up level addressing"
error message may occur.
Ex:
MODULE AAA=
BEGIN
REGISTER A;
GLOBAL ROUTINE MLIST=-2;
A=-1;
END
ELUDOM
5. BUG FIXED 7(215)
Bad code is generated for the last argument to the call when
it is in a structure accessing definition.
Ex:
STRUCTURE FOO[I,J]=(BAZ(@.FOO,.I,.J));
The call to BAZ has nonsense for its last argument. This may
be fixed by inserting parenthesis around the last argument,
thus
STRUCTURE FOO[I,J]=(BAX(@.FOO,.I,(.J)));
6. BUG
An INDEXES name will give an error ("an operator must be
followed by a simple expression") if it is not enclosed in
parentheses.
Ex.
BIND B=PLIT(C INDEXES 4,5,6):
IF .X EQL C THEN ... fails.
However,
IF .X EQL (C) THEN ...
works.
Page 6
7. BUG FIXED 7(215)
Bind within binds yield an infinite loop or illegal memory
reference
Ex.
BIND A=(BIND FOO=1; FOO+5);
8. BUG FIXED 7(215)
On rare occasion BLISS will lose track of the register where
it has stored the value of an OWN and bad code is generated.
Ex:
OWN T;
T=#123456654321;
T<18,6>=0;
T=..T +.(.T+1);
9. DEFICIENCY
If a main module (with "STACK" or "START" in its module
header) without "TIMER=EXTERNAL(SIX12)", or the like is
compiled with "/D", an error message is produced. A default
timer specification should be assumed.
10. DEFICIENCY REMOVED 7B(222)
BLISS will not accept a request for a require file if its
name begins with a number.
Ex:
123.BLI
This problem may now be avoided by enclosing the file
specification in quotes--e.g., '123.BLI'.
11. BUG FIXED 7B(222)
A zero index on an indirect vector access causes an error
message.
Ex:
STRUCTURE S[I]=(..S+.I);
LOCAL S X;
X[0]=.X[0] +1;
12. BUG FIXED 7(215)
When # is not followed by an octal digit, the result is
equivalent to #0. Hence #-14 is decimal -14. No error
message is given.
13. BUG FIXED 7(215)
One cannot have several modules defined in a file. Only the
first module gets compiled.
14. BUG
An error message may occur if a control expression involving
VREG is the right operand of an assignment. For example,
Page 7
A=IF .B THEN .C ELSE .VREG +1
is an error, but
A=(IF .B THEN .C ELSE .VREG+1)
is not.
15. BUG
Setting the CREF switch in module header with no list file
specified in the command string causes the compilation to
abort, sometimes with the error message "PDL OVERFLOW" or
"I/O TO UNDEFINED CHANNEL".
Ex:
.R BLIS10
*A=FILE.BLI
where FILE.BLIS contains:
MODULE SSS(STACK,XREF)=
BEGIN
EXTERNAL A;
A=12;
END
ELUDOM
16. BUG
MACHOP JUMP instructions compile incorrectly.
17. BUG FIXED 7(215)
MACHOPS #127,#126 PRODUCE DPB,IDPB machine instructions in
the list file. It should produce FLTR, FIXR machine
instructions. In any case, the instructions in the REL file
are okay.
18. BUG FIXED 7B(222)
BIND to REGISTER does not work.
Ex:
REGISTER A;
BIND B=A; %FAILS%
BIND C=(A); %WORKS%
19. BUG
Occassionally a BIND to a pointer with the indirect bit set
causes an error message.
Ex:
BIND A=(-1)<0,36,FREG,1>;
20. BUG
A structure containing a compound expression may not generate
correct code.
Page 8
Ex:
STRUCTURE XXX[I.J]=
[1](.I=I+.I; .J=J+.J);
OWN U,V,X,Y,XXX Z[2,3];
.
.
.
Z[(IF .X THEN U ELSE V),Y];
21. BUG FIXED 7(215)
Negative replication counts in PLITS may cause a variety of
problems such as: infinite loops, empty plit areas, and
nonsense PLITs.
Ex:
BIND B = PLIT(1,2,3,-2:(4))
22. BUG FIXED 7(215)
A TDZA instruction preceded by a SKIPN causes the wrong value
to be loaded into the register.
Ex:
EXTERNAL X,Y,Z;
ROUTINE T(S) =
BEGIN
CASE .S OF
SET
X = (.Y NEQ 0);
X = .Z
TES;
END;
The code generated is incorrect code.
23. BUG
More than eight consecutive assignments cause an error
message (the limit is eight) and an ill-mem-ref.
24. BUG Fixed 7B(222)
BREG is declared to be both LOCAL and EXTERNAL by BLISS-10,
in the listing file.
25. BUG FIXED 7(215)
Multiple FORWARD declarations are not allowed.
Example:
FORWARD A;
FORWARD A;
26. BUG FIXED 7(215)
Actual arguments pushed on the stack by a routine call may be
overwritten when one of the arguments is a block containing
locals.
Ex:
Page 9
EXTERNAL BAZ;
BAZ (1,2,BEGIN
LOCAL I,J,K;
K_10;
.K
END , 3)
27. BUG FIXED 7(215)
REQUIRE file names cannot have the same name or extension as
a previously declared symbol. This causes an error message.
Ex:
BIND ABC=2;
REQUIRE ABC.REQ;
28. BUG FIXED 7(215)
When MACROs consisting only of comments are used
excessively, a PDL overflow occurs.
Ex:
MACRO X=!!$;
X ABCDE
X ABCDE
.
.
.
X ABCDE
29. BUG FIXED 7(215)
The peephole optimizer attempts to replace a store followed
by a load with a single store. Unfortunately, a sequence
such as
MOVEM 3,1(2)
PUSHJ 0,Y
MOVE 3,1(2)
is incorrectly optimized.
The optimizer does not know that a routine call can change
register 3. This bug would arise in the following BLISS-10
routine:
ROUTINE R =
BEGIN
EXTERNAL X,Y,Z;
LOCAL T;
T = X();
Y();
Z = .Z+.T
END;
30. BUG FIXED 7(215)
The character manipulation built-in functions INCP, SCANI,
REPLACEI, COPYNI, COPYIN, and COPYII, produce a side effect,
Page 10
i.e. incrementing a byte pointer, that BLISS-10 is sometimes
unaware of. If the byte pointer is brought from memory to a
register, BLISS-10 may use the register value even though the
memory value has been changed by one of the above functions.
Example:
ROUTINE R =
BEGIN
EXTERNAL X;
LOCAL T;
T = .X;
IF SCANI(T) THEN X = .T
END;
The updated value of T is not placed back in X.
31. BUG FIXED 7B(222)
The chain of external references to a given symbol is not
constructed properly when some of the references fall in the
low segment. As a result the program is not linked properly.
Example:
EXTERNAL A,B;
BIND C = PLIT (A,B);
BIND D = PLIT (A,A);
If PLITS are put in the low segment, a linking error will
result.
32. DEFICIENCY FIXED 7B(222)
An error message is given each time an undefined symbol is
referenced in a block. A warning message should be given
only for the first instance of the symbol.
33. BUG FIXED 7B(222)
The peeophole optimizer tries to replace a MOVE and test
sequence with a SKIP instruction. Thus,
MOVE R,X
TLNN R, #400000
becomes SKIPL R,X. This should not be done, however, when
the test instruction is labelled.
Example:
REGISTER R;
EXTERNAL X,Y;
R = .X;
WHILE .R<35,1> DO Y();
This generates the above sequence.
Page 11
34. BUG FIXED 7B(222)
Extra blank characters are inserted into a quoted string if
the string extends over more than one source line.
Example:
PLIT( 'HELLO-
BLISS-10' );
This string contains one extra blank character.
35. BUG FIXED 7B(222)
Sometimes incorrect code for SELECT expressions is generated.
Example:
EXTERNAL X;
ROUTINE XXX=
BEGIN
SELECT .X OF
NSET
1: RETURN 1;
2: RETURN 2;
OTHERWISE: RETURN 0
TESN;
END;
36. BUG
When processing a complicated test expression in a control
expression, BLISS-10 may have difficulty attempting to dump a
common subexpression contained in a register to the stack.
The result is a dangling pointer which may subsequently
destroy the free storage chain and cause an ill-mem-ref.
37. BUG FIXED 7B(222)
If ELUDOM is followed by a semicolon, or any other delimiter
except MODULE, the compiler loops.
38. BUG
A name prefixed by the escape character "?" is not processed
properly when it appears in a macro body.
Example:
MACRO X = ?X%Y$;
OWN X;
This gives the error message that X%Y is undefined.
Page 12
4.0 INSTALLATION INSTRUCTIONS
The BLIS10.EXE and BLIS10.ERR files go on SYS:. The file BLIS10.DOC
goes on DOC:.
5.0 INTERNAL CHANGES
The error file is once again BLIS10.ERR.
6.0 SUGGESTIONS
If you suspect bad code is being generated, try recompiling the module
with /U. This turns off optimization--in particular, peephole
optimization.
[End of BLIS10.DOC]
BLIS10.DOC Changes from 5A(124) to 6(212)
January, 1977
!
!
! Copyright (C) 1976, 1977
! Digital Equipment Corporation, Maynard, Massachusetts 01754
!
! This software is furnished under a license for use only on a
! single computer system and may be copied only with the inclu-
! sion of the above copyright notice. This software, or any
! other copies thereof, may not be provided or otherwise made
! available to any other person except for use on such system
! and to one who agrees to these license terms. Title to and
! ownership of the software shall at all times remain in DEC.
!
! The information in this software is subject to change without
! notice and should not be construed as a commitment by Digital
! Equipment Corporation.
!
! DEC assumes no responsibility for the use or reliability of
! its software on equipment which is not supplied by DEC.
!
!
!
!
Page 2
1.0 SUMMARY
BLISS-10 6(212) replacing BLISS-10 5A(124).
This version runs on TOPS-10 monitors from 5.07 to present. It can
run on DECsystem-20 under the compatability package. This version
supercedes 5A(124).
A description of BLISS-10 is contained in
DECsystem-10 BLISS-10 Programmer's Reference Manual
DEC-10-LBRMA-A-D
2.0 External Changes
The macro code generated by BLISS-10 now places the PLIT area after
the code, constant, and literal areas. This is reflected in the macro
listing and the REL file.
3.0 Known Bugs and Deficiencies
1. Case Folding (translation of lower case to upper case) does not
work with macro formal names in strings.
Ex.
EXTERNAL TYPSTR; ! Types an ASCIZ string
MACRO M(H)=TYPSTR('THE MESSAGE IS :h')$;
M(WRONG)
This should type:
THE MESSAGE IS:WRONG
Instead it types:
THE MESSAGE IS:h
2. A quoted string longer than 1000 characters gives a compiler
error and dies.
3. A compiler error occurs if allocation declarations (LOCAL or OWN)
appear in BEGIN ... END block of a structure.
4. A global routine should have a compound expression or block as
its body. Otherwise, an "illegal up level addressing" error
message may occur.
Page 3
Ex: MODULE AAA=
BEGIN
REGISTER A;
GLOBAL ROUTINE MLIST=-2;
A=-1;
END
ELUDOM
5. Bad code is generated for the last argument to the call when it
is in a structure accessing definition.
Ex:
STRUCTURE FOO[I,J]=(BAZ(@.FOO,.I,.J));
The call to BAZ has nonsense for its last argument. This may be
fixed by inserting parenthesis around the last argument, thus
STRUCTURE FOO[I,J]=(BAX(@.FOO,.I,(.J)));
6. An INDEXES name will give an error ("an operator must be followed
by a simple expression") if it is not enclosed in parentheses.
Ex.
BIND B=PLIT(C INDEXES 4,5,6):
IF .X EQL C THEN ... fails.
However,
IF .X EQL (C) THEN ...
works.
7. Bind within binds yield an infinite loop or illegal memory
reference
Ex.
BIND A=(BIND FOO=1; FOO+5);
8. On rare occasion BLISS will lose track of the register where it
has stored the value of an OWN and bad code is generated.
Ex:
OWN T;
T=#123456654321;
T<18,6>=0;
T=..T +.(.T+1);
9. If a main module (with "STACK" or "START" in its module header)
without "TIMER=EXTERNAL(SIX12)", or the like is compiled with
"/D", an error message is produced.
Page 4
10. BLISS will not accept a request for a require file if its name
begins with a number.
Ex:
123.BLI
11. A zero index on an indirect vector access causes an error
message.
Ex:
STRUCTURE S[I]=(..S+.I);
LOCAL S X;
X[0]=.X[0] +1;
12. When # is not followed by an octal digit, the result is
equivalent to #0. Hence #-14 is decimal -14. No error message
is given.
13. One cannot have several modules defined in a file. Only the
first module gets compiled.
14. An error message may occur if a control expression involving VREG
is the right operand of an assignment. For example,
A=IF .B THEN .C ELSE .VREG +1
is an error, but
A=(IF .B THEN .C ELSE .VREG+1)
is not.
15. Setting the CREF switch in module header with no list file
specified in the command string bombs. Sometimes it gives the
error message "PDL OVERFLOW" or "I/O TO UNDEFINED CHANNEL".
Ex:
.R BLIS10
*A=FILE.BLI
WHERE FILE.BLIS CONTAINS:
MODULE SSS(STACK,XREF)=
BEGIN
EXTERNAL A;
A=12;
END
ELUDOM
16. MACHOP JUMP instructions compile incorrectly.
17. MACHOPS #127,#126 PRODUCE DPB,IDPB machine instructions in the
list file. It should produce FLTR,FIXR machine instructions. In
any case, the instructions in the REL file are okay.
Page 5
18. BIND to REGISTER does not work.
Ex:
REGISTER A;
BIND B=A; %FAILS%
BIND C=(A); %WORKS%
19. Occassionally a BIND to a pointer with the indirect bit set
causes an error message.
Ex:
BIND A=(300)<0,36,FREG,1>;
20. A structure containing a compound expression may not generate
correct code.
Ex:
STRUCTURE XXX[I.J]=
[1](.I=I+.I; .J=J+.J);
OWN U,V,X,Y,XXX Z[2,3];
.
.
.
Z[(IF .X THEN U ELSE V),Y];
21. Negative replication counts in PLIT;s may cause a variety of
problems such as: infinite loops, empty plit areas, and nonsense
PLITs.
Ex:
BIND B = PLIT(1,2,3,-2:(4))
22. A TDZA instruction preceded by a SKIPN causes the wrong value to
be loaded into the register.
Ex: EXTERNAL X,Y,Z;
ROUTINE T(S) =
BEGIN
CASE .S OF
SET
X = (.Y NEQ 0);
X = .Z
TES;
END;
The code generated is incorrect code.
23. More than eight consecutive assignments cause an error message
(the limit is eight) and an ill-mem-ref.
Page 6
24. BREG is declared to be both LOCAL and EXTERNAL by BLISS-10.
4.0 Installation Instructions
The BLIS10.EXE and BL10ER.ERR files go on SYS:. The file BLIS10.DOC
goes on DOC:.
5.0 Internal Changes
There are two major internal changes: numerous bugs have been fixed
and several new features have been added.
5.1 New Features Added Since Version 5A(124).
These are as follows:
1. ALLMACHOP -
JSYS the TOPS-20 monitor interface command has been added to the
ALLMACHOP list. Its value is octal 104.
2. EXTERNAL -
Multiple declaration of a name as external in the same block is
now allowed.
3. MACROS -
For various reasons, a user may wish to include a comment in the
body of a MACRO. To do this, the user may now use a double "!".
No separation may appear between the exclamation marks. Macro
formals are not expanded within a comment. A "$" may not appear
as part of any comment inside a MACRO. If one does appear it
will terminate the MACRO definition. If the comment was started
with a single "!" or with a "%" then the comment will also be
terminated. If the comment was started with a double "!" then
the comment in the definition will also be terminated. The
comment in the expansion, however will not be terminated until
the end of the line on which the macro name occurs.
4. LOWER CASE -
Lower to upper case conversion is done for identifiers.
5. LINKAGE -
(A) All declaration usages formerly allowing an optional
structure-name now allow an optional linkage name to precede
the optional structure name. Thus, the following are now
correct:
LOCAL /LINKX/ /STRUX/ NAME /[...]/ ...
MAP /LINKX/ /STRUX/ NAME /[...]/ ...
Page 7
where by /.../ is meant an optional item and by LINKX is
meant a name declared in a linkage declaration of the form:
LINKAGE LINKX=ENTXIT(...,...);
LINKAGE NAMES USED IN THIS WAY ARE NOT INTENDED TO HAVE ANY
EFFECT AT PRESENT.
(B) LINKAGE NAMES MAY APPEAR IN FORWARD AND IN ROUTINE
DECLARATIONS AS FOLLOWS:
FORWARD /LINKX/ NAME, ...
ROUTINE /LINKX/ NAME .....
If a name has a linkage name associated with it through a
forward declaration, then it must not have a linkage name
associated with it when it is redeclared later as a routine.
The effect of these declarations is to alter the code
generated at routine entry and exit: instead of .ENT.0,
.ENT.1, ... AND .EXT.0, ..., names derived from the linkage
declaration of the linkage name will be used. Furthermore,
the use of the XXXX.0 forms is not optional: every entry to
and return from a routine declared with linkage will be via
an XXXX.N form.
A sample program showing proper coding follows:
LINKAGE INOUT=ENTXIT(WAYIN,WAYOUT);
EXTERNAL ?WAYI.0,?WAYI.1,?WAYI.2, ..., ?WAYI.5
EXTERNAL ?WAYO.0,?WAYO.1,?WAYO.2, ... ,?WAYO.5
FORWARD INOUT R1,R2,R4;
ROUTINE R1=1;
ROUTINE R2=2;
ROUTINE INOUT R3=3;
ROUTINE R4=4;
-----WAYIN is presumably a macro program assembled in
high-seg with the names WAYI.1, etc., declared "INTERN".
Linkage is not provided for functions or co-routines.
6. PORTAL -
The keyword "PORTAL" may optionally replace the keyword "GLOBAL"
before "ROUTINE". The effect of this substitution is to cause
the portal instruction "JRST 01,.+1" to be generated as the first
instruction at the entry to the routine and otherwise to compile
the routine as if it had been declared "GLOBAL ROUTINE".
The use of "PORTAL" conflicts with the inspect feature of
BLISS-10; thus it should not be used in a program being compiled
under /I. "PORTAL" may be used with /D and /T.
Usage: PORTAL is to be used when a program is to be protected at
level 6. A routine declared with PORTAL may be called from
Page 8
low-seg. Thus PORTAL is expected to be used only for entries
actually called from lo-seg. If a BLISS program is compiled in
low-seg and called from high-seg, then PORTAL will not work: the
solution is a linkage to exit from the lo-seg routine via a
linkage segment in high-seg which begins with a PORTAL
instruction.
MACRO programs in lo-seg must be compiled with literals in
lo-seg, for it will not be possible to read literals in high-seg
from lo-seg.
7. UPLIT -
UPLIT is now a reserved word. It may be used as PLIT is used and
has the effect of creating a PLIT without a preceding count word.
8. OFFSET -
OFFSET(FORMAL = -N , for the Nth parameter (i.e., FORMAL) TO A
ROUTINE.
OFFSET(LOCAL) = +N , where local is stored N words down the
stack.
OFFSET(LOCAL) is not treated internally as a literal and
therefore not all usages are allowed. The following are allowed:
PLIT(OFFSET(LOCAL));
PLIT(#123456^18+OFFSET(LOCALL));
PLIT(#123456^18+OFFSET(LOCAL+DELTA));
Note: if X is a local or a routine formal, then
.(.FREG+OFFSET(X)) is equivalent to .X.
9. NULL SWITCH -
NULL SWITCH for module head and switches declaration.
Action: none.
10. INPUT LINE LENGTH -
Maximum input line length is now 145 characters (tabs count as
one character).
11. COMMAND LIST "#" -
A command line consisting of a file name followed by a "#" will
cause the program on that file to be run. The default device is
"SYS". This is same as "!" except "!" causes the program to be
started at its starting point plus 1.
12. CHARACTER "&" -
The character "&" may be used as an alphabetic character in names
without preceding the name with a "?". It is equivalent to ".",
which may still be used with old "?" notation.
Example: 'WAIT&1' is equivalent to '?WAIT.1'.
13. LINK TIME CONSTANTS -
Page 9
Link time constants have been expanded. Link time constants are
the legal entries in a PLIT.
<LTC> = <CTC>
<VAR TYP1>
<VAR TYP2>
<VAR TYP1> + <CTC>
<CTC> + <VAR TYP1>
<VAR TYP1> = <CTC>
<VAR TYP1> = <OWN VARIABLE>
<GLOBAL VARIABLE>
<EXTERNAL VARIABLE>
<PLIT>
<VAR TYP2> = <ROUTINE>
<FORWARD>
<FUNCTION>
<GLOBAL ROUTINE>
<CTC> = <COMPILE TIME CONSTANT>
14. GLOBAL BIND -
Global binds may be made to any link time constant.
15. BLISS-36C SPECIAL FEATURES -
The three module head switches "BLS36", "IDELETE" and "B10NL"
have been added. Also two new keywords, "LOAD&" and "LIBRARY&"
with the corresponding special declarations are implemented.
These special features are intended only to facilitate the
processing of BLISS-36C programs.
6.0 Suggestions
None
[End of BLIS10.DOC]