Subversion Repositories Kolibri OS

Rev

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);