Blob Blame History Raw
#! /bin/sh /usr/share/dpatch/dpatch-run
## 211-support-amd64-and-itanium.dpatch by  <kmccarty@debian.org>
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: Large patch from Harald Vogt <hvogt@ifh.de> to make CERNLIB work better
## DP: (at least when statically linked) on 64-bit architectures.
## DP: Slightly modified in an attempt to keep ABI compatibility of the
## DP: dynamic libraries; not that it matters much as they don't work well
## DP: when dynamically linked on 64-bit anyway.

@DPATCH@
diff -urNad cernlib-2006.dfsg.2~/src/cfortran/hbook.h cernlib-2006.dfsg.2/src/cfortran/hbook.h
--- cernlib-2006.dfsg.2~/src/cfortran/hbook.h	1999-11-15 17:01:12.000000000 +0000
+++ cernlib-2006.dfsg.2/src/cfortran/hbook.h	2007-12-14 21:41:27.000000000 +0000
@@ -489,6 +489,10 @@
 #define HBALLOC(IDN,CHDIR,VAR,BLOCK,ITYPE,ISIZE,IFIRST,NELEM,IBASE,IOFF,NUSE)\
         CCALLSFSUB11(HBALLOC,hballoc,INT,STRING,STRING,STRING,INT,INT,INT,INT,INTV,PINT,PINT,IDN,CHDIR,VAR,BLOCK,ITYPE,ISIZE,IFIRST,NELEM,IBASE,IOFF,NUSE)
 
+PROTOCCALLSFSUB11(HBALLOC64,hballoc64,INT,STRING,STRING,STRING,INT,INT,INT,INT,INTV,PLONG,PINT)
+#define HBALLOC64(IDN,CHDIR,VAR,BLOCK,ITYPE,ISIZE,IFIRST,NELEM,IBASE,IOFF,NUSE)\
+        CCALLSFSUB11(HBALLOC64,hballoc64,INT,STRING,STRING,STRING,INT,INT,INT,INT,INTV,PLONG,PINT,IDN,CHDIR,VAR,BLOCK,ITYPE,ISIZE,IFIRST,NELEM,IBASE,IOFF,NUSE)
+
 PROTOCCALLSFSUB1(HBFREE,hbfree,INT)
 #define HBFREE(LUN) CCALLSFSUB1(HBFREE,hbfree,INT,LUN)
 
@@ -508,6 +512,13 @@
 #define HGNTBF(IDN,VAR,IOFFST,NVAR,IDNEVT,IERROR)\
         CCALLSFSUB6(HGNTBF,hgntbf,INT,ZTRINGV,INTV,INT,INT,PINT,IDN,VAR,IOFFST,NVAR,IDNEVT,IERROR)
 
+PROTOCCALLSFSUB6(HGNTBF64,hgntbf64,INT,ZTRINGV,LONGV,INT,INT,PINT)
+/* fix the element length of VAR to 32 */
+#define hgntbf64_ELEMS_2          ZTRINGV_ARGS(4)
+#define hgntbf64_ELEMLEN_2        ZTRINGV_NUM(32)
+#define HGNTBF64(IDN,VAR,IOFFST,NVAR,IDNEVT,IERROR)\
+        CCALLSFSUB6(HGNTBF64,hgntbf64,INT,ZTRINGV,LONGV,INT,INT,PINT,IDN,VAR,IOFFST,NVAR,IDNEVT,IERROR)
+
 PROTOCCALLSFSUB1(HGTDIR,hgtdir,PSTRING)
 #define HGTDIR(CHDIR) CCALLSFSUB1(HGTDIR,hgtdir,PSTRING,CHDIR)
 
diff -urNad cernlib-2006.dfsg.2~/src/packlib/cspack/cspack/hcntpar.inc cernlib-2006.dfsg.2/src/packlib/cspack/cspack/hcntpar.inc
--- cernlib-2006.dfsg.2~/src/packlib/cspack/cspack/hcntpar.inc	1996-03-08 15:44:16.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/cspack/cspack/hcntpar.inc	2007-12-14 21:41:27.000000000 +0000
@@ -22,7 +22,7 @@
      +          ZIFREA=7,  ZNWTIT=8,  ZITIT1=9,  ZNCHRZ=13, ZIFBIT=8,
      +          ZDESC=1,   ZLNAME=2,  ZNAME=3,   ZRANGE=4,  ZNADDR=12,
      +          ZARIND=11, ZIBLOK=8,  ZNBLOK=10, ZIBANK=9,  ZIFTMP=11,
-     +          ZITMP=10,  ZNTMP=5,   ZNTMP1=3,  ZLINK=6)
+     +          ZITMP=10,  ZNTMP=5,   ZNTMP1=4,  ZLINK=6)
 *
 
 #endif
diff -urNad cernlib-2006.dfsg.2~/src/packlib/cspack/sysreq/netreq.c cernlib-2006.dfsg.2/src/packlib/cspack/sysreq/netreq.c
--- cernlib-2006.dfsg.2~/src/packlib/cspack/sysreq/netreq.c	2007-12-14 21:41:17.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/cspack/sysreq/netreq.c	2007-12-14 21:41:27.000000000 +0000
@@ -341,7 +341,7 @@
                 return(-errno);
         }
 	TRACE(2, "sysreq", "recv reply length");
-        if ((int)(p = RecvStr(s, &replylen)) <0)     {
+        if ((long)(p = RecvStr(s, &replylen)) <0)     {
 		TRACE(2, "sysreq", "RecvStr(RepLen): (errno=%d)", errno);
                 (void) close(s);
 		END_TRACE();
diff -urNad cernlib-2006.dfsg.2~/src/packlib/hbook/hbook/hcntpar.inc cernlib-2006.dfsg.2/src/packlib/hbook/hbook/hcntpar.inc
--- cernlib-2006.dfsg.2~/src/packlib/hbook/hbook/hcntpar.inc	1996-01-16 17:07:52.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/hbook/hbook/hcntpar.inc	2007-12-14 21:41:27.000000000 +0000
@@ -24,7 +24,7 @@
      +          ZIFREA=7,  ZNWTIT=8,  ZITIT1=9,  ZNCHRZ=13, ZIFBIT=8,
      +          ZDESC=1,   ZLNAME=2,  ZNAME=3,   ZRANGE=4,  ZNADDR=12,
      +          ZARIND=11, ZIBLOK=8,  ZNBLOK=10, ZIBANK=9,  ZIFTMP=11,
-     +          ZID=12,    ZITMP=10,  ZNTMP=6,   ZNTMP1=3,  ZLINK=6)
+     +          ZID=12,    ZITMP=10,  ZNTMP=6,   ZNTMP1=4,  ZLINK=6)
 *
 
 #endif
diff -urNad cernlib-2006.dfsg.2~/src/packlib/hbook/hmmap/hcreatem.F cernlib-2006.dfsg.2/src/packlib/hbook/hmmap/hcreatem.F
--- cernlib-2006.dfsg.2~/src/packlib/hbook/hmmap/hcreatem.F	1996-03-13 10:13:20.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/hbook/hmmap/hcreatem.F	2007-12-14 21:41:27.000000000 +0000
@@ -39,11 +39,11 @@
 ************************************************************************
 *
       CHARACTER*(*) MFILE
-#if !defined(CERNLIB_ALPHA_OSF)
+#if !defined(CERNLIB_ALPHA_OSF) && !defined(CERNLIB_QMLXIA64)
       INTEGER       ICOMAD(1), ISIZE, IBASE(1), HCREATEI
       SAVE ICOMAD
 #endif
-#if defined(CERNLIB_ALPHA_OSF)
+#if defined(CERNLIB_ALPHA_OSF) || defined(CERNLIB_QMLXIA64)
       INTEGER       ISIZE, IBASE(1), HCREATEI
       INTEGER*8     ICOMAD(1)
       SAVE ICOMAD
@@ -63,6 +63,10 @@
 ************************************************************************
       ICOMAD(1) = 0
 #endif
+#if defined(CERNLIB_QMLXIA64)
+C this should be a reasonable range for IA64 architectures
+      ICOMAD(1) = 2**30
+#endif
 #if (defined(CERNLIB_DECS))&&(!defined(CERNLIB_ALPHA))
       ICOMAD(1) = 4*LOCF(ICOMAD(1)) + MFEN
       ICOMAD(1) = ((ICOMAD(1)+4095)/4096)*4096
diff -urNad cernlib-2006.dfsg.2~/src/packlib/hbook/hmmap/hmapm.F cernlib-2006.dfsg.2/src/packlib/hbook/hmmap/hmapm.F
--- cernlib-2006.dfsg.2~/src/packlib/hbook/hmmap/hmapm.F	2001-10-02 09:06:15.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/hbook/hmmap/hmapm.F	2007-12-14 21:41:27.000000000 +0000
@@ -54,11 +54,11 @@
 ************************************************************************
 *
       CHARACTER*(*) MFILE
-#if !defined(CERNLIB_ALPHA_OSF)
+#if !defined(CERNLIB_ALPHA_OSF) && !defined(CERNLIB_QMLXIA64)
       INTEGER       ICOMAD(1), IBASE(1), HMAPI
       SAVE ICOMAD
 #endif
-#if defined(CERNLIB_ALPHA_OSF)
+#if defined(CERNLIB_ALPHA_OSF) || defined(CERNLIB_QMLXIA64)
       INTEGER       IBASE(1), HMAPI
       INTEGER*8     ICOMAD(1)
       SAVE ICOMAD
@@ -81,6 +81,10 @@
       CALL UCTOH(MFILE2,MKEY,4,4)
       ICOMAD(1) = 0
 #endif
+#if defined(CERNLIB_QMLXIA64)
+C this should be a reasonable range for IA64 architectures
+      ICOMAD(1) = 2**30
+#endif
 #if defined(CERNLIB_DECS)
       ICOMAD(1) = 4*LOCF(ICOMAD(1)) + MFEN
       ICOMAD(1) = ((ICOMAD(1)+4095)/4096)*4096
diff -urNad cernlib-2006.dfsg.2~/src/packlib/hbook/hntup/hballoc.F cernlib-2006.dfsg.2/src/packlib/hbook/hntup/hballoc.F
--- cernlib-2006.dfsg.2~/src/packlib/hbook/hntup/hballoc.F	1996-01-16 17:07:56.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/hbook/hntup/hballoc.F	2007-12-14 21:41:27.000000000 +0000
@@ -42,3 +42,26 @@
       ENDIF
 *
       END
+*
+*     64-bit version (separate to preserve ABI compatibility)
+      SUBROUTINE HBALLOC64(IDN,CHDIR,VAR,BLOCK,ITYPE,ISIZE,IFIRST,NELEM,
+     +                     IBASE,IOFF,NUSE)
+*
+      CHARACTER*(*)  CHDIR, VAR, BLOCK
+      INTEGER        IDN, ITYPE, ISIZE, NELEM, NUSE, IFIRST, IBASE(1)
+      INTEGER*8      IBUF(1), IOFF
+*
+      LC = LENOCC(CHDIR)
+      LV = LENOCC(VAR)
+      LB = LENOCC(BLOCK)
+*
+      CALL HBALLO1(IDN, CHDIR, LC, VAR, LV, BLOCK, LB, ITYPE, ISIZE,
+     +             IFIRST, NELEM, IBUF, NUSE)
+*
+      IF (NUSE .EQ. 0) THEN
+         IOFF = 0
+      ELSE
+         IOFF = IBUF(1) - LOC(IBASE(1))/4
+      ENDIF
+*
+      END
diff -urNad cernlib-2006.dfsg.2~/src/packlib/hbook/hntup/hbnt.F cernlib-2006.dfsg.2/src/packlib/hbook/hntup/hbnt.F
--- cernlib-2006.dfsg.2~/src/packlib/hbook/hntup/hbnt.F	1996-01-16 17:07:56.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/hbook/hntup/hbnt.F	2007-12-14 21:41:27.000000000 +0000
@@ -269,11 +269,13 @@
  ************************************************************************
  *      *         *                                                     *
  *   1  *         *     Number of variables to be read out              *
- *      *         *     *** For every variable 3 words (ZNTMP1) ***     *
+ *      *         *     *** For every variable 4 words (ZNTMP1) ***     *
  *   2  *         *     Index of variable in LNAME bank                 *
  *   3  *         *     Offset of variable in LNAME bank (INDX-1)*ZNADDR*
  *   4  *         *     Offset in dynamically allocated buffer (only    *
  *      *         *     used via HGNTBF) otherwise 0                    *
+ *   5  *         *     spare (used in 64 bit architectures for upper   *
+ *      *         *     address part)                                   *
  ************************************************************************
 #endif
 *
diff -urNad cernlib-2006.dfsg.2~/src/packlib/hbook/hntup/hgnt2.F cernlib-2006.dfsg.2/src/packlib/hbook/hntup/hgnt2.F
--- cernlib-2006.dfsg.2~/src/packlib/hbook/hntup/hgnt2.F	1999-03-05 15:42:35.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/hbook/hntup/hgnt2.F	2007-12-14 21:41:27.000000000 +0000
@@ -34,7 +34,13 @@
 #include "hbook/hcrecv.inc"
 *
       CHARACTER*(*) VAR1(*)
+#if defined(CERNLIB_QMLXIA64)
+      INTEGER*8     IVOFF(*), IOFFST, IOFFSTT
+      INTEGER       IOFFSTV(2)
+      EQUIVALENCE   (IOFFSTV, IOFFSTT)
+#else
       INTEGER       IVOFF(*)
+#endif
       CHARACTER*32  VAR
       INTEGER       ILOGIC, HNMPTR
       LOGICAL       LOGIC, INDVAR, ALLVAR, USEBUF, CHKOFF
@@ -452,12 +458,21 @@
          IQ(LTMP1+JTMP+1)      = IOFF
          IF (USEBUF) THEN
             IF (IEDIF .EQ. 0) THEN
-               IQ(LTMP1+JTMP+2) = IOFFST
+               IOFFSTT = IOFFST
             ELSE
-               IQ(LTMP1+JTMP+2) = IOFFST + (IEDIF*ISHFT(ISIZE,-2))
+               IOFFSTT = IOFFST + (IEDIF*ISHFT(ISIZE,-2))
             ENDIF
+            IQ(LTMP1+JTMP+2) = IOFFSTT
+#if defined(CERNLIB_QMLXIA64)
+*           store upper part of 64 bit address
+            IQ(LTMP1+JTMP+3) = IOFFSTV(2)
+#endif
          ELSE
             IQ(LTMP1+JTMP+2)   = 0
+#if defined(CERNLIB_QMLXIA64)
+*           reset upper part of 64 bit address
+            IQ(LTMP1+JTMP+3)   = 0
+#endif
          ENDIF
          LQ(LTMP1-IQ(LTMP1+1)) = LBLOK
 *
diff -urNad cernlib-2006.dfsg.2~/src/packlib/hbook/hntup/hgntbf.F cernlib-2006.dfsg.2/src/packlib/hbook/hntup/hgntbf.F
--- cernlib-2006.dfsg.2~/src/packlib/hbook/hntup/hgntbf.F	1996-01-16 17:07:57.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/hbook/hntup/hgntbf.F	2007-12-14 21:41:27.000000000 +0000
@@ -26,3 +26,13 @@
       CALL HGNT1(IDN, '*', VAR, IOFFST, NVAR1, IDNEVT, IERROR)
 *
       END
+*
+*     64-bit version (separate to preserve ABI compatibility)
+      SUBROUTINE HGNTBF64(IDN,VAR,IOFFST,NVAR,IDNEVT,IERROR)
+      CHARACTER*(*) VAR(*)
+      INTEGER*8     IOFFST(*)
+*
+      NVAR1 = -NVAR
+      CALL HGNT1(IDN, '*', VAR, IOFFST, NVAR1, IDNEVT, IERROR)
+*
+      END
diff -urNad cernlib-2006.dfsg.2~/src/packlib/hbook/hntup/hgntf.F cernlib-2006.dfsg.2/src/packlib/hbook/hntup/hgntf.F
--- cernlib-2006.dfsg.2~/src/packlib/hbook/hntup/hgntf.F	1999-03-05 15:42:35.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/hbook/hntup/hgntf.F	2007-12-14 21:41:27.000000000 +0000
@@ -37,6 +37,13 @@
       INTEGER       ILOGIC
       LOGICAL       LOGIC, INDVAR, USEBUF
       EQUIVALENCE  (LOGIC, ILOGIC)
+
+#if defined(CERNLIB_QMLXIA64)
+      INTEGER*8     IOFFST, IOFFSTT
+      INTEGER       IOFFSTV(2)
+      EQUIVALENCE   (IOFFSTV, IOFFSTT)
+#endif
+
 *
 #include "hbook/jbyt.inc"
 *
@@ -76,6 +83,12 @@
          INDX   = IQ(LTMP1+JTMP)
          IOFF   = IQ(LTMP1+JTMP+1)
          IOFFST = IQ(LTMP1+JTMP+2)
+#if defined(CERNLIB_QMLXIA64)
+*        fetch full 64 bit address
+         IOFFSTV(1) = IQ(LTMP1+JTMP+2)
+         IOFFSTV(2) = IQ(LTMP1+JTMP+3)
+         IOFFST     = IOFFSTT
+#endif
          IF (IOFFST .EQ. 0) THEN
             USEBUF = .FALSE.
          ELSE
@@ -442,12 +455,21 @@
 *
          IF (USEBUF) THEN
             IF (IEDIF .EQ. 0) THEN
-               IQ(LTMP1+JTMP+2) = IOFFST
+               IOFFSTT = IOFFST
             ELSE
-               IQ(LTMP1+JTMP+2) = IOFFST + (IEDIF*ISHFT(ISIZE,-2))
+               IOFFSTT = IOFFST + (IEDIF*ISHFT(ISIZE,-2))
             ENDIF
+            IQ(LTMP1+JTMP+2) = IOFFSTT
+#if defined(CERNLIB_QMLXIA64)
+*           store upper part of 64 bit address
+            IQ(LTMP1+JTMP+3) = IOFFSTV(2)
+#endif
          ELSE
             IQ(LTMP1+JTMP+2) = 0
+#if defined(CERNLIB_QMLXIA64)
+*           reset upper part of 64 bit address
+            IQ(LTMP1+JTMP+3) = 0
+#endif
          ENDIF
 *
    40 CONTINUE
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/Imakefile cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/Imakefile
--- cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/Imakefile	2002-09-19 16:44:52.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/Imakefile	2007-12-14 21:41:27.000000000 +0000
@@ -11,6 +11,10 @@
 	sleepf.c signalf.c sigprnt.c sigunbl.c stati.c systei.c \ @@\
 	tminit.c unlini.c tmread.c
 
+#ifdef CERNLIB_QMLXIA64
+SRCS_C += chkloc.c
+#endif
+
 #ifndef CERNLIB_OS9
 SRCS_C += timel.c lstati.c
 #endif
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/chkloc.c cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/chkloc.c
--- cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/chkloc.c	1970-01-01 00:00:00.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/chkloc.c	2007-12-14 21:41:27.000000000 +0000
@@ -0,0 +1,10 @@
+/*
+ * Utility routine for locf and locb 
+ * H. Vogt (harald.vogt@desy.de)
+ *
+ */
+
+#if defined(CERNLIB_QMLXIA64)
+#include "lp64gs/chkloc.c"
+#endif
+
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/jumptn.c cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/jumptn.c
--- cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/jumptn.c	2004-07-29 14:07:43.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/jumptn.c	2007-12-14 21:41:27.000000000 +0000
@@ -20,8 +20,10 @@
  */
 #include "kerngen/pilot.h"
 
-#if defined(CERNLIB_QMLXIA64)||defined(CERNLIB_QMVAOS)
-#include "vaogs/jumptn.c"
+#if defined(CERNLIB_QMVAOS)
+#include "vaogs/jumptn.c"  
+#elif defined(CERNLIB_QMLXIA64)
+#include "lp64gs/jumptn.c"
 #else
 /*>    ROUTINE JUMPTN
   CERN PROGLIB# Z043    JUMPTN          .VERSION KERNFOR  4.40  940929
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/jumpxn.c cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/jumpxn.c
--- cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/jumpxn.c	2004-07-29 14:07:43.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/jumpxn.c	2007-12-14 21:41:27.000000000 +0000
@@ -20,8 +20,10 @@
  */
 #include "kerngen/pilot.h"
 
-#if defined(CERNLIB_QMLXIA64)||defined(CERNLIB_QMVAOS)
+#if defined(CERNLIB_QMVAOS)
 #include "vaogs/jumpxn.c"
+#elif defined(CERNLIB_QMLXIA64)
+#include "lp64gs/jumpxn.c"
 #else
 /*>    ROUTINE JUMPXN
   CERN PROGLIB# Z042    JUMPXN          .VERSION KERNFOR  4.40  940929
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/lenocc.c cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/lenocc.c
--- cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/lenocc.c	1997-10-23 16:25:11.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/lenocc.c	2007-12-14 21:41:27.000000000 +0000
@@ -46,7 +46,7 @@
 
 /*        look at the last ntail characters   */
 
-      ntail = ((int)chcur & 3);
+      ntail = ((unsigned long)chcur & 3);
       for (i = ntail; i > 0; i--)
         { if (*--chcur != ' ')       goto exit; }
 
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/locb.c cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/locb.c
--- cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/locb.c	1997-09-02 14:26:37.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/locb.c	2007-12-14 21:41:27.000000000 +0000
@@ -26,6 +26,9 @@
 # define DummyDef
 #endif
 
+#if defined(CERNLIB_QMLXIA64)
+#include "lp64gs/locb.c"
+#else
 
 /*>    ROUTINE LOCB
   CERN PROGLIB# N101    LOCB            .VERSION KERNFOR  4.36  930602
@@ -47,6 +50,8 @@
    return( (int) iadr );
 }
 /*> END <----------------------------------------------------------*/
+#endif
 #ifdef CERNLIB_TCGEN_LOCB
 #undef CERNLIB_TCGEN_LOCB
 #endif
+
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/locf.c cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/locf.c
--- cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/locf.c	2004-07-29 14:06:07.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/locf.c	2007-12-14 21:41:27.000000000 +0000
@@ -50,6 +50,8 @@
 #include "irtdgs/locf.c"
 #elif defined(CERNLIB_QMVAOS)
 #include "vaogs/locf.c"
+#elif defined(CERNLIB_QMLXIA64)
+#include "lp64gs/locf.c"
 #else
 /*>    ROUTINE LOCF
   CERN PROGLIB# N100    LOCF            .VERSION KERNFOR  4.36  930602
@@ -68,25 +70,7 @@
    DummyDef
 #endif
 {
-#if defined(CERNLIB_QMLXIA64)
-  const unsigned long long int mask=0x00000000ffffffff;
-  static unsigned long long int base=1;
-  unsigned long long int jadr=(unsigned long long int) iadr;
-  unsigned long long int jadrl = ((mask & jadr) >> LADUPW);
-
-  if (base == 1) {
-    base = (~mask & jadr);
-  } else if(base != (~mask & jadr)) {
-    printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
-    printf("locf_() Warning: changing base from %lx to %lx!!!\n",
-    	   base, (~mask & jadr));
-    printf("This may result in program crash or incorrect results\n");
-    printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
-  }
-  return ((unsigned) jadrl);
-#else
   return( ((unsigned) iadr) >> LADUPW );
-#endif
 }
 #undef Dummy2LocPar
 #undef DummyDef
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/lp64gs/chkloc.c cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/lp64gs/chkloc.c
--- cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/lp64gs/chkloc.c	1970-01-01 00:00:00.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/lp64gs/chkloc.c	2007-12-14 21:41:27.000000000 +0000
@@ -0,0 +1,58 @@
+/*
+ *
+ * Revision 1.1.1.1  2006/06/14
+ * Kernlib  utility for locf, locb on LP64 architectures  H. Vogt
+ * (AMD64/Intel EM64T and IA64) 
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+/*>    ROUTINE LOCF
+  CERN PROGLIB# N100    LOCF            .VERSION KERNFOR  4.36  930602
+*/
+/*>    ROUTINE LOCB
+  CERN PROGLIB# N101    LOCB            .VERSION KERNFOR  4.36  930602
+*/
+
+unsigned int chkloc(iadr)
+   char *iadr;
+{
+  /* 64 bit architectures may exceed the 32 bit address space !               */
+
+  /* AMD64/Intel EM64T architectures have the dynamic segments above
+     0x80000000000 and the stack immediately below this whereas the text and
+     data segments are staring from 0x400000. The implementations address
+     space is limited to 0x00007fffffffffff.
+     Allocated memory with malloc/calloc is starting from the end of text and
+     data segments upwards.                                                   
+
+     IA64 architectures have the dynamic segments are above 0x2000000000000000,
+     the stack is above 0x8000000000000000, the data segments starts at 
+     0x6000000000000000 and the text segments start at 0x4000000000000000   
+     Allocated memory with malloc/calloc is starting from the end of
+     data segments upwards. All addresses here are expected to be in
+     the data segment area.                                                   */
+
+   const unsigned long mask=0xffffffff00000000;
+   static unsigned long limit=0x00000000ffffffff;
+   unsigned long jadr=((unsigned long) iadr & mask);
+#if !defined (__ia64__)
+    if ( jadr != 0x0000000000000000) {
+#else
+    if ( jadr != 0x6000000000000000) {
+#endif
+      fprintf(stderr, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
+      fprintf(stderr, "LOCB/LOCF: address %p exceeds the 32 bit address space\n", iadr);
+      fprintf(stderr, "or is not in the data segments\n");
+      fprintf(stderr, "This may result in program crash or incorrect results\n");
+      fprintf(stderr, "Therefore we will stop here\n");
+      fprintf(stderr, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
+      exit (999);
+    }
+    jadr=((unsigned long) iadr & limit);
+    return ((unsigned) jadr);
+}
+/*> END <----------------------------------------------------------*/
+
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/lp64gs/jumptn.c cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/lp64gs/jumptn.c
--- cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/lp64gs/jumptn.c	1970-01-01 00:00:00.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/lp64gs/jumptn.c	2007-12-14 21:41:27.000000000 +0000
@@ -0,0 +1,83 @@
+/*
+ * $Id: jumptn.c,v 1.1.1.1 1996/02/15 17:49:32 mclareni Exp $
+ *
+ * $Log: jumptn.c,v $
+ * Revision 1.1.1.1  1996/02/15 17:49:32  mclareni
+ * Kernlib
+ *
+ */
+/*>    ROUTINE JUMPTN
+  CERN PROGLIB# Z043    JUMPTN          .VERSION KERNLP64 1.00  060717
+  Copy of               JUMPTN          .VERSION KERNVMI  1.09  940531
+  ORIG. 21/04/88 JZ+FCA
+C
+C-    To transfer to the user routine TARGET (say) with 2 parameters
+C-    two steps are needed :
+
+C- 1) EXTERNAL TARGET              to get the address of TARGET
+C-    IADR = JUMPAD (TARGET)
+
+C- 3) CALL JUMPT2 (IADR,par1,par2)      to transfer
+*/
+#define jumpt0 jumpt0_
+#define jumpt1 jumpt1_
+#define jumpt2 jumpt2_
+#define jumpt3 jumpt3_
+#define jumpt4 jumpt4_
+
+extern int jumpad_();
+
+static void (*jumpto)();
+
+void jumpt0(iadr)
+     int *iadr;
+{
+    long func;
+    func = *iadr + (long)jumpad_;
+    jumpto = (void(*)()) func;
+    jumpto();
+    return;
+}
+
+void jumpt1(iadr,ipara)
+     int *iadr;
+     char *ipara;
+{
+    long func;
+    func = *iadr + (long)jumpad_;
+    jumpto = (void(*)()) func;
+    jumpto (ipara);
+    return;
+}
+
+void jumpt2(iadr, ipara, iparb)
+     int *iadr;
+     char *ipara, *iparb;
+{
+    long func;
+    func = *iadr + (long)jumpad_;
+    jumpto = (void(*)()) func;
+    jumpto (ipara, iparb);
+    return;
+}
+void jumpt3(iadr, ipara, iparb, iparc)
+     int *iadr;
+     char *ipara, *iparb, *iparc;
+{
+    long func;
+    func = *iadr + (long)jumpad_;
+    jumpto = (void(*)()) func;
+    jumpto (ipara, iparb, iparc);
+    return;
+}
+void jumpt4(iadr, ipara, iparb, iparc, ipard)
+     int *iadr;
+     char *ipara, *iparb, *iparc, *ipard;
+{
+    long func;
+    func = *iadr + (long)jumpad_;
+    jumpto = (void(*)()) func;
+    jumpto (ipara, iparb, iparc, ipard);
+    return;
+}
+/*> END <----------------------------------------------------------*/
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/lp64gs/jumpxn.c cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/lp64gs/jumpxn.c
--- cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/lp64gs/jumpxn.c	1970-01-01 00:00:00.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/lp64gs/jumpxn.c	2007-12-14 21:41:27.000000000 +0000
@@ -0,0 +1,92 @@
+/*
+ * $Id: jumpxn.c,v 1.1.1.1 1996/02/15 17:49:32 mclareni Exp $
+ *
+ * $Log: jumpxn.c,v $
+ * Revision 1.1.1.1  1996/02/15 17:49:32  mclareni
+ * Kernlib
+ *
+ */
+/*>    ROUTINE JUMPXN
+  CERN PROGLIB# Z043    JUMPXN          .VERSION KERNLP64 1.00  060717
+  Copy of               JUMPXN          .VERSION KERNVMI  1.08  930527
+  ORIG. 21/04/88 JZ+FCA, adapted 11/05/93 AP+JZ
+C
+C-    To transfer to the user routine TARGET (say) with 2 parameters
+C-    three steps are needed :
+C-    Check that relative jump addresses fits into 32 bits
+
+C- 1) EXTERNAL TARGET              to get the address of TARGET
+C-    IADR = JUMPAD (TARGET)
+
+C- 2) CALL JUMPST (IADR)           to set the tranfer address
+
+C- 3) CALL JUMPX2 (par1,par2)      to transfer
+*/
+
+#include "stdio.h"
+#include <stdlib.h>
+
+static void (*tarsub)();
+
+/* ----   jumpad   ---------------------------------------------  */
+int jumpad_(ifun)
+    char *ifun;
+{
+    long temp;
+
+    temp = (long)ifun - (long)jumpad_;
+    if (labs(temp) > 0x3fffffff) {
+      printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
+      printf("JUMPAD: address %p exceeds the 32 bit address space\n", temp);
+      printf("This may result in program crash or incorrect results\n");
+      printf("Therefore we will stop here\n");
+      printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
+      exit (999);
+    }
+    return (int) temp;
+}
+
+/* ----   jumpst   ---------------------------------------------  */
+void jumpst_(iadr)
+    int  *iadr;
+{
+    long true;
+
+    true = (long)jumpad_;
+    true = true + *iadr;
+    tarsub = (void (*)())true;
+}
+
+/* ----   jumpxn   ---------------------------------------------  */
+void jumpx0_()
+{
+    (*tarsub)();
+    return;
+}
+
+void jumpx1_(ipara)
+    char *ipara;
+{
+    (*tarsub)(ipara);
+    return;
+}
+
+void jumpx2_(ipara, iparb)
+    char *ipara, *iparb;
+{
+    (*tarsub)(ipara, iparb);
+    return;
+}
+void jumpx3_(ipara, iparb, iparc)
+    char *ipara, *iparb, *iparc;
+{
+    (*tarsub)(ipara, iparb, iparc);
+    return;
+}
+void jumpx4_(ipara, iparb, iparc, ipard)
+    char *ipara, *iparb, *iparc, *ipard;
+{
+    (*tarsub)(ipara, iparb, iparc, ipard);
+    return;
+}
+/*> END <----------------------------------------------------------*/
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/lp64gs/locb.c cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/lp64gs/locb.c
--- cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/lp64gs/locb.c	1970-01-01 00:00:00.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/lp64gs/locb.c	2007-12-14 21:52:38.000000000 +0000
@@ -0,0 +1,37 @@
+/*>    ROUTINE LOCB
+  CERN PROGLIB# N101    LOCB            .VERSION KERNFOR  4.36  930602
+*/
+
+unsigned int chkloc(char *address);
+
+unsigned int locb_(iadr)
+   char *iadr;
+{
+   return (chkloc(iadr));
+}
+
+#include <stdint.h>    /* for ptrdiff_t, size_t */
+#include <stdio.h>     /* for fprintf */
+#include <stdlib.h>    /* for exit    */
+
+int iptrdiff_(iadr1, iadr2)
+   char * iadr1, * iadr2;
+{
+  long diff = (long)iadr1 - (long)iadr2;
+  if (diff < (long)INT32_MIN || diff > (long)INT32_MAX) {
+      fprintf(stderr, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
+      fprintf(stderr, "IPTRDIFF: difference of addresses %p and %p\n", iadr1, iadr2);
+      fprintf(stderr, "cannot be stored in 32-bit signed integer!\n");
+      fprintf(stderr, "This may result in program crash or incorrect results\n");
+      fprintf(stderr, "Therefore we will stop here\n");
+      fprintf(stderr, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
+      exit (999);
+  }
+  else return (int)diff;
+}
+
+int iptrsame_(iadr1, iadr2)
+   char * iadr1, * iadr2;
+{
+  return (size_t)iadr1 == (size_t)iadr2 ? 1 : 0;
+}
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/lp64gs/locf.c cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/lp64gs/locf.c
--- cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/lp64gs/locf.c	1970-01-01 00:00:00.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/lp64gs/locf.c	2007-12-14 21:41:27.000000000 +0000
@@ -0,0 +1,10 @@
+/*>    ROUTINE LOCF
+  CERN PROGLIB# N100    LOCF            .VERSION KERNFOR  4.36  930602
+*/
+unsigned int chkloc(char *address);
+
+unsigned int locf_(iadr)
+   char *iadr;
+{
+   return ( (chkloc(iadr)) >> 2 );
+}
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/signalf.c cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/signalf.c
--- cernlib-2006.dfsg.2~/src/packlib/kernlib/kerngen/ccgen/signalf.c	1999-10-06 14:17:01.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kernlib/kerngen/ccgen/signalf.c	2007-12-14 21:41:27.000000000 +0000
@@ -45,6 +45,7 @@
 C-        function value = adr of previous handler
 */
 #include <signal.h>
+typedef void (*sighandler_t)(int);
 #if defined(CERNLIB_QX_SC)
 int type_of_call signalf_(signum,funct,flag)
 #endif
@@ -58,7 +59,7 @@
       int  *funct;
 {
       int  signo, istat;
-      int  handler;
+      sighandler_t handler;
       void *oldhand;
 
       signo = *signum;
@@ -67,14 +68,15 @@
       if (*flag < 0)          handler = *funct;
 #endif
 #if !defined(CERNLIB_QCCINDAD)
-      if (*flag < 0)          handler = (int)funct;
+      if (*flag < 0)          handler = (sighandler_t)funct;
 #endif
-        else if (*flag == 0)  handler = (int)SIG_DFL;
-        else if (*flag == 1)  handler = (int)SIG_IGN;
-        else                  handler = *flag;
+        else if (*flag == 0)  handler = (sighandler_t)SIG_DFL;
+        else if (*flag == 1)  handler = (sighandler_t)SIG_IGN;
+        else                  handler = (sighandler_t)(long)*flag;
 
       oldhand = signal(signo,handler);
-      istat   = (int)oldhand;
+      unsigned long myistat = (unsigned long)oldhand;
+      istat   = (int)myistat;
 #ifndef __GNUC__
       if (oldhand == SIG_ERR)  istat = -1;
 #endif
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kuip/code_kuip/kkern.c cernlib-2006.dfsg.2/src/packlib/kuip/code_kuip/kkern.c
--- cernlib-2006.dfsg.2~/src/packlib/kuip/code_kuip/kkern.c	1996-05-01 12:08:38.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kuip/code_kuip/kkern.c	2007-12-14 21:41:27.000000000 +0000
@@ -39,7 +39,8 @@
   if( len >= (sizeof blanks) * 4 ) {
 
     /* check single characters until next word boundary */
-    switch( (int)&str[len] & ( (sizeof blanks) - 1 ) ) {
+    /* use type long here to be conform with 64 bit architectures*/
+    switch( (long)&str[len] & ( (sizeof blanks) - 1 ) ) {
     case 7:
       if( str[--len] != ' ' ) return len + 1;
     case 6:
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kuip/code_motif/kmbrow.c cernlib-2006.dfsg.2/src/packlib/kuip/code_motif/kmbrow.c
--- cernlib-2006.dfsg.2~/src/packlib/kuip/code_motif/kmbrow.c	1996-03-08 15:33:08.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kuip/code_motif/kmbrow.c	2007-12-14 21:41:27.000000000 +0000
@@ -278,7 +278,7 @@
    char         *path, *title;
    char          cval[MAX_string], cval1[MAX_string];
    int           i, fitem, fcnt, dcnt, icon_type;
-   int           browser_count = 0;
+   long          browser_count = 0;
 
    BrObject *brobj;
 
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kuip/code_motif/kuxxt.c cernlib-2006.dfsg.2/src/packlib/kuip/code_motif/kuxxt.c
--- cernlib-2006.dfsg.2~/src/packlib/kuip/code_motif/kuxxt.c	1996-03-08 15:33:11.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kuip/code_motif/kuxxt.c	2007-12-14 21:41:27.000000000 +0000
@@ -340,7 +340,7 @@
 {
         (void) XDeleteContext( XtDisplay( UxTopLevel ),
                                (Window) wgt,
-                               (XContext) client_data );
+                               (XContext) (long)client_data );
 }
 
 /******************************************************************************
@@ -385,7 +385,7 @@
                 return ( UX_ERROR );
 
         XtAddCallback (wgt, XmNdestroyCallback,
-                        UxDeleteContextCB, (XtPointer) xcontext_id);
+                        UxDeleteContextCB, (XtPointer) (long)xcontext_id);
 
         return ( UX_NO_ERROR );
 }
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kuip/code_motif/mkdcmp.c cernlib-2006.dfsg.2/src/packlib/kuip/code_motif/mkdcmp.c
--- cernlib-2006.dfsg.2~/src/packlib/kuip/code_motif/mkdcmp.c	1996-03-15 15:54:00.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kuip/code_motif/mkdcmp.c	2007-12-14 21:41:27.000000000 +0000
@@ -1541,7 +1541,11 @@
 
    Widget cpanel = stag->command_panel;
    KmCommand *cmd = stag->cmd;
-   int ipar = stag->index;
+   /* for 64 bit compatibility take long here
+    * int ipar = stag->index;
+    */
+   long ipar = stag->index;
+
    KmParameter *par   = cmd->par[ipar];
    KmParFile   *pfil  = par->ptype;
 
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kuip/code_motif/mkdgra.c cernlib-2006.dfsg.2/src/packlib/kuip/code_motif/mkdgra.c
--- cernlib-2006.dfsg.2~/src/packlib/kuip/code_motif/mkdgra.c	1996-03-08 15:33:07.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kuip/code_motif/mkdgra.c	2007-12-14 21:41:27.000000000 +0000
@@ -289,11 +289,12 @@
    km_graph_init_callbacks (km_graphicsDraw, graph_widget, wkid, 0);
 }
 
-void km_graph_init_callbacks (draw, graph_widget, wkid, flag)
+void km_graph_init_callbacks (draw, graph_widget, mywkid, flag)
      Widget draw, graph_widget;
-     int wkid, flag;
+     int mywkid, flag;
 {
    /* Add drawing area expose and resize callbacks */
+   long wkid = mywkid;
    if (flag == 0) {
        XtAddCallback(draw, XmNexposeCallback,
                      (XtCallbackProc)drawing_area_callback, graph_widget);
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kuip/code_motif/mkuip.c cernlib-2006.dfsg.2/src/packlib/kuip/code_motif/mkuip.c
--- cernlib-2006.dfsg.2~/src/packlib/kuip/code_motif/mkuip.c	2007-12-14 21:41:17.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kuip/code_motif/mkuip.c	2007-12-14 21:41:27.000000000 +0000
@@ -1687,7 +1687,7 @@
             XmStringFree(xmstr);
        } /* end for ... */
        XtAddCallback (km_listSBox,XmNokCallback,
-                      (XtCallbackProc)kuipList_OK, (XtPointer)flag);
+                      (XtCallbackProc)kuipList_OK, (XtPointer) (long)flag);
        XtAddCallback (km_listSBox,XmNcancelCallback,
                       (XtCallbackProc)destroy_list_id, NULL);
        XtAddCallback (km_listSBox,XmNhelpCallback,
@@ -1914,7 +1914,7 @@
             PdMenu = XmCreatePushButtonGadget
                          (kuipControlShellM,appShell_title[i],arglist,0);
             XtAddCallback(PdMenu,XmNactivateCallback,
-                          (XtCallbackProc)appShell_activate, (XtPointer)i);
+                          (XtCallbackProc)appShell_activate, (XtPointer) (long)i);
             XtManageChild(PdMenu);
             break;
          } /* end ... if (appShell[i] == NULL) */
@@ -1972,7 +1972,7 @@
            PdMenu = XmCreatePushButtonGadget
                         (kuipControlShellM,appShell_title[i],arglist,0);
            XtAddCallback (PdMenu,XmNactivateCallback,
-                          (XtCallbackProc)appShell_activate, (XtPointer)i);
+                          (XtCallbackProc)appShell_activate, (XtPointer) (long)i);
            XtManageChild(PdMenu);
         }
     }
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kuip/programs/kxterm/help.c cernlib-2006.dfsg.2/src/packlib/kuip/programs/kxterm/help.c
--- cernlib-2006.dfsg.2~/src/packlib/kuip/programs/kxterm/help.c	1996-03-08 15:33:04.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kuip/programs/kxterm/help.c	2007-12-14 21:41:27.000000000 +0000
@@ -309,7 +309,7 @@
     int     *type;
     XmAnyCallbackStruct *call_data;
 {
-   int t = (int)type;
+   long t = (long)type;
 
    if (help[t])
       XRaiseWindow(XtDisplay(help[t]), XtWindow(help[t]));
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kuip/programs/kxterm/kxterm.c cernlib-2006.dfsg.2/src/packlib/kuip/programs/kxterm/kxterm.c
--- cernlib-2006.dfsg.2~/src/packlib/kuip/programs/kxterm/kxterm.c	2005-04-18 15:40:49.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kuip/programs/kxterm/kxterm.c	2007-12-14 21:41:27.000000000 +0000
@@ -1533,7 +1533,7 @@
      XtPointer cbs;
 {
    Widget  text_w;
-   int     i = (int) item;
+   unsigned long i = (unsigned long) item;
    Boolean result = True;
 
    text_w = get_selection_owner(widget);
diff -urNad cernlib-2006.dfsg.2~/src/packlib/kuip/programs/kxterm/uxxt.c cernlib-2006.dfsg.2/src/packlib/kuip/programs/kxterm/uxxt.c
--- cernlib-2006.dfsg.2~/src/packlib/kuip/programs/kxterm/uxxt.c	1996-03-08 15:33:04.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/kuip/programs/kxterm/uxxt.c	2007-12-14 21:41:27.000000000 +0000
@@ -340,7 +340,7 @@
 {
         (void) XDeleteContext( XtDisplay( UxTopLevel ),
                                (Window) wgt,
-                               (XContext) client_data );
+                               (XContext) (long)client_data );
 }
 
 /******************************************************************************
@@ -385,7 +385,7 @@
                 return ( UX_ERROR );
 
         XtAddCallback (wgt, XmNdestroyCallback,
-                        UxDeleteContextCB, (XtPointer) xcontext_id);
+                        UxDeleteContextCB, (XtPointer) (long)xcontext_id);
 
         return ( UX_NO_ERROR );
 }
diff -urNad cernlib-2006.dfsg.2~/src/packlib/zbook/code/zerror.F cernlib-2006.dfsg.2/src/packlib/zbook/code/zerror.F
--- cernlib-2006.dfsg.2~/src/packlib/zbook/code/zerror.F	1996-03-08 12:01:12.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/zbook/code/zerror.F	2007-12-14 21:41:27.000000000 +0000
@@ -16,6 +16,10 @@
 C     ******************************************************************
 C
       DIMENSION IZ(1),KEY(1),LAB(6),ID(1)
+#if defined(CERNLIB_QMLXIA64)
+      INTEGER*8 JUMPADR
+#endif
+
 C
 C     ------------------------------------------------------------------
 C
@@ -24,7 +28,7 @@
       NEWERR = IERR
       JZ     = IZ(1)
       IF(IZ(JZ+19).EQ.0) CALL ZUSER(IZ,NEWERR,KEY,ID)
-#if (defined(CERNLIB_SINGLE)||defined(CERNLIB_DOUBLE)||defined(CERNLIB_UNIVAC)||defined(CERNLIB_PDP10))&&(!defined(CERNLIB_VAX))&&(!defined(CERNLIB_BESM6))
+#if (defined(CERNLIB_SINGLE)||defined(CERNLIB_DOUBLE)||defined(CERNLIB_UNIVAC)||defined(CERNLIB_PDP10))&&(!defined(CERNLIB_VAX))&&(!defined(CERNLIB_BESM6))&&(!defined(CERNLIB_QMLXIA64))
       IF(IZ(JZ+19).NE.0) CALL ZJUMP(IZ(JZ+19),IZ,NEWERR,KEY,ID)
 #endif
 #if defined(CERNLIB_VAX)
@@ -33,6 +37,13 @@
 #if defined(CERNLIB_BESM6)
       IF(IZ(JZ+19).NE.0) CALL ZJUMP(IZ,NEWERR,KEY,ID,IZ(JZ+19))
 #endif
+#if defined(CERNLIB_QMLXIA64)
+      IF(IZ(JZ+19).NE.0)  THEN
+        JUMPADR = IZ(JZ+19)
+          print '(a,z17)','JUMPADR is:', JUMPADR
+        CALL JUMPT4(JUMPADR,IZ,NEWERR,KEY,ID)
+      END IF
+#endif
 C
       IF (NEWERR.LE.0)RETURN
 C
diff -urNad cernlib-2006.dfsg.2~/src/packlib/zbook/code/zjump.c cernlib-2006.dfsg.2/src/packlib/zbook/code/zjump.c
--- cernlib-2006.dfsg.2~/src/packlib/zbook/code/zjump.c	1996-03-08 12:01:12.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/zbook/code/zjump.c	2007-12-14 21:41:27.000000000 +0000
@@ -7,6 +7,9 @@
  *
  */
 #include "zbook/pilot_c.h"
+#if defined(CERNLIB_QMLXIA64)
+static void (*target)();
+#endif
 #if defined(CERNLIB_UNIX)
 #if defined(CERNLIB_QX_SC)
 zjump_(name,p1,p2,p3,p4)
@@ -18,8 +21,23 @@
 ZJUMP(name,p1,p2,p3,p4)
 #endif
 char *p1, *p2, *p3, *p4;
+
+/*  LP64 compatibility:
+    name is taken from a Fortran array and therefore its address is 32 bit
+    which has to be converted to a 64 bit address to satisfy void (*) (H. Vogt) */
+
+#if defined(CERNLIB_QMLXIA64)
+int *name;
+{
+  long jadr;
+  jadr   = *name;  /* convert int to long */
+  target = (void (*)())jadr;
+  (*target)(p1, p2, p3, p4);
+}
+#else
 void (**name)();
 {
    (**name)(p1, p2, p3, p4);
 }
 #endif
+#endif
diff -urNad cernlib-2006.dfsg.2~/src/packlib/zbook/code/ztrap.F cernlib-2006.dfsg.2/src/packlib/zbook/code/ztrap.F
--- cernlib-2006.dfsg.2~/src/packlib/zbook/code/ztrap.F	1996-03-08 12:01:13.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/zbook/code/ztrap.F	2007-12-14 21:41:27.000000000 +0000
@@ -48,8 +48,10 @@
 #if defined(CERNLIB_BESM6)
       IZ(JZ+19) = LOCF(IUSER)
 #endif
-#if defined(CERNLIB_UNIX)
+#if defined(CERNLIB_UNIX) && !defined(CERNLIB_QMLXIA64)
       IZ(JZ+19) = LOCB(IUSER)
+#else
+      IZ(JZ+19) = JUMPAD(IUSER)
 #endif
       END
 #endif
diff -urNad cernlib-2006.dfsg.2~/src/packlib/zebra/test/brztest/btest2.F cernlib-2006.dfsg.2/src/packlib/zebra/test/brztest/btest2.F
--- cernlib-2006.dfsg.2~/src/packlib/zebra/test/brztest/btest2.F	1997-09-02 15:16:16.000000000 +0000
+++ cernlib-2006.dfsg.2/src/packlib/zebra/test/brztest/btest2.F	2007-12-14 21:41:27.000000000 +0000
@@ -29,6 +29,15 @@
 ********************************************************************************
 *
       COMMON/CRZT/IXSTOR,IXDIV,IFENCE(2),LEV,LEVIN,BLVECT(30000)
+
+*     LP64 compatibility:
+*     For 64-bit pointer systems put local variables referenced by LOCF
+*     in a dummy named common block to keep addresses in the program region.
+*     see also: packlib/ffread/test/main.F (H. Vogt)
+
+#if defined(CERNLIB_QMLXIA64)
+      COMMON /TEST64/LBANK
+#endif
       DIMENSION LQ(999),IQ(999),Q(999)
       EQUIVALENCE (IQ(1),Q(1),LQ(9)),(LQ(1),LEV)
 C