Rotina extremamente basica para identação automática de PRGs, usa funções memo o que pode limitar o tamanho do arquivo aberto e as linhas alêm de poder haver algum bug, mas no geral funciona bunitinho.
parameters nomearq
if .not. file(nomearq)
? chr(07)+"Nome de Arquivo nao encontrado"
return
endif
cls
load=memoread(nomearq)
nome=left(nomearq,rat(".",nomearq))+"IDB"
memowrit(nome,load)
nlin=mlcount(load,254)
prog=""
for i = 1 to nlin
@ 0,0 say "Aguarde termino da fase 1 ->"+str(int((i*100)/nlin),3)+"% concluido"
line=alltrim(memoline(load,254,i))+chr(13)+chr(10)
prog+=line
next
load=strtran(prog,";"+chr(13)+chr(10),"")
tab=0
aum=0
prog=""
nlin=mlcount(load,254)
i=1
while i <=nlin
@ 0,0 say "Aguarde termino da fase 2 ->"+str(int((i*100)/nlin),3)+"% concluido"
line=lower(alltrim(memoline(load,254,i)))
lin=alltrim(memoline(load,254,i))
if line==""
i++
loop
endif
if line = "elseif " .or. line= "case " .or. line == "end" .or. line == "endif" .or. line == "enddo" .or. line == "next" .or. line == "endcase" .or. line == "otherwise"
progx=space(tab-4)+lin+chr(13)+chr(10)
else
progx=space(tab)+lin+chr(13)+chr(10)
endif
prog+=progx
do case
case line = "do while "
tab+=4
case line == "enddo"
tab-=4
case line = "while "
tab+=4
case line == "end"
tab-=4
case line = "if "
tab+=4
case line == "endif"
tab-=4
case line = "for "
tab+=4
case line == "next"
tab-=4
case line == "do case"
tab+=4
case line == "endcase"
tab-=4
endcase
i++
enddo
memowrit(nomearq,prog)