home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Inside Multimedia 1995 August
/
IMM0895.BIN
/
magazin
/
optix
/
disk1
/
optxppac.set
/
FORMATTR.OPT
< prev
next >
Wrap
Text File
|
1995-05-05
|
5KB
|
255 lines
rem ************************************************************
rem ***
rem *** O P T I X - S T R U K T U R - F O R M A T T E R
rem ***
rem ************************************************************
rem ***
rem *** Dieses Programm lädt das in 'Datei$' angegebene OPTIX-Listing
rem *** (vorsichtshalber vorher Backup anlegen !!), führt eine
rem *** Struktur-Formatierung durch und speichert das modifizierte
rem *** Listing unter gleichem Namen wieder zurück. In der vorliegenden
rem *** Form werden nur Listings bis zu 2000 Zeilen verarbeitet, wobei
rem *** davon ausgegangen wird, daß keine Zeile länger als 128 Zeichen
rem *** ist.
rem ***
rem *** Unter Struktur-Formatierung wird hier verstanden, daß der
rem *** Programmtext nach jedem 'strukturöffnenden' Befehl (IF, REPEAT,
rem *** FOR, DO, PROCEDURE, BEGIN) um zwei Zeichen eingerückt und mit
rem *** jedem 'strukturschließenden' Befehl (ENDIF, UNTIL, NEXT, LOOP,
rem *** RETURN, END) um zwei Zeichen wieder ausgerückt wird. Alle anderen
rem *** Zeilen werden bündig geschrieben (Sonderfall: ELSE).
rem ***
rem *** Routinierte Programmierer werden schon wissen, wozu's gut ist, oder?
rem ***
rem *** Wenn Sie dieses Listing zum ersten (!) Mal betrachten, ist es noch
rem *** unformatiert. Nachdem Sie das Programm gestartet haben, kehrt OPTIX
rem *** automatisch zum Editor zurück und lädt dabei das veränderte Listing
rem *** von 'FORMATTER.OPT' von der Festplatte. Es wird nun formatiert sein!
rem ************************************************
rem *** Wird 'tab$' auf 'leer' gesetzt (DEFS(TAB$,'')), so eliminiert das
rem *** Programm sämtliche führenden Spaces (wird also zum 'UNFORMATTER')
defs(tab$,' ')
rem ************************************************
rem *** Wird 'Watch' auf 1 gesetzt, so wird die aktuell bearbeitete
rem *** Zeile zur Kontrolle auf dem Bildschirm ausgegeben.
def(watch,1)
rem ************************************************
def(xelse)
def(auf)
def(zu)
def(i)
def(j)
def(o)
defs(i$)
defs(j$)
defs(dum$)
defs(upper$)
defs(lower$)
defs(leer$)
rem *** defs(datei$,'Ziel-Dateiname ggfls. incl. Pfadangabe')
defs(datei$,'formattr.opt')
defas(text$,128,2000)
procedure lower(s,l)
rem *** wandelt in der vorzubelegenden
rem *** globalen Stringvariable 'lower$'
rem *** ab Position 's' soviele Zeichen
rem *** in Kleinbuchstaben um, wie in
rem *** 'l' angegeben wurden. Ist 'l'=0,
rem *** so wird automatisch ab 's' bis
rem *** zum Stringende gewandelt. (Erwartet
rem *** außerdem globale Var 'dum$')
locals(i,j,k)
if s:=0
s:=1
endif
if l=0
len(lower$,l)
endif
for i:=s to l do
dum$:=lower$[i]
instr(dum$,'ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ',j)
if j<>0
delete(lower$,i,1)
asc(dum$,k)
inc(k,32)
chr(dum$,k)
insert(dum$,lower$,i)
endif
next(i)
return
procedure upper(s,l)
rem *** wandelt in der vorzubelegenden globalen Stringvariable 'upper$'
rem *** ab Position 's' soviele Zeichen in Großbuchstaben um, wie in
rem *** 'l' angegeben wurden. Ist 'l'=0, so wird automatisch ab 's' bis
rem *** zum Stringende gewandelt. (Erwartet außerdem globale Var 'dum$')
locals(i,j,k)
if s:=0
s:=1
endif
if l=0
len(upper$,l)
endif
for i:=s to l do
dum$:=upper$[i]
instr(dum$,'abcdefghijklmnopqrstuvwxyzäöü',j)
if j<>0
delete(upper$,i,1)
asc(dum$,k)
dec(k,32)
chr(dum$,k)
insert(dum$,upper$,i)
endif
next(i)
return
begin
new(text$)
readtext(datei$,1,2000)
font(0)
sysfont(1,0)
setcolor(15)
for i:=1 to linctr do
i$:=text$[i]
if watch<>0
viewport(0,ymax-8,xmax,ymax)
cbox(0,0,0)
printat(0,240,i$)
endif
trim(i$)
if i$>''
auf :=off
zu :=off
xelse:=off
upper$:=i$
mid(upper$,1,3)
upper(1,0)
if upper$='IF '
auf:=on
endif
upper$:=i$
mid(upper$,1,5)
upper(1,0)
if upper$='ELSE'
xelse:=1
endif
upper$:=i$
mid(upper$,1,5)
upper(1,0)
if upper$='ENDIF'
zu:=on
endif
upper$:=i$
mid(upper$,1,6)
upper(1,0)
if upper$='REPEAT'
auf:=on
endif
upper$:=i$
mid(upper$,1,6)
upper(1,0)
if upper$='UNTIL '
zu:=on
endif
upper$:=i$
mid(upper$,1,4)
upper(1,0)
if upper$='FOR '
auf:=on
endif
upper$:=i$
mid(upper$,1,5)
upper(1,0)
if upper$='NEXT('
zu:=on
endif
upper$:=i$
mid(upper$,1,2)
upper(1,0)
if upper$='DO'
auf:=on
endif
upper$:=i$
mid(upper$,1,5)
upper(1,0)
if upper$='LOOP('
zu:=on
endif
upper$:=i$
mid(upper$,1,10)
upper(1,0)
if upper$='PROCEDURE '
auf:=on
endif
upper$:=i$
mid(upper$,1,6)
upper(1,0)
if upper$='RETURN'
zu:=on
endif
upper$:=i$
mid(upper$,1,5)
upper(1,0)
if upper$='BEGIN'
auf:=on
endif
upper$:=i$
mid(upper$,1,3)
upper(1,0)
if upper$='END'
zu:=on
endif
if zu:=on
o:=o-1
endif
dum$:=i$[1]
if dum$<>':'
if o>0
j$:=leer$
for j:=1 to o-xelse do
j$:=j$+tab$
next(j)
text$[i]:=j$+i$
endif
else
text$[i]:=i$
endif
if auf:=on
o:=o+1
endif
endif
next(i)
savetext(datei$,1,linctr)
end