void print_levels(FILE *out) { unsigned i, max_id = 7, max_desc = strlen("Description:"); /* Get the longest ID/Description length: */ for(i=0; GENERATOR_LIST[i].id; i++) { if(strlen(GENERATOR_LIST[i].id) > max_id) max_id = strlen(GENERATOR_LIST[i].id); if(strlen(GENERATOR_LIST[i].desc) > max_desc) max_desc = strlen(GENERATOR_LIST[i].desc); } /* Print the header: */ gamelib_print("ID: "); put_chars(max_id - strlen("ID:"), ' '); gamelib_print("Description:\n"); put_chars(max_id + max_desc + 2, '-'); gamelib_print("\n"); /* Print all things: */ for(i=0; GENERATOR_LIST[i].id; i++) { gamelib_print("%s ", GENERATOR_LIST[i].id); put_chars(max_id - strlen(GENERATOR_LIST[i].id), ' '); gamelib_print("%s%s\n", GENERATOR_LIST[i].desc, i==0 ? " (Default)":""); } gamelib_print("\n"); }
static bool put_parameter(char **_buffer, size_t *_bufferSize, struct driver_parameter *parameter, int32 level, bool flat) { int32 i; if (!flat) put_level_space(_buffer, _bufferSize, level); put_string(_buffer, _bufferSize, parameter->name); if (flat && parameter->value_count > 0) put_chars(_buffer, _bufferSize, " ="); for (i = 0; i < parameter->value_count; i++) { put_char(_buffer, _bufferSize, ' '); put_string(_buffer, _bufferSize, parameter->values[i]); } if (parameter->parameter_count > 0) { put_chars(_buffer, _bufferSize, " {"); if (!flat) put_char(_buffer, _bufferSize, '\n'); for (i = 0; i < parameter->parameter_count; i++) { put_parameter(_buffer, _bufferSize, ¶meter->parameters[i], level + 1, flat); if (parameter->parameters[i].parameter_count == 0) put_chars(_buffer, _bufferSize, flat ? "; " : "\n"); } if (!flat) put_level_space(_buffer, _bufferSize, level); put_chars(_buffer, _bufferSize, flat ? "}" : "}\n"); } return *_bufferSize >= 0; }
gboolean Lis_port(GIOChannel* src, GIOCondition cond, gpointer data) { gint bytes_read; static gchar c[BUFFER_RECEPTION]; guint i; bytes_read = BUFFER_RECEPTION; while(bytes_read == BUFFER_RECEPTION) { bytes_read = read(serial_port_fd, c, BUFFER_RECEPTION); if(bytes_read > 0) { put_chars(c, bytes_read, config.crlfauto); if(config.car != -1 && waiting_for_char == TRUE) { i = 0; while(i < bytes_read) { if(c[i] == config.car) { waiting_for_char = FALSE; add_input(); i = bytes_read; } i++; } } } else if(bytes_read == -1) { if(errno != EAGAIN) perror(config.port); } } return TRUE; }
void HASH_put_chars_at(hash_t *hash, const char *key, int i, const char *val){ put_chars(hash, key, i, val); int new_size = i+1; if(new_size>hash->num_array_elements) hash->num_array_elements = new_size; }
void HASH_put_chars(hash_t *hash, const char *key, const char *val){ put_chars(hash, key, 0, val); }
void test(bool* result) { SCREEN_Screen scr; scr = screen(80, 25); update(result, tposeq("initial cursor", mkpos(0, 0), cursor(&scr))); scr = screen(80, 25); cursor_address(&scr, mkpos(5, 10)); update(result, tposeq("cursor_address", mkpos(5, 10), cursor(&scr))); scr = screen(80, 25); cursor_address(&scr, mkpos(12, 5)); carriage_return(&scr); update(result, tposeq("carriage_return", mkpos(0, 5), cursor(&scr))); scr = screen(80, 25); cursor_address(&scr, mkpos(12, 5)); newline(&scr); update(result, tposeq("newline", mkpos(0, 6), cursor(&scr))); scr = screen(80, 25); cursor_address(&scr, mkpos(10, 6)); tab(&scr); update(result, tposeq("tab", mkpos(16, 6), cursor(&scr))); scr = screen(80, 25); cursor_address(&scr, mkpos(1, 6)); column_address(&scr, 16); update(result, tposeq("column_address", mkpos(16, 6), cursor(&scr))); scr = screen(80, 25); cursor_address(&scr, mkpos(16, 6)); row_address(&scr, 12); update(result, tposeq("row_address", mkpos(16, 12), cursor(&scr))); scr = screen(80, 25); cursor_address(&scr, mkpos(15, 6)); cursor_down(&scr); update(result, tposeq("cursor_down", mkpos(15, 7), cursor(&scr))); scr = screen(80, 25); cursor_address(&scr, mkpos(15, 6)); cursor_home(&scr); update(result, tposeq("cursor_home", mkpos(0, 0), cursor(&scr))); scr = screen(80, 25); cursor_address(&scr, mkpos(6, 8)); cursor_left(&scr); update(result, tposeq("cursor_left", mkpos(5, 8), cursor(&scr))); scr = screen(80, 25); cursor_address(&scr, mkpos(6, 8)); cursor_right(&scr); update(result, tposeq("cursor_right", mkpos(7, 8), cursor(&scr))); scr = screen(80, 25); cursor_address(&scr, mkpos(6, 8)); cursor_to_ll(&scr); update(result, tposeq("cursor_to_ll", mkpos(0, 24), cursor(&scr))); scr = screen(80, 25); cursor_address(&scr, mkpos(6, 8)); cursor_up(&scr); update(result, tposeq("cursor_up", mkpos(6, 7), cursor(&scr))); scr = screen(80, 25); cursor_address(&scr, mkpos(26, 9)); parm_left_cursor(&scr, 23); update(result, tposeq("parm_left_cursor", mkpos(3, 9), cursor(&scr))); scr = screen(80, 25); cursor_address(&scr, mkpos(3, 9)); parm_right_cursor(&scr, 23); update(result, tposeq("parm_right_cursor", mkpos(26, 9), cursor(&scr))); scr = screen(80, 25); cursor_address(&scr, mkpos(26, 4)); parm_down_cursor(&scr, 11); update(result, tposeq("parm_down_cursor", mkpos(26, 15), cursor(&scr))); scr = screen(6, 4); cursor_address(&scr, mkpos(2, 3)); put_char(&scr, 'a'); SCREEN_Cell want_0 = {'a', SCREEN_COLOR_WHITE, SCREEN_COLOR_BLACK, {false, false}}; update(result, tcelleq("put_char puts", want_0, cellat(&scr, mkpos(2,3)))); scr = screen(6, 4); cursor_address(&scr, mkpos(2, 3)); put_char(&scr, 'a'); update(result, tposeq("put_char moves", mkpos(3, 3), cursor(&scr))); scr = screen(6, 4); cursor_address(&scr, mkpos(5, 1)); put_char(&scr, 'a'); update(result, tposeq("put_char am", mkpos(0, 2), cursor(&scr))); scr = screen(6, 4); put_chars(&scr, "abcdefGHIJKLmno"); SCREEN_Cell want_1 = {'J', SCREEN_COLOR_WHITE, SCREEN_COLOR_BLACK, {false, false}}; update(result, tcelleq("put_char multiple", want_1, cellat(&scr, mkpos(3,1)))); scr = screen(6, 4); put_chars(&scr, "abcdefGHIJKLmno"); clear_screen(&scr); update(result, tposeq("clear_screen homes", mkpos(0, 0), cursor(&scr))); scr = screen(6, 4); put_chars(&scr, "abcdefGHIJKLmno"); clear_screen(&scr); SCREEN_Cell want_2 = {' ', SCREEN_COLOR_WHITE, SCREEN_COLOR_BLACK, {false, false}}; update(result, tcelleq("clear_screen clears", want_2, cellat(&scr, mkpos(3,1)))); scr = screen(6, 4); cursor_address(&scr, mkpos(0, 3)); put_chars(&scr, "abcdefGHIJKLmno"); SCREEN_Cell want_3 = {'J', SCREEN_COLOR_WHITE, SCREEN_COLOR_BLACK, {false, false}}; update(result, tcelleq("put_char scrolls at end", want_3, cellat(&scr, mkpos(3,2)))); scr = screen(6, 3); put_chars(&scr, "abcdefGHIJKLmno"); cursor_home(&scr); clr_eos(&scr); SCREEN_Cell want_4 = {' ', SCREEN_COLOR_WHITE, SCREEN_COLOR_BLACK, {false, false}}; update(result, tcelleq("put_char scrolls at end", want_4, cellat(&scr, mkpos(4,1)))); scr = screen(6, 4); cursor_down(&scr); put_chars(&scr, "abcdefGHIJKLmno"); cursor_address(&scr, mkpos(0, 3)); newline(&scr); SCREEN_Cell want_5 = {'K', SCREEN_COLOR_WHITE, SCREEN_COLOR_BLACK, {false, false}}; update(result, tcelleq("newline at bottom scrolls", want_5, cellat(&scr, mkpos(4,1)))); scr = screen(6, 4); put_chars(&scr, "abcdefGHIJKLmno"); cursor_address(&scr, mkpos(0, 0)); insert_line(&scr); SCREEN_Cell want_6 = {' ', SCREEN_COLOR_WHITE, SCREEN_COLOR_BLACK, {false, false}}; update(result, tcelleq("insert_line clears full line", want_6, cellat(&scr, mkpos(5,0)))); scr = screen(24, 4); cursor_address(&scr, mkpos(20, 1)); tab(&scr); update(result, tposeq("tab at eol", mkpos(0, 2), cursor(&scr))); }
void put_chars(struct part *p, unsigned char *c, int l) { static struct text_attrib_beginning ta_cache = { -1, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } }; static int bg_cache; static int fg_cache; int bg, fg; int i; struct link *link; struct point *pt; if (l < 0) overalloc(); /*printf("%d-", p->cx);for (i=0; i<l; i++) printf("%c", c[i]); printf("-\n");sleep(1);*/ while (par_format.align != AL_NO && p->cx == -1 && l && *c == ' ') c++, l--; if (!l) return; if (c[0] != ' ' || (c[1] && c[1] != ' ')) { last_tag_for_newline = (void *)&p->data->tags; } if (p->cx < par_format.leftmargin) p->cx = par_format.leftmargin; if (last_link || last_image || last_form || format.link || format.image || format.form) goto process_link; no_l: /*printf("%d %d\n",p->cx, p->cy);*/ if (memcmp(&ta_cache, &format, sizeof(struct text_attrib_beginning))) goto format_change; bg = bg_cache, fg = fg_cache; end_format_change: if (p->cx == par_format.leftmargin && *c == ' ' && par_format.align != AL_NO) c++, l--; if (p->y < p->cy + 1) p->y = p->cy + 1; if (nowrap && p->cx + l > rm(par_format)) return; set_hline(p, p->cx, p->cy, l, c, (((fg&0x08)<<3)|(bg<<3)|(fg&0x07))<<8, 1); p->cx += l; nobreak = 0; if (par_format.align != AL_NO) while (p->cx > rm(par_format) && p->cx > par_format.leftmargin) { int x; /*if (p->cx > p->x) { p->x = p->cx + par_format.rightmargin; if (c[l - 1] == ' ') p->x--; }*/ if (!(x = split_line(p))) break; /*if (LEN(p->cy-1) > p->x) p->x = LEN(p->cy-1);*/ align_line(p, p->cy - 1); nobreak = x - 1; } if ((p->xa += l) - (c[l-1] == ' ' && par_format.align != AL_NO) + par_format.leftmargin + par_format.rightmargin > p->xmax) p->xmax = p->xa - (c[l-1] == ' ' && par_format.align != AL_NO) + par_format.leftmargin + par_format.rightmargin; return; process_link: if ((last_link /*|| last_target*/ || last_image || last_form) && !xstrcmp(format.link, last_link) && !xstrcmp(format.target, last_target) && !xstrcmp(format.image, last_image) && format.form == last_form) { if (!p->data) goto x; link = &p->data->links[p->data->nlinks - 1]; if (!p->data->nlinks) { internal("no link"); goto no_l; } goto set_link; x:; } else { if (last_link) mem_free(last_link); /* !!! FIXME: optimize */ if (last_target) mem_free(last_target); if (last_image) mem_free(last_image); last_link = last_target = last_image = NULL; last_form = NULL; if (!(format.link || format.image || format.form)) goto no_l; if (d_opt->num_links) { unsigned char s[64]; unsigned char *fl = format.link, *ft = format.target, *fi = format.image; struct form_control *ff = format.form; format.link = format.target = format.image = NULL; format.form = NULL; s[0] = '['; snzprint(s + 1, 62, p->link_num); strcat(s, "]"); put_chars(p, s, strlen(s)); if (ff && ff->type == FC_TEXTAREA) line_break(p); if (p->cx == -1) p->cx = par_format.leftmargin; format.link = fl, format.target = ft, format.image = fi; format.form = ff; } p->link_num++; last_link = stracpy(format.link); last_target = stracpy(format.target); last_image = stracpy(format.image); last_form = format.form; if (!p->data) goto no_l; if (!(link = new_link(p->data))) goto no_l; link->num = p->link_num - 1; link->pos = DUMMY; if (!last_form) { link->type = L_LINK; link->where = stracpy(last_link); link->target = stracpy(last_target); } else { link->type = last_form->type == FC_TEXT || last_form->type == FC_PASSWORD || last_form->type == FC_FILE ? L_FIELD : last_form->type == FC_TEXTAREA ? L_AREA : last_form->type == FC_CHECKBOX || last_form->type == FC_RADIO ? L_CHECKBOX : last_form->type == FC_SELECT ? L_SELECT : L_BUTTON; link->form = last_form; link->target = stracpy(last_form->target); } link->where_img = stracpy(last_image); if (link->type != L_FIELD && link->type != L_AREA) { bg = find_nearest_color(&format.clink, 8); fg = find_nearest_color(&format.bg, 8); fg = fg_color(fg, bg); } else { fg = find_nearest_color(&format.fg, 8); bg = find_nearest_color(&format.bg, 8); fg = fg_color(fg, bg); } link->sel_color = ((fg & 8) << 3) | (fg & 7) | (bg << 3); link->n = 0; set_link: if ((unsigned)link->n + (unsigned)l > MAXINT / sizeof(struct point)) overalloc(); pt = mem_realloc(link->pos, (link->n + l) * sizeof(struct point)); link->pos = pt; for (i = 0; i < l; i++) pt[link->n + i].x = X(p->cx) + i, pt[link->n + i].y = Y(p->cy); link->n += l; } goto no_l; format_change: bg = find_nearest_color(&format.bg, 8); fg = find_nearest_color(&format.fg, 16); fg = fg_color(fg, bg); if (format.attr & AT_ITALIC) fg = fg ^ 0x01; if (format.attr & AT_UNDERLINE) fg = (fg ^ 0x04) | 0x08; if (format.attr & AT_BOLD) fg = fg | 0x08; fg = fg_color(fg, bg); if (format.attr & AT_GRAPHICS) bg = bg | 0x10; memcpy(&ta_cache, &format, sizeof(struct text_attrib_beginning)); fg_cache = fg; bg_cache = bg; goto end_format_change; }
int put_chars_conv(struct part *p, unsigned char *c, int l) { static char buffer[CH_BUF]; int bp = 0; int pp = 0; int total = 0; if (format.attr & AT_GRAPHICS) { put_chars(p, c, l); return l; } if (!l) put_chars(p, NULL, 0); while (pp < l) { unsigned char *e; if (c[pp] < 128 && c[pp] != '&') { put_c: buffer[bp++] = c[pp++]; if (bp < CH_BUF) continue; goto flush; } if (c[pp] != '&') { struct conv_table *t; int i; if (!convert_table) goto put_c; t = convert_table; i = pp; decode: if (!t[c[i]].t) { e = t[c[i]].u.str; } else { t = t[c[i++]].u.tbl; if (i >= l) goto put_c; goto decode; } pp = i + 1; } else { int i = pp + 1; if (d_opt->plain) goto put_c; while (i < l && c[i] != ';' && c[i] != '&' && c[i] > ' ') i++; if (!(e = get_entity_string(&c[pp + 1], i - pp - 1, d_opt->cp))) goto put_c; pp = i + (i < l && c[i] == ';'); } if (!e[0]) continue; if (!e[1]) { buffer[bp++] = e[0]; if (bp < CH_BUF) continue; flush: e = ""; goto flush1; } while (*e) { buffer[bp++] = *(e++); if (bp < CH_BUF) continue; flush1: put_chars(p, buffer, bp); total += bp; bp = 0; } } if (bp) put_chars(p, buffer, bp); total += bp; return total; }