| 1 | /* ============================================================================= |
|---|
| 2 | AOTMSA2 Adalberto Otranto Tardelli / Meide da Silva Ancao |
|---|
| 3 | Application 1 |
|---|
| 4 | by AOT, 05/01/2002 |
|---|
| 5 | |
|---|
| 6 | Reads BIREME's Medline |
|---|
| 7 | by AOT, 09/03/2003 |
|---|
| 8 | |
|---|
| 9 | aotmsa2.c CI/tabula casos segundo variavel/variaveis de controle |
|---|
| 10 | ----------------------------------------------------------------------------- |
|---|
| 11 | |
|---|
| 12 | aotmsa2 <action>[,...] [<option> [...]] |
|---|
| 13 | |
|---|
| 14 | actions: C - get parameters from cgi |
|---|
| 15 | 1 - display header MDL: |
|---|
| 16 | TA - search amdl |
|---|
| 17 | tabulate amdl (v351/) |
|---|
| 18 | store F tab and W tab |
|---|
| 19 | DA - read F tab and W tab |
|---|
| 20 | display formA results |
|---|
| 21 | |
|---|
| 22 | options: bool=<expr> |
|---|
| 23 | cip=<> c:/2001x300/usersaot/cip.cip |
|---|
| 24 | decs=<> decs |
|---|
| 25 | amdl=<> amdl351 | MEDLINE*.def |
|---|
| 26 | atmdl=<> atmdl (000001..039999) |
|---|
| 27 | name=<> c:\windows\temp\tmp1.$$$ |
|---|
| 28 | pft=<> aotmsa2A.pft |
|---|
| 29 | atmdl99 amdl351.maxmfn |
|---|
| 30 | {from||loop|count|tell|setno}=<n> |
|---|
| 31 | ----------------------------------------------------------------------------- |
|---|
| 32 | ============================================================================= */ |
|---|
| 33 | |
|---|
| 34 | #include <stdio.h> |
|---|
| 35 | #include <string.h> |
|---|
| 36 | #include <ctype.h> |
|---|
| 37 | #include <time.h> |
|---|
| 38 | #include <math.h> |
|---|
| 39 | #include "cisis.h" /* CISIS Interface header file */ |
|---|
| 40 | #include "cirun.h" /* CISIS Interface runtime declarations */ |
|---|
| 41 | #include "cib70.h" /* CISIS Interface search engine */ |
|---|
| 42 | |
|---|
| 43 | |
|---|
| 44 | #if 1 /* ANSITABS */ |
|---|
| 45 | /* ---------------------------------------------------------------------- ansiuc.tab -- */ |
|---|
| 46 | unsigned char ansiuctab[256]= |
|---|
| 47 | { |
|---|
| 48 | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, |
|---|
| 49 | 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, |
|---|
| 50 | 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, |
|---|
| 51 | 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, |
|---|
| 52 | 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, |
|---|
| 53 | 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, |
|---|
| 54 | 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, |
|---|
| 55 | 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127, |
|---|
| 56 | 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, |
|---|
| 57 | 144,145,146,147,148,149,150,151,152,153,138,155,140,157,158,159, |
|---|
| 58 | 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, |
|---|
| 59 | 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, |
|---|
| 60 | 65, 65, 65, 65, 65, 65, 65, 67, 69, 69, 69, 69, 73, 73, 73, 73, |
|---|
| 61 | 68, 78, 79, 79, 79, 79, 79,215,216, 85, 85, 85, 85, 89,222,223, |
|---|
| 62 | 65, 65, 65, 65, 65, 65, 65, 67, 69, 69, 69, 69, 73, 73, 73, 73, |
|---|
| 63 | 208, 78, 79, 79, 79, 79, 79,247,216, 85, 85, 85, 85,221,222,221 |
|---|
| 64 | }; |
|---|
| 65 | /* ---------------------------------------------------------------------- ansiac.tab -- */ |
|---|
| 66 | unsigned char ansiactab[] = { |
|---|
| 67 | 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, |
|---|
| 68 | 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, |
|---|
| 69 | 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99,100,101,102,103,104, |
|---|
| 70 | 105,106,107,108,109,110,111,112,113,114,115,116,117, |
|---|
| 71 | 118,119,120,121,122,128,129,130,131,132,133,134,135,136,137,138,139,140,141, |
|---|
| 72 | 142,143,144,145,146,147,148,149,150,151,152,153,154, |
|---|
| 73 | 160,161,162,163,164,165,168,192,193,194,195,196,199,200,201,202,203,204,205, |
|---|
| 74 | 206,207,209,210,211,212,213,214,217,218,219,220,221, |
|---|
| 75 | 224,225,226,227,228,231,232,233,234,235,236,237,238,239,241,242,243,244,245, |
|---|
| 76 | 246,249,250,251,252,253,255 |
|---|
| 77 | ,000 |
|---|
| 78 | }; |
|---|
| 79 | /* ------------------------------------------------------------------------------------ */ |
|---|
| 80 | #endif /* 0000 */ |
|---|
| 81 | |
|---|
| 82 | |
|---|
| 83 | #define CLASSES 40000 /* default */ |
|---|
| 84 | |
|---|
| 85 | #define TAG351 351 /* DecsMfn tag - MH by serverw::\bases\mdl.006\aot\get*\ */ |
|---|
| 86 | #define TAG020 20 /* DecsCateg tag - standard A00.000.000.000...000 - currently up to 39 chrs */ |
|---|
| 87 | |
|---|
| 88 | #define MAXCATLEN 47 /* 111.222.333.444.555.666.777.888.999.000.111.222 */ |
|---|
| 89 | |
|---|
| 90 | #define DECSTAGNAME(x) ( \ |
|---|
| 91 | (toupper(*x) == 'I') ? 1 : \ |
|---|
| 92 | (toupper(*x) == 'E') ? 2 : \ |
|---|
| 93 | (toupper(*x) == 'P') ? 3 : 1 ) |
|---|
| 94 | |
|---|
| 95 | #define TAG022 22 /* DecsCDallCategs tag */ |
|---|
| 96 | #define TAG005 5 /* DecsCDCateg1MFN tag */ |
|---|
| 97 | |
|---|
| 98 | #define ATMDLTAG999 999 /* atmdl/999999 tag 999 = amdl351.maxmfn */ |
|---|
| 99 | |
|---|
| 100 | typedef struct tabfreqf_entry { |
|---|
| 101 | LONGX v351; |
|---|
| 102 | LONGX freq; /* = docs de TT em xA */ |
|---|
| 103 | } TABFREQF_ENTRY; |
|---|
| 104 | |
|---|
| 105 | typedef struct tabfreqd_entry { |
|---|
| 106 | LONGX v351; |
|---|
| 107 | // LONGX delta; |
|---|
| 108 | char delca[MAXCATLEN+1]; |
|---|
| 109 | LONGX gmfn; |
|---|
| 110 | } TABFREQD_ENTRY; |
|---|
| 111 | |
|---|
| 112 | typedef struct tabfreqw_entry { |
|---|
| 113 | LONGX v351; |
|---|
| 114 | float peso; |
|---|
| 115 | LONGX docsTTxA; /* v999[1] = docs de TT em xA */ |
|---|
| 116 | LONGX docsTTamdl; /* v999[2] = docs de TT em amdl = postings de TT em amdl */ |
|---|
| 117 | // LONGX docsTOTxA; /* v9991[1] = docs de xA - nao vazios */ |
|---|
| 118 | // LONGX docsTOTamdl; /* v9991[2] = docs de amdl */ |
|---|
| 119 | float frelTTxA; /* v1991[1] = frelTTxA = docs de TT em xA / docs de xA */ |
|---|
| 120 | float frelTTamdl; /* v1991[2] = frelTTamdl = docs de TT em amdl / docs de amdl */ |
|---|
| 121 | //see peso float pesoTTxA; /* v2991[1] = frelTTxA / frelTTamdl */ |
|---|
| 122 | // char pesoTTxAout[4]; /* v2221[1] = 'out' se peso < 1 */ |
|---|
| 123 | } TABFREQW_ENTRY; |
|---|
| 124 | |
|---|
| 125 | /* prototypes */ |
|---|
| 126 | #if ANSI |
|---|
| 127 | int rutfreqF(LONGX *tabcntA, int ntabs, LONGX drec, LONGX *tabcntArankF, TABFREQF_ENTRY **tabfreqFp); |
|---|
| 128 | int outfreqF(int ntabs, char *dbnoutp, LONGX *tabcntArankW, LONGX *tabcntArankD, TABFREQF_ENTRY *tabfreqFp); |
|---|
| 129 | int rutfreqW(TABFREQF_ENTRY *tabfreqF, int ntabs, char *amdlname, LONGX docsTOTxA, LONGX docsTOTamdl, LONGX *tabcntArankF, LONGX *tabcntArankW, TABFREQW_ENTRY **tabfreqWp, LONGX *tabcntMDL, LONGX *gtabcntA); |
|---|
| 130 | int outfreqW(int ntabs, char *dbnoutp, LONGX docsTOTxA, LONGX docsTOTamdl, LONGX *tabcntArankF, LONGX *tabcntArankD, TABFREQD_ENTRY *tabfreqD, TABFREQW_ENTRY *tabfreqW); |
|---|
| 131 | int rutfreqD(TABFREQF_ENTRY *tabfreqF, int ntabs, LONGX *tabcntArankF, LONGX *tabcntArankW, LONGX *tabcntArankD, TABFREQD_ENTRY **tabfreqDp, LONGX *tabcntGMDL, LONGX *gtabcntA); |
|---|
| 132 | int outfreqD(int ntabs, char *dbnoutp, LONGX *tabcntArankF, LONGX *tabcntArankW, TABFREQD_ENTRY *tabfreqD); |
|---|
| 133 | |
|---|
| 134 | char *recsfldv(char *areap, char *fldp, FFI fldlen, char *defaultp); |
|---|
| 135 | #else |
|---|
| 136 | int rutfreqF(); |
|---|
| 137 | int outfreqF(); |
|---|
| 138 | int rutfreqW(); |
|---|
| 139 | int outfreqW(); |
|---|
| 140 | int rutfreqD(); |
|---|
| 141 | int outfreqD(); |
|---|
| 142 | char *recsfldv(); |
|---|
| 143 | #endif |
|---|
| 144 | |
|---|
| 145 | /* <========================= */ |
|---|
| 146 | LONGX ddrec; |
|---|
| 147 | char *ddecsdbnp; |
|---|
| 148 | /* <========================= */ |
|---|
| 149 | |
|---|
| 150 | /* tabs here */ |
|---|
| 151 | int ntabs=0; /* numero de entradas de tabcntA/tabcntArankx */ |
|---|
| 152 | LONGX tabcntA [CLASSES+1]; /* indexed by DecsMfn */ /* avoid -1 */ |
|---|
| 153 | LONGX tabcntArankF[CLASSES+1]; /* indexed by DecsMfn */ |
|---|
| 154 | LONGX tabcntArankW[CLASSES+1]; /* indexed by DecsMfn */ |
|---|
| 155 | LONGX tabcntArankD[CLASSES+1]; /* indexed by DecsMfn */ |
|---|
| 156 | |
|---|
| 157 | int gntabs=0; /* numero de entradas de gtabcntA */ |
|---|
| 158 | LONGX gtabcntA [CLASSES+1]; /* indexed by DecsMfn */ |
|---|
| 159 | |
|---|
| 160 | LONGX tabcntMDL [CLASSES+1]; /* indexed by DecsMfn */ |
|---|
| 161 | LONGX tabcntGMDL [CLASSES+1]; /* indexed by DecsMfn */ |
|---|
| 162 | |
|---|
| 163 | #define MAXTABV05 42099 |
|---|
| 164 | LONGX vcategmfn[26][10][10]; /* indexed by [A][0][0] */ /* 10K */ |
|---|
| 165 | int ntabv05=0; /* avail */ |
|---|
| 166 | LONGX vtabv05[MAXTABV05]; /* indexed by vtabv05xrf[DecsMnf] */ |
|---|
| 167 | int vtabv05xrf[CLASSES+1]; /* starting index 0..MAXTABV05-1 */ |
|---|
| 168 | int vtabv05len[CLASSES+1]; /* number of entries */ |
|---|
| 169 | /* tabs here */ |
|---|
| 170 | |
|---|
| 171 | |
|---|
| 172 | void main(argc,argv_main) |
|---|
| 173 | int argc; |
|---|
| 174 | char *argv_main[]; |
|---|
| 175 | { |
|---|
| 176 | #define MAXARGS 512 |
|---|
| 177 | char *argv[MAXARGS+1]; |
|---|
| 178 | int i,argnext=1; |
|---|
| 179 | |
|---|
| 180 | void *ciapip = NULL; |
|---|
| 181 | |
|---|
| 182 | RECSTRU *recp; |
|---|
| 183 | LONGX irec=0L; |
|---|
| 184 | unsigned char *p,*q; |
|---|
| 185 | |
|---|
| 186 | LONGX vtime[100]; /* watch */ |
|---|
| 187 | char *vtimid[100]; /* watch */ |
|---|
| 188 | int ntimes=0; /* watch */ |
|---|
| 189 | |
|---|
| 190 | int parmtime=0; |
|---|
| 191 | int parmloadmdl=1; |
|---|
| 192 | |
|---|
| 193 | int parmgroup=0; |
|---|
| 194 | LONGX mydrec=0L; |
|---|
| 195 | |
|---|
| 196 | char parmsortx='\0'; /* actual sort parameter */ |
|---|
| 197 | int parmshowgrp1=0; /* show group01.w information */ /* 1 */ |
|---|
| 198 | int parmshowcat1=0; /* show first cat1 - name */ /* c */ |
|---|
| 199 | int parmshowtree=0; /* show hierarchy?? lines */ /* t */ |
|---|
| 200 | int parmshowzero=0; /* don't show condition lines */ /* z */ |
|---|
| 201 | |
|---|
| 202 | |
|---|
| 203 | #define ENVASIZE 8000 |
|---|
| 204 | char envarea[ENVASIZE]; |
|---|
| 205 | |
|---|
| 206 | char *usernamp="aot"; |
|---|
| 207 | char *parmaid=NULL; |
|---|
| 208 | |
|---|
| 209 | /* ---------------------------------------------------------------------- */ |
|---|
| 210 | LONGX boolridx=0L; |
|---|
| 211 | LONGX booldbcrec=0L; /* b5_exp usa booldbcrec condicionado a namedbnp */ |
|---|
| 212 | |
|---|
| 213 | LONGX boolhits=0; |
|---|
| 214 | LONGX boolh; |
|---|
| 215 | LONGX booltell=0L; /* 0L = no msg; 1L = tell; 2L = tell+root */ |
|---|
| 216 | LONGX booltlir=0L; /* b70 invx */ |
|---|
| 217 | b7_CIB7 *cib7p=NULL; |
|---|
| 218 | B7HITLIST *hitlistp; /* hit processing */ |
|---|
| 219 | LONGX *mfnlistp; /* hit processing */ |
|---|
| 220 | |
|---|
| 221 | char booltmpnam[128]={'\0'}; /* b72 MFQTHMEM tmp file */ |
|---|
| 222 | |
|---|
| 223 | /* ---------------------------------------------------------------------- */ |
|---|
| 224 | /* tabs here */ |
|---|
| 225 | TABFREQF_ENTRY *tabfreqF=NULL; /* indexed by rankF */ |
|---|
| 226 | TABFREQW_ENTRY *tabfreqW=NULL; /* indexed by rankW */ |
|---|
| 227 | TABFREQD_ENTRY *tabfreqD=NULL; /* indexed by rankD */ |
|---|
| 228 | |
|---|
| 229 | LONGX docsTOTxA; /* v9991[1] = docs de xA - nao vazios */ |
|---|
| 230 | LONGX docsTOTamdl; /* v9991[2] = docs de amdl */ |
|---|
| 231 | |
|---|
| 232 | LONGX count1=0L; /* registros lidos */ |
|---|
| 233 | LONGX count2=0L; /* casos tabulados */ |
|---|
| 234 | |
|---|
| 235 | LONGX drec=0L; |
|---|
| 236 | char *gidbnp=NULL; |
|---|
| 237 | |
|---|
| 238 | int parmtrace=0; |
|---|
| 239 | /*nu LONGX parmfrom=1,parmto=999999999L,parmcount=0; */ |
|---|
| 240 | |
|---|
| 241 | /* -------------------------------------------------------------------------- */ |
|---|
| 242 | char *deffnamp=NULL; |
|---|
| 243 | char *deffmhxp=NULL; |
|---|
| 244 | char deffbuffup[ENVASIZE]; |
|---|
| 245 | |
|---|
| 246 | char *cipfnamp=NULL; |
|---|
| 247 | char *decsdbnp=NULL; |
|---|
| 248 | char *amdldbnp=NULL; |
|---|
| 249 | char *atmdldbnp=NULL; |
|---|
| 250 | char *tmp1dbnp=NULL; |
|---|
| 251 | char *pftfnamp=NULL; |
|---|
| 252 | char *langp=NULL; |
|---|
| 253 | LONGX parmloopTA=0; |
|---|
| 254 | LONGX parmtellTA=0; |
|---|
| 255 | LONGX parmfromDA=0; |
|---|
| 256 | LONGX parmcountDA=0; |
|---|
| 257 | char *parmsortp=NULL; |
|---|
| 258 | char *parmdownp=NULL; |
|---|
| 259 | char *namedbnp=NULL; /* b7x query dbn */ |
|---|
| 260 | char *boolqryp=NULL; /* bool= */ |
|---|
| 261 | LONGX boolsetno=0; /* b7x set no. */ |
|---|
| 262 | int parmatmdl99=0; |
|---|
| 263 | |
|---|
| 264 | char *prmloopTA =NULL; |
|---|
| 265 | char *prmfromDA =NULL; |
|---|
| 266 | char *prmcountDA=NULL; |
|---|
| 267 | char *prmboolset=NULL; |
|---|
| 268 | char *prmatmdl99=NULL; |
|---|
| 269 | |
|---|
| 270 | char *actionp=NULL; |
|---|
| 271 | |
|---|
| 272 | int actionCG=0; |
|---|
| 273 | int actionDD=0; |
|---|
| 274 | int actionTA=0; |
|---|
| 275 | int actionDA=0; |
|---|
| 276 | |
|---|
| 277 | int parmdown=0; |
|---|
| 278 | |
|---|
| 279 | /* -------------------------------------------------------------------------- */ |
|---|
| 280 | char namedbnarea[BUFSIZ]; |
|---|
| 281 | |
|---|
| 282 | char dbnoutF[BUFSIZ]; |
|---|
| 283 | char dbnoutW[BUFSIZ]; |
|---|
| 284 | char dbnoutD[BUFSIZ]; |
|---|
| 285 | /* -------------------------------------------------------------------------- */ |
|---|
| 286 | |
|---|
| 287 | #if CICGI |
|---|
| 288 | char *cgipfxp="tag"; |
|---|
| 289 | UWORD cgitag=2000; |
|---|
| 290 | char *wwwp=NULL; |
|---|
| 291 | LONGX wrec; |
|---|
| 292 | #endif |
|---|
| 293 | |
|---|
| 294 | /* here we go.. |
|---|
| 295 | */ |
|---|
| 296 | #if CIAPI |
|---|
| 297 | ciapip = cisisApplication( MAXNREC,MAXNTRM );/* mandatory for CIAPI definitions */ |
|---|
| 298 | #endif /* CIAPI */ |
|---|
| 299 | |
|---|
| 300 | /* get calling arguments |
|---|
| 301 | */ |
|---|
| 302 | for (i=0; i < argc; i++) argv[i]=argv_main[i]; |
|---|
| 303 | |
|---|
| 304 | /* set watch |
|---|
| 305 | */ |
|---|
| 306 | vtimid[ntimes]="start"; time(&vtime[ntimes++]); /* watch */ |
|---|
| 307 | |
|---|
| 308 | /* set ansiuc & ansiac |
|---|
| 309 | */ |
|---|
| 310 | #if 1 /* ANSITABS */ |
|---|
| 311 | memcpy(isisuctab,ansiuctab,sizeof(ansiuctab)); |
|---|
| 312 | memset(isiswctab,0x00,256); |
|---|
| 313 | for (isiswctot=0; ansiactab[isiswctot]; isiswctot=isiswctot+1) isiswctab[ansiactab[isiswctot]]=1; |
|---|
| 314 | #endif /* 0000 */ |
|---|
| 315 | |
|---|
| 316 | /* check if trace is present */ |
|---|
| 317 | for (i=0; i < argc; i++) { |
|---|
| 318 | p=argv[i]; |
|---|
| 319 | if (strncmp(p,"trace?",6) == 0 || strncmp(p,"trace=",6) == 0) { |
|---|
| 320 | if (sscanf(p+6,"%d",&parmtrace) != 1) fatal(p); |
|---|
| 321 | if (parmtrace) { |
|---|
| 322 | printf("+++trace: trace='%.11s\n'",p); |
|---|
| 323 | printf("Content-type: text/plain\n\n"); |
|---|
| 324 | printf("+++trace: \n"); |
|---|
| 325 | } |
|---|
| 326 | break; |
|---|
| 327 | } |
|---|
| 328 | } |
|---|
| 329 | |
|---|
| 330 | #ifndef FORCECGI |
|---|
| 331 | #define FORCECGI 0 |
|---|
| 332 | #endif |
|---|
| 333 | #if FORCECGI |
|---|
| 334 | putenv("REQUEST_METHOD=GET"); |
|---|
| 335 | /* |
|---|
| 336 | putenv("QUERY_STRING=lang=p&action=C%2CTA%2CDA&amdl=amdl351&bool=009068&bool=034268&bool=034269&loop=100&sort=f&from=1&count=20&x=39&y=3"); |
|---|
| 337 | */ |
|---|
| 338 | putenv("QUERY_STRING=lang=p&action=C,TA,DA&amdl=MEDLINE_6687.def&loop=1&bool=006621&sort=f&from=1&count=20"); |
|---|
| 339 | #endif |
|---|
| 340 | |
|---|
| 341 | |
|---|
| 342 | /* get CGI data |
|---|
| 343 | */ |
|---|
| 344 | #if CICGI |
|---|
| 345 | RECORD(wrec=nrecs,"null",1L); RECrc=RCNORMAL; MFRstatus=ACTIVE; |
|---|
| 346 | wwwp=NULL; cicgi0(&argc, argv, &wwwp, cgitag, cgipfxp); |
|---|
| 347 | |
|---|
| 348 | if (wwwp) { |
|---|
| 349 | |
|---|
| 350 | DIRSTRU *dirp; |
|---|
| 351 | int xdir,iocc,loop; |
|---|
| 352 | if (fldupdat(wrec,wwwp)) fatal(wwwp); |
|---|
| 353 | |
|---|
| 354 | /* check if trace is present */ |
|---|
| 355 | for (parmtrace=0, dirp=MFRdir, xdir=0, loop=MFRnvf; loop--; dirp++, xdir++) |
|---|
| 356 | if (dirp->tag == cgitag) { |
|---|
| 357 | p=FIELDP(xdir); |
|---|
| 358 | if (strncmp(p,"^ntrace^v",2+5+2) == 0) { |
|---|
| 359 | parmtrace=1; |
|---|
| 360 | if (parmtrace) { |
|---|
| 361 | printf("+++trace: trace='%.11s\n'",p); |
|---|
| 362 | printf("Content-type: text/plain\n\n"); |
|---|
| 363 | printf("+++trace: \n"); |
|---|
| 364 | break; |
|---|
| 365 | } |
|---|
| 366 | } |
|---|
| 367 | } |
|---|
| 368 | |
|---|
| 369 | /* check if cgi is enabled */ |
|---|
| 370 | for (actionCG=0, dirp=MFRdir, xdir=0, loop=MFRnvf; loop--; dirp++, xdir++) |
|---|
| 371 | if (dirp->tag == cgitag) { |
|---|
| 372 | p=FIELDP(xdir); |
|---|
| 373 | if (strncmp(p,"^naction^vC",2+6+2+1) == 0) { |
|---|
| 374 | actionCG=1; |
|---|
| 375 | if (parmtrace) printf("+++trace: action='%.11s'\n",p); |
|---|
| 376 | break; |
|---|
| 377 | } |
|---|
| 378 | } |
|---|
| 379 | |
|---|
| 380 | if (actionCG) { /* cgi is enabled */ |
|---|
| 381 | |
|---|
| 382 | for (dirp=MFRdir, xdir=iocc=0, loop=MFRnvf; loop--; dirp++, xdir++) { |
|---|
| 383 | if (dirp->tag == cgitag) { |
|---|
| 384 | FFI plen; |
|---|
| 385 | p=FIELDP(xdir); plen=dirp->len; iocc++; |
|---|
| 386 | /* get CGI by name |
|---|
| 387 | */ |
|---|
| 388 | if (strncmp(p,"^ncip^v" , 3+4) == 0) cipfnamp =recsfldv(NULL,p,plen,""); |
|---|
| 389 | if (strncmp(p,"^ndecs^v" , 4+4) == 0) decsdbnp =recsfldv(NULL,p,plen,""); |
|---|
| 390 | if (strncmp(p,"^namdl^v" , 4+4) == 0) amdldbnp =recsfldv(NULL,p,plen,""); |
|---|
| 391 | if (strncmp(p,"^natmdl^v" , 5+4) == 0) atmdldbnp =recsfldv(NULL,p,plen,""); |
|---|
| 392 | if (strncmp(p,"^ntmp1^v" , 4+4) == 0) tmp1dbnp =recsfldv(NULL,p,plen,""); |
|---|
| 393 | if (strncmp(p,"^npft^v" , 3+4) == 0) pftfnamp =recsfldv(NULL,p,plen,""); |
|---|
| 394 | if (strncmp(p,"^nlang^v" , 4+4) == 0) langp =recsfldv(NULL,p,plen,""); |
|---|
| 395 | if (strncmp(p,"^nloop^v" , 4+4) == 0) { prmloopTA =recsfldv(NULL,p,plen,""); parmloopTA =atol(prmloopTA ); } |
|---|
| 396 | if (strncmp(p,"^nfrom^v" , 4+4) == 0) { prmfromDA =recsfldv(NULL,p,plen,""); parmfromDA =atol(prmfromDA ); } |
|---|
| 397 | if (strncmp(p,"^ncount^v" , 5+4) == 0) { prmcountDA=recsfldv(NULL,p,plen,""); parmcountDA=atol(prmcountDA); } |
|---|
| 398 | if (strncmp(p,"^nsort^v" , 4+4) == 0) parmsortp =recsfldv(NULL,p,plen,""); |
|---|
| 399 | if (strncmp(p,"^ndown^v" , 4+4) == 0) parmdownp =recsfldv(NULL,p,plen,""); |
|---|
| 400 | q=NULL; |
|---|
| 401 | if (strncmp(p,"^nbool^v" , 4+4) == 0) q =recsfldv(NULL,p,plen,""); |
|---|
| 402 | if (q) { |
|---|
| 403 | if (boolqryp) { |
|---|
| 404 | sprintf(envarea,"%s or %s",boolqryp,q); |
|---|
| 405 | boolqryp=strdup(envarea); |
|---|
| 406 | } |
|---|
| 407 | else boolqryp=q; |
|---|
| 408 | } |
|---|
| 409 | if (strncmp(p,"^nname^v" , 4+4) == 0) namedbnp =recsfldv(NULL,p,plen,""); |
|---|
| 410 | if (strncmp(p,"^natmdl99^v", 7+4) == 0) { prmatmdl99=recsfldv(NULL,p,plen,""); parmatmdl99=atoi(prmatmdl99); } |
|---|
| 411 | if (strncmp(p,"^naction^v" , 6+4) == 0) actionp =recsfldv(NULL,p,plen,""); |
|---|
| 412 | if (strncmp(p,"^nsetno^v" , 5+4) == 0) { prmboolset=recsfldv(NULL,p,plen,""); boolsetno=atol(prmboolset); } |
|---|
| 413 | |
|---|
| 414 | } /* end if (dirp->tag == cgitag) */ |
|---|
| 415 | } /* end for (dirp=MFRdir) */ |
|---|
| 416 | } /* end if (cgi is enabled */ |
|---|
| 417 | } /* end if (wwwp) */ |
|---|
| 418 | #endif /* CICGI */ |
|---|
| 419 | |
|---|
| 420 | |
|---|
| 421 | /* set default values |
|---|
| 422 | */ |
|---|
| 423 | #if 0 |
|---|
| 424 | PATH_DATA=/iah/online/ |
|---|
| 425 | PATH_CGI-BIN=/users/www/cgi-bin/iah/ |
|---|
| 426 | #endif |
|---|
| 427 | |
|---|
| 428 | #if UNIX |
|---|
| 429 | if (!cipfnamp) cipfnamp = "/users/www/aot/aotmsa2/cip.cip"; |
|---|
| 430 | if (!decsdbnp) decsdbnp = "decs"; |
|---|
| 431 | if (!amdldbnp) amdldbnp = "/users/www/data/iah/online/MEDLINE_2001.def"; |
|---|
| 432 | #else |
|---|
| 433 | if (!cipfnamp) cipfnamp = "c:/2001x300/usersaot/cip.cip"; |
|---|
| 434 | if (!decsdbnp) decsdbnp = "decs"; |
|---|
| 435 | if (!amdldbnp) amdldbnp = "amdl351"; |
|---|
| 436 | #endif |
|---|
| 437 | if (!atmdldbnp) atmdldbnp = "atmdl"; |
|---|
| 438 | if (!tmp1dbnp) tmp1dbnp = NULL; |
|---|
| 439 | if (!pftfnamp) pftfnamp = "aotmsa2A.pft"; |
|---|
| 440 | if (!langp) langp = "p"; |
|---|
| 441 | if (!parmloopTA) parmloopTA = 1; |
|---|
| 442 | if (!parmtellTA) parmtellTA = 0; /* */ |
|---|
| 443 | if (!parmfromDA) parmfromDA = 1; |
|---|
| 444 | if (!parmcountDA) parmcountDA = 0; |
|---|
| 445 | if (!parmsortp) parmsortp = "f"; |
|---|
| 446 | if (!parmdownp) parmdownp = "0"; |
|---|
| 447 | if (!parmatmdl99) parmatmdl99 = 0; |
|---|
| 448 | if (!actionp) {actionCG = 0; |
|---|
| 449 | actionDD = 0; |
|---|
| 450 | actionTA = 0; |
|---|
| 451 | actionDA = 0; } |
|---|
| 452 | if (!boolsetno) boolsetno = 0; |
|---|
| 453 | |
|---|
| 454 | dbnoutF[0]='\0'; /* .f */ |
|---|
| 455 | dbnoutW[0]='\0'; /* .w */ |
|---|
| 456 | dbnoutD[0]='\0'; /* .w */ |
|---|
| 457 | |
|---|
| 458 | |
|---|
| 459 | if (argc < 2 && !wwwp) { |
|---|
| 460 | printf("%s",cicopyr("Application AOTMSA2")); |
|---|
| 461 | printf(" \n"); |
|---|
| 462 | printf("aotmsa2 <action>[,...] [<option> [...]] \n"); |
|---|
| 463 | printf(" \n"); |
|---|
| 464 | printf("actions: C - get parameters from cgi \n"); |
|---|
| 465 | printf(" TA - search amdl \n"); |
|---|
| 466 | printf(" tabulate amdl (v351/) \n"); |
|---|
| 467 | printf(" store tableF and tableW \n"); |
|---|
| 468 | printf(" DA - read tableF or tableW \n"); |
|---|
| 469 | printf(" display formA results \n"); |
|---|
| 470 | printf(" \n"); |
|---|
| 471 | printf("options: loop=<n> \n"); |
|---|
| 472 | printf(" from|count=<n> \n"); |
|---|
| 473 | printf(" sort={f|w} \n"); |
|---|
| 474 | printf(" btell|tell=<n> \n"); |
|---|
| 475 | printf(" bool=<expr> [setno=<n>] \n"); |
|---|
| 476 | printf(" atmdl99 \n"); |
|---|
| 477 | printf(" \n"); |
|---|
| 478 | printf(" cip , %s \n", cipfnamp ); |
|---|
| 479 | printf(" decs , %s \n", decsdbnp ); |
|---|
| 480 | printf(" amdl , %s \n", amdldbnp ); |
|---|
| 481 | printf(" atmdl , %s \n", atmdldbnp ); |
|---|
| 482 | printf(" tmp1 , %s \n", tmp1dbnp ); |
|---|
| 483 | printf(" pft , %s \n", pftfnamp ); |
|---|
| 484 | printf(" lang , %s \n", langp ); |
|---|
| 485 | printf(" loop , %"_LD_" \n", parmloopTA ); |
|---|
| 486 | printf(" from , %"_LD_" \n", parmfromDA ); |
|---|
| 487 | printf(" count , %"_LD_" \n", parmcountDA ); |
|---|
| 488 | printf(" sort , %s \n", parmsortp ); |
|---|
| 489 | printf(" down , %s \n", parmdownp ); |
|---|
| 490 | printf(" bool , %s \n", boolqryp ); |
|---|
| 491 | printf(" name , %s \n", namedbnp ); |
|---|
| 492 | printf(" atmdl99, %d \n", parmatmdl99 ); |
|---|
| 493 | printf(" action , %s \n", actionp ); |
|---|
| 494 | printf(" setno , %"_LD_" \n", boolsetno ); |
|---|
| 495 | printf(" \n"); |
|---|
| 496 | exit(1); |
|---|
| 497 | } |
|---|
| 498 | |
|---|
| 499 | |
|---|
| 500 | /* |
|---|
| 501 | get options |
|---|
| 502 | */ |
|---|
| 503 | for (; argnext < argc; argnext++) { |
|---|
| 504 | p=argv[argnext]; |
|---|
| 505 | |
|---|
| 506 | if (strncmp(p,"cip?",4) == 0 || strncmp(p,"cip=",4) == 0) { |
|---|
| 507 | cipfnamp=p+4; |
|---|
| 508 | continue; |
|---|
| 509 | } |
|---|
| 510 | if (strncmp(p,"decs?",5) == 0 || strncmp(p,"decs=",5) == 0) { |
|---|
| 511 | decsdbnp=p+5; |
|---|
| 512 | continue; |
|---|
| 513 | } |
|---|
| 514 | if (strncmp(p,"amdl?",5) == 0 || strncmp(p,"amdl=",5) == 0) { |
|---|
| 515 | amdldbnp=p+5; |
|---|
| 516 | continue; |
|---|
| 517 | } |
|---|
| 518 | if (strncmp(p,"atmdl?",6) == 0 || strncmp(p,"atmdl=",6) == 0) { |
|---|
| 519 | atmdldbnp=p+6; |
|---|
| 520 | continue; |
|---|
| 521 | } |
|---|
| 522 | if (strncmp(p,"tmp1?",5) == 0 || strncmp(p,"tmp1=",5) == 0) { |
|---|
| 523 | tmp1dbnp=p+5; |
|---|
| 524 | continue; |
|---|
| 525 | } |
|---|
| 526 | if (strncmp(p,"pft?",4) == 0 || strncmp(p,"pft=",4) == 0) { |
|---|
| 527 | pftfnamp=p+4; |
|---|
| 528 | continue; |
|---|
| 529 | } |
|---|
| 530 | if (strncmp(p,"loop?",5) == 0 || strncmp(p,"loop=",5) == 0) { |
|---|
| 531 | if (sscanf(p+5,"%"_LD_,&parmloopTA) != 1) fatal(p); |
|---|
| 532 | continue; |
|---|
| 533 | } |
|---|
| 534 | if (strncmp(p,"from?",5) == 0 || strncmp(p,"from=",5) == 0) { |
|---|
| 535 | if (sscanf(p+5,"%"_LD_,&parmfromDA) != 1) fatal(p); |
|---|
| 536 | continue; |
|---|
| 537 | } |
|---|
| 538 | if (strncmp(p,"count?",6) == 0 || strncmp(p,"count=",6) == 0) { |
|---|
| 539 | if (sscanf(p+6,"%"_LD_,&parmcountDA) != 1) fatal(p); |
|---|
| 540 | continue; |
|---|
| 541 | } |
|---|
| 542 | if (strncmp(p,"sort?",5) == 0 || strncmp(p,"sort=",5) == 0) { |
|---|
| 543 | parmsortp=p+5; |
|---|
| 544 | continue; |
|---|
| 545 | } |
|---|
| 546 | if (strncmp(p,"down?",5) == 0 || strncmp(p,"down=",5) == 0) { |
|---|
| 547 | parmdownp=p+5; |
|---|
| 548 | if (sscanf(parmdownp,"%d",&parmdown) != 1) fatal(p); |
|---|
| 549 | continue; |
|---|
| 550 | } |
|---|
| 551 | if (!strncmp(p,"bool=",5)) { |
|---|
| 552 | q=loadfile(gidbnp,'@',p+5,NULL,0L,'\n'); |
|---|
| 553 | if (!q) fatal(p); |
|---|
| 554 | if (boolqryp) { |
|---|
| 555 | sprintf(envarea,"%s or %s",boolqryp,q); |
|---|
| 556 | boolqryp=strdup(envarea); |
|---|
| 557 | } |
|---|
| 558 | else boolqryp=q; |
|---|
| 559 | continue; |
|---|
| 560 | } |
|---|
| 561 | if (strncmp(p,"name?",5) == 0 || strncmp(p,"name=",5) == 0) { |
|---|
| 562 | namedbnp=p+5; |
|---|
| 563 | strcpy(namedbnarea,namedbnp); |
|---|
| 564 | continue; |
|---|
| 565 | } |
|---|
| 566 | if (strcmp(p,"atmdl99") == 0) { |
|---|
| 567 | parmatmdl99=1; |
|---|
| 568 | continue; |
|---|
| 569 | } |
|---|
| 570 | if (strncmp(p,"action?",7) == 0 || strncmp(p,"action=",7) == 0) { |
|---|
| 571 | actionp=q=p+7; |
|---|
| 572 | if (!*q) fatal(p); |
|---|
| 573 | continue; |
|---|
| 574 | } |
|---|
| 575 | if (strncmp(p,"setno?",6) == 0 || strncmp(p,"setno=",6) == 0) { |
|---|
| 576 | if (sscanf(p+6,"%"_LD_,&boolsetno) != 1) fatal(p); |
|---|
| 577 | continue; |
|---|
| 578 | } |
|---|
| 579 | /* offer */ |
|---|
| 580 | if (strncmp(p,"tell?",5) == 0 || strncmp(p,"tell=",5) == 0) { |
|---|
| 581 | if (sscanf(p+5,"%"_LD_,&parmtellTA) != 1) fatal(p); |
|---|
| 582 | continue; |
|---|
| 583 | } |
|---|
| 584 | if (strncmp(p,"btell?",6) == 0 || strncmp(p,"btell=",6) == 0) { |
|---|
| 585 | if (sscanf(p+6,"%"_LD_,&booltell) != 1) fatal(p); |
|---|
| 586 | continue; |
|---|
| 587 | } |
|---|
| 588 | if (strcmp(p,"trace") == 0) { |
|---|
| 589 | parmtrace=1; |
|---|
| 590 | continue; |
|---|
| 591 | } |
|---|
| 592 | |
|---|
| 593 | fatal(p); |
|---|
| 594 | } |
|---|
| 595 | |
|---|
| 596 | |
|---|
| 597 | /* actions */ |
|---|
| 598 | if (actionp) { |
|---|
| 599 | for (q=actionp; *q; ) { |
|---|
| 600 | |
|---|
| 601 | if (*q == 'C' && strncmp(q,"C" ,1) == 0) |
|---|
| 602 | { /*actionCG=1;*/ if (*(q+=1) == ',') q++; continue; } |
|---|
| 603 | |
|---|
| 604 | if (isdigit(*q)) |
|---|
| 605 | { actionDD=(int)(*q)-(int)'0'; if (*(q+=1) == ',') q++; continue; } |
|---|
| 606 | |
|---|
| 607 | if (*q == 'T' && strncmp(q,"TA",2) == 0) |
|---|
| 608 | { actionTA=1; if (*(q+=2) == ',') q++; continue; } |
|---|
| 609 | |
|---|
| 610 | if (*q == 'D' && strncmp(q,"DA",2) == 0) |
|---|
| 611 | { actionDA=1; if (*(q+=2) == ',') q++; continue; } |
|---|
| 612 | |
|---|
| 613 | if (*q) fatal(p); |
|---|
| 614 | } |
|---|
| 615 | } |
|---|
| 616 | |
|---|
| 617 | if (parmsortp) { |
|---|
| 618 | q=parmsortp; |
|---|
| 619 | if (*q == 'g') { parmgroup=1; q++; parmsortp=q; } |
|---|
| 620 | if (*q == '1') { parmshowgrp1=1; q++; } |
|---|
| 621 | if (*q == 'c') { parmshowcat1=1; q++; } |
|---|
| 622 | if (*q == 't') { parmshowtree=1; q++; } |
|---|
| 623 | if (*q == 'z') { parmshowzero=1; q++; } |
|---|
| 624 | if (strcmp(q,"f") && strcmp(q,"w") && strcmp(q,"d")) fatal(parmsortp); |
|---|
| 625 | parmsortx= *q; |
|---|
| 626 | } |
|---|
| 627 | #if 0 |
|---|
| 628 | for (q=parmsortp; *q; q++) { |
|---|
| 629 | if (*q == 'g') { parmgroup=1; parmsortp=q+1; } |
|---|
| 630 | if (*q == '1') { parmshowgrp1=1; } |
|---|
| 631 | if (*q == 'c') { parmshowcat1=1; } |
|---|
| 632 | if (*q == 't') { parmshowtree=1; } |
|---|
| 633 | if (*q == 'z') { parmshowzero=1; } |
|---|
| 634 | if (*q == 'f' || *q == 'w' || *q == 'd') { parmsortx= *q; } |
|---|
| 635 | } |
|---|
| 636 | #endif |
|---|
| 637 | |
|---|
| 638 | if (parmtrace) { |
|---|
| 639 | if (amdldbnp) printf("+++trace: amdldbnp=%s\n",amdldbnp); |
|---|
| 640 | if (tmp1dbnp) printf("+++trace: tmp1dbnp=%s\n",tmp1dbnp); |
|---|
| 641 | printf("+++trace: actionp=%s\n",actionp); |
|---|
| 642 | printf("+++trace: actionDD=%d\n",actionDD); |
|---|
| 643 | printf("+++trace: actionTA=%d\n",actionTA); |
|---|
| 644 | printf("+++trace: actionDA=%d\n",actionDA); |
|---|
| 645 | printf("+++trace: sort=%s\n",parmsortp); |
|---|
| 646 | printf("+++trace: group=%d\n",parmgroup); |
|---|
| 647 | } |
|---|
| 648 | |
|---|
| 649 | |
|---|
| 650 | /* Common setup |
|---|
| 651 | */ |
|---|
| 652 | |
|---|
| 653 | /* get MEDLINE*.def parameters |
|---|
| 654 | */ |
|---|
| 655 | if (strlen(amdldbnp) > 4) if (strcmp(amdldbnp+strlen(amdldbnp)-4,".def") == 0) { |
|---|
| 656 | char loadname[1+BUFSIZ]; |
|---|
| 657 | char *defarea; |
|---|
| 658 | deffnamp=amdldbnp; |
|---|
| 659 | sprintf(loadname,"@%s",deffnamp); |
|---|
| 660 | defarea=loadfile(gidbnp,'@',loadname,NULL,0L,'\n'); |
|---|
| 661 | if (!defarea) { |
|---|
| 662 | printf("Content-type: text/plain\n\n"); |
|---|
| 663 | printf("file %s not found \n",deffnamp); |
|---|
| 664 | exit(120); |
|---|
| 665 | } |
|---|
| 666 | /* |
|---|
| 667 | FILE DATABASE.*=/base2/mdl/back3/mdl8590.* |
|---|
| 668 | FILE MH.*=/base1/mdl/back3/mdlmh%lang%.* |
|---|
| 669 | FILE M.*=/base1/mdl/back3/mdlmh.* |
|---|
| 670 | */ |
|---|
| 671 | p=strstr(defarea,"FILE DATABASE.*="); |
|---|
| 672 | if (p) if (strstr((p+=strlen("FILE DATABASE.*="))+1,".*")) { |
|---|
| 673 | *(strstr(p+1,".*"))='\0'; |
|---|
| 674 | amdldbnp=strdup(p); |
|---|
| 675 | if (parmtrace) printf("+++trace: amdldbnp=%s\n",amdldbnp); |
|---|
| 676 | } |
|---|
| 677 | p=strstr(defarea,"FILE MH.*="); |
|---|
| 678 | if (p) if (strstr((p+=strlen("FILE MH.*="))+1,"%lang%.*")) { |
|---|
| 679 | *(strstr(p+1,"%lang%.*"))='\0'; strcat(p,langp); |
|---|
| 680 | deffmhxp=strdup(p); |
|---|
| 681 | if (parmtrace) printf("+++trace: deffmhxp=%s\n",deffmhxp); |
|---|
| 682 | } |
|---|
| 683 | /* free(defarea); */ |
|---|
| 684 | } |
|---|
| 685 | |
|---|
| 686 | /* set cipar */ |
|---|
| 687 | if ((dbxcipfp=fopen(cipfnamp,"r")) == NULL) fatal(cipfnamp); |
|---|
| 688 | /* rec_maxmfrl */ |
|---|
| 689 | p=dbxcipar(NULL,"maxmfrl",'='); if (dbxcipok) { sscanf(p,"%"_LD_,&rec_maxmfrl); } |
|---|
| 690 | |
|---|
| 691 | /* set tempfile */ |
|---|
| 692 | if (tmp1dbnp) strcpy(booltmpnam,tmp1dbnp); |
|---|
| 693 | |
|---|
| 694 | /* set query db */ |
|---|
| 695 | if (namedbnp) { |
|---|
| 696 | if (strncmp(namedbnp,"create=",7) == 0) { |
|---|
| 697 | namedbnp+=7; |
|---|
| 698 | recisis0(namedbnp); |
|---|
| 699 | } else { |
|---|
| 700 | int xfd; |
|---|
| 701 | dbxopt_fatal=0; xfd=dbxopen("",namedbnp,xx1extp); |
|---|
| 702 | if (xfd > 0) CLOSE(xfd); else recisis0(namedbnp); |
|---|
| 703 | } |
|---|
| 704 | RECORD(boolridx=nrecs,namedbnp,0L); |
|---|
| 705 | if (boolsetno < 1 || boolsetno > MF0nxtmfn-1) boolsetno=MF0nxtmfn-1; /* last set */ |
|---|
| 706 | } |
|---|
| 707 | else { |
|---|
| 708 | if (!dbxtmpnm("CI_TEMPDIR", 0, namedbnarea)) fatal("aotmsa2/dbxtmpnm"); |
|---|
| 709 | namedbnp=namedbnarea; |
|---|
| 710 | if (parmtrace) printf("+++trace: namedbnp=%s\n",namedbnp); |
|---|
| 711 | recisis0(namedbnp); |
|---|
| 712 | boolsetno=1L; /* set#1 */ |
|---|
| 713 | } |
|---|
| 714 | |
|---|
| 715 | /* make output file names |
|---|
| 716 | */ |
|---|
| 717 | sprintf(dbnoutF,"%s%s",namedbnp,".f"); |
|---|
| 718 | sprintf(dbnoutW,"%s%s",namedbnp,".w"); |
|---|
| 719 | sprintf(dbnoutD,"%s%s",namedbnp,".d"); |
|---|
| 720 | |
|---|
| 721 | parmdown=atoi(parmdownp); |
|---|
| 722 | if (parmdown < 0x00 || parmdown > 0xFF) parmdown=0; |
|---|
| 723 | |
|---|
| 724 | |
|---|
| 725 | /* ======================= ============= ================== */ |
|---|
| 726 | /* ======================= ============= ================== */ |
|---|
| 727 | if (actionTA) { |
|---|
| 728 | |
|---|
| 729 | /* Tabulate A |
|---|
| 730 | */ |
|---|
| 731 | |
|---|
| 732 | /* init docsTOTamdl - number of docs in Cluster MDL */ |
|---|
| 733 | /* init reading */ |
|---|
| 734 | if (!irec) irec=nrecs; |
|---|
| 735 | RECORD(irec,amdldbnp,0L); |
|---|
| 736 | docsTOTamdl=MF0nxtmfn-1; |
|---|
| 737 | if (parmatmdl99) { |
|---|
| 738 | RECSTRU *recp; |
|---|
| 739 | TRMSTRU *trmp; |
|---|
| 740 | LONGX /*nu irec,*/itrm; |
|---|
| 741 | char *p; |
|---|
| 742 | TERM(itrm=ntrms,atmdldbnp,"999999"); if (TRMrc != RCNORMAL) fatal("aotmsa2/atmdl/TERM"); |
|---|
| 743 | RECORD(/*nu irec=*/nrecs,atmdldbnp,posting(itrm,1)); if (TRMrc != RCNORMAL) fatal("aotmsa2/atmdl/RECORD"); |
|---|
| 744 | p=recfield(NULL,boolridx,ATMDLTAG999,1,""); |
|---|
| 745 | docsTOTamdl = atol(p); if (docsTOTamdl < 1) fatal("aotmsa2/atmdl/999999"); |
|---|
| 746 | } |
|---|
| 747 | |
|---|
| 748 | /* init docsTOTxa - number of docs in Cluster A */ |
|---|
| 749 | docsTOTxA=docsTOTamdl; |
|---|
| 750 | |
|---|
| 751 | vtimid[ntimes]="search"; time(&vtime[ntimes++]); /* watch */ |
|---|
| 752 | /* |
|---|
| 753 | Search "bool=" parameter |
|---|
| 754 | */ |
|---|
| 755 | if (boolqryp) { /* mxbool/boolh */ |
|---|
| 756 | |
|---|
| 757 | RECSTRU *recp; |
|---|
| 758 | char *p; |
|---|
| 759 | LONGX mfn; |
|---|
| 760 | int errno; |
|---|
| 761 | |
|---|
| 762 | LONGX asize=strlen(amdldbnp) + /* field MFQTDBN0=11 (may be longer than 128+4+1) */ |
|---|
| 763 | strlen(boolqryp) + /* the expression */ |
|---|
| 764 | 2*strlen(boolqryp) + /* the terms + pseudo operators _1termX+11X */ |
|---|
| 765 | BUFSIZ+strlen(amdldbnp) + /* field MFQSWDBN=20 + a diferent db */ |
|---|
| 766 | 24*(strlen(B7DELADD)+3*B7UPLEN) + /* 2 duzias de control fields */ /* DxxAxx|xxx| */ |
|---|
| 767 | strlen(boolqryp)+4 + /* tmpfile .%03x */ |
|---|
| 768 | BUFSIZ; /* por si las moscas */ |
|---|
| 769 | |
|---|
| 770 | char *buffup=loadfile(NULL,'@',"",NULL,asize,'\0'); |
|---|
| 771 | |
|---|
| 772 | cib7p=b7_cib7(cib7p,ciapip); |
|---|
| 773 | |
|---|
| 774 | /* initialize ridx and b7_xxx() parameters and run b7_run() |
|---|
| 775 | */ |
|---|
| 776 | for (boolridx=nrecs, mfn=1; ; mfn++) { /* get actual maxmfn */ |
|---|
| 777 | RECORD(boolridx,amdldbnp,mfn); |
|---|
| 778 | if (RECrc == RCEOF) fatal(amdldbnp); |
|---|
| 779 | if (RECrc == RCNORMAL) break; |
|---|
| 780 | } |
|---|
| 781 | |
|---|
| 782 | if (namedbnp) { |
|---|
| 783 | if (!booldbcrec) booldbcrec=nrecs; |
|---|
| 784 | /*RECORD(booldbcrec,namedbnp,0L); */ /* b7_exp faz "record(crec,qrydbnp,0L)" |
|---|
| 785 | (se houver "qrydbnp") |
|---|
| 786 | */ |
|---|
| 787 | /*<R> |
|---|
| 788 | vrecp[boolridx]->recdbxp=RECdbxp; |
|---|
| 789 | */ /* VRECdbxp(boolridx)=RECdbxp; */ /* b7_exp faz "RECdbxp = dbxstorp(qrydbnp)" */ |
|---|
| 790 | } |
|---|
| 791 | else { |
|---|
| 792 | VRECdbxp(boolridx)=NULL; /* nao usa base de log */ |
|---|
| 793 | VMFRmfn(boolridx)=0L; |
|---|
| 794 | } |
|---|
| 795 | |
|---|
| 796 | /* run b7_exp() / b7_run() / b7_hit(0) |
|---|
| 797 | */ |
|---|
| 798 | p=b7_exp(cib7p,boolridx,amdldbnp,boolqryp,buffup,namedbnp,booldbcrec,&errno); |
|---|
| 799 | if (p || errno) printf("Expression syntax error %d: '%s'\n",errno,p); |
|---|
| 800 | else { |
|---|
| 801 | LONGX bufsiz; |
|---|
| 802 | /* .. sprintf(buffup,"%s.%03x",RDBname,(int)b7setno) .. */ |
|---|
| 803 | char *hitfnamp="null"; |
|---|
| 804 | if (booltmpnam[0]) hitfnamp=booltmpnam; |
|---|
| 805 | sprintf(buffup,"D%dA%d|%s|",MFQTHMEM,MFQTHMEM,hitfnamp); |
|---|
| 806 | if (fldupdat(boolridx,buffup) != NULL) fatal("aotmsa2/fldupdat/boolridx"); |
|---|
| 807 | |
|---|
| 808 | /* b7_run faz "trirecp=vrep[tlirec]" */ |
|---|
| 809 | if (!booltlir) record(booltlir=nrecs,"null",1L); |
|---|
| 810 | |
|---|
| 811 | /* set default index to actual INDEX MH= */ |
|---|
| 812 | if (deffmhxp) { |
|---|
| 813 | char buffup[BUFSIZ+CIMPL]; |
|---|
| 814 | sprintf(buffup,"A101|^p*^y%s|",deffmhxp); |
|---|
| 815 | if (fldupdat(booltlir,buffup)) fatal("aotmsa2/booltlir/fldupdat"); |
|---|
| 816 | } |
|---|
| 817 | |
|---|
| 818 | /* alloc buffer for 20000 hits = 80Kbytes */ |
|---|
| 819 | bufsiz=20000*sizeof(LONGX); |
|---|
| 820 | if (b7bufferp) b7_hbfree(cib7p,&b7bufferp); |
|---|
| 821 | b7_hballoc(cib7p,bufsiz,&b7bufferp); |
|---|
| 822 | |
|---|
| 823 | |
|---|
| 824 | deffbuffup[0]='\0'; |
|---|
| 825 | #if 1 |
|---|
| 826 | /* translate DecsMfn to MH |
|---|
| 827 | */ |
|---|
| 828 | if (deffmhxp) { |
|---|
| 829 | char *batchp=deffbuffup; |
|---|
| 830 | size_t left=sizeof(deffbuffup); |
|---|
| 831 | int xdir; |
|---|
| 832 | sprintf(batchp,"D%dA%d|",MFQTOBJ0,MFQTOBJ0); batchp+=strlen(batchp); |
|---|
| 833 | if ((xdir=fieldx(boolridx,MFQTOBJ0,1)) >= 0) { |
|---|
| 834 | char *b7p; |
|---|
| 835 | LONGX v351; |
|---|
| 836 | for (b7p=(unsigned char *)FIELDP(xdir); *b7p; ) { |
|---|
| 837 | if (*b7p == OPRXEND) break; |
|---|
| 838 | if (*b7p != ZLDV) { |
|---|
| 839 | *batchp++ = *b7p++; /* move other */ left--; |
|---|
| 840 | continue; |
|---|
| 841 | } |
|---|
| 842 | *batchp++ = *b7p++; /* move b7opr */ left--; |
|---|
| 843 | *batchp++ = *b7p++; /* move postlen */ left--; |
|---|
| 844 | v351=atol(b7p); |
|---|
| 845 | while (*b7p != OPRNULL) b7p++; /* skip DecsMfn */ |
|---|
| 846 | if (v351) { |
|---|
| 847 | if (!drec) drec=nrecs; |
|---|
| 848 | record(drec,decsdbnp,v351); |
|---|
| 849 | recfield(batchp,drec,DECSTAGNAME(langp),1,""); batchp[LE2]='\0'; /* move MH */ |
|---|
| 850 | while (*batchp) { *batchp=isisuctab[*batchp]; batchp++; left--; } |
|---|
| 851 | } |
|---|
| 852 | *batchp++ = *b7p++; /* move OPRNULL */ left--; |
|---|
| 853 | } /* end for (b7p) */ |
|---|
| 854 | *batchp++ = *b7p++; /* move OPRXEND */ |
|---|
| 855 | } /* end if (xdir) */ |
|---|
| 856 | sprintf(batchp,"|" ); /*nu batchp+=strlen(batchp); */ |
|---|
| 857 | } /* end if (deffmhxp) */ |
|---|
| 858 | #endif |
|---|
| 859 | |
|---|
| 860 | /* run search */ |
|---|
| 861 | p=b7_run(cib7p,boolridx,amdldbnp,buffup,asize, |
|---|
| 862 | booltell,isisuctab,deffbuffup/*btch0p*/,booltlir,booldbcrec,&errno); |
|---|
| 863 | if (p || errno) printf("Execution error %d: '%s'\n",errno,p); |
|---|
| 864 | else { |
|---|
| 865 | boolhits=b7bufferp->ndocs; /* b7_hit(cib7p,boolridx,0L,b7setno); */ |
|---|
| 866 | if (booltell) printf("Hits=%"_LD_"\n",boolhits); |
|---|
| 867 | } |
|---|
| 868 | } |
|---|
| 869 | if (p || errno) fatal("Expression execution error"); |
|---|
| 870 | |
|---|
| 871 | /* set# */ |
|---|
| 872 | boolsetno=b7setno; /* last mfn */ |
|---|
| 873 | |
|---|
| 874 | /* set docsTOTxa - number of docs in Cluster A */ |
|---|
| 875 | docsTOTxA=boolhits; |
|---|
| 876 | |
|---|
| 877 | } /* mxbool/boolh */ |
|---|
| 878 | |
|---|
| 879 | |
|---|
| 880 | vtimid[ntimes]="set"; time(&vtime[ntimes++]); /* watch */ |
|---|
| 881 | |
|---|
| 882 | /* init tabcntMDL |
|---|
| 883 | */ |
|---|
| 884 | if (parmloadmdl) { |
|---|
| 885 | /* loadcnt(amdldbnp,treecase,tabcntMDL,CLASSES); |
|---|
| 886 | AMDL351 CNT 52 12-21-01 9:54p amdl351.cnt |
|---|
| 887 | AMDL351 N01 21,216 12-21-01 10:00p amdl351.n01 |
|---|
| 888 | AMDL351 N02 0 12-21-01 10:00p amdl351.n02 |
|---|
| 889 | AMDL351 LY1 269,064 12-21-01 9:55p amdl351.ly1 |
|---|
| 890 | AMDL351 LY2 0 12-21-01 9:55p amdl351.ly2 |
|---|
| 891 | AMDL351 IYP 48,611,328 12-21-01 9:55p amdl351.iyp |
|---|
| 892 | */ |
|---|
| 893 | int treecase=0; |
|---|
| 894 | INVMAP *invp; |
|---|
| 895 | LONGX punt,punt2; |
|---|
| 896 | char lparea[sizeof(L1STRU)]; |
|---|
| 897 | L1STRU *l1p=(L1STRU *)lparea; |
|---|
| 898 | int loop; |
|---|
| 899 | char *keyp; |
|---|
| 900 | int v351; |
|---|
| 901 | LONGX ndocs; |
|---|
| 902 | LONGX tell=0; |
|---|
| 903 | |
|---|
| 904 | memset(tabcntMDL,0x00,sizeof(tabcntMDL)); |
|---|
| 905 | invsetup(amdldbnp,0L,0L,0L); |
|---|
| 906 | invp=dbxstorp(amdldbnp)->dbxifmap; |
|---|
| 907 | if (parmtellTA) tell=(punt2=invp->cn[treecase].fmaxpos)/10+1; |
|---|
| 908 | if (parmtrace) fprintf(stderr,"+++ punt2=%"_LD_"\n",punt2); |
|---|
| 909 | /* for each leaf */ |
|---|
| 910 | for (punt=1; punt; punt=l1p->ps) { |
|---|
| 911 | leafread(lparea,invp,treecase,punt,0); /* read a leaf */ |
|---|
| 912 | /* for each term */ |
|---|
| 913 | for (loop=0; loop < l1p->ock; loop++) { |
|---|
| 914 | keyp=l1p->idx[loop].key; |
|---|
| 915 | v351=atoi(keyp); /* LE1 */ |
|---|
| 916 | ndocs=l1p->idx[loop].info2; |
|---|
| 917 | tabcntMDL[v351]=ndocs; |
|---|
| 918 | } |
|---|
| 919 | if (parmtrace) if (tell) if (punt%tell==0) fprintf(stderr,"+++ punt=%"_LD_"\n",punt); |
|---|
| 920 | } |
|---|
| 921 | |
|---|
| 922 | memset(tabcntGMDL,0x00,sizeof(tabcntGMDL)); |
|---|
| 923 | if (parmgroup) { |
|---|
| 924 | RECSTRU *recp; |
|---|
| 925 | LONGX irec=nrecs; |
|---|
| 926 | LONGX mfn; |
|---|
| 927 | char x351[6+1]; |
|---|
| 928 | LONGX v351; |
|---|
| 929 | DIRSTRU *dirp; |
|---|
| 930 | int xdir,loop; |
|---|
| 931 | |
|---|
| 932 | for (mfn=1; ; mfn++) { |
|---|
| 933 | RECORD(irec,"group01.f",mfn); |
|---|
| 934 | if (RECrc == RCEOF) break; |
|---|
| 935 | if (RECrc != RCNORMAL) continue; |
|---|
| 936 | /* get total records for each group */ |
|---|
| 937 | #define G01TAG999 999 |
|---|
| 938 | #define G01TAG001 1 |
|---|
| 939 | for (dirp=MFRdir, xdir=0, loop=MFRnvf; loop--; dirp++, xdir++) { |
|---|
| 940 | if (dirp->tag == G01TAG999) { |
|---|
| 941 | LONGX ndocs=0; |
|---|
| 942 | char *p=FIELDP(xdir); |
|---|
| 943 | int loop; |
|---|
| 944 | for (loop=dirp->len; loop--; p++) ndocs=ndocs*10+((int)(*p)-(int)'0'); |
|---|
| 945 | recfield(x351,irec,G01TAG001,1,""); v351=atol(x351); |
|---|
| 946 | tabcntGMDL[v351]=ndocs; |
|---|
| 947 | #if 0 |
|---|
| 948 | printf("+++tabcntGMDL[%"_LD_"]=%"_LD_"\n",v351,tabcntGMDL[v351]); |
|---|
| 949 | getchar(); |
|---|
| 950 | #endif |
|---|
| 951 | break; |
|---|
| 952 | } /* end tag == 999 */ |
|---|
| 953 | } /* end for dirp */ |
|---|
| 954 | } /* end for mfn */ |
|---|
| 955 | } |
|---|
| 956 | |
|---|
| 957 | /* VTABV05*/ |
|---|
| 958 | memset(vcategmfn,0x00,sizeof(vcategmfn)); |
|---|
| 959 | memset(vtabv05len,0x00,sizeof(vcategmfn)); ntabv05=0; |
|---|
| 960 | |
|---|
| 961 | } |
|---|
| 962 | |
|---|
| 963 | |
|---|
| 964 | /* init mxtb |
|---|
| 965 | */ |
|---|
| 966 | memset(tabcntA,0x00,sizeof(tabcntA)); |
|---|
| 967 | memset(gtabcntA,0x00,sizeof(gtabcntA)); |
|---|
| 968 | |
|---|
| 969 | /* create output |
|---|
| 970 | */ |
|---|
| 971 | recisis0(dbnoutF); |
|---|
| 972 | recisis0(dbnoutW); |
|---|
| 973 | recisis0(dbnoutD); |
|---|
| 974 | |
|---|
| 975 | |
|---|
| 976 | vtimid[ntimes]="loop"; time(&vtime[ntimes++]); /* watch */ |
|---|
| 977 | |
|---|
| 978 | /* |
|---|
| 979 | loop principal |
|---|
| 980 | */ |
|---|
| 981 | |
|---|
| 982 | #define MAXN20 30 |
|---|
| 983 | #define MAXZ20 12 /* hoje=10 (1*3+9*4=39) */ |
|---|
| 984 | #define MAXL20 (MAXZ20*4) |
|---|
| 985 | |
|---|
| 986 | #define MAXNVG 30 |
|---|
| 987 | #define MAXN05 30 |
|---|
| 988 | |
|---|
| 989 | for (boolh=1; boolh <= boolhits; boolh+=parmloopTA) { |
|---|
| 990 | |
|---|
| 991 | LONGX mfn; |
|---|
| 992 | int v351,v351nocc,xdir,loop; |
|---|
| 993 | DIRSTRU *dirp; |
|---|
| 994 | char area[BUFSIZ]; |
|---|
| 995 | |
|---|
| 996 | LONGX vgmfns[MAXNVG]; |
|---|
| 997 | int nvgs=0; |
|---|
| 998 | int ivg; |
|---|
| 999 | |
|---|
| 1000 | /* hit processing */ |
|---|
| 1001 | |
|---|
| 1002 | if (boolh == 1) { |
|---|
| 1003 | hitlistp=(B7HITLIST *)b7bufferp->area; |
|---|
| 1004 | mfnlistp=hitlistp->mfnlist; |
|---|
| 1005 | } |
|---|
| 1006 | |
|---|
| 1007 | /* get next hit */ |
|---|
| 1008 | if (b7bufferp->hcase == BITSTRING) |
|---|
| 1009 | mfn=b7_hit(cib7p,boolridx,boolh,b7setno); |
|---|
| 1010 | else |
|---|
| 1011 | mfn = *mfnlistp; mfnlistp+=parmloopTA; |
|---|
| 1012 | |
|---|
| 1013 | if (mfn <= 0) fatal("aotmsa2/TA/amdldbnp/hit"); |
|---|
| 1014 | |
|---|
| 1015 | if (parmtrace) printf("+++ hit#%"_LD_" mfn=%"_LD_"\n",boolh,mfn); |
|---|
| 1016 | |
|---|
| 1017 | RECORD(irec,amdldbnp,mfn); |
|---|
| 1018 | if (RECrc != RCNORMAL) fatal("aotmsa2/TA/amdldbnp/RCNORMAL"); |
|---|
| 1019 | |
|---|
| 1020 | /* tabulate (v351/) in tabcntA, exploding in gtabcntA |
|---|
| 1021 | */ |
|---|
| 1022 | /* get a subject descriptor */ |
|---|
| 1023 | v351nocc=0; |
|---|
| 1024 | for (dirp=MFRdir, xdir=0, loop=MFRnvf; loop--; dirp++, xdir++) { |
|---|
| 1025 | if (dirp->tag == TAG351) { |
|---|
| 1026 | |
|---|
| 1027 | /* tabulate it */ |
|---|
| 1028 | memcpy(area,FIELDP(xdir),dirp->len); area[dirp->len]='\0'; |
|---|
| 1029 | v351=atoi(area); |
|---|
| 1030 | if (1/*parmgroup*/) { |
|---|
| 1031 | #if 1 /*V02BAK9J*/ /* v0.2bak9j */ |
|---|
| 1032 | RECSTRU *recp; /* local */ |
|---|
| 1033 | int xdir,loop; |
|---|
| 1034 | DIRSTRU *dirp; |
|---|
| 1035 | #if 0 |
|---|
| 1036 | int parmgrouplen=4; |
|---|
| 1037 | LONGX mfn; |
|---|
| 1038 | char *p; |
|---|
| 1039 | char v20[MAXN20][MAXL20+1]; |
|---|
| 1040 | int n20=0; |
|---|
| 1041 | char x20[MAXL20+1]; |
|---|
| 1042 | int len,found; |
|---|
| 1043 | int glen=(parmgroup*parmgrouplen)-1; |
|---|
| 1044 | #else |
|---|
| 1045 | LONGX v05[MAXN05]; |
|---|
| 1046 | int n05=0; |
|---|
| 1047 | #endif |
|---|
| 1048 | |
|---|
| 1049 | if (!mydrec) { |
|---|
| 1050 | LONGX loadxrf=200000; |
|---|
| 1051 | LONGX loadmst=4000000; |
|---|
| 1052 | mstsetup("mydecs",loadxrf,loadmst); |
|---|
| 1053 | mydrec=nrecs; |
|---|
| 1054 | } |
|---|
| 1055 | RECORD(mydrec,"mydecs",v351); |
|---|
| 1056 | if (RECrc != RCNORMAL) fatal("aotmsa2/TA/mydecs/RCNORMAL"); |
|---|
| 1057 | #if 0 |
|---|
| 1058 | /* build v351groups in v20[] from mydecs (v20/) */ |
|---|
| 1059 | for (dirp=MFRdir, xdir=0, loop=MFRnvf; loop--; dirp++, xdir++) { |
|---|
| 1060 | if (dirp->tag == TAG020) { |
|---|
| 1061 | p=FIELDP(xdir); |
|---|
| 1062 | if (*p == 'C' or *p == 'D') { /* ... */ |
|---|
| 1063 | if ((len=dirp->len) > glen) len=glen; |
|---|
| 1064 | memcpy(x20,p,len); |
|---|
| 1065 | if (len < glen) memset(x20+len,' ',glen-len) |
|---|
| 1066 | for (found=0, i=0; i<n20; i++) |
|---|
| 1067 | if (memcmp(x20,v20[i],parmgrouplen1) == 0) { found=1; break; } |
|---|
| 1068 | if (!found) { |
|---|
| 1069 | if (n20 >= MAXN20) fatal("aotmsa2/TA/mydecs/MAXN20"); |
|---|
| 1070 | memcpy(v20[n20++],x20,parmgrouplen); |
|---|
| 1071 | } |
|---|
| 1072 | } /* end 'C' or 'D' */ |
|---|
| 1073 | } /* end tag == TAG020 */ |
|---|
| 1074 | } /* end for dirp */ |
|---|
| 1075 | #else |
|---|
| 1076 | /* store v351groups in v05[] from mydecs (v5/) */ |
|---|
| 1077 | for (dirp=MFRdir, xdir=0, loop=MFRnvf; loop--; dirp++, xdir++) { |
|---|
| 1078 | if (dirp->tag == TAG005) { |
|---|
| 1079 | LONGX mfn=0; |
|---|
| 1080 | char *p=FIELDP(xdir); |
|---|
| 1081 | int loop; |
|---|
| 1082 | for (loop=dirp->len; loop--; p++) mfn=mfn*10+((int)(*p)-(int)'0'); |
|---|
| 1083 | if (n05 >= MAXN05) fatal("aotmsa2/TA/mydecs/MAXN05"); |
|---|
| 1084 | v05[n05++]=mfn; |
|---|
| 1085 | } /* end tag == TAG005 */ |
|---|
| 1086 | } /* end for dirp */ |
|---|
| 1087 | #endif |
|---|
| 1088 | /* store v05groups in vgmfns[] */ |
|---|
| 1089 | for (i=0; i<n05; i++) { |
|---|
| 1090 | LONGX mfn=v05[i]; |
|---|
| 1091 | int found; |
|---|
| 1092 | for (found=0, ivg=0; ivg < nvgs; ivg++) |
|---|
| 1093 | if (mfn == vgmfns[ivg]) { found=1; break; } |
|---|
| 1094 | if (!found) { |
|---|
| 1095 | if (nvgs >= MAXNVG) fatal("aotmsa2/TA/mydecs/MAXNVG"); |
|---|
| 1096 | vgmfns[nvgs++]=mfn; |
|---|
| 1097 | } |
|---|
| 1098 | } /* end for v05[] */ |
|---|
| 1099 | #else /* v0.2bak9j */ |
|---|
| 1100 | #endif /* v0.2bak9j */ |
|---|
| 1101 | } /* end if (1 parmgroup) */ |
|---|
| 1102 | |
|---|
| 1103 | if (v351 >= CLASSES) fatal("aotmsa2/CLASSES overflow/v351"); |
|---|
| 1104 | if (!tabcntA[v351]) ntabs++; |
|---|
| 1105 | tabcntA[v351]++; |
|---|
| 1106 | v351nocc++; |
|---|
| 1107 | |
|---|
| 1108 | } /* end if (dirp->tag == TAG351) */ |
|---|
| 1109 | } /* end for (dirp=MFRdir, ) */ |
|---|
| 1110 | |
|---|
| 1111 | if (v351nocc) count2++; |
|---|
| 1112 | |
|---|
| 1113 | /* |
|---|
| 1114 | tabulate groups |
|---|
| 1115 | */ |
|---|
| 1116 | for (ivg=0; ivg < nvgs; ivg++) { |
|---|
| 1117 | LONGX gmfn=vgmfns[ivg]; |
|---|
| 1118 | if (gmfn >= CLASSES) fatal("aotmsa2/CLASSES overflow/gmfn"); |
|---|
| 1119 | if (!gtabcntA[gmfn]) gntabs++; |
|---|
| 1120 | gtabcntA[gmfn]++; |
|---|
| 1121 | } /* end for vgmfns[] */ |
|---|
| 1122 | |
|---|
| 1123 | |
|---|
| 1124 | /* .... */ |
|---|
| 1125 | |
|---|
| 1126 | count1++; |
|---|
| 1127 | if (parmtellTA) if ((count1 % parmtellTA) == 0) |
|---|
| 1128 | fprintf(stderr,"+++ %"_LD_": %"_LD_"/%d \n",count1,count2,ntabs); |
|---|
| 1129 | |
|---|
| 1130 | } /* end for (boolh=1; boolh <= boolhits; ) */ |
|---|
| 1131 | |
|---|
| 1132 | /* |
|---|
| 1133 | if (booltmpnam[0]) remove(booltmpnam); / * b72 MFQTHMEM tmp file * / |
|---|
| 1134 | */ |
|---|
| 1135 | |
|---|
| 1136 | |
|---|
| 1137 | |
|---|
| 1138 | /* run tabfreqF, tabfreqW and tabfreqD |
|---|
| 1139 | */ |
|---|
| 1140 | if (ntabs) { |
|---|
| 1141 | #if DCTFILTER |
|---|
| 1142 | /* set docsTOTxa - number of docs in Cluster A */ |
|---|
| 1143 | docsTOTxA=count2_filtered; |
|---|
| 1144 | #endif |
|---|
| 1145 | |
|---|
| 1146 | /* run tabfreqF |
|---|
| 1147 | */ |
|---|
| 1148 | vtimid[ntimes]="freqF"; time(&vtime[ntimes++]); /* watch */ |
|---|
| 1149 | if (parmtrace) fprintf(stderr,"+++ ntabs=%d ..\n",ntabs); |
|---|
| 1150 | if (parmtrace) fprintf(stderr,"+++ running %s ..\n",dbnoutF); |
|---|
| 1151 | if (!drec) record(drec=nrecs,decsdbnp,0L); |
|---|
| 1152 | ddrec=drec; |
|---|
| 1153 | ddecsdbnp=decsdbnp; |
|---|
| 1154 | if (rutfreqF(tabcntA,ntabs,drec,tabcntArankF,&tabfreqF)) exit(3); |
|---|
| 1155 | |
|---|
| 1156 | /* run tabfreqW |
|---|
| 1157 | */ |
|---|
| 1158 | vtimid[ntimes]="freqW"; time(&vtime[ntimes++]); /* watch */ |
|---|
| 1159 | if (parmtrace) fprintf(stderr,"+++ runing %s ..\n",dbnoutW); |
|---|
| 1160 | if (rutfreqW(tabfreqF,ntabs,(deffmhxp?deffmhxp:amdldbnp),docsTOTxA,docsTOTamdl,tabcntArankF,tabcntArankW,&tabfreqW,(parmloadmdl?tabcntMDL:NULL),gtabcntA)) exit(4); |
|---|
| 1161 | |
|---|
| 1162 | /* run tabfreqD |
|---|
| 1163 | */ |
|---|
| 1164 | vtimid[ntimes]="freqD"; time(&vtime[ntimes++]); /* watch */ |
|---|
| 1165 | if (parmtrace) fprintf(stderr,"+++ runing %s ..\n",dbnoutD); |
|---|
| 1166 | if (rutfreqD(tabfreqF,ntabs,tabcntArankF,tabcntArankW,tabcntArankD,&tabfreqD,tabcntGMDL, gtabcntA)) exit(5); |
|---|
| 1167 | |
|---|
| 1168 | /* output tabfreqD |
|---|
| 1169 | */ |
|---|
| 1170 | vtimid[ntimes]="outD"; time(&vtime[ntimes++]); /* watch */ |
|---|
| 1171 | if (parmtrace) fprintf(stderr,"+++ updating %s ..\n",dbnoutD); |
|---|
| 1172 | if (outfreqD(ntabs,dbnoutD,tabcntArankF,tabcntArankW,tabfreqD)) exit(6); |
|---|
| 1173 | /* output tabfreqF |
|---|
| 1174 | */ |
|---|
| 1175 | vtimid[ntimes]="outF"; time(&vtime[ntimes++]); /* watch */ |
|---|
| 1176 | if (parmtrace) fprintf(stderr,"+++ updating %s ..\n",dbnoutF); |
|---|
| 1177 | if (outfreqF(ntabs,dbnoutF,tabcntArankW,tabcntArankD,tabfreqF)) exit(7); |
|---|
| 1178 | /* output tabfreqW |
|---|
| 1179 | */ |
|---|
| 1180 | vtimid[ntimes]="outW"; time(&vtime[ntimes++]); /* watch */ |
|---|
| 1181 | if (parmtrace) fprintf(stderr,"+++ updating %s ..\n",dbnoutW); |
|---|
| 1182 | if (outfreqW(ntabs,dbnoutW,docsTOTxA,docsTOTamdl,tabcntArankF,tabcntArankD,tabfreqD,tabfreqW)) exit(8); |
|---|
| 1183 | } |
|---|
| 1184 | |
|---|
| 1185 | if (ntabs) { |
|---|
| 1186 | |
|---|
| 1187 | /* log A1 |
|---|
| 1188 | */ |
|---|
| 1189 | if (!parmaid) parmaid="A1"; |
|---|
| 1190 | if (strcmp(parmaid,"A1") == 0) { |
|---|
| 1191 | char *batchp=envarea; |
|---|
| 1192 | /* environment */ |
|---|
| 1193 | if (usernamp ) { sprintf(batchp,"a3300|%s|" , usernamp ); batchp+=strlen(batchp); } |
|---|
| 1194 | if (cipfnamp ) { sprintf(batchp,"a3000|%s|" , cipfnamp ); batchp+=strlen(batchp); } |
|---|
| 1195 | if (decsdbnp ) { sprintf(batchp,"a3001|%s|" , decsdbnp ); batchp+=strlen(batchp); } |
|---|
| 1196 | if (amdldbnp ) { sprintf(batchp,"a3002|%s|" , amdldbnp/**/); batchp+=strlen(batchp); } |
|---|
| 1197 | if (atmdldbnp ) { sprintf(batchp,"a3003|%s|" , atmdldbnp ); batchp+=strlen(batchp); } |
|---|
| 1198 | if (tmp1dbnp ) { sprintf(batchp,"a3004|%s|" , tmp1dbnp ); batchp+=strlen(batchp); } |
|---|
| 1199 | if (pftfnamp ) { sprintf(batchp,"a3005|%s|" , pftfnamp ); batchp+=strlen(batchp); } |
|---|
| 1200 | if (langp ) { sprintf(batchp,"a3006|%s|" , langp ); batchp+=strlen(batchp); } |
|---|
| 1201 | if (parmloopTA ) { sprintf(batchp,"a3007|%"_LD_"|", parmloopTA ); batchp+=strlen(batchp); } |
|---|
| 1202 | if (parmfromDA ) { sprintf(batchp,"a3008|%"_LD_"|", parmfromDA ); batchp+=strlen(batchp); } |
|---|
| 1203 | if (parmcountDA) { sprintf(batchp,"a3009|%"_LD_"|", parmcountDA ); batchp+=strlen(batchp); } |
|---|
| 1204 | if (parmsortp ) { sprintf(batchp,"a3010|%s|" , parmsortp ); batchp+=strlen(batchp); } |
|---|
| 1205 | if (boolqryp ) { sprintf(batchp,"a3011|%s|" , boolqryp ); batchp+=strlen(batchp); } |
|---|
| 1206 | if (namedbnp ) { sprintf(batchp,"a3012|%s|" , namedbnp ); batchp+=strlen(batchp); } |
|---|
| 1207 | if (parmatmdl99) { sprintf(batchp,"a3013|%d|" , parmatmdl99 ); batchp+=strlen(batchp); } |
|---|
| 1208 | if (actionp ) { sprintf(batchp,"a3014|%s|" , actionp ); batchp+=strlen(batchp); } |
|---|
| 1209 | /**/ |
|---|
| 1210 | sprintf(batchp,"a3015|%"_LD_"|", boolsetno ); batchp+=strlen(batchp); |
|---|
| 1211 | sprintf(batchp,"a4001|%d|" , ntabs ); batchp+=strlen(batchp); |
|---|
| 1212 | /**/ |
|---|
| 1213 | if (1) { |
|---|
| 1214 | /* add watch */ |
|---|
| 1215 | int hours,mins,secs; |
|---|
| 1216 | int i; |
|---|
| 1217 | vtimid[ntimes]="end1"; time(&vtime[ntimes++]); /* watch */ |
|---|
| 1218 | //vtimid[ntimes]="xT"; time(&vtime[ntimes++]); /* watch */ |
|---|
| 1219 | secs=vtime[ntimes-1]-vtime[0]; |
|---|
| 1220 | hours=secs/3600; secs-=hours*3600; |
|---|
| 1221 | mins=secs/60; secs-=mins*60; |
|---|
| 1222 | sprintf(batchp,"a3216|%02d:%02d:%02d|",hours,mins,secs); batchp+=strlen(batchp); |
|---|
| 1223 | for (i=0; i<ntimes-1; i++) { |
|---|
| 1224 | sprintf(batchp,"a3214|%s|", vtimid[i]); batchp+=strlen(batchp); |
|---|
| 1225 | sprintf(batchp,"a3215|%"_LD_"|", vtime[i+1]-vtime[i]); batchp+=strlen(batchp); |
|---|
| 1226 | } |
|---|
| 1227 | //ntimes--; |
|---|
| 1228 | } |
|---|
| 1229 | |
|---|
| 1230 | if (fldupdat(boolridx,envarea)) fatal("aotmsa2/TA/env/fldupdat"); |
|---|
| 1231 | if (recupdat(booldbcrec,boolridx)) fatal("aotmsa2/TA/env/fldupdat"); |
|---|
| 1232 | } |
|---|
| 1233 | |
|---|
| 1234 | /* done |
|---|
| 1235 | */ |
|---|
| 1236 | if (parmtellTA) |
|---|
| 1237 | fprintf(stderr,"aotmsa2: %"_LD_" recs in | %"_LD_" tabs | %d recs out\n",count1,count2,ntabs); |
|---|
| 1238 | |
|---|
| 1239 | } else { /* else if (ntabs) */ |
|---|
| 1240 | actionDA=0; |
|---|
| 1241 | } /* end if (ntabs) */ |
|---|
| 1242 | |
|---|
| 1243 | } /* end actionTA */ |
|---|
| 1244 | |
|---|
| 1245 | |
|---|
| 1246 | /* ======================= ============= ================== */ |
|---|
| 1247 | /* ======================= ============= ================== */ |
|---|
| 1248 | |
|---|
| 1249 | |
|---|
| 1250 | if (actionDA) { |
|---|
| 1251 | |
|---|
| 1252 | /* List tableF/tableW |
|---|
| 1253 | */ |
|---|
| 1254 | |
|---|
| 1255 | #define MFQTAENV 102 |
|---|
| 1256 | |
|---|
| 1257 | #define FMTASIZE 32000 |
|---|
| 1258 | |
|---|
| 1259 | FMT_CODE *tabfmtp=NULL; /* formato para tab= */ |
|---|
| 1260 | LONGX ntabfmts=0; |
|---|
| 1261 | char fmtspec[BUFSIZ]; |
|---|
| 1262 | char *batchp; |
|---|
| 1263 | LONGX parmfrom,parmto; |
|---|
| 1264 | LONGX parmtell=/*0*/parmtellTA; |
|---|
| 1265 | LONGX mfn1; |
|---|
| 1266 | char *file1p; |
|---|
| 1267 | DBXSTRU *dbx1p; |
|---|
| 1268 | |
|---|
| 1269 | char fmtarea[FMTASIZE+1]; |
|---|
| 1270 | LONGX fmtasize=FMTASIZE; |
|---|
| 1271 | |
|---|
| 1272 | char *vMFQTQRY0=NULL; |
|---|
| 1273 | char *vMFQTHITS=NULL; |
|---|
| 1274 | /*nu char *vMFQTAENV; */ |
|---|
| 1275 | char *p; |
|---|
| 1276 | |
|---|
| 1277 | char vbreak[2][3]; |
|---|
| 1278 | int nbreak; |
|---|
| 1279 | char v2992[MAXCATLEN+1]; |
|---|
| 1280 | LONGX mfn351; |
|---|
| 1281 | |
|---|
| 1282 | LONGX setno=boolsetno; |
|---|
| 1283 | |
|---|
| 1284 | int ndownf=parmdown; |
|---|
| 1285 | int ndownw=parmdown; |
|---|
| 1286 | int ncolors=5; |
|---|
| 1287 | int kdownf=ndownf/ncolors; |
|---|
| 1288 | int kdownw=ndownw/ncolors; |
|---|
| 1289 | float rangef,stepf; |
|---|
| 1290 | float rangew,stepw; |
|---|
| 1291 | LONGX freq1,freq2,freq; |
|---|
| 1292 | float peso1,peso2,peso; |
|---|
| 1293 | int fcolor=0; |
|---|
| 1294 | char x999[20]; |
|---|
| 1295 | int wcolor=0; |
|---|
| 1296 | char x2991[20]; |
|---|
| 1297 | |
|---|
| 1298 | if (parmtrace) printf("+++trace: DA/namedbnp=%s\n",namedbnp); |
|---|
| 1299 | |
|---|
| 1300 | vtimid[ntimes]="fmt1"; time(&vtime[ntimes++]); /* watch */ |
|---|
| 1301 | |
|---|
| 1302 | if (!booldbcrec) RECORD(booldbcrec=nrecs,namedbnp,0L); |
|---|
| 1303 | if (!boolridx) boolridx=nrecs; |
|---|
| 1304 | |
|---|
| 1305 | RECORD(boolridx,namedbnp,setno); |
|---|
| 1306 | |
|---|
| 1307 | vMFQTQRY0 = recfield(NULL,boolridx,MFQTQRY0,1,""); |
|---|
| 1308 | if (!boolqryp) boolqryp=vMFQTQRY0; |
|---|
| 1309 | |
|---|
| 1310 | vMFQTHITS = recfield(NULL,boolridx,MFQTHITS,1,""); |
|---|
| 1311 | |
|---|
| 1312 | /* get booldbn environment */ |
|---|
| 1313 | /*nu vMFQTAENV = recfield(NULL,boolridx,MFQTAENV,1,""); */ |
|---|
| 1314 | /* p=vMFQTAENV; ... */ |
|---|
| 1315 | |
|---|
| 1316 | /* set master file */ |
|---|
| 1317 | if (parmsortx == 'f') file1p=dbnoutF; /* alternate file is dbnoutW */ |
|---|
| 1318 | if (parmsortx == 'w') file1p=dbnoutW; |
|---|
| 1319 | if (parmsortx == 'd') file1p=dbnoutD; /* alternate file is dbnoutW */ |
|---|
| 1320 | dbx1p=dbxstorp(file1p); |
|---|
| 1321 | |
|---|
| 1322 | /* init reading */ |
|---|
| 1323 | if (!irec) irec=nrecs; |
|---|
| 1324 | RECORD(irec,file1p,0L); |
|---|
| 1325 | parmto=MF0nxtmfn-1; if (!ntabs) ntabs=parmto; |
|---|
| 1326 | count1=0; |
|---|
| 1327 | if (parmsortx == 'd') parmfrom=1; |
|---|
| 1328 | else { |
|---|
| 1329 | parmfrom=parmfromDA; |
|---|
| 1330 | if (parmcountDA) parmto=parmfromDA+parmcountDA-1; |
|---|
| 1331 | if (parmto > MF0nxtmfn-1) parmto=MF0nxtmfn-1; |
|---|
| 1332 | count2=parmto-parmfromDA+1; |
|---|
| 1333 | } |
|---|
| 1334 | |
|---|
| 1335 | /* environment */ |
|---|
| 1336 | batchp=envarea; |
|---|
| 1337 | if (cipfnamp ) { sprintf(batchp,"a3000|%s|" , cipfnamp ); batchp+=strlen(batchp); } |
|---|
| 1338 | if (decsdbnp ) { sprintf(batchp,"a3001|%s|" , decsdbnp ); batchp+=strlen(batchp); } |
|---|
| 1339 | if (amdldbnp ) { sprintf(batchp,"a3002|%s|" , amdldbnp ); batchp+=strlen(batchp); } |
|---|
| 1340 | if (atmdldbnp ) { sprintf(batchp,"a3003|%s|" , atmdldbnp ); batchp+=strlen(batchp); } |
|---|
| 1341 | if (tmp1dbnp ) { sprintf(batchp,"a3004|%s|" , tmp1dbnp ); batchp+=strlen(batchp); } |
|---|
| 1342 | if (pftfnamp ) { sprintf(batchp,"a3005|%s|" , pftfnamp ); batchp+=strlen(batchp); } |
|---|
| 1343 | if (langp ) { sprintf(batchp,"a3006|%s|" , langp ); batchp+=strlen(batchp); } |
|---|
| 1344 | if (parmloopTA ) { sprintf(batchp,"a3007|%"_LD_"|", parmloopTA ); batchp+=strlen(batchp); } |
|---|
| 1345 | if (parmfromDA ) { sprintf(batchp,"a3008|%"_LD_"|", parmfromDA ); batchp+=strlen(batchp); } |
|---|
| 1346 | if (parmcountDA) { sprintf(batchp,"a3009|%"_LD_"|", parmcountDA ); batchp+=strlen(batchp); } |
|---|
| 1347 | if (parmsortp ) { sprintf(batchp,"a3010|%s|" , parmsortp ); batchp+=strlen(batchp); } |
|---|
| 1348 | if (boolqryp ) { sprintf(batchp,"a3011|%s|" , boolqryp ); batchp+=strlen(batchp); } |
|---|
| 1349 | if (namedbnp ) { sprintf(batchp,"a3012|%s|" , namedbnp ); batchp+=strlen(batchp); } |
|---|
| 1350 | if (parmatmdl99) { sprintf(batchp,"a3013|%d|" , parmatmdl99 ); batchp+=strlen(batchp); } |
|---|
| 1351 | if (actionp ) { sprintf(batchp,"a3014|%s|" , actionp ); batchp+=strlen(batchp); } |
|---|
| 1352 | /**/ |
|---|
| 1353 | sprintf(batchp,"a3015|%"_LD_"|", setno ); batchp+=strlen(batchp); |
|---|
| 1354 | sprintf(batchp,"a4001|%d|" , ntabs ); batchp+=strlen(batchp); |
|---|
| 1355 | /**/ |
|---|
| 1356 | |
|---|
| 1357 | |
|---|
| 1358 | /* ----------------------------------------------------------------------------- |
|---|
| 1359 | v4001 = ntabs |
|---|
| 1360 | |
|---|
| 1361 | v3210[1] = 'A' |
|---|
| 1362 | v3211[1] = Aboolqryp |
|---|
| 1363 | v3212 = hits |
|---|
| 1364 | v3213[1] = Aboolqrypdecs |
|---|
| 1365 | |
|---|
| 1366 | p/ v1001='1' |
|---|
| 1367 | v3214[] = time id |
|---|
| 1368 | v3215[] = seconds |
|---|
| 1369 | v3216 = elapsed "%02d:%02d:%02d",hours,mins,secs |
|---|
| 1370 | |
|---|
| 1371 | decs data fields |
|---|
| 1372 | v3203 = v3 |
|---|
| 1373 | */ |
|---|
| 1374 | |
|---|
| 1375 | if (vMFQTQRY0) { |
|---|
| 1376 | int v351; |
|---|
| 1377 | RECSTRU *recp; |
|---|
| 1378 | sprintf(batchp,"a3210|%s|" , "A" ); batchp+=strlen(batchp); |
|---|
| 1379 | sprintf(batchp,"a3211|%s|" , vMFQTQRY0 ); batchp+=strlen(batchp); |
|---|
| 1380 | sprintf(batchp,"a3212|%"_LD_"|", atol(vMFQTHITS) ); batchp+=strlen(batchp); |
|---|
| 1381 | sprintf(batchp,"a3213|" ); batchp+=strlen(batchp); |
|---|
| 1382 | for (p=vMFQTQRY0; *p; ) { |
|---|
| 1383 | for (v351=0; isdigit(*p); p++) v351=v351*10+((int)(*p)-(int)'0'); |
|---|
| 1384 | if (v351) { |
|---|
| 1385 | if (!drec) drec=nrecs; |
|---|
| 1386 | RECORD(drec,decsdbnp,v351); |
|---|
| 1387 | recfield(batchp,drec,DECSTAGNAME(langp),1,""); batchp+=strlen(batchp); |
|---|
| 1388 | } |
|---|
| 1389 | else { *batchp++ = *p; if (*p) p++; } |
|---|
| 1390 | } |
|---|
| 1391 | sprintf(batchp,"|" ); /*nu batchp+=strlen(batchp); */ |
|---|
| 1392 | } |
|---|
| 1393 | /* end of envarea */ |
|---|
| 1394 | |
|---|
| 1395 | /* init summary */ |
|---|
| 1396 | memset(vbreak,0x00,sizeof(vbreak)); |
|---|
| 1397 | |
|---|
| 1398 | /* do it */ |
|---|
| 1399 | for (mfn1=parmfrom/*DA*/; mfn1 <= parmto; mfn1++) { |
|---|
| 1400 | |
|---|
| 1401 | /* compile strip CR if CRLF + display format */ |
|---|
| 1402 | if (!tabfmtp) { |
|---|
| 1403 | /* use fmtarea for actual format specification */ |
|---|
| 1404 | sprintf(fmtspec,"@%s",pftfnamp); |
|---|
| 1405 | if (!loadfile(NULL,'@',fmtspec,fmtarea,fmtasize,'\0')) { |
|---|
| 1406 | printf("Content-type: text/plain\n\n"); |
|---|
| 1407 | printf("format error: file %s not found \n",pftfnamp); |
|---|
| 1408 | exit(12); |
|---|
| 1409 | } |
|---|
| 1410 | if (fmt_gener(&tabfmtp,fmtarea)) { |
|---|
| 1411 | printf("Content-type: text/plain\n\n"); |
|---|
| 1412 | printf("format error: file %s error#%d offset %"_LD_" [%.512s%s]\n", |
|---|
| 1413 | pftfnamp,fmt_error,fmt_errof,fmtarea+fmt_errof,"..."); |
|---|
| 1414 | exit(12); |
|---|
| 1415 | } |
|---|
| 1416 | } |
|---|
| 1417 | |
|---|
| 1418 | /* get color limits */ |
|---|
| 1419 | if (parmdown) if ((count1+1) == 1) { |
|---|
| 1420 | RECORD(irec,dbnoutF,1L); |
|---|
| 1421 | freq1=atol(recfield(x999,irec,999,1,"")); |
|---|
| 1422 | RECORD(irec,dbnoutF,0L); |
|---|
| 1423 | freq2=freq1; |
|---|
| 1424 | if (MF0nxtmfn-1 > 1) { |
|---|
| 1425 | RECORD(irec,dbnoutF,MF0nxtmfn-1); |
|---|
| 1426 | freq2=atol(recfield(x999,irec,999,1,"")); |
|---|
| 1427 | } |
|---|
| 1428 | rangef=freq1-freq2; if (rangef < 0) rangef = -rangef; /* ok */ |
|---|
| 1429 | stepf=(rangef+1)/(float)ncolors; |
|---|
| 1430 | if (stepf <= 0) { stepf=1; kdownf=1; ndownf=0; } |
|---|
| 1431 | |
|---|
| 1432 | RECORD(irec,dbnoutW,1L); |
|---|
| 1433 | peso1=atof(recfield(x2991,irec,2991,1,"")); |
|---|
| 1434 | RECORD(irec,dbnoutW,0L); |
|---|
| 1435 | peso2=peso1; |
|---|
| 1436 | if (MF0nxtmfn-1 > 1) { |
|---|
| 1437 | RECORD(irec,dbnoutW,MF0nxtmfn-1); |
|---|
| 1438 | peso2=atof(recfield(x2991,irec,2991,1,"")); |
|---|
| 1439 | } |
|---|
| 1440 | rangew=peso1-peso2; if (rangew < 0) rangew = -rangew; /* ok */ |
|---|
| 1441 | stepw=(rangew+1)/(float)ncolors; |
|---|
| 1442 | if (stepw <= 0) { stepw=1; kdownw=1; ndownw=0; } |
|---|
| 1443 | } |
|---|
| 1444 | |
|---|
| 1445 | /* get record */ |
|---|
| 1446 | RECORD(irec,file1p,mfn1); |
|---|
| 1447 | if (RECrc != RCNORMAL) fatal("aotmsa2/DA/RCNORMAL"); |
|---|
| 1448 | count1++; |
|---|
| 1449 | if (parmtrace) printf("+++ mfnDA=%"_LD_"\n",mfn1); |
|---|
| 1450 | |
|---|
| 1451 | /* process parmsort |
|---|
| 1452 | */ |
|---|
| 1453 | batchp=fmtarea; |
|---|
| 1454 | if (file1p == dbnoutW /* parmsortx=='w' */) { |
|---|
| 1455 | /* |
|---|
| 1456 | LONGX rankf=atol(recfield(fmtarea,irec,2220,1,"")); |
|---|
| 1457 | LONGX rankd=atol(recfield(fmtarea,irec,2220,2,"")); |
|---|
| 1458 | sprintf(batchp,"D2220A2220/%"_LD_"/A2220/%"_LD_"/A2220/%"_LD_"/",rankf,MFRmfn,rankd); batchp+=strlen(batchp); |
|---|
| 1459 | */ |
|---|
| 1460 | } |
|---|
| 1461 | else { |
|---|
| 1462 | /* |
|---|
| 1463 | LONGX rank1=atol(recfield(fmtarea,irec,2220,1,"")); |
|---|
| 1464 | */ |
|---|
| 1465 | LONGX rankw=atol(recfield(fmtarea,irec,2220,2,"")); |
|---|
| 1466 | char *v1f=recfield(fmtarea,irec,1,1,""); |
|---|
| 1467 | char *v1w=fmtarea+strlen(fmtarea)+1; |
|---|
| 1468 | RECORD(irec,dbnoutW,rankw); RECdbxp=dbx1p; |
|---|
| 1469 | recfield(v1w,irec,1,1,""); |
|---|
| 1470 | if (!*v1f || !*v1w || strcmp(v1f,v1w)) fatal("aotmsa2/DA/join"); |
|---|
| 1471 | /* |
|---|
| 1472 | sprintf(batchp,"D2220A2220/%"_LD_"/A2220/%"_LD_"/",mfn1,MFRmfn); batchp+=strlen(batchp); |
|---|
| 1473 | */ |
|---|
| 1474 | } |
|---|
| 1475 | |
|---|
| 1476 | /* process summary */ |
|---|
| 1477 | memset(v2992,0x00,sizeof(v2992)); |
|---|
| 1478 | nbreak=0; |
|---|
| 1479 | p=recfield(v2992,irec,2992,1,""); /* 1st mesh C/D */ |
|---|
| 1480 | if (memcmp(vbreak[0],p+0,3)) { |
|---|
| 1481 | memcpy(vbreak[0],p+0,3); nbreak+=1; *vbreak[1]='\0'; |
|---|
| 1482 | } |
|---|
| 1483 | if (memcmp(vbreak[1],p+4,3)) { |
|---|
| 1484 | memcpy(vbreak[1],p+4,3); nbreak+=2; |
|---|
| 1485 | } |
|---|
| 1486 | |
|---|
| 1487 | if (nbreak) { |
|---|
| 1488 | |
|---|
| 1489 | if (nbreak & 0x01) { |
|---|
| 1490 | sprintf(batchp,"A3994/%d/" ,nbreak&0x01); batchp+=strlen(batchp); |
|---|
| 1491 | sprintf(batchp,"A3995/%.3s/",v2992 ); batchp+=strlen(batchp); |
|---|
| 1492 | if (nbreak & 0x02) { |
|---|
| 1493 | sprintf(batchp,"A3995/%.7s/",v2992 ); batchp+=strlen(batchp); |
|---|
| 1494 | } |
|---|
| 1495 | nbreak=1; |
|---|
| 1496 | } |
|---|
| 1497 | else { |
|---|
| 1498 | nbreak=2; |
|---|
| 1499 | sprintf(batchp,"A3994/%d/",nbreak ); batchp+=strlen(batchp); |
|---|
| 1500 | sprintf(batchp,"A3995//" ); batchp+=strlen(batchp); |
|---|
| 1501 | sprintf(batchp,"A3995/%.7s/",v2992 ); batchp+=strlen(batchp); |
|---|
| 1502 | } |
|---|
| 1503 | |
|---|
| 1504 | } /* end if (nbreak) */ |
|---|
| 1505 | |
|---|
| 1506 | /* skip records if parmshowzero |
|---|
| 1507 | */ |
|---|
| 1508 | if (parmshowzero) |
|---|
| 1509 | if (!nbreak) |
|---|
| 1510 | if (count1 > 1) |
|---|
| 1511 | if (count1 < count2) |
|---|
| 1512 | continue; |
|---|
| 1513 | |
|---|
| 1514 | /* add CGI and +hits data fields |
|---|
| 1515 | */ |
|---|
| 1516 | sprintf(batchp,"A1001/%"_LD_"/A1002/%"_LD_"/",count1,count2); batchp+=strlen(batchp); |
|---|
| 1517 | |
|---|
| 1518 | /* add decs data fields |
|---|
| 1519 | */ |
|---|
| 1520 | mfn351=atol(recfield(batchp,irec,1,1,"")); /* the condition */ |
|---|
| 1521 | sprintf(batchp,"a3203|" ); batchp+=strlen(batchp); |
|---|
| 1522 | if (!drec) drec=nrecs; |
|---|
| 1523 | RECORD(drec,"mydecs",mfn351); |
|---|
| 1524 | recfield(batchp,drec,DECSTAGNAME(langp),1,""); batchp+=strlen(batchp); |
|---|
| 1525 | sprintf(batchp,"|" ); batchp+=strlen(batchp); |
|---|
| 1526 | |
|---|
| 1527 | /* add watch */ |
|---|
| 1528 | if (count1 == 1) { |
|---|
| 1529 | int hours,mins,secs; |
|---|
| 1530 | int i; |
|---|
| 1531 | vtimid[ntimes]="fmt2"; time(&vtime[ntimes++]); /* watch */ |
|---|
| 1532 | secs=vtime[ntimes-1]-vtime[0]; |
|---|
| 1533 | hours=secs/3600; secs-=hours*3600; |
|---|
| 1534 | mins=secs/60; secs-=mins*60; |
|---|
| 1535 | sprintf(batchp,"a3216|%02d:%02d:%02d|",hours,mins,secs); batchp+=strlen(batchp); |
|---|
| 1536 | for (i=0; i<ntimes-1; i++) { |
|---|
| 1537 | sprintf(batchp,"a3214|%s|", vtimid[i]); batchp+=strlen(batchp); |
|---|
| 1538 | sprintf(batchp,"a3215|%"_LD_"|", vtime[i+1]-vtime[i]); batchp+=strlen(batchp); |
|---|
| 1539 | } |
|---|
| 1540 | } |
|---|
| 1541 | |
|---|
| 1542 | /* get color */ |
|---|
| 1543 | if (parmdown) { |
|---|
| 1544 | freq=atol(recfield(x999,irec,999,1,"")); |
|---|
| 1545 | fcolor=(int)(0xFF-ndownf+(freq/stepf)*kdownf); |
|---|
| 1546 | peso=atof(recfield(x2991,irec,2991,1,"")); |
|---|
| 1547 | wcolor=(int)(0xFF-ndownw+(peso/stepw)*kdownw); |
|---|
| 1548 | sprintf(batchp,"a1515/%02x/",fcolor); batchp+=strlen(batchp); |
|---|
| 1549 | sprintf(batchp,"a1515/%02x/",wcolor); batchp+=strlen(batchp); |
|---|
| 1550 | } |
|---|
| 1551 | |
|---|
| 1552 | |
|---|
| 1553 | /* add/del fields */ |
|---|
| 1554 | if (fldupdat(irec,fmtarea)) fatal("aotmsa2/DA/fldupdat/fmt"); |
|---|
| 1555 | if (fldupdat(irec,envarea)) fatal("aotmsa2/DA/fldupdat/env"); |
|---|
| 1556 | |
|---|
| 1557 | /* apply display format */ |
|---|
| 1558 | if (fmt_inter(tabfmtp,irec,fmtasize,fmtarea,fmtasize) < 0) { |
|---|
| 1559 | printf("Content-type: text/plain\n\n"); |
|---|
| 1560 | printf("error: %s [format execution error %d]\n",pftfnamp,fmt_error); |
|---|
| 1561 | exit(21); |
|---|
| 1562 | } |
|---|
| 1563 | /* close fmt_ every each MAXTABFMTS calls */ |
|---|
| 1564 | if (++ntabfmts == 1000 /*MAXTABFMTS*/) { |
|---|
| 1565 | fmt_free(tabfmtp); tabfmtp=(FMT_CODE *)NULL; |
|---|
| 1566 | ntabfmts=0; |
|---|
| 1567 | } |
|---|
| 1568 | |
|---|
| 1569 | /* output format results |
|---|
| 1570 | */ |
|---|
| 1571 | puts(fmtarea); /* for (left=strlen(fmtarea), p=fmtarea; left; ) .s{ int len=BUFSIZ/2; char c; |
|---|
| 1572 | if (len > left) len=left; c=p[len]; p[len]='\0'; puts(p); p[len]=c; |
|---|
| 1573 | p+=len; left-=len; } */ |
|---|
| 1574 | |
|---|
| 1575 | if (parmtell) if ((count1 % parmtell) == 0) |
|---|
| 1576 | fprintf(stderr,"+++ %"_LD_"/%"_LD_" \n",count1,count2); |
|---|
| 1577 | if (parmtrace) |
|---|
| 1578 | fprintf(stderr,"+++ %"_LD_"/%"_LD_" \n",count1,count2); |
|---|
| 1579 | |
|---|
| 1580 | } |
|---|
| 1581 | |
|---|
| 1582 | vtimid[ntimes]="end2"; time(&vtime[ntimes++]); /* watch */ |
|---|
| 1583 | |
|---|
| 1584 | } /* actionDA */ |
|---|
| 1585 | |
|---|
| 1586 | |
|---|
| 1587 | /* ======================= ============= ================== */ |
|---|
| 1588 | /* ======================= ============= ================== */ |
|---|
| 1589 | if (actionDD) { |
|---|
| 1590 | |
|---|
| 1591 | int errno1=0; |
|---|
| 1592 | int errno2=0; |
|---|
| 1593 | char *p1=NULL; |
|---|
| 1594 | char *p2=NULL; |
|---|
| 1595 | LONGX decsnxtmfn; |
|---|
| 1596 | char *decsdbp=decsdbnp; |
|---|
| 1597 | |
|---|
| 1598 | /* Search DECS |
|---|
| 1599 | */ |
|---|
| 1600 | boolsetno=0; |
|---|
| 1601 | boolhits=0; |
|---|
| 1602 | |
|---|
| 1603 | /* init reading */ |
|---|
| 1604 | if (!drec) drec=nrecs; |
|---|
| 1605 | RECORD(drec,decsdbnp,0L); |
|---|
| 1606 | decsnxtmfn=MF0nxtmfn; |
|---|
| 1607 | |
|---|
| 1608 | /* will call format even on error and/or expression missing */ |
|---|
| 1609 | count2=1; |
|---|
| 1610 | |
|---|
| 1611 | /* display MeSH Diseases (cat C$) |
|---|
| 1612 | */ |
|---|
| 1613 | if (actionDD == 2) if (!boolqryp) { |
|---|
| 1614 | boolqryp="CAT1=C$"; |
|---|
| 1615 | decsdbp="mydecs"; |
|---|
| 1616 | } |
|---|
| 1617 | |
|---|
| 1618 | /* |
|---|
| 1619 | Search "bool=" parameter |
|---|
| 1620 | */ |
|---|
| 1621 | if (boolqryp) { /* boolqryp */ |
|---|
| 1622 | |
|---|
| 1623 | LONGX mfn; |
|---|
| 1624 | |
|---|
| 1625 | LONGX asize=strlen(decsdbp) + /* field MFQTDBN0=11 (may be longer than 128+4+1) */ |
|---|
| 1626 | strlen(boolqryp) + /* the expression */ |
|---|
| 1627 | 2*strlen(boolqryp) + /* the terms + pseudo operators _1termX+11X */ |
|---|
| 1628 | BUFSIZ+strlen(amdldbnp) + /* field MFQSWDBN=20 + a diferent db */ |
|---|
| 1629 | 24*(strlen(B7DELADD)+3*B7UPLEN) + /* 2 duzias de control fields */ /* DxxAxx|xxx| */ |
|---|
| 1630 | strlen(boolqryp)+4 + /* tmpfile .%03x */ |
|---|
| 1631 | BUFSIZ; /* por si las moscas */ |
|---|
| 1632 | |
|---|
| 1633 | char *buffup=loadfile(NULL,'@',"",NULL,asize,'\0'); |
|---|
| 1634 | |
|---|
| 1635 | if (!cib7p) cib7p=b7_cib7(cib7p,ciapip); |
|---|
| 1636 | |
|---|
| 1637 | /* initialize ridx and b7_xxx() parameters and run b7_run() |
|---|
| 1638 | */ |
|---|
| 1639 | for (boolridx=nrecs, mfn=1; ; mfn++) { /* get actual maxmfn */ |
|---|
| 1640 | RECORD(boolridx,decsdbp,mfn); |
|---|
| 1641 | if (RECrc == RCEOF) fatal(decsdbp); |
|---|
| 1642 | if (RECrc == RCNORMAL) break; |
|---|
| 1643 | } |
|---|
| 1644 | RECdbxp=NULL; /* nao usa base de log */ |
|---|
| 1645 | MFRmfn=0L; |
|---|
| 1646 | |
|---|
| 1647 | /* run b7_exp() / b7_run() / b7_hit(0) |
|---|
| 1648 | */ |
|---|
| 1649 | p1=b7_exp(cib7p,boolridx,decsdbp,boolqryp,buffup,NULL,0L,&errno1); |
|---|
| 1650 | if (p1 || errno1) ; /* printf("Expression syntax error %d: '%s'\n",errno1,p1); */ |
|---|
| 1651 | else { |
|---|
| 1652 | LONGX bufsiz; |
|---|
| 1653 | char *hitfnamp="null"; |
|---|
| 1654 | if (booltmpnam[0]) hitfnamp=booltmpnam; |
|---|
| 1655 | sprintf(buffup,"D%dA%d|%s|",MFQTHMEM,MFQTHMEM,hitfnamp); |
|---|
| 1656 | if (fldupdat(boolridx,buffup) != NULL) fatal("aotmsa2/DD/fldupdat/boolridx"); |
|---|
| 1657 | |
|---|
| 1658 | /* b7_run faz "trirecp=vrep[tlirec]" */ |
|---|
| 1659 | if (!booltlir) record(booltlir=nrecs,"null",1L); |
|---|
| 1660 | |
|---|
| 1661 | /* alloc buffer for 20000 hits = 80Kbytes */ |
|---|
| 1662 | bufsiz=20000*sizeof(LONGX); |
|---|
| 1663 | if (b7bufferp) b7_hbfree(cib7p,&b7bufferp); |
|---|
| 1664 | b7_hballoc(cib7p,bufsiz,&b7bufferp); |
|---|
| 1665 | |
|---|
| 1666 | /* run search */ |
|---|
| 1667 | p2=b7_run(cib7p,boolridx,decsdbp,buffup,sizeof(buffup), |
|---|
| 1668 | booltell,isisuctab,""/*btch0p*/,booltlir,0L,&errno2); |
|---|
| 1669 | if (p2 || errno2) ; /* printf("Execution error %d: '%s'\n",errno2,p2); */ |
|---|
| 1670 | else { |
|---|
| 1671 | boolsetno=b7setno; /* =1 ??? */ |
|---|
| 1672 | boolhits=b7bufferp->ndocs; /* b7_hit(cib7p,boolridx,0L,b7setno); */ |
|---|
| 1673 | if (booltell) printf("Hits=%"_LD_"\n",boolhits); |
|---|
| 1674 | } |
|---|
| 1675 | } |
|---|
| 1676 | if (p2 || errno2) fatal("Expression execution error"); |
|---|
| 1677 | |
|---|
| 1678 | } /* boolqryp */ |
|---|
| 1679 | |
|---|
| 1680 | /* set number of times format is called */ |
|---|
| 1681 | if (boolhits) count2=boolhits; |
|---|
| 1682 | |
|---|
| 1683 | if (p1 || errno1 /* || p2 || errno2*/) { ; } |
|---|
| 1684 | |
|---|
| 1685 | if (1) { /* errno */ |
|---|
| 1686 | //#define FMTASIZE 32000 |
|---|
| 1687 | FMT_CODE *tabfmtp=NULL; /* formato para tab= */ |
|---|
| 1688 | char fmtspec[BUFSIZ]; |
|---|
| 1689 | char *batchp; |
|---|
| 1690 | char fmtarea[FMTASIZE+1]; |
|---|
| 1691 | LONGX fmtasize=FMTASIZE; |
|---|
| 1692 | |
|---|
| 1693 | count1=0; |
|---|
| 1694 | |
|---|
| 1695 | /* environment */ |
|---|
| 1696 | batchp=envarea; |
|---|
| 1697 | if (cipfnamp ) { sprintf(batchp,"a3000|%s|" , cipfnamp ); batchp+=strlen(batchp); } |
|---|
| 1698 | if (decsdbnp ) { sprintf(batchp,"a3001|%s|" , decsdbnp ); batchp+=strlen(batchp); } |
|---|
| 1699 | if (amdldbnp ) { sprintf(batchp,"a3002|%s|" , amdldbnp ); batchp+=strlen(batchp); } |
|---|
| 1700 | if (atmdldbnp ) { sprintf(batchp,"a3003|%s|" , atmdldbnp ); batchp+=strlen(batchp); } |
|---|
| 1701 | if (tmp1dbnp ) { sprintf(batchp,"a3004|%s|" , tmp1dbnp ); batchp+=strlen(batchp); } |
|---|
| 1702 | if (pftfnamp ) { sprintf(batchp,"a3005|%s|" , pftfnamp ); batchp+=strlen(batchp); } |
|---|
| 1703 | if (langp ) { sprintf(batchp,"a3006|%s|" , langp ); batchp+=strlen(batchp); } |
|---|
| 1704 | if (parmloopTA ) { sprintf(batchp,"a3007|%"_LD_"|", parmloopTA ); batchp+=strlen(batchp); } |
|---|
| 1705 | if (parmfromDA ) { sprintf(batchp,"a3008|%"_LD_"|", parmfromDA ); batchp+=strlen(batchp); } |
|---|
| 1706 | if (parmcountDA) { sprintf(batchp,"a3009|%"_LD_"|", parmcountDA ); batchp+=strlen(batchp); } |
|---|
| 1707 | if (parmsortp ) { sprintf(batchp,"a3010|%s|" , parmsortp ); batchp+=strlen(batchp); } |
|---|
| 1708 | // if (boolqryp ) { sprintf(batchp,"a3011|%s|" , boolqryp ); batchp+=strlen(batchp); } |
|---|
| 1709 | if (namedbnp ) { sprintf(batchp,"a3012|%s|" , namedbnp ); batchp+=strlen(batchp); } |
|---|
| 1710 | if (parmatmdl99) { sprintf(batchp,"a3013|%d|" , parmatmdl99 ); batchp+=strlen(batchp); } |
|---|
| 1711 | if (actionp ) { sprintf(batchp,"a3014|%s|" , actionp ); batchp+=strlen(batchp); } |
|---|
| 1712 | /**/ |
|---|
| 1713 | // sprintf(batchp,"a3015|%"_LD_"|", setno ); batchp+=strlen(batchp); |
|---|
| 1714 | // sprintf(batchp,"a4001|%d|" , ntabs ); batchp+=strlen(batchp); |
|---|
| 1715 | /**/ |
|---|
| 1716 | /* end of envarea */ |
|---|
| 1717 | |
|---|
| 1718 | /* compile strip CR if CRLF + display format */ |
|---|
| 1719 | pftfnamp="aotmsa2D.pft"; |
|---|
| 1720 | sprintf(fmtspec,"%s,@%s","if size(s(#))=2 then newline(s(#)*1) fi",pftfnamp); |
|---|
| 1721 | if (fmt_gener(&tabfmtp,fmtspec)) { |
|---|
| 1722 | printf("Content-type: text/plain\n\n"); |
|---|
| 1723 | printf("error: %s [format error %d:%s]\n",pftfnamp,fmt_error,fmtspec+fmt_errof); |
|---|
| 1724 | exit(12); |
|---|
| 1725 | } |
|---|
| 1726 | |
|---|
| 1727 | |
|---|
| 1728 | /* |
|---|
| 1729 | loop decs |
|---|
| 1730 | */ |
|---|
| 1731 | |
|---|
| 1732 | for (boolh=1; ; boolh++) { |
|---|
| 1733 | |
|---|
| 1734 | LONGX mfn; |
|---|
| 1735 | |
|---|
| 1736 | /* hit processing */ |
|---|
| 1737 | if (boolhits) { |
|---|
| 1738 | |
|---|
| 1739 | if (boolh > boolhits) break; |
|---|
| 1740 | |
|---|
| 1741 | if (boolh == 1) { |
|---|
| 1742 | hitlistp=(B7HITLIST *)b7bufferp->area; |
|---|
| 1743 | mfnlistp=hitlistp->mfnlist; |
|---|
| 1744 | } |
|---|
| 1745 | if (b7bufferp->hcase == BITSTRING) |
|---|
| 1746 | mfn=b7_hit(cib7p,boolridx,boolh,b7setno); |
|---|
| 1747 | else |
|---|
| 1748 | mfn = *mfnlistp; mfnlistp++; |
|---|
| 1749 | |
|---|
| 1750 | if (mfn <= 0) fatal("aotmsa2/DD/decsdbnp/hit"); |
|---|
| 1751 | |
|---|
| 1752 | if (parmtrace) printf("+++ hit#%"_LD_" mfn=%"_LD_"\n",boolh,mfn); |
|---|
| 1753 | |
|---|
| 1754 | RECORD(drec,decsdbnp,mfn); |
|---|
| 1755 | if (RECrc != RCNORMAL) fatal("aotmsa2/DD/decsdbnp/RCNORMAL"); |
|---|
| 1756 | |
|---|
| 1757 | } |
|---|
| 1758 | else { |
|---|
| 1759 | RECORD(drec,decsdbnp,mfn=decsnxtmfn); |
|---|
| 1760 | RECrc=RCNORMAL; MFRstatus=ACTIVE; |
|---|
| 1761 | // sprintf(fmtarea,"a%"_LD_"|x|",(LONGX)DECSTAGP); |
|---|
| 1762 | // if (fldupdat(drec,fmtarea)) fatal("aotmsa2/DD/fldupdat/x"); |
|---|
| 1763 | } |
|---|
| 1764 | |
|---|
| 1765 | count1++; |
|---|
| 1766 | if (parmtrace) printf("+++ mfnDD=%"_LD_"\n",mfn); |
|---|
| 1767 | |
|---|
| 1768 | /* process record |
|---|
| 1769 | */ |
|---|
| 1770 | batchp=fmtarea; |
|---|
| 1771 | |
|---|
| 1772 | /* add CGI and +hits data fields |
|---|
| 1773 | */ |
|---|
| 1774 | sprintf(batchp,"A1001/%"_LD_"/A1002/%"_LD_"/",count1,count2); batchp+=strlen(batchp); |
|---|
| 1775 | |
|---|
| 1776 | /* add decs data fields |
|---|
| 1777 | */ |
|---|
| 1778 | sprintf(batchp,"a3203|" ); batchp+=strlen(batchp); |
|---|
| 1779 | recfield(batchp,drec,DECSTAGNAME(langp),1,""); batchp+=strlen(batchp); |
|---|
| 1780 | sprintf(batchp,"|" ); batchp+=strlen(batchp); |
|---|
| 1781 | |
|---|
| 1782 | if (fldupdat(drec,fmtarea)) fatal("aotmsa2/DD/fldupdat/fmt"); |
|---|
| 1783 | if (fldupdat(drec,envarea)) fatal("aotmsa2/DD/fldupdat/env"); |
|---|
| 1784 | |
|---|
| 1785 | if (fmt_inter(tabfmtp,drec,fmtasize,fmtarea,fmtasize) < 0) { |
|---|
| 1786 | printf("Content-type: text/plain\n\n"); |
|---|
| 1787 | printf("error: %s [format execution error %d]\n",pftfnamp,fmt_error); |
|---|
| 1788 | exit(21); |
|---|
| 1789 | } |
|---|
| 1790 | |
|---|
| 1791 | /* output format results |
|---|
| 1792 | */ |
|---|
| 1793 | puts(fmtarea); |
|---|
| 1794 | |
|---|
| 1795 | if (!boolhits) break; |
|---|
| 1796 | |
|---|
| 1797 | } /* end for (boolh=1; ; ) */ |
|---|
| 1798 | |
|---|
| 1799 | } /* errno */ |
|---|
| 1800 | |
|---|
| 1801 | } /* end actionDD */ |
|---|
| 1802 | |
|---|
| 1803 | /* ======================= ============= ================== */ |
|---|
| 1804 | /* ======================= ============= ================== */ |
|---|
| 1805 | |
|---|
| 1806 | /* watch */ |
|---|
| 1807 | time(&vtime[ntimes++]); |
|---|
| 1808 | if (parmtime) { |
|---|
| 1809 | struct tm *tp; |
|---|
| 1810 | char fmt_time[21+1]; /* aaaammdd hhmmss WDAY YDAY */ |
|---|
| 1811 | /* 1234567890123456 7 8 901 */ |
|---|
| 1812 | int hours,mins,secs; |
|---|
| 1813 | LONGX time_start=vtime[0]; |
|---|
| 1814 | LONGX time_elapsed; |
|---|
| 1815 | vtimid[ntimes]="exit"; time(&vtime[ntimes++]); /* watch */ |
|---|
| 1816 | time_elapsed=vtime[ntimes-1]; |
|---|
| 1817 | tp=localtime(&time_elapsed); |
|---|
| 1818 | sprintf(fmt_time,"%02d/%02d/%02d %02d:%02d:%02d", |
|---|
| 1819 | tp->tm_mday,tp->tm_mon+1,tp->tm_year%100, |
|---|
| 1820 | tp->tm_hour,tp->tm_min,tp->tm_sec); |
|---|
| 1821 | fprintf(stderr,"+++ localtime %s \n",fmt_time); |
|---|
| 1822 | secs=time_elapsed - time_start; |
|---|
| 1823 | hours=secs/3600; secs-=hours*3600; |
|---|
| 1824 | mins=secs/60; secs-=mins*60; |
|---|
| 1825 | sprintf(fmt_time,"%02d:%02d:%02d",hours,mins,secs); |
|---|
| 1826 | fprintf(stderr,"+++ elapsed %s \n",fmt_time); |
|---|
| 1827 | } |
|---|
| 1828 | |
|---|
| 1829 | /* exit |
|---|
| 1830 | */ |
|---|
| 1831 | if (cib7p) cib7p=b7_cib7_delete(cib7p); |
|---|
| 1832 | #if CIAPI |
|---|
| 1833 | cisisApplicationDelete(ciapip); |
|---|
| 1834 | ciapip=NULL; |
|---|
| 1835 | #endif /* CIAPI */ |
|---|
| 1836 | |
|---|
| 1837 | exit(0); |
|---|
| 1838 | } |
|---|
| 1839 | |
|---|
| 1840 | |
|---|
| 1841 | /* ======================= ============= ================== */ |
|---|
| 1842 | /* ======================= ============= ================== */ |
|---|
| 1843 | |
|---|
| 1844 | #if ANSI |
|---|
| 1845 | int rutfreqF(LONGX *tabcntA, int ntabs, LONGX drec, LONGX *tabcntArankF, TABFREQF_ENTRY **tabfreqFp) |
|---|
| 1846 | #else |
|---|
| 1847 | int rutfreqF(tabcntA, ntabs, dbnoutp, drec, tabcntArankF, tabfreqFp) |
|---|
| 1848 | LONGX *tabcntA; |
|---|
| 1849 | int ntabs; |
|---|
| 1850 | LONGX drec; |
|---|
| 1851 | LONGX *tabcntArankF; |
|---|
| 1852 | TABFREQF_ENTRY **tabfreqFp; |
|---|
| 1853 | #endif |
|---|
| 1854 | { |
|---|
| 1855 | LONGX mfn; |
|---|
| 1856 | char buffup[BUFSIZ]; |
|---|
| 1857 | int v351; |
|---|
| 1858 | |
|---|
| 1859 | LONGX nbytes; |
|---|
| 1860 | char *p; |
|---|
| 1861 | |
|---|
| 1862 | TABFREQF_ENTRY *tabfreqF,*tabF; |
|---|
| 1863 | |
|---|
| 1864 | typedef struct outfreqF_sort_entry { |
|---|
| 1865 | char x999[10]; |
|---|
| 1866 | char categ[39]; |
|---|
| 1867 | char null[1]; |
|---|
| 1868 | char align[2]; |
|---|
| 1869 | LONGX v351; |
|---|
| 1870 | LONGX freq; |
|---|
| 1871 | } OUTFREQF_SORT_ENTRY; |
|---|
| 1872 | |
|---|
| 1873 | OUTFREQF_SORT_ENTRY *sort_tab,*sort_tmp,*sortp,*ip,*jp; |
|---|
| 1874 | int catlen; |
|---|
| 1875 | int i,j,k; |
|---|
| 1876 | |
|---|
| 1877 | int keylen=sizeof(sortp->x999)+sizeof(sortp->categ); |
|---|
| 1878 | |
|---|
| 1879 | |
|---|
| 1880 | /* init tabcntArankF (indexed by DecsMfn) |
|---|
| 1881 | */ |
|---|
| 1882 | memset(tabcntArankF,0,sizeof(LONGX)*CLASSES); |
|---|
| 1883 | |
|---|
| 1884 | *tabfreqFp=NULL; |
|---|
| 1885 | if (!ntabs) return(0); |
|---|
| 1886 | |
|---|
| 1887 | /* alloc tabfreqF (indexed by rankF) |
|---|
| 1888 | */ |
|---|
| 1889 | nbytes=sizeof(TABFREQF_ENTRY)*ntabs; |
|---|
| 1890 | if (nbytes >= (LONGX)ALLOMAXV) fatal("aotmsa2/rutfreqF/tabfreqF/ALLOMAXV"); |
|---|
| 1891 | p=(char *)ALLOC((ALLOPARM)(nbytes)); |
|---|
| 1892 | if (p == ALLONULL) fatal("aotmsa2/rutfreqF/tabfreqF/ALLOC"); |
|---|
| 1893 | memset(p,0,nbytes); /* init */ |
|---|
| 1894 | tabfreqF=(TABFREQF_ENTRY *)p; |
|---|
| 1895 | *tabfreqFp=tabfreqF; |
|---|
| 1896 | |
|---|
| 1897 | nbytes=sizeof(OUTFREQF_SORT_ENTRY)*ntabs+sizeof(OUTFREQF_SORT_ENTRY); |
|---|
| 1898 | if (nbytes >= (LONGX)ALLOMAXV) fatal("aotmsa2/rutfreqF/sort_tab/ALLOMAXV"); |
|---|
| 1899 | p=(char *)ALLOC((ALLOPARM)(nbytes)); |
|---|
| 1900 | if (p == ALLONULL) fatal("aotmsa2/rutfreqF/sort_tab/ALLOC"); |
|---|
| 1901 | sort_tab=(OUTFREQF_SORT_ENTRY *)p; |
|---|
| 1902 | sort_tmp=sort_tab+ntabs; |
|---|
| 1903 | |
|---|
| 1904 | for (mfn=0L, v351=1; mfn<ntabs; v351++) { |
|---|
| 1905 | if (!tabcntA[v351]) continue; |
|---|
| 1906 | sortp=sort_tab+mfn; |
|---|
| 1907 | sprintf(sortp->x999,"%10"_LD_,999999999L-tabcntA[v351]); |
|---|
| 1908 | if (drec) { /* use decs/v20 as 2nd sort key for sortF */ |
|---|
| 1909 | record(drec,ddecsdbnp,(LONGX)v351); |
|---|
| 1910 | recfield(buffup,drec,TAG020,1,""); if (!*buffup) fatal("aotmsa2/rutfreqF/decs/TAG020"); |
|---|
| 1911 | catlen=strlen(buffup); if (catlen>sizeof(sortp->categ)) buffup[catlen=sizeof(sortp->categ)]='\0'; |
|---|
| 1912 | memset(buffup+catlen,(int)' ',sizeof(sortp->categ)-catlen); |
|---|
| 1913 | memcpy(sortp->categ,buffup,sizeof(sortp->categ)); |
|---|
| 1914 | } else memset(sortp->categ,(int)' ',sizeof(sortp->categ)); |
|---|
| 1915 | sortp->null[0]='\0'; |
|---|
| 1916 | sortp->v351=v351; |
|---|
| 1917 | sortp->freq=tabcntA[v351]; |
|---|
| 1918 | mfn++; |
|---|
| 1919 | } |
|---|
| 1920 | |
|---|
| 1921 | /* sort F |
|---|
| 1922 | */ |
|---|
| 1923 | for (k=ntabs-1, i=0; i<k; i++) { |
|---|
| 1924 | ip=sort_tab+i; |
|---|
| 1925 | for (j=i+1; j<ntabs; j++) { |
|---|
| 1926 | jp=sort_tab+j; |
|---|
| 1927 | if (memcmp((void *)ip,(void *)jp,keylen) > 0) { |
|---|
| 1928 | memcpy((void *)sort_tmp,(void *)ip, sizeof(OUTFREQF_SORT_ENTRY)); |
|---|
| 1929 | memcpy((void *)ip ,(void *)jp, sizeof(OUTFREQF_SORT_ENTRY)); |
|---|
| 1930 | memcpy((void *)jp ,(void *)sort_tmp,sizeof(OUTFREQF_SORT_ENTRY)); |
|---|
| 1931 | } |
|---|
| 1932 | } |
|---|
| 1933 | } |
|---|
| 1934 | |
|---|
| 1935 | /* store tabcntArankF (indexed by DecsMfn) and tabfreqF (indexed by rankF) |
|---|
| 1936 | */ |
|---|
| 1937 | for (sortp=sort_tab, tabF=tabfreqF, mfn=1L; mfn<=ntabs; mfn++, sortp++, tabF++) { |
|---|
| 1938 | tabF->v351=sortp->v351; |
|---|
| 1939 | tabF->freq=sortp->freq; |
|---|
| 1940 | tabcntArankF[sortp->v351]=mfn; |
|---|
| 1941 | } |
|---|
| 1942 | |
|---|
| 1943 | return(0); |
|---|
| 1944 | } |
|---|
| 1945 | |
|---|
| 1946 | |
|---|
| 1947 | #if ANSI |
|---|
| 1948 | int outfreqF(int ntabs, char *dbnoutp, LONGX *tabcntArankW, LONGX *tabcntArankD, TABFREQF_ENTRY *tabfreqF) |
|---|
| 1949 | #else |
|---|
| 1950 | int outfreqF(ntabs, dbnoutp, tabcntArankW, tabcntArankD, tabfreqF) |
|---|
| 1951 | int ntabs; |
|---|
| 1952 | char *dbnoutp; |
|---|
| 1953 | LONGX *tabcntArankW; |
|---|
| 1954 | LONGX *tabcntArankD; |
|---|
| 1955 | TABFREQF_ENTRY *tabfreqF; |
|---|
| 1956 | #endif |
|---|
| 1957 | { |
|---|
| 1958 | RECSTRU *recp; |
|---|
| 1959 | LONGX mfn; |
|---|
| 1960 | char buffup[BUFSIZ],*batchp; |
|---|
| 1961 | LONGX upirec; |
|---|
| 1962 | LONGX upcrec; |
|---|
| 1963 | TABFREQF_ENTRY *tabF; |
|---|
| 1964 | |
|---|
| 1965 | if (!ntabs) return(0); |
|---|
| 1966 | |
|---|
| 1967 | /* output tabfreqF (indexed by rankF) and tabcntArankW (indexed by DecsMfn) |
|---|
| 1968 | */ |
|---|
| 1969 | record(upcrec=nrecs,dbnoutp,0L); |
|---|
| 1970 | record(upirec=nrecs,dbnoutp,1L); |
|---|
| 1971 | for (tabF=tabfreqF, mfn=1L; mfn<=ntabs; mfn++, tabF++) { |
|---|
| 1972 | batchp=buffup; |
|---|
| 1973 | sprintf(batchp,"A1/%06"_LD_"/A999/%"_LD_"/",tabF->v351,tabF->freq); batchp+=strlen(batchp); |
|---|
| 1974 | sprintf(batchp,"A2220/%"_LD_"/" ,mfn ); batchp+=strlen(batchp); |
|---|
| 1975 | sprintf(batchp,"A2220/%"_LD_"/" ,tabcntArankW[tabF->v351]); batchp+=strlen(batchp); |
|---|
| 1976 | sprintf(batchp,"A2220/%"_LD_"/" ,tabcntArankD[tabF->v351]); batchp+=strlen(batchp); |
|---|
| 1977 | *batchp='\0'; |
|---|
| 1978 | RECORD(upirec,dbnoutp,mfn); MFRstatus=ACTIVE; |
|---|
| 1979 | if (fldupdat(upirec,buffup)) return(mfn); |
|---|
| 1980 | recupdat(upcrec,upirec); |
|---|
| 1981 | } |
|---|
| 1982 | |
|---|
| 1983 | return(0); |
|---|
| 1984 | } |
|---|
| 1985 | |
|---|
| 1986 | |
|---|
| 1987 | |
|---|
| 1988 | #if ANSI |
|---|
| 1989 | int rutfreqW(TABFREQF_ENTRY *tabfreqF, int ntabs, char *amdlname, LONGX docsTOTxA, LONGX docsTOTamdl, LONGX *tabcntArankF, LONGX *tabcntArankW, TABFREQW_ENTRY **tabfreqWp, LONGX *tabcntMDL, LONGX *gtabcntA) |
|---|
| 1990 | #else |
|---|
| 1991 | int rutfreqW(tabfreqF, ntabs, amdlname, docsTOTxA, docsTOTamdl, tabcntArankF, tabcntArankW, tabfreqWp, tabcntMDL, gtabcntA) |
|---|
| 1992 | TABFREQF_ENTRY *tabfreqF; |
|---|
| 1993 | int ntabs; |
|---|
| 1994 | char *amdlname; |
|---|
| 1995 | LONGX docsTOTxA; /* v9991[1] = docs de xA - nao vazios */ |
|---|
| 1996 | LONGX docsTOTamdl; /* v9991[2] = docs de amdl */ |
|---|
| 1997 | LONGX *tabcntArankF; |
|---|
| 1998 | LONGX *tabcntArankW; |
|---|
| 1999 | TABFREQW_ENTRY **tabfreqWp; |
|---|
| 2000 | LONGX *tabcntMDL; |
|---|
| 2001 | LONGX *gtabcntA; |
|---|
| 2002 | #endif |
|---|
| 2003 | { |
|---|
| 2004 | LONGX mfn; |
|---|
| 2005 | int v351; |
|---|
| 2006 | |
|---|
| 2007 | LONGX nbytes; |
|---|
| 2008 | char *p; |
|---|
| 2009 | |
|---|
| 2010 | TABFREQW_ENTRY *tabfreqW,*tabW; |
|---|
| 2011 | TABFREQF_ENTRY *tabF; |
|---|
| 2012 | |
|---|
| 2013 | typedef struct outfreqW_sort_entry { |
|---|
| 2014 | char x2991[10]; |
|---|
| 2015 | char xrankF[6]; |
|---|
| 2016 | char null[1]; |
|---|
| 2017 | char align[3]; |
|---|
| 2018 | LONGX v351; |
|---|
| 2019 | LONGX docsTTxA; /* v999[1] = docs de TT em xA */ |
|---|
| 2020 | LONGX docsTTamdl; /* v999[2] = docs de TT em amdl = postings de TT em amdl */ |
|---|
| 2021 | float frelTTxA; /* v1991[1] = frelTTxA = docs de TT em xA / docs de xA */ |
|---|
| 2022 | float frelTTamdl; /* v1991[2] = frelTTamdl = docs de TT em amdl / docs de amdl */ |
|---|
| 2023 | float pesoTTxA; /* v2991[1] = frelTTxA / frelTTamdl */ |
|---|
| 2024 | // char pesoTTxAout[4]; /* v2221[1] = 'out' se peso < 1 */ |
|---|
| 2025 | } OUTFREQW_SORT_ENTRY; |
|---|
| 2026 | |
|---|
| 2027 | OUTFREQW_SORT_ENTRY *sort_tab,*sort_tmp,*sortp,*ip,*jp; |
|---|
| 2028 | int i,j,k; |
|---|
| 2029 | |
|---|
| 2030 | TRMSTRU *trmp; |
|---|
| 2031 | LONGX itrm; |
|---|
| 2032 | char x351[6+1]; |
|---|
| 2033 | |
|---|
| 2034 | int keylen=sizeof(sortp->x2991)+sizeof(sortp->xrankF); |
|---|
| 2035 | |
|---|
| 2036 | |
|---|
| 2037 | /* init tabcntArankW (indexed by DecsMfn) |
|---|
| 2038 | */ |
|---|
| 2039 | memset(tabcntArankW,0,sizeof(LONGX)*CLASSES); |
|---|
| 2040 | |
|---|
| 2041 | *tabfreqWp=NULL; |
|---|
| 2042 | if (!ntabs) return(0); |
|---|
| 2043 | |
|---|
| 2044 | /* alloc tabfreqW (indexed by rankW) |
|---|
| 2045 | */ |
|---|
| 2046 | nbytes=sizeof(TABFREQW_ENTRY)*ntabs; |
|---|
| 2047 | if (nbytes >= (LONGX)ALLOMAXV) fatal("aotmsa2/rutfreqW/tabfreqW/ALLOMAXV"); |
|---|
| 2048 | p=(char *)ALLOC((ALLOPARM)(nbytes)); |
|---|
| 2049 | if (p == ALLONULL) fatal("aotmsa2/rutfreqW/tabfreqW/ALLOC"); |
|---|
| 2050 | memset(p,0,nbytes); /* init */ |
|---|
| 2051 | tabfreqW=(TABFREQW_ENTRY *)p; |
|---|
| 2052 | *tabfreqWp=tabfreqW; |
|---|
| 2053 | |
|---|
| 2054 | nbytes=sizeof(OUTFREQW_SORT_ENTRY)*ntabs+sizeof(OUTFREQW_SORT_ENTRY); |
|---|
| 2055 | if (nbytes >= (LONGX)ALLOMAXV) fatal("aotmsa2/rutfreqW/sort_tab/ALLOMAXV"); |
|---|
| 2056 | p=(char *)ALLOC((ALLOPARM)(nbytes)); |
|---|
| 2057 | if (p == ALLONULL) fatal("aotmsa2/rutfreqW/sort_tab/ALLOC"); |
|---|
| 2058 | sort_tab=(OUTFREQW_SORT_ENTRY *)p; |
|---|
| 2059 | sort_tmp=sort_tab+ntabs; |
|---|
| 2060 | |
|---|
| 2061 | |
|---|
| 2062 | if (!tabcntMDL) TRMALLOC((itrm=1L),0L); /* do not load .iyp */ |
|---|
| 2063 | |
|---|
| 2064 | for (sortp=sort_tab, tabF=tabfreqF, mfn=1L; mfn<=ntabs; mfn++, tabF++, sortp++) { |
|---|
| 2065 | v351=tabF->v351; |
|---|
| 2066 | /* */ |
|---|
| 2067 | sortp->docsTTxA = tabF->freq; /* v999[1] = docs de TT em xA */ |
|---|
| 2068 | if (tabcntMDL) |
|---|
| 2069 | sortp->docsTTamdl = tabcntMDL[v351]; /* v999[2] = docs de TT em amdl = postings de TT em amdl */ |
|---|
| 2070 | else { |
|---|
| 2071 | sprintf(x351,"%06"_LD_,v351); |
|---|
| 2072 | TERM(itrm,amdlname,x351); if (TRMrc != RCNORMAL) fatal("aotmsa2/rutfreqW/TERM/amdl"); |
|---|
| 2073 | sortp->docsTTamdl = TRMxytotp; /* v999[2] = docs de TT em amdl = postings de TT em amdl */ |
|---|
| 2074 | } |
|---|
| 2075 | sortp->frelTTxA = (docsTOTxA > 0) ? sortp->docsTTxA / (float)docsTOTxA : 0; /* v1991[1] = frelTTxA = docs de TT em xA / docs de xA */ |
|---|
| 2076 | sortp->frelTTamdl = (docsTOTamdl > 0) ? sortp->docsTTamdl / (float)docsTOTamdl : 0; /* v1991[2] = frelTTamdl = docs de TT em amdl / docs de amdl */ |
|---|
| 2077 | sortp->pesoTTxA = (sortp->frelTTamdl > 0) ? sortp->frelTTxA / sortp->frelTTamdl : 0; /* v2991[1] = frelTTxA / frelTTamdl */ |
|---|
| 2078 | sprintf(sortp->x2991,"%10.3f",999999.999-sortp->pesoTTxA); |
|---|
| 2079 | #define WGTAOT 1 |
|---|
| 2080 | #if WGTAOT |
|---|
| 2081 | if (1) { |
|---|
| 2082 | double lognum = (double)docsTOTamdl; |
|---|
| 2083 | double logden = (double)sortp->docsTTamdl; |
|---|
| 2084 | double logarg = (double)(1+sortp->docsTTxA); |
|---|
| 2085 | float GLOBALWEIGHT = (float)log(lognum/logden); |
|---|
| 2086 | float LOCALWEIGHT = (float)log(logarg); |
|---|
| 2087 | float PRODWEIGHT = LOCALWEIGHT*GLOBALWEIGHT; |
|---|
| 2088 | sortp->pesoTTxA = PRODWEIGHT; /* v2991[1] = log(1+docsTTxA) * log(docsTOTamdl/docsTTamdl) */ |
|---|
| 2089 | //sprintf(sortp->x2991,"%10.3f",999999.999-sortp->pesoTTxA); |
|---|
| 2090 | } |
|---|
| 2091 | else { |
|---|
| 2092 | double lognum = (double)docsTOTamdl-sortp->docsTTamdl; |
|---|
| 2093 | double logden = (double)sortp->docsTTamdl; |
|---|
| 2094 | double arg = (double)sortp->docsTTxA/docsTOTxA; |
|---|
| 2095 | float GLOBALWEIGHT = (float)log(lognum/logden); |
|---|
| 2096 | float LOCALWEIGHT = (float)(/*0.5+0.5**/arg); |
|---|
| 2097 | float PRODWEIGHT = LOCALWEIGHT*GLOBALWEIGHT; |
|---|
| 2098 | sortp->pesoTTxA = PRODWEIGHT; |
|---|
| 2099 | /* |
|---|
| 2100 | double lognum = (double)sortp->docsTTamdl+docsTOTxA; |
|---|
| 2101 | double logden = (double)docsTOTxA; |
|---|
| 2102 | double logarg = (double)sortp->docsTTxA; |
|---|
| 2103 | float GLOBALWEIGHT = (float)log(lognum/logden); |
|---|
| 2104 | float LOCALWEIGHT = (float)log(logarg); |
|---|
| 2105 | float PRODWEIGHT = LOCALWEIGHT*GLOBALWEIGHT; |
|---|
| 2106 | sortp->pesoTTxA = PRODWEIGHT; |
|---|
| 2107 | */ |
|---|
| 2108 | /* |
|---|
| 2109 | double lognum = (double)docsTOTamdl; |
|---|
| 2110 | double logden = (double)sortp->docsTTamdl; |
|---|
| 2111 | double arg = (double)sortp->docsTTxA; |
|---|
| 2112 | float GLOBALWEIGHT = (float)log(lognum/logden); |
|---|
| 2113 | float LOCALWEIGHT = (float)arg; |
|---|
| 2114 | float PRODWEIGHT = LOCALWEIGHT*GLOBALWEIGHT; |
|---|
| 2115 | sortp->pesoTTxA = PRODWEIGHT; |
|---|
| 2116 | */ |
|---|
| 2117 | } |
|---|
| 2118 | #endif |
|---|
| 2119 | //memcpy(sortp->pesoTTxAout,(frelTTxA < frelTTamdl)?"out":" ",sizeof(sortp->pesoTTxA)); /* if v1991[1]<v1991[2] then 'a2221|out|' fi */ |
|---|
| 2120 | /* */ |
|---|
| 2121 | |
|---|
| 2122 | sprintf(sortp->xrankF,"%6"_LD_,tabcntArankF[v351]); /* key */ |
|---|
| 2123 | sortp->null[0]='\0'; |
|---|
| 2124 | memset(sortp->align,(int)' ',sizeof(sortp->align)); |
|---|
| 2125 | sortp->v351=v351; |
|---|
| 2126 | } |
|---|
| 2127 | |
|---|
| 2128 | /* sort W |
|---|
| 2129 | */ |
|---|
| 2130 | for (k=ntabs-1, i=0; i<k; i++) { |
|---|
| 2131 | ip=sort_tab+i; |
|---|
| 2132 | for (j=i+1; j<ntabs; j++) { |
|---|
| 2133 | jp=sort_tab+j; |
|---|
| 2134 | if (memcmp((void *)ip,(void *)jp,keylen) > 0) { |
|---|
| 2135 | memcpy((void *)sort_tmp,(void *)ip, sizeof(OUTFREQW_SORT_ENTRY)); |
|---|
| 2136 | memcpy((void *)ip ,(void *)jp, sizeof(OUTFREQW_SORT_ENTRY)); |
|---|
| 2137 | memcpy((void *)jp ,(void *)sort_tmp,sizeof(OUTFREQW_SORT_ENTRY)); |
|---|
| 2138 | } |
|---|
| 2139 | } |
|---|
| 2140 | } |
|---|
| 2141 | |
|---|
| 2142 | |
|---|
| 2143 | /* store tabcntArankW (indexed by DecsMfn) and tabfreqW (indexed by rankW) |
|---|
| 2144 | */ |
|---|
| 2145 | for (sortp=sort_tab, tabW=tabfreqW, mfn=1L; mfn<=ntabs; mfn++, sortp++, tabW++) { |
|---|
| 2146 | tabW->v351=sortp->v351; |
|---|
| 2147 | tabW->docsTTxA=sortp->docsTTxA; /* v999[1] = docs de TT em xA */ |
|---|
| 2148 | tabW->docsTTamdl=sortp->docsTTamdl; /* v999[2] = docs de TT em amdl = postings de TT em amdl */ |
|---|
| 2149 | tabW->frelTTxA=sortp->frelTTxA; /* v1991[1] = frelTTxA = docs de TT em xA / docs de xA */ |
|---|
| 2150 | tabW->frelTTamdl=sortp->frelTTamdl; /* v1991[2] = frelTTamdl = docs de TT em amdl / docs de amdl */ |
|---|
| 2151 | tabW->peso=sortp->pesoTTxA; /* v2991 = frelTTxA / frelTTamdl */ |
|---|
| 2152 | // strcpy(tabW->pesoTTxAout,(sortp->frelTTxA < sortp->frelTTamdl)?"out":""); /* if v1991[1]<v1991[2] then 'a2221|out|' fi */ |
|---|
| 2153 | tabcntArankW[sortp->v351]=mfn; |
|---|
| 2154 | } |
|---|
| 2155 | |
|---|
| 2156 | |
|---|
| 2157 | return(0); |
|---|
| 2158 | } |
|---|
| 2159 | |
|---|
| 2160 | |
|---|
| 2161 | #if ANSI |
|---|
| 2162 | int outfreqW(int ntabs, char *dbnoutp, LONGX docsTOTxA, LONGX docsTOTamdl, LONGX *tabcntArankF, LONGX *tabcntArankD, TABFREQD_ENTRY *tabfreqD, TABFREQW_ENTRY *tabfreqW) |
|---|
| 2163 | #else |
|---|
| 2164 | int outfreqW(ntabs, dbnoutp, docsTOTxA, docsTOTamdl, tabcntArankF, tabcntArankD, tabfreqD, tabfreqW) |
|---|
| 2165 | int ntabs; |
|---|
| 2166 | char *dbnoutp; |
|---|
| 2167 | LONGX docsTOTxA; /* v9991[1] = docs de xA - nao vazios */ |
|---|
| 2168 | LONGX docsTOTamdl; /* v9991[2] = docs de amdl */ |
|---|
| 2169 | LONGX *tabcntArankF; |
|---|
| 2170 | LONGX *tabcntArankD; |
|---|
| 2171 | TABFREQD_ENTRY *tabfreqD; |
|---|
| 2172 | TABFREQW_ENTRY *tabfreqW; |
|---|
| 2173 | #endif |
|---|
| 2174 | { |
|---|
| 2175 | RECSTRU *recp; |
|---|
| 2176 | LONGX mfn; |
|---|
| 2177 | char buffup[BUFSIZ],*batchp; |
|---|
| 2178 | |
|---|
| 2179 | LONGX upirec; |
|---|
| 2180 | LONGX upcrec; |
|---|
| 2181 | |
|---|
| 2182 | TABFREQD_ENTRY *tabD; |
|---|
| 2183 | LONGX xrankD; |
|---|
| 2184 | |
|---|
| 2185 | TABFREQW_ENTRY *tabW; |
|---|
| 2186 | |
|---|
| 2187 | if (!ntabs) return(0); |
|---|
| 2188 | |
|---|
| 2189 | /* output |
|---|
| 2190 | */ |
|---|
| 2191 | record(upcrec=nrecs,dbnoutp,0L); |
|---|
| 2192 | record(upirec=nrecs,dbnoutp,1L); |
|---|
| 2193 | for (tabW=tabfreqW, mfn=1L; mfn<=ntabs; mfn++, tabW++) { |
|---|
| 2194 | batchp=buffup; |
|---|
| 2195 | |
|---|
| 2196 | sprintf(batchp,"A1/%06"_LD_"/" ,tabW->v351 ); batchp+=strlen(batchp); |
|---|
| 2197 | sprintf(batchp,"A999/%"_LD_"/" ,tabW->docsTTxA ); batchp+=strlen(batchp); |
|---|
| 2198 | sprintf(batchp,"A999/%"_LD_"/" ,tabW->docsTTamdl ); batchp+=strlen(batchp); |
|---|
| 2199 | |
|---|
| 2200 | sprintf(batchp,"A9991/%"_LD_"/" , docsTOTxA ); batchp+=strlen(batchp); |
|---|
| 2201 | sprintf(batchp,"A9991/%"_LD_"/" , docsTOTamdl ); batchp+=strlen(batchp); |
|---|
| 2202 | |
|---|
| 2203 | sprintf(batchp,"A1991/%10.8f/" ,tabW->frelTTxA ); batchp+=strlen(batchp); |
|---|
| 2204 | sprintf(batchp,"A1991/%10.8f/" ,tabW->frelTTamdl ); batchp+=strlen(batchp); |
|---|
| 2205 | sprintf(batchp,"A2991/%5.3f/" ,tabW->peso ); batchp+=strlen(batchp); |
|---|
| 2206 | |
|---|
| 2207 | // if (tabW->pesoTTxAout[0]) |
|---|
| 2208 | // sprintf(batchp,"A2221/%s/" ,tabW->pesoTTxAout ); batchp+=strlen(batchp); |
|---|
| 2209 | |
|---|
| 2210 | sprintf(batchp,"A2220/%"_LD_"/" ,tabcntArankF[tabW->v351]); batchp+=strlen(batchp); |
|---|
| 2211 | sprintf(batchp,"A2220/%"_LD_"/" ,mfn ); batchp+=strlen(batchp); |
|---|
| 2212 | sprintf(batchp,"A2220/%"_LD_"/" ,tabcntArankD[tabW->v351]); batchp+=strlen(batchp); |
|---|
| 2213 | |
|---|
| 2214 | xrankD=tabcntArankD[tabW->v351]; |
|---|
| 2215 | tabD=tabfreqD; tabD+=(xrankD-1); |
|---|
| 2216 | sprintf(batchp,"A2992/%s/" ,tabD->delca ); batchp+=strlen(batchp); |
|---|
| 2217 | sprintf(batchp,"A2993/%"_LD_"/" ,gtabcntA[tabD->gmfn] ); batchp+=strlen(batchp); |
|---|
| 2218 | sprintf(batchp,"A2994/%06"_LD_"/" ,tabD->gmfn ); batchp+=strlen(batchp); |
|---|
| 2219 | |
|---|
| 2220 | *batchp='\0'; |
|---|
| 2221 | RECORD(upirec,dbnoutp,mfn); MFRstatus=ACTIVE; |
|---|
| 2222 | if (fldupdat(upirec,buffup)) return(mfn); |
|---|
| 2223 | recupdat(upcrec,upirec); |
|---|
| 2224 | } |
|---|
| 2225 | |
|---|
| 2226 | return(0); |
|---|
| 2227 | } |
|---|
| 2228 | |
|---|
| 2229 | |
|---|
| 2230 | |
|---|
| 2231 | #if ANSI |
|---|
| 2232 | int rutfreqD(TABFREQF_ENTRY *tabfreqF, int ntabs, LONGX *tabcntArankF, LONGX *tabcntArankW, LONGX *tabcntArankD, TABFREQD_ENTRY **tabfreqDp, LONGX *tabcntGMDL, LONGX *gtabcntA) |
|---|
| 2233 | #else |
|---|
| 2234 | int rutfreqD(tabfreqF, ntabs,tabcntArankF, tabcntArankW, tabcntArankD, tabfreqDp, gtabcntA) |
|---|
| 2235 | TABFREQF_ENTRY *tabfreqF; |
|---|
| 2236 | int ntabs; |
|---|
| 2237 | LONGX *tabcntArankF; |
|---|
| 2238 | LONGX *tabcntArankW; |
|---|
| 2239 | LONGX *tabcntArankD; |
|---|
| 2240 | TABFREQD_ENTRY **tabfreqDp; |
|---|
| 2241 | LONGX *tabcntGMDL; |
|---|
| 2242 | LONGX *gtabcntA; |
|---|
| 2243 | #endif |
|---|
| 2244 | { |
|---|
| 2245 | LONGX mfn; |
|---|
| 2246 | int v351; |
|---|
| 2247 | |
|---|
| 2248 | LONGX nbytes; |
|---|
| 2249 | char *p; |
|---|
| 2250 | |
|---|
| 2251 | TABFREQD_ENTRY *tabfreqD,*tabD; |
|---|
| 2252 | TABFREQF_ENTRY *tabF; |
|---|
| 2253 | |
|---|
| 2254 | typedef struct outfreqD_sort_entry { |
|---|
| 2255 | // char x2992[10]; |
|---|
| 2256 | char x2992_cat[1]; /* memcpy(,,1) */ |
|---|
| 2257 | char x2993[10]; |
|---|
| 2258 | char x2992[MAXCATLEN+1]; |
|---|
| 2259 | char xrankF[6]; |
|---|
| 2260 | LONGX v351; |
|---|
| 2261 | LONGX gmfn; |
|---|
| 2262 | // LONGX delta; |
|---|
| 2263 | } OUTFREQD_SORT_ENTRY; |
|---|
| 2264 | |
|---|
| 2265 | OUTFREQD_SORT_ENTRY *sort_tab,*sort_tmp,*sortp,*ip,*jp; |
|---|
| 2266 | int i,j,k; |
|---|
| 2267 | |
|---|
| 2268 | int keylen=sizeof(sortp->x2992_cat)+sizeof(sortp->x2993)+sizeof(sortp->x2992)+sizeof(sortp->xrankF); |
|---|
| 2269 | |
|---|
| 2270 | |
|---|
| 2271 | /* init tabcntArankD (indexed by DecsMfn) |
|---|
| 2272 | */ |
|---|
| 2273 | memset(tabcntArankD,0,sizeof(LONGX)*CLASSES); |
|---|
| 2274 | |
|---|
| 2275 | *tabfreqDp=NULL; |
|---|
| 2276 | if (!ntabs) return(0); |
|---|
| 2277 | |
|---|
| 2278 | /* alloc tabfreqD (indexed by rankD) |
|---|
| 2279 | */ |
|---|
| 2280 | nbytes=sizeof(TABFREQD_ENTRY)*ntabs; |
|---|
| 2281 | if (nbytes >= (LONGX)ALLOMAXV) fatal("aotmsa2/rutfreqD/tabfreqD/ALLOMAXV"); |
|---|
| 2282 | p=(char *)ALLOC((ALLOPARM)(nbytes)); |
|---|
| 2283 | if (p == ALLONULL) fatal("aotmsa2/rutfreqD/tabfreqD/ALLOC"); |
|---|
| 2284 | memset(p,0,nbytes); /* init */ |
|---|
| 2285 | tabfreqD=(TABFREQD_ENTRY *)p; |
|---|
| 2286 | *tabfreqDp=tabfreqD; |
|---|
| 2287 | |
|---|
| 2288 | nbytes=sizeof(OUTFREQD_SORT_ENTRY)*ntabs+sizeof(OUTFREQD_SORT_ENTRY); |
|---|
| 2289 | if (nbytes >= (LONGX)ALLOMAXV) fatal("aotmsa2/rutfreqD/sort_tab/ALLOMAXV"); |
|---|
| 2290 | p=(char *)ALLOC((ALLOPARM)(nbytes)); |
|---|
| 2291 | if (p == ALLONULL) fatal("aotmsa2/rutfreqD/sort_tab/ALLOC"); |
|---|
| 2292 | sort_tab=(OUTFREQD_SORT_ENTRY *)p; |
|---|
| 2293 | sort_tmp=sort_tab+ntabs; |
|---|
| 2294 | |
|---|
| 2295 | for (sortp=sort_tab, tabF=tabfreqF, mfn=1L; mfn<=ntabs; mfn++, tabF++, sortp++) { |
|---|
| 2296 | v351=tabF->v351; |
|---|
| 2297 | //// sortp->delta=tabcntArankW[v351]-tabcntArankF[v351]; |
|---|
| 2298 | //// sprintf(sortp->x2992,"%10"_LD_,555555555-sortp->delta); |
|---|
| 2299 | // sortp->delta=tabcntGMDL[v351]; |
|---|
| 2300 | // sprintf(sortp->x2992,"%10"_LD_,999999999-sortp->delta); |
|---|
| 2301 | |
|---|
| 2302 | |
|---|
| 2303 | #if 0 |
|---|
| 2304 | (if v20.1='C' or v20.1='D' |
|---|
| 2305 | then v20,break |
|---|
| 2306 | else if iocc=1 then v20'<br>' fi |
|---|
| 2307 | fi |
|---|
| 2308 | ) |
|---|
| 2309 | #endif |
|---|
| 2310 | if (1) { |
|---|
| 2311 | DIRSTRU *dirp; |
|---|
| 2312 | int len,xdir; |
|---|
| 2313 | RECSTRU *recp; |
|---|
| 2314 | |
|---|
| 2315 | RECORD(ddrec,"mydecs",v351); // recfield(sortp->x2992,ddrec,20,1,""); |
|---|
| 2316 | |
|---|
| 2317 | for (dirp=MFRdir, xdir=0; xdir < MFRnvf; dirp++, xdir++) |
|---|
| 2318 | if (dirp->tag == TAG005) { |
|---|
| 2319 | int loop; |
|---|
| 2320 | LONGX mfn=0; |
|---|
| 2321 | p=FIELDP(xdir); |
|---|
| 2322 | for (loop=dirp->len; loop--; p++) mfn=mfn*10+((int)(*p)-(int)'0'); |
|---|
| 2323 | if (mfn > CLASSES) fatal("aotmsa2/rutfreqD/TAG005/CLASSES"); |
|---|
| 2324 | sprintf(sortp->x2993,"%10"_LD_,999999999L-gtabcntA[mfn]); |
|---|
| 2325 | sortp->gmfn=mfn; |
|---|
| 2326 | break; |
|---|
| 2327 | } |
|---|
| 2328 | for (dirp=MFRdir, xdir=0; xdir < MFRnvf; dirp++, xdir++) |
|---|
| 2329 | if (dirp->tag == TAG022) { |
|---|
| 2330 | p=FIELDP(xdir); |
|---|
| 2331 | if (*p == 'C' || *p == 'D') ; else fatal("aotmsa2/rutfreqD/TAG022/CD"); |
|---|
| 2332 | len=dirp->len; if (len>=sizeof(sortp->x2992)) len=sizeof(sortp->x2992)-1; |
|---|
| 2333 | strncpy(sortp->x2992,p,len); sortp->x2992[len]='\0'; |
|---|
| 2334 | memcpy(sortp->x2992_cat,p,1); /* memcpy(,,1) */ |
|---|
| 2335 | break; |
|---|
| 2336 | } |
|---|
| 2337 | } |
|---|
| 2338 | sprintf(sortp->xrankF,"%6"_LD_,tabcntArankF[v351]); /* key */ |
|---|
| 2339 | sortp->v351=v351; |
|---|
| 2340 | |
|---|
| 2341 | } /* end for (sortp=sort_tab) */ |
|---|
| 2342 | |
|---|
| 2343 | /* sort D |
|---|
| 2344 | */ |
|---|
| 2345 | for (k=ntabs-1, i=0; i<k; i++) { |
|---|
| 2346 | ip=sort_tab+i; |
|---|
| 2347 | for (j=i+1; j<ntabs; j++) { |
|---|
| 2348 | jp=sort_tab+j; |
|---|
| 2349 | if (memcmp((void *)ip,(void *)jp,keylen) > 0) { |
|---|
| 2350 | memcpy((void *)sort_tmp,(void *)ip, sizeof(OUTFREQD_SORT_ENTRY)); |
|---|
| 2351 | memcpy((void *)ip ,(void *)jp, sizeof(OUTFREQD_SORT_ENTRY)); |
|---|
| 2352 | memcpy((void *)jp ,(void *)sort_tmp,sizeof(OUTFREQD_SORT_ENTRY)); |
|---|
| 2353 | } |
|---|
| 2354 | } |
|---|
| 2355 | } |
|---|
| 2356 | |
|---|
| 2357 | |
|---|
| 2358 | /* store tabcntArankD (indexed by DecsMfn) and tabfreqD (indexed by rankD) |
|---|
| 2359 | */ |
|---|
| 2360 | for (sortp=sort_tab, tabD=tabfreqD, mfn=1L; mfn<=ntabs; mfn++, sortp++, tabD++) { |
|---|
| 2361 | tabD->v351=sortp->v351; |
|---|
| 2362 | // tabD->delta=sortp->delta; |
|---|
| 2363 | memcpy(tabD->delca,sortp->x2992,MAXCATLEN); |
|---|
| 2364 | tabD->gmfn=sortp->gmfn; |
|---|
| 2365 | tabcntArankD[sortp->v351]=mfn; |
|---|
| 2366 | } |
|---|
| 2367 | |
|---|
| 2368 | return(0); |
|---|
| 2369 | } |
|---|
| 2370 | |
|---|
| 2371 | #if ANSI |
|---|
| 2372 | int outfreqD(int ntabs, char *dbnoutp, LONGX *tabcntArankF, LONGX *tabcntArankW, TABFREQD_ENTRY *tabfreqD) |
|---|
| 2373 | #else |
|---|
| 2374 | int outfreqD(ntabs, dbnoutp, tabcntArankF, tabcntArankW, tabfreqD) |
|---|
| 2375 | int ntabs; |
|---|
| 2376 | char *dbnoutp; |
|---|
| 2377 | LONGX *tabcntArankF; |
|---|
| 2378 | LONGX *tabcntArankW; |
|---|
| 2379 | TABFREQD_ENTRY *tabfreqD; |
|---|
| 2380 | #endif |
|---|
| 2381 | { |
|---|
| 2382 | RECSTRU *recp; |
|---|
| 2383 | LONGX mfn; |
|---|
| 2384 | char buffup[BUFSIZ],*batchp; |
|---|
| 2385 | |
|---|
| 2386 | LONGX upirec; |
|---|
| 2387 | LONGX upcrec; |
|---|
| 2388 | |
|---|
| 2389 | TABFREQD_ENTRY *tabD; |
|---|
| 2390 | |
|---|
| 2391 | if (!ntabs) return(0); |
|---|
| 2392 | |
|---|
| 2393 | /* output |
|---|
| 2394 | */ |
|---|
| 2395 | record(upcrec=nrecs,dbnoutp,0L); |
|---|
| 2396 | record(upirec=nrecs,dbnoutp,1L); |
|---|
| 2397 | for (tabD=tabfreqD, mfn=1L; mfn<=ntabs; mfn++, tabD++) { |
|---|
| 2398 | batchp=buffup; |
|---|
| 2399 | |
|---|
| 2400 | sprintf(batchp,"A1/%06"_LD_"/" ,tabD->v351 ); batchp+=strlen(batchp); |
|---|
| 2401 | |
|---|
| 2402 | sprintf(batchp,"A2220/%"_LD_"/" ,tabcntArankF[tabD->v351]); batchp+=strlen(batchp); |
|---|
| 2403 | sprintf(batchp,"A2220/%"_LD_"/" ,tabcntArankW[tabD->v351]); batchp+=strlen(batchp); |
|---|
| 2404 | sprintf(batchp,"A2220/%"_LD_"/" ,mfn ); batchp+=strlen(batchp); |
|---|
| 2405 | |
|---|
| 2406 | *batchp='\0'; |
|---|
| 2407 | RECORD(upirec,dbnoutp,mfn); MFRstatus=ACTIVE; |
|---|
| 2408 | if (fldupdat(upirec,buffup)) return(mfn); |
|---|
| 2409 | recupdat(upcrec,upirec); |
|---|
| 2410 | } |
|---|
| 2411 | |
|---|
| 2412 | return(0); |
|---|
| 2413 | } |
|---|
| 2414 | |
|---|
| 2415 | |
|---|
| 2416 | #if 0 |
|---|
| 2417 | #define MFQTDBN0 11 |
|---|
| 2418 | #define MFQTQRY0 12 |
|---|
| 2419 | #define MFQTOBJ0 13 |
|---|
| 2420 | |
|---|
| 2421 | #define MFQTXCTS 20 |
|---|
| 2422 | |
|---|
| 2423 | #define MFQSWTIM 't' |
|---|
| 2424 | #define MFQSWDBN 'd' |
|---|
| 2425 | #define MFQSWQTY 'q' |
|---|
| 2426 | |
|---|
| 2427 | #define MFQTASET 21 |
|---|
| 2428 | #define MFQTALCC 22 |
|---|
| 2429 | |
|---|
| 2430 | #define MFQTHITS 31 |
|---|
| 2431 | #define MFQTHCUR 32 |
|---|
| 2432 | #define MFQTHMFN 33 |
|---|
| 2433 | #define MFQTHSIZ 34 |
|---|
| 2434 | #define MFQTHMEM 35 |
|---|
| 2435 | |
|---|
| 2436 | #define OPRNULL 0x01 |
|---|
| 2437 | #define OPRXEND 0x02 |
|---|
| 2438 | #define PSTLEVEL 0x03 |
|---|
| 2439 | #define ACCLEVEL 0x04 |
|---|
| 2440 | |
|---|
| 2441 | #define B7UPLEN 9 /* length for b40 numeric fields */ |
|---|
| 2442 | #define B7DELADD "D%dA%d|%09"_LD_"|" /* sprintf format for dir/field */ |
|---|
| 2443 | #define B7EDIT1 "%09"_LD_ /* sprintf format for field edit */ |
|---|
| 2444 | |
|---|
| 2445 | #define MFQTXTAG 101 /* inverted files prefixes */ |
|---|
| 2446 | |
|---|
| 2447 | #endif |
|---|
| 2448 | |
|---|
| 2449 | |
|---|
| 2450 | #if ANSI |
|---|
| 2451 | char *recsfldv(char *areap, char *fldp, FFI fldlen, char *defaultp) |
|---|
| 2452 | #else |
|---|
| 2453 | char *recsfldv(areap,fldp,fldlen,defaultp) |
|---|
| 2454 | char *areap; |
|---|
| 2455 | char *fldp; |
|---|
| 2456 | FFI fldlen; |
|---|
| 2457 | char *defaultp; |
|---|
| 2458 | #endif /* CIAPI_SOURCE */ |
|---|
| 2459 | { |
|---|
| 2460 | FFI n; |
|---|
| 2461 | unsigned char *p; |
|---|
| 2462 | |
|---|
| 2463 | p=subfldp(fldp,'v',&fldlen); |
|---|
| 2464 | |
|---|
| 2465 | if (p) n=fldlen; /* ja' decrementado */ |
|---|
| 2466 | else |
|---|
| 2467 | if (defaultp) |
|---|
| 2468 | n=(FFI)strlen((char*)(p=(unsigned char*)defaultp)); |
|---|
| 2469 | else |
|---|
| 2470 | n=(FFI)strlen((char*)(p=(unsigned char*)"\0")); |
|---|
| 2471 | if (!areap) |
|---|
| 2472 | if ((areap=(char *)ALLOC((ALLOPARM)n+1)) == (char *)ALLONULL) |
|---|
| 2473 | fatal("aotmsa2/recsfldv/ALLOC"); |
|---|
| 2474 | memcpy(areap,p,n); areap[n]='\0'; |
|---|
| 2475 | return(areap); |
|---|
| 2476 | } |
|---|
| 2477 | |
|---|
| 2478 | |
|---|
| 2479 | #if 0 |
|---|
| 2480 | for (tag=0; isdigit(*p); p++) tag=tag*10+(*p-'0'); |
|---|
| 2481 | if (*p) { |
|---|
| 2482 | freex(srcareap,dirarea); |
|---|
| 2483 | return(errp); |
|---|
| 2484 | } |
|---|
| 2485 | if (tag) { |
|---|
| 2486 | for (i=0; i+1 < MFRnvf; i++) { |
|---|
| 2487 | if (DIRtag(i) != tag) continue; |
|---|
| 2488 | for (j=i+1; j < MFRnvf; j++) { |
|---|
| 2489 | if (DIRtag(j) != tag) continue; |
|---|
| 2490 | if (memcmp(FIELDP(i),FIELDP(j),DIRlen(i)) > 0) { |
|---|
| 2491 | memcpy(tempdir,&MFRdir[i],sizeof(DIRSTRU)); |
|---|
| 2492 | memcpy(&MFRdir[i],&MFRdir[j],sizeof(DIRSTRU)); |
|---|
| 2493 | memcpy(&MFRdir[j],tempdir,sizeof(DIRSTRU)); |
|---|
| 2494 | } |
|---|
| 2495 | } |
|---|
| 2496 | } |
|---|
| 2497 | break; |
|---|
| 2498 | } |
|---|
| 2499 | #endif |
|---|