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