Trailing-Edge - PDP-10 Archives - BB-J939B-BM - documents/bliss.doc
There are 15 other files named bliss.doc in the archive. Click here to see a list.

           Bliss-36 Release 2.1 For TOPS-20: Release Notes


This document provides information pertaining to Bliss-36 Version 2.1.

     It contains the following sections:

      o  Introduction

      o  New Features

      o  Restrictions

      o  Known Bugs

      o  For Further Help

      o  Components


     A number of changes have been made in the BLISS-36 language since
the release of V2.  These changes are documented here.

2.1  Attributes On Formal Parameters

The  syntax  of  the  routine-declaration  is   extended   to   permit
attribute-lists  in  the routine-formal list.  The syntax change is as


formal-item             formal-name { : formal-attribute-lst }
                                    { nothing                }


formal-name             name


formal-attribute-lst    map-decl-attribute

Bliss-36 Release 2.1 For TOPS-20: Release Notes                 Page 2

2.2  Output Parameters

Output parameters permit a routine to efficiently return results which
are  larger  than  a  Bliss-value.   For  example  a  double-precision
floating point value can be returned in AC1 and AC2.   Similarly,  the
register   contents   after  executing  a  JSYS  can  be  obtained  by
referencing the output parameters.

There are three places where output parameter information can  appear.
These are

      o  LINKAGE declaration

      o  ROUTINE declaration

      o  routine-call expression

An abridged description of each follows.

2.2.1  LINKAGE Declaration Changes


linkage-declaration     LINKAGE linkage-definition ,... ;


linkage-definition      linkage-name = linkage-type

                        { {    nothing       }{     nothing        } }
                        {                nothing                     }

                            { : linkage-option ...        }
                            { nothing                     }


linkage-type            { PUSHJ | JSYS }


                        { REGISTER = register-number  }
                        { STACK                       }
input-parm-loc          { nothing                     }


output-parm-loc         { REGISTER = register-number  }


In effect, the only real change is  that  output  parameter  locations
Bliss-36 Release 2.1 For TOPS-20: Release Notes                 Page 3

follow  the input parameter locations and are separated from the input
parameters by a semicolon (";").

A register may be both an input-parm-loc and an output-parm-loc.

The registers referenced by output-parm-loc are implicitly NOPRESERVE,
and  cannot  appear in PRESERVE or GLOBAL linkage modifiers.  They may
appear in a NOPRESERVE linkage-modifier, but it isn't necessary.

Only PUSHJ and JSYS linkage-types may have output parameter  locations
specified.   The  F10  linkage-type  may  not specify output parameter

     Semantics.  Each output-parm-loc specifies that a result from the
         evaluation  of  the  routine-body  will  be  returned in that
         particular register.

2.2.2  Routine Declaration Changes


routine-decl    dcl-class routine-name
                                { ( {in-fml,...} { ; out-fml,...} ) }
                                {   { nothing  } { nothing      }   }
                                { nothing                           }

                    : routine-attrib = routine-body


dcl-class       { BIND    }     { GLOBAL  }  ROUTINE
                { nothing }     { nothing }


in-fml          formal-item


It is illegal to specify out-fml parameters in a  routine  declaration
whose corresponding linkage doesn't define output-parm-loc registers.

The number of out-fml parameters in the routine  declaration  must  be
less than or equal to the number of output-parm-loc's specified in the
linkage declaration.

The value of an out-fml is undefined until  it  is  assigned  a  value
within the routine-body.

     Semantics.   The  out-fml  parameters  are  treated  like   LOCAL
         declarations.  When the routine returns, the contents of each
         out-fml data-segment is moved to the  register  specified  in
Bliss-36 Release 2.1 For TOPS-20: Release Notes                 Page 4

         the linkage declaration associated with this routine.

2.2.3  Routine-call Changes


ord-rtn-call    rtn-addr ( { input-actual,...}{ ; output-actual,...} )
                           { nothing         }{ nothing            }


gen-rtn-call    linkage-name ( rtn-addr
                        { { ,input-actual,...}{ ;output-actual,...} } )
                        { {  nothing         }{  nothing          } }
                        { nothing                                   }


rtn-addr                expression


input-actual            { expression }
                        { nothing    }


output-actual           { field-reference }
                        {   nothing      }


Expressions used as output-actuals may be undotted register-names  and
may be qualified by position, size and sign-extension information.

output-actual parameters must not be specified when the  corresponding
linkage doesn't define output-parm-loc registers.

The number of output-actual parameters must be less than or  equal  to
the number of out-fml's specified in the routine declaration.

     Semantics.  The output-actual expressions are associated with the
         output-parm-loc    registers   specified   by   the   LINKAGE
         declaration.  After the routine returns, the contents of each
         output-parm-loc  register  is  assigned  to the output-actual
         field-reference.  i.e., an output-actual is treated like  the
         left  hand  side  of  an  assignment  expression.  The output
         parameters are evaluated after the routine  call.   If  fewer
         output-actual  expressions are present than were specified by
         the LINKAGE,  the  remaining  output-parm-loc  registers  are
         treated  as  if  they  were  NOPRESERVE.  If an empty element
         appears in the list (identified by a "null-expression"), that
         will   be   treated   as   a   "place-holder"   when  binding
Bliss-36 Release 2.1 For TOPS-20: Release Notes                 Page 5

         output-actuals to the appropriate output-parm-loc register.

2.2.4  Example

        ! Define linkage with double-precision result in AC1 and AC2
        ! Notice that it accepts an arbitrary number of inputs
        ! in STANDARD locations { i.e. the "STACK" }
        dbl_prec = PUSHJ( ; REGISTER=1, REGISTER=2):

        ! Since we are treating AC1 as an output-parameter location,
        ! the routine will be NOVALUE.
        mth$dsin:    NOVALUE dbl_prec;  ! Gives Double SIN from
                                        !  Single input
        sinx:        VECTOR[2];     ! Result location

        pi = UPLIT( %E'3.14159' );      ! Irrational choice
                                !  (actually Transcendental)

    mth$dsin( pi ; sinx[0], sinx[1] ); ! Double precision result
                                       !  in sinx:sinx+1
    mth$dsin( pi ; , sinx[0] ); ! Truncated result in
                                !  sinx. LSBs in AC1 are
                                !  discarded
Bliss-36 Release 2.1 For TOPS-20: Release Notes                 Page 6

2.3  JSYS Linkages

JSYS is a Bliss-36 specific linkage-type.  This linkage is provided to
take  advantage  of  the  existence of output-register parameters.  It
makes calling TOPS-20 JSYS's from Bliss-36 much easier than using  the
already  existing JSYS BUILTIN function, avoiding the present problems
where registers must be explicitly declared at every call.

2.3.1  Syntax


jsys-linkage    LINKAGE lnkg-name = JSYS
                  { ( { input-parm-loc,...}{ ; output-parm-loc } ) }
                  {   { nothing           }{ nothing           }   }
                  { nothing                                        }

                        : SKIP ( skipval ) { other-lnkg-attribs }


output-parm-loc         REGISTER = jsys-regno


jsys-regno              1 | 2 | 3 | 4


skipval                 -1 | 0 | 1 | 2


Registers in the JSYS linkage sre restricted to the physical registers
AC1 through AC4.

Any register used as a parameter is implicitly NOPRESERVE.

The SKIP linkage modifier is used to describe how  the  JSYS  returns.
The values and meanings are:

    -1  The instruction after the JSYS will be an ERJMP.  The value of
        the call is 0 if an error occurs, otherwise it is 1.

    0   Control always returns to the next instruction.  The value  of
        the function is 0.

    1   Control returns to  the  calling  location  plus  one  or  the
        calling  location plus two.  The value of the function is 0 if
        no skip, 1 if the skip is taken.

    2   As for 1, except that control may also return to  the  calling
Bliss-36 Release 2.1 For TOPS-20: Release Notes                 Page 7

        location  plus three.  In this case, the value of the function
        is 2.

2.3.2  Example

The SIN JSYS reads a string from a specified source into the  caller's
address  space.  Parameters are passed in using AC1-AC4.  The value in
AC4 is used to define a terminator byte.  This value  is  only  needed
when the contents of AC3 is greater than zero.

                    REGISTER=1, REGISTER=2, REGISTER=3 ) : SKIP(-1);

    sin = %O '52' : sin_lnkg;

    buffr:      VECTOR[CH$ALLOCATION(80)];

    jfn,        ! Input stream handle
    cnt,        ! Count of characters read
    ptr;        ! Pointer to "tail" of string read


IF NOT sin( .jfn, CH$PTR(buffr), -80 ; jfn, ptr, cnt )
    .......             ! Error code

! jfn   - updated (may have been byte-ptr, not "file")
! ptr   - is at the last byte read
! cnt   - number of characters actually transferred on read

IF NOT sin( .jfn, .ptr, 20, %C'.'; jfn, , cnt )
    .......             ! Error code

! This time, the string-read will be terminated if a "." is seen.
! The value in "ptr" is not updated after the call.

The interesting fact about this example is that the  compiler  may  be
able  to  keep  the local data-segments "jfn", "ptr" and "cnt" in AC1,
AC2 and AC3 respectively.  If it cannot, it  will  automatically  move
the values returned from the JSYS-call to the data-segments.
Bliss-36 Release 2.1 For TOPS-20: Release Notes                 Page 8

2.4  LIBRARY Declaration In LIBRARY Precompilation

LIBRARY declarations are now permitted in  a  library  precompilation.
This permits the use of data-structuring packages such as XPORT In the
construction of a "library" and also  within  the  individual  modules
which refer to that library.

2.4.1  Semantics

All symbols loaded from the LIBRARY declared during precompilation are
ephemeral.   That is, they will be implicitly UNDECLARED at the end of
library compilation.  This avoids any compilation error messages about
names being declared in two libraries.

If it is necessary to "keep" the symbols from the declared LIBRARY, it
should be referenced as a REQUIRE using its source file.

2.4.2  Example

Assume that you are building a library COMLIB containing  the  set  of
common  data structures for a project.  These data structures will use
XPORT's $FIELD macros.  In addition, the project will use XPORT's  i/o
package.  Thus, COMLIB.REQ contains lines of the form....

                NEXT=   [$ADDRESS],
                LAST=   [$ADDRESS],
                VALU=   [$INTEGER]

When COMLIB.REQ is precompiled into  a  library,  the  definitions  of
$FIELD,  $ADDRESS  and $INTEGER are loaded from the XPORT library.  At
the end of the precompilation, these definitions are deleted.

When compiling a module which will use XPORT i/o, it can contain lines
of the form



It is important to notice that if the  COMLIB  library  had  contained
declarations of the form

Bliss-36 Release 2.1 For TOPS-20: Release Notes                 Page 9

that the MACRO declaration doesn't  expand  its  body  at  declaration
time.  Thus $FIELD would be unbound.  If a source module which did not
have a declaration of the library XPORT  referenced  the  DOLLAR_FIELD
macro,  the  $FIELD  would  be  treated  as  an  undefined name!  This
difficulty can be circumvented through the  judicious  application  of
the %EXPAND lexical function.

2.5  Diagnostic Messages

This section lists  new  compiler  informational,  warning  and  error
messages which have been added since V2.0

2.5.1  Output Formal Parameter Not Described In LINKAGE

See Section 2.2 of these release notes for the description  of  output
register parameters.

2.5.2  Output Actual Parameter Was Not Described In Linkage

See Section 2.2 of these release notes for the description  of  output
register parameters.


If Bliss-36 Version 2.1 is used to compile  a  library,  that  library
cannot  be  used with a V2.0 compiler.  The new release can handle any
library compiled by  a  V2.0  compiler.   We  recommend  that  you  do
recompile all library files with the latest release.  We apologize for
any inconvenience caused by this change.



     A number of sources of additional help are available.

      o  For information on command interface -- "HLP:BLISS.HLP"  Just
         type "HELP BLISS" to the monitor.

      o  Further  information  on   command   interface   --   command
         completion I.e.  use ?  during command type-in.
Bliss-36 Release 2.1 For TOPS-20: Release Notes                Page 10

      o  Language information -- "BLISS  Language  Guide":   Documents
         the  BLISS  language.   The  second  edition, which documents
         version  2  of  BLISS  is  available  as  SDC  order   number

      o  Compiler information -- "BLISS-36 User's  Guide":   Describes
         use  of  the  BLISS-36  compiler,  some  available tools, and
         machine  specific  features.   The  second   edition,   which
         documents  version  2  of  BLISS-36 is available as SDC order
         number AA-H712B-TK.

      o  Syntax summary -- "BLISS Pocket  Guide":   Available  as  SDC
         order number AV-H289B-TK.

      o  BLISS course -- A course in the BLISS programming language is
         available  from  DEC.  Your system manager may obtain further
         information  by  contacting  DEC  Educational   Services   at
         (617) 275-5000 ext. 2675.

      o  BLISS-36 debugger (SIX12):  "HLP:SIX12.HLP":  Just type "HELP
         SIX12" to the monitor.

      o  BLISS pretty-print  utility:   "HLP:PRETTY.HLP":   Just  type
         "HELP PRETTY" to the monitor.

      o  BLISS cross-reference utility:  "HLP:BLSCRF.HLP":  Just  type
         "HELP BLSCRF" to the monitor.

      o  Simple  terminal  I/O:   "HLP:TUTIO.HLP":   Just  type  "HELP
         TUTIO" to the EXEC.

      o  Conversion   of   BLISS-10   programs    to    BLISS-36    --
         "HLP:CVT10.HLP":   Just  type  "HELP CVT10" to the EXEC.  For
         greater detail see the file "DOC:CVT10.DOC".

      o  Monitor interfaces -- "DOC:MONINT.DOC".

      o  Examining ".REL" files -- "HLP:DMPREL.HLP":  Just type  "HELP
         DMPREL" to the EXEC.

      o  Anything else -- contact your system manager.


     Below is a list of the major components of the  BLISS-36  system.
Full  support  is  available  only for the BLISS compiler itself.  The
other components are unsupported but will be maintained to the  extent
our resources allow.

      o  BLISS -- The BLISS-36 compiler itself.
Bliss-36 Release 2.1 For TOPS-20: Release Notes                Page 11

      o  PRETTY -- An automatic formatting program  for  BLISS  source

      o  BLSCRF and CONDEN --  A  cross-reference  listing  generating
         system for BLISS source code.

      o  EZIO and TUTIO -- I/O utilities for BLISS-36.

      o  Monitor Interfaces -- definitions necessary  for  interfacing
         with the TOPS-10 and TOPS-20 monitors.

      o  CVT10 -- BLISS-10 to BLISS-36 conversion program.

      o  SIX12 -- High level debugger for BLISS-36.

      o  XPORT -- Transportable BLISS programming tools