implementing sed
This commit is contained in:
		| @ -73,10 +73,21 @@ qse_sed_t* qse_sed_init (qse_sed_t* sed, qse_mmgr_t* mmgr) | ||||
| 		return QSE_NULL;	 | ||||
| 	}	 | ||||
|  | ||||
| 	if (qse_map_init (&sed->labs, mmgr, 128, 70) == QSE_NULL) | ||||
| 	{ | ||||
| 		qse_str_fini (&sed->rexbuf); | ||||
| 		sed->errnum = QSE_SED_ENOMEM; | ||||
| 		return QSE_NULL;	 | ||||
| 	} | ||||
| 	qse_map_setcopier (&sed->labs, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE); | ||||
|         qse_map_setscale (&sed->labs, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t)); | ||||
|  | ||||
| 	/* TODO: use different data structure... */ | ||||
| 	sed->cmd.buf = QSE_MMGR_ALLOC (sed->mmgr, QSE_SIZEOF(qse_sed_c_t) * 1000); | ||||
| 	sed->cmd.buf = QSE_MMGR_ALLOC ( | ||||
| 		sed->mmgr, QSE_SIZEOF(qse_sed_c_t) * 1000); | ||||
| 	if (sed->cmd.buf == QSE_NULL) | ||||
| 	{ | ||||
| 		qse_map_fini (&sed->labs); | ||||
| 		qse_str_fini (&sed->rexbuf); | ||||
| 		return QSE_NULL; | ||||
| 	} | ||||
| @ -88,6 +99,7 @@ qse_sed_t* qse_sed_init (qse_sed_t* sed, qse_mmgr_t* mmgr) | ||||
|  | ||||
| void qse_sed_fini (qse_sed_t* sed) | ||||
| { | ||||
| 	qse_map_fini (&sed->labs); | ||||
| 	qse_str_fini (&sed->rexbuf); | ||||
| } | ||||
|  | ||||
| @ -301,7 +313,7 @@ oops: | ||||
| static qse_str_t* get_label (qse_sed_t* sed, qse_sed_c_t* cmd) | ||||
| { | ||||
| 	qse_cint_t c; | ||||
| 	qse_str_t* t = QSE_NULL; | ||||
| 	qse_str_t* t = QSE_NULL; /* TODO: move this buffer to sed */ | ||||
|  | ||||
| 	/* skip white spaces */ | ||||
| 	c = CURSC(sed); | ||||
| @ -310,7 +322,7 @@ static qse_str_t* get_label (qse_sed_t* sed, qse_sed_c_t* cmd) | ||||
| 	if (IS_LABEL_TERMINATER(c)) | ||||
| 	{ | ||||
| 		/* label name is empty */ | ||||
| 		sed->errnum = QSE_SED_ELBLEM; | ||||
| 		sed->errnum = QSE_SED_ELABEM; | ||||
| 		return QSE_NULL; | ||||
| 	} | ||||
|  | ||||
| @ -327,7 +339,11 @@ static qse_str_t* get_label (qse_sed_t* sed, qse_sed_c_t* cmd) | ||||
| 	} | ||||
| 	while (!IS_LABEL_TERMINATOR(c)); | ||||
|  | ||||
| /* TODO: */ | ||||
| 	search_label_table (c); | ||||
| 	qse_map_insert (&sed->labs, QSE_STR_PTR(t), QSE_STR_LEN(t), cmd, 0); | ||||
|  | ||||
| 	ADVSCP (sed); | ||||
| 	return t; | ||||
|  | ||||
| oops: | ||||
|  | ||||
| @ -109,12 +109,4 @@ struct qse_sed_c_t | ||||
| 	int negfl; | ||||
| }; | ||||
|  | ||||
| struct qse_sed_l_t | ||||
| { | ||||
| 	qse_char_t name[9];   /* label name */ | ||||
| 	qse_sed_c_t* chain;    | ||||
| 	qse_sed_c_t* address; /* command associated with label */ | ||||
|  | ||||
| }; | ||||
|  | ||||
| #endif | ||||
|  | ||||
		Reference in New Issue
	
	Block a user