90 lines
1.2 KiB
C
90 lines
1.2 KiB
C
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include "bc_io.h"
|
|
#include "lib.h"
|
|
|
|
/* Here all routine to generate terminal oriented output is located */
|
|
|
|
void _qstmark(void)
|
|
{
|
|
/* prompt for terminal input */
|
|
putchar('?');
|
|
}
|
|
|
|
void _nl(void)
|
|
{
|
|
_asschn();
|
|
_outnl();
|
|
}
|
|
void _prinum(int i)
|
|
{
|
|
char buffer[40];
|
|
|
|
_asschn();
|
|
if (i >= 0)
|
|
sprintf(buffer, " %d ", i);
|
|
else
|
|
sprintf(buffer, "-%d ", -i);
|
|
_out(buffer);
|
|
}
|
|
void _str(double f, char* buffer)
|
|
{
|
|
register char* c = buffer;
|
|
int eformat = 0;
|
|
if (f >= 0)
|
|
{
|
|
if (f > 1.0e8)
|
|
{
|
|
eformat = 1;
|
|
sprintf(buffer, " %e", f);
|
|
}
|
|
else
|
|
sprintf(buffer, " %f", f);
|
|
c++;
|
|
}
|
|
else
|
|
{
|
|
if (-f > 1.0e8)
|
|
{
|
|
eformat = 1;
|
|
sprintf(buffer, "-%e", -f);
|
|
}
|
|
else
|
|
sprintf(buffer, "-%f", -f);
|
|
}
|
|
if (!eformat)
|
|
{
|
|
for (; *c && *c != ' '; c++)
|
|
;
|
|
c--;
|
|
while (c > buffer && *c == '0')
|
|
{
|
|
*c = 0;
|
|
c--;
|
|
}
|
|
if (*c == '.')
|
|
*c = 0;
|
|
}
|
|
}
|
|
void _prfnum(double f)
|
|
{
|
|
/* BASIC strings trailing zeroes */
|
|
char buffer[100];
|
|
char* c;
|
|
|
|
_asschn();
|
|
c = buffer;
|
|
_str(f, c);
|
|
strcat(buffer, " ");
|
|
_out(buffer);
|
|
}
|
|
void _prstr(String* str)
|
|
{
|
|
_asschn();
|
|
if (str == 0)
|
|
_out("<null>");
|
|
else
|
|
_out(str->strval);
|
|
}
|