Trailing-Edge
-
PDP-10 Archives
-
BB-X117B-SB_1986
-
10,7/vnp36/cbta.bli
There are 5 other files named cbta.bli in the archive. Click here to see a list.
MODULE CBTA ( !Binary to ASCII conversion
IDENT = '001010',
LANGUAGE (BLISS16, BLISS36) %BLISS36 (, ENTRY ($CBDAT, $CBDMG, $CBDSG, $CBOMG, $CBOSG, $CBTA,
$CBTMG))
) =
BEGIN
!
!
!
!COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1980,1981,1982,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 WHICH IS NOT SUPPLIED BY DIGITAL.
!
!++
! FACILITY: SYSTEM LIBRARY
!
! ABSTRACT:
!
!
! THIS MODULE CONTAINS ROUTINES FOR CONVERION OF BINARY TO VARIOUS
! NUMERIC ASCII REPRESENTATIONS.
!
!
! ENVIRONMENT: ANY
!
! AUTHOR: ALAN D. PECKHAM, CREATION DATE: 28-AUG-78
!
! MODIFIED BY:
!
! , : VERSION
! 01 -
!--
!
! TABLE OF CONTENTS:
!
FORWARD ROUTINE
$CBDAT, !Convert 2-digit date
$CBDMG, !Convert 5-digit unsigned decimal
$CBDSG, !Convert 5-digit signed decimal
$CBOMG, !Convert 6-digit unsigned octal
$CBOSG, !Convert 6-digit signed octal
$CBTA, !General convert binary to ASCII.
$CBTMG; !Convert 3-digit byte to unsigned octal
!
! INCLUDE FILES
!
! NONE
!
! MACROS:
!
! NONE
!
! EQUATED SYMBOLS:
!
! NONE
!
! OWN STORAGE:
!
! NONE
!
! EXTERNAL REFERENCES:
!
! NONE
!
GLOBAL ROUTINE $CBDAT (BUF_PTR_ADR, VALUE, FLAGS) =
!++
! FUNCTIONAL DESCRIPTION:
!
!
!
!
! FORMAL PARAMETERS:
!
! .BUF_PTR_ADR !Address of character sequence
! !pointer to buffer to insert
! !the number at.
! .VALUE !The value to convert.
! .FLAGS !Suppress leading zeros
! !if zero.
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! The buffer pointer ..BUF_PTR_ADR is updated to point past
! the characters inserted.
!
! ROUTINE VALUE:
!
! The number of characters inserted into the output buffer.
!
! SIDE EFFECTS
!
! NONE
!
!--
BEGIN
LITERAL
RADIX = 10,
WIDTH = 2,
SUPPRESS = RADIX + WIDTH^11,
NO_SUPPRESS = RADIX + WIDTH^11 + 1^9;
$CBTA (.BUF_PTR_ADR, .VALUE, (IF .FLAGS EQL 0 THEN SUPPRESS ELSE NO_SUPPRESS))
END; !OF $CBDAT
GLOBAL ROUTINE $CBDMG (BUF_PTR_ADR, VALUE, FLAGS) =
!++
! FUNCTIONAL DESCRIPTION:
!
!
!
!
! FORMAL PARAMETERS:
!
! .BUF_PTR_ADR !Address of character sequence
! !pointer to buffer to insert
! !the number at.
! .VALUE !The value to convert.
! .FLAGS !Suppress leading zeros
! !if zero.
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! The buffer pointer ..BUF_PTR_ADR is updated to point past
! the characters inserted.
!
! ROUTINE VALUE:
!
! The number of characters inserted into the output buffer.
!
! SIDE EFFECTS
!
! NONE
!
!--
BEGIN
LITERAL
RADIX = 10,
WIDTH = 5,
SUPPRESS = RADIX + WIDTH^11,
NO_SUPPRESS = RADIX + WIDTH^11 + 1^9;
$CBTA (.BUF_PTR_ADR, .VALUE, (IF .FLAGS EQL 0 THEN SUPPRESS ELSE NO_SUPPRESS))
END; !OF $CBDMG
GLOBAL ROUTINE $CBDSG (BUF_PTR_ADR, VALUE, FLAGS) =
!++
! FUNCTIONAL DESCRIPTION:
!
!
!
!
! FORMAL PARAMETERS:
!
! .BUF_PTR_ADR !Address of character sequence
! !pointer to buffer to insert
! !the number at.
! .VALUE !The value to convert.
! .FLAGS !Suppress leading zeros
! !if zero.
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! The buffer pointer ..BUF_PTR_ADR is updated to point past
! the characters inserted.
!
! ROUTINE VALUE:
!
! The number of characters inserted into the output buffer.
!
! SIDE EFFECTS
!
! NONE
!
!--
BEGIN
LITERAL
RADIX = 10,
WIDTH = 5,
SUPPRESS = RADIX + WIDTH^11 + 1^8,
NO_SUPPRESS = RADIX + WIDTH^11 + 1^8 + 1^9;
$CBTA (.BUF_PTR_ADR, .VALUE, (IF .FLAGS EQL 0 THEN SUPPRESS ELSE NO_SUPPRESS))
END; !OF $CBDSG
GLOBAL ROUTINE $CBOMG (BUF_PTR_ADR, VALUE, FLAGS) =
!++
! FUNCTIONAL DESCRIPTION:
!
!
!
!
! FORMAL PARAMETERS:
!
! .BUF_PTR_ADR !Address of character sequence
! !pointer to buffer to insert
! !the number at.
! .VALUE !The value to convert.
! .FLAGS !Suppress leading zeros
! !if zero.
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! The buffer pointer ..BUF_PTR_ADR is updated to point past
! the characters inserted.
!
! ROUTINE VALUE:
!
! The number of characters inserted into the output buffer.
!
! SIDE EFFECTS
!
! NONE
!
!--
BEGIN
LITERAL
RADIX = 8,
WIDTH = 6,
SUPPRESS = RADIX + WIDTH^11,
NO_SUPPRESS = RADIX + WIDTH^11 + 1^9;
$CBTA (.BUF_PTR_ADR, .VALUE, (IF .FLAGS EQL 0 THEN SUPPRESS ELSE NO_SUPPRESS))
END; !OF $CBOMG
GLOBAL ROUTINE $CBOSG (BUF_PTR_ADR, VALUE, FLAGS) =
!++
! FUNCTIONAL DESCRIPTION:
!
!
!
!
! FORMAL PARAMETERS:
!
! .BUF_PTR_ADR !Address of character sequence
! !pointer to buffer to insert
! !the number at.
! .VALUE !The value to convert.
! .FLAGS !Suppress leading zeros
! !if zero.
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! The buffer pointer ..BUF_PTR_ADR is updated to point past
! the characters inserted.
!
! ROUTINE VALUE:
!
! The number of characters inserted into the output buffer.
!
! SIDE EFFECTS
!
! NONE
!
!--
BEGIN
LITERAL
RADIX = 8,
WIDTH = 6,
SUPPRESS = RADIX + WIDTH^11 + 1^8,
NO_SUPPRESS = RADIX + WIDTH^11 + 1^8 + 1^9;
$CBTA (.BUF_PTR_ADR, .VALUE, (IF .FLAGS EQL 0 THEN SUPPRESS ELSE NO_SUPPRESS))
END; !OF $CBOSG
GLOBAL ROUTINE $CBTA (BUF_PTR_ADR, VALUE, FLAGS) =
!++
! FUNCTIONAL DESCRIPTION:
!
!
!
!
! FORMAL PARAMETERS:
!
! .BUF_PTR_ADR !Address of character sequence
! !pointer to buffer to insert
! !the number at.
! .VALUE !The value to convert.
! .FLAGS<0,8> !The conversion radix.
! .FLAGS<8,1> !VALUE is signed in TRUE.
! .FLAGS<9,1> !Don't compress leading zeros
! .FLAGS<10,1> !Replace leading zeros with blanks
! .FLAGS<11,5> !The maximum field length.
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! The buffer pointer ..BUF_PTR_ADR is updated to point past
! the characters inserted.
!
! ROUTINE VALUE:
!
! The number of characters inserted into the output buffer.
!
! SIDE EFFECTS
!
! NONE
!
!--
BEGIN
LOCAL
BUF_PTR,
BUF_PTR_INI, !Initial pointer into buffer
CHAR : VECTOR [32], !Holding area for remainders
CHAR_ADR, !Character position index
FIELD_LENGTH, !Length of receiving field
FILL_CHAR, !Fill character.
WORKING_VALUE; !This is our copy of his number.
BIND
RADIX = .FLAGS<0, 8>, !Radix for conversion
SIGN_FLAG = .FLAGS<8, 1>, !On if number should be signed
COMPRESS_FLAG = .FLAGS<9, 1>, !Zero compress if off
SUPPRESS_FLAG = .FLAGS<10, 1>; !On to change leading zeros to blanks
BUF_PTR_INI = (BUF_PTR = ..BUF_PTR_ADR); !Save the initial buffer position
FIELD_LENGTH = .FLAGS<11, 5>; !and get length of receiving field.
FILL_CHAR = %C'0';
WORKING_VALUE = (IF SIGN_FLAG AND .VALUE LSS 0 THEN
BEGIN
CH$WCHAR_A (%C'-', BUF_PTR); !Insert a minus sign
-.VALUE !and make positive.
END
ELSE .VALUE); !Copy the number.
!+
! Divide the value to death to get the individual digits.
!-
INCRA CHAR_ADR FROM CHAR [0] TO CHAR [.FIELD_LENGTH - 1] DO
BEGIN
.CHAR_ADR = .WORKING_VALUE MOD RADIX; !Save the remainder
WORKING_VALUE = .WORKING_VALUE/RADIX; !and do the division.
!+
! Now turn the number into a digit. If the radix allows digits beyond 9,
! map them up to 'A' through 'Z'.
!-
.CHAR_ADR = ..CHAR_ADR + (IF ..CHAR_ADR GTR 9 THEN %C'A' - 10 ELSE .FILL_CHAR);
IF .WORKING_VALUE EQL 0
THEN
BEGIN
!+
! If we haven't run out of room in the output field, then check
! for significant digit runout. If finished, shorten the field.
!-
IF NOT COMPRESS_FLAG THEN EXITLOOP (FIELD_LENGTH = (.CHAR_ADR - CHAR [0])/%UPVAL + 1);
!+
! If supressing leading zeros, do this now.
!-
IF SUPPRESS_FLAG THEN FILL_CHAR = %C' ';
END;
END;
!+
! The digits are extracted, place them into the output buffer.
!-
WHILE (FIELD_LENGTH = .FIELD_LENGTH - 1) GEQ 0 DO
CH$WCHAR_A (.CHAR [.FIELD_LENGTH], BUF_PTR); !Insert the digit.
.BUF_PTR_ADR = .BUF_PTR; !Return updated buffer pointer
CH$DIFF (.BUF_PTR, .BUF_PTR_INI) !and the number of characters inserted.
END; !OF $CBTA
GLOBAL ROUTINE $CBTMG (BUF_PTR_ADR, VALUE, FLAGS) =
!++
! FUNCTIONAL DESCRIPTION:
!
!
!
!
! FORMAL PARAMETERS:
!
! .BUF_PTR_ADR !Address of character sequence
! !pointer to buffer to insert
! !the number at.
! .VALUE !The value to convert.
! .FLAGS !Suppress leading zeros
! !if zero.
!
! IMPLICIT INPUTS:
!
! NONE
!
! IMPLICIT OUTPUTS:
!
! The buffer pointer ..BUF_PTR_ADR is updated to point past
! the characters inserted.
!
! ROUTINE VALUE:
!
! The number of characters inserted into the output buffer.
!
! SIDE EFFECTS
!
! NONE
!
!--
BEGIN
LITERAL
RADIX = 8,
WIDTH = 3,
SUPPRESS = RADIX + WIDTH^11,
NO_SUPPRESS = RADIX + WIDTH^11 + 1^9;
$CBTA (.BUF_PTR_ADR, .VALUE, (IF .FLAGS EQL 0 THEN SUPPRESS ELSE NO_SUPPRESS))
END; !OF $CBTMG
END
ELUDOM