AUSAM/source/ded/screen.c

#include "ded.h"
#include "char.h"

firstrow()
 { register int row;

    for (row=0; row<=LASTINROW; row++)
      if (!emptyrow(row)) return(row);

    return(LASTINROW+1);
 }

lastrow()
 { register int row;

    for (row=LASTINROW; row>=0; row--)
      if (!emptyrow(row)) return(row);

    return(-1);
 }

int emptyrow(srow)
int srow;
 { return(lastcol(srow)<0); }

int emptyscreen()
 { return(lastrow()<0); }

midrow()
 { return((lastrow()+firstrow())/2); }

int firstcol(srow)
int srow;
 { register int i;
    register char *linep;

    linep = rowmap[srow];
    for (i=0; i<=ncols-1; i++)
     if (*linep++ != c_SPACE) return(i);

    return(ncols);
 }

int lastcol(srow)
int srow;
 { register int i;
    register char *linep;

    linep = rowmap[srow]+ncols-1;
    for (i=ncols-1; i>=0; i--)
      if (*linep-- != c_SPACE) return(i);

    return (-1);
 }

int firstpos(srow)
int srow;
 { register int i;
    register char *linep;

    linep = rowmap[srow]+leftcol;
    for (i=leftcol; i<=rightcol; i++)
     if (*linep++ != c_SPACE) return(i);

    return(rightcol+1);
 }

int lastpos(srow)
int srow;
 { register int i;
    register char *linep;

    linep = rowmap[srow]+rightcol;
    for (i=rightcol; i>=leftcol; i--)
      if (*linep-- != c_SPACE) return(i);

    return (leftcol-1);
 }

/* return the next tab position - multiple of 8 */
int nextab(scol)
int scol;
 { if (scol<leftcol) return(leftcol);
    scol = (scol/8)*8+8;
    return(scol>=rightcol ? rightcol : scol);
 }

charsin(r1,r2)
int r1,r2;
 { register int count, row, cc;

    count = 0;

    for (row=r1; row<=r2; row++)
     { cc = lastcol(row) - firstcol(row)+1;
	if (cc>0) count =+ cc;
     }

    return(count);
 }