Trailing-Edge
-
PDP-10 Archives
-
decuslib20-07
-
decus/20-0172/convrt.bli
There is 1 other file named convrt.bli in the archive. Click here to see a list.
!<BLF/remark:9>
!<BLF/lowercase_user>
!<BLF/uppercase_key>
MODULE convrt ( !
IDENT = '01'
) =
BEGIN
!++
! Facility:
!
! BLISS Utilities
!
! Abstract:
!
! This module contains conversion routines, e.g. from binary
! integer to ASCII decimal strings. It is primarily designed for
! use by the BLISS Language Formatter, "PRETTY".
!
! Environment:
!
! Transportable.
!
!--
!<BLF/page>
!
! Table of contents:
!--
FORWARD ROUTINE
cvt$put_dec;
!
! Include files:
! (None)
!--
!
! Macros:
!--
!
! Equated symbols:
!--
LITERAL
true = 1 EQL 1,
false = 1 NEQ 1;
!
! Own storage:
!--
!
! External references:
! (None)
!--
GLOBAL ROUTINE cvt$put_dec (num, nd, cp) = !
!++
! Functional description:
!
! This routine converts an input value to ASCII decimal format.
!
! Formal parameters:
!
! cp = character pointer to the space in which the ASCII
! number is to be stored.
! nd = the number of digit positions expected (including
! num = the value to be converted
! leading spaces.) If the number is too large to be
! represented in nd digits, additional space will be
! taken so that the full value of the input will always
! be output.
!
! Implicit inputs:
!
! None
!
! Implicit outputs:
!
! None.
!
! Routine value:
!
! The character pointer to the next available position.
!
! Side effects:
!
! If the number is too large to fit the specified number of digits,
! more space will be used than requested. The user should
! check the actual space used (value of output character pointer.)
!
!--
BEGIN
LITERAL
last = 36; ! Max size of ASCII string
OWN
digits : INITIAL (CH$PTR (UPLIT('0123456789'))),
string : VECTOR [CH$ALLOCATION (last)],
len,
value, ! local version of t
tp; !
!<BLF/page>
value = ABS (.num);
CH$FILL (%C' ', .nd, .cp); ! Prepare output string to receive digits.
tp = CH$PTR (string, last);
DO
BEGIN
tp = CH$PLUS (.tp, -1);
CH$WCHAR (CH$RCHAR (CH$PLUS (.digits, .value MOD 10)), .tp);
value = .value/10;
END
UNTIL .value EQL 0;
IF .num LSS 0 THEN (tp = CH$PLUS (.tp, -1); CH$WCHAR (%C'-', .tp); );
len = CH$DIFF (CH$PTR (string, last), .tp);
RETURN CH$MOVE (.len, .tp, CH$PLUS (.cp, MAX (0, .nd - .len)));
END; ! End of 'cvt$put_dec'
%TITLE 'Last page of CONVRT.BLI'
END ! End of module 'convrt'
ELUDOM