home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
vol_100
/
109_01
/
util_wp.c
< prev
next >
Wrap
Text File
|
1985-03-10
|
3KB
|
257 lines
/*
Utility functions for word processor
*/
#include <macdefs.wp>
#include <globals.wp>
#define fputc putc /* I keep getting it wrong */
/*
copy title from buf to ttl
*/
gettl(buf,ttl)
char *buf;
char *ttl;
{
while ( ! isspace(*buf) )
buf++;
while ( isspace(*buf) )
buf++;
if ( *buf == '\'' || *buf == '"' )
buf++;
strcpy(ttl,buf);
}
/*
space n lines or to bottom of page
*/
space(n)
int n;
{
brk();
if ( lineno > bottom )
return;
if( lineno == 0 )
phead();
skip(min(n,bottom+1-lineno));
lineno += n;
if ( lineno > bottom )
pfoot();
}
/*
put out a line with proper spacing and indenting
*/
put(buf)
char buf[];
{
int i;
if ( lineno == 0 || lineno > bottom )
phead();
for ( i=0; i < tival; i++ )
fputc(' ',outfile);
tival = inval;
fputs(buf,outfile);
skip(min(lsval-1,bottom-lineno));
lineno += lsval;
if ( lineno > bottom )
pfoot();
}
/*
delete leading blanks and set tival
*/
leadbl(buf)
char buf[];
{
int i;
brk();
for ( i = 0; buf[i] == ' '; i++ )
;
if ( buf[i] != '\n' )
tival = i;
strcpy(buf,&buf[i]);
}
/*
put out page header
*/
phead()
{
curpag = newpag++;
if ( m1val > 0 ) {
skip(m1val-1);
puttl(header,curpag);
}
skip(m2val);
lineno = m1val + m2val + 1;
}
/*
put out page footer
*/
pfoot()
{
skip(m3val);
if ( m4val > 0 )
puttl(footer,curpag);
skip(m4val-1);
lineno = 0;
}
/*
put out title line with optional page number
*/
puttl(buf,pageno)
char *buf;
int pageno;
{
char c;
while ( c = *buf++ )
if ( c == '#' )
fprintf(outfile,"%4d",pageno);
else
fputc(c,outfile);
}
/*
get a non-blank word from in[i] to out[]
and advance i
return length of out[]
*/
getwrd(in,i,out)
char in[];
int *i;
char out[];
{
int ii;
int j;
char c;
ii = *i;
while ( (c=in[ii]) == ' ' || c == '\t' )
++ii;
j = 0;
while ( (c=in[ii]) != ' ' && c != '\t' && c != '\n' && c != '\0' )
out[j++] = in[ii++];
out[j] = '\0';
*i = ii;
return j;
}
/*
output n blank lines
*/
skip(n)
int n;
{
int i;
for ( i = 0; i < n; i++ ) {
putc('\r',outfile);
putc('\n',outfile);
}
}
/*
minimum of two arguments
*/
min(a,b)
int a;
int b;
{
return a < b ? a : b;
}
/*
maximum of two arguments
*/
max(a,b)
int a;
int b;
{
return a > b ? a : b;
}
/*
compare strings for equality
make upper and lower case equivalent
*/
samestr(str1,str2)
char *str1,*str2;
{
while ( *str1 )
if ( toupper(*str1++) != toupper(*str2++) )
return 0;
if ( *str2 != '\0' )
return 0;
return 1;
}
/* -------------------------------------------------------
Name: index(s,t)
Result: position of s in t
Errors: notfound
Globals: ---
Macros: ---
Procedures:
Action: Return the position (index) in the
string s where string t begins,
or -1 if s doesn't contain t.
Uses 0 as starting position in s
------------------------------------------------------- */
index(s, t)
char s[], t[];
{
int i, j, k;
for (i = 0; s[i] != '\0'; i++) {
for (j=i, k=0; t[k]!='\0' && s[j]==t[k]; j++, k++)
;
if (t[k] == '\0')
return(i);
}
return -1;
}