Метод №2: использование связных списков
Здесь пример использования подобия связного списка для возвращения неограниченного числа параметров из функции.
;создание списка с параметрами - головной узел
Function fnRetValCreate.TRetVal(s$="", i%=0, f#=0)
Local rv.TRetVal = New TRetVal
rv\root = rv
rv\sVal = s
rv\iVal = i
rv\fVal = f
Return rv
End Function
;добавление нового результата
Function fnRetValAdd.TRetVal(retval.TRetVal, s$="", i%=0, f#=0)
;если ещё не создан, то создаём новый
If(retval = Null) Then Return fnRetValCreate(s, i, f)
retval\nxt = New TRetVal
retval\nxt\root = retval\root
retval\nxt\sVal = s
retval\nxt\iVal = i
retval\nxt\fVal = f
Return retval\nxt
End Function
;удаление всех результатов
Function fnRetValDelete(retval.TRetVal)
Local node.TRetVal = retval\root
While(node <> Null)
retval = node
node = node\nxt
Delete(retval)
Wend
End Function
;тип для хранения результатов (строки, целые и дробные)
Type TRetVal
Field sVal$, iVal%, fVal# ;сами данные
Field nxt.TRetVal ;указатель на следующего
Field root.TRetVal ;указатель на головной узел
End Type
Для примера использования этого метода ниже представлена функция
выценления параметров командной строки - с учётом того, что часть параметров может быть заключена в кавычки, а часть просто через пробел.
Local cl$ = CommandLine()
If(cl = "") Then End
DebugLog(cl)
Local rv.TRetVal = fnParseCommandLine(cl)
Local node.TRetVal = rv
Local file% = WriteFile("files.txt")
;пробегаем по всем результатам
While(node <> Null)
WriteLine(file, node\sVal)
node = node\nxt
Wend
CloseFile(file)
;удаляем список с результатами
fnRetValDelete(rv)
End
;в командной строке параметры, содержащие пробелы, обрамляются кавычками
;остальные - нет
Function fnParseCommandLine.TRetVal(cl$)
Local size% = Len(cl)
Local k%, cnt%, s$="", char$, q$ = Chr(34) ;кавычка
Local retval.TRetVal
For k% = 1 To size ;проходим по всем буквам
char = Mid(cl, k, 1)
If(char = q) ;встретилась кавычка
cnt = cnt+1
DebugLog("1")
If(cnt = 2) ;закрылась кавычка
retval = fnRetValAdd(retval, s)
s = ""
k = k+1 ;пропускаем пробел
cnt = 0
EndIf
Else If(char = " " And cnt = 0) ;если пробел не внутри кавычек, то он отделяет параметры
retval = fnRetValAdd(retval, s)
s = ""
DebugLog("2")
Else
s = s + char
If(k = size) ;если достигли конца строки, то последний параметр забираем тоже
DebugLog("3")
retval = fnRetValAdd(retval, s)
EndIf
EndIf
Next
Return retval\root ;возвращаем указатель на корень списка
End Function
ПС. Если кто-то знает как в блитц максе выцепить из командной строки русские символы, то подскажите - нужно такое: кидаем файл, содержащий в пути или названии кириллицу, на ехе-шник, и нужно достать/преобразовать путь так, чтоб можно было сделать с ним LoadImage() и прочее.