This commit is contained in:
anon 2023-08-09 13:49:11 +02:00
parent a7331159b8
commit 30dd761054
11 changed files with 281 additions and 259 deletions

View File

@ -63,7 +63,6 @@ fixing it would have been a lost cause, if not for Cscope itself. Well, Csope no
+ recursive macro function to assign KEY_\* default values; look for a new and shiny preprocessor? + recursive macro function to assign KEY_\* default values; look for a new and shiny preprocessor?
+ sort out constants.h + sort out constants.h
+ scrollbar() uses magic int literals? + scrollbar() uses magic int literals?
+ Handle unused parameters gracefully (#define UNUSED(x) (void)(x))
+ Ordering function declarations in global.h by alpha order is not smart + Ordering function declarations in global.h by alpha order is not smart
+ lineflagafterfile is stupid + lineflagafterfile is stupid
+ library.h...; "private library", in a program using 90 globals; ffs + library.h...; "private library", in a program using 90 globals; ffs

View File

@ -44,3 +44,22 @@ basename(char *path)
} }
return(path); return(path);
} }
/* get the requested path components */
char *
pathcomponents(char *path, int components)
{
int i;
char *s;
s = path + strlen(path) - 1;
for (i = 0; i < components; ++i) {
while (s > path && *--s != '/') {
;
}
}
if (s > path && *s == '/') {
++s;
}
return(s);
}

View File

@ -57,7 +57,6 @@
this macro will always be in a statement by itself */ this macro will always be in a statement by itself */
#define skiprefchar() if (*(++blockp + 1) == '\0') (void) read_block() #define skiprefchar() if (*(++blockp + 1) == '\0') (void) read_block()
#define DEL '\177' /* delete character */
#define DUMMYCHAR ' ' /* use space as a dummy character */ #define DUMMYCHAR ' ' /* use space as a dummy character */
#define MSGLEN ((PATLEN) + 80) /* displayed message length */ #define MSGLEN ((PATLEN) + 80) /* displayed message length */
#define NUMLEN 10 /* line number length */ #define NUMLEN 10 /* line number length */
@ -81,8 +80,6 @@
#define TEMPSTRING_LEN_STR STRINGIZE(TEMPSTRING_LEN) #define TEMPSTRING_LEN_STR STRINGIZE(TEMPSTRING_LEN)
/* screen lines */ /* screen lines */
#define FLDLINE (LINES - FIELDS - 1 - 1) /* first input field line */
#define MSGLINE 0 /* message line */
#define PRLINE (LINES - 1) /* input prompt line */ #define PRLINE (LINES - 1) /* input prompt line */
/* input fields (value matches field order on screen) */ /* input fields (value matches field order on screen) */

View File

@ -45,13 +45,16 @@
#endif #endif
#include <ncurses.h> #include <ncurses.h>
#include <setjmp.h> /* jmp_buf */
#include <stdarg.h> /* va_list stuff */ #include <stdarg.h> /* va_list stuff */
#include <time.h> #include <time.h>
#include <errno.h> #include <errno.h>
#include <stdarg.h> #include <stdarg.h>
#include <assert.h> #include <assert.h>
/* XXX */
#define MSGLINE 0 /* message line */
#define MSGCOL 0 /* message column */
static const char appendprompt[] = "Append to file: "; static const char appendprompt[] = "Append to file: ";
static const char pipeprompt[] = "Pipe to shell command: "; static const char pipeprompt[] = "Pipe to shell command: ";
static const char readprompt[] = "Read from file: "; static const char readprompt[] = "Read from file: ";
@ -78,10 +81,12 @@ unsigned fldcolumn; /* input field column */
unsigned int curdispline = 0; unsigned int curdispline = 0;
int current_page = 0; int current_page = 0;
/* Selectable windows */
WINDOW* winput; WINDOW* winput;
WINDOW* wmode; WINDOW* wmode;
WINDOW* wresult; WINDOW* wresult;
WINDOW* whelp; WINDOW* whelp;
/* Selected window pointer */
WINDOW** current_window; WINDOW** current_window;
static WINDOW** last_window; static WINDOW** last_window;
@ -109,19 +114,16 @@ int dispchar2int(const char c){
return r; return r;
} }
static sigjmp_buf env; /* setjmp/longjmp buffer */ char lastmsg[MSGLEN + 1]; /* last message displayed */
static char lastmsg[MSGLEN + 1]; /* last message displayed */
static const char helpstring[] = "Press the ? key for help"; static const char helpstring[] = "Press the ? key for help";
static const char selprompt[] = static const char selprompt[] =
"Select lines to change (press the ? key for help): "; "Select lines to change (press the ? key for help): ";
typedef char * (*FP)(char *); /* pointer to function returning a character pointer */ struct { /* text of input fields */
static struct { /* text of input fields */
char *text1; char *text1;
char *text2; char *text2;
FP findfcn; } /* Paralel array to "field_searchers", indexed by "field" */
} fields[FIELDS + 1] = { /* samuel has a search that is not part of the cscope display */ fields[FIELDS + 1] = { /* samuel has a search that is not part of the cscope display */
{"Find this", "C symbol", findsymbol}, {"Find this", "C symbol", findsymbol},
{"Find this", "global definition", finddef}, {"Find this", "global definition", finddef},
{"Find", "functions called by this function", findcalledby}, {"Find", "functions called by this function", findcalledby},
@ -135,9 +137,6 @@ static struct { /* text of input fields */
{"Find all", "function definitions", findallfcns}, /* samuel only */ {"Find all", "function definitions", findallfcns}, /* samuel only */
}; };
/* Internal prototypes: */
static void jumpback(int sig);
/* initialize display parameters */ /* initialize display parameters */
void void
dispinit(void) dispinit(void)
@ -257,6 +256,8 @@ static inline void display_frame(){
} }
static inline void display_mode(){ static inline void display_mode(){
werase(wmode);
for(int i = 0; i < FIELDS; ++i){ for(int i = 0; i < FIELDS; ++i){
if(i == field){ if(i == field){
wattron(wmode, A_REVERSE); wattron(wmode, A_REVERSE);
@ -284,22 +285,23 @@ static inline void display_results(){
char function[PATLEN + 1]; /* function name */ char function[PATLEN + 1]; /* function name */
char linenum[NUMLEN + 1]; /* line number */ char linenum[NUMLEN + 1]; /* line number */
if (totallines == 0) { werase(wresult);
/* if no references were found */
/* redisplay the last message */ /* --- Display the message --- */
if (totallines == 0) { // Its a real message
wmove(wresult, MSGLINE, 0);
wclrtoeol(wresult);
waddstr(wresult, lastmsg); waddstr(wresult, lastmsg);
return; return;
/* NOTREACHED */
} }
if (changing == true) { // Its a pattern
snprintf(lastmsg, MSGLEN, "Change \"%s\" to \"%s\"", input_line, newpat);
/* --- Display the pattern --- */
if (changing == true) {
wprintw(wresult, "Change \"%s\" to \"%s\"", input_line, newpat);
} else { } else {
wprintw(wresult, "%c%s: %s", toupper((unsigned char)fields[field].text2[0]), snprintf(lastmsg, MSGLEN, "%c%s: %s", toupper((unsigned char)fields[field].text2[0]),
fields[field].text2 + 1, input_line); fields[field].text2 + 1, input_line);
} }
waddstr(wresult, lastmsg);
/* --- Display the column headings --- */ /* --- Display the column headings --- */
wmove(wresult, 2, 2); wmove(wresult, 2, 2);
if (ogs == true && field != FILENAME) { if (ogs == true && field != FILENAME) {
@ -527,11 +529,9 @@ display(void)
display_command_field(); display_command_field();
} }
if(window_change & CH_RESULT){ if(window_change & CH_RESULT){
werase(wresult);
display_results(); display_results();
} }
if(window_change & CH_MODE){ if(window_change & CH_MODE){
werase(wmode);
display_mode(); display_mode();
} }
@ -569,117 +569,12 @@ verswp_field(void){
window_change |= CH_INPUT | CH_MODE; window_change |= CH_INPUT | CH_MODE;
} }
/*ARGSUSED*/
static void
jumpback(int sig)
{
signal(sig, jumpback);
siglongjmp(env, 1);
}
bool
search(void)
{
char *findresult = NULL; /* find function output */
bool funcexist = true; /* find "function" error */
FINDINIT rc = falseERROR; /* findinit return code */
sighandler_t savesig; /* old value of signal */
FP f; /* searching function */
int c;
/* open the references found file for writing */
if (writerefsfound() == false) {
return(false);
}
/* find the pattern - stop on an interrupt */
if (linemode == false) {
postmsg("Searching");
}
searchcount = 0;
savesig = signal(SIGINT, jumpback);
if (sigsetjmp(env, 1) == 0) {
f = fields[field].findfcn;
if (f == findregexp || f == findstring) {
findresult = (*f)(input_line);
} else {
if ((nonglobalrefs = myfopen(temp2, "wb")) == NULL) {
cannotopen(temp2);
return(false);
}
if ((rc = findinit(input_line)) == falseERROR) {
(void) dbseek(0L); /* read the first block */
findresult = (*f)(input_line);
if (f == findcalledby)
funcexist = (*findresult == 'y');
findcleanup();
/* append the non-global references */
(void) fclose(nonglobalrefs);
if ((nonglobalrefs = myfopen(temp2, "rb"))
== NULL) {
cannotopen(temp2);
return(false);
}
while ((c = getc(nonglobalrefs)) != EOF) {
(void) putc(c, refsfound);
}
}
(void) fclose(nonglobalrefs);
}
}
signal(SIGINT, savesig);
/* rewind the cross-reference file */
(void) lseek(symrefs, (long) 0, 0);
/* reopen the references found file for reading */
(void) fclose(refsfound);
if ((refsfound = myfopen(temp1, "rb")) == NULL) {
cannotopen(temp1);
return(false);
}
nextline = 1;
totallines = 0;
disprefs = 0;
/* see if it is empty */
if ((c = getc(refsfound)) == EOF) {
if (findresult != NULL) {
(void) snprintf(lastmsg, sizeof(lastmsg), "Egrep %s in this pattern: %s",
findresult, input_line);
} else if (rc == falseTSYMBOL) {
(void) snprintf(lastmsg, sizeof(lastmsg), "This is not a C symbol: %s",
input_line);
} else if (rc == REGCMPERROR) {
(void) snprintf(lastmsg, sizeof(lastmsg), "Error in this regcomp(3) regular expression: %s",
input_line);
} else if (funcexist == false) {
(void) snprintf(lastmsg, sizeof(lastmsg), "Function definition does not exist: %s",
input_line);
} else {
(void) snprintf(lastmsg, sizeof(lastmsg), "Could not find the %s: %s",
fields[field].text2, input_line);
}
return(false);
}
/* put back the character read */
(void) ungetc(c, refsfound);
countrefs();
window_change |= CH_RESULT;
return(true);
}
/* display search progress with default custom format */ /* display search progress with default custom format */
void void
progress(char *what, long current, long max) progress(char *what, long current, long max)
{ {
static long start; static long start;
long now; long now;
char msg[MSGLEN + 1];
int i; int i;
/* save the start time */ /* save the start time */
@ -690,26 +585,26 @@ progress(char *what, long current, long max)
{ {
if (linemode == false) if (linemode == false)
{ {
wmove(wresult, MSGLINE, 0); wmove(wresult, MSGLINE, MSGCOL);
wclrtoeol(wresult); wclrtoeol(wresult);
waddstr(wresult, what); waddstr(wresult, what);
snprintf(msg, sizeof(msg), "%ld", current); snprintf(lastmsg, sizeof(lastmsg), "%ld", current);
wmove(wresult, MSGLINE, (COLS / 2) - (strlen(msg) / 2)); wmove(wresult, MSGLINE, (COLS / 2) - (strlen(lastmsg) / 2));
waddstr(wresult, msg); waddstr(wresult, lastmsg);
snprintf(msg, sizeof(msg), "%ld", max); snprintf(lastmsg, sizeof(lastmsg), "%ld", max);
wmove(wresult, MSGLINE, COLS - strlen(msg)); wmove(wresult, MSGLINE, COLS - strlen(lastmsg));
waddstr(wresult, msg); waddstr(wresult, lastmsg);
refresh(); refresh();
} }
else if (verbosemode == true) else if (verbosemode == true)
{ {
snprintf(msg, sizeof(msg), "> %s %ld of %ld", what, current, max); snprintf(lastmsg, sizeof(lastmsg), "> %s %ld of %ld", what, current, max);
} }
start = now; start = now;
if ((linemode == false) && (incurses == true)) if ((linemode == false) && (incurses == true))
{ {
wmove(wresult, MSGLINE, 0); wmove(wresult, MSGLINE, MSGCOL);
i = (float)COLS * (float)current / (float)max; i = (float)COLS * (float)current / (float)max;
standout(); standout();
@ -719,8 +614,9 @@ progress(char *what, long current, long max)
refresh(); refresh();
} }
else else
if (linemode == false || verbosemode == true) if(linemode == false || verbosemode == true){
postmsg(msg); postmsg(lastmsg);
}
} }
++searchcount; ++searchcount;
} }
@ -729,13 +625,12 @@ progress(char *what, long current, long max)
void void
myperror(char *text) myperror(char *text)
{ {
char msg[MSGLEN + 1]; /* message */
char *s; char *s;
s = strerror(errno); s = strerror(errno);
(void) snprintf(msg, sizeof(msg), "%s: %s", text, s); (void) snprintf(lastmsg, sizeof(lastmsg), "%s: %s", text, s);
postmsg(msg); postmsg(lastmsg);
} }
/* postmsg clears the message line and prints the message */ /* postmsg clears the message line and prints the message */
@ -744,24 +639,13 @@ void
postmsg(char *msg) postmsg(char *msg)
{ {
if (linemode == true || incurses == false) { if (linemode == true || incurses == false) {
(void) printf("%s\n", msg); printf("%s\n", msg);
fflush(stdout); fflush(stdout);
} }
else { else {
clearmsg(); window_change |= CH_RESULT;
waddstr(wresult, msg);
wrefresh(wresult);
} }
(void) strncpy(lastmsg, msg, sizeof(lastmsg) - 1); UNUSED(strncpy(lastmsg, msg, sizeof(lastmsg) - 1));
}
/* clearmsg clears the first message line */
void
clearmsg(void)
{
wmove(wresult, MSGLINE, 0);
wclrtoeol(wresult);
} }
/* clearmsg2 clears the second message line */ /* clearmsg2 clears the second message line */
@ -855,41 +739,3 @@ ogsnames(char *file, char **subsystem, char **book)
s = slash + 1; s = slash + 1;
} }
} }
/* get the requested path components */
char *
pathcomponents(char *path, int components)
{
int i;
char *s;
s = path + strlen(path) - 1;
for (i = 0; i < components; ++i) {
while (s > path && *--s != '/') {
;
}
}
if (s > path && *s == '/') {
++s;
}
return(s);
}
/* open the references found file for writing */
bool
writerefsfound(void)
{
if (refsfound == NULL) {
if ((refsfound = myfopen(temp1, "wb")) == NULL) {
cannotopen(temp1);
return(false);
}
} else {
(void) fclose(refsfound);
if ( (refsfound = myfopen(temp1, "wb")) == NULL) {
postmsg("Cannot reopen temporary file");
return(false);
}
}
return(true);
}

View File

@ -41,12 +41,9 @@
#include "scanner.h" /* for token definitions */ #include "scanner.h" /* for token definitions */
#include <assert.h> #include <assert.h>
#if defined(USE_NCURSES) && !defined(RENAMED_NCURSES)
#include <ncurses.h> #include <ncurses.h>
#else
#include <curses.h>
#endif
#include <regex.h> #include <regex.h>
#include <setjmp.h> /* jmp_buf */
/* most of these functions have been optimized so their innermost loops have /* most of these functions have been optimized so their innermost loops have
* only one test for the desired character by putting the char and * only one test for the desired character by putting the char and
@ -83,15 +80,49 @@ static void putpostingref(POSTING *p, char *pat);
static void putref(int seemore, char *file, char *func); static void putref(int seemore, char *file, char *func);
static void putsource(int seemore, FILE *output); static void putsource(int seemore, FILE *output);
/* find the symbol in the cross-reference */ static sigjmp_buf env; /* setjmp/longjmp buffer */
typedef char * (*FP)(char *); /* pointer to function returning a character pointer */
/* Paralel array to "fields", indexed by "field" */
FP field_searchers[FIELDS + 1] = {
findsymbol,
finddef,
findcalledby,
findcalling,
findstring,
findstring,
findregexp,
findfile,
findinclude,
findassign,
findallfcns /* samuel only */
};
/**/
struct TI {
char *text1;
char *text2;
};
extern struct TI fields[FIELDS + 1];
/* Internal prototypes: */
static void jumpback(int sig);
static void
jumpback(int sig)
{
signal(sig, jumpback);
siglongjmp(env, 1);
}
/* find the symbol in the cross-reference */
char * char *
findsymbol(char *pattern) findsymbol(char *pattern)
{ {
return find_symbol_or_assignment(pattern, false); return find_symbol_or_assignment(pattern, false);
} }
/* find the symbol in the cross-reference, and look for assignments */ /* find the symbol in the cross-reference, and look for assignments */
char * char *
findassign(char *pattern) findassign(char *pattern)
{ {
@ -1299,3 +1330,121 @@ findcalledbysub(char *file, bool macro)
} }
} }
} }
/* open the references found file for writing */
bool
writerefsfound(void)
{
if (refsfound == NULL) {
if ((refsfound = myfopen(temp1, "wb")) == NULL) {
cannotopen(temp1);
return(false);
}
} else {
(void) fclose(refsfound);
if ( (refsfound = myfopen(temp1, "wb")) == NULL) {
postmsg("Cannot reopen temporary file");
return(false);
}
}
return(true);
}
/* Perform token search based on "field" */
bool
search(void)
{
char msg[MSGLEN+1];
char *findresult = NULL; /* find function output */
bool funcexist = true; /* find "function" error */
FINDINIT rc = falseERROR; /* findinit return code */
sighandler_t savesig; /* old value of signal */
FP f; /* searching function */
int c;
/* open the references found file for writing */
if (writerefsfound() == false) {
return(false);
}
/* find the pattern - stop on an interrupt */
if (linemode == false) {
postmsg("Searching");
}
searchcount = 0;
savesig = signal(SIGINT, jumpback);
if (sigsetjmp(env, 1) == 0) {
f = field_searchers[field];
if (f == findregexp || f == findstring) {
findresult = (*f)(input_line);
} else {
if ((nonglobalrefs = myfopen(temp2, "wb")) == NULL) {
cannotopen(temp2);
return(false);
}
if ((rc = findinit(input_line)) == falseERROR) {
(void) dbseek(0L); /* read the first block */
findresult = (*f)(input_line);
if (f == findcalledby)
funcexist = (*findresult == 'y');
findcleanup();
/* append the non-global references */
(void) fclose(nonglobalrefs);
if ((nonglobalrefs = myfopen(temp2, "rb"))
== NULL) {
cannotopen(temp2);
return(false);
}
while ((c = getc(nonglobalrefs)) != EOF) {
(void) putc(c, refsfound);
}
}
(void) fclose(nonglobalrefs);
}
}
signal(SIGINT, savesig);
/* rewind the cross-reference file */
(void) lseek(symrefs, (long) 0, 0);
/* reopen the references found file for reading */
(void) fclose(refsfound);
if ((refsfound = myfopen(temp1, "rb")) == NULL) {
cannotopen(temp1);
return(false);
}
nextline = 1;
totallines = 0;
disprefs = 0;
/* see if it is empty */
if ((c = getc(refsfound)) == EOF) {
if (findresult != NULL) {
(void) snprintf(msg, sizeof(msg), "Egrep %s in this pattern: %s",
findresult, input_line);
} else if (rc == falseTSYMBOL) {
(void) snprintf(msg, sizeof(msg), "This is not a C symbol: %s",
input_line);
} else if (rc == REGCMPERROR) {
(void) snprintf(msg, sizeof(msg), "Error in this regcomp(3) regular expression: %s",
input_line);
} else if (funcexist == false) {
(void) snprintf(msg, sizeof(msg), "Function definition does not exist: %s",
input_line);
} else {
(void) snprintf(msg, sizeof(msg), "Could not find the %s: %s",
fields[field].text2, input_line);
}
postmsg(msg);
return(false);
}
/* put back the character read */
(void) ungetc(c, refsfound);
countrefs();
window_change |= CH_RESULT;
return(true);
}

View File

@ -38,6 +38,8 @@
#ifndef CSCOPE_GLOBAL_H #ifndef CSCOPE_GLOBAL_H
#define CSCOPE_GLOBAL_H #define CSCOPE_GLOBAL_H
#define UNUSED(x) (void)(x)
//#include "config.h" //#include "config.h"
#include <unistd.h> #include <unistd.h>
#include <sys/types.h> #include <sys/types.h>
@ -246,6 +248,7 @@ void horswp_field(void);
bool interpret(int c); // XXX: probably rename bool interpret(int c); // XXX: probably rename
int handle_input(const int c); int handle_input(const int c);
int dispchar2int(const char c); int dispchar2int(const char c);
int process_mouse();
long seekpage(size_t i); long seekpage(size_t i);
long seekrelline(unsigned i); long seekrelline(unsigned i);

View File

@ -59,6 +59,8 @@ static void catchint(int sig);
static void static void
catchint(int sig) catchint(int sig)
{ {
UNUSED(sig);
signal(SIGINT, catchint); signal(SIGINT, catchint);
longjmp(env, 1); longjmp(env, 1);
} }

View File

@ -45,9 +45,13 @@
# define KEY_RESIZE KEY_UNDEF_BASE-11 # define KEY_RESIZE KEY_UNDEF_BASE-11
#endif #endif
/* Always define ESC */ /* Always define these keys */
#ifndef ESC #ifndef ESC
# define ESC '\033' /* escape character */ # define ESC '\033' /* escape character */
#endif #endif
#ifndef DEL
# define DEL '\177' /* delete character */
#endif
#endif /* KEYS_H*/ #endif /* KEYS_H*/

View File

@ -112,6 +112,10 @@ static inline void screenmode_event_loop(void);
void void
sigwinch_handler(int sig, siginfo_t *info, void *unused) sigwinch_handler(int sig, siginfo_t *info, void *unused)
{ {
UNUSED(sig);
UNUSED(info);
UNUSED(unused);
if(incurses == true){ if(incurses == true){
ungetch(KEY_RESIZE); ungetch(KEY_RESIZE);
} }
@ -438,7 +442,7 @@ main(int argc, char **argv)
if (linemode == false) { if (linemode == false) {
dispinit(); /* initialize display parameters */ dispinit(); /* initialize display parameters */
clearmsg(); /* clear any build progress message */ postmsg(""); /* clear any build progress message */
display(); /* display the version number and input fields */ display(); /* display the version number and input fields */
} }
@ -604,7 +608,7 @@ main(int argc, char **argv)
} }
build(); build();
if (linemode == false ) { if (linemode == false ) {
clearmsg(); /* clear any build progress message */ postmsg(""); /* clear any build progress message */
} }
if (buildonly == true) { if (buildonly == true) {
myexit(0); myexit(0);

View File

@ -35,6 +35,10 @@
* mouse functions * mouse functions
*/ */
extern int LINES;
#define FLDLINE (LINES - FIELDS - 1 - 1) /* first input field line */
#include "global.h" #include "global.h"
bool mouse = false; /* mouse interface */ bool mouse = false; /* mouse interface */
@ -429,3 +433,43 @@ getpercent(void)
} }
return(c - 16); return(c - 16);
} }
int process_mouse(){
int i;
MOUSE* p;
if ((p = getmouseaction(DUMMYCHAR)) == NULL) {
return(false); /* unknown control sequence */
}
/* if the button number is a scrollbar tag */
if (p->button == '0') {
//scrollbar(p); // XXX
return(false);
}
/* ignore a sweep */
if (p->x2 >= 0) {
return(false);
}
/* if this is a line selection */
if (p->y1 > FLDLINE) {
/* find the selected line */
/* note: the selection is forced into range */
for (i = disprefs - 1; i > 0; --i) {
if (p->y1 >= displine[i]) {
return(false);
}
}
/* display it in the file with the editor */
editref(i);
} else { /* this is an input field selection */
field = p->y1 - FLDLINE;
/* force it into range */
if (field >= FIELDS) {
field = FIELDS - 1;
}
resetcmd();
return(false);
}
return false;
}

View File

@ -4,23 +4,21 @@
#include "build.h" #include "build.h"
#include <ncurses.h> #include <ncurses.h>
extern int LINES; // XXX
static int input_available = 0; static int input_available = 0;
static char input_char; static char input_char;
char input_line[PATLEN + 1]; char input_line[PATLEN + 1];
bool do_terminate = false;
bool interpret(int c){ bool interpret(int c){
input_char = c; input_char = c;
input_available = 1; input_available = 1;
rl_callback_read_char(); rl_callback_read_char();
return do_terminate; return 0;
} }
static int getc_function(FILE* ignore){ static int getc_function(FILE* ignore){
UNUSED(ignore);
input_available = 0; input_available = 0;
return (int)input_char; return (int)input_char;
} }
@ -37,18 +35,15 @@ static void callback_handler(char* line){
if(!line){ return; } if(!line){ return; }
strncpy(input_line, line, PATLEN); strncpy(input_line, line, PATLEN);
search(); if(!search()){
}
curdispline = 0; curdispline = 0;
PCS_reset(); PCS_reset();
current_page = 0; current_page = 0;
} }
static int interpret_break(){
do_terminate = true;
return 0;
}
static int ctrl_z(){ static int ctrl_z(){
kill(0, SIGTSTP); kill(0, SIGTSTP);
return 0; return 0;
@ -80,53 +75,13 @@ static int rebuild_reference(){
askforreturn(); askforreturn();
} }
entercurses(); entercurses();
clearmsg(); /* clear any previous message */ postmsg(""); /* clear any previous message */
totallines = 0; totallines = 0;
disprefs = 0; disprefs = 0;
topline = nextline = 1; topline = nextline = 1;
return(true); return(true);
} }
static int process_mouse(){
int i;
MOUSE* p;
if ((p = getmouseaction(DUMMYCHAR)) == NULL) {
return(false); /* unknown control sequence */
}
/* if the button number is a scrollbar tag */
if (p->button == '0') {
//scrollbar(p); // XXX
return(false);
}
/* ignore a sweep */
if (p->x2 >= 0) {
return(false);
}
/* if this is a line selection */
if (p->y1 > FLDLINE) {
/* find the selected line */
/* note: the selection is forced into range */
for (i = disprefs - 1; i > 0; --i) {
if (p->y1 >= displine[i]) {
return(false);
}
}
/* display it in the file with the editor */
editref(i);
} else { /* this is an input field selection */
field = p->y1 - FLDLINE;
/* force it into range */
if (field >= FIELDS) {
field = FIELDS - 1;
}
resetcmd();
return(false);
}
return false;
}
void rlinit(){ void rlinit(){
rl_catch_signals = 0; rl_catch_signals = 0;
rl_catch_sigwinch = 0; rl_catch_sigwinch = 0;