diff --git a/main/src/h2root.cxx b/main/src/h2root.cxx index aab8cea3cc59fdb8a81c479ca8e752e3619ed792..feec224c4b0e7c5a9431b5dd49a25e8ca134646b 100644 --- a/main/src/h2root.cxx +++ b/main/src/h2root.cxx @@ -40,6 +40,7 @@ // Also, the arrays must be declared extern like on Windows #ifndef WIN32 #define PAWC_SIZE 4000000 +# define bigbuf bigbuf_ # define pawc pawc_ # define quest quest_ # define hcbits hcbits_ @@ -70,7 +71,7 @@ extern "C" int hcbook[51]; extern "C" int rzcl[11]; #endif -char bigbuf[4000000]; //this variable must be global for amd64 +extern "C" char bigbuf[4000000]; //this variable must be global for amd64 int *iq, *lq; float *q; char idname[128]; @@ -676,10 +677,18 @@ void convert_cwn(Int_t id) #else hgiven(id,chtitl,80,nvar,chtag_out,kNchar,rmin[0],rmax[0]); #endif + //Long_t add0 = (Long_t)&bigbuf[0]; + //Long_t addpaw = (Long_t)&pawc[18]; + //printf("ALIGN add0 = %lld, mod=%d, addpaw=%lld, modpaw=%d\n",add0,add0%4,addpaw,addpaw%4); + Long_t add = (Long_t)&bigbuf[0] - (Long_t)&pawc[18]; + add /= 4; + Int_t addq = Int_t(add); #ifndef WIN32 - hbnam(id,PASSCHAR(" "),bigbuf[0],PASSCHAR("$CLEAR"),0,1,6); + //hbnam(id,PASSCHAR(" "),bigbuf[0],PASSCHAR("$CLEAR"),0,1,6); + hbnam(id,PASSCHAR(" "),addq,PASSCHAR("$CLEAR"),0,1,6); #else - hbnam(id,PASSCHAR(" "),bigbuf[0],PASSCHAR("$CLEAR"),0); + //hbnam(id,PASSCHAR(" "),bigbuf[0],PASSCHAR("$CLEAR"),0); + hbnam(id,PASSCHAR(" "),addq,PASSCHAR("$CLEAR"),0); #endif Int_t bufpos = 0; @@ -785,11 +794,14 @@ void convert_cwn(Int_t id) strcpy(oldblock,block); oldischar = ischar; Int_t lblock = strlen(block); - Long_t add= (Long_t)&bigbuf[bufpos]; + //Long_t add= (Long_t)&bigbuf[bufpos]; + add= (Long_t)&bigbuf[bufpos] - (Long_t)&pawc[18]; + add /= 4; + addq = Int_t(add); #ifndef WIN32 - hbnam(id,PASSCHAR(block),add,PASSCHAR("$SET"),ischar,lblock,4); + hbnam(id,PASSCHAR(block),addq,PASSCHAR("$SET"),ischar,lblock,4); #else - hbnam(id,PASSCHAR(block),add,PASSCHAR("$SET"),ischar); + hbnam(id,PASSCHAR(block),addq,PASSCHAR("$SET"),ischar); #endif } diff --git a/misc/minicern/src/hbook.f b/misc/minicern/src/hbook.f index 26105b2e158a90d93f0d8b7f0846ca102bbf4feb..ac41865e6dfc2439b33d8b2acc74e3e5695f92da 100644 --- a/misc/minicern/src/hbook.f +++ b/misc/minicern/src/hbook.f @@ -5,7 +5,7 @@ * are missing. * *------------------------------------------------------------------------------- - + SUBROUTINE HNTVAR2(ID1,IVAR,CHTAG,CHFULL,BLOCK,NSUB,ITYPE,ISIZE + ,NBITS,IELEM) INTEGER ZBITS, ZNDIM, ZNOENT, ZNPRIM, ZNRZB, ZIFCON, @@ -25,6 +25,8 @@ + NCHAR ,NRHIST,IERR ,NV INTEGER NWPAW,IXPAWC,IHDIV,IXHIGZ,IXKU, LMAIN REAL FENC , HCV + common/bigbuf/bigb(4000000) + character bigb COMMON/PAWC/NWPAW,IXPAWC,IHDIV,IXHIGZ,IXKU,FENC(5),LMAIN, +HCV(4000000-11) INTEGER IQ ,LQ @@ -2555,10 +2557,11 @@ ENDIF IELEM = IELEM*IE 10 CONTINUE - IADDW = ISHFT(IADD, -2) - IBYOF = IAND(IADD, IBYPW-1) - IF (IBYOF .NE. 0) GOTO 40 - IQ(LNAME+IOFF+ZNADDR) = IADDW - LOCF(IQ(1)) +* IADDW = ISHFT(IADD, -2) +* IBYOF = IAND(IADD, IBYPW-1) +* IF (IBYOF .NE. 0) GOTO 40 +* IQ(LNAME+IOFF+ZNADDR) = IADDW - LOCF(IQ(1)) + IQ(LNAME+IOFF+ZNADDR) = IADD IADD = IADD + IELEM*ISIZE 20 IOFF = IOFF + ZNADDR 30 CONTINUE