1
0
Files
irix-657m-src/eoe/cmd/keyserv/mout.c
2022-09-29 17:59:04 +03:00

215 lines
3.7 KiB
C

/* Copyright (c) 1990, 1991 UNIX System Laboratories, Inc. */
/* Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T */
/* All Rights Reserved */
/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF */
/* UNIX System Laboratories, Inc. */
/* The copyright notice above does not evidence any */
/* actual or intended publication of such source code. */
#ident "@(#)keyserv:mout.c 1.1.3.2"
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* PROPRIETARY NOTICE (Combined)
*
* This source code is unpublished proprietary information
* constituting, or derived under license from AT&T's UNIX(r) System V.
* In addition, portions of such source code were derived from Berkeley
* 4.3 BSD under license from the Regents of the University of
* California.
*
*
*
* Copyright Notice
*
* Notice of copyright on this source code product does not indicate
* publication.
*
* (c) 1986,1987,1988,1989,1990 Sun Microsystems, Inc
* (c) 1983,1984,1985,1986,1987,1988,1989,1990 AT&T.
* (c) 1990,1991 UNIX System Laboratories, Inc.
* All rights reserved.
*/
/*
* Copyright (c) 1980 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
#if !defined(lint) && defined(SCCSIDS)
static char sccsid[] = "@(#)mout.c 1.1 89/03/10 Copyr 1986 Sun Micro";
#endif
/* from UCB 5.2 3/13/86 */
/* LINTLIBRARY */
#include <stdio.h>
#include "mp.h"
static
m_in(a,b,f)
MINT *a; FILE *f;
{
MINT x, y, ten;
int sign, c;
short qten, qy;
xfree(a);
sign=1;
ten.len=1;
ten.val= &qten;
qten=b;
x.len=0;
y.len=1;
y.val= &qy;
while ((c = getc(f)) != EOF)
switch (c) {
case '\\':
(void)getc(f);
continue;
case '\t':
case '\n':
a->len *= sign;
xfree(&x);
return(0);
case ' ':
continue;
case '-':
sign = -sign;
continue;
default:
if(c>='0' && c<= '9') {
qy=c-'0';
mult(&x,&ten,a);
madd(a,&y,a);
_mp_move(a,&x);
continue;
} else {
(void) ungetc(c,stdin);
a->len *= sign;
return(0);
}
}
return(EOF);
}
static
m_out(a,b,f) MINT *a; FILE *f;
{ int sign,xlen,i;
short r;
MINT x;
char *obuf, *malloc();
register char *bp;
if (a == NULL)
return;
sign=1;
xlen=a->len;
if(xlen<0)
{ xlen= -xlen;
sign= -1;
}
if(xlen==0) {
(void) fprintf(f,"0\n");
return;
}
x.len=xlen;
x.val=xalloc(xlen,"m_out");
for(i=0;i<xlen;i++) x.val[i]=a->val[i];
obuf=(char *)malloc(7*(unsigned)xlen);
bp=obuf+7*xlen-1;
*bp--=0;
while(x.len>0)
{ for(i=0;i<10&&x.len>0;i++)
{ sdiv(&x,(short)b,&x,&r);
*bp--=r+'0';
}
if(x.len>0) *bp--=' ';
}
if(sign==-1) *bp--='-';
(void) fprintf(f,"%s\n",bp+1);
free(obuf);
xfree(&x);
}
static s_div();
sdiv(a,n,q,r) MINT *a,*q; short n; short *r;
{ MINT x,y;
int sign;
sign=1;
x.len=a->len;
x.val=a->val;
if(n<0)
{ sign= -sign;
n= -n;
}
if(x.len<0)
{ sign = -sign;
x.len= -x.len;
}
s_div(&x,n,&y,r);
xfree(q);
q->val=y.val;
q->len=sign*y.len;
*r = *r*sign;
return;
}
static
s_div(a,n,q,r) MINT *a,*q; short n; short *r;
{ int qlen;
register int i;
register long int x;
register short *qval;
register short *aval;
x=0;
qlen=a->len;
q->val = xalloc(qlen,"s_div");
aval = a->val + qlen;
qval = q->val + qlen;
for(i = qlen - 1; i >= 0 ;i--) {
x = x * 0100000 + *--aval;
*--qval = x / n;
x = x % n;
}
*r=x;
if(qlen && q->val[qlen-1]==0) qlen--;
q->len=qlen;
if(qlen==0) free((char *) q->val);
}
min(a) MINT *a;
{
return(m_in(a,10,stdin));
}
omin(a) MINT *a;
{
return(m_in(a,8,stdin));
}
mout(a) MINT *a;
{
m_out(a,10,stdout);
}
omout(a) MINT *a;
{
m_out(a,8,stdout);
}
fmout(a,f) MINT *a; FILE *f;
{ m_out(a,10,f);
}
fmin(a,f) MINT *a; FILE *f;
{
return(m_in(a,10,f));
}