Patch: Elm ME+ 2.5 PLalpha62 -> Elm ME+ 2.5 PLalpha63 [3/7] (3/5)
From
Kari Hurtta@21:1/5 to
All on Wed Jan 3 13:51:40 2024
[continued from previous message]
+ enum pager_param_opcode opcode,
+ struct pager_param_value * param_value));
+ static void sb_add_pager_param_to_mem (buffer,binding,range,opcode,
+ param_value)
+ struct stringbuffer * buffer;
+ struct pgrng_bfr_binding * binding;
+ struct pager_range * range;
+ enum pager_param_opcode opcode;
+ struct pager_param_value * param_value;
+ {
+
+ if (SB_in_mem_magic != buffer->a.mem->magic)
+ panic("STRINGBUFFER PANIC",__FILE__,__LINE__,
+ "sb_add_pager_param_to_mem",
+ "Bad magic number",0);
+
+ if (binding) {
+ int range_index;
+ struct stringbuffer *bf =
+ pgrng_bfr_bnd_get_stringbuffer(binding,&range_index);
+ struct sb_pager_range * sb_range;
+
+ int ptr;
+
+ if (bf != buffer)
+ panic("STRINGBUFFER PANIC",__FILE__,__LINE__,
+ "sb_add_pager_param_to_mem",
+ "pager_range (binding) added to wrong stringbuffer",0);
+
+ if (range_index < 0 ||
+ range_index >= buffer->a.mem->pager_range_count ||
+ buffer->a.mem->pager_range[range_index].pager_range != binding)
+ panic("STRINGBUFFER PANIC",__FILE__,__LINE__,
+ "sb_add_pager_param_to_mem",
+ "bad range_index",0);
+ sb_range = &(buffer->a.mem->pager_range[range_index]);
+
+ ptr = sb_range->param_value_count;
+
+ sb_range->param_value =
+ safe_array_realloc(sb_range->param_value,
+ sb_range->param_value_count+1,
+ sizeof (sb_range->param_value[0]));
+
+ sb_range->param_value[ptr] = param_value;
+ inc_pager_param_value_refcount(sb_range->param_value[ptr]);
+
+ sb_range->param_value_count++;
+
+ /* Not really needed */
+ pgrng_binding_add_value(binding,param_value,ptr);
+
+ free_stringbuffer(&bf);
+
+ } else
+ panic("STRINGBUFFER PANIC",__FILE__,__LINE__,
+ "sb_add_pager_param_to_mem",
+ "pager_range (binding) missing",0);
+
+ }
+
+ S_(sb_get_pager_param_from_stringbuffer sb_get_pager_param_from_mem)
+ static struct pager_param_value * sb_get_pager_param_from_mem
+ P_((struct stringbuffer * buffer,
+ struct pager_range * range,
+ enum pager_param_opcode opcode,
+ int * next_pos,
+ struct pgrng_bfr_binding * binding,
+ int * found_pos));
+ static struct pager_param_value * sb_get_pager_param_from_mem(buffer,
+ range,
+ opcode,
+ next_pos,
+ binding,
+ found_pos)
+ struct stringbuffer * buffer;
+ struct pager_range * range;
+ enum pager_param_opcode opcode;
+ int * next_pos;
+ struct pgrng_bfr_binding * binding;
+ int * found_pos;
+ {
+ struct pager_param_value * ret = NULL;
+ int min_pos = 0;
+
+ if (SB_in_mem_magic != buffer->a.mem->magic)
+ panic("STRINGBUFFER PANIC",__FILE__,__LINE__,
+ "sb_get_pager_param_from_mem",
+ "Bad magic number",0);
+
+ if (found_pos)
+ *found_pos = -1;
+
+ if (next_pos) {
+ min_pos = *next_pos;
+
+ if (min_pos < 0)
+ panic("STRINGBUFFER PANIC",__FILE__,__LINE__,
+ "sb_get_pager_param_from_mem",
+ "Bad start index",0);
+
+ *next_pos = -1;
+ }
+
+ if (binding) {
+ int range_index;
+ struct stringbuffer *bf =
+ pgrng_bfr_bnd_get_stringbuffer(binding,&range_index);
+ struct sb_pager_range * sb_range;
+
+ if (bf != buffer)
+ panic("STRINGBUFFER PANIC",__FILE__,__LINE__,
+ "sb_get_pager_param_from_mem",
+ "pager_range (binding) added to wrong stringbuffer",0);
+
+ if (range_index < 0 ||
+ range_index >= buffer->a.mem->pager_range_count ||
+ buffer->a.mem->pager_range[range_index].pager_range != binding)
+ panic("STRINGBUFFER PANIC",__FILE__,__LINE__,
+ "sb_get_pager_param_from_mem",
+ "bad range_index",0);
+ sb_range = &(buffer->a.mem->pager_range[range_index]);
+
+ if (sb_range->param_value) {
+ int i;
+
+ for (i = min_pos; i < sb_range->param_value_count; i++) {
+
+ if (sb_range->param_value[i]) {
+
+ if (match_pager_param_value(sb_range->param_value[i],
+ opcode)) {
+ ret = sb_range->param_value[i];
+
+ inc_pager_param_value_refcount(ret);
+ if (next_pos)
+ *next_pos = i+1;
+ if (found_pos)
+ *found_pos = i;
+ break;
+ }
+ }
+ }
+ }
+
+ free_stringbuffer(&bf);
+
+ } else
+ panic("STRINGBUFFER PANIC",__FILE__,__LINE__,
+ "sb_get_pager_param_from_mem",
+ "pager_range (binding) missing",0);
+
+ /* Already done:
+ inc_pager_param_value_refcount(ret);
+ */
+
+ return ret;
+ }
+
+
struct sb_type sb_in_mem = {
SB_TYPE_magic,
***************
*** 311,317 ****
sb_add_pager_range_to_mem,
sb_get_pager_range_from_mem,
sb_add_lineext_to_mem,
! sb_walk_lineext_on_mem
};
/* ------------------------------------------------------------------ */
--- 548,557 ----
sb_add_pager_range_to_mem,
sb_get_pager_range_from_mem,
sb_add_lineext_to_mem,
! sb_walk_lineext_on_mem,
! sb_add_entity_to_mem,
! sb_add_pager_param_to_mem,
! sb_get_pager_param_from_mem
};
/* ------------------------------------------------------------------ */ ***************
*** 323,335 ****
int refcount;
! struct string *line;
! int pg_flags;
! struct pager_range *range;
! struct plext_in_mem *next_extension;
};
static struct plext_in_mem * malloc_plext_in_mem()
{
struct plext_in_mem *ret = safe_zero_alloc(sizeof (* ret));
--- 563,646 ----
int refcount;
! struct string_alt * line_or_other;
! int pg_flags;
! struct pager_range * range;
! struct plext_in_mem * next_extension;
};
+ static void sb_add_string_alt_to_mem(buffer,string_alt,
+ pg_flags,range)
+ struct stringbuffer * buff