This is qw.c in view mode; [Download] [Up]
/* Query windows Copyright (C) 1992 Joseph H. Allen This file is part of JOE (Joe's Own Editor) JOE is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. JOE is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with JOE; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #include "w.h" #include "zstr.h" #include "vs.h" #include "qw.h" static void dispqw(qw) QW *qw; { W *w=qw->parent; /* Scroll buffer and position prompt */ if(qw->promptlen>w->w/2+w->w/4) qw->promptofst=qw->promptlen-w->w/2; else qw->promptofst=0; /* Set cursor position */ w->curx=qw->promptlen-qw->promptofst; w->cury=0; /* Generate prompt */ w->t->t->updtab[w->y]=1; gentxt(w->t->t,w->x,w->y,qw->promptofst,qw->prompt,qw->promptlen,1); } static void dispqwn(qw) QW *qw; { W *w=qw->parent; /* Scroll buffer and position prompt */ if(qw->promptlen>w->w/2+w->w/4) qw->promptofst=qw->promptlen-w->w/2; else qw->promptofst=0; /* Set cursor position */ if(w->win->watom->follow && w->win->object) w->win->watom->follow(w->win->object); if(w->win->watom->disp && w->win->object) w->win->watom->disp(w->win->object); w->curx=w->win->curx; w->cury=w->win->cury+w->win->y-w->y; /* Generate prompt */ w->t->t->updtab[w->y]=1; gentxt(w->t->t,w->x,w->y,qw->promptofst,qw->prompt,qw->promptlen,1); } /* When user hits a key in a query window */ int utypeqw(qw,c) QW *qw; { W *win; W *w=qw->parent; int *notify=w->notify; int (*func)(); void *object=qw->object; win=qw->parent->win; func=qw->func; vsrm(qw->prompt); free(qw); w->object=0; w->notify=0; wabort(w); if(func) return func(win->object,c,object,notify); return -1; } static int abortqw(qw) QW *qw; { W *win=qw->parent->win; void *object=qw->object; int (*abrt)()=qw->abrt; vsrm(qw->prompt); free(qw); if(abrt) return abrt(win->object,object); else return -1; } static WATOM watomqw= { "query", dispqw, 0, abortqw, 0, utypeqw, 0, 0, 0, 0, TYPEQW }; static WATOM watqwn= { "querya", dispqwn, 0, abortqw, 0, utypeqw, 0, 0, 0, 0, TYPEQW }; static WATOM watqwsr= { "querysr", dispqwn, 0, abortqw, 0, utypeqw, 0, 0, 0, 0, TYPEQW }; /* Create a query window */ QW *mkqw(obw,prompt,len,func,abrt,object,notify) BASE *obw; char *prompt; int (*func)(); int (*abrt)(); void *object; int *notify; { W *new; QW *qw; W *w=obw->parent; new=wcreate(w->t,&watomqw,w,w,w->main,1,NULL,notify); if(!new) { if(notify) *notify=1; return 0; } wfit(new->t); new->object=(void *)(qw=(QW *)malloc(sizeof(QW))); qw->parent=new; qw->prompt=vsncpy(NULL,0,prompt,len); qw->promptlen=len; qw->promptofst=0; qw->func=func; qw->abrt=abrt; qw->object=object; w->t->curwin=new; return qw; } /* Same as above, but cursor is left in original window */ /* For Ctrl-Meta thing */ QW *mkqwna(obw,prompt,len,func,abrt,object,notify) BASE *obw; char *prompt; int (*func)(); int (*abrt)(); void *object; int *notify; { W *new; QW *qw; W *w=obw->parent; new=wcreate(w->t,&watqwn,w,w,w->main,1,NULL,notify); if(!new) { if(notify) *notify=1; return 0; } wfit(new->t); new->object=(void *)(qw=(QW *)malloc(sizeof(QW))); qw->parent=new; qw->prompt=vsncpy(NULL,0,prompt,len); qw->promptlen=len; qw->promptofst=0; qw->func=func; qw->abrt=abrt; qw->object=object; w->t->curwin=new; return qw; } /* Same as above, but cursor is left in original window */ /* For search and replace thing */ QW *mkqwnsr(obw,prompt,len,func,abrt,object,notify) BASE *obw; char *prompt; int (*func)(); int (*abrt)(); void *object; int *notify; { W *new; QW *qw; W *w=obw->parent; new=wcreate(w->t,&watqwsr,w,w,w->main,1,NULL,notify); if(!new) { if(notify) *notify=1; return 0; } wfit(new->t); new->object=(void *)(qw=(QW *)malloc(sizeof(QW))); qw->parent=new; qw->prompt=vsncpy(NULL,0,prompt,len); qw->promptlen=len; qw->promptofst=0; qw->func=func; qw->abrt=abrt; qw->object=object; w->t->curwin=new; return qw; }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.