summaryrefslogtreecommitdiff
path: root/Ganlib/src/DRVADD.f
blob: 79b652379f638af83bb978c5cbafdac99d1fe3df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
*DECK DRVADD
      SUBROUTINE DRVADD(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
*
*-----------------------------------------------------------------------
*
* STANDARD ADDITION MODULE.
*
* INPUT/OUTPUT PARAMETERS:
*  NENTRY : NUMBER OF LINKED LISTS AND FILES USED BY THE MODULE.
*  HENTRY : CHARACTER*12 NAME OF EACH LINKED LIST OR FILE.
*  IENTRY : =0 CLE-2000 VARIABLE; =1 LINKED LIST; =2 XSM FILE;
*           =3 SEQUENTIAL BINARY FILE; =4 SEQUENTIAL ASCII FILE.
*  JENTRY : =0 THE LINKED LIST OR FILE IS CREATED.
*           =1 THE LINKED LIST OR FILE IS OPEN FOR MODIFICATIONS;
*           =2 THE LINKED LIST OR FILE IS OPEN IN READ-ONLY MODE.
*  KENTRY : =FILE UNIT NUMBER; =LINKED LIST ADDRESS OTHERWISE.
*           DIMENSION HENTRY(NENTRY),IENTRY(NENTRY),JENTRY(NENTRY),
*           KENTRY(NENTRY)
*
*-------------------------------------- AUTHOR: A. HEBERT ; 21/12/93 ---
*
      USE GANLIB
*----
*  SUBROUTINE ARGUMENTS
*----
      INTEGER NENTRY,IENTRY(NENTRY),JENTRY(NENTRY)
      CHARACTER HENTRY(NENTRY)*12
      TYPE(C_PTR) KENTRY(NENTRY)
*----
*  LOCAL VARIABLES
*----
      CHARACTER HSMG*131,TEXT12*12
      TYPE(C_PTR) IPLIST1,IPLIST2
*----
*  PARAMETER VALIDATION.
*----
      IF(NENTRY.LE.1) CALL XABORT('DRVADD: TWO PARAMETERS EXPECTED.')
      TEXT12=HENTRY(1)
      IF((JENTRY(1).EQ.2).OR.(IENTRY(1).GT.2)) CALL XABORT('DRVADD: LIN'
     1 //'KED LIST OR XSM FILE IN CREATION OR MODIFICATION MODE EXPECTE'
     2 //'D AT LHS ('//TEXT12//').')
      IF((JENTRY(2).NE.2).OR.(IENTRY(2).GT.2)) CALL XABORT('DRVADD: LIN'
     1 //'KED LIST OR XSM FILE IN READ-ONLY MODE EXPECTED AT RHS.')
*----
*  COPY THE SECOND RHS INTO THE LHS.
*----
      IF(JENTRY(1).EQ.0) THEN
         IF(NENTRY.LE.2) CALL XABORT('DRVADD: 3 PARAMETERS EXPECTED.')
         IF((JENTRY(3).NE.2).OR.(IENTRY(3).GT.2)) CALL XABORT('DRVADD: '
     1   //'LINKED LIST OR XSM FILE IN READ-ONLY MODE EXPECTED AT SECON'
     2   //'D RHS.')
         NUNIT=KDROPN('DUMMYSQ',0,2,0)
         IF(NUNIT.LE.0) CALL XABORT('DRVADD: KDROPN FAILURE.')
         CALL LCMEXP(KENTRY(3),0,NUNIT,1,1)
         REWIND(NUNIT)
         CALL LCMEXP(KENTRY(1),0,NUNIT,1,2)
         IERR=KDRCLS(NUNIT,2)
         IF(IERR.LT.0) THEN
            WRITE(HSMG,'(29HDRVADD: KDRCLS FAILURE. IERR=,I3)') IERR
            CALL XABORT(HSMG)
         ENDIF
      ENDIF
*----
*  PERFORM THE ADDITION.
*----
      IPLIST1=KENTRY(1)
      IPLIST2=KENTRY(2)
      CALL LCMADD(IPLIST2,IPLIST1)
      RETURN
      END