new function: format
[calc.git] / format.c
CommitLineData
a24bd519
LM
1#include <malloc.h>
2#include <stdio.h>
3#include <string.h>
4
5#include "format.h"
6
7/* global variables */
8
9#define DEFAULT_FORMAT "=> %.6g\n"
e2a309f9
LM
10char *_format = NULL;
11#define DEFAULT_MINFORM "%.6g"
12char *_minform = NULL;
13
14int _precision = 6;
15
16#define DEFAULT_PROMPT "=> "
17char *_prompt = NULL;
a24bd519
LM
18
19/* print function */
20
e2a309f9
LM
21void set_precision (int precision)
22{
23 _precision = precision;
24}
25
26int get_precision ()
27{
28 return _precision;
29}
30
31void set_prompt (char *prompt)
32{
33 if (_prompt) {
34 free (_prompt);
35 }
36 _prompt = strdup (prompt);
37}
38
39void set_format ()
a24bd519
LM
40{
41 char buffer[128] = {0};
e2a309f9
LM
42 sprintf (buffer, "%s%%.%dg\n", _prompt ? _prompt : DEFAULT_PROMPT, _precision);
43 if (_format) {
44 free (_format);
45 }
46 _format = strdup (buffer);
47 sprintf (buffer, "%%.%dg", _precision);
48 if (_minform) {
49 free (_minform);
50 }
51 _minform = strdup (buffer);
a24bd519
LM
52}
53
54void free_format ()
55{
e2a309f9
LM
56 if (_format) {
57 free (_format);
58 _format = NULL;
59 }
60 if (_minform) {
61 free (_minform);
62 _minform = NULL;
a24bd519 63 }
e2a309f9
LM
64 if (_prompt) {
65 free (_prompt);
66 _prompt = NULL;
a24bd519
LM
67 }
68}
69
70double print (double value)
71{
e2a309f9
LM
72 fprintf (stdout, _format ? _format : DEFAULT_FORMAT, value);
73 fflush (stdout);
74 return value;
75}
76
77double printl (double value)
78{
79 fprintf (stdout, _minform ? _minform : DEFAULT_MINFORM, value);
a24bd519
LM
80 fflush (stdout);
81 return value;
82}
e4c7b513
LM
83
84/* vim: set ts=4 sw=4 et: */