This commit is contained in:
Oliver Lehmann 1989-05-02 08:32:04 +00:00
parent 631f23d526
commit c8487f2592
8 changed files with 444 additions and 0 deletions

View File

@ -0,0 +1,46 @@
/*
** --- RC_CMAP.C ------- CHARACTER TYPE MAP ---------------------------------
**
** Version: @(#)rc_cmap.c 4.0 02/05/89
**
*/
# include "rc.h"
char Cmap[] =
{
CNTRL, CNTRL, CNTRL, CNTRL, /* \0 ^A ^B ^C */
CNTRL, CNTRL, CNTRL, CNTRL, /* ^D ^E ^F ^G */
CNTRL, PUNCT, PUNCT, CNTRL, /* \b \t \n ^K */
CNTRL, PUNCT, CNTRL, CNTRL, /* ^L \r ^N ^O */
CNTRL, CNTRL, CNTRL, CNTRL, /* ^P ^Q ^R ^S */
CNTRL, CNTRL, CNTRL, CNTRL, /* ^T ^U ^V ^W */
CNTRL, CNTRL, CNTRL, CNTRL, /* ^X ^Y ^Z ^[ */
CNTRL, CNTRL, CNTRL, CNTRL, /* ^\ ^] ^^ ^_ */
PUNCT, OPATR, OPATR, OPATR, /* ! " # */
OPATR, OPATR, OPATR, OPATR, /* $ % & ' */
OPATR, OPATR, OPATR, OPATR, /* ( ) * + */
OPATR, OPATR, OPATR, OPATR, /* , - . / */
NUMBR, NUMBR, NUMBR, NUMBR, /* 0 1 2 3 */
NUMBR, NUMBR, NUMBR, NUMBR, /* 4 5 6 7 */
NUMBR, NUMBR, OPATR, OPATR, /* 8 9 : ; */
OPATR, OPATR, OPATR, OPATR, /* < = > ? */
OPATR, ALPHA, ALPHA, ALPHA, /* @ A B C */
ALPHA, ALPHA, ALPHA, ALPHA, /* D E F G */
ALPHA, ALPHA, ALPHA, ALPHA, /* H I J K */
ALPHA, ALPHA, ALPHA, ALPHA, /* L M N O */
ALPHA, ALPHA, ALPHA, ALPHA, /* P Q R S */
ALPHA, ALPHA, ALPHA, ALPHA, /* T U V W */
ALPHA, ALPHA, ALPHA, OPATR, /* X Y Z [ */
OPATR, OPATR, OPATR, ALPHA, /* \ ] ^ _ */
OPATR, ALPHA, ALPHA, ALPHA, /* ` a b c */
ALPHA, ALPHA, ALPHA, ALPHA, /* d e f g */
ALPHA, ALPHA, ALPHA, ALPHA, /* h i j k */
ALPHA, ALPHA, ALPHA, ALPHA, /* l m n o */
ALPHA, ALPHA, ALPHA, ALPHA, /* p q r s */
ALPHA, ALPHA, ALPHA, ALPHA, /* t u v w */
ALPHA, ALPHA, ALPHA, OPATR, /* x y z { */
OPATR, OPATR, OPATR, CNTRL, /* | } ~ del */
0
};

View File

@ -0,0 +1,79 @@
/*
** --- RG_CASE.C ------- CASE PROCESSOR -------------------------------------
**
** Version: @(#)rg_case.c 4.0 02/05/89
**
*/
# include "rg_int.h"
/* | | */
/* |r-code| */
/* |======| */
/* |prVAR | entry: R_rc points to &jumptable */
/* | var# | (& = R-CODE offset) */
/* |------| */
/* |rcCASE| R_val = case# */
/* |------| */
/* |case# | exit: pointer to R-CODE after case */
/* |------| */
/* |&jmptb| values after statment number */
/* |======| +-+ +-+ +-+ +-+ +-+ +-+ */
/* |case 1| |1| |2| |3| |4| |5| |6| */
/* |RETURN| +-+ +-+ +-+ +-+ +-+ +-+ */
/* |------| */
/* | .. | */
/* |------| */
/* |case i|<-------------------------R_rc */
/* |RETURN| */
/* |------| */
/* | .. | */
/* |------| */
/* |case n| */
/* |RETURN| */
/* |------| [rc]---+ */
/* | out | | */
/* |RETURN| | */
/* |======| | */
/*-|&case1|<-R_rc<-R_rc<-R_rc<--+-----jt */
/*j|------| =jt =jt =jt | */
/*u| .. | =rc =rc | */
/*m|------| =df | */
/*p|&casei|<--------------rc<---rc RC_WORD */
/*t|------| | (rc+=sizeof (short)) */
/*a| .. |<--------------------+-----rc */
/*b|------| | */
/*l|&casen| if rc out of range->| */
/*e|------| | */
/*-| &out |<--------df<---df<---df<---df */
/* |======| =[rc] */
/* | next |<--------------------+---------return */
/* | | */
char *rg_case()
{
register char *rc; /* R-CODE pointer */
register char *jt; /* pointer to case jump table */
register char *df; /* pointer to default (out) case */
register union anytype *any;
/*1*/ df = R_rc;
rc = df;
jt = rc;
/*2*/ df += sizeof (short) * R_val;
any = &Print->sy_val;
/*3*/ rc += sizeof (short) * (int) any->f8type;
if (rc < jt || rc > df)
/*4*/ rc = df;
RC_WORD;
/*5*/ R_rc = R_word + jt; /* first read offset, and then update !!! */
/*6*/ return (df + sizeof (short));
}

View File

@ -0,0 +1,35 @@
/*
** --- RG_COL.C -------- COLUMN PROCESSOR -----------------------------------
**
** Version: @(#)rg_col.c 4.0 02/05/89
**
*/
# include "rg.h"
set_col(col)
register int col;
{
register int len;
extern char *AApad();
if (--col < 0)
return;
if ((len = Col_begin + col - SYS_col) < 0)
{
if (RUNline)
goto ign_col;
new_line();
if (RUN)
{
ign_col:
RUN++;
return;
}
len = Col_begin - Line + col;
}
if (len)
SYS_col = AApad(SYS_col, len);
}

View File

@ -0,0 +1,33 @@
/*
** --- RG_FILE.H ------- FILE DESCRIPTIONS ----------------------------------
**
** Version: @(#)rg_file.h 4.0 02/05/89
**
*/
# include "rg.h"
# undef FILEMODE
# define FILEMODE 0644
struct rg_file
{
char rf_file; /* logical file description */
/* see above */
BOOL rf_open; /* file really open ? */
int rf_fd; /* the file descriptor,if open */
char *rf_name; /* the BS file name */
int rf_type; /* type for open, read/write */
};
typedef struct rg_file FILETYPE;
extern FILETYPE Rg_file[];
/* logical file descriptions */
# define F_TUPLE 1 /* the tupel file */
# define F_R_CODE 2 /* the R-CODE file */
# define F_DESC 3 /* the tupel description */
# define F_REPORT 4 /* the report file */

View File

@ -0,0 +1,97 @@
/*
** --- RG_INIT.C ------- INIT PROCEDURES ------------------------------------
**
** Version: @(#)rg_init.c 4.0 02/05/89
**
*/
# include "rg.h"
struct init_t
{
int ip_low;
int ip_high;
int ip_default;
char *ip_error;
};
static struct init_t Initialize[] =
{
/* -----------------------------------------------
** low high default error
** ----------------------------------------------- */
1, 512, D_COLS, "COLUMNS",
1, 512, D_LINES, "LINES",
1, 512, D_ALL_LINES, "ALL LINES",
MIN_I2, MAX_I2, D_FOR_ALL, "FOR ALL END",
D_FIRST_PAGE, MAX_I2, D_FIRST_PAGE, "FIRST PAGE",
D_FIRST_PAGE, MAX_I2, D_LAST_PAGE, "LAST PAGE",
D_FROM_TUPLE, MAX_I2, D_FROM_TUPLE, "FROM TUPLE",
D_FROM_TUPLE, MAX_I2, D_TO_TUPLE, "TO TUPLE",
/* ----------------------------------------------- */
0, 0, 0, (char *) 0,
};
rg_init()
{
register struct init_t *i;
register int *ip; /* param to check */
register char *msg; /* error message */
/* go through R-CODE header, beginning with R_cols */
ip = &R_cols;
/* initialize parameters */
for (i = Initialize; i->ip_error; i++)
{
msg = (char *) 0;
if (*ip < i->ip_low)
msg = "SMALL";
else if (*ip > i->ip_high)
msg = "HIGH";
if (msg)
{
rg_error("parameter %s = `%d' is too %s\n\tSET to `%d'",
i->ip_error, *ip, msg, i->ip_default);
*ip = i->ip_default;
}
ip++;
}
if (R_first_page > R_last_page)
/* nothing to print */
rg_exit(EXIT_END);
/* adjust R_all_lines */
if (*(ip = &R_all_lines) < R_lines)
*ip *= R_lines / *ip + 1;
/* rest of initialization, see rg.c */
R_rc = &R_code[1];
Line_end = R_lines;
Col_end = &Line[R_cols];
}
ck_arg(a, i, c)
register char *a; /* the ASCII string */
/*register*/ int *i; /* holds the integer result */
int *c; /* error count */
{
register int err;
short ix;
extern int AA_atoi();
err = AA_atoi(a, &ix);
*i = ix;
if (err)
{
if (err < 0)
rg_error("%d: VALUE `%s' not numeric", *c, a);
else
rg_error("%d: VALUE `%s' out of range", *c, a);
(*c)++;
}
}

View File

@ -0,0 +1,28 @@
/*
** --- RG_INT.H -------- INTERPRETER DECLARATIONS ---------------------------
**
** Version: @(#)rg_int.h 4.0 02/05/89
**
*/
# include "rg.h"
# define MAX_STACK 50
struct symbol
{
char sy_frmt; /* format */
char sy_frml; /* length */
union anytype sy_val; /* value */
};
typedef struct symbol SYMBOL;
extern struct symbol Stack[];
extern struct symbol *Print;
extern char *rc_word();
/* inline procedure to read R-CODE */
# define RC_BYTE ((short) ctou(*rc++))
# define RC_WORD rc = rc_word(rc)
# define RANGE(l, x, h) ((x) >= ((int) (l)) && (x) <= ((int) (h)))

View File

@ -0,0 +1,44 @@
/*
** --- RG_REPT.C ------- REPEAT PROCESSOR -----------------------------------
**
** Version: @(#)rg_rept.c 4.0 02/05/89
**
*/
# include "rg.h"
/* the repeat table */
static REPEATYPE R_repeat[MAX_REPEAT]; /* rr_code = (char *) 0 */
/* rr_count = 0 */
rg_repeat(rc)
register char *rc;
{
register REPEATYPE *r;
register int i;
for (r = R_repeat; r->rr_count; r++)
{
if (r == &R_repeat[MAX_REPEAT])
{
rg_error("REPEAT TABLE OVERFLOW");
rg_exit(EXIT_R_CODE);
}
if (r->rr_code == rc)
break;
}
if (!r->rr_code)
{
r->rr_code = rc;
if ((i = R_val) < A_REPEAT)
i = A_REPEAT;
r->rr_count = i;
}
if (--(r->rr_count))
return (TRUE);
r->rr_code = 0;
return (FALSE);
}

View File

@ -0,0 +1,82 @@
/*
** --- RG_TIME.C ------- GET AND PRINT TIME ---------------------------------
**
** Version: @(#)rg_time.c 4.0 02/05/89
**
*/
# include "rg.h"
extern long time();
static long rg_time;
extern char *ctime();
static char *rg_ctime;
extern int *localtime();
static int *rg_localtime;
rg_prtime(tflag)
register int tflag;
/* tflag == FALSE: DATE */
/* TRUE: TIME */
{
register char *t;
register char *p;
extern char *AAbmove();
if (!rg_time)
{
time(&rg_time);
# ifdef ESER_VMX
rg_ctime = ctime(rg_time);
rg_localtime = localtime(rg_time);
# else
rg_ctime = ctime(&rg_time);
rg_localtime = localtime(&rg_time);
# endif
}
t = rg_ctime;
p = SYS_col;
if (tflag)
SYS_col = AAbmove(&t[11], p, 8);
else
{
p = AAbmove(&t[8], p, 2);
*p++ = '-';
p = AAbmove(&t[4], p, 3);
*p++ = '-';
SYS_col = AAbmove(&t[22], p, 2);
}
}
rg_getime(which)
/*----------------------------------------------*/
register int which;
/*----------------------------------------------*/
/* SECOND == 0 */
/* MINUTE == 1 */
/* HOUR == 2 */
/* M_DAY == 3 month day */
/* MONTH == 4 */
/* YEAR == 5 */
/* W_DAY == 6 week day */
/* Y_DAY == 7 year day */
/* IS_DST == 8 day light saving flag */
/*----------------------------------------------*/
{
if (!rg_time)
{
time(&rg_time);
# ifdef ESER_VMX
rg_ctime = ctime(rg_time);
rg_localtime = localtime(rg_time);
# else
rg_ctime = ctime(&rg_time);
rg_localtime = localtime(&rg_time);
# endif
}
return (rg_localtime[which]);
}