Просмотр исходного кода

Unfinished work with insert_to

Serj Kalichev 1 год назад
Родитель
Сommit
d0893c48bf
1 измененных файлов с 38 добавлено и 1 удалено
  1. 38 1
      src/syms.c

+ 38 - 1
src/syms.c

@@ -196,6 +196,35 @@ int srp_PLINE_INSERT_FROM(kcontext_t *context)
 }
 
 
+static faux_argv_t *assemble_insert_to(sr_session_ctx_t *sess, const kpargv_t *pargv,
+	faux_argv_t *cur_path, const char *candidate_value)
+{
+	faux_argv_t *args = NULL;
+	faux_argv_t *insert_to = NULL;
+	pline_t *pline = NULL;
+	pexpr_t *expr = NULL;
+	size_t i = 0;
+
+	assert(sess);
+
+	args = param2argv(cur_path, pargv, "from_path");
+	pline = pline_parse(sess, args, 0);
+	expr = pline_current_expr(pline);
+	for (i = 0; i < (expr->args_num - expr->list_pos); i++) {
+		faux_argv_node_t *iter = faux_argv_iterr(args);
+		faux_argv_del(args, iter);
+	}
+	insert_to = param2argv(args, pargv, "to_path");
+	faux_argv_free(args);
+	if (candidate_value)
+		faux_argv_add(insert_to, candidate_value);
+
+	pline_free(pline);
+
+	return insert_to;
+}
+
+
 int srp_PLINE_INSERT_TO(kcontext_t *context)
 {
 	return srp_check_type(context, PT_NOT_INSERT, 1);
@@ -489,6 +518,7 @@ int srp_insert(kcontext_t *context)
 	size_t err_num = 0;
 	faux_argv_t *cur_path = NULL;
 	kplugin_t *plugin = NULL;
+	faux_argv_t *insert_to = NULL;
 
 	assert(context);
 
@@ -501,6 +531,13 @@ int srp_insert(kcontext_t *context)
 
 	plugin = kcontext_plugin(context);
 	cur_path = (faux_argv_t *)kplugin_udata(plugin);
+
+	insert_to = assemble_insert_to(sess, kcontext_pargv(context),
+		cur_path, NULL);
+	printf("insert_to: %s\n", faux_argv_line(insert_to));
+	faux_argv_free(insert_to);
+
+/*
 	args = param2argv(cur_path, kcontext_pargv(context), "path");
 	pline = pline_parse(sess, args, 0);
 	faux_argv_free(args);
@@ -538,7 +575,7 @@ int srp_insert(kcontext_t *context)
 
 cleanup:
 	pline_free(pline);
-	sr_disconnect(conn);
+*/	sr_disconnect(conn);
 
 	return ret;
 }