Rev 666 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 666 | Rev 790 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | {cp866} |
1 | {utf8} |
2 | unit System; |
2 | unit System; |
Line 3... | Line 3... | ||
3 | 3 | ||
4 | {$i _defines.inc} |
4 | {$i _defines.inc} |
Line 54... | Line 54... | ||
54 | Args := PKosHeader(0)^.args; |
54 | Args := PKosHeader(0)^.args; |
55 | if Assigned(Args) then |
55 | if Assigned(Args) then |
56 | begin |
56 | begin |
57 | while Args^ <> #0 do |
57 | while Args^ <> #0 do |
58 | begin |
58 | begin |
59 | {யãáâ¨âì «¨¤¨àãî騥 ¯à®¡¥«ë} |
59 | {Пропустить лидирующие пробелы} |
60 | while Args^ in [#1..#32] do Inc(Args); |
60 | while Args^ in [#1..#32] do Inc(Args); |
61 | if Args^ = #0 then Break; |
61 | if Args^ = #0 then Break; |
Line 62... | Line 62... | ||
62 | 62 | ||
63 | { ¯®¬¨âì 㪠§ â¥«ì ¯ à ¬¥âà} |
63 | {Запомнить указатель на параметр} |
64 | SetLength(Ptrs, Argc); |
64 | SetLength(Ptrs, Argc); |
65 | Ptrs[Argc - 1] := Args; |
65 | Ptrs[Argc - 1] := Args; |
Line 66... | Line 66... | ||
66 | Inc(Argc); |
66 | Inc(Argc); |
67 | 67 | ||
68 | {யãáâ¨âì ⥪ã騩 ¯ à ¬¥âà} |
68 | {Пропустить текущий параметр} |
69 | InQuotes := False; |
69 | InQuotes := False; |
70 | while (Args^ <> #0) and (not (Args^ in [#1..#32]) or InQuotes) do |
70 | while (Args^ <> #0) and (not (Args^ in [#1..#32]) or InQuotes) do |
71 | begin |
71 | begin |
72 | if Args^ = '"' then InQuotes := not InQuotes; |
72 | if Args^ = '"' then InQuotes := not InQuotes; |
Line 73... | Line 73... | ||
73 | Inc(Args); |
73 | Inc(Args); |
74 | end; |
74 | end; |
75 | 75 | ||
76 | {áâ ®¢¨âì ®ª®ç ¨¥ ¯ à ¬¥âà } |
76 | {Установить окончание параметра} |
77 | if Args^ in [#1..#32] then |
77 | if Args^ in [#1..#32] then |
78 | begin |
78 | begin |
79 | Args^ := #0; |
79 | Args^ := #0; |
80 | Inc(Args); |
80 | Inc(Args); |
81 | end; |
81 | end; |
82 | end; |
82 | end; |
83 | end; |
83 | end; |
84 | Argv := GetMem(Argc * SizeOf(PChar)); {XXX: ¯ ¬ïâì ¥ ®á¢®¡®¦¤ ¥âáï} |
84 | Argv := GetMem(Argc * SizeOf(PChar)); {XXX: память не освобождается} |
85 | Argv[0] := PKosHeader(0)^.path; |
85 | Argv[0] := PKosHeader(0)^.path; |
86 | for I := 1 to Argc - 1 do |
86 | for I := 1 to Argc - 1 do |
87 | begin |
87 | begin |
88 | Argv[I] := Ptrs[I - 1]; |
88 | Argv[I] := Ptrs[I - 1]; |
89 | {᪫îç¨âì ª ¢ë窨 ¨§ áâப¨} |
89 | {Исключить кавычки из строки} |
90 | Args := Argv[I]; |
90 | Args := Argv[I]; |
91 | L := 0; |
91 | L := 0; |
Line 116... | Line 116... | ||
116 | Result := ''; |
116 | Result := ''; |
117 | end; |
117 | end; |
Line 118... | Line 118... | ||
118 | 118 | ||
119 | procedure Randomize; |
119 | procedure Randomize; |
120 | begin |
120 | begin |
121 | randseed := 0; {GetTickCount()} |
121 | randseed := kos_timecounter(); |
Line 122... | Line 122... | ||
122 | end; |
122 | end; |
123 | 123 | ||
Line 134... | Line 134... | ||
134 | {TODO} |
134 | {TODO} |
135 | Result := stklen; |
135 | Result := stklen; |
136 | end; |
136 | end; |
Line 137... | Line 137... | ||
137 | 137 | ||
138 | {$i kos_stdio.inc} |
- | |
Line 139... | Line 138... | ||
139 | {-$i kos_term.inc} |
138 | {$i kos_stdio.inc} |
140 | 139 | ||
141 | procedure SysInitStdIO; |
140 | procedure SysInitStdIO; |
142 | begin |
141 | begin |
Line 156... | Line 155... | ||
156 | begin |
155 | begin |
157 | if IsConsole then |
156 | if IsConsole then |
158 | begin |
157 | begin |
159 | if ExitCode <> 0 then |
158 | if ExitCode <> 0 then |
160 | begin |
159 | begin |
161 | {XXX: ®¡ï§ ⥫쮥 ãá«®¢¨¥ ®¤®¯®â®çë© Konsole} |
160 | {XXX: обязательное условие на однопоточный Konsole} |
162 | Write(StdErr, '[Error #', ExitCode,', press any key]'); |
161 | Write(StdErr, '[Error #', ExitCode,', press any key]'); |
163 | {®¦¨¤ âì ¦ â¨ï ª« ¢¨è¨} |
162 | {ожидать нажатия клавиши} |
164 | Konsole.KeyPressed; |
163 | Konsole.KeyPressed; |
165 | while Konsole.KeyPressed = 0 do kos_delay(2); |
164 | while Konsole.KeyPressed = 0 do kos_delay(2); |
166 | {TODO: ¨á¯à ¢¨âì ª®áïª ¯à¨ ¯¥à¥à¨á®¢ª¥ Konsole} |
165 | {TODO: исправить косяк при перерисовке Konsole} |
167 | {íâ® ¥¢®§¬®¦®, â ª ª ª ªãç ®á¢®¡®¦¤ ¥âáï ¥é¥ ¤® ¢ë§®¢ í⮩ ¯à®æ¥¤ãàë} |
166 | {это невозможно, так как куча освобождается еще до вызова этой процедуры} |
168 | {¬®¦® ¯¨á âì ᢮© ¤¨á¯¥âç¥à ¯ ¬ïâ¨, ® íâ® á«®¦®} |
167 | {можно написать свой диспетчер памяти, но это сложно} |
169 | { ¥á«¨ ¢ Konsole ¨á¯®«ì§®¢ âì ¢ë¤¥«¥¨¥ ¯ ¬ï⨠¯àï¬ãî ç¥à¥§ KosAPI?!} |
168 | {а если в Konsole использовать выделение памяти напрямую через KosAPI?!} |
170 | end; |
169 | end; |
171 | Close(StdErr); |
170 | Close(StdErr); |
172 | Close(StdOut); |
171 | Close(StdOut); |
173 | Close(ErrOutput); |
172 | Close(ErrOutput); |
174 | Close(Input); |
173 | Close(Input); |