This is help.c in view mode; [Download] [Up]
/* Help system
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 "tty.h"
#include "b.h"
#include "termcap.h"
#include "kbd.h"
#include "scrn.h"
#include "w.h"
#include "vs.h"
#include "menu.h"
#include "zstr.h"
#include "tw.h"
#include "blocks.h"
#include "help.h"
/* The loaded help screen */
char *hlptxt=0;
int hlpsiz=0;
int hlpbsz=0;
int hlplns=0;
char **help_names;
struct help **help_structs;
struct help *first_help;
int helpcursor=0;
int get_help(name)
char *name;
{
int x;
for(x=0;help_structs[x];++x) if(!zcmp(help_structs[x]->name,name)) break;
if(help_structs[x]) return x;
else return -1;
}
/* Display help text */
void dsphlp(t)
SCREEN *t;
{
char *str=hlptxt;
int y,x,c;
int atr=0;
for(y=skiptop;y!=t->wind;++y)
{
if(t->t->updtab[y])
{
for(x=0;x!=t->w-1;++x)
if(*str=='\n' || !*str)
if(eraeol(t->t,x,y)) return;
else break;
else
{
if(*str=='\\')
switch(*++str)
{
case 'i': case 'I': atr^=INVERSE; ++str; --x; goto cont;
case 'u': case 'U': atr^=UNDERLINE; ++str; --x; goto cont;
case 'd': case 'D': atr^=DIM; ++str; --x; goto cont;
case 'b': case 'B': atr^=BOLD; ++str; --x; goto cont;
case 'f': case 'F': atr^=BLINK; ++str; --x; goto cont;
case 0: --x; goto cont;
default: c=(unsigned char)*str++;
}
else c= (unsigned char)*str++;
outatr(t->t,t->t->scrn+x+y*t->w,x,y,c,atr);
cont:;
}
atr=0; t->t->updtab[y]=0;
}
while(*str && *str!='\n') ++str;
if(*str=='\n') ++str;
}
}
/* Create the help window */
int helpon(t)
SCREEN *t;
{
struct help *h=help_structs[helpcursor];
hlptxt=h->hlptxt;
hlpsiz=h->hlpsiz;
hlpbsz=h->hlpbsz;
hlplns=h->hlplns;
if(!hlptxt) return -1;
t->wind=hlplns+skiptop;
if(t->h-t->wind<FITHEIGHT) t->wind=t->h-FITHEIGHT;
if(t->wind<0)
{
t->wind=skiptop;
return -1;
}
wfit(t);
msetI(t->t->updtab+skiptop,1,t->wind);
return 0;
}
/* Eliminate the help window */
void helpoff(t)
SCREEN *t;
{
int z=t->wind;
t->wind=skiptop;
wfit(t);
}
/* Toggle help on/off */
int uhelp(base)
BASE *base;
{
W *w=base->parent;
int h;
if(w->huh && (h=get_help(w->huh))>-1)
{
if(w->t->wind!=skiptop) helpoff(w->t);
helpcursor=h;
return helpon(w->t);
}
else if(w->t->wind==skiptop)
return helpon(w->t);
else
{
helpoff(w->t);
return 0;
}
}
/* Goto next/prev help screen */
int uhnext(base)
BASE *base;
{
W *w=base->parent;
if(help_structs[helpcursor+1])
{
if(w->t->wind!=skiptop) helpoff(w->t);
++helpcursor;
return helpon(w->t);
}
else return -1;
}
int uhprev(base)
BASE *base;
{
W *w=base->parent;
if(helpcursor)
{
if(w->t->wind!=skiptop) helpoff(w->t);
--helpcursor;
return helpon(w->t);
}
else return -1;
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.