5 * Revision 1.1.1.1 1996/02/15 17:49:29 mclareni
9 INTEGER FUNCTION CHDIRF (CHNAME)
11 C CERN PROGLIB# Z265 CHDIRF .VERSION KERNVAX 2.36 910306
12 C ORIG. 31/07/90, Federico Carminati
13 C MODIF. 25/02/91, Jamie Shiers, to work in detached mode
15 C- Simulate UNIX system call
21 INTEGER*2 BUFFER_LENGTH
23 INTEGER*4 BUFFER_ADDRESS
24 INTEGER*4 RETURN_LENGTH_ADDRESS
27 INTEGER*4 END_LIST /0/
32 RECORD /ITMLST/ LNM_LIST(2)
34 COMMON /SLATE/ ISTAT, ISLATE(39)
36 CHARACTER CHNAME*(*), CHSTRI*255, CHLOGN*127
39 INTEGER LIST4(4), SYS$SETDDIR, SYS$TRNLNM, SYS$CRELNM
40 EQUIVALENCE (LIST2, LIST4)
45 LENCHN=INDEX(CHNAME,' ')-1
46 IF (LENCHN.LE.0) LENCHN=LEN(CHNAME)
48 * Cater for users who like the <> characters as directory delimiters
50 CALL CTRANS('<','[',CHSTRI,1,LENCHN)
51 CALL CTRANS('>',']',CHSTRI,1,LENCHN)
52 10 IF (CHSTRI(1:1).NE.'[') THEN
53 IF (INDEX(CHSTRI,':[') .NE. 0) THEN
55 *--- A directory and a device are specified
57 * ISTAT=LIB$SET_LOGICAL('SYS$DISK',CHSTRI(1:INDEX(CHSTRI,':')),
60 LNM_LIST(1).BUFFER_LENGTH = INDEX(CHSTRI,':')
61 LNM_LIST(1).ITEM_CODE = LNM$_STRING
62 LNM_LIST(1).BUFFER_ADDRESS = %LOC(CHSTRI)
63 LNM_LIST(1).RETURN_LENGTH_ADDRESS = %LOC(LENRET)
65 LNM_LIST(2).END_LIST = 0
67 ISTAT=SYS$CRELNM(,'LNM$PROCESS','SYS$DISK',,LNM_LIST)
68 IF(.NOT.ISTAT) GO TO 20
69 CHSTRI=CHSTRI(INDEX(CHSTRI,'['):)
70 ELSEIF (CHSTRI(LENCHN:LENCHN).EQ.':') THEN
72 *--- A device only is specified
74 * ISTAT=LIB$SET_LOGICAL('SYS$DISK',CHSTRI(:LENCHN),
77 LNM_LIST(1).BUFFER_LENGTH = LENCHN
78 LNM_LIST(1).ITEM_CODE = LNM$_STRING
79 LNM_LIST(1).BUFFER_ADDRESS = %LOC(CHSTRI)
80 LNM_LIST(1).RETURN_LENGTH_ADDRESS = %LOC(LENRET)
82 LNM_LIST(2).END_LIST = 0
84 ISTAT=SYS$CRELNM(,'LNM$PROCESS','SYS$DISK',,LNM_LIST)
93 ISTAT = SYS$TRNLNM(LNM$M_CASE_BLIND,'LNM$FILE_DEV',
94 + CHSTRI(1:INDEX(CHSTRI,' ')-1),,LIST2)
95 IF(.NOT.ISTAT) GO TO 20
103 ISTAT = SYS$SETDDIR(CHSTRI, %VAL(0), %VAL(0))