home *** CD-ROM | disk | FTP | other *** search
/ Inside Multimedia 1995 August / IMM0895.BIN / magazin / optix / disk1 / optxppac.set / FORMATTR.OPT < prev    next >
Text File  |  1995-05-05  |  5KB  |  255 lines

  1. rem ************************************************************
  2. rem ***
  3. rem *** O P T I X   -   S T R U K T U R   -   F O R M A T T E R
  4. rem ***
  5. rem ************************************************************
  6. rem ***
  7. rem *** Dieses Programm lädt das in 'Datei$' angegebene OPTIX-Listing
  8. rem *** (vorsichtshalber vorher Backup anlegen !!), führt eine
  9. rem *** Struktur-Formatierung durch und speichert das modifizierte
  10. rem *** Listing unter gleichem Namen wieder zurück. In der vorliegenden
  11. rem *** Form werden nur Listings bis zu 2000 Zeilen verarbeitet, wobei
  12. rem *** davon ausgegangen wird, daß keine Zeile länger als 128 Zeichen
  13. rem *** ist.
  14. rem ***
  15. rem *** Unter Struktur-Formatierung wird hier verstanden, daß der
  16. rem *** Programmtext nach jedem 'strukturöffnenden' Befehl (IF, REPEAT,
  17. rem *** FOR, DO, PROCEDURE, BEGIN) um zwei Zeichen eingerückt und mit
  18. rem *** jedem 'strukturschließenden' Befehl (ENDIF, UNTIL, NEXT, LOOP,
  19. rem *** RETURN, END) um zwei Zeichen wieder ausgerückt wird. Alle anderen
  20. rem *** Zeilen werden bündig geschrieben (Sonderfall: ELSE).
  21. rem ***
  22. rem *** Routinierte Programmierer werden schon wissen, wozu's gut ist, oder?
  23. rem ***
  24. rem *** Wenn Sie dieses Listing zum ersten (!) Mal betrachten, ist es noch
  25. rem *** unformatiert. Nachdem Sie das Programm gestartet haben, kehrt OPTIX
  26. rem *** automatisch zum Editor zurück und lädt dabei das veränderte Listing
  27. rem *** von 'FORMATTER.OPT' von der Festplatte. Es wird nun formatiert sein!
  28.  
  29. rem ************************************************
  30. rem *** Wird 'tab$' auf 'leer' gesetzt (DEFS(TAB$,'')), so eliminiert das
  31. rem *** Programm sämtliche führenden Spaces (wird also zum 'UNFORMATTER')
  32.  
  33. defs(tab$,'  ')
  34.  
  35. rem ************************************************
  36. rem *** Wird 'Watch' auf 1 gesetzt, so wird die aktuell bearbeitete
  37. rem *** Zeile zur Kontrolle auf dem Bildschirm ausgegeben.
  38.  
  39. def(watch,1)
  40.  
  41. rem ************************************************
  42.  
  43. def(xelse)
  44. def(auf)
  45. def(zu)
  46. def(i)
  47. def(j)
  48. def(o)
  49. defs(i$)
  50. defs(j$)
  51. defs(dum$)
  52. defs(upper$)
  53. defs(lower$)
  54. defs(leer$)
  55.  
  56. rem *** defs(datei$,'Ziel-Dateiname ggfls. incl. Pfadangabe')
  57.         defs(datei$,'formattr.opt')
  58.  
  59. defas(text$,128,2000)
  60.  
  61. procedure lower(s,l)
  62.  
  63. rem *** wandelt in der vorzubelegenden
  64. rem *** globalen Stringvariable 'lower$'
  65. rem *** ab Position 's' soviele Zeichen
  66. rem *** in Kleinbuchstaben um, wie in
  67. rem *** 'l' angegeben wurden. Ist 'l'=0,
  68. rem *** so wird automatisch ab 's' bis
  69. rem *** zum Stringende gewandelt. (Erwartet
  70. rem *** außerdem globale Var 'dum$')
  71.  
  72. locals(i,j,k)
  73. if s:=0
  74. s:=1
  75. endif
  76. if l=0
  77. len(lower$,l)
  78. endif
  79. for i:=s to l do
  80. dum$:=lower$[i]
  81. instr(dum$,'ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ',j)
  82. if j<>0
  83. delete(lower$,i,1)
  84. asc(dum$,k)
  85. inc(k,32)
  86. chr(dum$,k)
  87. insert(dum$,lower$,i)
  88. endif
  89. next(i)
  90. return
  91.  
  92. procedure upper(s,l)
  93.  
  94. rem *** wandelt in der vorzubelegenden globalen Stringvariable 'upper$'
  95. rem *** ab Position 's' soviele Zeichen in Großbuchstaben um, wie in
  96. rem *** 'l' angegeben wurden. Ist 'l'=0, so wird automatisch ab 's' bis
  97. rem *** zum Stringende gewandelt. (Erwartet außerdem globale Var 'dum$')
  98.  
  99. locals(i,j,k)
  100. if s:=0
  101. s:=1
  102. endif
  103. if l=0
  104. len(upper$,l)
  105. endif
  106. for i:=s to l do
  107. dum$:=upper$[i]
  108. instr(dum$,'abcdefghijklmnopqrstuvwxyzäöü',j)
  109. if j<>0
  110. delete(upper$,i,1)
  111. asc(dum$,k)
  112. dec(k,32)
  113. chr(dum$,k)
  114. insert(dum$,upper$,i)
  115. endif
  116. next(i)
  117. return
  118.  
  119. begin
  120.  
  121. new(text$)
  122. readtext(datei$,1,2000)
  123.  
  124. font(0)
  125. sysfont(1,0)
  126. setcolor(15)
  127.  
  128. for i:=1 to linctr do
  129. i$:=text$[i]
  130.  
  131. if watch<>0
  132. viewport(0,ymax-8,xmax,ymax)
  133. cbox(0,0,0)
  134. printat(0,240,i$)
  135. endif
  136.  
  137. trim(i$)
  138. if i$>''
  139.  
  140. auf  :=off
  141. zu   :=off
  142. xelse:=off
  143.  
  144. upper$:=i$
  145. mid(upper$,1,3)
  146. upper(1,0)
  147. if upper$='IF '
  148. auf:=on
  149. endif
  150. upper$:=i$
  151. mid(upper$,1,5)
  152. upper(1,0)
  153. if upper$='ELSE'
  154. xelse:=1
  155. endif
  156. upper$:=i$
  157. mid(upper$,1,5)
  158. upper(1,0)
  159. if upper$='ENDIF'
  160. zu:=on
  161. endif
  162.  
  163. upper$:=i$
  164. mid(upper$,1,6)
  165. upper(1,0)
  166. if upper$='REPEAT'
  167. auf:=on
  168. endif
  169. upper$:=i$
  170. mid(upper$,1,6)
  171. upper(1,0)
  172. if upper$='UNTIL '
  173. zu:=on
  174. endif
  175.  
  176. upper$:=i$
  177. mid(upper$,1,4)
  178. upper(1,0)
  179. if upper$='FOR '
  180. auf:=on
  181. endif
  182. upper$:=i$
  183. mid(upper$,1,5)
  184. upper(1,0)
  185. if upper$='NEXT('
  186. zu:=on
  187. endif
  188.  
  189. upper$:=i$
  190. mid(upper$,1,2)
  191. upper(1,0)
  192. if upper$='DO'
  193. auf:=on
  194. endif
  195. upper$:=i$
  196. mid(upper$,1,5)
  197. upper(1,0)
  198. if upper$='LOOP('
  199. zu:=on
  200. endif
  201.  
  202. upper$:=i$
  203. mid(upper$,1,10)
  204. upper(1,0)
  205. if upper$='PROCEDURE '
  206. auf:=on
  207. endif
  208. upper$:=i$
  209. mid(upper$,1,6)
  210. upper(1,0)
  211. if upper$='RETURN'
  212. zu:=on
  213. endif
  214.  
  215. upper$:=i$
  216. mid(upper$,1,5)
  217. upper(1,0)
  218. if upper$='BEGIN'
  219. auf:=on
  220. endif
  221. upper$:=i$
  222. mid(upper$,1,3)
  223. upper(1,0)
  224. if upper$='END'
  225. zu:=on
  226. endif
  227.  
  228. if zu:=on
  229. o:=o-1
  230. endif
  231.  
  232. dum$:=i$[1]
  233. if dum$<>':'
  234. if o>0
  235. j$:=leer$
  236. for j:=1 to o-xelse do
  237. j$:=j$+tab$
  238. next(j)
  239. text$[i]:=j$+i$
  240. endif
  241. else
  242. text$[i]:=i$
  243. endif
  244. if auf:=on
  245. o:=o+1
  246. endif
  247. endif
  248. next(i)
  249.  
  250. savetext(datei$,1,linctr)
  251.  
  252. end
  253.  
  254.  
  255.