Google
 

Trailing-Edge - PDP-10 Archives - tops20-v7-ft-dist1-clock - 7-sources/diummp.bli
There are 4 other files named diummp.bli in the archive. Click here to see a list.
%TITLE 'Portals to MOVE-MATCHING/MOVE-OTHERS-MATCHING Transform Routines'
MODULE DIUMMP(
       IDENT='253'
       %BLISS32 (,
                 ADDRESSING_MODE(EXTERNAL=GENERAL,NONEXTERNAL=LONG_RELATIVE)
                )
       %BLISS36 (,
                 ENTRY (movmat, deftra)
                )
                               ) = 
BEGIN
!++
!	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:	DIU    Data Interchange Utility  V01-000
!
! ABSTRACT:	Portal to the routines which generate default
!		move-matching and move-others-matching transforms.
!
! AUTHOR:	Sandy Clemens, Creation Date:  25-Oct-84
!
! EDIT HISTORY:
!
!       3	Clean up copyright notices.  Change LIBRARY 'DIUMSG' to
!               'DIU'.  Clean up condition handling.  Remove some of the
!               debugging calls to DIU$DUMP_TRANSFORM.  Fix dot bug in
!		DIU$DEF_TRANS.
!		Sandy Clemens	14-Jun-85
!
!       10	Make default transform generation code use the DIU top level
!               condition handler rather than DIU$TRANS_HANDLER.
!               Sandy Clemens	20-Jun-85
!
!  236  Change library of DIXLIB to DIUDIX.
!       Sandy Clemens  19-Jun-86
!
!  253  Change libraries to new names.
!       Gregory A. Scott 1-Jul-86
!--
!********************************************************************
!           L I B R A R Y   A N D   R E Q U I R E    F I L E S
!********************************************************************
%IF %BLISS (BLISS32)
%THEN
     LIBRARY 'SYS$LIBRARY:XPORT';       ! XPORT definitions
     UNDECLARE %QUOTE $STRING;
     LIBRARY 'SYS$LIBRARY:STARLET';     ! VMS System Services
     LIBRARY 'DIU$SOURCE_LIB:DIUVMS';	! DIU VMS Specifics
     LIBRARY 'DIU$SOURCE_LIB:DIUMSG';	! DIU MESSAGE Literals
%FI

%IF %BLISS (BLISS36)
%THEN
     LIBRARY 'BLI:XPORT';               ! XPORT definitions
     LIBRARY 'FAOPUT';                  ! Defines $FAO_PUT macro
     LIBRARY 'FAO';
     LIBRARY 'DIU';
%FI

UNDECLARE %QUOTE $DESCRIPTOR;
LIBRARY 'DIUCRX';                       ! CRX data structures
UNDECLARE %QUOTE $DESCRIPTOR;
LIBRARY 'DIUTLB';			! DIU Transform structure
UNDECLARE %QUOTE $DESCRIPTOR;
UNDECLARE %QUOTE STS$K_SEVERE, %QUOTE STS$K_ERROR, %QUOTE STS$K_WARNING,
          %QUOTE STS$K_SUCCESS, %QUOTE SS$_NORMAL, %QUOTE STS$K_INFO;
LIBRARY 'DIUDIX';			! DIX/DIL specific things
LIBRARY 'DIUMLB';			! DIU Mapping routines library

EXTERNAL ROUTINE
	DIU$DUMP_TRANSFORM,
	DIU$CLEAN_TRANS,
	DIU$MATCH_TRANS,
	DIU$TRAVERSE_TREE,
	DIU$DEL_TRANS_LIST;
!******************************************************************
!                    D I U $ M O V E _ M A T
!******************************************************************
GLOBAL ROUTINE DIU$MOVE_MAT (mm_flg,src_tree,dst_tree,trans,dimsrc,dimdst) =
BEGIN
!++
! FUNCTIONAL DESCRIPTION
!
!	This routine is the portal to the routines which generate
!       default move-matching and move-others-matching transforms.
!       This routine can be called with subtrees and/or to perform
!       a move-matching on a structure, etc.
!
! FORMAL PARAMETERS
!
!	mm_flg		is a flag which indicates either move_matching
!			or move_others_matching
!
!	src_tree	is the address of the record description
!			tree or subtree for the source record
!
!	dst_tree	is the address of the record description
!			tree or subtree for the destination record
!
!       trans           location where the address of the first transform
!                       nodes should be returned
!
!       dimsrc          is the address of the current DIMS node which
!                       applies to the source record description subtree
!                       or 0 if none
!
!       dimdst          is the address of the current DIMS node which
!                       applies to the destination record description
!                       subtree or 0 if none
!
!                       
! IMPLICIT PARAMETERS
!
!	None
!
! ROUTINE VALUE
!
!	STATUS; ALSO modifys address passed in parameter TRANS
!
!--

BIND    transform_list = .trans,
        s_tree = .src_tree,
        d_tree = .dst_tree,
        p_srcdim = .dimsrc,
        p_dstdim = .dimdst;

LOCAL   status : INITIAL(0),
        dst_trans_lst : INITIAL (0);

!++
! Traverse the source record description tree and create
! a default transform.
!--
status = DIU$TRAVERSE_TREE (s_tree, transform_list, .mm_flg, p_srcdim);
IF NOT .status
THEN RETURN(.status);

!++
! Traverse the destination record description tree and create
! a default transform.
!--
status = DIU$TRAVERSE_TREE (d_tree, dst_trans_lst, .mm_flg, p_dstdim);
IF NOT .status
THEN RETURN(.status);

!++
! Call DIU$MATCH_TRANS to match up the two transforms and find fields
! which can be moved with move-matching / move-others-matching.
!--
status = DIU$MATCH_TRANS(.transform_list, .dst_trans_lst);
IF NOT .status
THEN RETURN (.status);

!++
! Release the memory used by the temporary transform structure which
! is only needed until the "matching" is done by routine DIU$MATCH_TRANS.
!--
DIU$DEL_TRANS_LIST (.dst_trans_lst);

!++
! Call DIU$CLEAN_TRANS to remove any fields from the transform which
! weren't "matched" by the DIU$MATCH_TRANS routine.
!--
transform_list = DIU$CLEAN_TRANS (.transform_list);

%IF diu$k_tra_debug                     ! debug code
%THEN
     $FAO_PUT (1, ' ');
     $FAO_PUT (1, ' ');
     $FAO_PUT (1, 'FINAL TRANSFORM STRUCTURE: ');
     DIU$DUMP_TRANSFORM (.transform_list);
%FI

RETURN DIU$_NORMAL;                     ! return normal status

END;
!******************************************************************
!                    D I U $ D E F _ T R A N S
!******************************************************************
GLOBAL ROUTINE DIU$DEF_TRANS (stree,dtree,trans) =
BEGIN
!++
! FUNCTIONAL DESCRIPTION
!
!	This routine is a portal to the routines which generate
!       default transforms.  This routine should not be used to
!       generate transforms for subtrees and cannot be used for
!       move-others-matching -- it assumes move-matching!  This
!       routine simply calls DIU$MOVE_MAT with default parameters...
!
! FORMAL PARAMETERS
!
!	stree   	is the address of the record description
!			tree or subtree for the source record
!
!	dtree   	is the address of the record description
!			tree or subtree for the destination record
!
!       trans           location where the address of the first transform
!                       nodes should be returned
!
!                       
! IMPLICIT PARAMETERS
!
!	None
!
! ROUTINE VALUE
!
!	STATUS; ALSO modifys address passed in parameter TRANS
!
!--

LOCAL mm_flg : INITIAL (DIU$K_MOV_MAT),
      dims_src : INITIAL (0),
      dims_dst : INITIAL (0),
      status : INITIAL (0);

!++
! In case there is still a trans list hanging around, get rid of it at this
! point -- we should be starting fresh at this point!!
!--
IF ..trans NEQ 0
THEN DIU$DEL_TRANS_LIST (..trans);
.trans = 0;

!++
! call move-matching portal with correct "default" parameters...
!--
status = DIU$MOVE_MAT (.mm_flg, .stree, .dtree, .trans,
                       .dims_src, .dims_dst);

IF NOT .status
THEN RETURN (.status);

RETURN DIU$_NORMAL;

END;

END
ELUDOM