Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

cfopei.c

Go to the documentation of this file.
00001 /*
00002  * $Id: cfopei.c,v 1.2 2009/02/16 08:04:35 schubert Exp $
00003  *
00004  * Revision 1.1.1.1  2002/07/24 15:56:27  rdm
00005  * initial import into CVS
00006  *
00007  * Revision 1.1.1.1  2002/06/16 15:18:46  hristov
00008  * Separate distribution  of Geant3
00009  *
00010  * Revision 1.1.1.1  1999/05/18 15:55:29  fca
00011  * AliRoot sources
00012  *
00013  * Revision 1.4  1997/09/02 14:26:46  mclareni
00014  * WINNT correction
00015  *
00016  * Revision 1.3  1997/02/04 17:35:11  mclareni
00017  * Merge Winnt and 97a versions
00018  *
00019  * Revision 1.2  1997/01/15 16:25:32  cernlib
00020  * fix from F.Hemmer to return rfio return code
00021  *
00022  * Revision 1.1.1.1.2.1  1997/01/21 11:30:10  mclareni
00023  * All mods for Winnt 96a on winnt branch
00024  *
00025  * Revision 1.1.1.1  1996/02/15 17:49:36  mclareni
00026  * Kernlib
00027  *
00028  */
00029 #include "kerngen/pilot.h"
00030 #include "kerngen/fortranc.h"
00031 #include <stdio.h>
00032 #include <stdlib.h>
00033 
00034 #if defined(CERNLIB_QMOS9)
00035 #include "os9gs/cfopei.c"
00036 #else
00037 /*>    ROUTINE CFOPEI
00038   CERN PROGLIB# Z310    CFOPEI          .VERSION KERNFOR  4.38  931108
00039   ORIG. 12/01/91, JZ
00040       CALL CFOPEN (LUNDES, MEDIUM, NWREC, MODE, NBUF, TEXT, ISTAT)
00041       open a file :
00042       *LUNDES  file descriptor
00043        MEDIUM  = 0,1,2,3 : primary disk/tape, secondary disk/tape
00044        NWREC   record length in number of words
00045        MODE    string selecting IO mode
00046                = 'r ', 'w ', 'a ', 'r+ ', ...
00047        NBUF    number of buffers to be allocated, (not used)
00048        TEXT    name of the file
00049       *ISTAT   status, =zero if success
00050 */
00051 #include "kerngen/cf_open.h"
00052 #include <errno.h>
00053 #include "kerngen/cf_xaft.h"
00054 #include "kerngen/fortchar.h"
00055 #include "kerngen/wordsizc.h"
00056       int cfopen_perm = 0;
00057 #if defined(CERNLIB_QX_SC)
00058 void type_of_call cfopei_(lundes,medium,nwrec,mode,nbuf,ftext,stat,lgtx)
00059 #endif
00060 #if defined(CERNLIB_QXNO_SC)
00061 void type_of_call cfopei(lundes,medium,nwrec,mode,nbuf,ftext,stat,lgtx)
00062 #endif
00063 #if defined(CERNLIB_QXCAPT)
00064 # ifndef CERNLIB_MSSTDCALL
00065     void type_of_call CFOPEI(lundes,medium,nwrec,mode,nbuf,ftext,stat,lgtx)
00066 # else
00067     void type_of_call CFOPEI(lundes,medium,nwrec,mode,nbuf,ftext,len_ftext,stat,lgtx)
00068     int len_ftext;
00069 # endif
00070 #endif
00071 #if defined(CERNLIB_QMCRY)
00072       _fcd  ftext;
00073 #endif
00074 #if !defined(CERNLIB_QMCRY)
00075       char *ftext;
00076 #endif
00077       int  *lundes, *medium, *nwrec, *nbuf, *stat, *lgtx;
00078       int  *mode;
00079 {
00080       char *pttext, *fchtak();
00081       int  flags;
00082       int  fildes;
00083       int  perm;
00084 
00085       *lundes = 0;
00086       *stat   = -1;
00087 
00088       perm = cfopen_perm;
00089       cfopen_perm = 0;
00090 
00091 /*        construct flags :
00092             mode[0] =    0 r    1 w    2 a
00093             mode[1] =    1 +
00094 */
00095 /*        flags for disk     */
00096 
00097       if (*medium == 1)            goto fltp;
00098       if (*medium == 3)            goto fltp;
00099 
00100       if (mode[0] == 0)
00101         {if (mode[1] == 0)
00102           flags = O_RDONLY;
00103         else
00104           flags = O_RDWR;}
00105 
00106       else if (mode[0] == 1)
00107         {if (mode[1] == 0)
00108           flags = O_WRONLY | O_CREAT | O_TRUNC;
00109         else
00110           flags = O_RDWR | O_CREAT | O_TRUNC;}
00111 
00112       else if (mode[0] == 2)
00113         {if (mode[1] == 0)
00114           flags = O_WRONLY | O_CREAT | O_APPEND;
00115         else
00116           flags = O_RDWR | O_CREAT | O_APPEND;}
00117       goto act;
00118 
00119 /*        flags for tape     */
00120 
00121 fltp: if (mode[0] == 0)
00122         {if (mode[1] == 0)
00123           flags = O_RDONLY;
00124         else
00125           flags = O_RDWR;}
00126 
00127       else if (mode[0] == 1)
00128         {if (mode[1] == 0)
00129           flags = O_WRONLY;
00130         else
00131           flags = O_RDWR;}
00132 
00133       else if (mode[0] == 2)       return;
00134 
00135 /*        open the file      */
00136 
00137 act:  pttext = fchtak(ftext,*lgtx);
00138       if (pttext == 0)             return;
00139 
00140       if (perm == 0)   perm = 0644;
00141 
00142 #if defined(CERNLIB_QMDOS) || defined(CERNLIB_WINNT)
00143       fildes = open (pttext, flags | O_BINARY, perm);
00144 #else
00145       fildes = open (pttext, flags, perm);
00146 #endif
00147       if (fildes < 0)              goto errm;
00148       *lundes = fildes;
00149       *stat   = 0;
00150       goto done;
00151 
00152 #if defined(CERNLIB_PROJSHIFT)
00153 errm: *stat = (serrno ? serrno : (rfio_errno ? rfio_errno : errno));
00154 #else
00155 errm: *stat = errno;
00156 #endif
00157       perror (" error in CFOPEN");
00158 
00159 done: free(pttext);
00160       return;
00161 }
00162 /*> END <----------------------------------------------------------*/
00163 #endif

Generated on Mon Nov 23 05:26:25 2009 for loon by  doxygen 1.3.9.1