home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power Programming
/
powerprogramming1994.iso
/
progtool
/
turbopas
/
tptc17sc.arc
/
TPTCMAC.H
< prev
next >
Wrap
C/C++ Source or Header
|
1988-03-26
|
6KB
|
258 lines
/*
* TPTCMAC.H - Macro Header for use with Turbo Pascal --> C Translator
*
* (C) 1986 S.H.Smith (rev. 24-Mar-88)
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <dos.h>
#include <conio.h>
#include <ctype.h>
/* define some simple keyword replacements */
#define pred(v) ((v)-1)
#define succ(v) ((v)+1)
#define chr(n) (n)
#define ord(c) (c)
#define lo(v) (v & 0xff)
#define hi(v) (v >> 8)
#define inc(v) ++(v)
#define dec(v) --(v)
#define maxint 0x7fff
#define integer int
#define word unsigned
#define longint long
#define byte char
#define real double
#define boolean int
typedef void *pointer;
#define false 0
#define true 1
#define nil NULL
#define delete(s,p,num) strcpy(s+p-1,s+p+num)
#define val(s,res,code) code=0, res=atof(s)
typedef char *charptr;
#define STRSIZ 255 /* default string length */
#define paramstr(n) (argv[n])
#define paramcount (argc-1)
/*
* file access support
*/
char _CURNAME[64];
int ioresult = 0;
typedef FILE *text;
#define kbd stdin
#define input stdin
#define con stdout
#define output stdout
#define assign(fd,name) strcpy(_CURNAME,name)
void reset(text *fd)
{
*fd = fopen(_CURNAME,"r");
ioresult = (*fd == NULL);
}
void rewrite(text *fd)
{
*fd = fopen(_CURNAME,"w");
ioresult = (*fd == NULL);
}
void append(text *fd)
{
*fd = fopen(_CURNAME,"a");
ioresult = (*fd == NULL);
}
/*
* setrec setof(a,b,...,-1)
* construct and return a set of the specified character values
*
* inset(ex,setrec)
* predicate returns true if expression ex is a member of
* the set parameter
*
*/
#define __ -2 /* thru .. */
#define _E -1 /* end of set marker */
typedef struct {
char setstub[16];
} setrec;
/*
* copy len bytes from the dynamic string dstr starting at position from
*
*/
charptr copy(charptr str,
int from,
int len)
{
static char buf[STRSIZ];
buf[0]=0;
if (from>strlen(str)) /* copy past end gives null string */
return buf;
strcpy(buf,str+from-1); /* skip over first part of string */
buf[len] = 0; /* truncate after len characters */
return buf;
}
/*
* String/character concatenation function
*
* This function takes a sprintf-like control string, a variable number of
* parameters, and returns a pointer a static location where the processed
* string is to be stored.
*
*/
charptr scat(charptr control, ...)
{
static char buf[STRSIZ];
char buf2[STRSIZ];
va_list args;
va_start(args, control); /* get variable arg pointer */
vsprintf(buf2,control,args); /* format into buf with variable args */
va_end(args); /* finish the arglist */
strcpy(buf,buf2);
return buf; /* return a pointer to the string */
}
#define ctos(ch) scat("%c",ch) /* character to string conversion */
/*
* string build - like scat, sprintf, but will not over-write any
* input parameters
*/
void sbld(charptr dest,
charptr control, ...)
{
char buf[STRSIZ];
va_list args;
va_start(args, control); /* get variable arg pointer */
vsprintf(buf,control,args); /* format into buf with variable args */
va_end(args); /* finish the arglist */
strcpy(dest,buf); /* copy result */
}
/*
* spos(str1,str2) - returns index of first occurence of str1 within str2;
* 1=first char of str2
* 0=nomatch
*/
int spos(charptr str1,
charptr str2)
{
charptr res;
res = strstr(str2,str1);
if (res == NULL)
return 0;
else
return res - str2 + 1;
}
/*
* cpos(str1,str2) - returns index of first occurence of c within str2;
* 1=first char of str2
* 0=nomatch
*/
int cpos(char c,
charptr str2)
{
charptr res;
res = strchr(str2,c);
if (res == NULL)
return 0;
else
return res - str2 + 1;
}
/*
* Scanf/Fscanf support
*
* These functions operate like scanf and fscanf except for an added control
* code used for full-line reads.
*
*/
int fscanv(text fd,
charptr control, ...)
{
va_list args;
charptr arg1;
int i;
va_start(args, control); /* get variable arg pointer */
/* process special case for full-line reads (why doesn't scanf allow
full-line string reads? why don't gets and fgets work the same?) */
if (*control == '#') {
arg1 = va_arg(args,charptr);
fgets(arg1,STRSIZ,fd);
arg1[strlen(arg1)-1] = 0;
return 1;
}
/* pass the request on to fscanf */
i = vfscanf(fd,control,args); /* scan with variable args */
va_end(args); /* finish the arglist */
return i; /* return a pointer to the string */
}
#undef atoi /* in case of user ident clash */
#undef getchar
/*
* rename some tp4 calls that conflict with tc1.0 functions
*
*/
#define intr Pintr
#define getdate Pgetdate
#define gettime Pgettime
#define setdate Psetdate
#define settime Psettime
#define keep Pkeep