implemented a and i
This commit is contained in:
parent
bafb6e59e9
commit
01937d5282
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -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:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user