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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
#include "igesread.h"
#include <string.h>
/* Routine de base de lecture d'un fichier IGES
Cette routine lit une ligne, sauf si le statut "relire sur place" est mis
(utilise pour changement de section) : il est reannule ensuite
Cette routine retourne :
- statut (retour fonction) : no de section : S,G,D,P,T (car 73) ou
0 (EOF) ou -1 (tacher de sauter) ou -2 (car. 73 faux)
- un numero de ligne dans la section (car. 74 a 80)
- la ligne tronquee a 72 caracteres (0 binaire dans le 73ieme)
Il faut lui fournir (buffer) une ligne reservee a 81 caracteres
Cas d erreur : ligne fausse des le debut -> abandon. Sinon tacher d enjamber
*/
static int iges_fautrelire = 0;
int iges_lire (FILE* lefic, int *numsec, char ligne[100], int modefnes)
/*int iges_lire (lefic,numsec,ligne,modefnes)*/
/*FILE* lefic; int *numsec; char ligne[100]; int modefnes;*/
{
int i,result; char typesec;
/* int length;*/
if (iges_fautrelire == 0) {
if (*numsec == 0) ligne[72] = ligne[79] = ' ';
ligne[0] = '\0';
if(modefnes)
fgets(ligne,99,lefic); /*for kept compatibility with fnes*/
else {
/* PTV: 21.03.2002 it is neccessary for files that have only `\r` but no `\n`
examle file is 919-001-T02-04-CP-VL.iges */
while ( fgets ( ligne, 2, lefic ) && ( ligne[0] == '\r' || ligne[0] == '\n' ) )
{
}
fgets(&ligne[1],80,lefic);
/* fgets(ligne,81,lefic); */
}
if (*numsec == 0 && ligne[72] != 'S' && ligne[79] == ' ') {
/* ON A DU FNES : Sauter la 1re ligne */
ligne[0] = '\0';
if(modefnes)
fgets(ligne,99,lefic);/*for kept compatibility with fnes*/
else {
while ( fgets ( ligne, 2, lefic ) && ( ligne[0] == '\r' || ligne[0] == '\n' ) )
{
}
fgets(&ligne[1],80,lefic);
/* fgets(ligne,81,lefic); */
}
}
if ((ligne[0] & 128)&&modefnes) {
for (i = 0; i < 80; i ++) ligne[i] = ligne[i] ^ (150 + (i & 3));
}
}
if (feof(lefic)) return 0;
iges_fautrelire = 0;
if (ligne[0] == '\0' || ligne[0] == '\n' || ligne[0] == '\r')
return iges_lire(lefic,numsec,ligne,modefnes); /* 0 */
if (sscanf(&ligne[73],"%d",&result) == 0) return -1;
/* { printf("Erreur, ligne n0.%d :\n%s\n",*numl,ligne); return (*numsec > 0 ? -1 : -2); } */
*numsec = result;
typesec = ligne[72];
switch (typesec) {
case 'S' : ligne[72] = '\0'; return (1);
case 'G' : ligne[72] = '\0'; return (2);
case 'D' : ligne[72] = '\0'; return (3);
case 'P' : ligne[72] = '\0'; return (4);
case 'T' : ligne[72] = '\0'; return (5);
default :; /* printf("Ligne incorrecte, ignoree n0.%d :\n%s\n",*numl,ligne); */
}
/* the column 72 is empty, try to check the neghbour*/
if(strlen(ligne)==80
&& (ligne[79]=='\n' || ligne[79]=='\r') && (ligne[0]<='9' && ligne[0]>='0')) {
/*check if the case of losted .*/
int index;
for(index = 1; ligne[index]<='9' && ligne[index]>='0'; index++);
if (ligne[index]=='D' || ligne[index]=='d') {
for(index = 79; index > 0; index--)
ligne[index] = ligne[index-1];
ligne[0]='.';
}
typesec = ligne[72];
switch (typesec) {
case 'S' : ligne[72] = '\0'; return (1);
case 'G' : ligne[72] = '\0'; return (2);
case 'D' : ligne[72] = '\0'; return (3);
case 'P' : ligne[72] = '\0'; return (4);
case 'T' : ligne[72] = '\0'; return (5);
default :; /* printf("Ligne incorrecte, ignoree n0.%d :\n%s\n",*numl,ligne); */
}
}
return -1;
}
/* Pour commander la relecture sur place */
void iges_arelire()
{ iges_fautrelire = 1; }
|