Here's some old B2D code...
...Should be easy enough to convert to/for BMax.
dropped$ = Lower$(Replace$(CommandLine$(), Chr$(34), "")) If FileType(dropped$) <> 2 Then RuntimeError "'" + dropped$ + "' is Not a directory" dir = ReadDir(dropped$) bb_file = 0 c = 0 op$ = "*/+-=><" file$ = NextFile$(dir) While file$ <> "" indent = 0 if_flag = 0 case_flag = 0 select_flag = 0 out$ = "" If Lower$(Right$(file$, 3)) = ".bb" bb_file = bb_file + 1 in = ReadFile(dropped$ + "" + file$) If (Not in) Then RuntimeError "Couldn't open '" + file$ + "'" out$ = Replace(out$, "End If", "EndIf") While (Not Eof(in)) lin$ = Trim$(ReadLine$(in)) + Chr$(13) + Chr$(10) l$ = Left$(lin$, 1) Select l$ Case "" Case ";" Default Select command$(lin$) Case "If" If Instr(lin$, " Then ") = 0 out$ = out$ + String$(Chr$(9), indent) + lin$ indent = indent + 1 if_flag = if_flag + 1 EndIf Case "For", "Repeat", "While", "Function", "Type" out$ = out$ + String$(Chr$(9), indent) + lin$ indent = indent + 1 Case "Select" out$ = out$ + String$(Chr$(9), indent) + lin$ indent = indent + 1 select_flag = 1 Case "Case" If (case_flag = 0) Or (select_flag > 0) out$ = out$ + String$(Chr$(9), indent) + lin$ indent = indent + 1 case_flag = case_flag + 1 select_flag = 0 Else out$ = out$ + String$(Chr$(9), indent - 1) + lin$ EndIf Case "Default" If case_flag out$ = out$ + String$(Chr$(9), indent - 1) + lin$ EndIf Case "Else", "ElseIf" If if_flag > 0 out$ = out$ + String$(Chr$(9), indent - 1) + lin$ EndIf Case "EndIf" If if_flag > 0 if_flag = if_flag - 1 If indent > 0 Then indent = indent - 1 out$ = out$ + String$(Chr$(9), indent) + lin$ EndIf Case "Next", "Until", "Wend", "End" If command$(lin$, 5) = "Select" If case_flag > 0 case_flag = case_flag - 1 If indent > 0 Then indent = indent - 1 EndIf select_flag = 0 EndIf If indent > 0 Then indent = indent - 1 out$ = out$ + String$(Chr$(9), indent) + lin$ Default out$ = out$ + String$(Chr$(9), indent) + lin$ End Select End Select Wend CloseFile in out$ = Replace(out$, ",", ", ") For c=1 To Len(op$) out$ = Replace(out$, Mid$(op$, c, 1), " " + Mid$(op$, c, 1) + " ") Next For c=10 To 2 Step -1 out$ = Replace(out$, String$(" ", c), " ") Next out$ = Replace(out$, "> =", ">=") out$ = Replace(out$, "< =", "<=") out$ = Replace(out$, "< >", "<>") outfile = WriteFile(dropped$ + "" + file$ + ".txt") For c=1 To Len(out$) WriteByte outfile, Asc(Mid$(out$, c, 1)) Next CloseFile outfile Print "Processed : '" + file$ + "'" EndIf file$ = NextFile$(dir) Wend CloseDir(dir) Print Print "Total Files : " + bb_file WaitKey() End Function command$(in$, start=1) Local c, out$, ch For c=start To Len(in$) ch = Asc(Mid$(in$, c, 1)) If ch > 31 If ch = 32 Return out$ Else out$ = out$ + Chr$(ch) EndIf EndIf Next Return out$ End Function
...Should be easy enough to convert to/for BMax.