/* Copyright (C) 1993 by Thomas Glen Smith. All Rights Reserved. */
/* slashtrb APL2 V1.0.0 ************************************************
* Called from slashtra to handle compress/expand operator transform. *
***********************************************************************/
#define INCLUDES APLTOKEN+APLTOKCD+APLCHDEF+FUNSTRUC+APLDERIV+APLCB\
+TREE+FUNCODES
#include "includes.h"
void slashtrb(tok,funtok,axistok,dp)
Apltoken tok; /* token for slash, slash bar, slope, slope bar */
Apltoken funtok; /* token left of compress, if any */
Apltoken axistok; /* axis associated with funtok, if any */
Aplderiv dp; /* derived function structure */
{
Aplcomex; Compress; Expand; Lifo;
extern int aplerr;
extern Treelist treehdr;
dp->deriv_func = aplcomex;
switch(((Codes *)(dp->deriv_op))->funky_code) {
case SLASH:
case SLASH_BAR:
dp->deriv_left.func.wax = compress;
break;
case SLOPE:
case SLOPE_BAR:
dp->deriv_left.func.wax = expand;
break;
default:
aplerr = 999; /* internal error */
exit(999);
} /* end switch */
tok->token_code = DERIVED_FUNCTION;
tok->token_ptr.token_function = dp;
if (funtok) /* put back on input stack */
funtok = lifo(&(treehdr->avltokhd),funtok);
if (axistok) /* put back on input stack */
axistok = lifo(&(treehdr->avltokhd),axistok);
}