Better ANSI C compatibility and portability - part 1:

+ Addition of function prototypes.
+ Change function definitions to ANSI C style.
This commit is contained in:
carl 2019-02-19 00:37:52 +08:00
parent f49a5a24f7
commit 42bbdec82d
3 changed files with 2 additions and 336 deletions

View file

@ -2,6 +2,7 @@
#ifdef LL_DEBUG #ifdef LL_DEBUG
#include <assert.h> #include <assert.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#define LL_assert(x) assert(x) #define LL_assert(x) assert(x)
#else #else
#define LL_assert(x) /* nothing */ #define LL_assert(x) /* nothing */
@ -30,7 +31,6 @@ extern int LLstartsymb;
#define LLsincr(d) LLscnt[d]++ #define LLsincr(d) LLscnt[d]++
#define LLtincr(d) LLtcnt[d]++ #define LLtincr(d) LLtcnt[d]++
#if LL_ANSI_C
extern int LL_LEXI(void); extern int LL_LEXI(void);
extern void LLread(void); extern void LLread(void);
extern int LLskip(void); extern int LLskip(void);
@ -48,21 +48,3 @@ extern int LLfirst(int, int);
#if LL_NON_CORR #if LL_NON_CORR
extern void LLnc_recover(void); extern void LLnc_recover(void);
#endif #endif
#else /* not LL_ANSI_C */
extern LLread();
extern int LLskip();
extern int LLnext();
extern LLerror();
extern LLsafeerror();
extern LLnewlevel();
extern LLoldlevel();
#ifndef LL_FASTER
extern LLscan();
#endif
#ifndef LLNOFIRSTS
extern int LLfirst();
#endif
#if LL_NON_CORR
extern LLnc_recover();
#endif
#endif /* not LL_ANSI_C */

View file

@ -1,5 +1,6 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
/* /*
compile with -DNOFIRST to disable firstset optimization compile with -DNOFIRST to disable firstset optimization
@ -12,9 +13,7 @@
extern int LLsymb; extern int LLsymb;
extern int LLstartsymb; extern int LLstartsymb;
#if LL_ANSI_C
void LLmessage(int); void LLmessage(int);
#endif
struct stacks { struct stacks {
@ -119,37 +118,21 @@ static struct nonterminal *nonterminals;
/* These functions must be called instead of the original functions in /* These functions must be called instead of the original functions in
* 'malloc.h'. They offer a checking allocation mechanism. * 'malloc.h'. They offer a checking allocation mechanism.
*/ */
#if LL_ANSI_C
static char *Malloc(unsigned); static char *Malloc(unsigned);
static char *Realloc(char*, unsigned); static char *Realloc(char*, unsigned);
#else
static char *Malloc();
static char *Realloc();
#endif
/* These functions build the grammar */ /* These functions build the grammar */
#if LL_ANSI_C
static void init_grammar(void); static void init_grammar(void);
static void build_grammar(void); static void build_grammar(void);
static struct lhs *build_rule(void); static struct lhs *build_rule(void);
static struct symbol *build_rhs(struct lhs*); static struct symbol *build_rhs(struct lhs*);
static struct symbol *make_link(struct symbol*); static struct symbol *make_link(struct symbol*);
#else
static init_grammar();
static build_grammar();
static struct lhs *build_rule();
static struct symbol *build_rhs();
static struct symbol *make_link();
#endif
/* These functions operate on the stacks */ /* These functions operate on the stacks */
#if LL_ANSI_C
static int optimize(struct stacks*, struct symbol*, int); static int optimize(struct stacks*, struct symbol*, int);
static void read_token(void); static void read_token(void);
static void start_stack(struct stacks*, int, int); static void start_stack(struct stacks*, int, int);
@ -179,43 +162,9 @@ static void calculate(struct stacks*, int);
static void kill_stack(struct stacks *stack); static void kill_stack(struct stacks *stack);
void LLnc_recover(void); void LLnc_recover(void);
#else
static int optimize();
static read_token();
static start_stack();
static continuation();
static struct stack_elt *push_rule();
static new_head();
static to_delete();
static substitute();
static int join();
static int path();
static int part_of_loop();
static generate_heads();
static delete();
static hyp_run();
static check_run();
static struct stack_elt *split();
static test();
static dump_stack();
static clear_flags();
static clear_gen_flags();
static match_heads();
static cleanup();
static initialize();
static calculate();
static kill_stack();
LLnc_recover();
#endif
#if LL_ANSI_C
static char *Malloc(unsigned size) static char *Malloc(unsigned size)
#else
static char *Malloc(size)
unsigned size;
#endif
{ {
char *p; char *p;
@ -227,13 +176,7 @@ unsigned size;
} }
#if LL_ANSI_C
static char *Realloc(char *ptr, unsigned size) static char *Realloc(char *ptr, unsigned size)
#else
static char *Realloc(ptr, size)
char *ptr;
unsigned size;
#endif
{ {
char *p; char *p;
@ -245,11 +188,7 @@ unsigned size;
} }
#if LL_ANSI_C
static void init_grammar(void) static void init_grammar(void)
#else
static init_grammar()
#endif
{ {
/* Allocate and initialize an array for terminals and nonterminals */ /* Allocate and initialize an array for terminals and nonterminals */
@ -270,11 +209,7 @@ static init_grammar()
} }
#if LL_ANSI_C
static void build_grammar(void) static void build_grammar(void)
#else
static build_grammar()
#endif
{ {
/* Build a rule for every nonterminal. The LHS must be saved first because /* Build a rule for every nonterminal. The LHS must be saved first because
* of the fact that the right side of an assignment statement (in C) will * of the fact that the right side of an assignment statement (in C) will
@ -290,11 +225,7 @@ static build_grammar()
} }
#if LL_ANSI_C
static struct lhs *build_rule(void) static struct lhs *build_rule(void)
#else
static struct lhs *build_rule()
#endif
{ {
/* Build LHS and call a funcion to create RHS */ /* Build LHS and call a funcion to create RHS */
@ -322,12 +253,7 @@ static struct lhs *build_rule()
} }
#if LL_ANSI_C
static struct symbol *build_rhs(struct lhs *l) static struct symbol *build_rhs(struct lhs *l)
#else
static struct symbol *build_rhs(l)
struct lhs *l;
#endif
{ {
/* Build RHS by creating structs for all symbols including ALT and /* Build RHS by creating structs for all symbols including ALT and
* EORULE. Also call a function for linking same terminals and * EORULE. Also call a function for linking same terminals and
@ -371,12 +297,7 @@ struct lhs *l;
} }
#if LL_ANSI_C
static struct symbol *make_link(struct symbol *r) static struct symbol *make_link(struct symbol *r)
#else
static struct symbol *make_link(r)
struct symbol *r;
#endif
{ {
/* Link same terminals and nonterminals. Every new symbol is appended /* Link same terminals and nonterminals. Every new symbol is appended
* in front of the corresponding list for efficiency. * in front of the corresponding list for efficiency.
@ -400,15 +321,7 @@ struct symbol *r;
/*****************************************************************************/ /*****************************************************************************/
#if LL_ANSI_C
static int optimize(struct stacks* stack, struct symbol *symb_ptr, int l_ahead) static int optimize(struct stacks* stack, struct symbol *symb_ptr, int l_ahead)
#else
static int optimize(stack, symb_ptr, l_ahead)
struct stacks *stack;
struct symbol *symb_ptr;
int l_ahead;
#endif
/* Return 1 if rule symb_ptr can start with terminal l_ahead, else return 0. /* Return 1 if rule symb_ptr can start with terminal l_ahead, else return 0.
* The array with expected terminals will also be filled in. * The array with expected terminals will also be filled in.
*/ */
@ -463,12 +376,7 @@ int l_ahead;
} }
#if LL_ANSI_C
static void read_token(void) static void read_token(void)
#else
static read_token()
#endif
/* Read token and put it in global variable LLsymb, skipping /* Read token and put it in global variable LLsymb, skipping
* invalid tokens * invalid tokens
*/ */
@ -482,16 +390,8 @@ static read_token()
} }
#if LL_ANSI_C
static void start_stack(struct stacks *stack, int base, int l_ahead) static void start_stack(struct stacks *stack, int base, int l_ahead)
#else
static start_stack(stack, base, l_ahead)
struct stacks *stack;
int base, l_ahead;
#endif
/* Start stack on base symbol base with lookahead l_ahead */ /* Start stack on base symbol base with lookahead l_ahead */
{ {
struct stack_elt *bottom, *top; struct stack_elt *bottom, *top;
struct symbol *symb_ptr; struct symbol *symb_ptr;
@ -587,14 +487,7 @@ int base, l_ahead;
} }
#if LL_ANSI_C
static void continuation(struct stacks *stack, int nt, int l_ahead) static void continuation(struct stacks *stack, int nt, int l_ahead)
#else
static continuation(stack, nt, l_ahead)
struct stacks *stack;
int nt, l_ahead;
#endif
/* We have 'eaten' a whole stack, and think we recognized nt. Now /* We have 'eaten' a whole stack, and think we recognized nt. Now
look for rules that we can proceed with, ie containing nt in the RHS. look for rules that we can proceed with, ie containing nt in the RHS.
Each rule found will be developed untill a terminal is at the top Each rule found will be developed untill a terminal is at the top
@ -680,15 +573,8 @@ of the stack.*/
} }
#if LL_ANSI_C
static struct stack_elt *push_rule(struct stack_elt *element, static struct stack_elt *push_rule(struct stack_elt *element,
struct symbol *symb_ptr) struct symbol *symb_ptr)
#else
static struct stack_elt *push_rule(element, symb_ptr)
struct stack_elt *element;
struct symbol *symb_ptr;
#endif
/* Append the rule symb_ptr to stack element 'element'. Return a /* Append the rule symb_ptr to stack element 'element'. Return a
* pointer to the new top of the stack * pointer to the new top of the stack
*/ */
@ -735,14 +621,7 @@ struct symbol *symb_ptr;
} }
#if LL_ANSI_C
static void new_head(struct stacks *stack, struct stack_elt *ptr) static void new_head(struct stacks *stack, struct stack_elt *ptr)
#else
static new_head(stack, ptr)
struct stacks *stack;
struct stack_elt *ptr;
#endif
/* Make ptr a head of stack */ /* Make ptr a head of stack */
{ {
@ -773,14 +652,7 @@ struct stack_elt *ptr;
} }
#if LL_ANSI_C
static void to_delete(struct stacks *stack, struct stack_elt *ptr) static void to_delete(struct stacks *stack, struct stack_elt *ptr)
#else
static to_delete(stack, ptr)
struct stacks *stack;
struct stack_elt *ptr;
#endif
/* Remember that ptr has to be deleted */ /* Remember that ptr has to be deleted */
{ {
@ -814,15 +686,7 @@ struct stack_elt *ptr;
} }
#if LL_ANSI_C
static void substitute(struct stacks *stack, struct stack_elt *top, int l_ahead) static void substitute(struct stacks *stack, struct stack_elt *top, int l_ahead)
#else
static substitute(stack, top, l_ahead)
struct stacks *stack;
struct stack_elt *top;
int l_ahead;
#endif
/* This function substitutes the NT pointed to by 'top'. 'top' should be a top /* This function substitutes the NT pointed to by 'top'. 'top' should be a top
* of a stack * of a stack
*/ */
@ -900,15 +764,7 @@ int l_ahead;
} }
#if LL_ANSI_C
static int join(struct stacks *stack, struct stack_elt *top, int l_ahead) static int join(struct stacks *stack, struct stack_elt *top, int l_ahead)
#else
static int join(stack, top, l_ahead)
struct stacks *stack;
struct stack_elt *top;
int l_ahead;
#endif
/* This function tries to connect a NT on top of a stack with another stack, /* This function tries to connect a NT on top of a stack with another stack,
* which has already substituted this NT * which has already substituted this NT
*/ */
@ -977,13 +833,7 @@ int l_ahead;
#ifndef NOLOOPS #ifndef NOLOOPS
#if LL_ANSI_C
static int path(struct stack_elt *se1, struct stack_elt *se2) static int path(struct stack_elt *se1, struct stack_elt *se2)
#else
static int path(se1, se2)
struct stack_elt *se1, *se2;
#endif /* LL_ANSI_C */
/* If there is a path from se1 to se2 it returns 1 and marks all the paths /* If there is a path from se1 to se2 it returns 1 and marks all the paths
* betweeen these two points, otherwise it returns 0. The flags LLYES and * betweeen these two points, otherwise it returns 0. The flags LLYES and
* LLNO are used for optimization. */ * LLNO are used for optimization. */
@ -1014,13 +864,7 @@ struct stack_elt *se1, *se2;
} }
#if LL_ANSI_C
static int part_of_loop(struct stack_elt *se) static int part_of_loop(struct stack_elt *se)
#else
static int part_of_loop(se)
struct stack_elt *se;
#endif /* LL_ANSI_C */
/* Checks if 'se' belongs to a loop */ /* Checks if 'se' belongs to a loop */
{ {
int i; int i;
@ -1034,16 +878,8 @@ struct stack_elt *se;
#endif /* NOLOOPS */ #endif /* NOLOOPS */
#if LL_ANSI_C
static void generate_heads(struct stacks *stack, struct stack_elt *se, static void generate_heads(struct stacks *stack, struct stack_elt *se,
int l_ahead) int l_ahead)
#else
static generate_heads(stack, se, l_ahead)
struct stacks *stack;
struct stack_elt *se;
int l_ahead;
#endif
/* This funcion finds all heads starting at 'se'. */ /* This funcion finds all heads starting at 'se'. */
{ {
int i; int i;
@ -1104,14 +940,7 @@ int l_ahead;
} }
#if LL_ANSI_C
static void delete(struct stacks *stack, struct stack_elt *se) static void delete(struct stacks *stack, struct stack_elt *se)
#else
static delete(stack, se)
struct stacks *stack;
struct stack_elt *se;
#endif
/* This function runs down the stack(s) deleting every element which cannot be /* This function runs down the stack(s) deleting every element which cannot be
* reached anymore. */ * reached anymore. */
{ {
@ -1172,13 +1001,7 @@ struct stack_elt *se;
#ifndef NOLOOPS #ifndef NOLOOPS
#if LL_ANSI_C
static void hyp_run(struct stack_elt *se) static void hyp_run(struct stack_elt *se)
#else
static hyp_run(se)
struct stack_elt *se;
#endif /* LL_ANSI_C */
/* This function sets the 'hyp_ref_counts' of all elements of the loop that /* This function sets the 'hyp_ref_counts' of all elements of the loop that
* 'se' belongs to to the value that 'ref_count' will get when 'se' is * 'se' belongs to to the value that 'ref_count' will get when 'se' is
* deleted * deleted
@ -1212,14 +1035,7 @@ struct stack_elt *se;
} }
#if LL_ANSI_C
static void check_run(struct stacks *stack, struct stack_elt *se) static void check_run(struct stacks *stack, struct stack_elt *se)
#else
static check_run(stack, se)
struct stacks *stack;
struct stack_elt *se;
#endif /* LL_ANSI_C */
/* This function checks all 'hyp_ref_counts' that 'hyp_run()' has set. /* This function checks all 'hyp_ref_counts' that 'hyp_run()' has set.
* If one of them is not 0, 'check_run_ok' will be set to 0 indicating * If one of them is not 0, 'check_run_ok' will be set to 0 indicating
* that 'se' cannot be deleted. 'check_run()' also resets all 'hyp_ref_counts' * that 'se' cannot be deleted. 'check_run()' also resets all 'hyp_ref_counts'
@ -1244,13 +1060,7 @@ struct stack_elt *se;
#endif /* NOLOOPS */ #endif /* NOLOOPS */
#if LL_ANSI_C
static struct stack_elt *split(struct stack_elt *se) static struct stack_elt *split(struct stack_elt *se)
#else
static struct stack_elt *split(se)
struct stack_elt *se;
#endif
/* This function splits of a NT in de stack, and returns a pointer to it */ /* This function splits of a NT in de stack, and returns a pointer to it */
{ {
struct stack_elt *new_stack; struct stack_elt *new_stack;
@ -1296,12 +1106,7 @@ struct stack_elt *se;
#ifdef DEBUG #ifdef DEBUG
#if LL_ANSI_C
static void test(struct stacks *stack) static void test(struct stacks *stack)
#else
static test(stack)
struct stacks *stack;
#endif
{ {
struct stack_elt *se; struct stack_elt *se;
int i; int i;
@ -1320,13 +1125,7 @@ struct stacks *stack;
} }
#if LL_ANSI_C
static void dump_stack(struct stack_elt *se, int level) static void dump_stack(struct stack_elt *se, int level)
#else
static dump_stack(se, level)
struct stack_elt *se;
int level;
#endif
{ {
int i, j; int i, j;
@ -1385,14 +1184,7 @@ int level;
#endif #endif
#if LL_ANSI_C
static void clear_flags(struct stack_elt *se, char flag) static void clear_flags(struct stack_elt *se, char flag)
#else
static clear_flags(se, flag)
struct stack_elt *se;
char flag;
#endif
/* Clears edge flag 'flag' */ /* Clears edge flag 'flag' */
{ {
int i; int i;
@ -1405,13 +1197,7 @@ char flag;
} }
} }
#if LL_ANSI_C
static void clear_gen_flags(struct stacks *stack) static void clear_gen_flags(struct stacks *stack)
#else
static clear_gen_flags(stack)
struct stacks *stack;
#endif
{ {
int i; int i;
@ -1423,14 +1209,7 @@ struct stacks *stack;
} }
#if LL_ANSI_C
static void match_heads(struct stacks *stack, int symb) static void match_heads(struct stacks *stack, int symb)
#else
static match_heads(stack, symb)
struct stacks *stack;
int symb;
#endif
/* Match heads_buf against symb, leaving only matching heads, /* Match heads_buf against symb, leaving only matching heads,
* whilst deallocating the non-matching stacks * whilst deallocating the non-matching stacks
*/ */
@ -1482,13 +1261,7 @@ int symb;
} }
#if LL_ANSI_C
static void cleanup(struct stacks *stack) static void cleanup(struct stacks *stack)
#else
static cleanup(stack)
struct stacks *stack;
#endif
/* Deletes all elements in 'cleanup_buf()' */ /* Deletes all elements in 'cleanup_buf()' */
{ {
int i; int i;
@ -1502,13 +1275,7 @@ struct stacks *stack;
} }
#if LL_ANSI_C
static void initialize(struct stacks *stack) static void initialize(struct stacks *stack)
#else
static initialize(stack)
struct stacks *stack;
#endif
/* Initializes some variables and arrays */ /* Initializes some variables and arrays */
{ {
int j; int j;
@ -1541,14 +1308,7 @@ struct stacks *stack;
} }
#if LL_ANSI_C
static void calculate(struct stacks *stack, int l_ahead) static void calculate(struct stacks *stack, int l_ahead)
#else
static calculate(stack, l_ahead)
struct stacks *stack;
int l_ahead;
#endif
/* This function finds all new heads and deletes the old heads */ /* This function finds all new heads and deletes the old heads */
{ {
int i; int i;
@ -1592,12 +1352,7 @@ int l_ahead;
} }
} }
#if LL_ANSI_C
static void kill_stack(struct stacks *stack) static void kill_stack(struct stacks *stack)
#else
static kill_stack(stack)
struct stacks *stack;
#endif
{ {
int i; int i;
@ -1609,12 +1364,7 @@ struct stacks *stack;
#if LL_ANSI_C
void LLnc_recover(void) void LLnc_recover(void)
#else
LLnc_recover()
#endif
/* This function contains the main loop for non correcting syntax error /* This function contains the main loop for non correcting syntax error
* recovery * recovery
*/ */

View file

@ -17,29 +17,15 @@ int LLstartsymb;
static int fake_eof = 0; static int fake_eof = 0;
#endif #endif
#if LL_ANSI_C
#define LL_VOIDCST (void) #define LL_VOIDCST (void)
void LLmessage(int); void LLmessage(int);
#else
#define LL_VOIDCST
#endif
#ifdef LL_USERHOOK #ifdef LL_USERHOOK
#if LL_ANSI_C
static int LLdoskip(int); static int LLdoskip(int);
static int LLuserhook(int, int*); static int LLuserhook(int, int*);
#else
static int LLdoskip();
static int LLuserhook();
#endif
#endif #endif
#ifndef LL_FASTER #ifndef LL_FASTER
#if LL_ANSI_C
void LLscan(int t) void LLscan(int t)
#else
LLscan(t)
int t;
#endif
{ {
/* /*
* Check if the next symbol is equal to the parameter * Check if the next symbol is equal to the parameter
@ -85,12 +71,7 @@ LLscan(t)
} }
#endif #endif
#if LL_ANSI_C
void LLread(void) { void LLread(void) {
#else
LLread() {
#endif
#if LL_NON_CORR #if LL_NON_CORR
/* Again, check if another parser has crashed, /* Again, check if another parser has crashed,
* in that case intercept and go to the * in that case intercept and go to the
@ -122,12 +103,7 @@ LLread() {
/* NOTREACHED */ /* NOTREACHED */
} }
#if LL_ANSI_C
void LLerror(int t) void LLerror(int t)
#else
LLerror(t)
int t;
#endif
{ {
register int i; register int i;
@ -189,12 +165,7 @@ LLerror(t)
} }
} }
#if LL_ANSI_C
void LLsafeerror(int t) void LLsafeerror(int t)
#else
LLsafeerror(t)
int t;
#endif
{ {
if (t == EOFILE && LLsymb <= 0) return; if (t == EOFILE && LLsymb <= 0) return;
#ifdef LL_NEWMESS #ifdef LL_NEWMESS
@ -237,11 +208,7 @@ LLsafeerror(t)
} }
#ifndef LLNOFIRSTS #ifndef LLNOFIRSTS
#if LL_ANSI_C
int LLfirst(int x, int d) { int LLfirst(int x, int d) {
#else
int LLfirst(x, d) {
#endif
register int i; register int i;
return (i = LLindex[x]) >= 0 && return (i = LLindex[x]) >= 0 &&
@ -249,12 +216,7 @@ int LLfirst(x, d) {
} }
#endif #endif
#if LL_ANSI_C
int LLnext(int n) int LLnext(int n)
#else
int LLnext(n)
int n;
#endif
{ {
/* returns: 0 if the current symbol is'nt skipped, and it /* returns: 0 if the current symbol is'nt skipped, and it
is'nt a member of "n", is'nt a member of "n",
@ -275,11 +237,7 @@ int LLnext(n)
return retval; return retval;
} }
#if LL_ANSI_C
int LLskip(void) { int LLskip(void) {
#else
int LLskip() {
#endif
/* returns 0 if the current symbol is'nt skipped, and /* returns 0 if the current symbol is'nt skipped, and
1 if it is, t.i., we have a new symbol 1 if it is, t.i., we have a new symbol
*/ */
@ -287,14 +245,8 @@ int LLskip() {
return LLdoskip(0); return LLdoskip(0);
} }
#if LL_ANSI_C
extern void LL_USERHOOK(int, int *); extern void LL_USERHOOK(int, int *);
static int LLuserhook(int e, int *list) static int LLuserhook(int e, int *list)
#else
static int LLuserhook(e, list)
int e;
int *list;
#endif
{ {
int old = LLsymb; int old = LLsymb;
LL_USERHOOK(e, list); LL_USERHOOK(e, list);
@ -302,12 +254,7 @@ static int LLuserhook(e, list)
return LLsymb != old; return LLsymb != old;
} }
#if LL_ANSI_C
static void LLmklist(register int *list) static void LLmklist(register int *list)
#else
static LLmklist(list)
register int *list;
#endif
{ {
char Xset[LL_SSIZE]; char Xset[LL_SSIZE];
register char *p; register char *p;
@ -331,12 +278,7 @@ static LLmklist(list)
*list = 0; *list = 0;
} }
#if LL_ANSI_C
static int LLdoskip(int e) static int LLdoskip(int e)
#else
static int LLdoskip(e)
int e;
#endif
{ {
int LLx; int LLx;
int list[LL_NTERMINALS+1]; int list[LL_NTERMINALS+1];
@ -395,11 +337,7 @@ static int LLdoskip(e)
/* NOTREACHED */ /* NOTREACHED */
} }
#if LL_ANSI_C
void LLnewlevel(unsigned int *LLsinfo) { void LLnewlevel(unsigned int *LLsinfo) {
#else
LLnewlevel(LLsinfo) unsigned int *LLsinfo; {
#endif
register int i; register int i;
if (LLlevel++) { if (LLlevel++) {
@ -417,11 +355,7 @@ LLnewlevel(LLsinfo) unsigned int *LLsinfo; {
LLtincr(0); LLtincr(0);
} }
#if LL_ANSI_C
void LLoldlevel(unsigned int *LLsinfo) { void LLoldlevel(unsigned int *LLsinfo) {
#else
LLoldlevel(LLsinfo) unsigned int *LLsinfo; {
#endif
register int i; register int i;
LLtdecr(0); LLtdecr(0);