Localization (fileio)
[scilab.git] / scilab / modules / fileio / src / c / mseek.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2007 - INRIA
4  * ...
5  * 
6  * This file must be used under the terms of the CeCILL.
7  * This source file is licensed as described in the file COPYING, which
8  * you should have received as part of this distribution.  The terms
9  * are also available at    
10  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11  *
12  */
13 /*--------------------------------------------------------------------------*/
14 #include <string.h>
15 #include <stdio.h>
16 #include <errno.h>
17 #include "mseek.h"
18 #include "filesmanagement.h"
19 #include "sciprint.h"
20 #include "localization.h"
21 #include "machine.h"
22 /*--------------------------------------------------------------------------*/
23 #if (defined(sun) && !defined(SYSV)) 
24 char *strerror (int errcode);
25 #endif
26 /*--------------------------------------------------------------------------*/
27 #if (defined(sun) && !defined(SYSV)) || defined(sgi)
28 #define SEEK_SET 0
29 #define SEEK_CUR 1
30 #define SEEK_END 2
31 #endif 
32 /*--------------------------------------------------------------------------*/
33 void C2F(mseek) (integer *fd, integer *offset, char *flag, integer *err)
34 {     
35         int iflag;
36 #if (defined(sun) && !defined(SYSV)) || defined(sgi)
37         int irep;
38 #endif
39         FILE *fa= GetFileOpenedInScilab(*fd);
40         *err=0;
41         if ( fa == (FILE *) 0 ) 
42         {
43                 sciprint(_("%s: Error while opening, reading or writing '%s'.\n"),"mseek",GetFileNameOpenedInScilab(*fd));
44                 *err=1;
45                 return;
46         }
47         if ( strncmp(flag,"set",3)==0 ) 
48                 iflag = SEEK_SET;
49         else if ( strncmp(flag,"cur",3)==0 ) 
50                 iflag = SEEK_CUR;
51         else if ( strncmp(flag,"end",3)==0 ) 
52                 iflag = SEEK_END;
53         else 
54         {
55                 sciprint(_("%s: Wrong value for input argument #%d: '%s', '%s' or '%s' expected.\n"),"mseek",3,"set","cur","end");
56                 *err=1;
57                 return;
58         }
59 #if (defined(sun) && !defined(SYSV)) || defined(sgi)
60         irep = fseek(fa,(long) *offset,iflag) ;
61         if ( irep != 0 ) 
62         {
63                 sciprint(strerror(irep));
64                 *err=1;
65         }
66         else
67                 *err=0;
68 #else
69         if (fseek(fa,(long) *offset,iflag) == -1 ) 
70         {
71                 int errnum=errno; /* global variable produced by fseek */
72                 sciprint(_("%s: An error occurred in %s: errno=%s\n"),"mseek","fseek",strerror(errnum));
73                 *err=1;
74         }
75         else 
76                 *err=0;
77 #endif
78 }
79 /*--------------------------------------------------------------------------*/