Path: seismo!harvard!talcott!panda!sources-request From: sources-request@panda.UUCP Newsgroups: mod.sources Subject: tvx 5 of 10 Message-ID: <1493@panda.UUCP> Date: 9 Mar 86 22:50:46 GMT Sender: jpn@panda.UUCP Lines: 1747 Approved: jpn@panda.UUCP Mod.sources: Volume 4, Issue 19 Submitted by: gatech!unmvax!wampler (Bruce Wampler) #--------CUT---------CUT---------CUT---------CUT--------# ######################################################### # # # This is a shell archive file. To extract files: # # # # 1) Make a directory (like tvx) for the files. # # 2) Write a file, such as "filen.shar", containing # # this archive file into the directory. # # 3) Type "sh file.shar". Do not use csh. # # # ######################################################### # # echo Extracting tvx_2.c: sed 's/^X//' >tvx_2.c <<\SHAR_EOF X/* ======================================================================== X X tvx_2.c - Part 2 of main TVX code X X============================================================================ */ X X#include "tvx_defs.ic" /* note tv_defs will #include stdio.h */ X#include "tvx_glbl.ic" X X/* =============================>>> KILLIN <<<============================= */ X killin(cnt) X int cnt; X { /* ## killin - kill cnt lines */ X X SLOW int i,lim; X SLOW int from,to,ityp,istrt; X SLOW int s_curlin, s_curchr, s_echo; X X if (cut_mode) /* does kill "cut" */ X { X s_echo = echof; X echof = FALSE; /* turn off echo */ X s_curlin = curlin; /* save line */ X save(cnt,FALSE); /* save those lines */ X curlin = s_curlin; X echof = s_echo; /* restore things */ X } X X if (cnt+curlin >= nxtlin || (curlin == nxtlin-1 && cnt >= 0)) X { /* special case: deleting rest of buffer */ X svklin(nxtlin-1); X for (i = curlin ; i <= nxtlin-1 ; ) X kline(*(lines+i++)); X nxtlin = curlin--; X if (curlin > 0) X { X curchr = *(lines+curlin)+1; X newscr(); X } X else X { X curchr = 0; X tvclr(); X } X#ifdef SCR_BUF X ttflush(); X#endif X return; X } X X if (cnt < 0) /* negative kill */ X { X cnt = min(-cnt,curlin-1); /* all upwards? */ X dwnlin(-cnt); /* go up that far */ X } X X if (cnt != 0) X { X range(cnt,&to,&from); /* calculate the line numbers to kill */ X X curlin=to; /* remember new current line */ X X svklin(from); /* save one line */ X for (i = to ; i <= from ; ) /* mark lines deleted */ X kline(*(lines+i++)); X X lim = min(nxtlin-1,mxline); X for (++from ; from <= lim ; ) X { X *(lines+to++) = *(lines+from++); /* copy next line number */ X } X X nxtlin=to; X if (nxtlin == curlin) X --curlin; /* don't go past end */ X curchr = *(lines+curlin)+1; /* remember new current character */ X X if (cnt >= 0 && curlin+(tvlins-tvdlin) < nxtlin && X tvdlin < tvlins) /* killing down */ X { X tvxy(1,tvy); /* get to start of line */ X ityp=min(tvlins-tvdlin+1,nxtlin-curlin); X if (cnt!=1 || !ckline[0]) X { X tvescr(); /* erase the screen */ X istrt=curlin; X } X else X { X sendcs(ckline); X istrt=curlin+ityp-1; X tvxy(1,tvlins); X ityp=1; X } X tvtype(istrt,ityp); X tvhdln(); /* home to display line */ X } X else if ( cnt != 1) /* neg and > 1 too complicated */ X newscr(); /* kill up, just retype whole screen */ X else if (nxtlin < tvlins) /* top part of screen */ X { X if (*ckline) /* kill line defined */ X { X tvxy(1,tvy); /* get to start of line */ X sendcs(ckline); /* just need to kill the line */ X tvhdln(); X } X else X newscr(); /* rewrite it all */ X } X else if (tvdlin < tvlins) /* must be in last part of buffer */ X { X if (*ckline && *ctopb) /* kill line & topb defined */ X { X tvxy(1,tvy); /* get to start of line */ X sendcs(ckline); /* kill the line */ X if (curlin-tvdlin > 0) /* something to scroll */ X { X tvtopb(1); /* scroll down one line */ X tvtype(curlin-tvdlin,1); /* type the offscreen line */ X tvdlin++; /* will start display on next line */ X } X tvhdln(); X } X else X newscr(); /* rewrite it all */ X } X else /* if all else fails */ X newscr(); X } X#ifdef SCR_BUF X ttflush(); X#endif X } X X/* =============================>>> KLINE <<<============================= */ X kline(ptr) X BUFFINDEX ptr; X { /* kline - kill off the line beginning at buff position ptr */ X X SLOW BUFFINDEX i; X X for (i=ptr; *(buff+i) != ENDLINE ; ) /* insert GARBAGE to kill */ X *(buff+i++) = GARBAGE; X X *(buff+i) = GARBAGE; /* kill the endline */ X } X X/* =============================>>> KPREV <<<============================= */ X kprev() X { /* kprev - kill from cursor to beginning of line */ X X FAST int chrs; X X svklin(curlin); /* save one line */ X chrs = curchr - *(lines+curlin) - 1; /* how much to delete */ X if (chrs > 0) X delnxt(-chrs); /* won't cause a combine, so don't worry */ X } X X/* =============================>>> KREST <<<============================= */ X krest() X { /* krest - kill the rest of the line, not including cursor and ENDLINE */ X X SLOW int chrs; X SLOW BUFFINDEX i; X X svklin(curlin); /* save one line */ X chrs=0; X for (i=curchr; *(buff+i)!=ENDLINE; ++i) X ++chrs; /* count how much to delete */ X if (chrs > 0) X delnxt(chrs); /* won't cause combine, so don't worry */ X } X X/* =============================>>> NEATEN <<<============================= */ X int neaten(count) X int count; X { /* neaten - fill lines to current margin */ X X SLOW int oldef, i; X SLOW BUFFINDEX linbeg; X SLOW int retval; X X retval = TRUE; X oldef = echof; X if (count > 1) X echof = FALSE; X if (wraplm <= 1 || curlin >= nxtlin-1) X goto l900; /* work only if wrap limit turned on */ X X for (i=1 ; i<=count ; ++i) X { X beglin(); /* start at beginning of line */ X if (curlin >= nxtlin-1) X goto l900; X X /* don't neaten leading space, cr, period or tab */ X X if (*(buff+curchr) == '.') X { X dwnlin(1); X continue; /* skip dot commands */ X } X X while (*(buff+curchr)== ' ' || *(buff+curchr)==ENDLINE X || *(buff+curchr) == 9) X { X right(1); /* skip this line */ X } X X do X { X if (*(buff+curchr) == ENDLINE) X { X if (tvx+leftmg < wraplm) /* combine lines! */ X { X linbeg = *(lines+curlin+1)+1; X /* pt to first char of next line */ X if (*(buff+linbeg) == ' ' || *(buff+linbeg) == ENDLINE X || *(buff+linbeg) == 9 || *(buff+linbeg) == '.') X { X dwnlin(1); X break; /* no more combining */ X } X if (! neat1(1,32)) X goto l990; X goto NEATNEXT; /* tab over another word */ X } X else X { X dwnlin(1); /* no more combining on line */ X break; X } X } X XNEATNEXT: X if (*(buff+curchr-1)==' ' && tvx+leftmg >= wraplm) /* change to cr */ X { X if (! neat1(-1,CR)) /* delete the blank */ X goto l990; X break; X } X wordr(1); X } /*# end of the repeat */ X while (1); X } /*# end of the for */ Xl900: X echof = oldef; X if (oldef && count > 1) X newscr(); X#ifdef SCR_BUF X else X ttflush(); X#endif X X return (retval); X Xl990: /* failure return */ X retval = FALSE; X goto l900; X } X X/* =============================>>> NEAT1 <<<============================= */ X neat1(dir, val) X int dir, val; X { /* change character dir to val */ X X SLOW int oldwrp; X X oldwrp = wraplm; X wraplm = 0; X if (! delnxt(dir)) X goto l900; X if (! ins_chr(val)) X goto l900; X wraplm = oldwrp; X return (TRUE); Xl900: X wraplm = oldwrp; X return (FALSE); X } X X/* =============================>>> NEWSCR <<<============================= */ X newscr() X { /* newscr - retype entire screen, updating cursor position if necessary */ X X SLOW int ibeg,cnt; X X if (tvlins != tvhardlines || nxtlin-1 <= tvlins) X /* two kinds of screen rewrite */ X tvclr(); /* clear the screen and home */ X else X tvxy(1,1); X X finddl(&ibeg,&cnt); /* calculate where it will go */ X tvtype(ibeg,cnt); /* type it out */ X tvhdln(); /* home to display line */ X#ifdef SCR_BUF X ttflush(); X#endif X } X X/* =============================>>> OPENLN <<<============================= */ X openln(cnt) X int cnt; X { /* openln - open a new line */ X X FAST int i; X SLOW int pcnt, oldauto; X X oldauto = autoin; autoin = FALSE; /* don't allow autoindent */ X pcnt = cnt >= 0 ? cnt : (-cnt); /* only allow positive opens */ X for (i=1; i<=pcnt; ++i) X ins_chr(CR); /* insert right number of newlines */ X dwnlin(-pcnt); /* and goto beginning of the opened line */ X endlin(); X autoin = oldauto; X#ifdef SCR_BUF X ttflush(); X#endif X } X X/* =============================>>> RANGE <<<============================= */ X range(cnt,lbeg,lend) X int cnt,*lbeg,*lend; X { /* determine a legal line number range given cnt */ X X if (cnt <= 0) X { X *lbeg=max(curlin+cnt,1); X *lend=curlin; X if (cnt < 0) X *lend = (*lend)-1; X } X else X { X *lbeg=curlin; X *lend=min(nxtlin-1,curlin+cnt-1); X } X } X X/* =============================>>> RIGHT <<<============================= */ X right(cnt) X int cnt; X { /* move cursor right cnt characters X newlines count as one character */ X X FAST int change,i; X X change=0; /* nochange yet */ X if (cnt > 0) X { X for (i = 1 ; i <= cnt ; ++i) X { X if (*(buff+curchr)==ENDLINE) X { X if (curlin+1 >= nxtlin) X break; /* don't go beyond end! */ X ++curlin; X ++change; /* we've gone down one line */ X curchr = *(lines+curlin)+1; X } X else X ++curchr; X } X } X else if (cnt < 0) X { X cnt=(-cnt); X for (i = 1 ; i <= cnt ; ++i) X { X --curchr; X if (*(buff+curchr) == BEGLINE) X { X if (curlin > 1) X { X --curlin; X --change; X for (curchr = *(lines+curlin) ; *(buff+curchr)!=ENDLINE ; X ++curchr) X ; /* bump curchr to end of the line */ X } X else X { X ++curchr; X break; X } X } X } X } X if (change != 0) /* don't do unnecessary change */ X update(change); X tvhdln(); X#ifdef SCR_BUF X ttflush(); X#endif X } X X/* =============================>>> SEARCH <<<============================= */ X search(lexcnt,iarg) X int lexcnt,iarg; X { /* search - search down in buffer for a pattern */ X X SLOW char chr,c0,c1,c2; X static int slines; X SLOW int oldx,oldy,oldlin; X SLOW int change, searchv, lininc, newln, fold_wild; X SLOW int l,lbeg,is; X SLOW BUFFINDEX ib, bbeg, oldpos, nbbeg; X FAST int i; X X SLOW int how_match, set_len; /* how wild card matching happens */ X char *cp, *s_getset(); X SLOW int w_len,inset,extra_len; /* length of match */ X X static int lastsb = 0; X X lininc = (lexcnt >= 0 ) ? 1 : (-1); X searchv = FALSE; X newln = FALSE; /* haven't rubbed out 2nd line */ X X oldpos = curchr; /* need to remember for -f */ X oldx = tvx ; oldy = tvy ; oldlin = curlin; X X ins_mode = TRUE; /* so ttymode can echo right */ X X if (! iarg) X goto l100; /* get arg form search buffer */ X X tvmsg("Find?",FALSE); X X if (! grptch(&chr)) X goto l9000; X X slines=1; /* only one line so far */ X for (i = 0; chr != ESC && i < 100; ++i) /* read in the pattern */ X { X if (chr == delkey && rptcnt[rptuse] <= 0) /* edit interactive input */ X { X --i; /* adjust i for for loop ++i */ X if (i >= 0) /* wipe out chars on screen */ X { X if (sbuff[i] == 0) /* newline */ X { X --slines; ctrlch(CR); newln = TRUE; X } X else X { X if (newln) X { X tvcout('\\'); X ctrlch(sbuff[i]); X } X else X { X tvcout(BACKSPACE); X tvcout(' '); X tvcout(BACKSPACE); X if (sbuff[i] < ' ' && sbuff[i] != 27) X { X tvcout(BACKSPACE); X tvcout(' '); X tvcout(BACKSPACE); X } X } X } X --i; /* wipe the character */ X } X#ifdef SCR_BUF X ttflush(); X#endif X gkbd(&chr); /* get new char */ X continue; X } X sbuff[i]=chr; /* stuff it away */ X if (chr == LF) X { X#ifdef USELF X tvcout(chr); /*$$$ to ignore lfs in cr/lf systems */ X#endif X } X else if (chr == CR) X { X if (rptcnt[rptuse] <= 0) X ctrlch(chr); X ++slines; X sbuff[i]=0; /* end of a line */ X } X else X ctrlch(chr); /* echo character, handline control chars */ X X#ifdef SCR_BUF X ttflush(); X#endif X/*# fetch the next character */ X if (! grptch(&chr)) X goto l9000; X } X X tvcout('$'); /* echo the escape */ X tvxy(oldx,oldy); /* return to old location */ X X if (i>0) /* we got a new pattern */ X { X lastsb=i-1; /* last valid character */ X sbuff[i] = 0; /* make sure an EOS */ X } X fixend(); X Xl100: X extra_len = 0; X if (lininc < 0) X endlin(); X bbeg = curchr; /* start from current character first time */ X c0 = sbuff[0]; /* initial char of pattern */ X if (!xcases) /* get initial character of pattern */ X c0 = (c0 >= 'A' && c0 <= 'Z') ? c0+' ' : c0; X X for (l = curlin ; l < nxtlin && l ; l += lininc) /* l is same as l != 0 */ X { X if ( !c0 ) /* !c0 same as c0 == 0 */ X { X if (lastsb == 0) /* matching cr only? */ X { X dwnlin(1); /* go down one line */ X newscr(); /* screen needs updating */ X goto l8000; X } X else X { X for (ib = bbeg; *(buff+ib); ++ib) X ; X goto l1000; X } X } X Xl900: X if (c0 < ' ') /* save time, check if might be w.c. once */ X { X ib = bbeg; X if (*(buff+ib)) X goto l1000; X } X X for (ib=bbeg; *(buff+ib); ++ib) /* search current line */ X { X c2 = *(buff+ib); /* next char of buffer */ X if (!xcases) X c2 = (c2 >= 'A' && c2 <= 'Z') ? c2+' ' : c2; X X if (c2 != c0) X continue; /* first characters don't match */ X else if (lastsb == 0) X { /* one character pattern */ X curchr = ib+1; X curlin = l; X goto l5000; /* successful match */ X } X else X { X if ((c1 = sbuff[1]) < ' ') /* possible wild? */ X goto l1000; X c2 = *(buff+ib+1); X if (! xcases) /* fold to lower case */ X { X c1 = (c1 >= 'A' && c1 <= 'Z') ? c1+' ' : c1; X c2 = (c2 >= 'A' && c2 <= 'Z') ? c2+' ' : c2; /* clower */ X } X if ( c1 != c2 ) X continue; /* first two don't match */ X else X goto l1000; /* first two match, so possibility */ X } X } X X/* # fall thru => no match on this line */ Xl950: X bbeg = *(lines+l+lininc)+1; /* next beginning character */ X continue; /* go check next line */ X Xl1000: /* we have two characters matching! */ X nbbeg = ib; /* beginning of possible match in buff */ X lbeg = l; /* current line we are searching */ X how_match = 1; /* assume exact match */ X for (is = -1 ; ++is <= lastsb ; ) X { X if ((c1 = sbuff[is]) < ' ') /* possible wild card */ X { X if (c1 == W_span) X { X extra_len--; X how_match = 2; /* span match */ X continue; /* keep scanning search pat */ X } X else if (c1 == W_skip) /* skip? */ X { X extra_len--; X how_match = 0; /* skip match */ X continue; /* keep scanning search pat */ X } X else if ((cp = s_getset(c1,&set_len,&fold_wild)) == NULL) /* not wild */ X goto NOT_WILD; /* continue normally */ X X /* ok, to here, then have possible wild card match */ X X w_len = 0; X X for ( ; ; ) X { X chr = *(buff + nbbeg); /* pick up char */ X if (fold_wild) /* fold if not user */ X chr = clower(chr); X if (chr == ENDLINE) /* break on end of line */ X break; /* get out */ X X inset = s_inset(chr,cp,set_len); /* see if in set */ X if ((how_match > 0 && inset) || (how_match == 0 && !inset)) X { X nbbeg++; /* bump to next char */ X ++w_len; X if (how_match == 1) X break; /* only once on mode 1 */ X } X else X break; X } X X if (w_len <= 0) X { X ++bbeg; /* this part of line doesn't match */ X extra_len = 0; X if (c0 == 0) X goto l950; X else X goto l900; /* try rest of current line */ X } X X /* to here, then exit from wild card match */ X extra_len += w_len - 1; X how_match = 1; /* back to 1 again */ X continue; /* leave cursor on 1st unmatched */ X } X XNOT_WILD: X c2 = *(buff+nbbeg); X if (! xcases) /* fold to lower case */ X { X c1 = (c1 >= 'A' && c1 <= 'Z') ? c1+' ' : c1; X c2 = (c2 >= 'A' && c2 <= 'Z') ? c2+' ' : c2; /* clower */ X } X X if ( c1 != c2 ) X { X extra_len = 0; X ++bbeg; /* this part of line doesn't match */ X if (c0 == 0) X goto l950; X else X goto l900; /* try rest of current line */ X } X X /* regular matched sequence */ X X if (*(buff+nbbeg)==0 && lbeg+1 < nxtlin) X { X ++lbeg; X nbbeg = *(lines+lbeg)+1; /* point to next character */ X } X else X ++nbbeg; X } X X/*# fall through => found the pattern */ X curlin = lbeg; X curchr = nbbeg; X Xl5000: X change = curlin-oldlin; /* compute real line change */ X if ((slines > 1 && iarg) || tvdlin == tvlins || newln) X newscr(); X else X update(change); X goto l8000; X } X curchr = oldpos; /* reset things */ X tvxy(oldx, oldy); X if (slines > 1 && iarg) X newscr(); /* patch up screen */ X pat_buff[0] = 0; X tverrb("Not found "); /* announce failure a little */ X goto l9000; X Xl8000: /* success return */ X oldlen = lastsb+1+extra_len; /* remember the length */ X save_pat(); /* save the find pattern */ X savlen = (-1); /* haven't saved lines */ X searchv = TRUE; X Xl9000: X ins_mode = FALSE; X#ifdef SCR_BUF X ttflush(); X#endif X return (searchv); X } X X/* =============================>>> S_GETSET <<<============================= */ X char *s_getset(wildchr,set_len,fold) X char wildchr; /* wild card character */ X int *set_len, *fold; /* length of set, fold flag */ X { X static char sets[] = /* possible sets */ X { X 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', X 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', X 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', X '4', '5', '6', '7', '8', '9', '.', ',', '?', '!', X '[', ']', '{', '}', '(', ')', '<', '>', '\'','"', X '+', '-', '/', '*', '=', '@', '#', '$', '%', '^', X '&', '_', '~', '`', '|', '\\', ' ', 9, ';', ':', 0 X }; X X struct wild_set X { X char wch; X int s_start, s_len; X }; X X static struct wild_set wild_cards[] = X { X { W_letter, 0, 26 }, /* ^L is a letter, starts at 0, 26 long */ X { W_digit, 26, 10 }, /* ^D is digit, starts at 26, 10 long */ X { W_alpha, 0, 36 }, /* ^A is alpha numeric, start at 0, 36 long */ X { W_punc, 36, 4 }, /* ^P is punctuation, at 36, 4 long */ X { W_anything, 0, 70 }, /* ^X is any thing, whole set */ X { W_others, 36, 34 }, /* ^O is non-alphanum, start at 36, 32 long */ X { 0 , 0, 0 } /* end of set */ X }; X X SLOW int i; X X *fold = FALSE; /* assume won't fold */ X if (!use_wild) X return NULL; /* not there if not using! */ X X for (i = 0 ; wild_cards[i].wch ; ++i) /* scan list */ X { X if (wildchr == wild_cards[i].wch) /* found the one we want */ X { X *set_len = wild_cards[i].s_len; X *fold = TRUE; X return (&sets[ wild_cards[i].s_start ]); X } X } X if (wildchr == W_user) X { X *set_len = strlen(user_set); X return user_set; X } X else X return NULL; X X } X X/* =============================>>> S_inset <<<============================= */ X s_inset(c2,cp,set_len) X char c2, *cp; X int set_len; X { X FAST int i; X X for (i = 0 ; i < set_len ; ++i) X if (c2 == *(cp+i)) X return TRUE; X return FALSE; X } X X/* =============================>>> SETPAR <<<============================= */ X setpar(val,chr) X int val; X char chr; X { /* setpar - reset varoius parameters X syntax for setpar is [val]:, where [val] is the new value X of the parameter, : is the setpar command, and is the X letter of the parameter to set. */ X X chr = clower(chr); X X switch (chr) X { X case 'a': /* set auto indent */ X autoin = val > 0; X break; X X case 'c': /* cut mode */ X cut_mode = val > 0; X break; X X case 'e': /* expand tabs */ X tabspc = max(val,0); X verify(1); /* need to redisplay */ X break; X X case 'd': /* display line */ X if (val < 1 || val > tvlins) X tverrb("Bad par val"); X else X { X dsplin=val; X verify(1); X } X break; X X case 'f': /* set find mode */ X xcases = val <= 0; X break; X X case 'm': /* match wild cards */ X use_wild = val; X break; X X case 'o': X if (rdonly) X { X tverrb("Can't :o, R/O"); X break; X } X tvclr(); X ask("New output file name: ",dest_file,FNAMESIZE); X if (*dest_file) X rdonly = FALSE; X verify(1); X break; X X case 's': /* scroll lines */ X if (val < 0 || val > dsplin-1) X tverrb("Bad par val"); X else X scroll=val; X break; X X case 't': /* tty mode */ X tvclr(); X ttymode = val; X ttynext = 1000; X verify(1); X break; X X case 'r': /* change repeat buffer in use */ X if (val < 1 || val > REPEATBUFS) X tverrb("Bad par val"); X else X rptuse=val-1; /* adjust for 0 index int */ X break; X X case 'u': X tvclr(); X ask("Enter user wild card set: ",user_set,39); X verify(1); X break; X X case 'v': /* virtual window size */ X if (val < 3 || val > tvhardlines) X tverrb("Bad par val"); X else X { X tvlins = val; /* set to new display line */ X ddline = (tvlins / 2) + 1; /* fix home line */ X setdscrl(); /* set scroll value */ X dsplin = ddline; /* reset these */ X scroll = dscrl; X verify(1); /* update the screen */ X } X break; X X case 'w': /* change wrap width */ X wraplm=val; X break; X X default: X tverrb("Bad par name"); X } X#ifdef SCR_BUF X ttflush(); X#endif X } X X/* =============================>>> SNEXT <<<============================= */ X snext(lexcnt,iarg) X int lexcnt,iarg; X { /* snext - find a text pattern across page boundaries */ X X SLOW int ihow,pagout; X X if (lexcnt < 0) X { X tverrb("Search fails"); X return (FALSE); X } X X ihow=iarg; /* make a local copy */ X pagout=FALSE; X for(;;) X { X if (! search(lexcnt,ihow)) X { X wtpage(1); /* write out current page */ X ihow=FALSE; /* don't reread search pattern */ X pagout=TRUE; X if (! rdpage()) X { X tvclr(); /* no more text */ X tverrb("Search fails"); X return (FALSE); X } X } X else /* found it */ X { X if (pagout) X newscr(); X#ifdef SCR_BUF X else X ttflush(); X#endif X return (TRUE); X } X } X } X X/* =============================>>> STORE_RPT <<<============================= */ X store_rpt(dummy) X int dummy; X { /* start at current cursor position, insert into repeat buffer X identified until find >$$ or exceed size limit, deleting as it goes */ X X SLOW char chr; X SLOW int saved, i, val; X X beglin(); /* start by moving to beginning of current line */ X X if ((chr = *(buff+curchr)) != '#') /* get current char, which must be # */ X { X tverrb("Not a valid rpt buff"); X return (FALSE); X } X val = *(buff+curchr+1)-'0'; /* pick up buffer number */ X X if (!chk_rpt_nr(val)) X return FALSE; X X delnxt(4); /* delete the #n:< */ X X --val; /* change to relative */ X X saved = 0; /* no previous chars */ X for (i = 0 ; ; ++i) X { X chr = *(buff+curchr); /* get the character */ X X if (chr == ESC && i > 1 && rptbuf[val][i-1] == ESC && X rptbuf[val][i-2] == loop_end) X { X rptbuf[val][i-2] = 0; /* set to 0 */ X nxtrpt[val] = 0; X delnxt(2); /* delete the 27 and following CR */ X#ifdef SCR_BUF X ttflush(); X#endif X return TRUE; X } X if (++saved > 99) X { X tverrb("Only 100 chars in rpt"); X return FALSE; X } X if (chr == ENDLINE) X chr = CR; X rptbuf[val][i] = chr; /* save the char */ X delnxt(1); /* and delete it */ X } X } X X/* =============================>>> SVKLIN <<<============================= */ X svklin(lin) X int lin; X { /* svklin - save one line that will be killed */ X X SLOW BUFFINDEX from,to; X X to=0; X for (from= *(lines+lin)+1; *(buff+from)!=ENDLINE; ++from) X { X unkbuf[to]= *(buff+from); /* put it in unkill buffer */ X to = min(130,to+1); X } X unkbuf[to]=0; X } X X/* =============================>>> TOPPAG <<<============================= */ X toppag() X { /* toppag - move cursor to top of the page */ X X curlin=1; X curchr = *(lines+1)+1; /* first char of buffer */ X newscr(); X } X X/* =============================>>> TVIDEFS <<<============================= */ X tvidefs() X { /* initialize these AFTER opening, defaults set by -c */ X X dsplin=ddline; X scroll=dscrl; X xcases=dxcase; X } X X/* =============================>>> TVINIT <<<============================= */ X tvinit() X { /* perform initializations needed for tv edit */ X X FAST BUFFINDEX i; X FAST char *chrp; X SLOW char *lim; X char *malloc(); X X#ifdef MSDOS X BUFFINDEX coreleft(); /* !!! cii-86 dependent */ X#endif X X/* This is a time eater if a big buffer -- if your loader inits X mem to some known value, it might be possible to change GARBAGE X to that value (be sure no other conflicts, like EOS == 0) */ X X/* try for maximum size buffer */ X X#ifndef GEMDOS X if ((lines = (BUFFINDEX *) malloc((MAXLINE+1)*sizeof(BUFFINDEX))) X == NULL) /* line pointer array */ X exit(1); X#else Xif ((lines=(BUFFINDEX *)malloc((unsigned int)((MAXLINE+1)*sizeof(BUFFINDEX))) ) X == NULL) /* line pointer array */ X exit(1); X#endif X X#ifdef UNIX X for (mxbuff=MAXBUFF ; (buff = malloc(mxbuff+2))==NULL ; mxbuff -= 1000) X ; /* text buffer pointer */ X#endif X#ifdef OSCPM X for (mxbuff=MAXBUFF ; (buff = malloc(mxbuff+2))==NULL ; mxbuff -= 1000) X ; /* text buffer pointer */ X#endif X#ifdef GEMDOS X for (mxbuff = 60000L ; (buff = malloc((unsigned int) (mxbuff+2)))==NULL X ; mxbuff -= 1000L) X ; /* text buffer pointer */ X#endif X#ifdef MSDOS /* *** Cii-86 C compiler dependent! */ X X /* cii-86 requires you to manually leave some memory left over X for the I/O routines to use. 'coreleft' does this. Sigh. */ X X if ((mxbuff = (coreleft() - 5000) ) > MAXBUFF) X mxbuff = MAXBUFF; X for ( ; (buff = malloc(mxbuff+2))==NULL ; mxbuff -= 1000) X ; /* text buffer pointer */ X#endif X X mxline = MAXLINE; X X lim = buff + mxbuff; X for (chrp = buff ; chrp <= lim ; *chrp++ = GARBAGE ) X ; /* mark as all garbage */ X X curlin = /* init some stuff */ X oldlen = X curchr = 0; X X xoutcm = leftmg = nxtlin = nxtchr = tvdlin = 1; X *(buff+mxbuff) = ENDLINE; /* needs to be ENDLINE for save buffer */ X nxtsav=mxbuff; /* point to end of the buffer */ X X pat_buff[0] = 0; /* null pattern buffer */ X X X savlin = savlen = (-1); X for (i = 0 ; i < REPEATBUFS ; ++i) X { /* fix repeat buffers to initial state */ X rptbuf[i][0] = rptcnt[i]= nxtrpt[i] = rptbuf[i][1] = 0; X } X rptuse=0; /* start with first repeat buff */ X bakflg = FALSE; X ineof = X echof = TRUE; X } X X/* =============================>>> TVERR <<<============================= */ X tverr(str) X char str[]; X { /* tverr - display an error message on the last line of the screen X always writes on screen, returns to old position */ X X SLOW int oldx,oldy,oldxot,oldech; X X waserr = TRUE; X oldx=tvx ; oldy=tvy ; oldxot=xoutcm ; oldech=echof; X X ttynext = 1000; /* force new read */ X X echof = TRUE; /* always echo! */ X tvmsg(str,TRUE); /* print the message part */ X tvxy(oldx,oldy); X xoutcm=oldxot; X echof=oldech; /* restore to what it was */ X#ifdef SCR_BUF X ttflush(); X#endif X } X X/* =============================>>> TVERRB <<<============================= */ X tverrb(str) X char str[]; X { /* tverrb - display an error message on the last line of the screen X always writes on screen, returns to old position */ X X sendcs(cerrbg); X tverr(str); X sendcs(cerred); X#ifdef SCR_BUF X ttflush(); X#endif X } X X/* =============================>>> TVHDLN <<<============================= */ X tvhdln() X { /* tvhdln - home to display line */ X X SLOW int xf; X xf = findx(); X tvxy(xf,tvdlin); X } X X/* =============================>>> TVMSG <<<============================= */ X tvmsg(str,intty) X char str[]; X int intty; X { /* tvmsg - display a message on the last line of the screen */ X X FAST int i; X SLOW int oldtty; X X tvxy(1,tvhardlines); X tvelin(); X X oldtty = ttymode; X if (ttymode && intty) X { X ttymode = FALSE; X prompt(">"); X } X X for (i=0; str[i]; ctrlch(str[i++])) X ; X X if (oldtty) /* end with < if was ttymode */ X remark("<"); X X ttymode = oldtty; X#ifdef SCR_BUF X ttflush(); X#endif X } X X/* =============================>>> TVTYLN <<<============================= */ X tvtyln(chrptr) X BUFFINDEX chrptr; X { /* tvtyln - type a line on the screen without cr/lf */ X X#ifdef ULBD X FAST BUFFINDEX i; X X if (cundlb[0] || cboldb[0]) /* check for underline/bold */ X { X for (i = *(lines+curlin)+1 ; *(buff+i)!=ENDLINE ; ++i) X if (*(buff+i)==TOGUNDERLINE || *(buff+i)==TOGBOLD) X { X tvxy(1,tvy); X xoutcm=1; X tvplin(*(lines+curlin)+1); X return; X } X } X#endif X xoutcm=tvx; X tvplin(chrptr); X#ifdef SCR_BUF X ttflush(); X#endif X } X X/* =============================>>> UNKILL <<<============================= */ X int unkill() X { /* unkill the single last line killed */ X X SLOW char chrval; X FAST int i; X X openln(1); /* put the CR 1st - makes update pretty */ X for (i=0; unkbuf[i]; ++i) X { X chrval = unkbuf[i]; X if (! ins_chr(chrval)) /* unkill slowly by using insert */ X { X return (FALSE); X } X } X dwnlin(1); /* back to where we were */ X return (TRUE); X } X X/* =============================>>> UPDATE <<<============================= */ X update(change) X int change; X { /* update - update the screen when line position has changed X will not be used if any alterations have been made */ X X SLOW int abschg,bscrol; X X if (! echof) X return; X abschg = change; X X bscrol = (ctopb[0]==0) ? 0 : scroll; X X if (change < 0) /* have to scroll screen down */ X { X abschg = (-change); X if (tvdlin-abschg < 1) X newscr(); X else if (curlin < tvdlin) /* won't fit exactly */ X { X if (tvdlin >= dsplin-scroll && abschg!=1) X { X tvclr(); /* clear the screen */ X tvtype(1,tvlins); /* type out a screen */ X } X tvdlin=curlin; X } X else if (tvdlin-abschg >= dsplin-scroll) X tvdlin -= abschg; X else X { X if (tvdlin > dsplin-scroll) X { /* moving up from below display line */ X abschg=dsplin-scroll-(tvdlin-abschg); X tvdlin=dsplin-scroll; /* update */ X } X if (ctopb[0]==0) /* can't do reverse linefeeds */ X newscr(); /* no choice, redraw screen */ X else X { X tvtopb(abschg); /* make blank lines at top */ X tvtype(curlin-tvdlin+1,abschg); /* fill in */ X } X } X } X else if (change > 0) /* have to scroll screen up */ X if ((tvdlin+change>tvlins && tvdlin=tvlins) X newscr(); X else if (tvdlin < dsplin+bscrol || nxtlin-1 <= tvlins) X if (tvdlin+change > dsplin+bscrol && nxtlin-1 > tvlins) X newscr(); X else X tvdlin += change; X else if (nxtlin-curlin<=tvlins-tvdlin) /* on bottom part */ X { X if (tvdlin<=dsplin+bscrol && abschg!=1) X { X tvclr(); /* rewrite whole screen */ X tvtype(nxtlin-tvlins,tvlins); X } X tvdlin=min(tvlins,nxtlin-1)-(nxtlin-curlin)+1; X } X else X { X tvbotb(abschg); /* make room */ X tvxy(1,tvlins-abschg+1); /* home to right line */ X tvtype(curlin+tvlins-tvdlin-abschg+1,abschg); /* fix up screen */ X if (tvdlin < dsplin+bscrol) X tvdlin=dsplin; X } X tvhdln(); X#ifdef SCR_BUF X ttflush(); X#endif X } X X/* =============================>>> WORDR <<<============================= */ X wordr(cnt) X int cnt; X { /* wordr - move cursor over words */ X X SLOW int lim,words,incr,lenmov; X X lenmov=0; X if (cnt<0) X { X incr = (-1); /* change */ X lim = (-cnt); X } X else if (cnt == 0) X { X incr = -1; X lim = 0; X } X else X { X incr = 1; X lim = cnt; X } X X for (words=1; words<=lim; ++words) X { X if ((*(buff+curchr)==ENDLINE && incr>0) || X (*(buff+curchr-1)==BEGLINE && incr<0) ) X { X if (curlin+incr==nxtlin || curlin+incr<1) X break; /* at a buffer limit, so quit */ X dwnlin(incr); /* move up or down */ X lenmov += incr; X if (cnt<0) X endlin(); X continue; /* move to next word */ X } X X/* ok, first, skip over word characters */ X while (wrdchr(*(buff+curchr))) X { X if (*(buff+curchr-1)==BEGLINE && incr<=0) X goto l100; X else X { X curchr += incr; X lenmov += incr; X } X } X X/* now skip over remaining non word chars */ X while (! wrdchr(*(buff+curchr))) X { X if ((*(buff+curchr)==ENDLINE && incr>0) || (*(buff+curchr-1)==BEGLINE && X incr<0)) X break; X else X { X curchr += incr; X lenmov += incr; X } X } Xl100: ; X } X X if (incr < 0) /* move cursor to beginning of word */ X while (wrdchr(*(buff+curchr-1))) X { X curchr += incr; X lenmov += incr; X } X tvhdln(); X#ifdef SCR_BUF X ttflush(); X#endif X oldlen = lenmov ; savlen=(-1) ; X } X X/* =============================>>> WRDCHR <<<============================= */ X int wrdchr(chr) X char chr; X { /* wrdchr - determine if a character is a "word" type character */ X X if ((chr>='a' && chr <= 'z') || (chr >= 'A' && chr <= 'Z') || X (chr >= '0' && chr <= '9')) X return (TRUE); X else X return (FALSE); X } SHAR_EOF echo Extracting tvx_term.ic: sed 's/^X//' >tvx_term.ic <<\SHAR_EOF X/* ----------------- Various terminal definitions ---------------------- */ X/* ********************************************************************** */ X#ifdef IBMPC X EXTERN int addx = 31; /* amount to add to get x */ X EXTERN int addy = 31; /* to get y */ X EXTERN char cxychr = 0; /* true if convert xy bin to ascii */ X EXTERN char cversn[12] = "IBM-PC"; /* a version to identify config */ X EXTERN char cxy1st = 'l'; /* l if line first, c if column 1st */ X EXTERN char cxybeg[8] = {18,0,0,0,0,0,0,0}; /* start xy control seq */ X EXTERN char cxymid[8] = {0,0,0,0,0,0,0,0}; /* middle xy control seq */ X EXTERN char cxyend[8] = {0,0,0,0,0,0,0,0}; /* end sequence */ X EXTERN char cerrbg[8] = {16,0,0,0,0,0,0,0}; /* string to print when errors start */ X EXTERN char cerred[8] = {14,0,0,0,0,0,0,0}; /* when errors done */ X EXTERN char ctopb[8] = {3,0,0,0,0,0,0,0}; /* top blanks = reverse linefeed */ X EXTERN char cinit[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; X /* start up sequence */ X EXTERN char cendit[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; X /* to end session */ X EXTERN char cbotb[8] = {10,0,0,0,0,0,0,0}; /* bottom blank line sequence */ X EXTERN char celin[8] = {1,0,0,0,0,0,0,0}; /* erase to end of line */ X EXTERN char cescr[8] = {2,0,0,0,0,0,0,0}; /* erase to end of screen */ X EXTERN char cclears[8]={0,0,0,0,0,0,0,0}; /* clear screen, home cusor */ X EXTERN char cdelchr[8]={0,0,0,0,0,0,0,0}; /* delete char on screen */ X EXTERN char ccsrcm[8] = {20,0,0,0,0,0,0,0}; /* set cursor to command mode */ X EXTERN char ccsrin[8] = {19,0,0,0,0,0,0,0}; /* set cursor to insert mode */ X EXTERN char ciline[8] = {3,0,0,0,0,0,0,0}; /* insert a line */ X EXTERN char ckline[8] = {6,0,0,0,0,0,0,0}; /* kill a line */ X EXTERN char cundlb[8] = {4,0,0,0,0,0,0,0}; /* turn on underline */ X EXTERN char cundle[8] = {5,0,0,0,0,0,0,0}; /* turn off underline */ X EXTERN char cboldb[8] = {11,0,0,0,0,0,0,0}; /* start bold */ X EXTERN char cbolde[8] = {12,0,0,0,0,0,0,0}; /* end bold */ X X EXTERN int dsp_mem = 0; X EXTERN int ddline = 16; X EXTERN int dscrl = 0; X EXTERN int dxcase = 0; X#ifdef USECTRLZ X EXTERN int usecz = 1; X#else X EXTERN int usecz = 0; X#endif X EXTERN int autoin = 0; /* TRUE if auto indent, FALSE otherwise */ X EXTERN int logdef = 0; /* backup log file by default 0->no, 1-> yes */ X EXTERN char delkey = 8; X EXTERN int tvlins = 25; /* number of lines on screen */ X EXTERN int tvcols = 80; /* number of columns on screen */ X EXTERN int tvhardlines = 25; /* real number of lines */ X EXTERN int tvx = 0; /* current x cursor position */ X EXTERN int tvy = 0; /* current y cursor position */ X EXTERN int tvdlin = 0; /* the "active" display line */ X EXTERN int dsplin = 0; /* the default display line */ X EXTERN int tabspc = 8; /* spacing for tabs */ X EXTERN int leftmg = 0; /* left margin of display */ X EXTERN int wraplm = 0; /* auto wrap? */ X EXTERN int isibmpc = 1; /* for possible use with a general version */ X X#endif X/* ********************************************************************** */ X#ifdef TERMCAP X EXTERN int addx = 0; /* amount to add to get x */ X EXTERN int addy = 0; /* to get y */ X EXTERN char cxychr = 0; /* true if convert xy bin to ascii */ X EXTERN char cversn[12] = ":"; /* a version to identify config */ X EXTERN char cxy1st = 0; /* l if line first, c if column 1st */ X EXTERN char cxybeg[8] = {0,0,0,0,0,0,0,0}; /* start xy control seq */ X EXTERN char cxymid[8] = {0,0,0,0,0,0,0,0}; /* middle xy control seq */ X EXTERN char cxyend[8] = {0,0,0,0,0,0,0,0}; /* end sequence */ X EXTERN char cerrbg[8] = {0,0,0,0,0,0,0,0}; /* string to print when errors start */ X EXTERN char cerred[8] = {0,0,0,0,0,0,0,0}; /* when errors done */ X EXTERN char ctopb[8] = {0,0,0,0,0,0,0,0}; /* top blanks = reverse linefeed */ X EXTERN char cinit[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; X /* start up sequence */ X EXTERN char cendit[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; X /* to end session */ X EXTERN char cbotb[8] = {10,0,0,0,0,0,0,0}; /* bottom blank line sequence */ X EXTERN char celin[8] = {0,0,0,0,0,0,0,0}; /* erase to end of line */ X EXTERN char cescr[8] = {0,0,0,0,0,0,0,0}; /* erase to end of screen */ X EXTERN char cclears[8]={0,0,0,0,0,0,0,0}; /* clear screen, home cusor */ X EXTERN char cdelchr[8]={0,0,0,0,0,0,0,0}; /* delete char on screen */ X EXTERN char ccsrcm[8] = {0,0,0,0,0,0,0,0}; /* set cursor to command mode */ X EXTERN char ccsrin[8] = {0,0,0,0,0,0,0,0}; /* set cursor to insert mode */ X EXTERN char ciline[8] = {0,0,0,0,0,0,0,0}; /* insert a line */ X EXTERN char ckline[8] = {0,0,0,0,0,0,0,0}; /* kill a line */ X EXTERN char cundlb[8] = {0,0,0,0,0,0,0,0}; /* turn on underline */ X EXTERN char cundle[8] = {0,0,0,0,0,0,0,0}; /* turn off underline */ X EXTERN char cboldb[8] = {0,0,0,0,0,0,0,0}; /* start bold */ X EXTERN char cbolde[8] = {0,0,0,0,0,0,0,0}; /* end bold */ X X EXTERN int dsp_mem = 0; X EXTERN int ddline = 12; /* unix really needs scroll window */ X EXTERN int dscrl = 6; X EXTERN int dxcase = 0; X#ifdef USECTRLZ X EXTERN int usecz = 1; X#else X EXTERN int usecz = 0; X#endif X EXTERN int autoin = 0; /* TRUE if auto indent, FALSE otherwise */ X EXTERN int logdef = 0; /* backup log file by default 0->no, 1-> yes */ X EXTERN char delkey = 8; X EXTERN int tvlins = 0; /* number of lines on screen */ X EXTERN int tvcols = 0; /* number of columns on screen */ X EXTERN int tvhardlines = 0; /* real number of lines */ X EXTERN int tvx = 0; /* current x cursor position */ X EXTERN int tvy = 0; /* current y cursor position */ X EXTERN int tvdlin = 0; /* the "active" display line */ X EXTERN int dsplin = 0; /* the default display line */ X EXTERN int tabspc = 8; /* spacing for tabs */ X EXTERN int leftmg = 0; /* left margin of display */ X EXTERN int wraplm = 0; /* auto wrap? */ X EXTERN int isibmpc = 0; /* for possible use with a general version */ X X#endif X/* ********************************************************************** */ X#ifdef VT100 X EXTERN int addx = 0; /* amount to add to get x */ X EXTERN int addy = 0; /* to get y */ X EXTERN char cxychr = 1; /* true if convert xy bin to ascii */ X EXTERN char cversn[12] = "VT-100"; /* a version to identify config */ X EXTERN char cxy1st = 'l'; /* l if line first, c if column 1st */ X EXTERN char cxybeg[8] = {27,'[',0,0,0,0,0,0}; /* start xy control seq */ X EXTERN char cxymid[8] = {';',0,0,0,0,0,0,0}; /* middle xy control seq */ X EXTERN char cxyend[8] = {'H',0,0,0,0,0,0,0}; /* end sequence */ X EXTERN char cerrbg[8] = {7,0,0,0,0,0,0,0}; /* string to print when errors start */ X EXTERN char cerred[8] = {0,0,0,0,0,0,0,0}; /* when errors done */ X EXTERN char ctopb[8] = {27,'M',0,0,0,0,0,0}; /* top blanks = reverse linefeed */ X EXTERN char cinit[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; X /* start up sequence */ X EXTERN char cendit[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; X /* to end session */ X EXTERN char cbotb[8] = {10,0,0,0,0,0,0,0}; /* bottom blank line sequence */ X EXTERN char celin[8] = {27,'[','K',0,0,0,0,0}; /* erase to end of line */ X EXTERN char cescr[8] = {27,'[','J',0,0,0,0,0}; /* erase to end of screen */ X EXTERN char cclears[8]={0,0,0,0,0,0,0,0}; /* clear screen, home cusor */ X EXTERN char cdelchr[8]={0,0,0,0,0,0,0,0}; /* delete char on screen */ X EXTERN char ccsrcm[8] = {0,0,0,0,0,0,0,0}; /* set cursor to command mode */ X EXTERN char ccsrin[8] = {0,0,0,0,0,0,0,0}; /* set cursor to insert mode */ X EXTERN char ciline[8] = {0,0,0,0,0,0,0,0}; /* insert a line */ X EXTERN char ckline[8] = {0,0,0,0,0,0,0,0}; /* kill a line */ X EXTERN char cundlb[8] = {0,0,0,0,0,0,0,0}; /* turn on underline */ X EXTERN char cundle[8] = {0,0,0,0,0,0,0,0}; /* turn off underline */ X EXTERN char cboldb[8] = {0,0,0,0,0,0,0,0}; /* start bold */ X EXTERN char cbolde[8] = {0,0,0,0,0,0,0,0}; /* end bold */ X X EXTERN int dsp_mem = 0; X EXTERN int ddline = 16; X EXTERN int dscrl = 0; X EXTERN int dxcase = 0; X#ifdef USECTRLZ X EXTERN int usecz = 1; X#else X EXTERN int usecz = 0; X#endif X EXTERN int autoin = 0; /* TRUE if auto indent, FALSE otherwise */ X EXTERN int logdef = 0; /* backup log file by default 0->no, 1-> yes */ X EXTERN char delkey = 8; X EXTERN int tvlins = 24; /* number of lines on screen */ X EXTERN int tvcols = 80; /* number of columns on screen */ X EXTERN int tvhardlines = 24; /* real number of lines */ X EXTERN int tvx = 0; /* current x cursor position */ X EXTERN int tvy = 0; /* current y cursor position */ X EXTERN int tvdlin = 0; /* the "active" display line */ X EXTERN int dsplin = 0; /* the default display line */ X EXTERN int tabspc = 8; /* spacing for tabs */ X EXTERN int leftmg = 0; /* left margin of display */ X EXTERN int wraplm = 0; /* auto wrap? */ X EXTERN int isibmpc = 0; /* for possible use with a general version */ X#endif X/* ********************************************************************** */ X#ifdef ATARI520 /* like a 25 line VT-52! */ X EXTERN int addx = 31; /* amount to add to get x */ X EXTERN int addy = 31; /* to get y */ X EXTERN char cxychr = 0; /* true if convert xy bin to ascii */ X EXTERN char cversn[12] = "520ST"; /* a version to identify config */ X EXTERN char cxy1st = 'l'; /* l if line first, c if column 1st */ X EXTERN char cxybeg[8] = {27,'Y',0,0,0,0,0,0}; /* start xy control seq */ X EXTERN char cxymid[8] = {0,0,0,0,0,0,0,0}; /* middle xy control seq */ X EXTERN char cxyend[8] = {0,0,0,0,0,0,0,0}; /* end sequence */ X EXTERN char cerrbg[8] = {27,'p',0,0,0,0,0,0}; /* string to print when errors start */ X EXTERN char cerred[8] = {27,'q',0,0,0,0,0,0}; /* when errors done */ X EXTERN char ctopb[8] = {27,'I',0,0,0,0,0,0}; /* top blanks = reverse linefeed */ X EXTERN char cinit[20] = {27,'w',27,'e',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; X /* start up sequence */ X EXTERN char cendit[20] = {27,'v',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; X /* to end session */ X EXTERN char cbotb[8] = {10,0,0,0,0,0,0,0}; /* bottom blank line sequence */ X EXTERN char celin[8] = {27,'K',0,0,0,0,0,0}; /* erase to end of line */ X EXTERN char cescr[8] = {27,'J',0,0,0,0,0,0}; /* erase to end of screen */ X EXTERN char cclears[8]={27,'E',0,0,0,0,0,0}; /* clear screen, home cusor */ X EXTERN char cdelchr[8]={27,'M',0,0,0,0,0,0}; /* delete char on screen */ X EXTERN char ccsrcm[8] = {0,'y','4',0,0,0,0,0}; /* set cursor to command mode */ X EXTERN char ccsrin[8] = {0,'x','4',0,0,0,0,0}; /* set cursor to insert mode */ X EXTERN char ciline[8] = {27,'L',0,0,0,0,0,0}; /* insert a line */ X EXTERN char ckline[8] = {27,'M',0,0,0,0,0,0}; /* kill a line */ X EXTERN char cundlb[8] = {27,'p',0,0,0,0,0,0}; /* turn on underline */ X EXTERN char cundle[8] = {27,'q',0,0,0,0,0,0}; /* turn off underline */ X EXTERN char cboldb[8] = {27,'p',0,0,0,0,0,0}; /* start bold */ X EXTERN char cbolde[8] = {27,'q',0,0,0,0,0,0}; /* end bold */ X X EXTERN int dsp_mem = 0; X EXTERN int ddline = 16; X EXTERN int dscrl = 0; X EXTERN int dxcase = 0; X#ifdef USECTRLZ X EXTERN int usecz = 1; X#else X EXTERN int usecz = 0; X#endif X EXTERN int autoin = 0; /* TRUE if auto indent, FALSE otherwise */ X EXTERN int logdef = 0; /* backup log file by default 0->no, 1-> yes */ X EXTERN char delkey = 8; X EXTERN int tvlins = 25; /* number of lines on screen */ X EXTERN int tvcols = 80; /* number of columns on screen */ X EXTERN int tvhardlines = 25; /* real number of lines */ X EXTERN int tvx = 0; /* current x cursor position */ X EXTERN int tvy = 0; /* current y cursor position */ X EXTERN int tvdlin = 0; /* the "active" display line */ X EXTERN int dsplin = 0; /* the default display line */ X EXTERN int tabspc = 8; /* spacing for tabs */ X EXTERN int leftmg = 0; /* left margin of display */ X EXTERN int wraplm = 0; /* auto wrap? */ X EXTERN int isibmpc = 0; /* for possible use with a general version */ X#endif X/* ********************************************************************** */ X/* ********************************************************************** */ X#ifdef H19 X EXTERN int addx = 31; /* amount to add to get x */ X EXTERN int addy = 31; /* to get y */ X EXTERN char cxychr = 0; /* true if convert xy bin to ascii */ X EXTERN char cversn[12] = "H19"; /* a version to identify config */ X EXTERN char cxy1st = 'l'; /* l if line first, c if column 1st */ X EXTERN char cxybeg[8] = {27,'Y',0,0,0,0,0,0}; /* start xy control seq */ X EXTERN char cxymid[8] = {0,0,0,0,0,0,0,0}; /* middle xy control seq */ X EXTERN char cxyend[8] = {0,0,0,0,0,0,0,0}; /* end sequence */ X EXTERN char cerrbg[8] = {27,'p',0,0,0,0,0,0}; /* string to print when errors start */ X EXTERN char cerred[8] = {27,'q',0,0,0,0,0,0}; /* when errors done */ X EXTERN char ctopb[8] = {27,'I',0,0,0,0,0,0}; /* top blanks = reverse linefeed */ X EXTERN char cinit[20] = {27,'w',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; X /* start up sequence */ X EXTERN char cendit[20] = {27,'v',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; X /* to end session */ X EXTERN char cbotb[8] = {10,0,0,0,0,0,0,0}; /* bottom blank line sequence */ X EXTERN char celin[8] = {27,'K',0,0,0,0,0,0}; /* erase to end of line */ X EXTERN char cescr[8] = {27,'J',0,0,0,0,0,0}; /* erase to end of screen */ X EXTERN char cclears[8]={27,'E',0,0,0,0,0,0}; /* clear screen, home cusor */ X EXTERN char cdelchr[8]={27,'M',0,0,0,0,0,0}; /* delete char on screen */ X EXTERN char ccsrcm[8] = {27,'y','4',0,0,0,0,0}; /* set cursor to command mode */ X EXTERN char ccsrin[8] = {27,'x','4',0,0,0,0,0}; /* set cursor to insert mode */ X EXTERN char ciline[8] = {27,'L',0,0,0,0,0,0}; /* insert a line */ X EXTERN char ckline[8] = {27,'M',0,0,0,0,0,0}; /* kill a line */ X EXTERN char cundlb[8] = {27,'p',0,0,0,0,0,0}; /* turn on underline */ X EXTERN char cundle[8] = {27,'q',0,0,0,0,0,0}; /* turn off underline */ X EXTERN char cboldb[8] = {27,'p',0,0,0,0,0,0}; /* start bold */ X EXTERN char cbolde[8] = {27,'q',0,0,0,0,0,0}; /* end bold */ X X EXTERN int dsp_mem = 0; X EXTERN int ddline = 16; X EXTERN int dscrl = 0; X EXTERN int dxcase = 0; X#ifdef USECTRLZ X EXTERN int usecz = 1; X#else X EXTERN int usecz = 0; X#endif X EXTERN int autoin = 0; /* TRUE if auto indent, FALSE otherwise */ X EXTERN int logdef = 0; /* backup log file by default 0->no, 1-> yes */ X EXTERN char delkey = 8; X EXTERN int tvlins = 24; /* number of lines on screen */ X EXTERN int tvcols = 80; /* number of columns on screen */ X EXTERN int tvhardlines = 24; /* real number of lines */ X EXTERN int tvx = 0; /* current x cursor position */ X EXTERN int tvy = 0; /* current y cursor position */ X EXTERN int tvdlin = 0; /* the "active" display line */ X EXTERN int dsplin = 0; /* the default display line */ X EXTERN int tabspc = 8; /* spacing for tabs */ X EXTERN int leftmg = 0; /* left margin of display */ X EXTERN int wraplm = 0; /* auto wrap? */ X EXTERN int isibmpc = 0; /* for possible use with a general version */ X#endif X/* ********************************************************************** */ X#ifdef HP2621 X EXTERN int addx = -1; /* amount to add to get x */ X EXTERN int addy = -1; /* to get y */ X EXTERN char cxychr = 1; /* true if convert xy bin to ascii */ X EXTERN char cversn[12] = "HP2621x"; /* a version to identify config */ X EXTERN char cxy1st = 'l'; /* l if line first, c if column 1st */ X EXTERN char cxybeg[8] = {27,'&','a',0,0,0,0,0}; /* start xy control seq */ X EXTERN char cxymid[8] = {'y',0,0,0,0,0,0,0}; /* middle xy control seq */ X EXTERN char cxyend[8] = {'C',0,0,0,0,0,0,0}; /* end sequence */ X EXTERN char cerrbg[8] = {7,0,0,0,0,0,0,0}; /* string to print when errors start */ X EXTERN char cerred[8] = {0,0,0,0,0,0,0,0}; /* when errors done */ X EXTERN char ctopb[8] = {27,'L',0,0,0,0,0,0}; /* top blanks = reverse linefeed */ X EXTERN char cinit[20] = {27,'&','j','@',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; X /* start up sequence */ X EXTERN char cendit[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; X /* to end session */ X EXTERN char cbotb[8] = {10,0,0,0,0,0,0,0}; /* bottom blank line sequence */ X EXTERN char celin[8] = {27,'K',0,0,0,0,0,0}; /* erase to end of line */ X EXTERN char cescr[8] = {27,'J',0,0,0,0,0,0}; /* erase to end of screen */ X EXTERN char cclears[8]={27,'H',27,'J',0,0,0,0}; /* clear screen, home cusor */ X EXTERN char cdelchr[8]={27,'P',0,0,0,0,0,0}; /* delete char on screen */ X EXTERN char ccsrcm[8] = {27,'&','j','@',0,0,0,0}; /* set cursor to command mode */ X EXTERN char ccsrin[8] = {27,'&','j','B',0,0,0,0}; /* set cursor to insert mode */ X EXTERN char ciline[8] = {27,'L',0,0,0,0,0,0}; /* insert a line */ X EXTERN char ckline[8] = {27,'M',0,0,0,0,0,0}; /* kill a line */ X EXTERN char cundlb[8] = {0,'p',0,0,0,0,0,0}; /* turn on underline */ X EXTERN char cundle[8] = {0,'q',0,0,0,0,0,0}; /* turn off underline */ X EXTERN char cboldb[8] = {0,'p',0,0,0,0,0,0}; /* start bold */ X EXTERN char cbolde[8] = {0,'q',0,0,0,0,0,0}; /* end bold */ X X EXTERN int dsp_mem = 1; X EXTERN int ddline = 12; X EXTERN int dscrl = 6; X EXTERN int dxcase = 0; X#ifdef USECTRLZ X EXTERN int usecz = 1; X#else X EXTERN int usecz = 0; X#endif X EXTERN int autoin = 0; /* TRUE if auto indent, FALSE otherwise */ X EXTERN int logdef = 0; /* backup log file by default 0->no, 1-> yes */ X EXTERN char delkey = 8; X EXTERN int tvlins = 24; /* number of lines on screen */ X EXTERN int tvcols = 79; /* number of columns on screen */ X EXTERN int tvhardlines = 24; /* real number of lines */ X EXTERN int tvx = 0; /* current x cursor position */ X EXTERN int tvy = 0; /* current y cursor position */ X EXTERN int tvdlin = 0; /* the "active" display line */ X EXTERN int dsplin = 0; /* the default display line */ X EXTERN int tabspc = 8; /* spacing for tabs */ X EXTERN int leftmg = 0; /* left margin of display */ X EXTERN int wraplm = 0; /* auto wrap? */ X EXTERN int isibmpc = 0; /* for possible use with a general version */ X#endif X/* ********************************************************************** */ SHAR_EOF echo ALL DONE! exit 0