/* Opens new bw with startup log */ int ushowlog(BW *bw) { if (startup_log) { B *copied; BW *newbw; void *object; W *w; if (uduptw(bw)) { return -1; } copied = bcpy(startup_log->bof, startup_log->eof); copied->name = zdup(USTR "* Startup Log *"); copied->internal = 1; newbw = (BW *) maint->curwin->object; object = newbw->object; w = newbw->parent; bwrm(newbw); w->object = (void *) (newbw = bwmk(w, copied, 0)); wredraw(newbw->parent); newbw->object = object; return 0; } return 1; }
static int rtnpw(BW *bw) { W *w = bw->parent; PW *pw = (PW *) bw->object; unsigned char *s; W *win; int *notify; int (*pfunc) (); void *object; long byte; /* Extract entered text from buffer */ p_goto_eol(bw->cursor); byte = bw->cursor->byte; p_goto_bol(bw->cursor); s = brvs(bw->cursor, (int) (byte - bw->cursor->byte)); /* Save text into history buffer */ if (pw->hist) { if (bw->b->changed) { append_history(pw->hist, sv(s)); } else { promote_history(pw->hist, bw->cursor->line); } } /* Do ~ expansion and set new current directory */ if (pw->file_prompt&2) { set_current_dir(s,1); } if (pw->file_prompt) { s = canonical(s); } win = w->win; pfunc = pw->pfunc; object = pw->object; bwrm(bw); joe_free(pw->prompt); joe_free(pw); w->object = NULL; notify = w->notify; w->notify = 0; wabort(w); dostaupd = 1; /* Call callback function */ if (pfunc) { return pfunc(win->object, s, object, notify); } else { return -1; } }
static int abortpw(BW *b) { PW *pw = b->object; void *object = pw->object; int (*abrt) () = pw->abrt; W *win = b->parent->win; bwrm(b); joe_free(pw->prompt); joe_free(pw); if (abrt) { return abrt(win->object, object); } else { return -1; } }