Google
 

Trailing-Edge - PDP-10 Archives - bb-h138f-bm - 7-sources/diumlb.bli
There are 4 other files named diumlb.bli in the archive. Click here to see a list.
%TITLE 'DIUMLB -- Library of definitions for data type code mappings.'
!++
!	COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1986.
!	ALL RIGHTS RESERVED.
!
!	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 THAT IS NOT SUPPLIED BY DIGITAL.
!
!   FACILITY: Data Interchange Utility (DIU)
!
!   ABSTRACT: DIUMLB is the library of definitions and data structures
!             used by the Mapping routines (see module DIUMAP).
!
!   AUTHOR: Sandy Clemens, Creation Date: 30-Jul-84
!
!   HISTORY:
!
!  236  Change library of DIXLIB to DIUDIX.
!       Sandy Clemens  19-Jun-86
!
!   73	Get rid of "need_usage".  Make all usage type literals POSITIVE so that
!	comparison of reqblk[DIU$B_???_USAGE_TYP] (a single BYTE) with the
!	the fullword literals always gives the desired result.
!	Sandy Clemens	4-Mar-86
!
!   65	Add new usage type codes.
!	Sandy Clemens  12-Feb-86
!  
!--
!++
!
!  Library and require files.
!
!--
%BLISS32 
         (LIBRARY 'SYS$LIBRARY:XPORT';)

%BLISS36
        (LIBRARY 'BLI:XPORT';)

LIBRARY 'DIUDIX';
!++
!
!   The maximum possible values for the various data type codes.  The
!   three sources for data type codes are VAX CDD, TOPS-20 Datatrieve,
!   and DIL/DIU sources.  The maximum values are determined by what is
!   value for each of the sources!  The DIL maximum values are defined
!   (one for each class) in DIUDIX.  The names for the DIL maximum data
!   type codes are named DT_CLASS_<class-name>_MAX.  For example the max
!   type code for the string class is DT_CLASS_STRING_MAX.  See DIUDIX
!   for more information!
!
!--

LITERAL cdd_max = 260,                  ! max cdd table index value
        dtr_max = 26;                   ! max dtr table index value


!++
!
!   Values for the usage type flag.  The usage flag indicates a usage
!   type (or character set) which overrides the usage type that may be
!   indicated by the data type.  This flag should be set to default_typ
!   for non-text data types.  Text data types are in the classes string
!   and display-numeric.  Note that packed decimal has a special case
!   here because on 36-Bit systems packed decimal can only be used with
!   usage EBCDIC, but on 8-bit systems it can be used with any usage.
!   
!--

LITERAL default_typ = 0,                ! default usage type
        ascii_txt = 1,                  ! ascii text
        ebcdic_txt = 2,                 ! ebcdic text
        sixbit_txt = 3,                 ! sixbit text
        unspec_typ = 4;                 ! type has not been specified yet
!++
!
!   Source indicators.  The source indicator is passed by any routine
!   which calls the mapping routines.  The source indicator
!   determines whether the source is DTR-20, VAX CDD or DIL/DIU.  It
!   is necessary to know this in order to know which set of data type
!   codes are being mapped from.
!
!--

LITERAL 
        cdd32_src = 0,
        dil_src = 1,
        dtr20_src = 2;

!++
! Define two literals which do not conflict with any of the DIL
! datatypes and which can be used to identify the cases of datatype
! OVERLAY and datatype STRUCTURE.  The CDD uses the literal value
! 'CDD$K_DTYPE_OVR' which is set to 258 for data type overlay.  The
! value 258 is aleady used as a data type code by DIL.  The CDD uses
! the literal 'CDD$K_DTYPE_Z' (which is set to 0) for structures, but
! the mapping routines return zero when a requested mapping is
! invalid.  Therefore, we can't simply use the CDD codes, so two new
! literals are necesssary.
!--

LITERAL DIU$K_DT_OVERLAY = 4001;
LITERAL DIU$K_DT_STRUCTURE = 4002;
!++
!
!   Definition of the OPTLST structure.  The OPTLST structure is the
!   list of options available if a special usage type switch is
!   indicated.  The list of options is in a separate structure so that
!   space can be saved in the MAP_TAB structure, and because for many
!   of the MAP_TABs used in DIUMAP, the options are exactly the same
!   for numerous data types.  If a data type in a mapping table is a
!   usage type, the address of the OPTLST for the data type will be
!   stored as part of the MAP_TAB entry.
!
!--

$field optlst_fields =
   SET
   opt_ascii8 = [$bits(class_code_bits + type_code_bits)],      ! ascii 8bit
   opt_ascii7 = [$bits(class_code_bits + type_code_bits)],      ! ascii 7bit
   opt_ebcdic8 = [$bits(class_code_bits + type_code_bits)],     ! ebcdic 8bit
   opt_ebcdic9 = [$bits(class_code_bits + type_code_bits)],     ! ebcdic 9bit
   opt_sixbit = [$bits(class_code_bits + type_code_bits)]       ! sixbit
   TES;

LITERAL optlst_size = $field_set_size;


!++
!
!   Macro optlst_vals is used to assign values to a single OPTLST's
!   fields.  If the caller indicates a usage option, other than the
!   default, and the data type's text flag is set to ON in the
!   MAP_TAB, then the mapping routines will use the OPTLST indicated
!   in the MAP_TAB to select the appropriate data type.  For example,
!   if a calling program has passed the CDD data type code for ASCII
!   8-bit text, but the user has the EBCDIC flag on and indicates that
!   the destination system is LCG, then the data type which should be
!   returned is EBCDIC 9-bit.  A second example: If the caller passes
!   data type code for UNSIGNED NUMERIC ASCII 8-bit (DN8U) but the
!   SIXBIT flag is on and the destination system is LCG, then the data
!   type which should be returned is UNSIGNED NUMERIC SIXBIT (DN6U).
!   The OPTLST table is where this information is stored.  This macro
!   is used to make assigning values to OPTLST's easier!!!  (*WHEW*)
!   
!--

MACRO optlst_vals (asc_lcg, asc_8bit, ebc_lcg, ebc_8bit, sxb_lcg) =
      [opt_ascii7] = asc_lcg, 
      [opt_ascii8] = asc_8bit, 
      [opt_ebcdic9] = ebc_lcg, 
      [opt_ebcdic8] = ebc_8bit, 
      [opt_sixbit] = sxb_lcg
%;

!++
!   
!   Macro OPTLST is used to define a single OPTLST structure...
!   
!--

MACRO optlst = BLOCK [optlst_size]
               FIELD (optlst_fields)
               %;
!++
!
!   Definition of the mapping table (MAP_TAB) structure.  Each MAP_TAB
!   is set up for the index to be a data type code of the source
!   facility (CDD, DTR, DIL/DIU).  Each MAP_TAB entry, one for each
!   possible source data type code, contains a default data type for
!   each of the three systems: LCG, 8BIT (VAX/VMS), PRO.  Each entry
!   also has a text flag which indicates whether or not the data type
!   can be effected by a character set preference.  If the text flag
!   is ON, then there should be an OPTLST address included in the
!   MAP_TAB entry.  If the text flag is OFF, the OPTLST address should
!   be set to zero, althought it will be ignored.
!
!--

$field map_fields = 
   SET

   map_def8 =                           ! default 8bit data type
       [$bits(class_code_bits
              + type_code_bits)],
   map_deflcg =                         ! default LCG data type
       [$bits(class_code_bits
              + type_code_bits)],
   map_defpro =                         ! default PRO data type
       [$bits(class_code_bits
              + type_code_bits)],

   map_txt_flg = [$bit],                ! if ON, there are different options
                                        ! available, depending on the usage
                                        ! type indicated by the caller

   map_optlst = [$address]              ! address of OPTLST

   TES;

LITERAL map_size = $field_set_size;

!++
!   
!   Macro map_entry is used to define a single map table entry.  It
!   takes the index, text flag, default 8-bit data type, default LCG
!   data type, default PRO data type and the OPTLST address and stuffs
!   all this information into the MAP_TAB at the index indicated.  The
!   index should be the value of a data type code from the source
!   facility, depending on what that source facility is (DIU/DIL, CDD,
!   DTR).
!
!--

MACRO map_entry (map_indx, txt_flag, def_8bit, def_lcg, def_pro, opts) =
      [map_indx, map_def8] = def_8bit,
      [map_indx, map_deflcg] = def_lcg,
      [map_indx, map_defpro] = def_pro,
      %IF txt_flag                      ! if text flag ON, save OPTLST address
          %THEN
               [map_indx, map_optlst] = %QUOTE %NAME (opts, '_opt'),
          %ELSE
      %FI
      [map_indx, map_txt_flg] = txt_flag
   %;

!++
!   
!   Macro MAP_TAB is used to define a mapping table structure...
!   
!--

MACRO map_tab (size) = BLOCKVECTOR [size, map_size]
                       FIELD (map_fields)
                       %;