def MainLoop(settings, source)
success = TRUE
interactive = TRUE
insideQuote = FALSE
querySent = FALSE
done = FALSE
query = nil
queryWaiting = nil
slashCmdStatus = -1
interactive = (source == STDIN && !settings.notty)
if settings.quiet
settings.prompt = nil
else
settings.prompt = settings.db.db + PROMPT
end
while !done
if slashCmdStatus == 3
line = query
query = nil
else
if interactive && !settings.quiet
if insideQuote
settings.prompt[settings.prompt.length-3,1] = "\'"
elsif (queryWaiting != nil && !querySent)
settings.prompt[settings.prompt.length-3,1] = "-"
else
settings.prompt[settings.prompt.length-3,1] = "="
end
end
line = gets(settings.prompt, source)
end
if line == nil
printf("EOF\n")
done = TRUE
else
if !interactive && !settings.singleStep && !settings.quiet
printf(STDERR, "%s\n", line)
end
begin_comment = line.index("--")
if begin_comment
line = line[0, begin_comment]
end
line.gsub!(/[ \t\f\n\r]+\z/, "")
if line.length == 0
next
end
if line[0, 1] == "\\"
query = line
slashCmdStatus, query = HandleSlashCmds(settings, line, nil)
if slashCmdStatus == 0 && query != nil
success = SendQuery(settings, query, FALSE, FALSE, 0) && success
querySent = TRUE
elsif slashCmdStatus == 1
query = nil
elsif slashCmdStatus == 2
break
end
line = nil
next
end
slashCmdStatus = -1
if settings.singleLineMode
success = SendQuery(settings, line, FALSE, FALSE, 0) && success
querySent = TRUE
else
if queryWaiting
queryWaiting += " " + line
else
queryWaiting = line
end
for i in 0..line.length-1
if line[i, 1] == "\'"
insideQuote = !insideQuote
end
end
if !insideQuote
if line[line.length-1, 1] == ";"
query = queryWaiting
queryWaiting = nil
success = SendQuery(settings, query, FALSE, FALSE, 0) && success
querySent = TRUE
else
querySent = FALSE
end
else
querySent = FALSE
end
end
end
end
return success
end