This is terminfo.c in view mode; [Download] [Up]
/* TERMINFO database interface 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 "termcap.h" #include "vs.h" int dopadding=0; extern char *tgoto(); extern char *tgetstr(); /* Get terminfo entry */ CAP *setcap(cap,baud,out,outptr) CAP *cap; unsigned baud; void (*out)(); void *outptr; { cap->baud=baud; cap->div=100000/baud; cap->out=out; cap->outptr=outptr; return cap; } CAP *getcap(name,baud,out,outptr) char *name; int baud; void (*out)(); void *outptr; { CAP *cap; if(NULL==name && NULL==(name=getenv("TERM"))) return NULL; cap=(CAP *)malloc(sizeof(CAP)); cap->tbuf=(char *)malloc(4096); cap->abuf=(char *)malloc(4096); cap->abufp=cap->abuf; if(tgetent(cap->tbuf,name)!=1) { free(cap->tbuf); free(cap->abuf); return NULL; } return setcap(cap,baud,out,outptr); } /* Get string capability */ /* Warning, repeated calls to this will eventually use up all of cap->abuf */ char *jgetstr(cap,name) CAP *cap; char *name; { return tgetstr(name,&cap->abufp); } /* Get flag capability */ int getflag(cap,name) CAP *cap; char *name; { return tgetflag(name); } /* Get numeric capability */ int getnum(cap,name) CAP *cap; char *name; { return tgetnum(name); } /* Eliminate a CAP */ void rmcap(cap) CAP *cap; { free(cap->tbuf); free(cap->abuf); free(cap); } /* Execute a string capability */ static CAP *outcap; static int outout(c) { outcap->out(outcap->outptr,c); } void texec(cap,str,l,a0,a1,a2,a3) CAP *cap; char *str; int l,a0,a1,a2,a3; { char *a; if(!str) return; outcap=cap; a=tgoto(str,a1,a0); tputs(a,l,outout); } static int total; static void cst() { ++total; } int tcost(cap,s,l,a0,a1,a2,a3) CAP *cap; char *s; int l,a0,a1,a2,a3; { void (*out)()=cap->out; if(NULL==s) return 10000; total=0; cap->out=cst; texec(cap,s,l,a0,a1,a2,a3); cap->out=out; return total; } static char *ssp; static void cpl(ptr,c) char *ptr; char c; { ssp=vsadd(ssp,c); } char *tcompile(cap,s,a0,a1,a2,a3) CAP *cap; char *s; int a0,a1,a2,a3; { void (*out)()=cap->out; int div=cap->div; if(NULL==s) return NULL; cap->out=cpl; cap->div=10000; ssp=vsmk(10); texec(cap,s,0,a0,a1,a2,a3); cap->out=out; cap->div=div; return ssp; }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.