30{
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77 Int ColCont=1, FirstD=0, GoSouth, GoEast, RowCont=1, ilow, imbloc,
78 inbloc, iupp, lcmt, lcmtnn=0, lcmt00, lmbloc, lnbloc, low, mb,
79 mblks, mbloc, mcur=0, mcurd, md=0, nb, nblks, nbloc, ncur=0,
80 ncurd, nd=0, npq=0, pmb, qnb, tmp1, tmp2, upp;
81
82
83
84
85 *NRPQ = 0; *NCPQ = 0; *IOFF = 0; *JOFF = 0;
87
88
89
90 if( ( mblks == 0 ) || ( nblks == 0 ) ) return;
91
92
93
99
100
101
102
103
104 GoSouth = ( lcmt00 > iupp );
105 GoEast = ( lcmt00 < ilow );
106
107
108
109 if( !( GoSouth ) && !( GoEast ) )
110 {
111
112
113
114
115
116 if( lcmt00 >= 0 )
117 {
118 tmp2 = ( ( tmp1 = imbloc - lcmt00 ) > 0 ? tmp1 : 0 );
119 if( tmp2 < inbloc ) { npq = tmp2; lcmtnn = -npq; }
120 else if ( tmp2 == inbloc ) { npq = inbloc; lcmtnn = 0; }
121 else { npq = inbloc; lcmtnn = lcmt00 + npq; }
122 *IOFF += lcmt00;
123 }
124 else
125 {
126 tmp2 = ( ( tmp1 = inbloc + lcmt00 ) > 0 ? tmp1 : 0 );
127 if( tmp2 < imbloc ) { npq = tmp2; lcmtnn = npq; }
128 else if ( tmp2 == imbloc ) { npq = tmp2; lcmtnn = 0; }
129 else { npq = imbloc; lcmtnn = lcmt00 - npq; }
130 *JOFF -= lcmt00;
131 }
132
133
134
135
136 md = 0; nd = 0; FirstD = 1;
137
138
139
140 *NRPQ = *NCPQ = npq;
141
142
143
144
145
146 GoSouth = !( GoEast = ( lcmt00 - iupp + upp - pmb < ilow ) );
147 }
148
149 if( GoSouth )
150 {
151
152
153
154 lcmt00 -= iupp - upp + pmb; mcur++;
155 if( !FirstD ) *IOFF += imbloc;
156
157
158
159
160 while( ( mcur < mblks ) && ( lcmt00 > upp ) )
161 {
162 lcmt00 -= pmb;
163 mcur++;
164 if( !FirstD ) *IOFF += mb;
165 }
166
167
168
169 if( mcur >= mblks ) goto l_end;
170
171
172
173
174
175
176 lcmt = lcmt00; mbloc = mb; mcurd = mcur;
177
178 while( ( mcurd < mblks ) && ( lcmt >= ilow ) )
179 {
180 if( mcurd == mblks-1 ) mbloc = lmbloc;
181
182
183
184
185
186 if( FirstD )
187 {
188 RowCont = RowCont &&
189 ( ( ( mcurd == md+1 ) && ( lcmtnn <= 0 ) && ( lcmt <= 0 ) ) ||
190 ( ( mcurd == md ) && ( ncur == nd+1 ) && ( lcmtnn == lcmt ) ) );
191 ColCont = ColCont &&
192 ( ( ( ncur == nd+1 ) && ( lcmtnn >= 0 ) && ( lcmt >= 0 ) ) ||
193 ( ( ncur == nd ) && ( mcurd == md+1 ) && ( lcmtnn == lcmt ) ) );
194 }
195
196
197
198
199 if( lcmt >= 0 )
200 {
201 tmp2 = ( ( tmp1 = mbloc - lcmt ) > 0 ? tmp1 : 0 );
202 if( tmp2 < inbloc ) { npq = tmp2; lcmtnn = -npq; }
203 else if ( tmp2 == inbloc ) { npq = inbloc; lcmtnn = 0; }
204 else { npq = inbloc; lcmtnn = lcmt + npq; }
205 if( !FirstD ) *IOFF += lcmt;
206 }
207 else
208 {
209 tmp2 = ( ( tmp1 = inbloc + lcmt ) > 0 ? tmp1 : 0 );
210 if( tmp2 < mbloc ) { npq = tmp2; lcmtnn = npq; }
211 else if ( tmp2 == mbloc ) { npq = tmp2; lcmtnn = 0; }
212 else { npq = mbloc; lcmtnn = lcmt - npq; }
213 if( !FirstD ) *JOFF -= lcmt;
214 }
215
216
217
218
219 md = mcurd; nd = ncur; FirstD = 1;
220
221
222
223
224 if( RowCont ) *NRPQ += npq;
225 if( ColCont ) *NCPQ += npq;
226
227
228
229 lcmt00 = lcmt;
230 lcmt -= pmb;
231 mcur = mcurd++;
232 }
233
234
235
236 lcmt00 += low - ilow + qnb; ncur++;
237 if( !FirstD ) *JOFF += inbloc;
238 }
239 else if( GoEast )
240 {
241
242
243
244 lcmt00 += low - ilow + qnb; ncur++;
245 if( !FirstD ) *JOFF += inbloc;
246
247
248
249
250 while( ( ncur < nblks ) && ( lcmt00 < low ) )
251 {
252 lcmt00 += qnb;
253 ncur++;
254 if( !FirstD ) *JOFF += nb;
255 }
256
257
258
259 if( ncur >= nblks ) goto l_end;
260
261
262
263
264
265 lcmt = lcmt00; nbloc = nb; ncurd = ncur;
266
267 while( ( ncurd < nblks ) && ( lcmt <= iupp ) )
268 {
269 if( ncurd == nblks-1 ) nbloc = lnbloc;
270
271
272
273
274
275 if( FirstD )
276 {
277 RowCont = RowCont &&
278 ( ( ( mcur == md+1 ) && ( lcmtnn <= 0 ) && ( lcmt <= 0 ) ) ||
279 ( ( mcur == md ) && ( ncurd == nd+1 ) && ( lcmtnn == lcmt ) ) );
280 ColCont = ColCont &&
281 ( ( ( ncurd == nd+1 ) && ( lcmtnn >= 0 ) && ( lcmt >= 0 ) ) ||
282 ( ( ncurd == nd ) && ( mcur == md+1 ) && ( lcmtnn == lcmt ) ) );
283 }
284
285
286
287
288 if( lcmt >= 0 )
289 {
290 tmp2 = ( ( tmp1 = imbloc - lcmt ) > 0 ? tmp1 : 0 );
291 if( tmp2 < nbloc ) { npq = tmp2; lcmtnn = -npq; }
292 else if ( tmp2 == nbloc ) { npq = nbloc; lcmtnn = 0; }
293 else { npq = nbloc; lcmtnn = lcmt + npq; }
294 if( !FirstD ) *IOFF += lcmt;
295 }
296 else
297 {
298 tmp2 = ( ( tmp1 = nbloc + lcmt ) > 0 ? tmp1 : 0 );
299 if( tmp2 < imbloc ) { npq = tmp2; lcmtnn = npq; }
300 else if ( tmp2 == imbloc ) { npq = tmp2; lcmtnn = 0; }
301 else { npq = imbloc; lcmtnn = lcmt - npq; }
302 if( !FirstD ) *JOFF -= lcmt;
303 }
304
305
306
307
308 md = mcur; nd = ncurd; FirstD = 1;
309
310
311
312
313 if( RowCont ) *NRPQ += npq;
314 if( ColCont ) *NCPQ += npq;
315
316
317
318 lcmt00 = lcmt; lcmt += qnb; ncur = ncurd++;
319 }
320
321
322
323 lcmt00 -= iupp - upp + pmb; mcur++;
324 if( !FirstD ) *IOFF += imbloc;
325 }
326
327
328
329 nbloc = nb;
330
331 while( ( RowCont || ColCont ) && ( ncur < nblks ) )
332 {
333 if( ncur == nblks-1 ) nbloc = lnbloc;
334
335
336
337
338 while( ( mcur < mblks ) && ( lcmt00 > upp ) )
339 {
340 lcmt00 -= pmb;
341 mcur++;
342 if( !FirstD ) *IOFF += mb;
343 }
344
345
346
347 if( mcur >= mblks ) goto l_end;
348
349
350
351
352
353
354 lcmt = lcmt00; mbloc = mb; mcurd = mcur;
355
356 while( ( mcurd < mblks ) && ( lcmt >= low ) )
357 {
358 if( mcurd == mblks-1 ) mbloc = lmbloc;
359
360
361
362
363
364 if( FirstD )
365 {
366 RowCont = RowCont &&
367 ( ( ( mcurd == md+1 ) && ( lcmtnn <= 0 ) && ( lcmt <= 0 ) ) ||
368 ( ( mcurd == md ) && ( ncur == nd+1 ) && ( lcmtnn == lcmt ) ) );
369 ColCont = ColCont &&
370 ( ( ( ncur == nd+1 ) && ( lcmtnn >= 0 ) && ( lcmt >= 0 ) ) ||
371 ( ( ncur == nd ) && ( mcurd == md+1 ) && ( lcmtnn == lcmt ) ) );
372 }
373
374
375
376
377 if( lcmt >= 0 )
378 {
379 tmp2 = ( ( tmp1 = mbloc - lcmt ) > 0 ? tmp1 : 0 );
380 if( tmp2 < nbloc ) { npq = tmp2; lcmtnn = -npq; }
381 else if ( tmp2 == nbloc ) { npq = nbloc; lcmtnn = 0; }
382 else { npq = nbloc; lcmtnn = lcmt + npq; }
383 if( !FirstD ) *IOFF += lcmt;
384 }
385 else
386 {
387 tmp2 = ( ( tmp1 = nbloc + lcmt ) > 0 ? tmp1 : 0 );
388 if( tmp2 < mbloc ) { npq = tmp2; lcmtnn = npq; }
389 else if ( tmp2 == mbloc ) { npq = tmp2; lcmtnn = 0; }
390 else { npq = mbloc; lcmtnn = lcmt - npq; }
391 if( !FirstD ) *JOFF -= lcmt;
392 }
393
394
395
396
397 md = mcurd; nd = ncur; FirstD = 1;
398
399
400
401
402 if( RowCont ) *NRPQ += npq;
403 if( ColCont ) *NCPQ += npq;
404
405
406
407 lcmt00 = lcmt;
408 lcmt -= pmb;
409 mcur = mcurd++;
410 }
411
412
413
414
415 lcmt00 += qnb; ncur++;
416 if( !FirstD ) *JOFF += nb;
417 }
418
419l_end:
420
421
422
423 if( !FirstD ) { *IOFF = 0; *JOFF = 0; }
424
425
426
427}