/*Copyright (C) 1992, 1995 by Thomas Glen Smith. All Rights Reserved.*/
/* apledme APL2 V1.0.0 *************************************************
* Called from apledmd after the statement to be modified has been *
* formatted and displayed. *
***********************************************************************/
#define MAXLINE 1024
#define INCLUDES APLCB+APLCHDEF+APLED+APLTOKEN+STDIO+STRING
#include "includes.h"
void apledme(e,line,off)
struct apledst *e; /* Edit common area. */
char line[]; /* Formatted statement. */
int off; /* offset to place cursor */
{
Apledmf; Codechar; Edline; Execmsg; Imin;
extern int aplerr;
int c,code_a,code_z,code_0,code_9,i,j,k,limit,m,n,p,stmtlen;
char edit[MAXLINE];
stmtlen = strlen(line);
execmsg(line,stmtlen,0,NULL); /* display statement text */
off = (off == 0) ? stmtlen : imin(off+10,stmtlen);
edit[j = stmtlen] = '\0';
while ( j-- )
edit[j] = ' ';
k = edline(edit,off,MAXLINE,0); /* get edit mask */
if (k < 0) return; /* don't bother with EOF */
code_a = *codechar(APL_A);
code_z = *codechar(APL_Z);
code_0 = *codechar(APL_0);
code_9 = *codechar(APL_9);
n = 0; /* final position of cursor */
while (k--) {
c = edit[k]; /* current edit character */
if (c == '/') { /* it is delete */
strcpy(line+k,line+k+1); /* shift left */
stmtlen--; /* reduce length of line by 1 */
if (n) n--; /* reduce cursor position */
}
else { /* check for insert */
if (c >= code_0 && c <= code_9) /* digit */
j = c - code_0;
else if (c >= code_a && c <= code_z) /* digit */
j = (c - code_a + 1) * 5;
else j = 0; /* ignore all others */
if (j) {
n = k; /* save insertion position */
while(j-- && stmtlen < (MAXLINE - 1)) {
for ( m = stmtlen++; m > n; m--)
line[m] = line[m-1];
line[n] = ' '; /* insert space */
}
}
}
}
apledmf(e,line,n,0); /* more edit function */
}