Microsoft Small Basic

Program Listing: XMG163
' tr - translate command 0.1a
' Copyright (c) 2014 Nonki Takahashi. All rights reserved.
'
' History:
' 0.1a 2014-02-18 Created.
'
Not = "False=True;True=False;"
WQ = Text.GetCharacter(34)
TextWindow.Write("Option? ")
buf = TextWindow.Read()
ParseArgs()
TextWindow.WriteLine(args)
Sub ParseArgs
' param buf - command line
' return args[] - array of arguments
p = 1
l = Text.GetLength(buf)
n = 1
While p <= l
SkipSpace()
GetToken()
EndWhile
EndSub
Sub Dump
TextWindow.WriteLine("p=" + p)
EndSub
Sub SkipSpace
' param buf - command line
' param l - length of buf
' param p - pointer in buf
' return p - pointer to not space in buf
isSpace = "True"
While p <= l And isSpace
c = Text.GetSubText(buf, p, 1)
If c = " " Then
p = p + 1
Else
isSpace = "False"
EndIf
EndWhile
EndSub
Sub GetToken
' param buf - command line
' param l - length of buf
' param p - pointer in buf
' return args[] - array of arguments
' return p - pointer to not space in buf
isDelim = "False"
s = p ' p at start
n = Array.GetItemCount(args)
While p <= l And Not[isDelim]
c = Text.GetSubText(buf, p, 1)
If c = " " Then
isDelim = "True"
ElseIf c = "<" Or c = ">" Then
isDelim = "True"
d = c ' save delimiter
If p = s Then
p = p + 1
SkipSpace()
GetToken()
If d = "<" Then
args["stdin"] = args[n + 1]
ElseIf d = ">" Then
args["stdout"] = args[n + 1]
EndIf
args[n + 1] = ""
EndIf
ElseIf c = WQ Then
p2 = Text.GetIndexOf(Text.GetSubTextToEnd(buf, p + 1), WQ)
If 0 < p2 Then
args[n + 1] = Text.Append(args[n + 1], Text.GetSubText(buf, p + 1, p2 - 1))
p = p + p2 + 1
Else
TextWindow.WriteLine("Error: Missing quote")
EndIf
Else
args[n + 1] = Text.Append(args[n + 1], c)
p = p + 1
EndIf
EndWhile
EndSub