Форум: "Потрепаться";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
ВнизОцените проги! Найти похожие ветки
← →
Seriouss (2004-03-08 16:26) [40]Ты эта... ко врачу сходи :)
обязательно.
дак что с кодом?
← →
Seriouss (2004-03-08 17:20) [41]эх люди, люди!
← →
jack128 © (2004-03-08 17:44) [42]
> дак что с кодом?
Ты бы на ММП сходил, там тебе такую рецензию на этот код накатали - закачаешься :-))
← →
Юрий Зотов © (2004-03-08 17:53) [43]> Seriouss
Честно посмотрел код в [4]. Недостатков много, но о них уже говорили, поэтому повторяться не стоит. А в целом могу сказать, что для 12 лет код даже очень неплохой. Если не обленитесь, не зазнаетесь, не увлечетесь чем-то другим и т.д., то у Вас есть все шансы стать весьма сильным программистом.
Только не рассчитывайте, что это произойдет скоро. Еще очень и очень не скоро - потому что еще очень многое предстоит узнать и очень многому научиться (причем написание кода (на любом языке) в этом списке стоит на самом последнем месте).
Но, надеюсь, когда-нибудь это все же произойдет. И от души желаю этого Вам, коллега.
:о)
← →
Seriouss (2004-03-08 18:06) [44]Ты бы на ММП сходил, там тебе такую рецензию на этот код накатали - закачаешься :-))
что такое ММп?))
Юрий Зотов
Спасибо, постараюсь)
← →
Seriouss (2004-03-08 18:16) [45]вот еще фрагмент. опишите плиз недостатки)
procedure load;
var
f: TextFile;
i: Integer;
begin
if NOT FileExists("base.bsn") then rewrit;
if FileExists("base.bsn") then
begin
procok:=0;
row:=0;
AssignFile(f, "base.bsn");
Reset(f);
readln(f, title);
readln(f, tempstr);
Col:=StrToInt(tempstr);
SetLength(named,col+1);
SetLength(sizecol,col+1);
for i:=1 to Col do
begin
readln(f, named[i]);
end;
For i:=1 to Col do
begin
readln(f, tempstr);
sizecol[i]:=StrToInt(tempstr);
end;
tempint:=1;
readln(f, tempstr);
repeat
readln(f, tempstr);
if tempstr<>"-/*\-" then
begin
row:=row+1;
SetLength(data,(row*col)+1);
data[tempint]:=tempstr;
tempint:=tempint+1;
end
else
begin
procok:=1;
end;
until procok=1;
CloseFile(f);
Form1.StringGrid1.RowCount:=row div col+2;
Reset(f);
procok:=0;
for i:=1 to col*2+3 do
begin
readln(f, tempstr);
end;
CloseFile(f);
end
else
begin
ShowMessage("Ошибка: нет файла базы");
Form1.Close;
end;
end;
procedure render;
var
i: Integer;
begin
Form1.Caption:=title;
Form1.StringGrid1.ColCount:=col+1;
Form1.StringGrid1.ColWidths[0]:=23;
for i:=1 to Form1.StringGrid1.ColCount-1 do begin
Form1.StringGrid1.Cells[i,0]:=named[i]+" ("+IntToStr(i)+")";
Form1.StringGrid1.ColWidths[i]:=sizecol[i];
end;
For i:=1 to Form1.StringGrid1.RowCount do begin
Form1.StringGrid1.Cells[0,i]:=IntToStr(i);
end;
rc:=row*col;
tempint:=1;
tempint2:=1;
tempint3:=1;
for i:=1 to rc do
begin
Form1.StringGrid1.Cells[tempint,tempint2]:=Data[tempint3];
tempint3:=tempint3+1;
tempint:=tempint+1;
if tempint=Form1.StringGrid1.ColCount then
begin
tempint2:=tempint2+1;
tempint:=1;
end;
end;
end;
← →
Seriouss (2004-03-08 18:21) [46]ps. фрагмент в [45] - одна из важнейших частей в программе, поэтому хочется узнать, что сделанно неправильно, что можно сделать проще и т.д...
← →
Anatoly Podgoretsky © (2004-03-08 18:29) [47]Очень много плохо, но самое тяжелое глобальные переменные.
← →
Seriouss (2004-03-08 18:33) [48]Очень много плохо что именно "МНОГО"
← →
Seriouss (2004-03-08 18:36) [49]что нибудь более конкретное говорите пожалуйста
← →
Seriouss (2004-03-08 18:43) [50]но самое тяжелое глобальные переменные
толи я совсем тугодум то ли еще что, но так и не понял, что в них плохо?
← →
Piter © (2004-03-08 19:42) [51]Seriouss (08.03.04 18:43) [50]
Все в них плохо. Это давно выяснено и есть правило - чем меньше у тебя глобальных переменных - тем лучше.
Что такое procok, Col, rowб tempstr, title? Разве нельзя их объявить как локальные переменные? Глобальные переменные запутывают логику программы, в конце концов перестанешь улавливать где они изменяются, что приведет к трудно обнаружаемым ошибкам.
Что за непонятная конструкция:
if NOT FileExists("base.bsn") then rewrit;
if FileExists("base.bsn") then
Если rewrite не оказывает влияния на появление файла base.bsn, то логичней писать так:if FileExists("base.bsn") then
begin
...
end
else
rewrit;
...
Если оказывает - то вообще глупость. Получается, что если файла нету, то ты его создаешь, ЗАПОЛНЯЕШЬ данными и тут же их СЧИТЫВАЕШЬ. Где логика?
Я уже не говорю про перехват исключений при StrToInt
Дальше:for i:=1 to Col do
begin
readln(f, named[i]);
end;
Если named динамический массив - то возможно тебе надо начинать с нуля, то есть for i:=0 to Coll-1 ?
Тогда и SetLength(named,col+1); будет выглядеть как: SetLength(named,col); ?
А то видимо нулевой индекс массива ты не используешь...
Что такое sizecol? Называй переменные понятно, а то кажется, что это размер col, а на самом деле тоже динамический массив.
Опять обращение к Form1. Не думаю, что так необходимо из неких процедур обращаться к глобальным переменным.
В общем, код ужасен. Конечно, то, что он работает - хорошо. Но логически не выверен - это плохо.
Подумай над ПРОЕКТИРОВАНИЕМ. Это очень, очень важная вещь. Выключи компьютер, отойди от него. Продумай в общих чертах как все будет выглядеть, нарисуй на бумажке зависимости, кто к кому будет обращаться. Должна получиться более менее иерархическая зависимость, а не беспорядочное обращение всем ко всему.
Только вот опять же повторюсь - оно тебе надо в 12 лет?
← →
Юрий Зотов © (2004-03-08 20:06) [52]> Piter © (08.03.04 19:42) [51]
> Подумай над ПРОЕКТИРОВАНИЕМ. Это очень, очень важная вещь.
Золотые слова. Но сколько лет надо потерять, сколько переписать кода и сколько наплодить ошибок, пока не поймешь, что они действительно золотые...
> Seriouss
И все же попробуйте именно СПРОЕКТИРОВАТЬ программу. А уж потом ее писать. Если получится - будет ОЧЕНЬ хорошо.
← →
Seriouss (2004-03-08 20:37) [53]Что такое procok, Col, rowб tempstr, title? Разве нельзя их объявить как локальные переменные?
нельзя. т.к. они используются и в др. процедурах.
Что такое sizecol? Называй переменные понятно, а то кажется, что это размер col, а на самом деле тоже динамический массив.
это массив, в котором размещены размеры столбцов. все понятно.
Опять обращение к Form1. Не думаю, что так необходимо из неких процедур обращаться к глобальным переменным.
Это я понял. просто еще код не исправлял.
Только вот опять же повторюсь - оно тебе надо в 12 лет?
Надо. а что еще делать?)))
← →
Юрий Зотов © (2004-03-08 20:45) [54]> Seriouss (08.03.04 20:37) [53]
> это массив, в котором размещены размеры столбцов.
Тогда, наверное, было бы лучше ColSizes или SizeOfCols? Ведь SizeCol в переводе - это "cтолбец размера", а не "размер столбца". Да и множественное число не показано.
← →
Seriouss (2004-03-08 20:45) [55]
Я уже не говорю про перехват исключений при StrToInt
если юзер не копался руками в базе, то исключений возникать не должно
← →
Seriouss (2004-03-08 20:47) [56]Тогда, наверное, было бы лучше ColSizes или SizeOfCols? Ведь SizeCol в переводе - это "cтолбец размера", а не "размер столбца". Да и множественное число не показано.
понимаете, я называю массивы, так как мне удобно. я английского не знаю, в школе фр.яз. учу
← →
Seriouss (2004-03-08 20:58) [57]
procedure TForm1.Button2Click(Sender: TObject);
var
f: TextFile;
p: String;
n: String;
nf: String;
i: Integer;
te: Integer;
tes: integer;
label
1;
begin
Form1.Label2.Caption:="";
Form1.Label3.Caption:="";
Form1.Label4.Caption:="";
Form1.Label5.Caption:="";
Form1.Label9.Caption:="";
if Form1.Edit1.Text = "" then
begin
ShowMessage("Вы не ввели число!");
Form1.Edit1.SetFocus;
goto 1;
end;
te :=StrtoInt(Form2.Edit1.Text);
tes :=1;
for i:=StrToInt(Form2.Edit1.Text) to StrToInt(Form2.Edit2.Text) do begin
if (Form1.Edit1.Text = IntToStr(te)) then
begin
tes := 2
end;
te := te+1
end;
if (tes=1) then
begin
ShowMessage("Вы ввели либо букву, либо число находящееся за пределами "+Form2.Edit1.Text+"-"+Form2.Edit2.Text);
goto 1;
end;
b := strToInt(Form1.Edit1.Text);
if a = b then
begin
Form1.Edit1.Enabled:=False;
Form1.Button2.Enabled:=False;
Form1.LCDNumber1.Visible:=False;
Form1.Label10.Visible:=False;
Form1.Edit3.Enabled := True;
Form2.Button1.Enabled:=True;
Form2.Button2.Enabled:=True;
Form1.Button5.Enabled:=True;
Form2.CheckBox1.Enabled:=True;
Form2.CheckBox2.Enabled:=True;
Form2.CheckBox3.Enabled:=True;
Form2.Edit1.Enabled:=True;
Form2.Edit2.Enabled:=True;
Form1.Button1.Enabled:=True;
Form1.Button3.Enabled:=True;
Form1.Button4.Enabled:=False;
if closedefname=0 then
begin
Form1.CheckBox1.Enabled:=True;
end;
Form1.Edit3.ReadOnly := False;
Form1.Edit3.SetFocus;
Form1.Edit3.SelectAll;
//log write
d :=d+1;
n := Form1.Edit3.Text;
if Form2.CheckBox3.Checked AND FileExists("log.txt") then
begin
if NOT Form2.CheckBox1.Checked then
begin
AssignFile(f, "log.txt");
Append(f);
writeln(f, "["+DateToStr(Date)+" "+TimeToStr(Time)+"]"+" "+"{"+"Загадано число - "+IntToStr(a)+". "+"Число угадано с "+IntToStr(d)+"-о раза игроком - "+n+"}");
CloseFile(f);
end
else
begin
AssignFile(f, "log.txt");
Append(f);
writeln(f, "["+DateToStr(Date)+" "+TimeToStr(Time)+"]"+" "+"{"+"Загадано число - "+IntToStr(a)+". "+"Число угадано с "+IntToStr(d)+"-о раза анонимным игроком}");
CloseFile(f);
end;
end;
c :=0;
AssignFile(f, "result.rsl");
Reset(f);
readln(f, p);
readln(f, nf);
CloseFile(f);
if (p = "11111") and (nf = "сброшено") then
begin
Form1.Edit2.Text := n+", Вы угадали! Это число - "+IntToStr(a)+"! Ваш результат - "+IntToStr(d)+"! (Вы первые, кто играет в эту игру после очистки данных)";
Rewrite(f);
writeln(f, IntToStr(d));
if Form2.CheckBox1.Checked then
begin
writeln(f, "Аноним1234");
Form1.Label1.Caption := "Вы были записаны как неизвестный поьзователь (это указано в настройках)";
end
else
begin
writeln(f, n);
end;
writeln(f, "//Изменять это нерекомендуется, хоть и можно! :)//");
CloseFile(f);
goto 1;
end;
if (StrToInt(p) > d) then
begin
if (nf="Аноним1234") then
begin
Form1.Edit2.Text := n+", Вы угадали! Это число - "+IntToStr(a)+"! Ваш результат - "+IntToStr(d)+"! Вы побили прошлый результат - "+p+" поставленный анонимным игроком";
end
else
begin
Form1.Edit2.Text := n+", Вы угадали! Это число - "+IntToStr(a)+"! Ваш результат - "+IntToStr(d)+"! Вы побили прошлый результат - "+p+" поставленный игроком - "+nf;
end;
Rewrite(f);
writeln(f, IntToStr(d));
if Form2.CheckBox1.Checked then
begin
writeln(f, "Аноним1234");
Form1.Label1.Caption := "Вы были записаны как анонимный поьзователь (это указано в настройках)";
end
else
begin
writeln(f, n);
end;
writeln(f, "//Изменять это нерекомендуется, хоть и можно! :)//");
CloseFile(f);
end
else
begin
if (nf="Аноним1234") then
begin
Form1.Edit2.Text := n+", Вы угадали! Это число - "+IntToStr(a)+"! Ваш результат - "+IntToStr(d)+"! Вы не смогли побить прошлый результат - "+p+" поставленный анонимным игроком ";
end
else
begin
Form1.Edit2.Text := n+", Вы угадали! Это число - "+IntToStr(a)+"! Ваш результат - "+IntToStr(d)+"! Вы не смогли побить прошлый результат - "+p+" поставленный игроком - "+nf;
end;
end;
end;
if (a < b) then
begin
Form1.Edit2.Text := "Это число меньше числа - "+ IntToStr(b);
d := d+1;
Form1.Edit1.SetFocus;
end;
if (a > b) then
begin
Form1.Edit2.Text := "Это число больше числа - "+ IntToStr(b);
d := d+1;
Form1.Edit1.SetFocus;
end;
Form1.Edit1.Clear;
Form1.LCDNumber1.Value:=IntToStr(d);
1: end;
А это уже http://serious.net.ru/other/chislFILEnoerr430.rar
Зацените такой ужас)))) давно я это делал
← →
Seriouss (2004-03-08 21:21) [58]нарисуй на бумажке
я и так некоторые моменты на бумажке рисую
← →
Seriouss (2004-03-08 22:23) [59]нуи
← →
Юрий Зотов © (2004-03-09 01:14) [60]Сколько здесь повторяющихся констант?
И зачем?
if (nf="Аноним1234") then
begin
Form1.Edit2.Text := n+", Вы угадали! Это число - "+IntToStr(a)+"! Ваш результат - "+IntToStr(d)+"! Вы побили прошлый результат - "+p+" поставленный анонимным игроком";
end
else
begin
Form1.Edit2.Text := n+", Вы угадали! Это число - "+IntToStr(a)+"! Ваш результат - "+IntToStr(d)+"! Вы побили прошлый результат - "+p+" поставленный игроком - "+nf;
← →
Cobalt © (2004-03-09 09:36) [61]Это отладка - сразу видно!
← →
Anatoly Podgoretsky © (2004-03-09 09:44) [62]И все равно не убираешь глобальные переменные даже там где они абсолютно лишнии. Form1 внутри обработчиков TForm1 не только лишнии, но еще и особо вредные.
← →
Seriouss (2004-03-09 17:54) [63]Anatoly Podgoretsky
я еще не исправлял ничего. это старая программа. очень старая)
← →
jack128 © (2004-03-09 18:30) [64]Вообще простое(хе-хе) правило: пиши программу так, чтобы в ней мог разобраться ДРУГОЙ программист ;-)
Ну а конкретно, например меня бесят эти Form1, Form2, Label1, Label2...Label10 и тд. Имена компонентов по умолчанию стоит оставлять только тогда, если ты к этим конпонентам не обращаешься.. Вообще стилевое оформление кода хромает на обе ноги ;-) Посмотри как оформлен код VCL. ИМХО исходники должны одним своим видом достовлять эстетическое наслаждение ;-)
Насчет "учу в школе франц" , так это не кого не волнует, если хочешь быть программистом, то англ. яз. до опрделенного уровня выучить придется ибо вся документация на нем..
ММП - встреча московских обитателей этого сайта..
← →
Digitman © (2004-03-09 18:50) [65]разводка чистой воды
← →
Sphinx © (2004-03-09 19:06) [66]> Seriouss (09.03.04 17:54) [63]
А почему не разместил на хосте типа serious.web.ur.ru
???
Господа модераторы Это не флуд!!! Просто почта типа <user>@r66.ru выделяется провайдером УралРелком выделяющим место и под домашние странички.
> Digitman © (09.03.04 18:50) [65]
> разводка чистой воды
Именно поэтому и спрашиваю, тоже считаю это разводом. Ну сомнительно что бы в 12 лет человек сидел и программировал. Я скорее поверю что Путин на выборах проиграет. :) Хе, а вдруг и в правду проиграет?
← →
Pat © (2004-03-09 19:47) [67]ИМХО, кто-то достал свои очень древние исходники и прикалывается
>я еще не исправлял ничего. это старая программа. очень старая)
>ps. мне 12 лет
>ps2. занимаюсь delphi 1 месяц
????
← →
Gero © (2004-03-09 19:51) [68]> Ну сомнительно что бы в 12 лет человек сидел и программировал
Я с 11 программирую
← →
Sphinx © (2004-03-09 20:01) [69]> Gero © (09.03.04 19:51) [68]
Я в целом об этом:
> Надо. а что еще делать?)))
В 12 лет я по двору рассекал, стройки ближайшие все облазил. Да мало ли чего еще вытворял? А сидеть дома у компа в таком возрасте черевато: сколиозом, плохим зрением и отсутствием нормального общения со сверстниками.
← →
SeriousSam © (2004-03-09 21:00) [70]А почему не разместил на хосте типа serious.web.ur.ru
у меня есть сайт на web.ur.ru, но где ты видел что б какой лиюо провайдер бесплатно давал php и mysql? ты заходил на главноу страницу - http://serious.net.ru ?
В 12 лет я по двору рассекал, стройки ближайшие все облазил.
в нашем дворе негде лазить. там одни пьяные отморозки
отсутствием нормального общения со сверстниками.
и знакомых у меня в этом районе нет. поэтому общатся могу тока в школе, по телефону и icq)
← →
SeriousSam © (2004-03-09 21:10) [71]сейчас делаю поиск в программе Base. скоро выложу)
← →
SeriousSam © (2004-03-09 21:30) [72]ММП - встреча московских обитателей этого сайта..
а я думал сайт какой то. даже на mmp.ru полез, а там фигня какая то)))))
← →
SeriousSam © (2004-03-09 22:04) [73]Поиск сделан. все кто интересуется, может скачать новую версия отсюда - http://serious.net.ru/other/Base.rar
код представлю ниже
ps. пытался отучиться все время писать Form6. ...
но неполучилось. так то просто набрал Form6. и вывалился список всего что на этой форме есть. и выбираешь из него. а так просто я все названия еще не запомнил)
вот код движка поиска
procedure TForm6.Button1Click(Sender: TObject);
var
rw: Integer;
cl: Integer;
cou: Integer;
i: Integer;
serok: Boolean;
begin
serok:=False;
cou:=0;
scl:=nil;
srw:= nil;
for i:=1 to Form6.StringGrid1.RowCount do Form6.StringGrid1.Cells[0,i]:="";
Form6.StringGrid1.RowCount:=2;
if Form6.Edit1.Text="" then ShowMessage("А что искать изволите? Ввидите нужный текст в поле "Что искать"")
else
begin
if Form6.RadioButton1.Checked then begin
for cl:=1 to Form1.StringGrid1.ColCount do begin
for rw:=1 to Form1.StringGrid1.RowCount do begin
if Form1.StringGrid1.Cells[cl,rw]=Form6.Edit1.Text then begin
cou:=cou+1;
SetLength(scl,cou+1);
SetLength(srw,cou+1);
scl[cou]:=cl;
srw[cou]:=rw;
Form6.StringGrid1.RowCount:=Form6.StringGrid1.RowCount+1;
Form6.StringGrid1.Cells[0,cou]:="Столбец - "+IntToStr(cl)+" Строка - "+IntToStr(rw);
Form6.Button3.Visible:=True;
seer:=1;
Serok:=True;
end;
end;
end;
end;
if Form6.RadioButton2.Checked then begin
for cl:=Form6.SpinEdit1.Value to Form6.SpinEdit1.Value do begin
for rw:=1 to Form1.StringGrid1.RowCount do begin
if Form1.StringGrid1.Cells[cl,rw]=Form6.Edit1.Text then begin
cou:=cou+1;
SetLength(scl,cou+1);
SetLength(srw,cou+1);
scl[cou]:=cl;
srw[cou]:=rw;
Form6.StringGrid1.RowCount:=Form6.StringGrid1.RowCount+1;
Form6.StringGrid1.Cells[0,cou]:="Столбец - "+IntToStr(cl)+" Строка - "+IntToStr(rw);
Form6.Button3.Visible:=True;
seer:=1;
Serok:=True;
end;
end;
end;
end;
if Form6.RadioButton3.Checked then begin
for cl:=1 to Form1.StringGrid1.ColCount do begin
for rw:=Form6.SpinEdit2.Value to Form6.SpinEdit2.Value do begin
if Form1.StringGrid1.Cells[cl,rw]=Form6.Edit1.Text then begin
cou:=cou+1;
SetLength(scl,cou+1);
SetLength(srw,cou+1);
scl[cou]:=cl;
srw[cou]:=rw;
Form6.StringGrid1.RowCount:=Form6.StringGrid1.RowCount+1;
Form6.StringGrid1.Cells[0,cou]:="Столбец - "+IntToStr(cl)+" Строка - "+IntToStr(rw);
Form6.Button3.Visible:=True;
seer:=1;
Serok:=True;
end;
end;
end;
end;
if NOT Serok then ShowMessage("По запросу - "+Form6.Edit1.Text+" ничего не найдено!")
else Form6.StringGrid1.RowCount:=Form6.StringGrid1.RowCount-1;
end;
end;
procedure TForm6.FormShow(Sender: TObject);
begin
Form6.RadioButton1.Checked:=True;
Form6.StringGrid1.Cells[0,0]:="Результаты поиска";
end;
procedure TForm6.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
seer:=ARow;
seec:=ACol;
end;
procedure TForm6.Button3Click(Sender: TObject);
var
myRect: TGridRect;
begin
myRect.Top := srw[seer];
myRect.Right := scl[seer];
myRect.Bottom := srw[seer];
myRect.Left := scl[seer];
Form1.StringGrid1.Selection:=myRect;
end;
end.
← →
Anatoly Podgoretsky © (2004-03-09 22:16) [74]В приведеном коде 26 раз встречается Form6.ххх которое можно безболезнено убрать. Вот если потихоньку будешь убирать, то возможно тогда кто ни будь захочет и в смысл вдумываться.
← →
SeriousSam © (2004-03-09 22:20) [75]Именно поэтому и спрашиваю, тоже считаю это разводом. Ну сомнительно что бы в 12 лет человек сидел и программировал. Я скорее поверю что Путин на выборах проиграет. :) Хе, а вдруг и в правду проиграет?
абсолюдная правда. вот сижу целый день и по клавишам стукаю))
← →
SeriousSam © (2004-03-09 22:22) [76]В приведеном коде 26 раз встречается Form6.ххх которое можно безболезнено убрать. Вот если потихоньку будешь убирать, то возможно тогда кто ни будь захочет и в смысл вдумываться.
цицирую [73]
ps. пытался отучиться все время писать Form6. ...
но неполучилось. так то просто набрал Form6. и вывалился список всего что на этой форме есть. и выбираешь из него. а так просто я все названия еще не запомнил)
← →
Piter © (2004-03-09 22:30) [77]>я еще не исправлял ничего. это старая программа. очень старая)
>ps. мне 12 лет
>ps2. занимаюсь delphi 1 месяц
Есть! Четко поймал :))) SeriousSam , темнишь :))
набрал Form6. и вывалился список всего что на этой форме есть
нажимай CTRL+[ПРОБЕЛ]
← →
SeriousSam © (2004-03-09 22:42) [78]Есть! Четко поймал :))) SeriousSam , темнишь :))
это старая программа. очень старая
вот вот. ей уже целый месяц! это моя первая прога на дельфи. а до это бейсиком занимался. но это совсем другое
← →
SeriousSam © (2004-03-09 22:54) [79]если кто скачал новую версию Base.rar качайте заново)) исправил один глюк
← →
SeriousSam © (2004-03-09 23:34) [80]и еще один))
Страницы: 1 2 3 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
Память: 0.67 MB
Время: 0.035 c