/* Copyright (C) 1992, 1995 by Thomas Glen Smith. All Rights Reserved. */
/* apledps APL2 V1.0.0 *************************************************
* Called from apledfx to format for display a statement. The *
* line prefix is assumed to already be stored. *
***********************************************************************/
#define INCLUDES STDIO+STRING+APLCB+APLCHDEF+APLTOKEN+APLED
#include "includes.h"
void apledps(ed,line)
struct apled *ed; /* Statement to be formatted. */
char *line; /* String in which to store formatted stmt. */
{
Apledfm; Apledpq; Codechar; Endoper; Execmsg; Form; Quoteit;
extern int aplerr;
Apltoken curtok,tokhdr;
Aplcb wrk;
char *str;
int i,oplast,opnext,tokcnt;
tokcnt = ed->apledcn;
tokhdr = ed->apledhd;
if (!(tokcnt > 2 && (tokhdr + tokcnt - 2)->token_code == COLON
|| (tokhdr + tokcnt - 1)->token_code == CAP_NULL))
strcat(line," "); /* indent non-labelled, non-comments */
opnext = 0; /* indicates whether last token was operand */
while (tokcnt--) {
curtok = tokhdr + tokcnt;
oplast = opnext;
opnext = 0; /* next oplast value */
switch (i = curtok->token_code) {
case QUOTE:
if (oplast) /* was last token for operand/vector? */
strcat(line," "); /* delimit with a blank */
opnext = 1;
quoteit(line+strlen(line),
curtok->token_ptr.token_vector ->
aplptr.aplchar);
break;
case VECTOR_TOKEN:
if (oplast) /* was last token for operand/vector? */
strcat(line," "); /* delimit with a blank */
opnext = 1;
wrk = form(NULL,curtok->token_ptr.token_vector);
strcat(line,wrk->aplptr.aplchar);
endoper(wrk);
break;
case OPERAND_TOKEN:
if (oplast) /* was last token for operand? */
strcat(line," "); /* delimit with a blank */
opnext = 1;
strcat(line,curtok->token_ptr.token_string);
break;
case CAP_NULL: /* comment */
strcat(line,ed->apledch+curtok->token_offset);
break;
default:
if (i <= QUAD_AI && i > QUAD_ZZ)
apledpq(i,line);
else
strcat(line,codechar(i));
break;
} /* end switch */
}
}