mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-23 00:14:25 +00:00
77 lines
1.4 KiB
C
77 lines
1.4 KiB
C
/*************************************************************************
|
||
*
|
||
* _ _ p r t l d F u n c t i o n
|
||
* -------------------------------
|
||
* Copyright 1982 by Digital Research Inc. All rights reserved.
|
||
*
|
||
* "__prtld" prints LONGs, for use with "_doprt".
|
||
*
|
||
**************************************************************************/
|
||
#include "portab.h"
|
||
#include "osif.h" /* used for hardware dependencies: byte store order */
|
||
|
||
BYTE *__prtld(pobj, pbuf, base, signed, digs)
|
||
LONG *pobj;
|
||
BYTE **pbuf;
|
||
WORD base;
|
||
WORD signed;
|
||
BYTE *digs;
|
||
{
|
||
REG LONG n;
|
||
REG LONG b;
|
||
REG BYTE *p;
|
||
REG WORD ii;
|
||
extern long uldiv();
|
||
|
||
extern long uldivr;
|
||
struct long_struct *p_uldivr;
|
||
|
||
p_uldivr = &uldivr;
|
||
p = digs;
|
||
b = base;
|
||
n = *pobj;
|
||
if (base == 16) { /* special because of negatives */
|
||
ii = 8;
|
||
while (n && ii) {
|
||
*p++ = (int)n & 0xf; /* HY */
|
||
n >>= 4; /* MGL */
|
||
ii--;
|
||
}
|
||
}
|
||
else if (base == 8) {
|
||
ii = 11;
|
||
while (n && ii) {
|
||
*p++ = (int)n & 7; /* HY */
|
||
n >>= 3; /* MGL */
|
||
ii--;
|
||
}
|
||
if (ii==0) {
|
||
*(p-1) &= 3; /* only 2 bits in upper octal digit */
|
||
/* MGL */
|
||
}
|
||
}
|
||
else {
|
||
if (signed && n < 0) {
|
||
*(*pbuf)++ = '-';
|
||
n = -n;
|
||
}
|
||
while (n) {
|
||
n = uldiv(n,b); /* n>0 (or unsigned), do unsigned div*/
|
||
*p++ = p_uldivr->lblolo;
|
||
}
|
||
}
|
||
return (p);
|
||
}
|
||
unsigned div*/
|
||
*p++ = p_uldivr->lblolo;
|
||
}
|
||
}
|
||
return (p);
|
||
}
|
||
unsigned div*/
|
||
*p++ = p_uldivr->lblolo;
|
||
}
|
||
}
|
||
return (p);
|
||
}
|