/* lexer/parser communication */
extern int opt_param;
/* In general, actions are specified via case statements
* in the special_ functions at the end of this file. The
* special actions must be provided by the extender.
*/
/* FUNCTIONS, ETC. TO BE PROVIDED BY THE EXTENDER */
/* demonstration string definition */
STRING boiler_string_3 = "\nin the middle of it.\n\n";
/* demonstration functions */
char codebuf[80]; /* a string buffer */
/* PRWBOILER1 print some demonstration boilerplate */
void prwboiler1()
{
myprint("\nSome boilerplate text with ");
} /* end PRWBOILER1 */
/* PRWBOILER2 print some demonstration boilerplate */
void prwboiler2()
{
myprint("\nin the middle. Now there is\n");
myprint("some more boilerplate with ");
} /* end PRWBOILER2 */
/* PRWBOILER3 yet more demonstration boilerplate */
void prwboiler3()
{
myprint(boiler_string_3);
} /* end PRWBOILER1 */
/* CODESPECIAL_START actions for start of CODEspecial command */
void codespecial_start(pos)
PSENTRY pos; /* symbol entry */
{
start_section(pos); /* do start of sectioning */
tag_print(get_t(pos)); /* print start tag */
} /* end CODESPECIAL_START */
/* CODESPECIAL_P1 actions at stast of CODEspecial param 1 */
void codespecial_p1(pos)
PSENTRY pos; /* symbol entry */
{
tag_print(get_tag_t(pos,1)); /* print 1st param start tag */
initialise_sysbuf(); /* clear system string buffer */
set_print(p_print_to_sysbuf); /* put param text into system buffer */
} /* end CODESPECIAL_P1 */
/* CODESPECIAL_END actions at end of CODEspecial command */
void codespecial_end(pos)
PSENTRY pos; /* symbol entry */
{
initialise_string(codebuf); /* clear this string buffer */
copy_sysbuf(codebuf); /* copy system buffer into this buffer */
reset_print(); /* normal printing */
prwboiler1(); /* print some boilerplate */
print_sysbuf(); /* print system buffer */
prwboiler2(); /* print more boilerplate */
myprint(codebuf); /* print this buffer */
prwboiler3(); /* print yet more boilerplate */
start_list(pos); /* start a list environment */
} /* end CODESPECIAL_END */
/*==================================================================*/
/* SYSTEM SPECIAL_ FUNCTIONS FOR INCORPORATING EXTENDER */
/* SPECIFIED CASE STATEMENTS FOR USER-DEFINED SPECIAL COMMANDS */
/* SPECIAL_START_WITH_REQ special action at start of command with req param */
void special_start_with_req(pos)
PSENTRY pos; /* symbol entry */
{
int special_kind; /* user-specified special token */
special_kind = get_special_token(pos);
switch(special_kind) {
/* additional cases for specials added here */
/* end of cases for specials */
default: /* should not be here! */
warning("(special_start_with_req) Unrecognized SPECIAL");
tdebug_str_int("SPECIAL_TOKEN =",special_kind);
break;
} /* end of switch on user_kind */
} /* end SPECIAL_START_WITH_REQ */
/* SPECIAL_ACTION_P_P1 special action between p'th and (p+1)'th req params */
void special_action_p_p1(pos,p)
PSENTRY pos; /* symbol entry */
int p; /* number of p'th req param */
{
int special_kind; /* user-specified special token */
special_kind = get_special_token(pos);
switch(special_kind) {
/* additional cases for specials added here */
/* end of cases for specials */
default: /* should not be here! */
warning("(special_action_p_p1) Unrecognized SPECIAL");
tdebug_str_int("SPECIAL_TOKEN =",special_kind);
break;
} /* end of switch on user_kind */
} /* end SPECIAL_ACTION_P_P1 */
/* SPECIAL_ACTION_LAST_P special action after last req param */
void special_action_last_p(pos,p)
PSENTRY pos; /* symbol entry */
int p; /* number of last req param */
{
int special_kind; /* user-specified special token */
special_kind = get_special_token(pos);
switch(special_kind) {
/* additional cases for specials added here */
case 59999: /* example coded special */
if (p == 1) { /* has only 1 req param */
codespecial_end(pos);
}
break;
/* end of cases for specials */
default: /* should not be here! */
warning("(special_action_last_p) Unrecognized SPECIAL");
tdebug_str_int("SPECIAL_TOKEN =",special_kind);
break;
} /* end of switch on user_kind */
} /* end SPECIAL_ACTION_LAST_P */
/* SPECIAL_START_WITH_OPT special start for command with opt param */
void special_start_with_opt(pos)
PSENTRY pos; /* symbol entry */
{
int special_kind; /* user-specified special token */
special_kind = get_special_token(pos);
switch(special_kind) {
/* additional cases for specials added here */
case 59999: /* example coded special */
codespecial_start(pos);
default_start_with_opt(pos);
break;
/* end of cases for specials */
default: /* should not be here! */
warning("(special_start_with_opt) Unrecognized SPECIAL");
tdebug_str_int("SPECIAL_TOKEN =",special_kind);
break;
} /* end of switch on user_kind */
} /* end SPECIAL_START_WITH_OPT */
/* SPECIAL_ACTION_OPT_FIRST special action between opt and 1st param */
void special_action_opt_first(pos)
PSENTRY pos; /* symbol entry */
{
int special_kind; /* user-specified special token */
special_kind = get_special_token(pos);
switch(special_kind) {
/* additional cases for specials added here */
case 59999: /* example coded special */
default_end_start_opt(pos);
codespecial_p1(pos);
break;
/* end of cases for specials */
default: /* should not be here! */
warning("(special_action_opt_first) Unrecognized SPECIAL");
tdebug_str_int("SPECIAL_TOKEN =",special_kind);
break;
} /* end of switch on user_kind */
} /* end SPECIAL_ACTION_OPT_FIRST */
/* SPECIAL_ACTION_P_OPT special action between param p and opt */
void special_action_p_opt(pos,p)
PSENTRY pos; /* symbol entry */
int p; /* number of p'th req param */
{
int special_kind; /* user-specified special token */
special_kind = get_special_token(pos);
switch(special_kind) {
/* additional cases for specials added here */
/* end of cases for specials */
default: /* should not be here! */
warning("(special_action_p_opt) Unrecognized SPECIAL");
tdebug_str_int("SPECIAL_TOKEN =",special_kind);
break;
} /* end of switch on user_kind */
} /* end SPECIAL_ACTION_P_OPT */
/* SPECIAL_ACTION_LAST_OPT special action after last opt param */
void special_action_last_opt(pos)
PSENTRY pos; /* symbol entry */
{
int special_kind; /* user-specified special token */
special_kind = get_special_token(pos);
switch(special_kind) {
/* additional cases for specials added here */
/* end of cases for specials */
default: /* should not be here! */
warning("(special_action_last_opt) Unrecognized SPECIAL");
tdebug_str_int("SPECIAL_TOKEN =",special_kind);
break;
} /* end of switch on user_kind */
} /* end SPECIAL_ACTION_LAST_OPT */
/* SPECIAL_ACTION_NO_PARAM special action for command with no params */
void special_action_no_param(pos)
PSENTRY pos; /* symbol entry */
{
int special_kind; /* user-specified special token */
special_kind = get_special_token(pos);
switch(special_kind) {
/* additional cases for specials added here */
/* end of cases for specials */
default: /* should not be here! */
warning("(special_action_no_param) Unrecognized SPECIAL");
tdebug_str_int("SPECIAL_TOKEN =",special_kind);
break;
} /* end of switch on user_kind */
} /* end SPECIAL_ACTION_NO_PARAM */