89 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			89 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);
 | |
| }
 |