• 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