1 /* 2 * The Regina Rexx Interpreter 3 * Copyright (C) 2000 Mark Hessling <M.Hessling@qut.edu.au> 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Library General Public 7 * License as published by the Free Software Foundation; either 8 * version 2 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Library General Public License for more details. 14 * 15 * You should have received a copy of the GNU Library General Public 16 * License along with this library; if not, write to the Free 17 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 18 */ 19 #ifndef _REXXBIF_H_INCLUDED 20 #define _REXXBIF_H_INCLUDED 21 22 #if defined(HAVE_CONFIG_H) 23 # include "config.h" 24 #else 25 # include "configur.h" 26 #endif 27 28 #include <stdlib.h> 29 #include <stdio.h> 30 #if defined(VMS) || defined(MAC) 31 # include <types.h> 32 #else 33 # include <sys/types.h> 34 #endif 35 36 #if defined(TIME_WITH_SYS_TIME) 37 # include <sys/time.h> 38 # include <time.h> 39 #else 40 # if defined(HAVE_SYS_TIME_H) 41 # include <sys/time.h> 42 # else 43 # include <time.h> 44 # endif 45 #endif 46 47 #if defined(WIN32) && defined(__BORLANDC__) 48 # include <mem.h> 49 #endif 50 #include <string.h> 51 52 #ifdef HAVE_UNISTD_H 53 #include <unistd.h> 54 #endif 55 56 #ifdef HAVE_ERRNO_H 57 #include <errno.h> 58 #endif 59 60 #ifdef HAVE_CTYPE_H 61 #include <ctype.h> 62 #endif 63 64 #ifdef EXTERNAL_TO_REGINA 65 typedef struct tsdtype { /* FGC: This will lead to severe troubles. Imagine 66 * some called routines which are compiled with the 67 * other typedef and linked with a routine using this 68 * kind. Strange things MUST happen. To avoid the 69 * ugliest errors ALWAYS add a scratch space of 70 * at least 4KB. This is a heuristic value. 71 * This is one of the most errorneous programming 72 * techniques to import features and functions from 73 * different programs. 74 * MH. This is included just in case there is an 75 * overlap problem when rexxbif.h is included in the 76 * base Regina code. When used in programs independent 77 * from Regina, the filler is not required. 78 */ 79 char filler_never_touch[0x1000]; 80 int called_from_saa; 81 } dummy_tsd_t ; 82 83 # define tsd_t dummy_tsd_t 84 # define MAKESTRENG( size ) MakeStreng( size ) 85 # define DROPSTRENG( x ) DropStreng( x ) 86 # define REXX_RIGHT( s,l,p ) Rexx_right( NULL,s,l,p ) 87 # define REXX_X2D( x,err ) Rexx_x2d( NULL,x,err ) 88 # define REXX_D2X( x ) Rexx_d2x( NULL,x ) 89 # define REXX_UPPER( x ) Rexx_upper( NULL,x ) 90 # ifndef STRENG_TYPEDEFED 91 /* 92 * typedef a streng type 93 */ 94 typedef struct strengtype { 95 int len, max; 96 #if 0 97 char *value; 98 #else 99 char value[4]; 100 #endif 101 } streng ; 102 # endif 103 #else 104 /* 105 * We are including this from within the Regina Interpreter 106 */ 107 # include "rexx.h" 108 # define MAKESTRENG( size ) Str_makeTSD( size ) 109 # define DROPSTRENG( x ) FreeTSD( x ) 110 # define REXX_RIGHT( s,l,p ) Rexx_right( TSD,s,l,p ) 111 # define REXX_X2D( x,err ) Rexx_x2d( TSD,x,err ) 112 # define REXX_D2X( x ) Rexx_d2x( TSD,x ) 113 # define REXX_UPPER( x ) Rexx_upper( TSD,x ) 114 #endif 115 116 extern streng *Rexx_right( const tsd_t *TSD, streng *str, int length, char padch ); 117 extern int Rexx_x2d( const tsd_t *TSD, const streng *hex, int *error ); 118 extern streng *Rexx_d2x( const tsd_t *TSD, int num ); 119 extern streng *Rexx_upper( const tsd_t *TSD, streng *str ); 120 121 #ifdef EXTERNAL_TO_REGINA 122 extern void DropStreng( streng *str ); 123 extern streng *MakeStreng( int num ); 124 #endif 125 126 #define PSTRENGLEN(x) ((x)->value ? (x)->len : 0) 127 #define PSTRENGVAL(x) ((x)->value) 128 129 #if 0 130 /* 131 * Define the RXSTRING type, but only if we haven't already included 132 * a SAA header file, which #defines RXSTRLEN() 133 */ 134 #ifndef RXSTRLEN 135 # define MAKERXSTRING(x,c,l) ((x).strptr=(c),(x).strlength=(l)) 136 # define RXNULLSTRING(x) (!(x).strptr) 137 # define RXSTRLEN(x) ((x).strptr ? (x).strlength : 0UL) 138 # define RXSTRPTR(x) ((x).strptr) 139 140 #endif /* RXSTRLEN */ 141 #endif 142 143 #endif 144