Trailing-Edge
-
PDP-10 Archives
-
BB-JF18A-BM
-
sources/diu/diucsr.b36
There are 4 other files named diucsr.b36 in the archive. Click here to see a list.
%TITLE 'Write Conversion Statistics Report'
MODULE DIUCSR (IDENT = '253',
ENTRY (DIU$CSR)
) =
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
!
! ABSTRACT: Routines to process the DIU transform structure for
! data conversion / transformation. These routines
! extract the appropriate information out of each
! transform node and perform the data conversion
! specified by that information. The data conversion
! is performed by the DIL data conversion routines.
!
! AUTHOR: Sandy Clemens, Creation Date: 26-Jun-85
! EDIT HISTORY:
!
! 253 Change CRX library to DIUCRX.
! Gregory A. Scott 1-Jul-86
!
! 240 Change name to DIU$CSR - something that makes sense for output in DDT.
! Use the DIXTAB that is in DIUERR rather than having another copy here.
! Gregory A. Scott 19-Jun-86
!
! 236 Change library of DIXLIB to DIUDIX.
! Sandy Clemens 19-Jun-86
!
! 235 Add DIUCSR.B36: Rewrite from DIUCSR.BLI to reflect changes in DIU
! and remove TOPS-10 and VMS conditionals.
! Sandy Clemens 18-Jun-86
!--
%SBTTL 'Libraries and Literals'
LIBRARY 'DIUTLB';
LIBRARY 'DIUCRX';
LIBRARY 'BLI:XPORT'; ! XPORT definitions
LIBRARY 'DIU'; ! DIU TOPS-20 MESSAGE definitions
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 definitions
LITERAL header_typ = 1, ! literals used to identify different
field_head_typ = 2, ! types of things which can be written
msg_typ = 3, ! to the terminal or log file for the
end_typ = 4; ! conversion statistics report
EXTERNAL ROUTINE LJ$UTXT,
FAOL,
SINGLE_FQN_NAME;
EXTERNAL dixtab : DIU_ERROR_TABLE(), ! DIX error table
interactive, ! TRUE if interactive
tty : $XPO_IOB(); ! Terminal IOB
%SBTTL'Routine WRITE_LINE -- write a line to the user log file'
ROUTINE WRITE_LINE (type, p_descr, dix_cond, num_errs) : NOVALUE =
!++
! FUNCTIONAL DESCRIPTION
!
! This routine writes either a report header, field header, "end of
! report" message, or report entry for the conversion statistics report.
!
! FORMAL PARAMETERS
!
! type integer (literal) identifying the type of entry
! to be written
!
! p_descr the message to be written
!
! dix_cond an error condition if this is a report entry with
! an associated condition value
!
! num_errs the number of times the error occurred (if this is
! a report entry with an associated error condition)
!
! ROUTINE VALUE
!
! NONE
!--
BEGIN
LOCAL descr : REF $STR_DESCRIPTOR(CLASS = DYNAMIC),
strng : $STR_DESCRIPTOR(),
outlen : INITIAL (512), ! for FAOL call
outbuf : $STR_DESCRIPTOR (CLASS = DYNAMIC_BOUNDED, STRING = (0, 0));
$STR_DESC_INIT (DESCRIPTOR = strng, CLASS = DYNAMIC);
SELECTONE .type OF
SET
[header_typ] : ! write the report header
$STR_COPY (TARGET = strng,
STRING = %STRING ('| Conversion statistics',
%CHAR (13, 10)));
[field_head_typ] : ! write field header
BEGIN
descr = .p_descr;
$STR_COPY (TARGET = strng,
STRING = $STR_CONCAT ('|',
%CHAR (13, 10), ! CRLF
'| Field ',
.descr,
%CHAR (13, 10)));
END;
[msg_typ] : ! write a report entry w/ condition
! message and count of occurrences
BEGIN
INCR indx FROM 0 TO dix_max_cond DO
IF .dixtab [.indx, DIU$G_ERRTAB_CODE] EQL .dix_cond
THEN BEGIN
! make string w/dix error in it
$STR_COPY (STRING = $STR_CONCAT ('| ',
dixtab [.indx, DIU$T_ERRTAB_TEXT],
' occurred !SL time!%S',
%CHAR (13, 10)
),
TARGET = strng);
$XPO_GET_MEM (CHARACTERS = .outlen, DESC = outbuf, FILL = %C' ');
FAOL (strng, outlen, outbuf, num_errs); ! let faol fill string
$STR_COPY (STRING = outbuf, TARGET = strng);
$XPO_FREE_MEM (STRING = outbuf);
END;
END;
[end_typ] : ! write "end of report" message
$STR_COPY (TARGET = strng,
STRING = %STRING('|', %CHAR(13,10), '| End conversion statistics'));
TES;
!
! Write the text
!
IF .interactive
THEN $XPO_PUT (IOB = tty, STRING = strng) ! Write message to terminal
ELSE LJ$UTXT(strng); ! Write to LOG file
END; ! end of routine WRITE_LINE
%SBTTL 'DIU$CSR -- Conversion Statistics Report'
GLOBAL ROUTINE DIU$CSR (p_trans) =
!++
! FUNCTIONAL DESCRIPTION
!
! This routine writes a data conversion statistics report to the user log
! file or the terminal after data conversion has been completed.
!
! FORMAL PARAMETERS
!
! p_trans address of the transform node which contains the FFDs for
! which the conversion error occurred
!
! ROUTINE VALUE
!
! FALSE if we had any errors
! TRUE if there were no errors
!
!--
BEGIN
LOCAL trans : REF transform_str,
src_nam : $STR_DESCRIPTOR(),
dst_nam : $STR_DESCRIPTOR(),
header_flag : INITIAL (0),
text : $STR_DESCRIPTOR();
trans = .p_trans;
$STR_DESC_INIT (DESCRIPTOR = text, CLASS = DYNAMIC, STRING = (0, 0));
IF .trans NEQ 0
THEN DO BEGIN
IF .trans [tra_worst] NEQ 0 ! if there are errors for this field
THEN ! then tell the user...
BEGIN
! make single strings for the names of each field
SINGLE_FQN_NAME (.trans [tra_src_addr], src_nam);
SINGLE_FQN_NAME (.trans [tra_dst_addr], dst_nam);
IF .header_flag EQL 0 ! if header hasn't been written yet,
THEN BEGIN ! then write it...
WRITE_LINE (header_typ, 0, 0, 0);
header_flag = 1;
END;
$STR_COPY (TARGET = text, ! always write the field name header
STRING = ! if there are any errors...
$STR_CONCAT (src_nam, ' to ', dst_nam));
WRITE_LINE (field_head_typ, text, 0, 0);
!
! Errors are stored in the transform structure based on the
! data class of the conversion (either fixed-point data,
! floating-point or string)...
!
CASE .trans [tra_src$v_dt_class] FROM 1 TO dix$k_max_class OF
SET
[dt_string] :
BEGIN
IF .trans [tra_str_rounded] NEQ 0
THEN WRITE_LINE (msg_typ, 0, DIX$_ROUNDED,
.trans [tra_str_rounded]);
IF .trans [tra_str_unimp] NEQ 0
THEN WRITE_LINE (msg_typ, 0, DIX$_UNIMP,
.trans [tra_str_unimp]);
IF .trans [tra_str_graphic] NEQ 0
THEN WRITE_LINE (msg_typ, 0, DIX$_GRAPHIC,
.trans [tra_str_graphic]);
IF .trans [tra_str_fmtlost] NEQ 0
THEN WRITE_LINE (msg_typ, 0, DIX$_FMTLOST,
.trans [tra_str_fmtlost]);
IF .trans [tra_str_nonprint] NEQ 0
THEN WRITE_LINE (msg_typ, 0, DIX$_NONPRINT,
.trans [tra_str_nonprint]);
IF .trans [tra_str_trunc] NEQ 0
THEN WRITE_LINE (msg_typ, 0, DIX$_TRUNC,
.trans [tra_str_trunc]);
IF .trans [tra_str_invalchar] NEQ 0
THEN WRITE_LINE (msg_typ, 0, DIX$_INVALCHAR,
.trans [tra_str_invalchar]);
END;
[dt_fbin, dt_dnum, dt_pdec] :
BEGIN
IF .trans [tra_fix_rounded] NEQ 0
THEN WRITE_LINE (msg_typ, 0, DIX$_ROUNDED,
.trans [tra_fix_rounded]);
IF .trans [tra_fix_unimp] NEQ 0
THEN WRITE_LINE (msg_typ, 0, DIX$_UNIMP,
.trans [tra_fix_unimp]);
IF .trans [tra_fix_toobig] NEQ 0
THEN WRITE_LINE (msg_typ, 0, DIX$_TOOBIG,
.trans [tra_fix_toobig]);
IF .trans [tra_fix_impossible] NEQ 0
THEN WRITE_LINE (msg_typ, 0, DIX$_IMPOSSIBLE,
.trans [tra_fix_impossible]);
IF .trans [tra_fix_unsigned] NEQ 0
THEN WRITE_LINE (msg_typ, 0, DIX$_UNSIGNED,
.trans [tra_fix_unsigned]);
IF .trans [tra_fix_invdnumchr] NEQ 0
THEN WRITE_LINE (msg_typ, 0, DIX$_INVDNUMCHR,
.trans [tra_fix_invdnumchr]);
IF .trans [tra_fix_invdnumsgn] NEQ 0
THEN WRITE_LINE (msg_typ, 0, DIX$_INVDNUMSGN,
.trans [tra_fix_invdnumsgn]);
IF .trans [tra_fix_invpddgt] NEQ 0
THEN WRITE_LINE (msg_typ, 0, DIX$_INVPDDGT,
.trans [tra_fix_invpddgt]);
IF .trans [tra_fix_invpdsgn] NEQ 0
THEN WRITE_LINE (msg_typ, 0, DIX$_INVPDSGN,
.trans [tra_fix_invpdsgn]);
END;
[dt_fp] :
BEGIN
IF .trans [tra_fp_rounded] NEQ 0
THEN WRITE_LINE (msg_typ, 0, DIX$_ROUNDED,
.trans [tra_fp_rounded]);
IF .trans [tra_fp_unimp] NEQ 0
THEN WRITE_LINE (msg_typ, 0, DIX$_UNIMP,
.trans [tra_fp_unimp]);
IF .trans [tra_fp_toobig] NEQ 0
THEN WRITE_LINE (msg_typ, 0, DIX$_TOOBIG,
.trans [tra_fp_toobig]);
IF .trans [tra_fp_unnorm] NEQ 0
THEN WRITE_LINE (msg_typ, 0, DIX$_UNNORM,
.trans [tra_fp_unnorm]);
IF .trans [tra_fp_impossible] NEQ 0
THEN WRITE_LINE (msg_typ, 0, DIX$_IMPOSSIBLE,
.trans [tra_fp_impossible]);
END;
TES;
END;
trans = .trans [tra_next]; ! look at next transform node
END
UNTIL .trans EQL 0; ! until there are no more!
IF .header_flag ! if we had any errors
THEN WRITE_LINE (end_typ, 0, 0, 0); ! write the 'end' message
IF .header_flag ! if we had any errors
THEN FALSE ! return false
ELSE TRUE ! return true
END;
END
ELUDOM