xref: /original-bsd/old/lib2648/aminmax.c (revision 40192f2d)
1 /*
2  * Copyright (c) 1980 Regents of the University of California.
3  * All rights reserved.  The Berkeley software License Agreement
4  * specifies the terms and conditions for redistribution.
5  */
6 
7 #ifndef lint
8 static char sccsid[] = "@(#)aminmax.c	5.1 (Berkeley) 04/26/85";
9 #endif not lint
10 
11 /*
12  * aminmax: find the 4 edges of the glyph within a window.
13  * This version is approximate, in that it may include some
14  * blank areas.  But it's much faster because it doesn't have
15  * to call mat over and over.
16  */
17 
18 #include "bit.h"
19 
20 aminmax(g, nrow, ncol, rmin, cmin, rmax, cmax)
21 bitmat g;
22 int nrow, ncol;
23 int *rmin, *cmin, *rmax, *cmax;
24 {
25 	register int i, j;
26 	register int nc = (ncol+7)>>3;
27 	register int r1, r2, c1, c2;
28 
29 	r1 = nrow; c1 = nc; r2 = c2 = 0;
30 	for (i=0; i<nrow; i++)
31 		for (j=0; j<nc; j++)
32 			if (g[i*nc+j]) {
33 				r1 = min(r1, i);
34 				r2 = max(r2, i);
35 				c1 = min(c1, j);
36 				c2 = max(c2, j);
37 			}
38 	if (r2 < r1) {
39 		/* empty glyph! */
40 		r1 = c1 = r2 = c2 = 1;
41 	}
42 	*rmin = r1; *rmax = r2;
43 	*cmin = 8*c1; *cmax = 8*c2+7;
44 }
45