Integration of OCCT 6.5.0 from SVN
[occt.git] / src / IGESFile / liriges.c
CommitLineData
7fd59977 1#include "igesread.h"
2#include <string.h>
3/* Routine de base de lecture d'un fichier IGES
4
5 Cette routine lit une ligne, sauf si le statut "relire sur place" est mis
6 (utilise pour changement de section) : il est reannule ensuite
7
8 Cette routine retourne :
9 - statut (retour fonction) : no de section : S,G,D,P,T (car 73) ou
10 0 (EOF) ou -1 (tacher de sauter) ou -2 (car. 73 faux)
11 - un numero de ligne dans la section (car. 74 a 80)
12 - la ligne tronquee a 72 caracteres (0 binaire dans le 73ieme)
13 Il faut lui fournir (buffer) une ligne reservee a 81 caracteres
14
15 Cas d erreur : ligne fausse des le debut -> abandon. Sinon tacher d enjamber
16*/
17
18static int iges_fautrelire = 0;
19int iges_lire (FILE* lefic, int *numsec, char ligne[100], int modefnes)
20/*int iges_lire (lefic,numsec,ligne,modefnes)*/
21/*FILE* lefic; int *numsec; char ligne[100]; int modefnes;*/
22{
23 int i,result; char typesec;
24/* int length;*/
25 if (iges_fautrelire == 0) {
26 if (*numsec == 0) ligne[72] = ligne[79] = ' ';
27 ligne[0] = '\0';
28 if(modefnes)
29 fgets(ligne,99,lefic); /*for kept compatibility with fnes*/
30 else {
31 /* PTV: 21.03.2002 it is neccessary for files that have only `\r` but no `\n`
32 examle file is 919-001-T02-04-CP-VL.iges */
33 while ( fgets ( ligne, 2, lefic ) && ( ligne[0] == '\r' || ligne[0] == '\n' ) )
34 {
35 }
36 fgets(&ligne[1],80,lefic);
37/* fgets(ligne,81,lefic); */
38 }
39 if (*numsec == 0 && ligne[72] != 'S' && ligne[79] == ' ') {
40/* ON A DU FNES : Sauter la 1re ligne */
41 ligne[0] = '\0';
42 if(modefnes)
43 fgets(ligne,99,lefic);/*for kept compatibility with fnes*/
44 else {
45 while ( fgets ( ligne, 2, lefic ) && ( ligne[0] == '\r' || ligne[0] == '\n' ) )
46 {
47 }
48 fgets(&ligne[1],80,lefic);
49/* fgets(ligne,81,lefic); */
50 }
51 }
52 if ((ligne[0] & 128)&&modefnes) {
53 for (i = 0; i < 80; i ++) ligne[i] = ligne[i] ^ (150 + (i & 3));
54 }
55 }
56 if (feof(lefic)) return 0;
57 iges_fautrelire = 0;
58 if (ligne[0] == '\0' || ligne[0] == '\n' || ligne[0] == '\r')
59 return iges_lire(lefic,numsec,ligne,modefnes); /* 0 */
60 if (sscanf(&ligne[73],"%d",&result) == 0) return -1;
61/* { printf("Erreur, ligne n0.%d :\n%s\n",*numl,ligne); return (*numsec > 0 ? -1 : -2); } */
62 *numsec = result;
63 typesec = ligne[72];
64 switch (typesec) {
65 case 'S' : ligne[72] = '\0'; return (1);
66 case 'G' : ligne[72] = '\0'; return (2);
67 case 'D' : ligne[72] = '\0'; return (3);
68 case 'P' : ligne[72] = '\0'; return (4);
69 case 'T' : ligne[72] = '\0'; return (5);
70 default :; /* printf("Ligne incorrecte, ignoree n0.%d :\n%s\n",*numl,ligne); */
71 }
72 /* the column 72 is empty, try to check the neghbour*/
73 if(strlen(ligne)==80
74 && (ligne[79]=='\n' || ligne[79]=='\r') && (ligne[0]<='9' && ligne[0]>='0')) {
75 /*check if the case of losted .*/
76 int index;
77 for(index = 1; ligne[index]<='9' && ligne[index]>='0'; index++);
78 if (ligne[index]=='D' || ligne[index]=='d') {
79 for(index = 79; index > 0; index--)
80 ligne[index] = ligne[index-1];
81 ligne[0]='.';
82 }
83
84 typesec = ligne[72];
85 switch (typesec) {
86 case 'S' : ligne[72] = '\0'; return (1);
87 case 'G' : ligne[72] = '\0'; return (2);
88 case 'D' : ligne[72] = '\0'; return (3);
89 case 'P' : ligne[72] = '\0'; return (4);
90 case 'T' : ligne[72] = '\0'; return (5);
91 default :; /* printf("Ligne incorrecte, ignoree n0.%d :\n%s\n",*numl,ligne); */
92 }
93 }
94
95 return -1;
96}
97
98/* Pour commander la relecture sur place */
99
100void iges_arelire()
101{ iges_fautrelire = 1; }