correct edit function
[calc.git] / format.c
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"
10 char *_format = NULL;
11 #define DEFAULT_MINFORM "%.6g"
12 char *_minform = NULL;
13
14 int _precision = 6;
15
16 #define DEFAULT_PROMPT "=> "
17 char *_prompt = NULL;
18
19 /* print function */
20
21 void set_precision (int precision)
22 {
23 _precision = precision;
24 }
25
26 int get_precision ()
27 {
28 return _precision;
29 }
30
31 void set_prompt (char *prompt)
32 {
33 if (_prompt) {
34 free (_prompt);
35 }
36 _prompt = strdup (prompt);
37 }
38
39 void set_format ()
40 {
41 char buffer[128] = {0};
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);
52 }
53
54 void free_format ()
55 {
56 if (_format) {
57 free (_format);
58 _format = NULL;
59 }
60 if (_minform) {
61 free (_minform);
62 _minform = NULL;
63 }
64 if (_prompt) {
65 free (_prompt);
66 _prompt = NULL;
67 }
68 }
69
70 double print (double value)
71 {
72 fprintf (stdout, _format ? _format : DEFAULT_FORMAT, value);
73 fflush (stdout);
74 return value;
75 }
76
77 double printl (double value)
78 {
79 fprintf (stdout, _minform ? _minform : DEFAULT_MINFORM, value);
80 fflush (stdout);
81 return value;
82 }
83
84 /* vim: set ts=4 sw=4 et: */