1 #ifndef lint 2 static char sccsid[] = "@(#)getstop.c 1.2 (CWI) 85/10/02"; 3 #endif lint 4 5 6 /* 7 * find the start points for the line drawing routines 8 */ 9 10 #include "defs.h" 11 #include "ext.h" 12 13 getstop() 14 { 15 register int i, c, k; 16 int junk, stopp; 17 18 stopp = 1; 19 for(i = 0; i < MAXLIN; i++) 20 linestop[i] = 0; 21 for(i = 0; i < nlin; i++){ 22 for(c = 0; c < ncol; c++){ 23 k = left(i, c, &junk); 24 if(k >= 0 && linestop[k] == 0) 25 linestop[k] = ++stopp; 26 } 27 } 28 if(boxflg || allflg || dboxflg) 29 linestop[0] = 1; 30 } 31 32 /* 33 * returns -1 if no line to left 34 * returns number of line where it starts 35 * stores into lwid the kind of line 36 */ 37 left(i, c, lwidp) 38 int i, c; 39 int *lwidp; 40 { 41 register int kind, li, lj; 42 43 *lwidp = 0; 44 kind = lefdata(i, c); 45 if(kind == 0) 46 return(-1); 47 if(i + 1 < nlin){ 48 if(lefdata(next (i), c) == kind) 49 return(-1); 50 } 51 while(i >= 0 && lefdata(i, c) == kind) 52 i = prev(li = i); 53 if(prev(li) == -1) 54 li = 0; 55 *lwidp = kind; 56 for(lj = i + 1; lj < li; lj++){ 57 if(instead[lj] && strcmp(instead[lj], ".TH") == 0) 58 return(li); 59 } 60 for(i = i + 1; i < li; i++){ 61 if(fullbot[i]) 62 li = i; 63 } 64 return(li); 65 } 66 67 lefdata(i, c) 68 { 69 register int ck; 70 71 if(i >= nlin) 72 i = nlin - 1; 73 if(ctype(i, c) == 's'){ 74 for(ck = c; ctype(i, ck) == 's'; ck--) 75 ; 76 if(thish(i, ck) == 0) 77 return(0); 78 } 79 i = stynum[i]; 80 i = lefline[i][c]; 81 if(i > 0) 82 return(i); 83 if(dboxflg && c == 0) 84 return(2); 85 if(allflg) 86 return(1); 87 if(boxflg && c == 0) 88 return(1); 89 return(0); 90 } 91 92 next(i) 93 { 94 while(i + 1 < nlin){ 95 i++; 96 if(!fullbot[i] && !instead[i]) 97 break; 98 } 99 return(i); 100 } 101 102 prev(i){ 103 while(--i >= 0 && (fullbot[i] || instead[i])) 104 ; 105 return(i); 106 } 107