implemented a and i

This commit is contained in:
hyung-hwan 2009-05-05 07:49:26 +00:00
parent bafb6e59e9
commit 01937d5282
2 changed files with 39 additions and 2 deletions

View File

@ -148,7 +148,6 @@ struct qse_sed_t
/* temporary storage to keep track of the begining of a command group */ /* temporary storage to keep track of the begining of a command group */
qse_sed_cmd_t* grpcmd[128]; qse_sed_cmd_t* grpcmd[128];
/* io data for execution */ /* io data for execution */
struct struct
{ {
@ -174,6 +173,8 @@ struct qse_sed_t
qse_size_t num; qse_size_t num;
} in; } in;
} eio; } eio;
qse_lda_t text_appended;
}; };

View File

@ -91,6 +91,14 @@ qse_sed_t* qse_sed_init (qse_sed_t* sed, qse_mmgr_t* mmgr, qse_sed_prm_t* prm)
sed->cmd.cur = sed->cmd.buf; sed->cmd.cur = sed->cmd.buf;
sed->cmd.end = sed->cmd.buf + 1000 - 1; sed->cmd.end = sed->cmd.buf + 1000 - 1;
if (qse_lda_init (&sed->text_appended, mmgr, 32) == QSE_NULL)
{
QSE_MMGR_FREE (sed->mmgr, sed->cmd.buf);
qse_map_fini (&sed->labs);
qse_str_fini (&sed->rexbuf);
return QSE_NULL;
}
/* build a character classifier from the primitive functions */ /* build a character classifier from the primitive functions */
sed->ccls.is = (qse_ccls_is_t) prm->isccls; sed->ccls.is = (qse_ccls_is_t) prm->isccls;
sed->ccls.to = (qse_ccls_to_t) prm->toccls; sed->ccls.to = (qse_ccls_to_t) prm->toccls;
@ -101,6 +109,8 @@ qse_sed_t* qse_sed_init (qse_sed_t* sed, qse_mmgr_t* mmgr, qse_sed_prm_t* prm)
void qse_sed_fini (qse_sed_t* sed) void qse_sed_fini (qse_sed_t* sed)
{ {
qse_lda_fini (&sed->text_appended);
/* TODO: use different data sturect -> look at qse_sed_init */ /* TODO: use different data sturect -> look at qse_sed_init */
qse_sed_cmd_t* c; qse_sed_cmd_t* c;
for (c = sed->cmd.buf; c != sed->cmd.cur; c++) for (c = sed->cmd.buf; c != sed->cmd.cur; c++)
@ -1071,11 +1081,13 @@ qse_printf (QSE_T("command %c\n"), cmd->type);
/* get_text() starts from the next line */ /* get_text() starts from the next line */
if (get_text (sed, cmd) <= -1) return -1; if (get_text (sed, cmd) <= -1) return -1;
/*
{ {
qse_char_t ttt[1000]; qse_char_t ttt[1000];
qse_fgets (ttt, QSE_COUNTOF(ttt), QSE_STDIN); qse_fgets (ttt, QSE_COUNTOF(ttt), QSE_STDIN);
qse_printf (QSE_T("%s%s"), ttt, cmd->u.text.ptr); qse_printf (QSE_T("%s%s"), ttt, cmd->u.text.ptr);
} }
*/
break; break;
} }
@ -1524,7 +1536,7 @@ static int match_address (qse_sed_t* sed, qse_sed_cmd_t* cmd)
a2 = match_a2 (sed, cmd); a2 = match_a2 (sed, cmd);
if (a2 <= -1) return -1; if (a2 <= -1) return -1;
qse_printf (QSE_T("a1 = %d, a2 = %d\n"), a1, a2); //qse_printf (QSE_T("a1 = %d, a2 = %d\n"), a1, a2);
return (a1 >= 1 && a2 >= 1)? 1: 0; return (a1 >= 1 && a2 >= 1)? 1: 0;
} }
@ -1548,9 +1560,21 @@ static int exec_cmd (qse_sed_t* sed, qse_sed_cmd_t* cmd)
break; break;
case QSE_SED_CMD_A: case QSE_SED_CMD_A:
if (qse_lda_insert (
&sed->text_appended,
QSE_LDA_SIZE(&sed->text_appended),
&cmd->u.text, 0) == (qse_size_t)-1)
{
sed->errnum = QSE_SED_ENOMEM;
return -1;
}
break; break;
case QSE_SED_CMD_I: case QSE_SED_CMD_I:
n = write_str (sed,
QSE_STR_PTR(&cmd->u.text),
QSE_STR_LEN(&cmd->u.text));
if (n <= -1) return -1;
break; break;
} }
@ -1608,11 +1632,14 @@ int qse_sed_execute (qse_sed_t* sed, qse_sed_iof_t inf, qse_sed_iof_t outf)
while (1) while (1)
{ {
qse_sed_cmd_t* c; qse_sed_cmd_t* c;
qse_size_t i;
n = read_line (sed); n = read_line (sed);
if (n <= -1) { ret = -1; goto done; } if (n <= -1) { ret = -1; goto done; }
if (n == 0) goto done; if (n == 0) goto done;
qse_lda_clear (&sed->text_appended);
c = sed->cmd.buf; c = sed->cmd.buf;
while (c < sed->cmd.cur) while (c < sed->cmd.cur)
{ {
@ -1640,6 +1667,15 @@ int qse_sed_execute (qse_sed_t* sed, qse_sed_iof_t inf, qse_sed_iof_t outf)
QSE_STR_LEN(&sed->eio.in.line)); QSE_STR_LEN(&sed->eio.in.line));
if (n <= -1) { ret = -1; goto done; } if (n <= -1) { ret = -1; goto done; }
} }
for (i = 0; i < QSE_LDA_SIZE(&sed->text_appended); i++)
{
qse_xstr_t* t = QSE_LDA_DPTR(&sed->text_appended, i);
n = write_str (sed, t->ptr, t->len);
if (n <= -1) { ret = -1; goto done; }
//n = write_str (sed, QSE_T("\n"), 1);
//if (n <= -1) { ret = -1; goto done; }
}
} }
done: done: