1*11595Sleres #ifndef lint 2*11595Sleres static char *sccsid = "@(#)misc.c 1.1 83/03/17"; 3*11595Sleres #endif 4*11595Sleres #include "externs.h" 5*11595Sleres 6*11595Sleres #define distance(x,y) (abs(x) >= abs(y) ? abs(x) + abs(y)/2 : abs(y) + abs(x)/2) 7*11595Sleres 8*11595Sleres range(fromship, toship) 9*11595Sleres register int fromship, toship; 10*11595Sleres { 11*11595Sleres int bow1r, bow1c, bow2r, bow2c; 12*11595Sleres int stern1r, stern1c, stern2c, stern2r; 13*11595Sleres register int bb, bs, sb, ss, result; 14*11595Sleres 15*11595Sleres if (fromship > scene[game].vessels 16*11595Sleres || toship > scene[game].vessels) /* just in case */ 17*11595Sleres return(30000); 18*11595Sleres if (!pos[toship].dir) 19*11595Sleres return(30000); 20*11595Sleres stern1r = bow1r = pos[fromship].row; 21*11595Sleres stern1c = bow1c = pos[fromship].col; 22*11595Sleres stern2r = bow2r = pos[toship].row; 23*11595Sleres stern2c = bow2c = pos[toship].col; 24*11595Sleres result = bb = distance((bow2r - bow1r), (bow2c - bow1c)); 25*11595Sleres if (bb < 5) 26*11595Sleres { 27*11595Sleres drdc(&stern2r, &stern2c, pos[toship].dir); 28*11595Sleres drdc(&stern1r, &stern1c, pos[fromship].dir); 29*11595Sleres bs = distance((bow2r - stern1r) ,(bow2c - stern1c)); 30*11595Sleres sb = distance((bow1r - stern2r) ,(bow1c - stern2c)); 31*11595Sleres ss = distance((stern2r - stern1r) ,(stern2c - stern1c)); 32*11595Sleres result = min(bb, min(bs, min(sb, ss))); 33*11595Sleres } 34*11595Sleres return(result); 35*11595Sleres } 36*11595Sleres 37*11595Sleres drdc(dr, dc, dir) 38*11595Sleres register int *dr, *dc; 39*11595Sleres int dir; 40*11595Sleres { 41*11595Sleres switch (dir) 42*11595Sleres { 43*11595Sleres case 1: 44*11595Sleres (*dr)++; 45*11595Sleres break; 46*11595Sleres case 2: 47*11595Sleres (*dr)++; 48*11595Sleres (*dc)--; 49*11595Sleres break; 50*11595Sleres case 3: 51*11595Sleres (*dc)--; 52*11595Sleres break; 53*11595Sleres case 4: 54*11595Sleres (*dr)--; 55*11595Sleres (*dc)--; 56*11595Sleres break; 57*11595Sleres case 5: 58*11595Sleres (*dr)--; 59*11595Sleres break; 60*11595Sleres case 6: 61*11595Sleres (*dr)--; 62*11595Sleres (*dc)++; 63*11595Sleres break; 64*11595Sleres case 7: 65*11595Sleres (*dc)++; 66*11595Sleres break; 67*11595Sleres case 8: 68*11595Sleres (*dr)++; 69*11595Sleres (*dc)++; 70*11595Sleres break; 71*11595Sleres } 72*11595Sleres } 73