Télécharger afnost.eso

Retour à la liste

Numérotation des lignes :

afnost
  1. C AFNOST SOURCE PV 21/12/09 21:15:01 11214
  2. subroutine afNoSt(pNoti,iret)
  3. character*500 buffer
  4. character*5 rep
  5. integer termLi,iLig,jLig,iPag
  6. integer ipart,ichap,posDeb,posFin
  7. integer nbNuCh,nbNuPa,nChap,nPart,mChap,mPart
  8. integer tppanu,nlig,mlig
  9. integer iret,iretRe,ichaf,nChaCh
  10. integer longlu
  11.  
  12. -INC PPARAM
  13. -INC CCOPTIO
  14. -INC CCNOYAU
  15. segment,noti
  16. character*(LONOM) nomOpe
  17. character*500 blig(nlig)
  18. endsegment
  19. segment,strNot
  20. integer posChap(mChap)
  21. c posChap(ichap) : ligne contenant le titre du chapitre ichap
  22. integer posPart(mPart)
  23. c posPart(iPart) : ligne contenant le titre de la partie iPart (numerotation globale)
  24. integer chapPart(mPart)
  25. c chapPart(iPart) : chapitre dans lequel la partie iPart est contenue
  26. integer partPart(mPart)
  27. c partPart(iPart) : numerotation locale de la partie
  28. character*40 forChap
  29. character*40 forPart
  30. endsegment
  31. pointeur pnoti.NOTI
  32. pointeur struc.STRNOT
  33. iret=0
  34. c Recherche d element de structuration
  35. mchap=1000
  36. mpart=1000
  37. segini struc
  38. npart=0
  39. nchap=0
  40. tpPaNu=0
  41. mlig=pNoti.blig(/2)
  42. DO 44 iLig=1,mlig
  43. buffer=pNoti.blig(iLig)
  44. c Numerotation des chapitres et parties
  45. if (buffer(1:5).EQ.'PART{'.OR.buffer(1:5).eq.'CHAP{') then
  46. if (buffer(1:4).EQ.'PART') then
  47. npart=npart+1
  48. struc.posPart(npart)=iLig
  49. struc.chapPart(npart)=nChap
  50. tpPaNu=tpPaNu+1
  51. struc.partPart(npart)=tpPaNu
  52. endif
  53. if (buffer(1:4).eq.'CHAP') then
  54. tpPaNu=0
  55. nchap=nchap+1
  56. struc.poschap(nchap)=iLig
  57. endif
  58. posdeb=index(buffer(1:500),'{')
  59. if (posdeb.eq.0) then
  60. moterr(1:1)='{'
  61. interr(1)=ilig
  62. iret=1047
  63. return
  64. endif
  65. posdeb=posdeb+1
  66. posfin=index(buffer(1:500),'}')
  67. if (posfin.eq.0) then
  68. moterr(1:1)='}'
  69. interr(1)=ilig
  70. iret=1047
  71. return
  72. endif
  73. posFin=posFin-1
  74. pNoti.blig(iLig)=' '
  75. pNoti.blig(iLig)=buffer(posDeb:posFin)//CHAR(0)
  76. endif
  77. 44 continue
  78. mChap=nchap
  79. mPart=npart
  80. segadj struc
  81. nbNuCh=nChap
  82. nbNuPa=nPart
  83. IF(nbNuCh.GT.0) THEN
  84. nbNuCh=INT(LOG10(REAL(nbNuCh)))+1
  85. ELSE
  86. nbNuCh=0
  87. ENDIF
  88. IF(nbNuPa.GT.O) THEN
  89. nbNuPa=INT(LOG10(REAL(nbNuPa)))+1
  90. ELSE
  91. nbNuPa=0
  92. ENDIF
  93. write (struc.forchap,100) nbnuch,nbnuch
  94. 100 format('(i',i1,'.',i1,','' '',a)')
  95.  
  96. IF(nbnuch.NE.0) THEN
  97. write (struc.forpart,101) nbnuch,nbnuch,nbnupa,nbnupa
  98. ELSE
  99. write (struc.forpart,102) nbnuch,nbnuch,nbnupa,nbnupa
  100. ENDIF
  101.  
  102. 101 format('(i',i1,'.',i1,',''.'', i',i1,'.',i1,','' '' ,a)')
  103. 102 format('(i',i1,'.',i1,', i',i1,'.',i1,','' '' ,a)')
  104. do 13 ipart=1,nChap
  105. iLig=struc.posChap(ipart)
  106. buffer=pNoti.blig(iLig)
  107. ichaf=index(buffer,CHAR(0))
  108. write(pNoti.blig(iLig),struc.forChap) ipart, buffer(1:ichaf)
  109. 13 continue
  110. do 12 ipart=1,nPart
  111. iLig=struc.posPart(ipart)
  112. buffer=pNoti.blig(iLig)
  113. ichaf=index(buffer,CHAR(0))
  114. write(pNoti.blig(iLig),struc.forpart) struc.chappart(ipart),
  115. & struc.partpart(ipart), buffer(1:ichaf)
  116. 12 continue
  117. c On parcours la notice en partant du bas pour ajouter les soulignements
  118. nlig=mlig+nchap+npart
  119. segadj pNoti
  120. jLig=nLig
  121. iPart=nPart
  122. iChap=nChap
  123. IF(iChap.eq.0) THEN
  124. iPosChap=-1
  125. ELSE
  126. iPosChap=struc.posChap(iChap)
  127. ENDIF
  128. IF(iPart.eq.0) THEN
  129. iPosPart=-1
  130. ELSE
  131. iPosPart=struc.posPart(iPart)
  132. ENDIF
  133. do 14 iLig=mlig,1,-1
  134. c write(6,*) iLig,iPosPart
  135. buffer=pNoti.blig(iLig)
  136. if(iLig.eq.iPosPart) then
  137. nChaCh = index(buffer,CHAR(0))-1
  138. if(nChaCh.gt.0) then
  139. buffer(1:1)='-'
  140. do 90 iCha=2,nChaCh
  141. buffer(iCha:iCha)='-'
  142. 90 continue
  143. else
  144. buffer(1:1)=' '
  145. endif
  146. pNoti.blig(jLig)=buffer
  147. jLig=jLig-1
  148. struc.posPart(iPart)=jLig
  149. iPart=iPart-1
  150. if(iPart.eq.0) then
  151. iPosPart=0
  152. else
  153. iPosPart=struc.posPart(iPart)
  154. endif
  155. buffer=pNoti.blig(iLig)
  156. endif
  157. if(iLig.eq.iPosChap) then
  158. nChaCh = index(buffer,CHAR(0))-1
  159. if(nChaCh.gt.0) then
  160. buffer(1:1)='='
  161. do 92 iCha=2,nChaCh
  162. buffer(iCha:iCha)='='
  163. 92 continue
  164. else
  165. buffer(1:1)=' '
  166. endif
  167. pNoti.blig(jLig)=buffer
  168. jLig=jLig-1
  169. struc.posChap(iChap)=jLig
  170. iChap=iChap-1
  171. if(iChap.eq.0) then
  172. iPosChap=0
  173. else
  174. iPosChap=struc.posChap(iChap)
  175. endif
  176. buffer=pNoti.blig(iLig)
  177. endif
  178. pNoti.blig(jLig)=buffer
  179. jLig=jLig-1
  180. 14 continue
  181. call pagerSt(pNoti,struc)
  182. segsup struc
  183. end
  184. ************************************************************************
  185. subroutine pagerSt(pNoti,struc)
  186. character*500 buffer
  187. integer termLi,iLig,jLig,iPag
  188. integer debLi,finLi
  189. integer ipart,ichap,posDeb,posFin,nChap
  190. integer iRet
  191. character*8 forNum
  192.  
  193. -INC PPARAM
  194. -INC CCOPTIO
  195. -INC CCNOYAU
  196. segment,noti
  197. character*(LONOM) nomOpe
  198. character*500 blig(nlig)
  199. endsegment
  200. segment,strNot
  201. integer posChap(mChap)
  202. integer posPart(mPart)
  203. integer chapPart(mPart)
  204. integer partPart(mPart)
  205. character*40 forChap
  206. character*40 forPart
  207. endsegment
  208. character*5 rep
  209. pointeur pnoti.NOTI
  210. pointeur struc.STRNOT
  211. debLi=1
  212. finLi=pNoti.blig(/2)
  213. nChap=struc.posChap(/1)
  214. call gistty(termLi)
  215. termLi=termLi-3
  216. iLig=debLi-1
  217. iPag=0
  218. jLig=1
  219. nLig=finLi
  220. 123 if (iLig.lt.nLig) then
  221. iLig=iLig+1
  222. buffer=pNoti.blig(iLig)
  223. LONGLU=LEN(BUFFER)
  224. 987 CONTINUE
  225. LONGLU = LONGLU -1
  226. if ( LONGLU.NE.1.AND. BUFFER(LONGLU:LONGLU) .EQ.' ') goto 987
  227. if (buffer(1:9).ne.'Section :') then
  228. jLig=jLig+1
  229. write(IOIMP,*) buffer(1:LONGLU)
  230. endif
  231. if(jLig.eq.termLi) then
  232. call gistty(termLi)
  233. termLi=termLi-2
  234. ipag=ipag+1
  235. jLig=0
  236. c122 write(IOIMP,104) '? (a pour aide) '
  237. C122 write(IOIMP,104)
  238. C104 FORMAT ('? ([A]ide/[H]elp) ', $ )
  239. c104 format(A16$)
  240. 122 CALL ERREUR(-356)
  241. read (IOTER,fmt='(a5)',end=124,err=124) rep
  242. if (rep.eq.'q'.or.ierr.ne.0) goto 124
  243. if (rep.eq.' '.or.rep.eq.' ') then
  244. goto 123
  245. endif
  246. C if (rep.eq.'a'.or.rep.eq.'A') then
  247. c write(IOIMP,*) 'Commandes :'
  248. c write(IOIMP,*) 'q : quitter'
  249. c write(IOIMP,*) 'd : debut'
  250. c write(IOIMP,*) 's : sommaire'
  251. c write(IOIMP,*) 'num : aller a la section'
  252. c write(IOIMP,*) 'entree pour la suite '
  253. C CALL ERREUR(-356)
  254. C goto 122
  255. C endif
  256. C if (rep.eq.'h'.or.rep.eq.'H') then
  257. C write(IOIMP,*) 'Commands :'
  258. C write(IOIMP,*) 'q : quit'
  259. C write(IOIMP,*) 'd : beginning'
  260. C write(IOIMP,*) 's : table of contents'
  261. C write(IOIMP,*) 'num : go to section'
  262. C write(IOIMP,*) 'enter for next page '
  263. C goto 122
  264. C endif
  265. if (rep.eq.'s') then
  266. call afStSo(pNoti,struc)
  267. goto 122
  268. endif
  269. if (rep.eq.'d') then
  270. iLig=debLi-1
  271. goto 123
  272. endif
  273. posdeb=index(rep,'.')
  274. if (posdeb.ne.0) then
  275. 103 format('(i',i1,'.',i1,')')
  276. write (forNum,103) posdeb-1,posdeb-1
  277. c write(6,*) 'Format de lecture',forNum
  278. read(rep(1:posdeb-1),forNum,iostat=iRetRe) ichap
  279. if(iRetRe.ne.0) then
  280. write(IOIMP,*)'Numero incorrect : ', iChap
  281. goto 122
  282. endif
  283. write (forNum,103) 5-posdeb,5-posdeb
  284. c write(6,*) 'Format de lecture',forNum
  285. read(rep(posdeb+1:5),forNum,iostat=iRetRe) ipart
  286. if(iRetRe.ne.0) then
  287. write(IOIMP,*)'Numero incorrect : ', iPart
  288. goto 122
  289. endif
  290. call afStPa(struc,iPart,ichap,iLig,iRet)
  291. if(iRet.ne.0) then
  292. write(IOIMP,*)'Numero incorrect : ', iChap, iPart
  293. go to 122
  294. else
  295. goto 123
  296. endif
  297. endif
  298. write (forNum,103) 5,5
  299. c write(6,*) 'Format de lecture',forNum
  300. ichap=-3
  301. read(rep,forNum,iostat=iRetRe) ichap
  302. if(iRetRe.ne.0) then
  303. else
  304. if(nChap.ne.0) then
  305. call afStCh(struc,iChap,iLig,iRet)
  306. else
  307. call afStPa(struc,ichap,0,iLig,iRet)
  308. endif
  309. if(iRet.ne.0) then
  310. write(IOIMP,*)'Numero incorrect : ',iChap
  311. go to 122
  312. else
  313. goto 123
  314. endif
  315. endif
  316.  
  317. c moterr(1:4)=pNoti.nomOpe
  318. c interr(1)=ipag
  319. c call erreur(-357)
  320. endif
  321. goto 123
  322. endif
  323. 124 continue
  324. segsup struc
  325. end
  326. ************************************************************************
  327. subroutine afStSo(pNoti,struc)
  328. character*500 buffer
  329. integer iLig
  330. integer ipart,ichap,nChap
  331.  
  332. -INC PPARAM
  333. -INC CCOPTIO
  334. -INC CCNOYAU
  335. segment,noti
  336. character*(LONOM) nomOpe
  337. character*500 blig(nlig)
  338. endsegment
  339. segment,strNot
  340. integer posChap(mChap)
  341. integer posPart(mPart)
  342. integer chapPart(mPart)
  343. integer partPart(mPart)
  344. character*40 forChap
  345. character*40 forPart
  346. endsegment
  347. pointeur pnoti.NOTI
  348. pointeur struc.STRNOT
  349. nChap=struc.posChap(/1)
  350. iChap=0
  351. if ( struc.posPart(/1).ne.0) then
  352. do 12 ipart=1,struc.posPart(/1)
  353. c Cas ou la numerotation contient des parties et eventuellement des
  354. c chapitres dans ces parties
  355. if(iChap.LT.struc.chapPart(iPart)) then
  356. write(IOIMP,*)
  357. do while(iChap.LT.struc.chapPart(iPart).AND.
  358. & iChap.LE.nChap)
  359. iChap = iChap+1
  360. iLig=struc.posChap(iChap)
  361. buffer=pNoti.blig(iLig)
  362. LONGLU=LEN(BUFFER)
  363. DO WHILE ( LONGLU.NE.1.AND.
  364. & BUFFER(LONGLU:LONGLU) .EQ.' ')
  365. LONGLU = LONGLU -1
  366. ENDDO
  367. write(IOIMP,*) buffer(1:LONGLU)
  368. end do
  369. endif
  370. iLig=struc.posPart(ipart)
  371. buffer=pNoti.blig(iLig)
  372. LONGLU=LEN(BUFFER)
  373. DO WHILE ( LONGLU.NE.1.AND.BUFFER(LONGLU:LONGLU) .EQ.' ')
  374. LONGLU = LONGLU -1
  375. ENDDO
  376. write(IOIMP,*) buffer(1:LONGLU)
  377. 12 continue
  378. if(iChap.ne.nChap) then
  379. do 121 iChap=iChap,nChap
  380. iLig=struc.posChap(iChap)
  381. buffer=pNoti.blig(iLig)
  382. LONGLU=LEN(BUFFER)
  383. DO WHILE ( LONGLU.NE.1.AND.BUFFER(LONGLU:LONGLU) .EQ.' ')
  384. LONGLU = LONGLU -1
  385. ENDDO
  386. write(IOIMP,*) buffer(1:LONGLU)
  387. 121 continue
  388. endif
  389.  
  390.  
  391. else
  392. c Cas ou la numerotation ne contient que des chapitres
  393. do 13 iChap=1,struc.posChap(/1)
  394. iLig=struc.posChap(iChap)
  395. buffer=pNoti.blig(iLig)
  396. LONGLU=LEN(BUFFER)
  397. DO WHILE ( LONGLU.NE.1.AND.BUFFER(LONGLU:LONGLU) .EQ.' ')
  398. LONGLU = LONGLU -1
  399. ENDDO
  400. write(IOIMP,*) buffer(1:LONGLU)
  401. 13 continue
  402. endif
  403. end
  404. ************************************************************************
  405. subroutine afStPa(struc,iPartL,iChap,iLig,iRet)
  406. integer ipart,ipartL,ichap,iLig
  407. integer iRet
  408.  
  409. -INC PPARAM
  410. -INC CCOPTIO
  411. segment,strNot
  412. integer posChap(mChap)
  413. integer posPart(mPart)
  414. integer chapPart(mPart)
  415. integer partPart(mPart)
  416. character*40 forChap
  417. character*40 forPart
  418. endsegment
  419. iRet=-1
  420. pointeur struc.STRNOT
  421. do 12 ipart=1,struc.posPart(/1)
  422. if(struc.chapPart(ipart).eq.ichap.and.
  423. & struc.partPart(iPart).eq.ipartL) then
  424. iRet=0
  425. iLig=struc.posPart(iPart)-1
  426. return
  427. endif
  428. 12 continue
  429. iRet=1
  430. return
  431. end
  432. ************************************************************************
  433. subroutine afStCh(struc,iChap,iLig,iRet)
  434. integer iLig
  435. integer ichap
  436. integer iRet
  437.  
  438. -INC PPARAM
  439. -INC CCOPTIO
  440. segment,strNot
  441. integer posChap(mChap)
  442. integer posPart(mPart)
  443. integer chapPart(mPart)
  444. integer partPart(mPart)
  445. character*40 forChap
  446. character*40 forPart
  447. endsegment
  448. pointeur struc.STRNOT
  449. iRet=-1
  450. if(iChap.le.0.or.iChap.gt.struc.posChap(/1)) then
  451. iRet=1
  452. return
  453. endif
  454. iRet=0
  455. iLig=struc.posChap(iChap)-1
  456. return
  457. end
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales