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