Visual Servoing Platform  version 3.6.1 under development (2024-12-06)
vpMyio.cpp
1 /****************************************************************************
2  *
3  * ViSP, open source Visual Servoing Platform software.
4  * Copyright (C) 2005 - 2023 by Inria. All rights reserved.
5  *
6  * This software is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  * See the file LICENSE.txt at the root directory of this source
11  * distribution for additional information about the GNU GPL.
12  *
13  * For using ViSP with software that can not be combined with the GNU
14  * GPL, please contact Inria about acquiring a ViSP Professional
15  * Edition License.
16  *
17  * See https://visp.inria.fr for more information.
18  *
19  * This software was developed at:
20  * Inria Rennes - Bretagne Atlantique
21  * Campus Universitaire de Beaulieu
22  * 35042 Rennes Cedex
23  * France
24  *
25  * If you have questions regarding the use of this file, please contact
26  * Inria at visp@inria.fr
27  *
28  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
29  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
30  *
31  * Description:
32  * Le module "myio.c" contient les procedures d'entree/sortie
33  * des types definis dans le module "my.h".
34  * Les entrees non specifiees sont effectuees
35  * sur le fichier "source" du module "lex.c".
36  * Pour les mots cles des "fprintf_..." voir "token.c".
37  *
38  * Authors:
39  * Jean-Luc CORRE
40  *
41 *****************************************************************************/
42 
43 #include "vpMyio.h"
44 #include "vpLex.h"
45 #include "vpToken.h"
46 
47 #include <stdio.h>
48 #include <stdlib.h>
49 #include <string.h>
50 
51 #ifndef DOXYGEN_SHOULD_SKIP_THIS
52 
53 extern char *mytext; /* chaine du symbole courant */
54 
55 BEGIN_VISP_NAMESPACE
56 /*
57  * La procedure "fscanf_float" lit en ascii un nombre flottant.
58  * Entree :
59  * fp Nombre flottant a lire.
60  */
61 void fscanf_float(float *fp)
62 {
63  int t;
64 
65  if ((t = lex()) != T_FLOAT && t != T_INT)
66  lexerr("start", "float expected", NULL);
67  *fp = (t == T_INT) ? (float)myint : myfloat;
68 }
69 
70 /*
71  * La procedure "fscanf_Index" lit en ascii un indice.
72  * Entree :
73  * ip Indice a lire.
74  */
75 void fscanf_Index(Index *ip)
76 {
77  if (lex() != T_INT)
78  lexerr("start", "integer expected", NULL);
79  *ip = (Index)myint;
80 }
81 
82 /*
83  * La procedure "fscanf_int" lit en ascii un nombre entier.
84  * Entree :
85  * ip Nombre entier a lire.
86  */
87 void fscanf_int(int *ip)
88 {
89  if (lex() != T_INT)
90  lexerr("start", "integer expected", NULL);
91  *ip = myint;
92 }
93 
94 /*
95  * La procedure "fscanf_string" lit en ascii une chaine de caracteres.
96  * Entree :
97  * str Chaine a lire.
98  */
99 void fscanf_string(char **str)
100 {
101  if (lex() != T_STRING)
102  lexerr("start", "string expected", NULL);
103  if (*str == NULL)
104  *str = (char *)malloc((size_t)(mylength + 1) * sizeof(char));
105  else
106  *str = (char *)realloc(*str, (size_t)(mylength + 1) * sizeof(char));
107 
108  if (*str == NULL) {
109  printf("Unable to read the string: bad memory allocation");
110  return;
111  }
112 
113  strncpy(*str, mytext, (size_t)mylength);
114 }
115 
116 /*
117  * La procedure "fscanf_Type" lit en ascii un octet.
118  * Entree :
119  * ip Type a lire.
120  */
121 void fscanf_Type(Type *ip)
122 {
123  if (lex() != T_INT)
124  lexerr("start", "integer expected", NULL);
125  *ip = (Type)myint;
126 }
127 END_VISP_NAMESPACE
128 #endif