1/****************************************************************************
2 *                                                                          *
3 *                         GNAT COMPILER COMPONENTS                         *
4 *                                                                          *
5 *                                  C I O                                   *
6 *                                                                          *
7 *                          C Implementation File                           *
8 *                                                                          *
9 *          Copyright (C) 1992-2013, Free Software Foundation, Inc.         *
10 *                                                                          *
11 * GNAT is free software;  you can  redistribute it  and/or modify it under *
12 * terms of the  GNU General Public License as published  by the Free Soft- *
13 * ware  Foundation;  either version 3,  or (at your option) any later ver- *
14 * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
15 * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
16 * or FITNESS FOR A PARTICULAR PURPOSE.                                     *
17 *                                                                          *
18 * As a special exception under Section 7 of GPL version 3, you are granted *
19 * additional permissions described in the GCC Runtime Library Exception,   *
20 * version 3.1, as published by the Free Software Foundation.               *
21 *                                                                          *
22 * You should have received a copy of the GNU General Public License and    *
23 * a copy of the GCC Runtime Library Exception along with this program;     *
24 * see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    *
25 * <http://www.gnu.org/licenses/>.                                          *
26 *                                                                          *
27 * GNAT was originally developed  by the GNAT team at  New York University. *
28 * Extensive contributions were provided by Ada Core Technologies Inc.      *
29 *                                                                          *
30 ****************************************************************************/
31
32#ifdef IN_RTS
33#include "tconfig.h"
34#include "tsystem.h"
35#include <sys/stat.h>
36#else
37#include "config.h"
38#include "system.h"
39#endif
40
41#include "adaint.h"
42
43/* We need L_tmpnam definition */
44#include <stdio.h>
45
46#ifdef __cplusplus
47extern "C" {
48#endif
49
50/* Don't use macros on GNU/Linux since they cause incompatible changes between
51   glibc 2.0 and 2.1 */
52#ifdef linux
53#undef putchar
54#undef getchar
55#undef fputc
56#undef stderr
57#undef stdout
58#endif
59
60/* Don't use macros versions of this functions on VxWorks since they cause
61   imcompatible changes in some VxWorks versions */
62#ifdef __vxworks
63#undef getchar
64#undef putchar
65#undef feof
66#undef ferror
67#undef fileno
68#endif
69
70#ifdef RTX
71#include <windows.h>
72#include <Rtapi.h>
73#endif
74
75int
76get_char (void)
77{
78#ifdef VMS
79  return decc$getchar();
80#else
81  return getchar ();
82#endif
83}
84
85int
86get_int (void)
87{
88  int x;
89
90  scanf (" %d", &x);
91  return x;
92}
93
94void
95put_int (int x)
96{
97#ifdef RTX
98   RtPrintf ("%d", x);
99#else
100   /* Use fprintf rather than printf, since the latter is unbuffered
101      on vxworks */
102   fprintf (stdout, "%d", x);
103#endif
104}
105
106void
107put_int_stderr (int x)
108{
109#ifdef RTX
110  RtPrintf ("%d", x);
111#else
112  fprintf (stderr, "%d", x);
113#endif
114}
115
116void
117put_char (int c)
118{
119#ifdef RTX
120  RtPrintf ("%c", c);
121#else
122  putchar (c);
123#endif
124}
125
126void
127put_char_stderr (int c)
128{
129#ifdef RTX
130  RtPrintf ("%c", c);
131#else
132  fputc (c, stderr);
133#endif
134}
135
136#ifdef __vxworks
137
138char *
139mktemp (char *template)
140{
141#if !(defined (__RTP__) || defined (VTHREADS))
142  static char buf[L_tmpnam]; /* Internal buffer for name */
143
144  /* If parameter is NULL use internal buffer */
145  if (template == NULL)
146    template = buf;
147
148  __gnat_tmp_name (template);
149  return template;
150#else
151  return tmpnam (NULL);
152#endif
153}
154#endif
155
156#ifdef __cplusplus
157}
158#endif
159