TVX: PD Editor (4 of 7)
wampler at unmvax.UUCP
wampler at unmvax.UUCP
Tue Jan 14 07:41:32 AEST 1986
#--------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_lex.c:
sed 's/^X//' >tvx_lex.c <<\SHAR_EOF
X/* -------------------------- tvx_lex.c ----------------------------------- */
X#include "tvx_defs.ic"
X
X/* -------------------------- GLOBALS GO HERE -------------------------------*/
X#define EXTERN
X
X#include "tvx_glbl.ic"
X
X char clower(),cupper();
X
X/* =============================>>> CHECKOS <<<============================= */
X checkos()
X {
X /* check if ok operating system */
X#ifdef MSDOS
X if ((bdos(0x30,0) & 0xff) < 2) /* !!! cii-86 dependent */
X {
X remark("TVX requires MS-DOS 2.0 or later");
X exit();
X }
X#endif
X }
X
X/* =============================>>> STARTM <<<============================= */
X startm()
X {
X prompt("TVX - Full Screen Editor ");
X prompt(VERSION); prompt("Terminal: ");
X remark(cversn);
X remark("");
X remark("? for help");
X remark("");
X }
X
X/* =============================>>> MEMORY <<<============================= */
X memory()
X { /* memory - print memory left */
X
X SLOW int nxt,chrsavail;
X SLOW unsigned int tmp;
X
X char value[10],msg[85],*cp,stemp[80];
X
X nxt = 0; /* where message goes */
X
X stcopy(" Chrs left:",0,stemp,&nxt); /* add ' Chars: ' */
X
X#ifdef LASL
X tmp = max(nxtsav - nxtchr - BUFFLIMIT,0);
X#else
X tmp = nxtsav - nxtchr;
X#endif
X
X#ifdef INT16
X if (tmp > 30000) /* handle "neg" size */
X {
X stemp[nxt++] = '+';
X tmp -= 30000;
X }
X#endif
X
X itoa(tmp,value);
X stcopy(value,0,stemp,&nxt); /* the value */
X
X stcopy(" Last line:",0,stemp,&nxt); /* add ' Lines: ' */
X itoa(nxtlin-1,value);
X stcopy(value,0,stemp,&nxt); /* add the count */
X
X#ifdef STATCURLINE
X stcopy(" Cur line:",0,stemp,&nxt); /* add ' Cur line: ' */
X itoa(curlin,value);
X#endif
X#ifdef STATREPEAT
X stcopy(" Rpt:",0,stemp,&nxt); /* add ' Rpt: ' */
X itoa(rptuse+1,value);
X stcopy(value,0,stemp,&nxt); /* the count */
X
X stcopy("/",0,stemp,&nxt); /* add '/' */
X itoa(REPEATBUFS,value);
X#endif
X stcopy(value,0,stemp,&nxt);
X chrsavail=80-strlen(stemp);
X nxt=0; /* where message goes */
X cp = (*dest_file ? dest_file : orig_file);
X stcopy(cp,max(strlen(cp)-chrsavail,0),msg,&nxt); /* the file name */
X if (strlen(VERSION) <= chrsavail-nxt)
X {
X stcopy(VERSION,0,msg,&nxt); /* TVX */
X if (strlen(cversn) <= chrsavail-nxt)
X stcopy(cversn,0,msg,&nxt); /* terminal type */
X }
X stcopy(stemp,0,msg,&nxt); /* rest of string */
X
X tverr(msg); /* display line on screen */
X }
X
X/* =============================>>> SHOSET <<<============================= */
X shoset()
X { /* show repeat buffer, help if available */
X
X#ifdef HELP
X static char rp[2];
X FAST int i;
X SLOW char *cp, *msg;
X SLOW int fields, oldtty, hnum;
X SLOW unsigned tmp;
X
X#ifdef FULLHELP
X struct help_msg
X {
X char *hmsg;
X char Vmsg;
X };
X
X static struct help_msg cmddes[] = /* messages for help */
X {
X {"nApnd to sv buff", VSAPPEND},
X {" Buffer beg ", VTOP},
X {" File beg", VFBEGIN},
X {"nChange chars ", VCHANGE},
X {"nDown line ", VDOWNLINE},
X {"nDown column", VDOWNCOL},
X {" Buffer end ", VBOTTOM},
X {"nEdit rpt buffer", VEDITRPT},
X {"nFind", VSEARCH},
X {" Find cross-buff", VNEXT},
X {" Get save buffer", VGET},
X {" Unkill lastline", VUNKILL},
X {"nHalf page ", VHALFP},
X {"nInsert (to ESC)", VINSERT},
X {" Jump back", VJUMP},
X {"nKill character ", VDELNEXT},
X {"nKill line ", VKILLALL},
X {"nLeft", VLEFT},
X {" Memory status ", VMEMORY},
X {"nNote location ", VNOTELOC},
X {"nReset loc", VRETNOTE},
X {"nOpen line ", VOPENLINE},
X {" Call Opr system", VSYSTEM},
X {"nPage", VFLIP},
X {" Print screen ", VPRINTS},
X {"nRight ", VRIGHT},
X {" Restore rpt buf", VSTORERPT},
X {"nSave lines ", VSAVE},
X {"nTidy, fill text", VTIDY},
X {" Abort", VABORT},
X {"nUp ", VUPLINE},
X {"nUp column ", VUPCOL},
X {" Verify screen", VVERIFY},
X {"nWrite buffer ", VWPAGE},
X {" Exit, end edit ", VQUIT},
X {"nYank file", VYANK},
X {"nDel prev char ", VDELLAST},
X {"nFind again ", VSAGAIN},
X {" Del last", VREMOVE},
X {" Change last ", VRMVINS},
X {" Del to line beg", VKILLPREV},
X {" Del to line end", VKILLREST},
X {" Line begining ", VBEGLINE},
X {" Line end ", VENDLINE},
X {"nWord right", VMVWORD},
X {"nWord left ", VMVBWORD},
X {"nRepeat again ", VXREPEAT},
X {"nk Exec rpt k n times", VEXECRPT},
X {"n p Set param p ", VSETPARS},
X {" Help ", VHELP},
X {" Insert find pat", VINSPAT},
X {"/",0} /* last variable entry */
X };
X#endif
X
X oldtty = ttymode;
X ttymode = FALSE;
X if (!oldtty)
X tvclr();
X
X prompt("Parameter : cur val (1=y, 0=n) Prev 16 cmds:");
X for (hnum = 0,i = old_cindex ; hnum < 16 ; ++hnum)
X {
X shocout(old_cmds[i]);
X i = ++i % 16;
X }
X
X remark("");
X prompt("A-Autoindent: "); wtint(autoin);
X prompt(" T-TTY mode: "); wtint(ttymode);
X prompt(" E-Expand tabs: "); wtint(tabspc); remark("");
X
X prompt("F-Find: ignore case: ");
X if (xcases)
X tvcout('0');
X else
X tvcout('1');
X
X prompt(" M-Match wild cards: "); wtint(use_wild); remark("");
X prompt("U-User wild card set: "); remark(user_set);
X
X prompt("D disp line:"); wtint(dsplin);
X prompt(" S-Scroll window:"); wtint(scroll);
X prompt(" V-Virtual window:"); wtint(tvlins);
X prompt("/"); wtint(tvhardlines);
X prompt(" W-Wrap width:"); wtint(wraplm); remark("");
X prompt("O-Output file: "); prompt(dest_file);
X prompt(" (input file is: ");prompt(orig_file); remark(")");
X remark("");
X
X prompt("Find: |");
X for (cp = sbuff ; *cp ; ++cp)
X {
X shocout(*cp);
X }
X remark("|");
X remark("");
X prompt("Max chars: ");
X tmp = mxbuff;
X#ifdef INT16
X if (tmp > 30000) /* handle "neg" size */
X {
X prompt("30000+");
X tmp -= 30000;
X }
X#endif
X wtint(tmp); prompt(" Max lines: "); wtint(mxline);
X prompt(" Cur line: "); wtint(curlin);
X if (usecz)
X prompt(" ^Z for EOF");
X remark("");
X remark("");
X
X prompt("R-Repeat buffer: ");wtint(rptuse+1);
X remark(" All repeat buffers : <contents>:");
X for (i = 0 ; i < REPEATBUFS ; ++ i)
X {
X fields = 5;
X shocout('#') ; shocout(i+'1') ; prompt(": <");
X for (cp = &rptbuf[i][0] ; *cp ; ++cp)
X {
X shocout(*cp);
X ++fields; /* how many letters */
X if (*cp < ' ')
X ++fields;
X if (fields >= (tvcols - 6))
X {
X prompt("+more+");
X break;
X }
X }
X remark("");
X }
X
X ttymode = oldtty;
X memory();
X
X#ifdef FULLHELP
X tvxy(1,22);
X
X ask("Press space to exit, anything else for command list ",rp,1);
X
X if (*rp == ' ')
X {
X ttymode = oldtty;
X verify(1);
X return;
X }
X
X if (!oldtty)
X tvclr();
X
X remark("Commands (n => count allowed):");
X for (hnum = fields = 0 ; ; ++hnum )
X {
X prompt(" ");
X cp = cmddes[hnum].hmsg;
X if (*cp == '/') /* end of variable list */
X break;
X else
X shocout(*cp); /* show n or blank */
X msg = ++cp; /* where message is, skipping 'n' field */
X while (*cp) /* ship to lex value */
X ++cp;
X i = cmddes[hnum].Vmsg; /* get the lexical index */
X shocout(cupper(lexsym[i])); /* show the command */
X if (lexsym[i] >= ' ')
X shocout(' '); /* skip space for no '^' */
X
X shocout(' '); /* space to separate */
X prompt(msg); /* and show the message */
X if (++fields == 3) /* bump fields, see if need newline */
X {
X fields = 0;
X remark("");
X }
X }
X remark("");
X remark(" n<>$$ Rpt loop @ Invoke cmd file $ Escape");
X remark("Wild cards:");
Xremark("^A-alphanumeric ^D-digit ^L-letter ^O-other,(not-^A) ^P-punctuation");
Xremark("^X-any character ^U-user set -- ^W-word of ^.. ^N-not in word of ^..");
X
X#endif
X
X if (!oldtty)
X tvxy(1,24);
X ask("Press any key to resume ",rp,1);
X
X ttymode = oldtty;
X
X verify(1);
X#else
X tverr(&rptbuf[rptuse][0]);
X#endif
X }
X
X/* =============================>>> SHOCOUT <<<============================= */
X shocout(c)
X char c;
X {
X
X if (c < ' ')
X {
X ttwt('^'); ttwt(c + '@');
X }
X else
X ttwt(c);
X }
X
X/* =============================>>> LEXGET <<<============================= */
X lexget(chr)
X char *chr;
X { /* lexget - get a character for lex, possibly from repeat buffer */
X
X SLOW char tmp;
Xl10:
X if (rptcnt[rptuse] > 0) /* in a repeat buffer? */
X {
X *chr=rptbuf[rptuse][nxtrpt[rptuse]]; /* pick up from repeat buffer */
X if (*chr == SLOOPEND) /* at end of rpt buff */
X {
X nxtrpt[rptuse] = 0; /* start <> loop over */
X if (--rptcnt[rptuse] == 0 && !echof) /* all done with loop */
X {
X echof = TRUE; /* turn on echo again */
X newscr(); /* update screen after repeat */
X }
X goto l10; /* loop again */
X }
X ++nxtrpt[rptuse]; /* bump to next char in loop */
X }
X else /* not in loop, get from keyboard */
X {
X gkbd(&tmp); /* picks up one character from the keyboard */
X *chr = old_cmds[old_cindex] = tmp;
X old_cindex = ++old_cindex % 16;
X }
X }
X
X/* =============================>>> LEX <<<============================= */
X lex(lexval,lexcnt,lexchr,parsok)
X int *lexval,*lexcnt,parsok;
X char *lexchr;
X { /* ## lex - gets command input from terminal, and scans for
X # its lexical value. Returns a count if given. Also handles
X # repeat loops. */
X
X SLOW int count, lex_default;
X FAST int i;
X SLOW int neg, newln;
X
X static char chr,cmdchr,tchr;
X
X
X lex_default = TRUE;
X
X if (!parsok) /* abort if error in <> */
X {
X if (rptcnt[rptuse] > 0) /* in loop? */
X {
X newscr(); /* clear screen, send message */
X tverrb("<> not complete ");
X }
X rptcnt[rptuse]=0; /* abort loop if going */
X nxtrpt[rptuse]=0;
X }
Xl10:
X for (;;)
X { /* need this loop to support <> */
X count = 1; /* default count is 1 */
X
X lexget(&chr); /* fetch a character */
X if (rptcnt[rptuse]>0 && chr==SLOOPBEG) /* detect nesting */
X {
X nxtrpt[rptuse] = 0 ; rptcnt[rptuse] = 0 ; echof=TRUE;
X newscr(); /* update anything so far */
X tverrb("?No nesting ");
X continue;
X }
X
X if ((chr>='0' && chr<='9') || chr=='-') /* a number */
X {
X count = 0; lex_default = FALSE;
X neg = FALSE; /* handle negative counts */
X if (chr=='-')
X neg=TRUE;
X else
X count = chr-'0'; /* convert to int value */
X for (;;)
X {
X if (rptcnt[rptuse] > 0) /* have to handle rptbuf special */
X {
X chr=rptbuf[rptuse][nxtrpt[rptuse]];
X ++nxtrpt[rptuse];
X }
X else
X lexget(&chr);
X if (chr>='0' && chr<='9') /* another number? */
X count = count*10+chr-'0';
X else /* done with number */
X break;
X }
X if (neg) /* fix if it was negative */
X count = min(-count ,-1);
X }
X cmdchr = clower(chr); /* fold to one case */
X if (cmdchr == SLOOPBEG) /* starting a loop? */
X {
X lex_default = TRUE; /* don't let lex count be def */
X rptcnt[rptuse] = (count < 0) ? (-count) : count; /* save count */
X ins_mode = TRUE; /* so ttymode works */
X tvmsg("repeat[",FALSE); /* echo 'repeat[k]: n<' */
X wtint(rptuse+1); prompt("]: ");
X wtint(rptcnt[rptuse]);
X
X tvcout(SLOOPBEG);
X nxtrpt[rptuse]=0; /* begin inserting at beginning */
X newln = FALSE; /* no new line echo yet */
X do /* fetch repeat chars until get > */
X {
X gkbd(&chr); /* fetch a char */
X if (chr==delkey) /* allow editing */
X {
X if (nxtrpt[rptuse] > 0) /* don't go past start */
X {
X --nxtrpt[rptuse]; /* wipe out last */
X if ((tchr = rptbuf[rptuse][nxtrpt[rptuse]])==CR)
X {
X tvcout(CR); /* going to newline */
X#ifdef USELF
X tvcout(LF);
X#endif
X newln = TRUE; /* new line now */
X }
X else if (!newln)
X {
X tvcout(BACKSPACE); /* back over character */
X tvcout(' ');
X tvcout(BACKSPACE);
X if (tchr < ' ' && tchr != 27)
X {
X tvcout(BACKSPACE); /* back over char */
X tvcout(' ');
X tvcout(BACKSPACE);
X }
X }
X else /* have passed new line start */
X {
X ctrlch(rptbuf[rptuse][nxtrpt[rptuse]]);
X tvcout('\\');
X }
X }
X else
X tvcout(BELL); /* trying to rubout too much */
X continue;
X }
X else /* a control character detected */
X ctrlch(chr); /* echo */
X
X rptbuf[rptuse][nxtrpt[rptuse]]=chr; /* stuff in current rpt buff. */
X ++nxtrpt[rptuse]; /* bump count */
X if (nxtrpt[rptuse] >= 100) /* only allow 100 chars! */
X {
X newscr();
X tverrb("100 chars only");
X nxtrpt[rptuse]=0 ; rptcnt[rptuse]=0;
X ins_mode = FALSE;
X goto l10; /* bail out */
X }
X }
X while (!( chr==ESC && rptbuf[rptuse][nxtrpt[rptuse]-2]==ESC &&
X rptbuf[rptuse][nxtrpt[rptuse]-3]==SLOOPEND)); /* end do loop */
X
X ins_mode = FALSE; /* get ttymode right */
X
X if (rptcnt[rptuse] > 1 || newln) /* positive count? */
X echof = FALSE; /* turn off echoing */
X else /* 0 count */
X {
X fixend();
X tvhdln(); /* get back where we were */
X }
X
X rptbuf[rptuse][nxtrpt[rptuse]-2]=0;
X lstrpt[rptuse]=nxtrpt[rptuse]-3; /* bump back to end of buffer */
X nxtrpt[rptuse]=0; /* back for scan now */
X continue; /* now execute the loop */
X }
X#ifdef VB
X else if (cmdchr == '@') /*$$$ indirect files! */
X {
X opnatf();
X continue;
X }
X#endif
X for (i=0 ; synofr[i]!=0 ; ++i)
X if (synofr[i]==cmdchr)
X cmdchr=synoto[i]; /* allow synonyms */
X
X *lexval = UNKNOWN; /* assume unknown command */
X for (i = 1 ; i<= LEXVALUES ; ++i) /* scan all possible cmds */
X if (cmdchr == lexsym[i]) /* found it */
X {
X *lexval = i;
X break;
X }
X *lexcnt = count; /* return good stuff */
X *lexchr = chr;
X return (lex_default); /* let know if gave back default */
X } /* end of for(;;) */
X }
X/* ------------------------ tvx_lex.c --------------------------------- */
SHAR_EOF
echo Extracting tvx_lib.c:
sed 's/^X//' >tvx_lib.c <<\SHAR_EOF
X/*--------------------------------- tvx_lib.c ------------------------- */
X#include "tvx_defs.ic"
X#include "tvx_glbl.ic"
X
X#ifdef COMPILESTANDARD
X#define STANDARD /* the set of standard functions TVX use */
X#endif
X
X#define LOCAL static /* make locals to this module */
X
X/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
X
X/* following are some non-standard routines required by TVX */
X
X/* =============================>>> STCOPY <<<============================= */
X stcopy(from, i, to, j)
X char from[],to[];
X BUFFINDEX i,*j;
X { /* ## stcopy string, increment j */
X
X BUFFINDEX k1, k2;
X
X k2 = *j;
X for (k1 = i; from[k1] ; )
X {
X to[k2++] = from[k1++];
X }
X to[k2] = 0;
X *j = k2;
X }
X
X/* =============================>>> STrCOPY <<<============================= */
X strcopy(from, i, to, j)
X char from[],to[];
X int i,*j;
X { /* ## stcopy string, increment j */
X
X FAST int k1, k2;
X
X k2 = *j;
X for (k1 = i; from[k1] ; )
X {
X to[k2++] = from[k1++];
X }
X to[k2] = 0;
X *j = k2;
X }
X
X#ifndef GEMDOS
X/* =============================>>> MIN <<<============================= */
X min(v1,v2)
X int v1,v2;
X {
X return (v1 > v2 ? v2 : v1);
X }
X
X/* =============================>>> MAX <<<============================= */
X max(v1,v2)
X int v1,v2;
X {
X return (v1 > v2 ? v1 : v2);
X }
X#endif
X
X/*=============================>>> CLOWER <<<================================*/
X char clower(ch)
X char ch;
X {
X return ((ch >='A' && ch<='Z') ? ch + ' ' : ch);
X }
X
X/*=============================>>> CUPPER <<<================================*/
X char cupper(ch)
X char ch;
X {
X return ((ch >= 'a' && ch <= 'z') ? ch - ' ' : ch);
X }
X
X/* =========================>>> LOWER <<<==============================*/
X lower(str)
X char str[];
X {
X FAST int i;
X
X for (i=0 ; str[i] ; ++i)
X str[i]=clower(str[i]);
X
X }
X
X/* ===========================>>> PRINTC <<<============================== */
X printc(chr)
X char chr;
X { /* send one character to the printer */
X
X#ifdef MSDOS
X bdos(5,chr); /* cp/m, ms-dos version */
X#endif
X#ifdef GEMDOS
X gemdos(5,chr); /* gemdos version */
X#endif
X }
X
X/*=============================>>> PROMPT <<<================================*/
X prompt(msg)
X char msg[];
X {
X SLOW int i;
X i = strlen(msg);
X ttwtln(msg,i);
X }
X
X/*=============================>>> QUIT <<<================================*/
X quit()
X {
X exit(0);
X }
X
X/*=============================>>> RINDEX <<<================================*/
X rindex(str, c)
X char c, str[];
X { /* rindex - find last occurrence character c in string str */
X
X FAST int i,j;
X
X j = -1;
X for (i = 0 ; str[i] != 0; i++)
X if (str[i] == c)
X j = i;
X return (j);
X }
X
X/*=============================>>> REMARK <<<================================*/
X remark(msg)
X char msg[];
X {
X prompt(msg);
X ttwt(CR);
X#ifdef USELF
X ttwt(LF);
X#endif
X }
X
X/*=============================>>> UPPER <<<================================*/
X upper(str)
X char str[];
X {
X static int i;
X
X for (i=0 ; str[i] ; ++i)
X str[i]=cupper(str[i]);
X }
X
X/*=============================>>> WTINT <<<================================*/
X wtint(intg)
X int intg;
X {
X char chrep[10];
X itoa(intg,chrep);
X prompt(chrep);
X }
X
X/*=============================>>> LREPLY <<<================================*/
X lreply(msg,maxc)
X char msg[];
X int maxc;
X {
X reply(msg,maxc);
X lower(msg);
X }
X
X/*=============================>>> UREPLY <<<================================*/
X ureply(msg,maxc)
X char msg[];
X int maxc;
X {
X reply(msg,maxc);
X upper(msg);
X }
X
X/*=============================>>> REPLY <<<================================*/
X reply(msg,maxc)
X char msg[];
X int maxc;
X {
X#define CBS 8 /* Backspace */
X#define CDL1 21 /* ^U */
X#define CDL2 24 /* ^X */
X#define CABORT 3 /* ^C */
X#define CRET 13 /* cr */
X#define BACKSPACE 8
X
X static char ch, rp;
X static int i;
X SLOW int oldtty;
X
X oldtty = ttymode;
X ttymode = FALSE; /* change to regular mode */
X
X for (i = 0 ; i < maxc ; ) /* i -> next char */
X {
X ch = ttrd_(); /* read the character */
X if (ch == CBS) /* back space */
X {
X if (i > 0) /* must be something to delete */
X {
X --i; /* wipe out char */
X ttwt(BACKSPACE); ttwt(' '); ttwt(BACKSPACE);
X if (msg[i] < ' ') /* double echo ^ chrs */
X {
X ttwt(BACKSPACE); ttwt(' '); ttwt(BACKSPACE);
X }
X }
X }
X#ifdef USE_WIPE
X else if (ch == CDL1 || ch == CDL2) /* wipe whole line */
X {
X i = 0; /* set for loop ++ */
X remark("#");
X prompt("Re-enter? ");
X }
X#endif
X else if (ch == CABORT && !ins_mode)
X {
X remark("^C");
X prompt("Exit to operating system - are you sure? (y/n) ");
X rp = ttrd_();
X if (rp == 'y' || rp =='Y')
X {
X remark("y");
X reset(); /* need to reset things */
X exit(0);
X }
X remark("n");
X msg[i] = 0;
X prompt("Re-enter? "); prompt(msg); /* re-echo */
X }
X else if (ch == CRET) /* ret, so done */
X {
X remark("");
X msg[i] = 0;
X ttymode = oldtty;
X return;
X }
X else
X {
X msg[i++] = ch;
X msg[i] = 0; /* always 0 terminate */
X if (ch < ' ')
X {
X ch += '@';
X ttwt('^');
X }
X ttwt(ch); /* echo char */
X }
X } /* end for */
X
X ttymode = oldtty;
X remark("");
X }
X
X/* ============================>>> TTRD_ <<<================================ */
X ttrd_()
X {
X SLOW int tc;
X
X#ifdef OSCPM
X while (!(tc = bdos(6,-1))) /* cp/m implementation */
X ;
X#endif
X#ifdef MSDOS
X tc = bdos(7,-1); /* ms-dos implementation */
X#endif
X#ifdef GEMDOS
X tc = gemdos(7); /* ms-dos implementation */
X#endif
X#ifdef UNIX
X tc = ttrd();
X#endif
X
X return (tc & 0377);
X
X }
X
X/*=============================>>> RDINT <<<================================*/
X rdint(val)
X int *val;
X {
X char chrrep[12];
X reply(chrrep,11);
X *val = atoi(chrrep);
X return;
X }
X
X/* =============================>>> ITOA <<<============================= */
X itoa(intg, str)
X int intg;
X char str[];
X { /* itoa - convert integer int to char string in str */
X
X FAST int i;
X int d, intval, j;
X char k;
X static char digits[] = "0123456789";
X
X intval = intg >= 0 ? intg : (-intg);
X str[0] = 0;
X i = 0;
X do
X { /* generate digits */
X i++;
X d = intval % 10; /* mod 10 */
X str[i] = digits[d];
X intval = intval / 10;
X }
X while (intval != 0);
X if (intg < 0)
X { /* then sign */
X str[++i] = '-';
X }
X for (j = 0 ; j < i ; j++ )
X { /* then reverse */
X k = str[i];
X str[i--] = str[j];
X str[j] = k;
X }
X }
X
X/* ------------------------------------------------------------------------- */
X#ifdef STANDARD
X
X/* ============================>>> ATOI <<<================================ */
X atoi(in)
X char in[];
X { /* atoi - convert string : Ascii machines! */
X
X FAST int i;
X int d, val, neg;
X
X for (i=0 ; in[i] == ' ' || in[i] == '\t' ; i++)
X ;
X if (in[i] == '-') /* look for negative */
X {
X i++;
X neg=1;
X }
X else
X neg=0;
X for (val = 0; in[i] ; i++)
X {
X if (in[i]<'0' || in[i]>'9')
X break;
X d = in[i]-'0';
X val = 10 * val + d;
X }
X if (neg)
X val = (-val);
X return (val);
X }
X
X#endif
X/*--------------------------------- tvx_lib.c ------------------------- */
SHAR_EOF
echo ALL DONE!
exit 0
More information about the Comp.sources.unix
mailing list