static int archive_buffer_load(EditBuffer *b, FILE *f) { /* Launch subprocess to list archive contents */ char cmd[1024]; ArchiveType *atp; atp = find_archive_type(b->filename); if (atp) { eb_clear(b); eb_printf(b, " Directory of %s archive %s\n", atp->name, b->filename); snprintf(cmd, sizeof(cmd), atp->list_cmd, b->filename); new_shell_buffer(b, get_basename(b->filename), NULL, cmd, SF_INFINITE | SF_BUFED_MODE); /* XXX: should check for archiver error */ /* XXX: should delay BF_SAVELOG until buffer is fully loaded */ b->flags |= BF_READONLY; return 0; } else { eb_printf(b, "Cannot find archiver\n"); return -1; } }
static void build_bufed_list(EditState *s) { QEmacsState *qs = s->qe_state; EditBuffer *b, *b1; BufedState *hs; int last_index = list_get_pos(s); int i, flags; hs = s->mode_data; free_strings(&hs->items); for (b = qs->first_buffer; b != NULL; b = b->next) { if (!(b->flags & BF_SYSTEM) || (hs->flags & BUFED_ALL_VISIBLE)) add_string(&hs->items, b->name); } /* build buffer */ b = s->b; flags = b->flags; b->flags &= ~BF_READONLY; eb_delete(b, 0, b->total_size); for (i = 0; i < hs->items.nb_items; i++) { eb_printf(b, " %-20s", hs->items.items[i]->str); b1 = eb_find(hs->items.items[i]->str); if (b1) { /* CG: should also display mode */ eb_printf(b, " %10d %s", b1->total_size, b1->filename); } eb_printf(b, "\n"); } b->flags = flags; s->offset = eb_goto_pos(s->b, last_index, 0); }
/* should register this as help function */ void qe_list_variables(EditState *s, EditBuffer *b) { QEmacsState *qs = s->qe_state; char buf[MAX_FILENAME_SIZE]; char typebuf[32]; const char *type; const VarDef *vp; eb_printf(b, "\n variables:\n\n"); for (vp = qs->first_variable; vp; vp = vp->next) { switch (vp->type) { case VAR_NUMBER: type = "int"; break; case VAR_STRING: type = "string"; break; case VAR_CHARS: type = typebuf; snprintf(typebuf, sizeof(typebuf), "char[%d]", vp->size); break; default: type = "var"; break; } qe_get_variable(s, vp->name, buf, sizeof(buf), NULL, 1); eb_printf(b, " %s %s %s%s -> %s\n", var_domain[vp->domain], type, vp->rw ? "" : "read-only ", vp->name, buf); } }
/* pad current line with spaces so that it reaches column n */ void eb_line_pad(EditBuffer *b, int n) { int offset, i; i = 0; offset = b->total_size; for (;;) { if (eb_prevc(b, offset, &offset) == '\n') break; i++; } while (i < n) { eb_printf(b, " "); i++; } }
static void build_bufed_list(EditState *s) { QEmacsState *qs = s->qe_state; EditBuffer *b; BufedState *hs; int i; hs = s->mode_data; free_strings(&hs->items); for(b = qs->first_buffer; b != NULL; b = b->next) { if (!(b->flags & BF_SYSTEM)) add_string(&hs->items, b->name); } /* build buffer */ b = s->b; eb_delete(b, 0, b->total_size); for(i=0;i<hs->items.nb_items;i++) { eb_printf(b, " %s", hs->items.items[i]->str); if (i != hs->items.nb_items - 1) eb_printf(b, "\n"); } }
static int compress_buffer_load(EditBuffer *b, FILE *f) { /* Launch subprocess to expand compressed contents */ char cmd[1024]; CompressType *ctp; ctp = find_compress_type(b->filename); if (ctp) { eb_clear(b); snprintf(cmd, sizeof(cmd), ctp->load_cmd, b->filename); new_shell_buffer(b, get_basename(b->filename), NULL, cmd, SF_INFINITE | SF_AUTO_CODING | SF_AUTO_MODE); /* XXX: should check for archiver error */ /* XXX: should delay BF_SAVELOG until buffer is fully loaded */ b->flags |= BF_READONLY; return 0; } else { eb_printf(b, "cannot find compressor\n"); return -1; } }