v14i067: Jove, an emacs variant, version 4.9, Part11/21
Rich Salz
rsalz at bbn.com
Thu Apr 28 10:51:55 AEST 1988
Submitted-by: Jonathan Payne <jpayne at cs.rochester.edu>
Posting-number: Volume 14, Issue 67
Archive-name: jove4.9/part11
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 11 (of 21)."
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f './externs.h' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'./externs.h'\"
else
echo shar: Extracting \"'./externs.h'\" \(21599 characters\)
sed "s/^X//" >'./externs.h' <<'END_OF_FILE'
X/***************************************************************************
X * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne. JOVE *
X * is provided to you without charge, and with no warranty. You may give *
X * away copies of JOVE, including sources, provided that this notice is *
X * included in all the files. *
X ***************************************************************************/
X
X#ifdef TXT_TO_C
X#define STDIO
X#endif
X#ifdef LINT_ARGS
extern int
X abs(int);
X
extern void
X exit(int),
X _exit(int),
X *calloc(unsigned int, unsigned int),
X#ifndef MAC
X free(void *), /* returns an int on a Mac */
X#endif
X *malloc(unsigned int),
X *realloc(void *, unsigned int);
X
extern char
X *getenv(char *),
X *tgoto(char *, int, int);
X
extern char
X **scanvec(char * *args,char *str),
X *IOerr(char *err,char *file),
X *MakeName(char *command),
X *StrIndex(int dir,char *buf,int charpos,char what),
X *ask(char *, char *, ...),
X *ask_buf(struct buffer *def),
X *ask_file(char *prmt,char *def,char *buf),
X *basename(char *f),
X *copystr(char *str),
X *do_ask(char *, int (*)(), char *, char *, ...),
X *emalloc(int size),
X *filename(struct buffer *b),
X *get_time(long *timep,char *buf,int from,int to),
X *getsearch(void),
X *itoa(int num),
X *lbptr(struct line *line),
X *lcontents(struct line *line),
X *ltobuf(struct line *line,char *buf),
X *pr_name(char *fname,int okay_home),
X *ralloc(char *obj,int size),
X *sprint(char *, ...),
X switchar(void);
X
extern int
X BufSwrite(int linenum),
X FLine(struct window *w),
X LineDist(struct line *nextp,struct line *endp),
X LookingAt(char *pattern,char *buf,int offset),
X ModBufs(int allp),
X ModMacs(void),
X Peekc(void),
X TwoBlank(void),
X UnixToBuf(char *,int ,int ,int , ...),
X addgetc(void),
X alphacomp(char * *a,char * *b),
X arg_type(void),
X arg_value(void),
X ask_int(char *prompt,int base),
X aux_complete(int c),
X blnkp(char *buf),
X calc_pos(char *lp,int c_char),
X casecmp(char *s1,char *s2),
X casencmp(char *s1,char *s2,int n),
X charp(void),
X chr_to_int(char *cp,int base,int allints, int *result),
X complete(char * *possible,char *prompt,int flags),
X do_if(char *cmd),
X dosputc(char c),
X f_getint(struct File *fp),
X f_gets(struct File *fp,char *buf,int max),
X f_match(char *file),
X filbuf(struct File *fp),
X find_pos(struct line *line,int c_char),
X fixorder(struct line * *line1,int *char1,struct line * *line2,int *char2),
X _flush(int c,struct File *fp),
X getch(void),
X getchar(void),
X getrawinchar(void),
X how_far(struct line *line,int col),
X i_blank(struct line *lp),
X i_bsblank(struct line *lp),
X in_window(struct window *windes,struct line *line),
X inlist(struct line *first,struct line *what),
X in_macro(void),
X inorder(struct line *nextp,int char1,struct line *endp,int char2),
X is_an_arg(void),
X ismword(int c),
X joverc(char *file),
X length(struct line *line),
X look_at(char *expr),
X#ifdef IBMPC
X lower(char *c),
X#endif
X mac_getc(void),
X match(char * *choices,char *what),
X max(int a,int b),
X min(int a,int b),
X numcomp(char *s1,char *s2),
X pnt_line(void),
X rawkey_ready(void),
X re_lindex(struct line *line,int offset,char *expr,char * *alts,int lbuf_okay),
X scandir(char *dir,char * * *nmptr,int (*qualify)(),int (*sorter)()),
X sindex(char *pattern,char *string),
X swrite(char *line,int inversep,int abortable),
X unbind_aux(int c),
X waitchar(int *slow),
X yes_or_no_p(char *, ...);
X
extern disk_line
X f_getputl(struct line *line,struct File *fp),
X putline(char *buf);
X
extern struct File
X *f_open(char *name,int flags,char *buffer,int buf_size),
X *fd_open(char *name,int flags,int fd,char *buffer,int bsize),
X *open_file(char *fname,char *buf,int how,int ifbad,int loudness);
X
extern struct buffer
X *buf_exists(char *name),
X *do_find(struct window *w,char *fname,int force),
X *do_select(struct window *w,char *name),
X *file_exists(char *name),
X *getNMbuf(void);
X
extern struct cmd
X *FindCmd(void (*proc)());
extern struct data_obj
X **IsPrefix(struct data_obj *cp),
X *findcom(char *prompt),
X *findmac(char *prompt),
X *findvar(char *prompt);
X
extern struct line
X *lastline(struct line *lp),
X *listput(struct buffer *buf,struct line *after),
X *max_line(struct line *l1,struct line *l2),
X *min_line(struct line *l1,struct line *l2),
X *nbufline(void),
X *next_line(struct line *line,int num),
X *prev_line(struct line *line,int num),
X *reg_delete(struct line *line1,int char1,struct line *line2,int char2);
X
extern struct m_thread
X *alloc_mthread(void);
X
extern struct mark
X *CurMark(void),
X *MakeMark(struct line *line,int column,int type);
X
extern struct position
X *DoYank(struct line *fline,int fchar,struct line *tline,int tchar,struct line *atline,int atchar,struct buffer *whatbuf),
X *c_indent(int incrmt),
X *docompiled(int dir,char *expr,char * *alts),
X *dosearch(char *pattern,int dir,int re),
X *lisp_indent(void),
X *m_paren(char p_type,int dir,int can_mismatch,int can_stop);
X
extern struct table
X *make_table(void);
X
extern struct window
X *div_wind(struct window *wp,int n),
X *w_nam_typ(char *name,int type),
X *windbp(struct buffer *bp);
X
extern struct word
X *word_in_table(char *text,struct table *table);
X
extern unsigned char
X chpl(void),
X lpp(void);
X
extern void
X AbbrevExpand(void),
X AddSpecial(void),
X AllMarkSet(struct buffer *b,struct line *line,int col),
X AppReg(void),
X Apropos(void),
X BList(void),
X BSexpr(void),
X BUpList(void),
X BackChar(void),
X BackPara(void),
X BackWord(void),
X BindAKey(void),
X BindMac(void),
X BindMtoW(void),
X BindSomething(struct data_obj *(*proc)()),
X BindWMap(struct data_obj * *map,int lastkey,struct data_obj *cmd),
X Bof(void),
X Bol(void),
X Bos(void),
X Bow(void),
X Buf10Select(void),
X Buf1Select(void),
X Buf2Select(void),
X Buf3Select(void),
X Buf4Select(void),
X Buf5Select(void),
X Buf6Select(void),
X Buf7Select(void),
X Buf8Select(void),
X Buf9Select(void),
X BufErase(void),
X BufKill(void),
X BufList(void),
X BufPos(void),
X BufSelect(void),
X CAutoExec(void),
X CalcWind(struct window *w),
X CapChar(void),
X CapWord(void),
X CasRegLower(void),
X CasRegUpper(void),
X CaseReg(int up),
X CentWind(struct window *w),
X ChkWindows(struct line *line1,struct line *line2),
X ChrToOct(void),
X ClAndRedraw(void),
X Comment(void),
X CopyRegion(void),
X CtlxPrefix(void),
X DFixMarks(struct line *line1,int char1,struct line *line2,int char2),
X DOTsave(struct position *buf),
X DefAutoExec(struct data_obj *(*proc)()),
X DefGAbbrev(void),
X DefKBDMac(void),
X DefMAbbrev(void),
X DelBlnkLines(void),
X DelCurWindow(void),
X DelMacro(void),
X DelMark(struct mark *m),
X DelNChar(void),
X DelNWord(void),
X DelPChar(void),
X DelPWord(void),
X DelReg(void),
X DelWtSpace(void),
X DescBindings(void),
X DescCom(void),
X DescMap(struct data_obj * *map,char *pref),
X DescWMap(struct data_obj * *map,int key),
X Digit(void),
X Digit0(void),
X Digit1(void),
X Digit2(void),
X Digit3(void),
X Digit4(void),
X Digit5(void),
X Digit6(void),
X Digit7(void),
X Digit8(void),
X Digit9(void),
X DoAutoExec(char *new,char *old),
X DoJustify(struct line *l1,int c1,struct line *l2,int c2,int scrunch,int indent),
X DoKeys(int nocmdline),
X DoNewline(int indentp),
X DoPara(int dir),
X DoParen(void),
X DoWriteReg(int app),
X DotTo(struct line *line,int col),
X DownScroll(void),
X DrawMesg(int abortable),
X EditAbbrevs(void),
X Eof(void),
X Eol(void),
X Eos(void),
X Eow(void),
X ErrFree(void),
X ErrParse(void),
X EscPrefix(void),
X ExecCmd(struct data_obj *cp),
X ExecMacro(void),
X Extend(void),
X FDotTag(void),
X FDownList(void),
X FList(void),
X FSexpr(void),
X FSrchND(void),
X FillComment(char *format),
X FilterRegion(void),
X FindFile(void),
X FindTag(void),
X ForChar(void),
X ForPara(void),
X ForSearch(void),
X ForWord(void),
X Forget(void),
X GCchunks(void),
X GSexpr(void),
X GoLine(void),
X GotoWind(void),
X GrowWindow(void),
X HandlePref(struct data_obj * *map),
X IFixMarks(struct line *line1,int char1,struct line *line2,int char2),
X IncFSearch(void),
X IncRSearch(void),
X InitCM(void),
X InsFile(void),
X Insert(int c),
X Justify(void),
X KeyDesc(void),
X KillBos(void),
X KillEOL(void),
X KillEos(void),
X KillExpr(void),
X KillSome(void),
X Leave(void),
X LineAI(void),
X LineInsert(int num),
X LowWord(void),
X MAutoExec(void),
X MacInter(void),
X MakeErrors(void),
X MarkSet(struct mark *m,struct line *line,int column),
X MiscPrefix(void),
X NameMac(void),
X Newline(void),
X NextError(void),
X NextLine(void),
X NextPage(void),
X NextWindow(void),
X NotModified(void),
X OneWindow(void),
X OpenLine(void),
X PageNWind(void),
X PageScrollDown(void),
X PageScrollUp(void),
X ParseAll(void),
X PathParse(char *name,char *intobuf),
X Placur(int line,int col),
X PopMark(void),
X PrVar(void),
X PrevError(void),
X PrevLine(void),
X PrevPage(void),
X PrevWindow(void),
X PtToMark(void),
X Push(void),
X PushPntp(struct line *line),
X QRepSearch(void),
X QuotChar(void),
X REcompile(char *pattern,int re,char *into_buf,char * *alt_bufp),
X RErecur(void),
X RSrchND(void),
X ReNamBuf(void),
X ReadFile(void),
X Recur(void),
X RedrawDisplay(void),
X RegJustify(void),
X RegReplace(void),
X RegToUnix(struct buffer *outbuf,char *cmd),
X Remember(void),
X RepSearch(void),
X ResetTerm(void),
X RestAbbrevs(void),
X RevSearch(void),
X RunMacro(void),
X SO_off(void),
X SO_on(void),
X SaveAbbrevs(void),
X SaveFile(void),
X SelfInsert(void),
X SetABuf(struct buffer *b),
X SetBuf(struct buffer *newbuf),
X SetDot(struct position *bp),
X SetLMargin(void),
X SetMark(void),
X SetRMargin(void),
X SetTop(struct window *w,struct line *line),
X SetVar(void),
X SetWind(struct window *new),
X ShToBuf(void),
X ShellCom(void),
X ShowErr(void),
X ShowVersion(void),
X ShrWindow(void),
X SitFor(unsigned int delay),
X Source(void),
X SplitWind(void),
X StrLength(void),
X SyncTmp(void),
X TOstart(char *name,int auto_newline),
X TOstop(void),
X Tab(void),
X TimesFour(void),
X ToError(int forward),
X ToFirst(void),
X ToIndent(void),
X ToLast(void),
X ToMark(struct mark *m),
X TogMinor(int bit),
X TransChar(void),
X TransLines(void),
X Typeout(char *, ...),
X UNIX_cmdline(int argc,char * *argv),
X UnbindC(void),
X Ungetc(int c),
X UnsetTerm(char *),
X UpScroll(void),
X UppWord(void),
X WNumLines(void),
X WVisSpace(void),
X WindFind(void),
X WindSize(struct window *w,int inc),
X WriteFile(void),
X WriteMacs(void),
X WrtReg(void),
X WtModBuf(void),
X XParse(void),
X Yank(void),
X YankPop(void),
X add_mess(char *, ...),
X add_stroke(int c),
X add_word(char *wname,struct table *table),
X b_char(int n),
X b_word(int num),
X bufname(struct buffer *b),
X case_reg(struct line *line1,int char1,struct line *line2,int char2,int up),
X case_word(int up),
X cl_eol(void),
X cl_scr(int doit),
X close_file(struct File *fp),
X clr_arg_value(void),
X clrline(char *cp1,char *cp2),
X complain(char *, ...),
X confirm(char *, ...),
X d_cache_init(void),
X del_char(int dir,int num),
X del_wind(struct window *wp),
X dispatch(int c),
X do_macro(struct macro *mac),
X do_rfill(int ulm),
X do_set_mark(struct line *l,int c),
X do_sgtty(void),
X do_space(void),
X dobell(int x),
X dofread(struct File *fp),
X dword(int forward),
X error(char *, ...),
X f_char(int n),
X f_close(struct File *fp),
X f_mess(char *, ...),
X f_readn(struct File *fp,char *addr,int n),
X f_seek(struct File *fp,long offset),
X f_toNL(struct File *fp),
X f_word(int num),
X file_backup(char *fname),
X file_write(char *fname,int app),
X filemunge(char *newname),
X find_para(int how),
X find_tag(char *tag,int localp),
X finish(int code),
X flush(struct File *fp),
X flusho(void),
X format(char *buf,int len,char *fmt,char *ap),
X#ifndef STDIO
X fprintf(struct File *,char *, ...),
X#endif
X fputnchar(char *s,int n,struct File *fp),
X free_mthread(struct m_thread *t),
X freedir(char * * *nmptr,int nentries),
X freeline(struct line *line),
X gc_openfiles(void),
X getTERM(void),
X getline(disk_line addr,char *buf),
X i_set(int nline,int ncol),
X init_43(void),
X init_strokes(void),
X init_term(void),
X initlist(struct buffer *b),
X ins_c(char c,char *buf,int atchar,int num,int max),
X ins_str(char *str,int ok_nl),
X insert_c(int c,int n),
X isprocbuf(char *bufname),
X len_error(int flag),
X lfreelist(struct line *first),
X lfreereg(struct line *line1,struct line *line2),
X line_move(int dir,int n,int line_cmd),
X linecopy(char *onto,int atchar,char *from),
X lremove(struct line *line1,struct line *line2),
X lsave(void),
X mac_init(void),
X mac_putc(int c),
X#ifndef MAC
X main(int argc,char * *argv),
X#endif
X make_argv(char * *argv,char *ap),
X make_scr(void),
X message(char *str),
X minib_add(char *str,int movedown),
X modify(void),
X mp_error(void),
X n_indent(int goal),
X negate_arg_value(void),
X null_ncpy(char *to,char *from,int n),
X open_lines(int n),
X patchup(struct line *line1,int char1,struct line *line2,int char2),
X pop_env(jmp_buf),
X pop_wind(char *name,int clobber,int btype),
X prCTIME(void),
X pr_putc(int c,struct File *fp),
X#ifndef STDIO
X printf(char *, ...),
X#endif
X push_env(jmp_buf),
X put_bufs(int askp),
X putmatch(int which,char *buf,int size),
X putpad(char *str,int lines),
X putreg(struct File *fp,struct line *line1,int char1,struct line *line2,int char2,int makesure),
X putstr(char *s),
X rbell(void),
X re_dosub(char *tobuf,int delp),
X read_file(char *file,int is_insert),
X redisplay(void),
X reg_kill(struct line *line2,int char2,int dot_moved),
X reset_43(void),
X s_mess(char *, ...),
X set_arg_value(int n),
X set_ino(struct buffer *b),
X set_is_an_arg(int there_is),
X set_mark(void),
X set_wsize(int wsize),
X setbname(struct buffer *b,char *name),
X setcolor(unsigned char fg,unsigned char bg),
X setfname(struct buffer *b,char *name),
X setsearch(char *str),
X settout(char *ttbuf),
X slowpoke(void),
X#ifndef STDIO
X sprintf(char *,char *, ...),
X#endif
X tiewind(struct window *w,struct buffer *bp),
X tmpclose(void),
X tmpinit(void),
X to_word(int dir),
X ttinit(void),
X ttsize(void),
X tty_reset(void),
X ttyset(int n),
X unmodify(void),
X unwind_macro_stack(void),
X updmode(void),
X v_clear(int line1,int line2),
X v_del_line(int num,int top,int bottom),
X v_ins_line(int num,int top,int bottom),
X winit(void),
X write_em(char *s),
X write_emc(char *s,int n),
X write_emif(),
X write_emif(char *s);
X
X#ifdef MAC
X
extern int
X creat(char *,int),
X open(char *,int),
X close(int),
X read(int,char *,unsigned),
X write(int,char *,unsigned),
X free(char *);
X unlink(char *),
X chdir(char *),
X rawchkc(void),
X getArgs(char ***);
X
X
extern long
X lseek(int,long,unsigned);
X
extern char
X *pwd(void),
X *index(char *,char),
X *mktemp(char *),
X *rindex(char *,char),
X *getwd(void),
X *pfile(char *),
X *gfile(char *);
X
extern void
X MacInit(void),
X InitBinds(void),
X NPlacur(int,int),
X i_lines(int,int,int),
X d_lines(int,int,int),
X clr_page(void),
X clr_eoln(void),
X docontrols(void),
X RemoveScrollBar(Window *),
X InitEvents(void),
X menus_on(void),
X menus_off(void);
X
X#endif /* MAC */
X
X#else
X
extern time_t
X time();
X
extern long
X lseek();
X
extern int
X abs(),
X read(),
X write();
X
extern void
X exit(),
X _exit(),
X free();
X
extern char
X *getenv(),
X *pwd(),
X *index(),
X *malloc(),
X *mktemp(),
X *realloc(),
X *rindex(),
X#ifdef IPROCS
X *pstate(),
X#endif
X *tgoto();
X
extern char
X **scanvec(),
X *IOerr(),
X *MakeName(),
X *StrIndex(),
X *ask(),
X *ask_buf(),
X *ask_file(),
X *basename(),
X *copystr(),
X *do_ask(),
X *emalloc(),
X *filename(),
X *get_time(),
X *getsearch(),
X *itoa(),
X *lbptr(),
X *lcontents(),
X *ltobuf(),
X *pr_name(),
X *ralloc(),
X *sprint(),
X switchar();
X
extern int
X BufSwrite(),
X FLine(),
X LineDist(),
X LookingAt(),
X ModBufs(),
X ModMacs(),
X Peekc(),
X TwoBlank(),
X UnixToBuf(),
X addgetc(),
X alphacomp(),
X arg_type(),
X arg_value(),
X ask_int(),
X aux_complete(),
X blnkp(),
X calc_pos(),
X casecmp(),
X casencmp(),
X charp(),
X chr_to_int(),
X complete(),
X do_if(),
X dosputc(),
X f_getint(),
X f_gets(),
X f_match(),
X filbuf(),
X find_pos(),
X fixorder(),
X _flush(),
X getch(),
X getchar(),
X getrawinchar(),
X how_far(),
X i_blank(),
X i_bsblank(),
X in_window(),
X inlist(),
X in_macro(),
X inorder(),
X is_an_arg(),
X ismword(),
X joverc(),
X length(),
X look_at(),
X#ifdef IBMPC
X lower(),
X#endif
X mac_getc(),
X match(),
X max(),
X min(),
X numcomp(),
X pnt_line(),
X rawkey_ready(),
X re_lindex(),
X scandir(),
X sindex(),
X swrite(),
X unbind_aux(),
X waitchar(),
X yes_or_no_p();
X
extern disk_line
X f_getputl(),
X putline();
X
extern struct File
X *f_open(),
X *fd_open(),
X *open_file();
X
extern struct buffer
X *buf_exists(),
X *do_find(),
X *do_select(),
X *file_exists(),
X *getNMbuf();
X
extern struct cmd
X *FindCmd();
X
extern struct data_obj
X **IsPrefix(),
X *findcom(),
X *findmac(),
X *findvar();
X
extern struct line
X *lastline(),
X *listput(),
X *max_line(),
X *min_line(),
X *nbufline(),
X *next_line(),
X *prev_line(),
X *reg_delete();
X
extern struct m_thread
X *alloc_mthread();
X
extern struct mark
X *CurMark(),
X *MakeMark();
X
extern struct position
X *DoYank(),
X *c_indent(),
X *docompiled(),
X *dosearch(),
X *lisp_indent(),
X *m_paren();
X
extern struct table
X *make_table();
X
extern struct window
X *div_wind(),
X *w_nam_typ(),
X *windbp();
X
extern struct word
X *word_in_table();
X
extern unsigned char
X chpl(),
X lpp();
X
extern void
X AbbrevExpand(),
X AddSpecial(),
X AllMarkSet(),
X AppReg(),
X Apropos(),
X BList(),
X BSexpr(),
X BUpList(),
X BackChar(),
X BackPara(),
X BackWord(),
X BindAKey(),
X BindMac(),
X BindMtoW(),
X BindSomething(),
X BindWMap(),
X Bof(),
X Bol(),
X Bos(),
X Bow(),
X Buf10Select(),
X Buf1Select(),
X Buf2Select(),
X Buf3Select(),
X Buf4Select(),
X Buf5Select(),
X Buf6Select(),
X Buf7Select(),
X Buf8Select(),
X Buf9Select(),
X BufErase(),
X BufKill(),
X BufList(),
X BufPos(),
X BufSelect(),
X CAutoExec(),
X CalcWind(),
X CapChar(),
X CapWord(),
X CasRegLower(),
X CasRegUpper(),
X CaseReg(),
X CentWind(),
X ChkWindows(),
X ChrToOct(),
X ClAndRedraw(),
X Comment(),
X CopyRegion(),
X CtlxPrefix(),
X DFixMarks(),
X DOTsave(),
X DefAutoExec(),
X DefGAbbrev(),
X DefKBDMac(),
X DefMAbbrev(),
X DelBlnkLines(),
X DelCurWindow(),
X DelMacro(),
X DelMark(),
X DelNChar(),
X DelNWord(),
X DelPChar(),
X DelPWord(),
X DelReg(),
X DelWtSpace(),
X DescBindings(),
X DescCom(),
X DescMap(),
X DescWMap(),
X Digit(),
X Digit0(),
X Digit1(),
X Digit2(),
X Digit3(),
X Digit4(),
X Digit5(),
X Digit6(),
X Digit7(),
X Digit8(),
X Digit9(),
X DoAutoExec(),
X DoJustify(),
X DoKeys(),
X DoNewline(),
X DoPara(),
X DoParen(),
X DoWriteReg(),
X DotTo(),
X DownScroll(),
X DrawMesg(),
X EditAbbrevs(),
X Eof(),
X Eol(),
X Eos(),
X Eow(),
X ErrFree(),
X ErrParse(),
X EscPrefix(),
X ExecCmd(),
X ExecMacro(),
X Extend(),
X FDotTag(),
X FDownList(),
X FList(),
X FSexpr(),
X FSrchND(),
X FillComment(),
X FilterRegion(),
X FindFile(),
X FindTag(),
X ForChar(),
X ForPara(),
X ForSearch(),
X ForWord(),
X Forget(),
X GCchunks(),
X GSexpr(),
X GoLine(),
X GotoWind(),
X GrowWindow(),
X HandlePref(),
X IFixMarks(),
X IncFSearch(),
X IncRSearch(),
X InitCM(),
X InsFile(),
X Insert(),
X Justify(),
X KeyDesc(),
X KillBos(),
X KillEOL(),
X KillEos(),
X KillExpr(),
X KillSome(),
X Leave(),
X LineAI(),
X LineInsert(),
X LowWord(),
X MAutoExec(),
X MacInter(),
X MakeErrors(),
X MarkSet(),
X MiscPrefix(),
X NameMac(),
X Newline(),
X NextError(),
X NextLine(),
X NextPage(),
X NextWindow(),
X NotModified(),
X OneWindow(),
X OpenLine(),
X PageNWind(),
X PageScrollDown(),
X PageScrollUp(),
X ParseAll(),
X PathParse(),
X Placur(),
X PopMark(),
X PrVar(),
X PrevError(),
X PrevLine(),
X PrevPage(),
X PrevWindow(),
X PtToMark(),
X Push(),
X PushPntp(),
X QRepSearch(),
X QuotChar(),
X REcompile(),
X RErecur(),
X RSrchND(),
X ReNamBuf(),
X ReadFile(),
X Recur(),
X RedrawDisplay(),
X RegJustify(),
X RegReplace(),
X RegToUnix(),
X Remember(),
X RepSearch(),
X ResetTerm(),
X RestAbbrevs(),
X RevSearch(),
X RunMacro(),
X SO_off(),
X SO_on(),
X SaveAbbrevs(),
X SaveFile(),
X SelfInsert(),
X SetABuf(),
X SetBuf(),
X SetDot(),
X SetLMargin(),
X SetMark(),
X SetRMargin(),
X SetTop(),
X SetVar(),
X SetWind(),
X ShToBuf(),
X ShellCom(),
X ShowErr(),
X ShowVersion(),
X ShrWindow(),
X SitFor(),
X Source(),
X SplitWind(),
X StrLength(),
X SyncTmp(),
X TOstart(),
X TOstop(),
X Tab(),
X TimesFour(),
X ToError(),
X ToFirst(),
X ToIndent(),
X ToLast(),
X ToMark(),
X TogMinor(),
X TransChar(),
X TransLines(),
X Typeout(),
X UNIX_cmdline(),
X UnbindC(),
X Ungetc(),
X UnsetTerm(),
X UpScroll(),
X UppWord(),
X WNumLines(),
X WVisSpace(),
X WindFind(),
X WindSize(),
X WriteFile(),
X WriteMacs(),
X WrtReg(),
X WtModBuf(),
X XParse(),
X Yank(),
X YankPop(),
X add_mess(),
X add_stroke(),
X add_word(),
X b_char(),
X b_word(),
X bufname(),
X case_reg(),
X case_word(),
X cl_eol(),
X cl_scr(),
X close_file(),
X clr_arg_value(),
X clrline(),
X complain(),
X confirm(),
X d_cache_init(),
X del_char(),
X del_wind(),
X dispatch(),
X do_macro(),
X do_rfill(),
X do_set_mark(),
X do_sgtty(),
X do_space(),
X dobell(),
X dofread(),
X dword(),
X error(),
X f_char(),
X f_close(),
X f_mess(),
X f_readn(),
X f_seek(),
X f_toNL(),
X f_word(),
X file_backup(),
X file_write(),
X filemunge(),
X find_para(),
X find_tag(),
X finish(),
X flush(),
X flusho(),
X format(),
X#ifndef STDIO
X fprintf(),
X#endif
X fputnchar(),
X free_mthread(),
X freedir(),
X freeline(),
X gc_openfiles(),
X getTERM(),
X getline(),
X i_set(),
X init_43(),
X init_strokes(),
X init_term(),
X initlist(),
X ins_c(),
X ins_str(),
X insert_c(),
X isprocbuf(),
X len_error(),
X lfreelist(),
X lfreereg(),
X line_move(),
X linecopy(),
X lremove(),
X lsave(),
X mac_init(),
X mac_putc(),
X main(),
X make_argv(),
X make_scr(),
X message(),
X minib_add(),
X modify(),
X mp_error(),
X n_indent(),
X negate_arg_value(),
X null_ncpy(),
X open_lines(),
X patchup(),
X pop_env(),
X pop_wind(),
X prCTIME(),
X pr_putc(),
X#ifndef STDIO
X printf(),
X#endif
X push_env(),
X put_bufs(),
X putmatch(),
X putpad(),
X putreg(),
X putstr(),
X rbell(),
X re_dosub(),
X read_file(),
X redisplay(),
X reg_kill(),
X reset_43(),
X s_mess(),
X set_arg_value(),
X set_ino(),
X set_is_an_arg(),
X set_mark(),
X set_wsize(),
X setbname(),
X setcolor(),
X setfname(),
X setsearch(),
X settout(),
X slowpoke(),
X#ifndef STDIO
X sprintf(),
X#endif
X tiewind(),
X tmpclose(),
X tmpinit(),
X to_word(),
X ttinit(),
X ttsize(),
X tty_reset(),
X ttyset(),
X unmodify(),
X unwind_macro_stack(),
X updmode(),
X v_clear(),
X v_del_line(),
X v_ins_line(),
X winit(),
X write_em(),
X write_emc(),
X write_emif(),
X write_emif();
X#endif
END_OF_FILE
if test 21599 -ne `wc -c <'./externs.h'`; then
echo shar: \"'./externs.h'\" unpacked with wrong size!
fi
# end of './externs.h'
fi
if test -f './jove.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'./jove.c'\"
else
echo shar: Extracting \"'./jove.c'\" \(25416 characters\)
sed "s/^X//" >'./jove.c' <<'END_OF_FILE'
X/***************************************************************************
X * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne. JOVE *
X * is provided to you without charge, and with no warranty. You may give *
X * away copies of JOVE, including sources, provided that this notice is *
X * included in all the files. *
X ***************************************************************************/
X
X/* Contains the main loop initializations, and some system dependent
X type things, e.g. putting terminal in CBREAK mode, etc. */
X
X#include "jove.h"
X#include "io.h"
X#include "termcap.h"
X
X#ifdef MAC
X# include "mac.h"
X#else
X# include <varargs.h>
X# include <sys/stat.h>
X#endif
X
X#include <signal.h>
X#include <errno.h>
X
X#ifdef UNIX
X# ifndef SYSV
X# include <sgtty.h>
X# else
X# include <termio.h>
X# endif /* SYSV */
X#endif /* UNIX */
X
X#ifdef MSDOS
X# include <process.h>
X#endif /* MSDOS */
X
X#ifndef MAC
X# include <fcntl.h>
X#endif
X
X#ifdef MAC
X# undef private
X# define private
X#endif
X
X#ifdef LINT_ARGS
extern long time(long *);
private void break_off(void);
private void break_rst(void);
X#else
extern long time();
private void break_off();
private void break_rst();
X#endif
X
X#ifdef MAC
X# undef private
X# define private static
X#endif
X
X#ifdef UNIX
X#ifdef TIOCSLTC
struct ltchars ls1,
X ls2;
X#endif /* TIOCSLTC */
X
X#ifdef TIOCGETC
struct tchars tc1,
X tc2;
X#endif
X
X#ifdef PASS8 /* use pass8 instead of raw for meta-key */
int lm_word1, /* local mode word */
X lm_word2;
X#endif
X
X#ifdef BRLUNIX
struct sg_brl sg1, sg2;
X#else
X#ifdef SYSV
struct termio sg1, sg2;
X#else /* SYSV */
struct sgttyb sg1, sg2;
X#endif /* SYSV */
X#endif /* BRLUNIX */
X
X#ifdef BIFF
private struct stat tt_stat; /* for biff */
X#ifndef BSD4_2
private char *tt_name = 0; /* name of the control tty */
extern char *ttyname(); /* for systems w/o fchmod ... */
X#endif
private int dw_biff = NO; /* whether or not to fotz at all */
X#endif
X#endif /* UNIX */
X
int errormsg;
extern char *tfname;
char NullStr[] = "";
X
X#ifdef MSDOS
X#define SIGHUP 99
X#endif /* MSDOS */
X
void
finish(code)
X{
X int CoreDump = (code != 0 && code != SIGHUP),
X DelTmps = 1; /* Usually we delete them. */
X
X if (code == SIGINT) {
X char c;
X
X#ifndef MENLO_JCL
X (void) signal(code, finish);
X#endif
X f_mess("Abort (Type 'n' if you're not sure)? ");
X#ifndef MSDOS
X (void) read(0, &c, 1);
X#else /* MSDOS */
X c = getrawinchar();
X#endif /* MSDOS */
X message(NullStr);
X if ((c & 0377) != 'y') {
X redisplay();
X return;
X }
X }
X ttyset(OFF);
X UnsetTerm(NullStr);
X#ifndef MSDOS
X if (code != 0) {
X if (!Crashing) {
X Crashing = YES;
X lsave();
X SyncRec();
X printf("JOVE CRASH!! (code %d)\n", code);
X if (ModBufs(1)) {
X printf("Your buffers have been saved.\n");
X printf("Use \"jove -r\" to have a look at them.\n");
X DelTmps = 0; /* Don't delete anymore. */
X } else
X printf("You didn't lose any work.\n");
X } else
X printf("\r\nYou may have lost your work!\n");
X }
X#endif /* MSDOS */
X flusho();
X if (DelTmps) {
X tmpclose();
X#ifndef MSDOS
X recclose();
X#endif /* MSDOS */
X }
X#ifdef UNIX
X if (CoreDump)
X abort();
X#ifdef PROFILING
X exit(0);
X#else
X _exit(0);
X#endif
X#else /* MSDOS or MAC*/
X#ifdef MSDOS
X break_rst(); /* restore previous ctrl-c handling */
X#endif
X exit(0);
X#endif /* UNIX */
X}
X
private char smbuf[20],
X *bp = smbuf;
private int nchars = 0;
X
private char peekbuf[10],
X *peekp = peekbuf;
X
X#if defined(SYSV) || defined(M_XENIX)
void
setblock(fd, on) /* turn blocking on or off */
register int fd, on;
X{
X static int blockf, nonblockf;
X static int first = 1;
X int flags;
X
X if (first) {
X first = 0;
X if ((flags = fcntl(fd, F_GETFL, 0)) == -1)
X finish(SIGHUP);
X blockf = flags & ~O_NDELAY; /* make sure O_NDELAY is off */
X nonblockf = flags | O_NDELAY; /* make sure O_NDELAY is on */
X }
X if (fcntl(fd, F_SETFL, on ? blockf : nonblockf) == -1)
X finish(SIGHUP);
X}
X#endif /* SYSV */
X
int
Peekc()
X{
X int c;
X
X if (peekp == peekbuf)
X c = -1;
X else
X c = *--peekp & 0377;
X return c;
X}
X
void
Ungetc(c)
X{
X if (peekp == &peekbuf[(sizeof peekbuf) - 1])
X return; /* Sorry, can't oblige you ... */
X *peekp++ = c;
X}
X
char *Inputp = 0;
X
X#ifdef IPROCS
X#ifdef PIPEPROCS
getchar()
X{
X extern int errno;
X register int c;
X
X if (nchars <= 0) {
X do
X nchars = read(0, smbuf, sizeof smbuf);
X#ifdef SYSV
X while (nchars == 0 || (nchars < 0 && errno == EINTR));
X if (nchars < 0)
X#else
X while (nchars < 0 && errno == EINTR);
X if (nchars <= 0)
X#endif /* SYSV */
X finish(SIGHUP);
X bp = smbuf;
X InputPending = nchars > 1;
X }
X if (((c = *bp) & 0200) && MetaKey != 0) {
X *bp = (c & CHARMASK);
X return '\033';
X }
X nchars -= 1;
X return (*bp++ & CHARMASK);
X}
X#else /* PIPEPROCS */
getchar()
X{
X extern long global_fd;
X long reads;
X extern int NumProcs,
X errno;
X register int tmp,
X nfds;
X int c;
X
X if (nchars <= 0) {
X /* Get a character from the keyboard, first checking for
X any input from a process. Handle that first, and then
X deal with the terminal input. */
X if (NumProcs > 0) {
X do {
X do {
X reads = global_fd;
X nfds = select(32, &reads, (long *)0, (long *)0, (struct timeval *)0);
X } while (nfds < 0 && errno == EINTR);
X
X switch (nfds) {
X case -1:
X printf("\rerror %d in select %ld", errno, global_fd);
X global_fd = 1;
X break;
X default:
X if (reads & 01) {
X nchars = read(0, smbuf, sizeof(smbuf));
X reads &= ~01;
X nfds -= 1;
X }
X
X while (nfds--) {
X tmp = ffs(reads) - 1;
X read_proc(tmp);
X reads &= ~(1L << tmp);
X }
X
X break;
X }
X } while (nchars <= 0);
X } else {
X do
X nchars = read(0, smbuf, sizeof(smbuf));
X while (nchars < 0 && errno == EINTR);
X }
X
X if (nchars <= 0)
X finish(SIGHUP);
X
X bp = smbuf;
X InputPending = (nchars > 1);
X }
X
X if (((c = *bp) & 0200) && MetaKey != 0) {
X *bp = (c & CHARMASK);
X return '\033';
X }
X nchars -= 1;
X return *bp++ & 0377;
X}
X#endif /* PIPEPROCS */
X#else /* IPROCS */
int
getchar()
X{
X extern int errno;
X register int c;
X
X if (nchars <= 0) {
X do {
X#ifdef MSDOS
X *smbuf = getrawinchar();
X nchars = 1;
X#else
X nchars = read(0, smbuf, sizeof smbuf);
X#endif
X } while (nchars < 0
X#ifndef MSDOS
X && errno == EINTR
X#endif
X );
X
X if (nchars <= 0)
X finish(SIGHUP);
X bp = smbuf;
X InputPending = nchars > 1;
X }
X if (((c = *bp) & 0200) && MetaKey != 0) {
X *bp = (c & CHARMASK);
X return '\033';
X }
X nchars -= 1;
X return *bp++ & 0377;
X}
X
X#endif /* IPROCS */
X
int InputPending = 0;
X
X/* Returns non-zero if a character waiting */
X
int
charp()
X{
X#ifndef MSDOS
X int some = 0;
X#endif /* MSDOS */
X
X if (InJoverc != 0 || nchars > 0 || Inputp != 0)
X return 1;
X#ifdef BRLUNIX
X {
X static struct sg_brl gttyBuf;
X
X gtty(0, (char *) >tyBuf);
X if (gttyBuf.sg_xflags & INWAIT)
X some += 1;
X }
X#endif
X#ifdef FIONREAD
X {
X long c;
X
X if (ioctl(0, FIONREAD, (struct sgttyb *) &c) == -1)
X c = 0;
X some = (c > 0);
X }
X#endif /* FIONREAD */
X#if defined(SYSV) || defined(M_XENIX)
X setblock(0, 0); /* turn blocking off */
X nchars = read(0, smbuf, sizeof smbuf); /* Is anything there? */
X setblock(0, 1); /* turn blocking on */
X if (nchars > 0) /* something was there */
X bp = smbuf; /* make sure bp points to it */
X some = (nchars > 0); /* just say we found something */
X#endif /* SYSV */
X#ifdef c70
X some = !empty(0);
X#endif
X#ifdef MSDOS
X return rawkey_ready();
X#else
X#ifdef MAC
X some = rawchkc();
X#endif
X return some;
X#endif /* MSDOS */
X}
X
X#ifdef TERMCAP
void
ResetTerm()
X{
X putpad(TI, 1);
X putpad(VS, 1);
X putpad(KS, 1);
X#ifndef MSDOS
X (void) chkmail(YES); /* force it to check to we can be accurate */
X#endif
X#ifdef BIFF
X if (BiffChk != dw_biff)
X biff_init();
X /* just in case we changed our minds about whether to deal with
X biff */
X#endif
X do_sgtty(); /* this is so if you change baudrate or stuff
X like that, JOVE will notice. */
X ttyset(ON);
X}
X
void
UnsetTerm(mesg)
char *mesg;
X{
X ttyset(OFF);
X putpad(KE, 1);
X putpad(VE, 1);
X putpad(TE, 1);
X#ifdef ID_CHAR
X INSmode(0);
X#endif
X Placur(ILI, 0);
X printf("%s", mesg);
X putpad(CE, 1);
X flusho();
X}
X#endif /* TERMCAP */
X
X#ifdef JOB_CONTROL
PauseJove()
X{
X UnsetTerm(ModBufs(0) ? "[There are modified buffers]" : NullStr);
X (void) kill(0, SIGTSTP);
X ResetTerm();
X ClAndRedraw();
X}
X#endif
X
X
X#ifndef MAC
void
Push()
X{
X int
X#ifndef MSDOS
X pid,
X (*old_quit)() = signal(SIGQUIT, SIG_IGN),
X#endif /* MSDOS */
X (*old_int)() = signal(SIGINT, SIG_IGN);
X
X#ifndef MSDOS
X#ifdef IPROCS
X sighold(SIGCHLD);
X#endif
X switch (pid = fork()) {
X case -1:
X complain("[Fork failed]");
X
X case 0:
X UnsetTerm(NullStr);
X#ifdef IPROCS
X sigrelse(SIGCHLD);
X#endif
X (void) signal(SIGTERM, SIG_DFL);
X#else /* MSDOS */
X UnsetTerm(NullStr);
X#endif /* MSDOS */
X (void) signal(SIGINT, SIG_DFL);
X#ifdef UNIX
X (void) signal(SIGQUIT, SIG_DFL);
X execl(Shell, basename(Shell), (char *)0);
X message("[Execl failed]");
X _exit(1);
X }
X dowait(pid, (int *) 0);
X#ifdef IPROCS
X sigrelse(SIGCHLD);
X#endif
X#endif /* UNIX */
X#ifdef MSDOS
X break_rst();
X if (spawnl(0, Shell, basename(Shell), (char *)0) == -1)
X message("[Spawn failed]");
X#endif /* MSDOS */
X ResetTerm();
X ClAndRedraw();
X#ifndef MSDOS
X (void) signal(SIGQUIT, old_quit);
X#else /* MSDOS */
X break_off();
X#ifdef CHDIR
X getCWD();
X#endif
X#endif /* MSDOS */
X (void) signal(SIGINT, old_int);
X}
X#endif /* MAC */
X
int OKXonXoff = 0, /* ^S and ^Q initially DON'T work */
X IntChar = CTL(']');
X
void
ttsize()
X{
X#ifdef UNIX
X#ifdef TIOCGWINSZ
X struct winsize win;
X
X if (ioctl (0, TIOCGWINSZ, &win) == 0) {
X if (win.ws_col)
X CO = win.ws_col;
X if (win.ws_row)
X LI = win.ws_row;
X }
X#else /* TIOCGWINSZ */
X#ifdef BTL_BLIT
X#include <sys/jioctl.h>
X struct jwinsize jwin;
X
X if (ioctl(0, JWINSIZE, &jwin) == 0) {
X if (jwin.bytesx)
X CO = jwin.bytesx;
X if (jwin.bytesy)
X LI = jwin.bytesy;
X }
X#endif /* BTL_BLIT */
X#endif /* TIOCGWINSZ */
X#endif /* UNIX */
X ILI = LI - 1;
X}
X
X#ifdef BIFF
biff_init()
X{
X dw_biff = ((BiffChk) &&
X#ifndef BSD4_2
X ((tt_name != 0) || (tt_name = ttyname(0))) &&
X (stat(tt_name, &tt_stat) != -1) &&
X#else
X (fstat(0, &tt_stat) != -1) &&
X#endif
X (tt_stat.st_mode & S_IEXEC)); /* he's using biff */
X
X}
X
biff(on)
X{
X if (dw_biff == NO)
X return;
X#ifndef BSD4_2
X (void) chmod(tt_name, on ? tt_stat.st_mode :
X (tt_stat.st_mode & ~S_IEXEC));
X#else
X (void) fchmod(0, on ? tt_stat.st_mode :
X (tt_stat.st_mode & ~S_IEXEC));
X#endif
X}
X
X#endif
X
void
ttinit()
X{
X#ifdef BIFF
X biff_init();
X#endif
X#ifdef TIOCSLTC
X (void) ioctl(0, TIOCGLTC, (struct sgttyb *) &ls1);
X ls2 = ls1;
X ls2.t_suspc = (char) -1;
X ls2.t_dsuspc = (char) -1;
X ls2.t_flushc = (char) -1;
X ls2.t_lnextc = (char) -1;
X#endif
X
X#ifdef TIOCGETC
X /* Change interupt and quit. */
X (void) ioctl(0, TIOCGETC, (struct sgttyb *) &tc1);
X tc2 = tc1;
X tc2.t_intrc = IntChar;
X tc2.t_quitc = (char) -1;
X if (OKXonXoff) {
X tc2.t_stopc = (char) -1;
X tc2.t_startc = (char) -1;
X }
X#endif /* TIOCGETC */
X do_sgtty();
X}
X
private int done_ttinit = 0;
X
void
do_sgtty()
X{
X#ifdef UNIX
X#ifdef SYSV
X (void) ioctl(0, TCGETA, (char *) &sg1);
X#else
X (void) gtty(0, &sg1);
X#endif /* SYSV */
X sg2 = sg1;
X
X#ifdef LPASS8
X (void) ioctl(0, TIOCLGET, &lm_word1);
X lm_word2 = lm_word1;
X if (MetaKey == YES)
X lm_word2 |= LPASS8;
X#endif
X
X#ifdef SYSV
X TABS = !((sg1.c_oflag & TAB3) == TAB3);
X ospeed = sg1.c_cflag & CBAUD;
X
X if (OKXonXoff)
X sg2.c_iflag &= ~(IXON | IXOFF);
X sg2.c_iflag &= ~(INLCR|ICRNL|IGNCR);
X sg2.c_lflag &= ~(ISIG|ICANON|ECHO);
X sg2.c_oflag &= ~(OCRNL|ONLCR);
X sg2.c_cc[VMIN] = sizeof smbuf;
X sg2.c_cc[VTIME] = 1;
X#else
X TABS = !(sg1.sg_flags & XTABS);
X ospeed = sg1.sg_ospeed;
X#ifdef BRLUNIX
X sg2.sg_flags &= ~(ECHO | CRMOD);
X sg2.sg_flags |= CBREAK;
X
X /* VT100 Kludge: leave STALL on for flow control if DC3DC1 (Yuck.) */
X sg2.sg_xflags &= ~((sg2.sg_xflags&DC3DC1 ? 0 : STALL) | PAGE);
X#else
X sg2.sg_flags &= ~(ECHO | CRMOD);
X#endif /* BRLUNIX */
X
X#ifdef EUNICE
X sg2.sg_flags |= RAW; /* Eunice needs RAW mode last I heard. */
X#else
X#ifdef PURDUE_EE
X# ifdef pdp11
X sg2.sg_flags |= RAW;
X# else
X sg2.sg_flags |= (MetaKey ? RAW : CBREAK);
X# endif
X#else
X# ifdef LPASS8
X sg2.sg_flags |= CBREAK;
X# else
X sg2.sg_flags |= (MetaKey ? RAW : CBREAK);
X# endif
X#endif /* PURDUE_EE */
X#endif /* EUNICE */
X#endif /* SYSV */
X#endif /* UNIX */
X
X#ifdef MSDOS
X# ifndef IBMPC
X setmode(1, 0x8000);
X# endif /* IBMPC */
X TABS = 0;
X#endif /* MSDOS */
X}
X
void
tty_reset()
X{
X if (!done_ttinit)
X return;
X ttyset(OFF); /* go back to original modes */
X ttinit();
X ttyset(ON);
X}
X
X/* If n is OFF reset to original modes */
X
void
ttyset(n)
X{
X if (!done_ttinit && n == 0) /* Try to reset before we've set! */
X return;
X#ifdef UNIX
X# ifdef SYSV
X (void) ioctl(0, TCSETAW, n == 0 ? (struct sgttyb *) &sg1 : (struct sgttyb *) &sg2);
X# else
X# ifdef BRLUNIX
X (void) stty(0, n == 0 ? (struct sgttyb *) &sg1 : (struct sgttyb *) &sg2);
X# else
X (void) ioctl(0, TIOCSETN, n == 0 ? (struct sgttyb *) &sg1 : (struct sgttyb *) &sg2);
X# endif /* BRLUNIX */
X# endif /* SYSV */
X
X# ifdef TIOCSETC
X (void) ioctl(0, TIOCSETC, n == 0 ? (struct sgttyb *) &tc1 : (struct sgttyb *) &tc2);
X# endif /* TIOCSETC */
X# ifdef TIOCSLTC
X (void) ioctl(0, TIOCSLTC, n == 0 ? (struct sgttyb *) &ls1 : (struct sgttyb *) &ls2);
X# endif /* TIOCSLTC */
X# ifdef LPASS8
X (void) ioctl(0, TIOCLSET, n == 0 ? &lm_word1 : &lm_word2);
X# endif
X#endif /* UNIX */
X
X#ifdef MSDOS
X# ifndef IBMPC
X setmode(1, n == 0 ? 0x4000 : 0x8000);
X# endif /* IBMPC */
X#endif /* MSDOS */
X done_ttinit = 1;
X#ifdef BIFF
X biff(!n);
X#endif
X}
X
int this_cmd,
X last_cmd;
X
void
dispatch(c)
register int c;
X{
X data_obj *cp;
X
X this_cmd = 0;
X cp = mainmap[c & CHARMASK];
X
X if (cp == 0) {
X rbell();
X clr_arg_value();
X errormsg = NO;
X message(NullStr);
X } else
X ExecCmd(cp);
X}
X
int LastKeyStruck,
X MetaKey = 0;
X
int
getch()
X{
X register int c,
X peekc;
X#ifdef IPROCS
X extern int NumProcs;
X#endif
X extern int ModCount,
X Interactive;
X
X if (Inputp) {
X if ((c = *Inputp++) != 0)
X return LastKeyStruck = c;
X Inputp = 0;
X }
X
X if (InJoverc)
X return EOF; /* somethings wrong if Inputp runs out while
X we're reading a .joverc file. */
X
X#ifndef MSDOS
X if (ModCount >= SyncFreq) {
X ModCount = 0;
X SyncRec();
X }
X#endif /* MSDOS */
X
X /* If we're not interactive and we're not executing a macro,
X AND there are no ungetc'd characters, we read from the
X terminal (i.e., getch()). And characters only get put
X in macros from inside this if. */
X if (((peekc = c = Peekc()) == -1) && (Interactive || ((c = mac_getc()) == -1))) {
X /* So messages that aren't error messages don't
X hang around forever. */
X if (!UpdMesg && !Asking) { /* Don't erase if we are asking */
X if (mesgbuf[0] && !errormsg)
X message(NullStr);
X }
X redisplay();
X#ifdef IPROCS
X# ifdef PIPEPROCS
X if (NumProcs > 0) {
X sigrelse(INPUT_SIG);
X sigrelse(SIGCHLD);
X }
X# endif
X#endif
X#ifdef UNIX
X inIOread = 1;
X#endif
X if ((c = getchar()) == EOF)
X finish(SIGHUP);
X#ifdef UNIX
X inIOread = 0;
X#endif
X
X#ifdef IPROCS
X# ifdef PIPEPROCS
X if (NumProcs > 0) {
X sighold(INPUT_SIG);
X sighold(SIGCHLD);
X }
X# endif
X#endif
X if (!Interactive && InMacDefine)
X mac_putc(c);
X }
X if (peekc == -1) /* don't add_stroke peekc's */
X add_stroke(c);
X return LastKeyStruck = c;
X}
X
X#ifdef UNIX
dorecover()
X{
X execl(Recover, "recover", "-d", TmpFilePath, (char *) 0);
X printf("%s: execl failed!\n", Recover);
X flusho();
X _exit(-1);
X}
X#endif /* UNIX */
X
X
void
ShowVersion()
X{
X extern char *version;
X
X s_mess("Jonathan's Own Version of Emacs (%s)", version);
X}
X
void
UNIX_cmdline(argc, argv)
char *argv[];
X{
X int lineno = 0,
X nwinds = 1;
X Buffer *b;
X
X ShowVersion();
X while (argc > 1) {
X if (argv[1][0] != '-' && argv[1][0] != '+') {
X int force = (nwinds > 0 || lineno != 0);
X
X#ifdef MSDOS
X strlwr(argv[1]);
X#endif /* MSDOS */
X minib_add(argv[1], force ? YES : NO);
X b = do_find(nwinds > 0 ? curwind : (Window *) 0,
X argv[1], force);
X if (force) {
X SetABuf(curbuf);
X SetBuf(b);
X if (lineno >= 0)
X SetLine(next_line(curbuf->b_first, lineno));
X else
X SetLine(curbuf->b_last);
X if (nwinds > 1)
X NextWindow();
X if (nwinds)
X nwinds -= 1;
X }
X lineno = 0;
X } else switch (argv[1][1]) {
X case 'd':
X argv += 1;
X argc -= 1;
X break;
X
X case 'j': /* Ignore .joverc in HOME */
X break;
X#ifndef MAC
X case 'p':
X argv += 1;
X argc -= 1;
X if (argv[1] != 0) {
X SetBuf(do_find(curwind, argv[1], 0));
X ErrParse();
X nwinds = 0;
X }
X break;
X#endif
X case 't':
X /* check if syntax is -tTag or -t Tag */
X if (argv[1][2] != 0) {
X find_tag(&(argv[1][2]), YES);
X } else {
X argv += 1;
X argc -= 1;
X if (argv[1] != 0)
X find_tag(argv[1], YES);
X }
X break;
X
X case 'w':
X if (argv[1][2] == '\0')
X nwinds += 1;
X else {
X int n;
X
X (void) chr_to_int(&argv[1][2], 10, NO, &n);
X nwinds += -1 + n;
X }
X (void) div_wind(curwind, nwinds - 1);
X break;
X
X case '0':
X case '1':
X case '2':
X case '3':
X case '4':
X case '5':
X case '6':
X case '7':
X case '8':
X case '9':
X (void) chr_to_int(&argv[1][1], 10, NO, &lineno);
X lineno -= 1;
X break;
X case 0:
X lineno = -1; /* goto end of file ... */
X break; /* just like some people's */
X } /* favourite editor */
X argv += 1;
X argc -= 1;
X }
X}
X
X/* VARARGS1 */
X
void
error(fmt, va_alist)
char *fmt;
va_dcl
X{
X va_list ap;
X
X if (fmt) {
X va_start(ap);
X format(mesgbuf, sizeof mesgbuf, fmt, ap);
X va_end(ap);
X UpdMesg = YES;
X }
X rbell();
X longjmp(mainjmp, ERROR);
X}
X
X/* VARARGS1 */
X
void
complain(fmt, va_alist)
char *fmt;
va_dcl
X{
X va_list ap;
X
X if (fmt) {
X va_start(ap);
X format(mesgbuf, sizeof mesgbuf, fmt, ap);
X va_end(ap);
X UpdMesg = YES;
X }
X rbell();
X longjmp(mainjmp, COMPLAIN);
X}
X
X/* VARARGS1 */
X
void
confirm(fmt, va_alist)
char *fmt;
va_dcl
X{
X char *yorn;
X va_list ap;
X
X va_start(ap);
X format(mesgbuf, sizeof mesgbuf, fmt, ap);
X va_end(ap);
X yorn = ask((char *) 0, mesgbuf);
X if (*yorn != 'Y' && *yorn != 'y')
X longjmp(mainjmp, COMPLAIN);
X}
X
int RecDepth = 0;
X
void
Recur()
X{
X char bname[128];
X Mark *m;
X
X sprintf(bname, "%s", curbuf->b_name);
X m = MakeMark(curline, curchar, M_FLOATER);
X
X RecDepth += 1;
X UpdModLine = YES;
X DoKeys(1); /* 1 means not first time */
X UpdModLine = YES;
X RecDepth -= 1;
X SetBuf(do_select(curwind, bname));
X if (!is_an_arg())
X ToMark(m);
X DelMark(m);
X}
X
jmp_buf mainjmp;
X
X#ifdef MAC
jmp_buf auxjmp;
X#endif
X
int iniargc; /* main sets these for DoKeys() */
char **iniargv;
X
void
DoKeys(nocmdline)
X{
X int c;
X jmp_buf savejmp;
X
X push_env(savejmp);
X
X switch (setjmp(mainjmp)) {
X case 0:
X if (!nocmdline)
X UNIX_cmdline(iniargc, iniargv);
X break;
X
X case QUIT:
X if (RecDepth == 0) {
X if (ModMacs()) {
X rbell();
X if (CharUpcase(*ask("No",
X"Some MACROS haven't been saved; leave anyway? ")) != 'Y')
X break;
X }
X if (ModBufs(0)) {
X rbell();
X if (CharUpcase(*ask("No",
X"Some buffers haven't been saved; leave anyway? ")) != 'Y')
X break;
X }
X#ifdef IPROCS
X KillProcs();
X#endif
X }
X pop_env(savejmp);
X return;
X
X case ERROR:
X getDOT(); /* God knows what state linebuf was in */
X
X case COMPLAIN:
X {
X extern int DisabledRedisplay;
X
X gc_openfiles(); /* close any files we left open */
X errormsg = YES;
X unwind_macro_stack();
X Asking = 0;
X curwind->w_bufp = curbuf;
X DisabledRedisplay = NO;
X redisplay();
X break;
X }
X }
X
X this_cmd = last_cmd = 0;
X
X for (;;) {
X#ifdef MAC
X setjmp(auxjmp);
X#endif
X if (this_cmd != ARG_CMD) {
X clr_arg_value();
X last_cmd = this_cmd;
X init_strokes();
X }
X#ifdef MAC
X HiliteMenu(0);
X EventCmd = 0;
X menus_on();
X#endif
X c = getch();
X if (c == -1)
X continue;
X dispatch(c);
X }
X}
X
int Crashing = 0;
X
char **
scanvec(args, str)
register char **args,
X *str;
X{
X while (*args) {
X if (strcmp(*args, str) == 0)
X return args;
X args += 1;
X }
X return 0;
X}
X
X#ifdef UNIX
int UpdFreq = 30,
X inIOread = 0;
X
updmode()
X{
X UpdModLine = YES;
X if (inIOread)
X redisplay();
X#ifndef JOB_CONTROL
X (void) signal(SIGALRM, updmode);
X#endif
X (void) alarm((unsigned) UpdFreq);
X}
X#endif /* UNIX */
X
X#ifndef MSDOS
X#ifdef TIOCGWINSZ
X#ifdef SIGWINCH
extern win_reshape();
X#endif
X#endif
X#else /* MSDOS */
X#ifndef IBMPC
char ttbuf[BUFSIZ];
X#endif /* IBMPC */
X#endif /* MSDOS */
X
X#ifdef TIOCGWINSZ
X#ifdef SIGWINCH
win_reshape()
X{
X register int oldsize;
X register int newsize, total;
X register Window *wp;
X
X (void) signal(SIGWINCH, SIG_IGN);
X
X /*
X * Save old number of lines.
X */
X oldsize = LI;
X
X /*
X * Get new line/col info.
X */
X ttsize();
X
X /*
X * LI has changed, and now holds the
X * new value.
X */
X /*
X * Go through the window list, changing each window size in
X * proportion to the resize. If a window becomes too small,
X * delete it. We keep track of all the excess lines (caused by
X * roundoff!), and give them to the current window, as a sop -
X * can't be more than one or two lines anyway. This seems fairer
X * than just resizing the current window.
X */
X wp = fwind;
X total = 0;
X do {
X newsize = LI * wp->w_height / oldsize;
X
X if (newsize < 2) {
X total += wp->w_height;
X wp = wp->w_next;
X del_wind(wp->w_prev);
X } else {
X wp->w_height = newsize;
X total += newsize;
X wp = wp->w_next;
X }
X } while (wp != fwind);
X
X curwind->w_height += LI - total - 1;
X
X /* Make a new screen structure */
X make_scr();
X /* Do a 'hard' update on the screen - clear and redraw */
X cl_scr(1);
X flusho();
X redisplay();
X
X (void) signal(SIGWINCH, win_reshape);
X}
X#endif
X#endif
X
void
X
X#ifdef MAC /* will get args from user, if option key held during launch */
main()
X{
X int argc;
X char **argv;
X#else
main(argc, argv)
char *argv[];
X{
X#endif /* MAC */
X
X#ifndef MSDOS
X char ttbuf[MAXTTYBUF],
X#ifndef VMUNIX
X s_iobuff[LBSIZE],
X s_genbuf[LBSIZE],
X s_linebuf[LBSIZE],
X#endif
X *cp;
X
X
X#ifndef VMUNIX
X /* The way I look at it, there ain't no way I is gonna run
X out of stack space UNLESS I have some kind of infinite
X recursive bug. So why use up some valuable memory, when
X there is plenty of space on the stack? (This only matters
X on wimpy pdp11's, of course.) */
X
X iobuff = s_iobuff;
X genbuf = s_genbuf;
X linebuf = s_linebuf;
X#endif
X
X#else /* MSDOS */
X char *cp,
X *getenv();
X#endif /* MSDOS */
X
X errormsg = 0;
X
X#ifdef MAC
X MacInit(); /* initializes all */
X if(make_cache() == 0) exit(-1);
X argc = getArgs(&argv);
X#endif /* MAC */
X
X iniargc = argc;
X iniargv = argv;
X
X if (setjmp(mainjmp)) {
X printf("\rAck! I can't deal with error \"%s\" now.\n\r", mesgbuf);
X finish(0);
X }
X
X#ifdef MSDOS
X /* import the temporary file path from the environment and
X fix the string, so that we can append a slash safely */
X
X if (((cp = getenv("TMP")) || (cp = getenv("TMPDIR"))) &&
X (*cp != '\0')) {
X strcpy(TmpFilePath, cp);
X cp = &TmpFilePath[strlen(TmpFilePath)-1];
X if ((*cp == '/') || (*cp == '\\'))
X *cp = 0;
X }
X ShFlags[0] = switchar();
X#endif /* MSDOS */
X
X getTERM(); /* Get terminal. */
X if (getenv("METAKEY"))
X MetaKey = 1;
X ttsize();
X InitCM();
X#ifdef MAC
X InitEvents();
X#endif
X
X d_cache_init(); /* initialize the disk buffer cache */
X#ifndef MAC
X if ((cp = getenv("COMSPEC")) && (*cp != '\0')) {
X strcpy(Shell, cp);
X }
X#endif
X#ifdef MSDOS
X if ((cp = getenv("DESCRIBE")) && (*cp != '\0'))
X strcpy(CmdDb, cp);
X#endif /* MSDOS */
X
X make_scr();
X mac_init(); /* Initialize Macros */
X winit(); /* Initialize Window */
X#ifdef IPROCS
X pinit(); /* Pipes/process initialization */
X#endif
X SetBuf(do_select(curwind, Mainbuf));
X
X#ifdef CHDIR
X {
X char **argp;
X
X if ((argp = scanvec(argv, "-d")) && (argp[1][0] == '/'))
X setCWD(argp[1]);
X else
X getCWD(); /* After we setup curbuf in case we have to getwd() */
X }
X#endif
X HomeDir = getenv("HOME");
X if (HomeDir == 0)
X HomeDir = "/";
X HomeLen = strlen(HomeDir);
X
X#ifdef UNIX
X#ifdef SYSV
X sprintf(Mailbox, "/usr/mail/%s", getenv("LOGNAME"));
X#else
X sprintf(Mailbox, "/usr/spool/mail/%s", getenv("USER"));
X#endif /* SYSV */
X#endif /* UNIX */
X#ifdef MSDOS
X if ((cp = getenv("JOVERC")) && (*cp != '\0'))
X (void) joverc(cp);
X#endif /* MSDOS */
X (void) joverc(Joverc);
X if (!scanvec(argv, "-j")) {
X char tmpbuf[100];
X sprintf(tmpbuf, "%s/.joverc", HomeDir);
X (void) joverc(tmpbuf);
X }
X#ifndef MSDOS
X if (scanvec(argv, "-r"))
X dorecover();
X if (scanvec(argv, "-rc"))
X FullRecover();
X#endif /* MSDOS */
X ttinit(); /* initialize terminal (after ~/.joverc) */
X#ifndef IBMPC
X settout(ttbuf); /* not until we know baudrate */
X#endif
X
X#ifdef MSDOS
X (void) signal(SIGINT, SIG_IGN);
X break_off(); /* disable ctrl-c checking */
X#endif /* MSDOS */
X#ifdef UNIX
X (void) signal(SIGHUP, finish);
X (void) signal(SIGINT, finish);
X (void) signal(SIGBUS, finish);
X (void) signal(SIGSEGV, finish);
X (void) signal(SIGPIPE, finish);
X (void) signal(SIGTERM, SIG_IGN);
X#ifdef TIOCGWINSZ
X#ifdef SIGWINCH
X (void) signal(SIGWINCH, win_reshape);
X#endif
X#endif
X /* set things up to update the modeline every UpdFreq seconds */
X (void) signal(SIGALRM, updmode);
X (void) alarm((unsigned) (60 - (time((time_t *) 0) % 60)));
X#endif /* UNIX */
X
X ResetTerm();
X cl_scr(1);
X flusho();
X RedrawDisplay(); /* start the redisplay process. */
X DoKeys(0);
X finish(0);
X}
X
X#ifdef MSDOS
X
X#include <dos.h>
X
static char break_state;
X
X/* set the break state to off */
private void
break_off()
X{
X union REGS regs;
X
X regs.h.ah = 0x33; /* break status */
X regs.h.al = 0x00; /* request current state */
X intdos(®s, ®s);
X break_state = regs.h.dl;
X bdos(0x33, 0, 1); /* turn off break */
X}
X
X/* reset the break state */
private void
break_rst()
X{
X bdos(0x33, break_state, 1);
X}
X#endif
END_OF_FILE
if test 25416 -ne `wc -c <'./jove.c'`; then
echo shar: \"'./jove.c'\" unpacked with wrong size!
fi
# end of './jove.c'
fi
echo shar: End of archive 11 \(of 21\).
cp /dev/null ark11isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 21 archives.
rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0
--
Please send comp.sources.unix-related mail to rsalz at uunet.uu.net.
More information about the Comp.sources.unix
mailing list