Coverage Report

Created: 2026-09-26 08:22

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/gdal/frmts/grib/degrib/g2clib/pack_gp.c
Line
Count
Source
1
/* pack_gp.f -- translated by f2c (version 20031025).
2
   You must link the resulting object file with libf2c:
3
  on Microsoft Windows system, link with libf2c.lib;
4
  on Linux or Unix systems, link with .../path/to/libf2c.a -lm
5
  or, if you install libf2c.a in a standard place, with -lf2c -lm
6
  -- in that order, at the end of the command line, as in
7
    cc *.o -lf2c -lm
8
  Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
9
10
    http://www.netlib.org/f2c/libf2c.zip
11
*/
12
13
/*#include "f2c.h"*/
14
#include "cpl_port.h"
15
#include <limits.h>
16
#include <stdlib.h>
17
#include "grib2.h"
18
typedef g2int logical;
19
343k
#define TRUE_ (1)
20
55.7k
#define FALSE_ (0)
21
22
/* Subroutine */ int pack_gp(integer *kfildo, integer *ic, integer *nxy,
23
  integer *is523, integer *minpk, integer *inc, integer *missp, integer
24
  *misss, integer *jmin, integer *jmax, integer *lbit, integer *nov,
25
  integer *ndg, integer *lx, integer *ibit, integer *jbit, integer *
26
  kbit, integer *novref, integer *lbitref, integer *ier)
27
946
{
28
    /* Initialized data */
29
30
946
    const  integer mallow = 1073741825;   /*  MALLOW=2**30+1  */
31
946
    integer ifeed = 12;
32
946
    integer ifirst = 0;
33
34
    /* System generated locals */
35
946
    integer i__1, i__2, i__3;
36
37
    /* Local variables */
38
946
    integer j, k, l;
39
946
    logical adda;
40
946
    integer ired, kinc, mina, maxa, minb = 0, maxb = 0, minc = 0, maxc = 0, ibxx2[31];
41
946
    char cfeed[1];
42
946
    integer nenda, nendb = 0, ibita, ibitb = 0, minak, minbk = 0, maxak, maxbk = 0,
43
946
      minck = 0, maxck, nouta = 0, lmiss, itest = 0, nount = 0;
44
946
    extern /* Subroutine */ int reduce(integer *, integer *, integer *,
45
946
      integer *, integer *, integer *, integer *, integer *, integer *,
46
946
      integer *, integer *, integer *, integer *);
47
946
    integer ibitbs = 0, mislla, misllb = 0, misllc = 0, iersav = 0, lminpk, ktotal,
48
946
      kounta, kountb = 0, kstart, mstart = 0, mintst = 0, maxtst = 0,
49
946
      kounts = 0, mintstk = 0, maxtstk = 0;
50
946
    integer *misslx;
51
52
53
/*        FEBRUARY 1994   GLAHN   TDL   MOS-2000 */
54
/*        JUNE     1995   GLAHN   MODIFIED FOR LMISS ERROR. */
55
/*        JULY     1996   GLAHN   ADDED MISSS */
56
/*        FEBRUARY 1997   GLAHN   REMOVED 4 REDUNDANT TESTS FOR */
57
/*                                MISSP.EQ.0; INSERTED A TEST TO BETTER */
58
/*                                HANDLE A STRING OF 9999'S */
59
/*        FEBRUARY 1997   GLAHN   ADDED LOOPS TO ELIMINATE TEST FOR */
60
/*                                MISSS WHEN MISSS = 0 */
61
/*        MARCH    1997   GLAHN   CORRECTED FOR SECONDARY MISSING VALUE */
62
/*        MARCH    1997   GLAHN   CORRECTED FOR USE OF LOCAL VALUE */
63
/*                                OF MINPK */
64
/*        MARCH    1997   GLAHN   CORRECTED FOR SECONDARY MISSING VALUE */
65
/*        MARCH    1997   GLAHN   CHANGED CALCULATING NUMBER OF BITS */
66
/*                                THROUGH EXPONENTS TO AN ARRAY (IMPROVED */
67
/*                                OVERALL PACKING PERFORMANCE BY ABOUT */
68
/*                                35 PERCENT!).  ALLOWED 0 BITS FOR */
69
/*                                PACKING JMIN( ), LBIT( ), AND NOV( ). */
70
/*        MAY      1997   GLAHN   A NUMBER OF CHANGES FOR EFFICIENCY. */
71
/*                                MOD FUNCTIONS ELIMINATED AND ONE */
72
/*                                IFTHEN ADDED.  JOUNT REMOVED. */
73
/*                                RECOMPUTATION OF BITS NOT MADE UNLESS */
74
/*                                NECESSARY AFTER MOVING POINTS FROM */
75
/*                                ONE GROUP TO ANOTHER.  NENDB ADJUSTED */
76
/*                                TO ELIMINATE POSSIBILITY OF VERY */
77
/*                                SMALL GROUP AT THE END. */
78
/*                                ABOUT 8 PERCENT IMPROVEMENT IN */
79
/*                                OVERALL PACKING.  ISKIPA REMOVED; */
80
/*                                THERE IS ALWAYS A GROUP B THAT CAN */
81
/*                                BECOME GROUP A.  CONTROL ON SIZE */
82
/*                                OF GROUP B (STATEMENT BELOW 150) */
83
/*                                ADDED.  ADDED ADDA, AND USE */
84
/*                                OF GE AND LE INSTEAD OF GT AND LT */
85
/*                                IN LOOPS BETWEEN 150 AND 160. */
86
/*                                IBITBS ADDED TO SHORTEN TRIPS */
87
/*                                THROUGH LOOP. */
88
/*        MARCH    2000   GLAHN   MODIFIED FOR GRIB2; CHANGED NAME FROM */
89
/*                                PACKGP */
90
/*        JANUARY  2001   GLAHN   COMMENTS; IER = 706 SUBSTITUTED FOR */
91
/*                                STOPS; ADDED RETURN1; REMOVED STATEMENT */
92
/*                                NUMBER 110; ADDED IER AND * RETURN */
93
/*        NOVEMBER 2001   GLAHN   CHANGED SOME DIAGNOSTIC FORMATS TO */
94
/*                                ALLOW PRINTING LARGER NUMBERS */
95
/*        NOVEMBER 2001   GLAHN   ADDED MISSLX( ) TO PUT MAXIMUM VALUE */
96
/*                                INTO JMIN( ) WHEN ALL VALUES MISSING */
97
/*                                TO AGREE WITH GRIB STANDARD. */
98
/*        NOVEMBER 2001   GLAHN   CHANGED TWO TESTS ON MISSP AND MISSS */
99
/*                                EQ 0 TO TESTS ON IS523.  HOWEVER, */
100
/*                                MISSP AND MISSS CANNOT IN GENERAL BE */
101
/*                                = 0. */
102
/*        NOVEMBER 2001   GLAHN   ADDED CALL TO REDUCE; DEFINED ITEST */
103
/*                                BEFORE LOOPS TO REDUCE COMPUTATION; */
104
/*                                STARTED LARGE GROUP WHEN ALL SAME */
105
/*                                VALUE */
106
/*        DECEMBER 2001   GLAHN   MODIFIED AND ADDED A FEW COMMENTS */
107
/*        JANUARY  2002   GLAHN   REMOVED LOOP BEFORE 150 TO DETERMINE */
108
/*                                A GROUP OF ALL SAME VALUE */
109
/*        JANUARY  2002   GLAHN   CHANGED MALLOW FROM 9999999 TO 2**30+1, */
110
/*                                AND MADE IT A PARAMETER */
111
/*        MARCH    2002   GLAHN   ADDED NON FATAL IER = 716, 717; */
112
/*                                REMOVED NENDB=NXY ABOVE 150; */
113
/*                                ADDED IERSAV=0; COMMENTS */
114
115
/*        PURPOSE */
116
/*            DETERMINES GROUPS OF VARIABLE SIZE, BUT AT LEAST OF */
117
/*            SIZE MINPK, THE ASSOCIATED MAX (JMAX( )) AND MIN (JMIN( )), */
118
/*            THE NUMBER OF BITS NECESSARY TO HOLD THE VALUES IN EACH */
119
/*            GROUP (LBIT( )), THE NUMBER OF VALUES IN EACH GROUP */
120
/*            (NOV( )), THE NUMBER OF BITS NECESSARY TO PACK THE JMIN( ) */
121
/*            VALUES (IBIT), THE NUMBER OF BITS NECESSARY TO PACK THE */
122
/*            LBIT( ) VALUES (JBIT), AND THE NUMBER OF BITS NECESSARY */
123
/*            TO PACK THE NOV( ) VALUES (KBIT).  THE ROUTINE IS DESIGNED */
124
/*            TO DETERMINE THE GROUPS SUCH THAT A SMALL NUMBER OF BITS */
125
/*            IS NECESSARY TO PACK THE DATA WITHOUT EXCESSIVE */
126
/*            COMPUTATIONS.  IF ALL VALUES IN THE GROUP ARE ZERO, THE */
127
/*            NUMBER OF BITS TO USE IN PACKING IS DEFINED AS ZERO WHEN */
128
/*            THERE CAN BE NO MISSING VALUES; WHEN THERE CAN BE MISSING */
129
/*            VALUES, THE NUMBER OF BITS MUST BE AT LEAST 1 TO HAVE */
130
/*            THE CAPABILITY TO RECOGNIZE THE MISSING VALUE.  HOWEVER, */
131
/*            IF ALL VALUES IN A GROUP ARE MISSING, THE NUMBER OF BITS */
132
/*            NEEDED IS 0, AND THE UNPACKER RECOGNIZES THIS. */
133
/*            ALL VARIABLES ARE INTEGER.  EVEN THOUGH THE GROUPS ARE */
134
/*            INITIALLY OF SIZE MINPK OR LARGER, AN ADJUSTMENT BETWEEN */
135
/*            TWO GROUPS (THE LOOKBACK PROCEDURE) MAY MAKE A GROUP */
136
/*            SMALLER THAN MINPK.  THE CONTROL ON GROUP SIZE IS THAT */
137
/*            THE SUM OF THE SIZES OF THE TWO CONSECUTIVE GROUPS, EACH OF */
138
/*            SIZE MINPK OR LARGER, IS NOT DECREASED.  WHEN DETERMINING */
139
/*            THE NUMBER OF BITS NECESSARY FOR PACKING, THE LARGEST */
140
/*            VALUE THAT CAN BE ACCOMMODATED IN, SAY, MBITS, IS */
141
/*            2**MBITS-1; THIS LARGEST VALUE (AND THE NEXT SMALLEST */
142
/*            VALUE) IS RESERVED FOR THE MISSING VALUE INDICATOR (ONLY) */
143
/*            WHEN IS523 NE 0.  IF THE DIMENSION NDG */
144
/*            IS NOT LARGE ENOUGH TO HOLD ALL THE GROUPS, THE LOCAL VALUE */
145
/*            OF MINPK IS INCREASED BY 50 PERCENT.  THIS IS REPEATED */
146
/*            UNTIL NDG WILL SUFFICE.  A DIAGNOSTIC IS PRINTED WHENEVER */
147
/*            THIS HAPPENS, WHICH SHOULD BE VERY RARELY.  IF IT HAPPENS */
148
/*            OFTEN, NDG IN SUBROUTINE PACK SHOULD BE INCREASED AND */
149
/*            A CORRESPONDING INCREASE IN SUBROUTINE UNPACK MADE. */
150
/*            CONSIDERABLE CODE IS PROVIDED SO THAT NO MORE CHECKING */
151
/*            FOR MISSING VALUES WITHIN LOOPS IS DONE THAN NECESSARY; */
152
/*            THE ADDED EFFICIENCY OF THIS IS RELATIVELY MINOR, */
153
/*            BUT DOES NO HARM.  FOR GRIB2, THE REFERENCE VALUE FOR */
154
/*            THE LENGTH OF GROUPS IN NOV( ) AND FOR THE NUMBER OF */
155
/*            BITS NECESSARY TO PACK GROUP VALUES ARE DETERMINED, */
156
/*            AND SUBTRACTED BEFORE JBIT AND KBIT ARE DETERMINED. */
157
158
/*            WHEN 1 OR MORE GROUPS ARE LARGE COMPARED TO THE OTHERS, */
159
/*            THE WIDTH OF ALL GROUPS MUST BE AS LARGE AS THE LARGEST. */
160
/*            A SUBROUTINE REDUCE BREAKS UP LARGE GROUPS INTO 2 OR */
161
/*            MORE TO REDUCE TOTAL BITS REQUIRED.  IF REDUCE SHOULD */
162
/*            ABORT, PACK_GP WILL BE EXECUTED AGAIN WITHOUT THE CALL */
163
/*            TO REDUCE. */
164
165
/*        DATA SET USE */
166
/*           KFILDO - UNIT NUMBER FOR OUTPUT (PRINT) FILE. (OUTPUT) */
167
168
/*        VARIABLES IN CALL SEQUENCE */
169
/*              KFILDO = UNIT NUMBER FOR OUTPUT (PRINT) FILE.  (INPUT) */
170
/*               IC( ) = ARRAY TO HOLD DATA FOR PACKING.  THE VALUES */
171
/*                       DO NOT HAVE TO BE POSITIVE AT THIS POINT, BUT */
172
/*                       MUST BE IN THE RANGE -2**30 TO +2**30 (THE */
173
/*                       THE VALUE OF MALLOW).  THESE INTEGER VALUES */
174
/*                       WILL BE RETAINED EXACTLY THROUGH PACKING AND */
175
/*                       UNPACKING.  (INPUT) */
176
/*                 NXY = NUMBER OF VALUES IN IC( ).  ALSO TREATED */
177
/*                       AS ITS DIMENSION.  (INPUT) */
178
/*              IS523  = missing value management */
179
/*                       0=data contains no missing values */
180
/*                       1=data contains Primary missing values */
181
/*                       2=data contains Primary and secondary missing values */
182
/*                       (INPUT) */
183
/*               MINPK = THE MINIMUM SIZE OF EACH GROUP, EXCEPT POSSIBLY */
184
/*                       THE LAST ONE.  (INPUT) */
185
/*                 INC = THE NUMBER OF VALUES TO ADD TO AN ALREADY */
186
/*                       EXISTING GROUP IN DETERMINING WHETHER OR NOT */
187
/*                       TO START A NEW GROUP.  IDEALLY, THIS WOULD BE */
188
/*                       1, BUT EACH TIME INC VALUES ARE ATTEMPTED, THE */
189
/*                       MAX AND MIN OF THE NEXT MINPK VALUES MUST BE */
190
/*                       FOUND.  THIS IS "A LOOP WITHIN A LOOP," AND */
191
/*                       A SLIGHTLY LARGER VALUE MAY GIVE ABOUT AS GOOD */
192
/*                       RESULTS WITH SLIGHTLY LESS COMPUTATIONAL TIME. */
193
/*                       IF INC IS LE 0, 1 IS USED, AND A DIAGNOSTIC IS */
194
/*                       OUTPUT.  NOTE:  IT IS EXPECTED THAT INC WILL */
195
/*                       EQUAL 1.  THE CODE USES INC PRIMARILY IN THE */
196
/*                       LOOPS STARTING AT STATEMENT 180.  IF INC */
197
/*                       WERE 1, THERE WOULD NOT NEED TO BE LOOPS */
198
/*                       AS SUCH.  HOWEVER, KINC (THE LOCAL VALUE OF */
199
/*                       INC) IS SET GE 1 WHEN NEAR THE END OF THE DATA */
200
/*                       TO FORESTALL A VERY SMALL GROUP AT THE END. */
201
/*                       (INPUT) */
202
/*               MISSP = WHEN MISSING POINTS CAN BE PRESENT IN THE DATA, */
203
/*                       THEY WILL HAVE THE VALUE MISSP OR MISSS. */
204
/*                       MISSP IS THE PRIMARY MISSING VALUE AND  MISSS */
205
/*                       IS THE SECONDARY MISSING VALUE .  THESE MUST */
206
/*                       NOT BE VALUES THAT WOULD OCCUR WITH SUBTRACTING */
207
/*                       THE MINIMUM (REFERENCE) VALUE OR SCALING. */
208
/*                       FOR EXAMPLE, MISSP = 0 WOULD NOT BE ADVISABLE. */
209
/*                       (INPUT) */
210
/*               MISSS = SECONDARY MISSING VALUE INDICATOR (SEE MISSP). */
211
/*                       (INPUT) */
212
/*             JMIN(J) = THE MINIMUM OF EACH GROUP (J=1,LX).  (OUTPUT) */
213
/*             JMAX(J) = THE MAXIMUM OF EACH GROUP (J=1,LX).  THIS IS */
214
/*                       NOT REALLY NEEDED, BUT SINCE THE MAX OF EACH */
215
/*                       GROUP MUST BE FOUND, SAVING IT HERE IS CHEAP */
216
/*                       IN CASE THE USER WANTS IT.  (OUTPUT) */
217
/*             LBIT(J) = THE NUMBER OF BITS NECESSARY TO PACK EACH GROUP */
218
/*                       (J=1,LX).  IT IS ASSUMED THE MINIMUM OF EACH */
219
/*                       GROUP WILL BE REMOVED BEFORE PACKING, AND THE */
220
/*                       VALUES TO PACK WILL, THEREFORE, ALL BE POSITIVE. */
221
/*                       HOWEVER, IC( ) DOES NOT NECESSARILY CONTAIN */
222
/*                       ALL POSITIVE VALUES.  IF THE OVERALL MINIMUM */
223
/*                       HAS BEEN REMOVED (THE USUAL CASE), THEN IC( ) */
224
/*                       WILL CONTAIN ONLY POSITIVE VALUES.  (OUTPUT) */
225
/*              NOV(J) = THE NUMBER OF VALUES IN EACH GROUP (J=1,LX). */
226
/*                       (OUTPUT) */
227
/*                 NDG = THE DIMENSION OF JMIN( ), JMAX( ), LBIT( ), AND */
228
/*                       NOV( ).  (INPUT) */
229
/*                  LX = THE NUMBER OF GROUPS DETERMINED.  (OUTPUT) */
230
/*                IBIT = THE NUMBER OF BITS NECESSARY TO PACK THE JMIN(J) */
231
/*                       VALUES, J=1,LX.  (OUTPUT) */
232
/*                JBIT = THE NUMBER OF BITS NECESSARY TO PACK THE LBIT(J) */
233
/*                       VALUES, J=1,LX.  (OUTPUT) */
234
/*                KBIT = THE NUMBER OF BITS NECESSARY TO PACK THE NOV(J) */
235
/*                       VALUES, J=1,LX.  (OUTPUT) */
236
/*              NOVREF = REFERENCE VALUE FOR NOV( ).  (OUTPUT) */
237
/*             LBITREF = REFERENCE VALUE FOR LBIT( ).  (OUTPUT) */
238
/*                 IER = ERROR RETURN. */
239
/*                       706 = VALUE WILL NOT PACK IN 30 BITS--FATAL */
240
/*                       714 = ERROR IN REDUCE--NON-FATAL */
241
/*                       715 = NGP NOT LARGE ENOUGH IN REDUCE--NON-FATAL */
242
/*                       716 = MINPK INCEASED--NON-FATAL */
243
/*                       717 = INC SET = 1--NON-FATAL */
244
/*                       (OUTPUT) */
245
/*                   * = ALTERNATE RETURN WHEN IER NE 0 AND FATAL ERROR. */
246
247
/*        INTERNAL VARIABLES */
248
/*               CFEED = CONTAINS THE CHARACTER REPRESENTATION */
249
/*                       OF A PRINTER FORM FEED. */
250
/*               IFEED = CONTAINS THE INTEGER VALUE OF A PRINTER */
251
/*                       FORM FEED. */
252
/*                KINC = WORKING COPY OF INC.  MAY BE MODIFIED. */
253
/*                MINA = MINIMUM VALUE IN GROUP A. */
254
/*                MAXA = MAXIMUM VALUE IN GROUP A. */
255
/*               NENDA = THE PLACE IN IC( ) WHERE GROUP A ENDS. */
256
/*              KSTART = THE PLACE IN IC( ) WHERE GROUP A STARTS. */
257
/*               IBITA = NUMBER OF BITS NEEDED TO HOLD VALUES IN GROUP A. */
258
/*                MINB = MINIMUM VALUE IN GROUP B. */
259
/*                MAXB = MAXIMUM VALUE IN GROUP B. */
260
/*               NENDB = THE PLACE IN IC( ) WHERE GROUP B ENDS. */
261
/*               IBITB = NUMBER OF BITS NEEDED TO HOLD VALUES IN GROUP B. */
262
/*                MINC = MINIMUM VALUE IN GROUP C. */
263
/*                MAXC = MAXIMUM VALUE IN GROUP C. */
264
/*              KTOTAL = COUNT OF NUMBER OF VALUES IN IC( ) PROCESSED. */
265
/*               NOUNT = NUMBER OF VALUES ADDED TO GROUP A. */
266
/*               LMISS = 0 WHEN IS523 = 0.  WHEN PACKING INTO A */
267
/*                       SPECIFIC NUMBER OF BITS, SAY MBITS, */
268
/*                       THE MAXIMUM VALUE THAT CAN BE HANDLED IS */
269
/*                       2**MBITS-1.  WHEN IS523 = 1, INDICATING */
270
/*                       PRIMARY MISSING VALUES, THIS MAXIMUM VALUE */
271
/*                       IS RESERVED TO HOLD THE PRIMARY MISSING VALUE */
272
/*                       INDICATOR AND LMISS = 1.  WHEN IS523 = 2, */
273
/*                       THE VALUE JUST BELOW THE MAXIMUM (I.E., */
274
/*                       2**MBITS-2) IS RESERVED TO HOLD THE SECONDARY */
275
/*                       MISSING VALUE INDICATOR AND LMISS = 2. */
276
/*              LMINPK = LOCAL VALUE OF MINPK.  THIS WILL BE ADJUSTED */
277
/*                       UPWARD WHENEVER NDG IS NOT LARGE ENOUGH TO HOLD */
278
/*                       ALL THE GROUPS. */
279
/*              MALLOW = THE LARGEST ALLOWABLE VALUE FOR PACKING. */
280
/*              MISLLA = SET TO 1 WHEN ALL VALUES IN GROUP A ARE MISSING. */
281
/*                       THIS IS USED TO DISTINGUISH BETWEEN A REAL */
282
/*                       MINIMUM WHEN ALL VALUES ARE NOT MISSING */
283
/*                       AND A MINIMUM THAT HAS BEEN SET TO ZERO WHEN */
284
/*                       ALL VALUES ARE MISSING.  0 OTHERWISE. */
285
/*                       NOTE THAT THIS DOES NOT DISTINGUISH BETWEEN */
286
/*                       PRIMARY AND SECONDARY MISSING WHEN SECONDARY */
287
/*                       MISSING ARE PRESENT.  THIS MEANS THAT */
288
/*                       LBIT( ) WILL NOT BE ZERO WITH THE RESULTING */
289
/*                       COMPRESSION EFFICIENCY WHEN SECONDARY MISSING */
290
/*                       ARE PRESENT.  ALSO NOTE THAT A CHECK HAS BEEN */
291
/*                       MADE EARLIER TO DETERMINE THAT SECONDARY */
292
/*                       MISSING ARE REALLY THERE. */
293
/*              MISLLB = SET TO 1 WHEN ALL VALUES IN GROUP B ARE MISSING. */
294
/*                       THIS IS USED TO DISTINGUISH BETWEEN A REAL */
295
/*                       MINIMUM WHEN ALL VALUES ARE NOT MISSING */
296
/*                       AND A MINIMUM THAT HAS BEEN SET TO ZERO WHEN */
297
/*                       ALL VALUES ARE MISSING.  0 OTHERWISE. */
298
/*              MISLLC = PERFORMS THE SAME FUNCTION FOR GROUP C THAT */
299
/*                       MISLLA AND MISLLB DO FOR GROUPS B AND C, */
300
/*                       RESPECTIVELY. */
301
/*            IBXX2(J) = AN ARRAY THAT WHEN THIS ROUTINE IS FIRST ENTERED */
302
/*                       IS SET TO 2**J, J=0,30. IBXX2(30) = 2**30, WHICH */
303
/*                       IS THE LARGEST VALUE PACKABLE, BECAUSE 2**31 */
304
/*                       IS LARGER THAN THE INTEGER WORD SIZE. */
305
/*              IFIRST = SET BY DATA STATEMENT TO 0.  CHANGED TO 1 ON */
306
/*                       FIRST */
307
/*                       ENTRY WHEN IBXX2( ) IS FILLED. */
308
/*               MINAK = KEEPS TRACK OF THE LOCATION IN IC( ) WHERE THE */
309
/*                       MINIMUM VALUE IN GROUP A IS LOCATED. */
310
/*               MAXAK = DOES THE SAME AS MINAK, EXCEPT FOR THE MAXIMUM. */
311
/*               MINBK = THE SAME AS MINAK FOR GROUP B. */
312
/*               MAXBK = THE SAME AS MAXAK FOR GROUP B. */
313
/*               MINCK = THE SAME AS MINAK FOR GROUP C. */
314
/*               MAXCK = THE SAME AS MAXAK FOR GROUP C. */
315
/*                ADDA = KEEPS TRACK WHETHER OR NOT AN ATTEMPT TO ADD */
316
/*                       POINTS TO GROUP A WAS MADE.  IF SO, THEN ADDA */
317
/*                       KEEPS FROM TRYING TO PUT ONE BACK INTO B. */
318
/*                       (LOGICAL) */
319
/*              IBITBS = KEEPS CURRENT VALUE IF IBITB SO THAT LOOP */
320
/*                       ENDING AT 166 DOESN'T HAVE TO START AT */
321
/*                       IBITB = 0 EVERY TIME. */
322
/*           MISSLX(J) = MALLOW EXCEPT WHEN A GROUP IS ALL ONE VALUE (AND */
323
/*                       LBIT(J) = 0) AND THAT VALUE IS MISSING.  IN */
324
/*                       THAT CASE, MISSLX(J) IS MISSP OR MISSS.  THIS */
325
/*                       GETS INSERTED INTO JMIN(J) LATER AS THE */
326
/*                       MISSING INDICATOR; IT CAN'T BE PUT IN UNTIL */
327
/*                       THE END, BECAUSE JMIN( ) IS USED TO CALCULATE */
328
/*                       THE MAXIMUM NUMBER OF BITS (IBITS) NEEDED TO */
329
/*                       PACK JMIN( ). */
330
/*        1         2         3         4         5         6         7 X */
331
332
/*        NON SYSTEM SUBROUTINES CALLED */
333
/*           NONE */
334
335
336
337
/*        MISSLX( ) was AN AUTOMATIC ARRAY. */
338
946
    misslx = (integer *)calloc(*ndg,sizeof(integer));
339
946
    if( misslx == NULL )
340
0
    {
341
0
        *ier = -1;
342
0
        return 0;
343
0
    }
344
345
    /* Parameter adjustments */
346
946
    --ic;
347
946
    --nov;
348
946
    --lbit;
349
946
    --jmax;
350
946
    --jmin;
351
352
    /* Function Body */
353
354
946
    *ier = 0;
355
946
    iersav = 0;
356
/*     CALL TIMPR(KFILDO,KFILDO,'START PACK_GP        ') */
357
946
    *(unsigned char *)cfeed = (char) ifeed;
358
359
946
    ired = 0;
360
/*        IRED IS A FLAG.  WHEN ZERO, REDUCE WILL BE CALLED. */
361
/*        IF REDUCE ABORTS, IRED = 1 AND IS NOT CALLED.  IN */
362
/*        THIS CASE PACK_GP EXECUTES AGAIN EXCEPT FOR REDUCE. */
363
364
946
    if (*inc <= 0) {
365
0
  iersav = 717;
366
/*        WRITE(KFILDO,101)INC */
367
/* 101     FORMAT(/' ****INC ='I8,' NOT CORRECT IN PACK_GP.  1 IS USED.') */
368
0
    }
369
370
/*        THERE WILL BE A RESTART OF PACK_GP IF SUBROUTINE REDUCE */
371
/*        ABORTS.  THIS SHOULD NOT HAPPEN, BUT IF IT DOES, PACK_GP */
372
/*        WILL COMPLETE WITHOUT SUBROUTINE REDUCE.  A NON FATAL */
373
/*        DIAGNOSTIC RETURN IS PROVIDED. */
374
375
946
L102:
376
    /*kinc = max(*inc,1);*/
377
946
    kinc = (*inc > 1) ? *inc : 1;
378
946
    lminpk = *minpk;
379
380
/*         CALCULATE THE POWERS OF 2 THE FIRST TIME ENTERED. */
381
382
946
    if (ifirst == 0) {
383
946
  ifirst = 1;
384
946
  ibxx2[0] = 1;
385
386
29.3k
  for (j = 1; j <= 30; ++j) {
387
28.3k
      ibxx2[j] = ibxx2[j - 1] << 1;
388
/* L104: */
389
28.3k
  }
390
391
946
    }
392
393
/*        THERE WILL BE A RESTART AT 105 IS NDG IS NOT LARGE ENOUGH. */
394
/*        A NON FATAL DIAGNOSTIC RETURN IS PROVIDED. */
395
396
946
L105:
397
946
    kstart = 1;
398
946
    ktotal = 0;
399
946
    *lx = 0;
400
946
    adda = FALSE_;
401
946
    lmiss = 0;
402
946
    if (*is523 == 1) {
403
946
  lmiss = 1;
404
946
    }
405
946
    if (*is523 == 2) {
406
0
  lmiss = 2;
407
0
    }
408
409
/*        ************************************* */
410
411
/*        THIS SECTION COMPUTES STATISTICS FOR GROUP A.  GROUP A IS */
412
/*        A GROUP OF SIZE LMINPK. */
413
414
/*        ************************************* */
415
416
946
    ibita = 0;
417
946
    mina = mallow;
418
946
    maxa = -mallow;
419
946
    minak = mallow;
420
946
    maxak = -mallow;
421
422
/*        FIND THE MIN AND MAX OF GROUP A.  THIS WILL INITIALLY BE OF */
423
/*        SIZE LMINPK (IF THERE ARE STILL LMINPK VALUES IN IC( )), BUT */
424
/*        WILL INCREASE IN SIZE IN INCREMENTS OF INC UNTIL A NEW */
425
/*        GROUP IS STARTED.  THE DEFINITION OF GROUP A IS DONE HERE */
426
/*        ONLY ONCE (UPON INITIAL ENTRY), BECAUSE A GROUP B CAN ALWAYS */
427
/*        BECOME A NEW GROUP A AFTER A IS PACKED, EXCEPT IF LMINPK */
428
/*        HAS TO BE INCREASED BECAUSE NDG IS TOO SMALL.  THEREFORE, */
429
/*        THE SEPARATE LOOPS FOR MISSING AND NON-MISSING HERE BUYS */
430
/*        ALMOST NOTHING. */
431
432
/* Computing MIN */
433
946
    i__1 = kstart + lminpk - 1;
434
    /*nenda = min(i__1,*nxy);*/
435
946
    nenda = (i__1 < *nxy) ? i__1 : *nxy;
436
946
    if (*nxy - nenda <= lminpk / 2) {
437
0
  nenda = *nxy;
438
0
    }
439
/*        ABOVE STATEMENT GUARANTEES THE LAST GROUP IS GT LMINPK/2 BY */
440
/*        MAKING THE ACTUAL GROUP LARGER.  IF A PROVISION LIKE THIS IS */
441
/*        NOT INCLUDED, THERE WILL MANY TIMES BE A VERY SMALL GROUP */
442
/*        AT THE END.  USE SEPARATE LOOPS FOR MISSING AND NO MISSING */
443
/*        VALUES FOR EFFICIENCY. */
444
445
/*        DETERMINE WHETHER THERE IS A LONG STRING OF THE SAME VALUE */
446
/*        UNLESS NENDA = NXY.  THIS MAY ALLOW A LARGE GROUP A TO */
447
/*        START WITH, AS WITH MISSING VALUES.   SEPARATE LOOPS FOR */
448
/*        MISSING OPTIONS.  THIS SECTION IS ONLY EXECUTED ONCE, */
449
/*        IN DETERMINING THE FIRST GROUP.  IT HELPS FOR AN ARRAY */
450
/*        OF MOSTLY MISSING VALUES OR OF ONE VALUE, SUCH AS */
451
/*        RADAR OR PRECIP DATA. */
452
453
946
    if (nenda != *nxy && ic[kstart] == ic[kstart + 1]) {
454
/*           NO NEED TO EXECUTE IF FIRST TWO VALUES ARE NOT EQUAL. */
455
456
945
  if (*is523 == 0) {
457
/*              THIS LOOP IS FOR NO MISSING VALUES. */
458
459
0
      i__1 = *nxy;
460
0
      for (k = kstart + 1; k <= i__1; ++k) {
461
462
0
    if (ic[k] != ic[kstart]) {
463
/* Computing MAX */
464
0
        i__2 = nenda;
465
0
            i__3 = k - 1;
466
        /*nenda = max(i__2,i__3);*/
467
0
        nenda = (i__2 > i__3) ? i__2 : i__3;
468
0
        goto L114;
469
0
    }
470
471
/* L111: */
472
0
      }
473
474
0
      nenda = *nxy;
475
/*              FALL THROUGH THE LOOP MEANS ALL VALUES ARE THE SAME. */
476
477
945
  } else if (*is523 == 1) {
478
/*              THIS LOOP IS FOR PRIMARY MISSING VALUES ONLY. */
479
480
945
      i__1 = *nxy;
481
6.68k
      for (k = kstart + 1; k <= i__1; ++k) {
482
483
6.68k
    if (ic[k] != *missp) {
484
485
6.68k
        if (ic[k] != ic[kstart]) {
486
/* Computing MAX */
487
945
      i__2 = nenda;
488
945
            i__3 = k - 1;
489
      /*nenda = max(i__2,i__3);*/
490
945
      nenda = (i__2 > i__3) ? i__2 : i__3;
491
945
      goto L114;
492
945
        }
493
494
6.68k
    }
495
496
/* L112: */
497
6.68k
      }
498
499
0
      nenda = *nxy;
500
/*              FALL THROUGH THE LOOP MEANS ALL VALUES ARE THE SAME. */
501
502
0
  } else {
503
/*              THIS LOOP IS FOR PRIMARY AND SECONDARY MISSING VALUES. */
504
505
0
      i__1 = *nxy;
506
0
      for (k = kstart + 1; k <= i__1; ++k) {
507
508
0
    if (ic[k] != *missp && ic[k] != *misss) {
509
510
0
        if (ic[k] != ic[kstart]) {
511
/* Computing MAX */
512
0
      i__2 = nenda;
513
0
            i__3 = k - 1;
514
      /*nenda = max(i__2,i__3);*/
515
0
      nenda = (i__2 > i__3) ? i__2 : i__3;
516
0
      goto L114;
517
0
        }
518
519
0
    }
520
521
/* L113: */
522
0
      }
523
524
0
      nenda = *nxy;
525
/*              FALL THROUGH THE LOOP MEANS ALL VALUES ARE THE SAME. */
526
0
  }
527
528
945
    }
529
530
946
L114:
531
946
    if (*is523 == 0) {
532
533
0
  i__1 = nenda;
534
0
  for (k = kstart; k <= i__1; ++k) {
535
0
      if (ic[k] < mina) {
536
0
    mina = ic[k];
537
0
    minak = k;
538
0
      }
539
0
      if (ic[k] > maxa) {
540
0
    maxa = ic[k];
541
0
    maxak = k;
542
0
      }
543
/* L115: */
544
0
  }
545
546
946
    } else if (*is523 == 1) {
547
548
946
  i__1 = nenda;
549
10.6k
  for (k = kstart; k <= i__1; ++k) {
550
9.74k
      if (ic[k] == *missp) {
551
7
    goto L117;
552
7
      }
553
9.73k
      if (ic[k] < mina) {
554
1.29k
    mina = ic[k];
555
1.29k
    minak = k;
556
1.29k
      }
557
9.73k
      if (ic[k] > maxa) {
558
1.49k
    maxa = ic[k];
559
1.49k
    maxak = k;
560
1.49k
      }
561
9.74k
L117:
562
9.74k
      ;
563
9.74k
  }
564
565
946
    } else {
566
567
0
  i__1 = nenda;
568
0
  for (k = kstart; k <= i__1; ++k) {
569
0
      if (ic[k] == *missp || ic[k] == *misss) {
570
0
    goto L120;
571
0
      }
572
0
      if (ic[k] < mina) {
573
0
    mina = ic[k];
574
0
    minak = k;
575
0
      }
576
0
      if (ic[k] > maxa) {
577
0
    maxa = ic[k];
578
0
    maxak = k;
579
0
      }
580
0
L120:
581
0
      ;
582
0
  }
583
584
0
    }
585
586
946
    kounta = nenda - kstart + 1;
587
588
/*        INCREMENT KTOTAL AND FIND THE BITS NEEDED TO PACK THE A GROUP. */
589
590
946
    ktotal += kounta;
591
946
    mislla = 0;
592
946
    if (mina != mallow) {
593
946
  goto L125;
594
946
    }
595
/*        ALL MISSING VALUES MUST BE ACCOMMODATED. */
596
0
    mina = 0;
597
0
    maxa = 0;
598
0
    mislla = 1;
599
0
    ibitb = 0;
600
0
    if (*is523 != 2) {
601
0
  goto L130;
602
0
    }
603
/*        WHEN ALL VALUES ARE MISSING AND THERE ARE NO */
604
/*        SECONDARY MISSING VALUES, IBITA = 0. */
605
/*        OTHERWISE, IBITA MUST BE CALCULATED. */
606
607
946
L125:
608
946
    itest = maxa - mina + lmiss;
609
610
6.98k
    for (ibita = 0; ibita <= 30; ++ibita) {
611
6.98k
  if (itest < ibxx2[ibita]) {
612
945
      goto L130;
613
945
  }
614
/* ***        THIS TEST IS THE SAME AS: */
615
/* ***     IF(MAXA-MINA.LT.IBXX2(IBITA)-LMISS)GO TO 130 */
616
/* L126: */
617
6.98k
    }
618
619
/*     WRITE(KFILDO,127)MAXA,MINA */
620
/* 127  FORMAT(' ****ERROR IN PACK_GP.  VALUE WILL NOT PACK IN 30 BITS.', */
621
/*    1       '  MAXA ='I13,'  MINA ='I13,'.  ERROR AT 127.') */
622
1
    *ier = 706;
623
1
    goto L900;
624
625
945
L130:
626
627
/* ***D     WRITE(KFILDO,131)KOUNTA,KTOTAL,MINA,MAXA,IBITA,MISLLA */
628
/* ***D131  FORMAT(' AT 130, KOUNTA ='I8,'  KTOTAL ='I8,'  MINA ='I8, */
629
/* ***D    1       '  MAXA ='I8,'  IBITA ='I3,'  MISLLA ='I3) */
630
631
55.7k
L133:
632
55.7k
    if (ktotal >= *nxy) {
633
1
  goto L200;
634
1
    }
635
636
/*        ************************************* */
637
638
/*        THIS SECTION COMPUTES STATISTICS FOR GROUP B.  GROUP B IS A */
639
/*        GROUP OF SIZE LMINPK IMMEDIATELY FOLLOWING GROUP A. */
640
641
/*        ************************************* */
642
643
111k
L140:
644
111k
    minb = mallow;
645
111k
    maxb = -mallow;
646
111k
    minbk = mallow;
647
111k
    maxbk = -mallow;
648
111k
    ibitbs = 0;
649
111k
    mstart = ktotal + 1;
650
651
/*        DETERMINE WHETHER THERE IS A LONG STRING OF THE SAME VALUE. */
652
/*        THIS WORKS WHEN THERE ARE NO MISSING VALUES. */
653
654
111k
    nendb = 1;
655
656
111k
    if (mstart < *nxy) {
657
658
111k
  if (*is523 == 0) {
659
/*              THIS LOOP IS FOR NO MISSING VALUES. */
660
661
0
      i__1 = *nxy;
662
0
      for (k = mstart + 1; k <= i__1; ++k) {
663
664
0
    if (ic[k] != ic[mstart]) {
665
0
        nendb = k - 1;
666
0
        goto L150;
667
0
    }
668
669
/* L145: */
670
0
      }
671
672
0
      nendb = *nxy;
673
/*              FALL THROUGH THE LOOP MEANS ALL REMAINING VALUES */
674
/*              ARE THE SAME. */
675
0
  }
676
677
111k
    }
678
679
398k
L150:
680
/* Computing MAX */
681
/* Computing MIN */
682
398k
    i__3 = ktotal + lminpk;
683
    /*i__1 = nendb, i__2 = min(i__3,*nxy);*/
684
398k
    i__1 = nendb;
685
398k
    i__2 = (i__3 < *nxy) ? i__3 : *nxy;
686
    /*nendb = max(i__1,i__2);*/
687
398k
    nendb = (i__1 > i__2) ? i__1 : i__2;
688
/* **** 150  NENDB=MIN(KTOTAL+LMINPK,NXY) */
689
690
398k
    if (*nxy - nendb <= lminpk / 2) {
691
7.37k
  nendb = *nxy;
692
7.37k
    }
693
/*        ABOVE STATEMENT GUARANTEES THE LAST GROUP IS GT LMINPK/2 BY */
694
/*        MAKING THE ACTUAL GROUP LARGER.  IF A PROVISION LIKE THIS IS */
695
/*        NOT INCLUDED, THERE WILL MANY TIMES BE A VERY SMALL GROUP */
696
/*        AT THE END.  USE SEPARATE LOOPS FOR MISSING AND NO MISSING */
697
698
/*        USE SEPARATE LOOPS FOR MISSING AND NO MISSING VALUES */
699
/*        FOR EFFICIENCY. */
700
701
398k
    if (*is523 == 0) {
702
703
0
  i__1 = nendb;
704
0
  for (k = mstart; k <= i__1; ++k) {
705
0
      if (ic[k] <= minb) {
706
0
    minb = ic[k];
707
/*              NOTE LE, NOT LT.  LT COULD BE USED BUT THEN A */
708
/*              RECOMPUTE OVER THE WHOLE GROUP WOULD BE NEEDED */
709
/*              MORE OFTEN.  SAME REASONING FOR GE AND OTHER */
710
/*              LOOPS BELOW. */
711
0
    minbk = k;
712
0
      }
713
0
      if (ic[k] >= maxb) {
714
0
    maxb = ic[k];
715
0
    maxbk = k;
716
0
      }
717
/* L155: */
718
0
  }
719
720
398k
    } else if (*is523 == 1) {
721
722
398k
  i__1 = nendb;
723
1.79M
  for (k = mstart; k <= i__1; ++k) {
724
1.40M
      if (ic[k] == *missp) {
725
32.7k
    goto L157;
726
32.7k
      }
727
1.36M
      if (ic[k] <= minb) {
728
658k
    minb = ic[k];
729
658k
    minbk = k;
730
658k
      }
731
1.36M
      if (ic[k] >= maxb) {
732
606k
    maxb = ic[k];
733
606k
    maxbk = k;
734
606k
      }
735
1.40M
L157:
736
1.40M
      ;
737
1.40M
  }
738
739
398k
    } else {
740
741
0
  i__1 = nendb;
742
0
  for (k = mstart; k <= i__1; ++k) {
743
0
      if (ic[k] == *missp || ic[k] == *misss) {
744
0
    goto L160;
745
0
      }
746
0
      if (ic[k] <= minb) {
747
0
    minb = ic[k];
748
0
    minbk = k;
749
0
      }
750
0
      if (ic[k] >= maxb) {
751
0
    maxb = ic[k];
752
0
    maxbk = k;
753
0
      }
754
0
L160:
755
0
      ;
756
0
  }
757
758
0
    }
759
760
398k
    kountb = nendb - ktotal;
761
398k
    misllb = 0;
762
398k
    if (minb != mallow) {
763
398k
  goto L165;
764
398k
    }
765
/*        ALL MISSING VALUES MUST BE ACCOMMODATED. */
766
219
    minb = 0;
767
219
    maxb = 0;
768
219
    misllb = 1;
769
219
    ibitb = 0;
770
771
219
    if (*is523 != 2) {
772
219
  goto L170;
773
219
    }
774
/*        WHEN ALL VALUES ARE MISSING AND THERE ARE NO SECONDARY */
775
/*        MISSING VALUES, IBITB = 0.  OTHERWISE, IBITB MUST BE */
776
/*        CALCULATED. */
777
778
398k
L165:
779
398k
    if( (GIntBig)maxb - minb < INT_MIN ||
780
398k
        (GIntBig)maxb - minb > INT_MAX )
781
0
    {
782
0
        *ier = -1;
783
0
        free(misslx);
784
0
        return 0;
785
0
    }
786
787
1.20M
    for (ibitb = ibitbs; ibitb <= 30; ++ibitb) {
788
1.20M
  if (maxb - minb < ibxx2[ibitb] - lmiss) {
789
398k
      goto L170;
790
398k
  }
791
/* L166: */
792
1.20M
    }
793
794
/*     WRITE(KFILDO,167)MAXB,MINB */
795
/* 167  FORMAT(' ****ERROR IN PACK_GP.  VALUE WILL NOT PACK IN 30 BITS.', */
796
/*    1       '  MAXB ='I13,'  MINB ='I13,'.  ERROR AT 167.') */
797
0
    *ier = 706;
798
0
    goto L900;
799
800
/*        COMPARE THE BITS NEEDED TO PACK GROUP B WITH THOSE NEEDED */
801
/*        TO PACK GROUP A.  IF IBITB GE IBITA, TRY TO ADD TO GROUP A. */
802
/*        IF NOT, TRY TO ADD A'S POINTS TO B, UNLESS ADDITION TO A */
803
/*        HAS BEEN DONE.  THIS LATTER IS CONTROLLED WITH ADDA. */
804
805
398k
L170:
806
807
/* ***D     WRITE(KFILDO,171)KOUNTA,KTOTAL,MINA,MAXA,IBITA,MISLLA, */
808
/* ***D    1                               MINB,MAXB,IBITB,MISLLB */
809
/* ***D171  FORMAT(' AT 171, KOUNTA ='I8,'  KTOTAL ='I8,'  MINA ='I8, */
810
/* ***D    1       '  MAXA ='I8,'  IBITA ='I3,'  MISLLA ='I3, */
811
/* ***D    2       '  MINB ='I8,'  MAXB ='I8,'  IBITB ='I3,'  MISLLB ='I3) */
812
813
398k
    if (ibitb >= ibita) {
814
373k
  goto L180;
815
373k
    }
816
25.0k
    if (adda) {
817
15.1k
  goto L200;
818
15.1k
    }
819
820
/*        ************************************* */
821
822
/*        GROUP B REQUIRES LESS BITS THAN GROUP A.  PUT AS MANY OF A'S */
823
/*        POINTS INTO B AS POSSIBLE WITHOUT EXCEEDING THE NUMBER OF */
824
/*        BITS NECESSARY TO PACK GROUP B. */
825
826
/*        ************************************* */
827
828
9.87k
    kounts = kounta;
829
/*        KOUNTA REFERS TO THE PRESENT GROUP A. */
830
9.87k
    mintst = minb;
831
9.87k
    maxtst = maxb;
832
9.87k
    mintstk = minbk;
833
9.87k
    maxtstk = maxbk;
834
835
/*        USE SEPARATE LOOPS FOR MISSING AND NO MISSING VALUES */
836
/*        FOR EFFICIENCY. */
837
838
9.87k
    if (*is523 == 0) {
839
840
0
  i__1 = kstart;
841
0
  for (k = ktotal; k >= i__1; --k) {
842
/*           START WITH THE END OF THE GROUP AND WORK BACKWARDS. */
843
0
      if (ic[k] < minb) {
844
0
    mintst = ic[k];
845
0
    mintstk = k;
846
0
      } else if (ic[k] > maxb) {
847
0
    maxtst = ic[k];
848
0
    maxtstk = k;
849
0
      }
850
0
      if (maxtst - mintst >= ibxx2[ibitb]) {
851
0
    goto L174;
852
0
      }
853
/*           NOTE THAT FOR THIS LOOP, LMISS = 0. */
854
0
      minb = mintst;
855
0
      maxb = maxtst;
856
0
      minbk = mintstk;
857
0
      maxbk = maxtstk;
858
0
      --kounta;
859
/*           THERE IS ONE LESS POINT NOW IN A. */
860
/* L1715: */
861
0
  }
862
863
9.87k
    } else if (*is523 == 1) {
864
865
9.87k
  i__1 = kstart;
866
53.0k
  for (k = ktotal; k >= i__1; --k) {
867
/*           START WITH THE END OF THE GROUP AND WORK BACKWARDS. */
868
53.0k
      if (ic[k] == *missp) {
869
1.53k
    goto L1718;
870
1.53k
      }
871
51.4k
      if (ic[k] < minb) {
872
4.91k
    mintst = ic[k];
873
4.91k
    mintstk = k;
874
46.5k
      } else if (ic[k] > maxb) {
875
5.66k
    maxtst = ic[k];
876
5.66k
    maxtstk = k;
877
5.66k
      }
878
51.4k
      if (maxtst - mintst >= ibxx2[ibitb] - lmiss) {
879
9.87k
    goto L174;
880
9.87k
      }
881
/*           FOR THIS LOOP, LMISS = 1. */
882
41.5k
      minb = mintst;
883
41.5k
      maxb = maxtst;
884
41.5k
      minbk = mintstk;
885
41.5k
      maxbk = maxtstk;
886
41.5k
      misllb = 0;
887
/*           WHEN THE POINT IS NON MISSING, MISLLB SET = 0. */
888
43.1k
L1718:
889
43.1k
      --kounta;
890
/*           THERE IS ONE LESS POINT NOW IN A. */
891
/* L1719: */
892
43.1k
  }
893
894
9.87k
    } else {
895
896
0
  i__1 = kstart;
897
0
  for (k = ktotal; k >= i__1; --k) {
898
/*           START WITH THE END OF THE GROUP AND WORK BACKWARDS. */
899
0
      if (ic[k] == *missp || ic[k] == *misss) {
900
0
    goto L1729;
901
0
      }
902
0
      if (ic[k] < minb) {
903
0
    mintst = ic[k];
904
0
    mintstk = k;
905
0
      } else if (ic[k] > maxb) {
906
0
    maxtst = ic[k];
907
0
    maxtstk = k;
908
0
      }
909
0
      if (maxtst - mintst >= ibxx2[ibitb] - lmiss) {
910
0
    goto L174;
911
0
      }
912
/*           FOR THIS LOOP, LMISS = 2. */
913
0
      minb = mintst;
914
0
      maxb = maxtst;
915
0
      minbk = mintstk;
916
0
      maxbk = maxtstk;
917
0
      misllb = 0;
918
/*           WHEN THE POINT IS NON MISSING, MISLLB SET = 0. */
919
0
L1729:
920
0
      --kounta;
921
/*           THERE IS ONE LESS POINT NOW IN A. */
922
/* L173: */
923
0
  }
924
925
0
    }
926
927
/*        AT THIS POINT, KOUNTA CONTAINS THE NUMBER OF POINTS TO CLOSE */
928
/*        OUT GROUP A WITH.  GROUP B NOW STARTS WITH KSTART+KOUNTA AND */
929
/*        ENDS WITH NENDB.  MINB AND MAXB HAVE BEEN ADJUSTED AS */
930
/*        NECESSARY TO REFLECT GROUP B (EVEN THOUGH THE NUMBER OF BITS */
931
/*        NEEDED TO PACK GROUP B HAVE NOT INCREASED, THE END POINTS */
932
/*        OF THE RANGE MAY HAVE). */
933
934
9.87k
L174:
935
9.87k
    if (kounta == kounts) {
936
663
  goto L200;
937
663
    }
938
/*        ON TRANSFER, GROUP A WAS NOT CHANGED.  CLOSE IT OUT. */
939
940
/*        ONE OR MORE POINTS WERE TAKEN OUT OF A.  RANGE AND IBITA */
941
/*        MAY HAVE TO BE RECOMPUTED; IBITA COULD BE LESS THAN */
942
/*        ORIGINALLY COMPUTED.  IN FACT, GROUP A CAN NOW CONTAIN */
943
/*        ONLY ONE POINT AND BE PACKED WITH ZERO BITS */
944
/*        (UNLESS MISSS NE 0). */
945
946
9.21k
    nouta = kounts - kounta;
947
9.21k
    ktotal -= nouta;
948
9.21k
    kountb += nouta;
949
9.21k
    if (nenda - nouta > minak && nenda - nouta > maxak) {
950
222
  goto L200;
951
222
    }
952
/*        WHEN THE ABOVE TEST IS MET, THE MIN AND MAX OF THE */
953
/*        CURRENT GROUP A WERE WITHIN THE OLD GROUP A, SO THE */
954
/*        RANGE AND IBITA DO NOT NEED TO BE RECOMPUTED. */
955
/*        NOTE THAT MINAK AND MAXAK ARE NO LONGER NEEDED. */
956
8.99k
    ibita = 0;
957
8.99k
    mina = mallow;
958
8.99k
    maxa = -mallow;
959
960
/*        USE SEPARATE LOOPS FOR MISSING AND NO MISSING VALUES */
961
/*        FOR EFFICIENCY. */
962
963
8.99k
    if (*is523 == 0) {
964
965
0
  i__1 = nenda - nouta;
966
0
  for (k = kstart; k <= i__1; ++k) {
967
0
      if (ic[k] < mina) {
968
0
    mina = ic[k];
969
0
      }
970
0
      if (ic[k] > maxa) {
971
0
    maxa = ic[k];
972
0
      }
973
/* L1742: */
974
0
  }
975
976
8.99k
    } else if (*is523 == 1) {
977
978
8.99k
  i__1 = nenda - nouta;
979
57.1k
  for (k = kstart; k <= i__1; ++k) {
980
48.1k
      if (ic[k] == *missp) {
981
700
    goto L1744;
982
700
      }
983
47.4k
      if (ic[k] < mina) {
984
15.3k
    mina = ic[k];
985
15.3k
      }
986
47.4k
      if (ic[k] > maxa) {
987
14.1k
    maxa = ic[k];
988
14.1k
      }
989
48.1k
L1744:
990
48.1k
      ;
991
48.1k
  }
992
993
8.99k
    } else {
994
995
0
  i__1 = nenda - nouta;
996
0
  for (k = kstart; k <= i__1; ++k) {
997
0
      if (ic[k] == *missp || ic[k] == *misss) {
998
0
    goto L175;
999
0
      }
1000
0
      if (ic[k] < mina) {
1001
0
    mina = ic[k];
1002
0
      }
1003
0
      if (ic[k] > maxa) {
1004
0
    maxa = ic[k];
1005
0
      }
1006
0
L175:
1007
0
      ;
1008
0
  }
1009
1010
0
    }
1011
1012
8.99k
    mislla = 0;
1013
8.99k
    if (mina != mallow) {
1014
8.99k
  goto L1750;
1015
8.99k
    }
1016
/*        ALL MISSING VALUES MUST BE ACCOMMODATED. */
1017
0
    mina = 0;
1018
0
    maxa = 0;
1019
0
    mislla = 1;
1020
0
    if (*is523 != 2) {
1021
0
  goto L177;
1022
0
    }
1023
/*        WHEN ALL VALUES ARE MISSING AND THERE ARE NO SECONDARY */
1024
/*        MISSING VALUES IBITA = 0 AS ORIGINALLY SET.  OTHERWISE, */
1025
/*        IBITA MUST BE CALCULATED. */
1026
1027
8.99k
L1750:
1028
8.99k
    itest = maxa - mina + lmiss;
1029
1030
74.3k
    for (ibita = 0; ibita <= 30; ++ibita) {
1031
74.3k
  if (itest < ibxx2[ibita]) {
1032
8.99k
      goto L177;
1033
8.99k
  }
1034
/* ***        THIS TEST IS THE SAME AS: */
1035
/* ***         IF(MAXA-MINA.LT.IBXX2(IBITA)-LMISS)GO TO 177 */
1036
/* L176: */
1037
74.3k
    }
1038
1039
/*     WRITE(KFILDO,1760)MAXA,MINA */
1040
/* 1760 FORMAT(' ****ERROR IN PACK_GP.  VALUE WILL NOT PACK IN 30 BITS.', */
1041
/*    1       '  MAXA ='I13,'  MINA ='I13,'.  ERROR AT 1760.') */
1042
0
    *ier = 706;
1043
0
    goto L900;
1044
1045
8.99k
L177:
1046
8.99k
    goto L200;
1047
1048
/*        ************************************* */
1049
1050
/*        AT THIS POINT, GROUP B REQUIRES AS MANY BITS TO PACK AS GROUPA. */
1051
/*        THEREFORE, TRY TO ADD INC POINTS TO GROUP A WITHOUT INCREASING */
1052
/*        IBITA.  THIS AUGMENTED GROUP IS CALLED GROUP C. */
1053
1054
/*        ************************************* */
1055
1056
373k
L180:
1057
373k
    if (mislla == 1) {
1058
1.09k
  minc = mallow;
1059
1.09k
  minck = mallow;
1060
1.09k
  maxc = -mallow;
1061
1.09k
  maxck = -mallow;
1062
372k
    } else {
1063
372k
  minc = mina;
1064
372k
  maxc = maxa;
1065
372k
  minck = minak;
1066
372k
  maxck = minak;
1067
372k
    }
1068
1069
373k
    nount = 0;
1070
373k
    if (*nxy - (ktotal + kinc) <= lminpk / 2) {
1071
944
  kinc = *nxy - ktotal;
1072
944
    }
1073
/*        ABOVE STATEMENT CONSTRAINS THE LAST GROUP TO BE NOT LESS THAN */
1074
/*        LMINPK/2 IN SIZE.  IF A PROVISION LIKE THIS IS NOT INCLUDED, */
1075
/*        THERE WILL MANY TIMES BE A VERY SMALL GROUP AT THE END. */
1076
1077
/*        USE SEPARATE LOOPS FOR MISSING AND NO MISSING VALUES */
1078
/*        FOR EFFICIENCY.  SINCE KINC IS USUALLY 1, USING SEPARATE */
1079
/*        LOOPS HERE DOESN'T BUY MUCH.  A MISSING VALUE WILL ALWAYS */
1080
/*        TRANSFER BACK TO GROUP A. */
1081
1082
373k
    if (*is523 == 0) {
1083
1084
/* Computing MIN */
1085
0
  i__2 = ktotal + kinc;
1086
  /*i__1 = min(i__2,*nxy);*/
1087
0
  i__1 = (i__2 < *nxy) ? i__2 : *nxy;
1088
0
  for (k = ktotal + 1; k <= i__1; ++k) {
1089
0
      if (ic[k] < minc) {
1090
0
    minc = ic[k];
1091
0
    minck = k;
1092
0
      }
1093
0
      if (ic[k] > maxc) {
1094
0
    maxc = ic[k];
1095
0
    maxck = k;
1096
0
      }
1097
0
      ++nount;
1098
/* L185: */
1099
0
  }
1100
1101
373k
    } else if (*is523 == 1) {
1102
1103
/* Computing MIN */
1104
373k
  i__2 = ktotal + kinc;
1105
  /*i__1 = min(i__2,*nxy);*/
1106
373k
  i__1 = (i__2 < *nxy) ? i__2 : *nxy;
1107
751k
  for (k = ktotal + 1; k <= i__1; ++k) {
1108
378k
      if (ic[k] == *missp) {
1109
13.7k
    goto L186;
1110
13.7k
      }
1111
364k
      if (ic[k] < minc) {
1112
19.3k
    minc = ic[k];
1113
19.3k
    minck = k;
1114
19.3k
      }
1115
364k
      if (ic[k] > maxc) {
1116
30.9k
    maxc = ic[k];
1117
30.9k
    maxck = k;
1118
30.9k
      }
1119
378k
L186:
1120
378k
      ++nount;
1121
/* L187: */
1122
378k
  }
1123
1124
373k
    } else {
1125
1126
/* Computing MIN */
1127
0
  i__2 = ktotal + kinc;
1128
  /*i__1 = min(i__2,*nxy);*/
1129
0
  i__1 = (i__2 < *nxy) ? i__2 : *nxy;
1130
0
  for (k = ktotal + 1; k <= i__1; ++k) {
1131
0
      if (ic[k] == *missp || ic[k] == *misss) {
1132
0
    goto L189;
1133
0
      }
1134
0
      if (ic[k] < minc) {
1135
0
    minc = ic[k];
1136
0
    minck = k;
1137
0
      }
1138
0
      if (ic[k] > maxc) {
1139
0
    maxc = ic[k];
1140
0
    maxck = k;
1141
0
      }
1142
0
L189:
1143
0
      ++nount;
1144
/* L190: */
1145
0
  }
1146
1147
0
    }
1148
1149
/* ***D     WRITE(KFILDO,191)KOUNTA,KTOTAL,MINA,MAXA,IBITA,MISLLA, */
1150
/* ***D    1   MINC,MAXC,NOUNT,IC(KTOTAL),IC(KTOTAL+1) */
1151
/* ***D191  FORMAT(' AT 191, KOUNTA ='I8,'  KTOTAL ='I8,'  MINA ='I8, */
1152
/* ***D    1       '  MAXA ='I8,'  IBITA ='I3,'  MISLLA ='I3, */
1153
/* ***D    2       '  MINC ='I8,'  MAXC ='I8, */
1154
/* ***D    3       '  NOUNT ='I5,'  IC(KTOTAL) ='I9,'  IC(KTOTAL+1) =',I9) */
1155
1156
/*        IF THE NUMBER OF BITS NEEDED FOR GROUP C IS GT IBITA, */
1157
/*        THEN THIS GROUP A IS A GROUP TO PACK. */
1158
1159
373k
    if (minc == mallow) {
1160
876
  minc = mina;
1161
876
  maxc = maxa;
1162
876
  minck = minak;
1163
876
  maxck = maxak;
1164
876
  misllc = 1;
1165
876
  goto L195;
1166
/*           WHEN THE NEW VALUE(S) ARE MISSING, THEY CAN ALWAYS */
1167
/*           BE ADDED. */
1168
1169
372k
    } else {
1170
372k
  misllc = 0;
1171
372k
    }
1172
1173
372k
    if (maxc - minc >= ibxx2[ibita] - lmiss) {
1174
29.8k
  goto L200;
1175
29.8k
    }
1176
1177
/*        THE BITS NECESSARY FOR GROUP C HAS NOT INCREASED FROM THE */
1178
/*        BITS NECESSARY FOR GROUP A.  ADD THIS POINT(S) TO GROUP A. */
1179
/*        COMPUTE THE NEXT GROUP B, ETC., UNLESS ALL POINTS HAVE BEEN */
1180
/*        USED. */
1181
1182
343k
L195:
1183
343k
    ktotal += nount;
1184
343k
    kounta += nount;
1185
343k
    mina = minc;
1186
343k
    maxa = maxc;
1187
343k
    minak = minck;
1188
343k
    maxak = maxck;
1189
343k
    mislla = misllc;
1190
343k
    adda = TRUE_;
1191
343k
    if (ktotal >= *nxy) {
1192
944
  goto L200;
1193
944
    }
1194
1195
342k
    if (minbk > ktotal && maxbk > ktotal) {
1196
286k
  mstart = nendb + 1;
1197
/*           THE MAX AND MIN OF GROUP B WERE NOT FROM THE POINTS */
1198
/*           REMOVED, SO THE WHOLE GROUP DOES NOT HAVE TO BE LOOKED */
1199
/*           AT TO DETERMINE THE NEW MAX AND MIN.  RATHER START */
1200
/*           JUST BEYOND THE OLD NENDB. */
1201
286k
  ibitbs = ibitb;
1202
286k
  nendb = 1;
1203
286k
  goto L150;
1204
286k
    } else {
1205
55.9k
  goto L140;
1206
55.9k
    }
1207
1208
/*        ************************************* */
1209
1210
/*        GROUP A IS TO BE PACKED.  STORE VALUES IN JMIN( ), JMAX( ), */
1211
/*        LBIT( ), AND NOV( ). */
1212
1213
/*        ************************************* */
1214
1215
55.7k
L200:
1216
55.7k
    ++(*lx);
1217
55.7k
    if (*lx <= *ndg) {
1218
55.7k
  goto L205;
1219
55.7k
    }
1220
0
    lminpk += lminpk / 2;
1221
/*     WRITE(KFILDO,201)NDG,LMINPK,LX */
1222
/* 201  FORMAT(' ****NDG ='I5,' NOT LARGE ENOUGH.', */
1223
/*    1       '  LMINPK IS INCREASED TO 'I3,' FOR THIS FIELD.'/ */
1224
/*    2       '  LX = 'I10) */
1225
0
    iersav = 716;
1226
0
    goto L105;
1227
1228
55.7k
L205:
1229
55.7k
    jmin[*lx] = mina;
1230
55.7k
    jmax[*lx] = maxa;
1231
55.7k
    lbit[*lx] = ibita;
1232
55.7k
    nov[*lx] = kounta;
1233
55.7k
    kstart = ktotal + 1;
1234
1235
55.7k
    if (mislla == 0) {
1236
55.5k
  misslx[*lx - 1] = mallow;
1237
55.5k
    } else {
1238
219
  misslx[*lx - 1] = ic[ktotal];
1239
/*           IC(KTOTAL) WAS THE LAST VALUE PROCESSED.  IF MISLLA NE 0, */
1240
/*           THIS MUST BE THE MISSING VALUE FOR THIS GROUP. */
1241
219
    }
1242
1243
/* ***D     WRITE(KFILDO,206)MISLLA,IC(KTOTAL),KTOTAL,LX,JMIN(LX),JMAX(LX), */
1244
/* ***D    1                 LBIT(LX),NOV(LX),MISSLX(LX) */
1245
/* ***D206  FORMAT(' AT 206,  MISLLA ='I2,'  IC(KTOTAL) ='I5,'  KTOTAL ='I8, */
1246
/* ***D    1       '  LX ='I6,'  JMIN(LX) ='I8,'  JMAX(LX) ='I8, */
1247
/* ***D    2       '  LBIT(LX) ='I5,'  NOV(LX) ='I8,'  MISSLX(LX) =',I7) */
1248
1249
55.7k
    if (ktotal >= *nxy) {
1250
945
  goto L209;
1251
945
    }
1252
1253
/*        THE NEW GROUP A WILL BE THE PREVIOUS GROUP B.  SET LIMITS, ETC. */
1254
1255
54.8k
    ibita = ibitb;
1256
54.8k
    mina = minb;
1257
54.8k
    maxa = maxb;
1258
54.8k
    minak = minbk;
1259
54.8k
    maxak = maxbk;
1260
54.8k
    mislla = misllb;
1261
54.8k
    nenda = nendb;
1262
54.8k
    kounta = kountb;
1263
54.8k
    ktotal += kounta;
1264
54.8k
    adda = FALSE_;
1265
54.8k
    goto L133;
1266
1267
/*        ************************************* */
1268
1269
/*        CALCULATE IBIT, THE NUMBER OF BITS NEEDED TO HOLD THE GROUP */
1270
/*        MINIMUM VALUES. */
1271
1272
/*        ************************************* */
1273
1274
945
L209:
1275
945
    *ibit = 0;
1276
1277
945
    i__1 = *lx;
1278
56.7k
    for (l = 1; l <= i__1; ++l) {
1279
63.3k
L210:
1280
63.3k
        if( *ibit == 31 )
1281
0
        {
1282
0
            *ier = -1;
1283
0
            goto L900;
1284
0
        }
1285
63.3k
  if (jmin[l] < ibxx2[*ibit]) {
1286
55.7k
      goto L220;
1287
55.7k
  }
1288
7.56k
  ++(*ibit);
1289
7.56k
  goto L210;
1290
55.7k
L220:
1291
55.7k
  ;
1292
55.7k
    }
1293
1294
/*        INSERT THE VALUE IN JMIN( ) TO BE USED FOR ALL MISSING */
1295
/*        VALUES WHEN LBIT( ) = 0.  WHEN SECONDARY MISSING */
1296
/*        VALUES CAN BE PRESENT, LBIT(L) WILL NOT = 0. */
1297
1298
945
    if (*is523 == 1) {
1299
1300
945
  i__1 = *lx;
1301
56.7k
  for (l = 1; l <= i__1; ++l) {
1302
1303
55.7k
      if (lbit[l] == 0) {
1304
1305
219
    if (misslx[l - 1] == *missp) {
1306
219
        jmin[l] = ibxx2[*ibit] - 1;
1307
219
    }
1308
1309
219
      }
1310
1311
/* L226: */
1312
55.7k
  }
1313
1314
945
    }
1315
1316
/*        ************************************* */
1317
1318
/*        CALCULATE JBIT, THE NUMBER OF BITS NEEDED TO HOLD THE BITS */
1319
/*        NEEDED TO PACK THE VALUES IN THE GROUPS.  BUT FIND AND */
1320
/*        REMOVE THE REFERENCE VALUE FIRST. */
1321
1322
/*        ************************************* */
1323
1324
/*     WRITE(KFILDO,228)CFEED,LX */
1325
/* 228  FORMAT(A1,/' *****************************************' */
1326
/*    1          /' THE GROUP WIDTHS LBIT( ) FOR ',I8,' GROUPS' */
1327
/*    2          /' *****************************************') */
1328
/*     WRITE(KFILDO,229) (LBIT(J),J=1,MIN(LX,100)) */
1329
/* 229  FORMAT(/' '20I6) */
1330
1331
945
    *lbitref = lbit[1];
1332
1333
945
    i__1 = *lx;
1334
56.7k
    for (k = 1; k <= i__1; ++k) {
1335
55.7k
  if (lbit[k] < *lbitref) {
1336
1.66k
      *lbitref = lbit[k];
1337
1.66k
  }
1338
/* L230: */
1339
55.7k
    }
1340
1341
945
    if (*lbitref != 0) {
1342
1343
726
  i__1 = *lx;
1344
42.9k
  for (k = 1; k <= i__1; ++k) {
1345
42.2k
      lbit[k] -= *lbitref;
1346
/* L240: */
1347
42.2k
  }
1348
1349
726
    }
1350
1351
/*     WRITE(KFILDO,241)CFEED,LBITREF */
1352
/* 241  FORMAT(A1,/' *****************************************' */
1353
/*    1          /' THE GROUP WIDTHS LBIT( ) AFTER REMOVING REFERENCE ', */
1354
/*    2             I8, */
1355
/*    3          /' *****************************************') */
1356
/*     WRITE(KFILDO,242) (LBIT(J),J=1,MIN(LX,100)) */
1357
/* 242  FORMAT(/' '20I6) */
1358
1359
945
    *jbit = 0;
1360
1361
945
    i__1 = *lx;
1362
56.7k
    for (k = 1; k <= i__1; ++k) {
1363
58.8k
L310:
1364
58.8k
  if (lbit[k] < ibxx2[*jbit]) {
1365
55.7k
      goto L320;
1366
55.7k
  }
1367
3.05k
  ++(*jbit);
1368
3.05k
  goto L310;
1369
55.7k
L320:
1370
55.7k
  ;
1371
55.7k
    }
1372
1373
/*        ************************************* */
1374
1375
/*        CALCULATE KBIT, THE NUMBER OF BITS NEEDED TO HOLD THE NUMBER */
1376
/*        OF VALUES IN THE GROUPS.  BUT FIND AND REMOVE THE */
1377
/*        REFERENCE FIRST. */
1378
1379
/*        ************************************* */
1380
1381
/*     WRITE(KFILDO,321)CFEED,LX */
1382
/* 321  FORMAT(A1,/' *****************************************' */
1383
/*    1          /' THE GROUP SIZES NOV( ) FOR ',I8,' GROUPS' */
1384
/*    2          /' *****************************************') */
1385
/*     WRITE(KFILDO,322) (NOV(J),J=1,MIN(LX,100)) */
1386
/* 322  FORMAT(/' '20I6) */
1387
1388
945
    *novref = nov[1];
1389
1390
945
    i__1 = *lx;
1391
56.7k
    for (k = 1; k <= i__1; ++k) {
1392
55.7k
  if (nov[k] < *novref) {
1393
2.19k
      *novref = nov[k];
1394
2.19k
  }
1395
/* L400: */
1396
55.7k
    }
1397
1398
945
    if (*novref > 0) {
1399
1400
945
  i__1 = *lx;
1401
56.7k
  for (k = 1; k <= i__1; ++k) {
1402
55.7k
      nov[k] -= *novref;
1403
/* L405: */
1404
55.7k
  }
1405
1406
945
    }
1407
1408
/*     WRITE(KFILDO,406)CFEED,NOVREF */
1409
/* 406  FORMAT(A1,/' *****************************************' */
1410
/*    1          /' THE GROUP SIZES NOV( ) AFTER REMOVING REFERENCE ',I8, */
1411
/*    2          /' *****************************************') */
1412
/*     WRITE(KFILDO,407) (NOV(J),J=1,MIN(LX,100)) */
1413
/* 407  FORMAT(/' '20I6) */
1414
/*     WRITE(KFILDO,408)CFEED */
1415
/* 408  FORMAT(A1,/' *****************************************' */
1416
/*    1          /' THE GROUP REFERENCES JMIN( )' */
1417
/*    2          /' *****************************************') */
1418
/*     WRITE(KFILDO,409) (JMIN(J),J=1,MIN(LX,100)) */
1419
/* 409  FORMAT(/' '20I6) */
1420
1421
945
    *kbit = 0;
1422
1423
945
    i__1 = *lx;
1424
56.7k
    for (k = 1; k <= i__1; ++k) {
1425
61.4k
L410:
1426
61.4k
  if (nov[k] < ibxx2[*kbit]) {
1427
55.7k
      goto L420;
1428
55.7k
  }
1429
5.67k
  ++(*kbit);
1430
5.67k
  goto L410;
1431
55.7k
L420:
1432
55.7k
  ;
1433
55.7k
    }
1434
1435
/*        DETERMINE WHETHER THE GROUP SIZES SHOULD BE REDUCED */
1436
/*        FOR SPACE EFFICIENCY. */
1437
1438
945
    if (ired == 0) {
1439
945
  reduce(kfildo, &jmin[1], &jmax[1], &lbit[1], &nov[1], lx, ndg, ibit,
1440
945
    jbit, kbit, novref, ibxx2, ier);
1441
1442
945
  if (*ier == 714 || *ier == 715) {
1443
/*              REDUCE HAS ABORTED.  REEXECUTE PACK_GP WITHOUT REDUCE. */
1444
/*              PROVIDE FOR A NON FATAL RETURN FROM REDUCE. */
1445
0
      iersav = *ier;
1446
0
      ired = 1;
1447
0
      *ier = 0;
1448
0
      goto L102;
1449
0
  }
1450
1451
945
    }
1452
1453
945
    free(misslx);
1454
945
    misslx=0;
1455
1456
/*     CALL TIMPR(KFILDO,KFILDO,'END   PACK_GP        ') */
1457
945
    if (iersav != 0) {
1458
0
  *ier = iersav;
1459
0
  return 0;
1460
0
    }
1461
1462
/* 900  IF(IER.NE.0)RETURN1 */
1463
1464
946
L900:
1465
946
    free(misslx);
1466
946
    return 0;
1467
945
} /* pack_gp__ */
1468