purebasic.info

PureBasic forum
Текущее время: Ср окт 17, 2018 10:03 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 128 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7, 8, 9  След.
Автор Сообщение
 Заголовок сообщения: Re: Как ускорить
СообщениеДобавлено: Вс сен 30, 2018 11:37 pm 
Не в сети
профессор

Зарегистрирован: Вс июл 05, 2009 5:55 pm
Сообщений: 220
Благодарил (а): 1 раз.
Поблагодарили: 7 раз.
Пункты репутации: 0
Цитата:
может всё таки и автору топика пользу таки принесёт, я во всяком случае хотел бы, что бы так было.
да будет так аминь :) .

За все время такое насмотрелся, просто приятней(и еще приятнее 8) ) стало, что на пурике кодирую и таких класных програмистов в друзъях иметь :P .

Ну, к делу.

Kuzmat как понять(слегка расплывчатое понятие для меня)
Цитата:
Если увеличите количество итераций теста (у вас проц быстрый), заметите что ASM вставка сливает всегда.


jobless писал(а):
p.s. Не 42 а даже 78
скакает сильно, у меня раз подпрыгнуло до 99 раз, там еще тормозит соединение строк, у пурика это особенность и чем больше строка тем болше тормоз, да и первый вариант из десятка асемблерных команд состоит, конешно-о будеть быстрей :roll:


newJS, смотри я тестил на скорость Base64, и немогу понять где тебя неустрояла скорость?
вот все даные перегнал 10 000 000, т.е. 10 метров, это не те 200 кило на которые вы указали как на тормоз и на моем двохядренном ПК это обошлось в 47 милиселунд, коди\енкодинг одинаков во времени оказался.
*если картинка гдето с иконку 1000 байт, то 100 000штук картинок обработает всего за 0.3сек.
*если картинка гдето на 10 000 байт, то 10 000 штук картинок за 0.281сек(это равносильно 100 метрам перегнать через базу)

вот для примера прога которой тестил, в конце прописал время в милисекундах.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
LN=10000000
Dim a.b(LN)
Dim a2.b(LN+LN)
 
For i=0 To LN
    a.b(i)=Random(255)
Next
 
t=ElapsedMilliseconds()
 
;Base64Encoder(@a2.b(0), 10000000, @a2.b(0), 15000000);Кодирует; 47
 
; For i=0 To 100000
;     Base64Encoder(@a2.b(0), 1000, @a2.b(0), 1500);Кодирует ;312;328;;
; Next
 
For i=0 To 100000
    Base64Decoder(@a2.b(0), 1000, @a2.b(0), 1500);Кодирует ;312;328;;
Next
 
; For i=0 To 10000
;     Base64Encoder(@a2.b(0), 10000, @a2.b(0), 15000); ;281;297;
; Next
 
; For i=0 To 10000
;     Base64Decoder(@a2.b(0), 10000, @a2.b(0), 15000); ;281;297;313
; Next
 
Debug ElapsedMilliseconds()-t



jobless писал(а):
и стиль автора(newJS): Биты > Строка > Перестановка_в_строке > Биты
Только похоже автору темы всё это уже не интересно
попробую переубедить.

newJS писал(а):
строковый вариант предложенной тобой базы
.
1-Тогда перегони в память, перекодируй и больше ненужно этих переделок с 3 на 4 байта.
2 вариант у Джобса табличный метод со сдвигом, довольно быстр аналоги используют в CRC при больших скоростях. Просто там где ты вырезаеш мидом там он вырезает так & %11111100, где единици то и читается, а потом сдвигает в нужном направлении на это указывают стрелки >> 2 т. е. на два бита в право по простому поделить на два в степени 2=4, << 4 это умножить на 2 в степени 4=16 но сдвиг быстрее на порядки.
3-если нужно шифровать то используй метод который я тебе дал с рандомным методом, если нада напомню прогу. Ну или XOR-ить пароль(тоже аналогично рандомному методу).
4-если нужно базу уменьшить то архивируй, у пурика для этого есть команды, если что Петр подскажет.


Цитата:
на вм80 я такое делал легко, а тут не понимаю как это можно провернуть, а главное у меня utf8, а не Ascii, по два байта, а не по одному
Base64 неимеет никакого отношения к кодировке, просто поверь в факт, тебе об это все говорят. Эта кодировка придумана чтобы переганять через текстовые каналы(редакторы, хетемеловские страници, маил) файлы,картинки и прочее что содержит кода меньше 32 и ноль в том числе который является для строки концом файла точнее строки, и для этого использует только латинский алфавит и циферки, по простой причине - через какие кодировки перегонять будишь латинице всегда каюк, а латинице и числам по барабану, а это гарантия сохранности файла. Потом эту латиницу переганяем в файл и получаем исходник например екзешник.
пример из справки пурика(а слова мои)
Код:
1
2
3
4
5
6
7
8
test.s = "Hello, Вася!" 
dec.s = Space(1024)
enc.s = Space(1024)
Debug Base64Encoder(@test, StringByteLength(test), @enc, 1024)
Debug enc
Debug Base64Decoder(@enc, StringByteLength(enc), @dec, 1024)
Debug dec
 


"Hello, Вася" переведет в "SGVsbG8sID8/Pz8h" это если в анси отражать
вот для наглядности с числами которые в текстовой редактор невсунуть, а используя базе64 легко и главное без искажений, заметь к кодировкам неимеет никакого отношения.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Dim s.b(30)
s.b(0)=0; заполняю то что в строку невозможно запхать, потому что есть признак конца символа
s.b(1)=10
s.b(2)=0; и еще ноль, конец строки
s.b(3)=23
 
Debug Base64Encoder(@s.b(0), 4, @s.b(10), 10)
For i=10 To 20;тут смотрим в строковом виде.
    Debug Chr(s.b(i))
Next
; или так
Debug PeekS(@s.b(10),-1,#PB_Ascii);почему тут в анси, так пурик настроен в юникоде и отобразит в дебугере неверно, но в памяти не в юни а в анси, поэтому отражаем в каком хочем считать, впрочем результат одинаков
 
Debug Base64Decoder(@s.b(10), 8, @s.b(20), 4)
For i=20 To 30
    Debug s.b(i)
Next


Хм, а я думаю чего это значек & непонятный. :?

_________________
искатель истины


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как ускорить
СообщениеДобавлено: Пн окт 01, 2018 12:24 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 618
Благодарил (а): 2 раз.
Поблагодарили: 34 раз.
Пункты репутации: 9
balex1978 писал(а):
Цитата:
Что реально работает без выделения памяти (4 символа в один байт структуры):?:
и это тоже 32 битную адресацию в один байт?
ps:У меня такое не работает........
забавеая штука, но мозг выносит полностъю.
чтоб понять, да еще на разных версиях пурика работает по разному(компилятор ругается везде по разному :shock: , что в одном проходит со свистом в другом затык и наоборот, пока схрестил както) да еще эта Ascii("1234") в старой версии ее нету, пока догнал чего с ней делать

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Structure ArrA
  a.a[0]
EndStructure
 
*x.ArrA = AllocateMemory(10);Ascii("1234")
*x.ArrA\a[0]=49
*x.ArrA\a[1]=50
*x.ArrA\a[2]=51
*x.ArrA\a[3]=52
 
For i=0 To 3
  Debug *x\a[i]
Next i
;FreeMemory(*x)

забавно.
Цитата:
32 битную адресацию в один байт
может я ошибаюсь но тут присвоен адрес не сюда a.a[0], а сюда *x.ArrA, правда с нолем недоганяю как это a.a[0], кажется догнал, размер неопределен и может иметь любое значение, как в строковой переменной, ее длинна может изменяться и указывать ее размер ненужно нигде .Если так a.a[2] получию ошибку -
[ОШИБКА] Указатель структуры больше допустимого диапазона.

Скобки [] это как dim () указывают массив в структуре а так как там 0 то доступа к другим данным нет.
А Ascii("1234") типа переводит утф16 в аски (больше255 номера нельзя так как там утф уже больше одного байта) :D
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
 
Procedure.s UTF16_ASCII(stroka.s)
!
!mov dword esi,[p.v_stroka]
!CMP byte[esi],0h
!Jz ljjn
!mov dword edi,[p.v_stroka]
!lfgv:
!mov byte al,[esi]
!mov byte[edi],al
!add dword esi,2
!add dword edi,1
!CMP word[esi],0h
!jnz lfgv
!mov word[edi],0h
!ljjn:
 ProcedureReturn stroka
EndProcedure
Procedure.i Memory_LenASCII(*r);количество символов ASCII
!mov eax,[esp+4]
!hutu:
!CMP byte ptr eax,0h
!Je rkl
!add eax,2
!CMP byte ptr eax-1,0h
!Jnz hutu
!sub eax,1
!rkl:
!SUB dword eax,[esp+4]
!retn 4
EndProcedure
 
 
Structure ArrA
  B0.a
  ;B1.a
  ;B2.a
  ;B3.a
EndStructure
Structure ArrA2
 B0.a[4]
 
EndStructure
 stroka.s=UTF16_ASCII("1234567890")
 
 
 *x.ArrA=@stroka
 For i=o To Memory_LenASCII(@stroka)
   Debug *x.ArrA\b0
   *x.ArrA+1
 Next
 
 *y.ArrA2=@stroka
    Debug *y.ArrA2\B0[0]
    Debug *y.ArrA2\B0[1]
    Debug *y.ArrA2\B0[2]
    Debug *y.ArrA2\B0[3]
 
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как ускорить
СообщениеДобавлено: Пн окт 01, 2018 1:25 am 
Не в сети
профессор

Зарегистрирован: Вс июл 05, 2009 5:55 pm
Сообщений: 220
Благодарил (а): 1 раз.
Поблагодарили: 7 раз.
Пункты репутации: 0
newJSвот тебе еще для понимания битовых операций которые у Джобса.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
a=%10010110
b=a<<3
;c=a*2*2*2
c=a * Pow(2,3);я писал про степень
 
Debug Bin(a)
Debug Bin(b)
Debug Bin(c)
; обратно так b=a>>3 это деление
 
; так вырезают те биты которые нам нужны, там ставим единици
a=%10010110
b=%10000010
;  10000010 получаем такое, проверяем
Debug Bin(a & b)
 
; у Джобса первые 6 байт которые ты режеш мидом описаны так & %11111100)
; и чтобы они выглядели в начале строки как это делает мид надо сдвинуть на право >> 2
c=(a & %11111100) >> 2 ; '%100101' остальное '10' одсекаем
Debug Bin(c)
 
; если нужно принудительно поставить единицу
Debug Bin(a | %01000000)
 
; ноль
Debug Bin(a & %11111101)
 
;инвертировать
Debug Bin(a ! %11111111)
; незабывать про скобки при вычислениях могут сыграть шутку
; незабывать что старший бит всегда меняет значение числа,
;и в битовых операциях тоже может пошутить до истерики.
;вот для 8 битового числа
d.b=%01111111; =127
d.b=%10000000; =128 но в реальности получим -128
d.b=%10000001; =129 но в реальности получим -127
Debug d.b
Debug Bin(d.b, #PB_Byte)
 
;тут вроде нормально
e.q=%0100000000000000000000000000000001110000000000000000000000000101
e.q<<1
Debug Bin(e.q, #PB_Quad )
e.q<<1
Debug Bin(e.q, #PB_Quad )
 
;а тут вот такие шутки
d.b=%10000001
a=d.b
Debug Bin(a, #PB_Quad )
;хотя все кажется верно с числами
Debug d.b
Debug a
 
;и ечё(в смысле ещё), вот надо отразить(настаиваю именно отобразить) число без знака, а нехочет, чё делаем...
 
d.b=%10000011; =131 но в реальности получим -125
;d.b=%00000011; розкоментируй для проверки должно выдавать 3
 
Debug d.b;
 
Debug d.b+(d.b&%10000000 *2)
Debug (d.b+256) & $FF;
Debug d.b & $FF; как один гордиливо писал 'используя преимущества СИ',
;а я смотрел и смеялся с таких преимуществ. Но тут использую это преимущество пурика.
 
;для других розрядностей нужно изменять числа, как это работает неспрашивай, путем проб и ошибок и еще чегото подмечено
;можно конечно использовать условия.
 
If d.b<0
    Debug d.b+256
Else
    Debug d.b
EndIf

сидел до часу ночи.

Сергейчик писал(а):
так как там 0 то доступа к другим данным нет.
Ну ты и кодиш, да еще на АСМе, я за тобой не успеваю. Почему нет доступа, ведь к этому *x.ArrA\a[3]=57 есть, а в структуре a.a[4](главное чтобы не меньше чем используется) или a.a[0] неимеет значения.
Меня тут прикалывает то что обычно узнаем адес структуры, а тут наоборот присваиваем, есть поле для экспериментов. :)

Да-мс, еще я там забыл розкоментировать освобождение памяти.

_________________
искатель истины


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как ускорить
СообщениеДобавлено: Пн окт 01, 2018 3:35 am 
Не в сети
профессор

Зарегистрирован: Вс июл 05, 2009 5:55 pm
Сообщений: 220
Благодарил (а): 1 раз.
Поблагодарили: 7 раз.
Пункты репутации: 0
пробовал извратится как запхать Ascii("1234") на старом, можно и через цикл конечно.

вот если пурик запустить в анси то строку можно так впхать, в юникоде, неудается(код непривожу-глючный).

короче вымотала этагадость меня и мистика всякая была и указывало на строки в которых ваще неможет быть ашибки ну типа эта Debug Hex(adr) в adr прописывало ноль и прога вылетала со свистом, пока таки докумекал, в строку изначально я то невыделяю память, вот она и 15 байтиков имеет, а я за эти заехал и наехал на пуриковские даные.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
Structure ArrA
  a.a[0]
EndStructure
 
*x.ArrA = AllocateMemory(100);Ascii("1234")
 *x.ArrA\a[0]=54
 
 
s$=Space(100)
PokeS(@s$,"aB23_Луна1234-+123456789fytjm мама мыла раму, раму мыла мама а",62,#PB_Ascii)
*x.ArrA = @s$
;ShowMemoryViewer(@*x\a[0], 500):CallDebugger
adr=@*x\a[0]
Debug Hex(adr)
ss$=PeekS(adr,-1,#PB_Ascii)
Debug     ss$
 
 



Помните глюки в коде, типа такие |!REG3XP3!> в коде, вот я написал пример и бац попалась эта зараза, на самом деле там написано так:
c=a *Pow(2,3)
Код:
1
c=a *|!REG3XP3!>Pow(2,3)


тут еще кучка для вычисления
c=a *Po()
Код:
1
c=a *|!REG3XP3!>Po()


c=a*Pg()
Код:
1
c=a*|!REG3XP3!>Pg()


*Pg()
Код:
1
*|!REG3XP3!>Pg()


*Lg()
Код:
1
*|!REG3XP3!>Lg()


*Lg(
Код:
1
*|!REG3XP3!>Lg(


* jg(
Код:
1
* jg(


*hg(
Код:
1
*|!REG3XP3!>hg(



чегото я розошелся слегка :roll: , похоже если есть знак умножения и после него идет масив или функция форум этот код слегка допиливает :lol: :shock: . нужно после умножения ставить пробел как и после весьмерки сразу скобку неставить будут смайлы в коде.
типа этого 8 ) 8) s$=Space( 8)

А можно немного форум допилить, ну неудобно както ставить кавычки [quote=, а надо [quote="", я лично долго немог понять как туда вставлять имя.

_________________
искатель истины


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как ускорить
СообщениеДобавлено: Пн окт 01, 2018 7:13 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 684
Благодарил (а): 75 раз.
Поблагодарили: 20 раз.
Пункты репутации: 5
я не программист, ни когда ни где не учился, а самому не всё удаётся понять
код без комментов для меня зачастую не понятен
но вы продолжайте между собой говорить, что нибудь да вытащу из ваших переговоров на вашем языке
а толк будет, в каком количестве и когда, это другой вопрос, мне спешить не куда

balex1978 массив в структуре немного не тоже самое в сравнении с объявлением массива, вроде это в справке написано
balex1978 писал(а):
newJS, смотри я тестил на скорость Base64, и немогу понять где тебя неустрояла скорость?

я базу упаковываю подругому, от base64 только принцип, отсюда и тормоза, и есть вариант где исходный файл соизмерим с упакованым, разница мизерная, а не 30%, но распаковка вешается, пока отказался
в общем велик изобретаю

всем спасибо, и давайте продолжайте


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как ускорить
СообщениеДобавлено: Пн окт 01, 2018 8:00 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вт апр 14, 2009 7:22 pm
Сообщений: 352
Благодарил (а): 1 раз.
Поблагодарили: 13 раз.
Пункты репутации: 0
balex1978 писал(а):
newJSвот тебе еще для понимания битовых операций которые у Джобса.
...

:mrgreen: Не сразу понял, какого Джобса в нашу дискуссию приплели, уж не Стива ли покойного...
JOB LESS это БЕЗРАБОТНЫЙ, коим я по факту и являюсь по причине слабого психического здоровья.
Группа была давно, потерял по причине жуткой унизительности процесса ежегодного подтверждения в этой области медицины.
За большие проекты не берусь из за не стабильной работоспособности, но если кому то, что то, ускорить как в этой теме без жёстких сроков реализации
и за вознаграждение мало мальски адекватное, всегда готов.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как ускорить
СообщениеДобавлено: Пн окт 01, 2018 8:05 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вт апр 14, 2009 7:22 pm
Сообщений: 352
Благодарил (а): 1 раз.
Поблагодарили: 13 раз.
Пункты репутации: 0
newJS писал(а):
я базу упаковываю по другому, от base64 только принцип

Так я и просил, что бы ты расписал по битно, что хочешь сделать, а base64 в моих примерах как точка отсчёта от алгоритма описанного в доступном источнике и наличия доверенных функций в пурике для проверки результата.
p.s. не хочешь публично, пиши в личку, будут силы, помогу разобраться.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как ускорить
СообщениеДобавлено: Пн окт 01, 2018 9:18 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 684
Благодарил (а): 75 раз.
Поблагодарили: 20 раз.
Пункты репутации: 5
jobless писал(а):
Группа была давно, потерял по причине жуткой унизительности процесса ежегодного подтверждения в этой области медицины.

мне больше повезло, у нас был "помошник" через которого всё делалось, пять лет деньги уходили, но была конечная цель получить бессрочную 2ю группу, если бы не этот "помошник", я бы тоже этот ад не выдержал, кого нибудь прибил бы

jobless писал(а):
p.s. не хочешь публично, пиши в личку, будут силы, помогу разобраться.

спасибо, но в этом нет надобности, принцип то один


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как ускорить
СообщениеДобавлено: Пн окт 01, 2018 9:25 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вт апр 14, 2009 7:22 pm
Сообщений: 352
Благодарил (а): 1 раз.
Поблагодарили: 13 раз.
Пункты репутации: 0
На месте таблиц Base64 в дата секции может быть что то любое другое
Приём решающий проблему формирования строки с произвольными байтами внутри без вызова кода в рантайм
ибо например в
Код:
1
#Str$ = ~"kdjfhljhsf\t,mcnvnx\\ldfkj;dkgjdf" 


я могу вставить только:
\a: alarm Chr(7)
\b: backspace Chr(8)
\f: formfeed Chr(12)
\n: newline Chr(10)
\r: carriage return Chr(13)
\t: horizontal tab Chr(9)
\v: vertical tab Chr(11)
\": double quote Chr(34)
\\: backslash Chr(92)
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 
;  Волшебные квадратные скобки
; Голова дырявая, забываю про них
EnableExplicit
Structure ArrA_E
  B64E.a[64]
EndStructure
Structure ArrA_D
  B64D.a[128]
EndStructure
Define *pe.ArrA_E = ?Base64E
Define *pd.ArrA_D = ?Base64D
Define i.a
For i = 0 To 63
  Debug Chr(*pe\B64E[i])
Next
For i = 0 To 127
  If *pd\B64D[i] <> 99
    Debug Chr(*pe\B64E[*pd\B64D[i]])
  EndIf  
Next
End
DataSection
  Base64E:
 ;-------------------------------------------------------------------------------------------------------------- ;A-Z
  ;       41  42  43  44  45  46  47  48  49  4A  4B  4C  4D  4E  4F  50  51  52  53  54  55  56  57  58  59  5A
  ;        0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25
  Data.a  65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90
  ;-------------------------------------------------------------------------------------------------------------- ;a-z
  ;       61  62  63  64  65  66  67  68  69  6A  6B  6C  6D  6E  6F  70  71  72  73  74  75  76  77  78  79  7A
  ;       26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51
  Data.a  97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122
  ;-------------------------------------------------------------------------------------------------------------- ;0-9
  ;       30  31  32  33  34  35  36  37  38  39                                                                  
  ;       52  53  54  55  56  57  58  59  60  61
  Data.a  48, 49, 50, 51, 52, 53, 54, 55, 56, 57  
  ;--------------------------------------------------------------------------------------------------------------- ;+\
  ;       2B  2F                                                                                                    
  ;       62  63
  Data.a  43, 47
  ;---------------------------------------------------------------------------------------------------------------
  Base64D:
 ;       0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
  Data.a 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99 ;0
  Data.a 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99 ;1
  Data.a 99,99,99,99,99,99,99,99,99,99,99,62,99,99,99,63 ;2 +\
  Data.a 52,53,54,55,56,57,58,59,60,61,99,99,99,99,99,99 ;3 0123456789
  Data.a 99,00,01,02,03,04,05,06,07,08,09,10,11,12,13,14 ;4 ABCD...
  Data.a 15,16,17,18,19,20,21,22,23,24,25,99,99,99,99,99 ;5 PQRS...
  Data.a 99,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40 ;6 abcd...
  Data.a 41,42,43,44,45,46,47,48,49,50,51,99,99,99,99,99 ;7 pqrs
EndDataSection



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как ускорить
СообщениеДобавлено: Пн окт 01, 2018 6:24 pm 
Не в сети
профессор

Зарегистрирован: Вс июл 05, 2009 5:55 pm
Сообщений: 220
Благодарил (а): 1 раз.
Поблагодарили: 7 раз.
Пункты репутации: 0
newJS писал(а):
массив в структуре немного не тоже самое в сравнении с объявлением массива
Я тоже нигде неучился и пишу сам по себе. Я непойму о каком масиве в структуре ты говориш, может масив структур, и где в коде ты это показал(пример дай), и даже с этим разберемся.
Да и в такие структуры с масивами ты както пихаеш даные, ну надеюсь в них ты хоть нехраниш в базе64(я неимею введу ту базу которую мы вместе делали), а потом при надобности перекодируеш в картинки, да и скорость там огромная я привел пример и тесты, просто непойму, что за велосипед изобретаеш, какая цель, сокрыть даные от грабежа(так уже есть вариант той базы), а если с паммяти держать шифровку, а потом разпаковать в картинку, то легко снимается снимок с экрана.
Я тебе когда будет время покажу паралель твоих мид вырезаний и тех сдвигов которые делает прога jobless


jobless писал(а):
Не сразу понял, какого Джобса в нашу дискуссию приплели, уж

А а а а, ну и насмешили :lol: вы меня, долго я смеялся, даже сейчас пишу и хохочу :D .
На повышение пошли, поздравляю :P . Я конечно дико извеняюсь за переменивание вашей личсности :roll:
Скажите какая цель у этой проги что вы написали, а то я непойму. Может как быстро запхать в структуру даные например с болока дата секции, если да то newJS ты мож это использовать для быстрой вставки. Правда я сомневаюсь, если даные в таком виде и я чегото в структуре сделаю с этими даными, то что с дата секцией произойдет, тоже наверноётся или как(пока непроверял)?

К большому сожалению так и происходит, изменения затрагивают дата секцию и меняют ее значения на новые. если перед End в ваше проге вставить этот код то результат кажется очевиден, хотя сама такая возможность мне когдато нужна была, правда не для дата секции :) .
Код:
1
2
3
4
5
6
7
8
9
Restore Base64E
Read.a a
Debug a
Debug *pe\B64E[0]
*pe\B64E[0]=12
Debug *pe\B64E[0]
Restore Base64E
Read.a a
Debug a


_________________
искатель истины


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как ускорить
СообщениеДобавлено: Пн окт 01, 2018 7:30 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вт апр 14, 2009 7:22 pm
Сообщений: 352
Благодарил (а): 1 раз.
Поблагодарили: 13 раз.
Пункты репутации: 0
balex1978 писал(а):
Скажите какая цель у этой проги что вы написали, а то я не пойму.

если вопрос про самый последний фрагмент, то это просто иллюстрация, того, что при всяких кодировках рас кодировках можно избежать необходимость подготовки нужных таблиц в рантайме.
Т.е. например кодировщик оформлен как библиотека и в ней не нужно перед началом работы формировать нужные таблицы, код загрузился и всё уже готово.
Но в принципе так называемые "базированные структуры" термин в моём лексиконе ещё с рубежа 70х-80х прошлого века из PL/1(в ассемблерах это по разному но похоже называется )
по сути упрощение доступа к области памяти по смещению от адреса начала структуры и определяет содержимое этой области. В других языках при этом можно до бита опускаться, т.е. описывать поля меньше байта или не кратно байта и манипулировать ими потом.
В PL/1 вообще замечательная "фича" была: оператор
structura1 = structura2 by name
И если в S2 описаны битовые поля а в S1 целые или другие стандартные типы компилятор сам растаскивал битовые фрагменты по полям стандартных типов совпадающих по именам а те у которых имена не совпадали оставлял
не изменными.
Таким образом сочетание указателей и структуры как описателя кто за кем и по какому смещению лежит, мы просто избавляем себя от необходимости помнить 32х или 64х разрядная система, т.е. третье целое он начала это через 8 байт или через 16. главное описать всё в нужном порядке и указателю присвоить правильный адрес области из которой или в которую мы что то будем писать/читать.
Структура как переменная, да ещё содержащая сложные агрегатные(строка без {} в структуре тоже не строка в стиле асма или си) типы внутри это стиль бэйсика и на мой взгляд он облегчает жизнь, но напрочь запутывает новичков не видящих за этим низкоуровневой реализации. Например sizeof(структуры со сложными типами) это вещь в себе.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как ускорить
СообщениеДобавлено: Вт окт 02, 2018 7:22 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 684
Благодарил (а): 75 раз.
Поблагодарили: 20 раз.
Пункты репутации: 5
ты про это спрашивал, про это и говорю
Structure
mass[0]
EndStructure

Dim mass(0)



вчера только бегло посмотрел твою микро статью про сдвиги, похоже это именно то чего мне не хватало, и спать завалился :D , может сегодня поковыряю коды, много всего, не знаю с чего начинать


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как ускорить
СообщениеДобавлено: Вт окт 02, 2018 6:05 pm 
Не в сети
профессор

Зарегистрирован: Вс июл 05, 2009 5:55 pm
Сообщений: 220
Благодарил (а): 1 раз.
Поблагодарили: 7 раз.
Пункты репутации: 0
Сергейчик писал(а):
Вот только если прога в юникоде она:
;Len()считает по 2 байта
;MemoryStringLength()считает по 2 байта
;MemorySize()походу тоже не пременима

Вот держи, она определяет сколько в памяти занял текст StringByteLength(), если в память записать в анси и в этой функции указать тоже кодировку анси то число должны совпадать

Код:
1
2
3
4
5
6
7
8
s$="123 Сергейчик12365456"
Debug StringByteLength(s$)
;13 выдаст сколько байт в Анси
;26 в уникоде
 
Debug Len(s$)
Debug MemoryStringLength(@s$);чего считает я непонял, тестил и непонял отличия от Len(s$)
 



Пётр скажы чего значит сие MemoryStringLength и чем отличается од Len() :?:

дальше я помойму уже замучил комп или себя.
Хочу загнать строку в переменную строковую в анси ипри компиляторе уникоде
Код:
1
2
3
4
5
s$="123 Длина":s2$=""
;PokeS(@s2$,s$,#PB_Ascii)
s2$=PeekS(@s$,#PB_Ascii)
Debug s2$
ShowMemoryViewer(@s2$,200)


он в дебугере выдает - 123 Длина
для строки
PokeS(@s2$,s$,#PB_Ascii)
003C1ED0 31 00 32 00 33 00 20 00 14 04 3B 04 38 04 3D 04 1.2.3. ...;.8.=.
003C1EE0 30 04 00 00 00 10 00 00 78 01 3C 00 78 01 3C 00 0.......x.<.x.<.

PokeS(@s2$,s$,#PB_Unicode)
003C1ED0 31 00 32 00 33 00 20 00 14 04 3B 04 38 04 3D 04 1.2.3. ...;.8.=.
003C1EE0 30 04 00 00 00 10 00 00 78 01 3C 00 78 01 3C 00 0.......x.<.x.<.


для строки s2$=PeekS(@s$,#PB_Ascii)
003C5F30 31 00 32 00 33 00 20 00 14 04 3B 04 38 04 3D 04 1.2.3. ...;.8.=.
003C5F40 30 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0...............

s2$=PeekS(@s$,#PB_Unicode)
003C5F30 31 00 32 00 33 00 20 00 14 04 3B 04 38 04 3D 04 1.2.3. ...;.8.=.
003C5F40 30 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0...............
003C5F50 16 04 05 00 00 10 00 00 78 01 3C 00 78 01 3C 00 ........x.<.x.<.


а для s2$=PeekS(@s$,#PB_UTF8)
003C1ED0 31 00 32 00 00 00 3C 00 00 00 00 00 00 00 00 00 1.2...<.........
003C1EE0 24 02 03 00 00 10 00 00 78 01 3C 00 78 01 3C 00 $.......x.<.x.<.

PokeS(@s2$,s$,#PB_UTF8)
003C1ED0 31 00 32 00 00 00 3C 00 00 00 00 00 00 00 00 00 1.2...<.........
003C1EE0 24 02 03 00 00 10 00 00 78 01 3C 00 78 01 3C 00 $.......x.<.x.<.

Что это :shock:
такое впечатление что крыша поехала, только надо разбрать у кого :?
Точно у него, в другом пурике ответ 123 Äëèíà для s2$=PeekS(@s$,#PB_Ascii).
003C5F30 31 00 32 00 33 00 20 00 C4 00 EB 00 E8 00 ED 00 1.2.3. .Ä.ë.è.í.
003C5F40 E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 à...............
003C5F50 16 04 05 00 00 10 00 00 78 01 3C 00 78 01 3C 00 ........x.<.x.<.

Всеодно непойму почему в уникоде точнее подва байта через ноли если должен так 31 32 33 20
и через масив так само и в память...

а это совсем странно, вызывает ошибку в переменной Debug s$

Код:
1
2
3
4
5
6
7
8
M = AllocateMemory(100)
s$="123 Длина":s2$=""
 
PokeS(@M,s$);,#PB_Ascii):
;s2$=PeekS(@s$,#PB_Ascii)
Debug s$; тут вызывает ошибку
Debug s2$
ShowMemoryViewer(@M,200)


Invalid memory access. (read error at address 2097203)


Нужно перезагружать, во допрограмровалси :lol: и самому на отдых :)

_________________
искатель истины


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как ускорить
СообщениеДобавлено: Вт окт 09, 2018 8:51 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 684
Благодарил (а): 75 раз.
Поблагодарили: 20 раз.
Пункты репутации: 5
jobless таки сделал что нужно, и разрешил выложить его код
это рабочие функции упаковки/распаковки base64, вместо встроенных, встроенные не позволяют делать что хочется, а с этими можно делать на что фантазии хватит
если бы были ещё и коменты, было бы совсем хорошо, коменты есть, но не везде


b64ed.pbi
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
 
    EnableExplicit
    Structure C3
      B0.a
      B1.a
      B2.a
    EndStructure
    Structure C4
      B0.a
      B1.a
      B2.a
      B3.a
    EndStructure
    Structure ArrA_E
      B64E.a[64]
    EndStructure
    Structure ArrA_D
      B64D.a[128]
    EndStructure
     
    Global *pe.ArrA_E = ?Base64E
    Global *pd.ArrA_D = ?Base64D
    Global ZR.a       = Asc("=")
     
    Procedure B64EB(*InputBuffer, InputSize, *OutputBuffer, OutputSize)
      Protected *pC3.C3 = *InputBuffer
      Protected *pC4.C4 = *OutputBuffer
      Protected k3   = InputSize / 3
      Protected k3_  = InputSize % 3
      Protected k4   = k3 * 4
      Protected i3
      For i3 = 1 To k3
        *pC4\B0 = *pe\B64E[(*pC3\B0 & %11111100) >> 2]
        *pC4\B1 = *pe\B64E[((*pC3\B0 & %00000011) << 4) | ((*pC3\B1 & %11110000) >> 4)]
        *pC4\B2 = *pe\B64E[((*pC3\B1 & %00001111) << 2) | ((*pC3\B2 & %11000000) >> 6)]
        *pC4\B3 = *pe\B64E[*pC3\B2 & %00111111]
        *pC3 + 3
        *pC4 + 4
      Next
      Select k3_
        Case 1
          *pC4\B0 = *pe\B64E[(*pC3\B0 & %11111100) >> 2]
          *pC4\B1 = *pe\B64E[(*pC3\B0 & %00000011) << 4]
          *pC4\B2 = ZR
          *pC4\B3 = ZR
          k4 + 4
        Case 2
          *pC4\B0 = *pe\B64E[(*pC3\B0 & %11111100) >> 2]
          *pC4\B1 = *pe\B64E[((*pC3\B0 & %00000011) << 4) | ((*pC3\B1 & %11110000) >> 4)]
          *pC4\B2 = *pe\B64E[(*pC3\B1 & %00001111) << 2]
          *pC4\B3 = ZR
          k4 + 4
      EndSelect  
      ProcedureReturn k4
    EndProcedure  
    Procedure B64DB(*InputBuffer, InputSize, *OutputBuffer, OutputSize)
      Protected *pC3.C3 = *OutputBuffer
      Protected *pC4.C4 = *InputBuffer
      Protected k4   = (InputSize / 4) - 1
      Protected k3   = k4 * 3
      Protected i4
      For i4 = 1 To k4
        *pC3\B0 = ((*pd\B64D[*pC4\B0] & %00111111) << 2) | ((*pd\B64D[*pC4\B1] & %00110000) >> 4)
        *pC3\B1 = ((*pd\B64D[*pC4\B1] & %00001111) << 4) | ((*pd\B64D[*pC4\B2] & %00111100) >> 2)
        *pC3\B2 = ((*pd\B64D[*pC4\B2] & %00000011) << 6) | ((*pd\B64D[*pC4\B3] & %00111111) >> 0)
        *pC3 + 3
        *pC4 + 4
      Next
      If     ((*pC4\B2 <> ZR) And (*pC4\B3 <> ZR))
        *pC3\B0 = ((*pd\B64D[*pC4\B0] & %00111111) << 2) | ((*pd\B64D[*pC4\B1] & %00110000) >> 4)
        *pC3\B1 = ((*pd\B64D[*pC4\B1] & %00001111) << 4) | ((*pd\B64D[*pC4\B2] & %00111100) >> 2)
        *pC3\B2 = ((*pd\B64D[*pC4\B2] & %00000011) << 6) | ((*pd\B64D[*pC4\B3] & %00111111) >> 0)
        k3 + 3
      ElseIf ((*pC4\B2 <> ZR) And (*pC4\B3 =  ZR))
        *pC3\B0 = ((*pd\B64D[*pC4\B0] & %00111111) << 2) | ((*pd\B64D[*pC4\B1] & %00110000) >> 4)
        *pC3\B1 = ((*pd\B64D[*pC4\B1] & %00001111) << 4) | ((*pd\B64D[*pC4\B2] & %00111100) >> 2)
        k3 + 2
      ElseIf ((*pC4\B2 =  ZR) And (*pC4\B3 =  ZR))
        *pC3\B0 = ((*pd\B64D[*pC4\B0] & %00111111) << 2) | ((*pd\B64D[*pC4\B1] & %00110000) >> 4)
        k3 + 1
      EndIf  
      ProcedureReturn k3
    EndProcedure  
     
    DataSection
      Base64E:
     ;-------------------------------------------------------------------------------------------------------------- ;A-Z
      ;       41  42  43  44  45  46  47  48  49  4A  4B  4C  4D  4E  4F  50  51  52  53  54  55  56  57  58  59  5A
      ;        0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25
      Data.a  65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90
      ;-------------------------------------------------------------------------------------------------------------- ;a-z
      ;       61  62  63  64  65  66  67  68  69  6A  6B  6C  6D  6E  6F  70  71  72  73  74  75  76  77  78  79  7A
      ;       26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51
      Data.a  97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122
      ;-------------------------------------------------------------------------------------------------------------- ;0-9
      ;       30  31  32  33  34  35  36  37  38  39                                                                  
      ;       52  53  54  55  56  57  58  59  60  61
      Data.a  48, 49, 50, 51, 52, 53, 54, 55, 56, 57  
      ;--------------------------------------------------------------------------------------------------------------- ;+\
      ;       2B  2F                                                                                                    
      ;       62  63
      Data.a  43, 47
      ;---------------------------------------------------------------------------------------------------------------
      Base64D:
     ;       0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
      Data.a 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99 ;0
      Data.a 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99 ;1
      Data.a 99,99,99,99,99,99,99,99,99,99,99,62,99,99,99,63 ;2 +\
      Data.a 52,53,54,55,56,57,58,59,60,61,99,99,99,99,99,99 ;3 0123456789
      Data.a 99,00,01,02,03,04,05,06,07,08,09,10,11,12,13,14 ;4 ABCD...
      Data.a 15,16,17,18,19,20,21,22,23,24,25,99,99,99,99,99 ;5 PQRS...
      Data.a 99,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40 ;6 abcd...
      Data.a 41,42,43,44,45,46,47,48,49,50,51,99,99,99,99,99 ;7 pqrs
    EndDataSection
 
 


Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 
    EnableExplicit
    ; ----------------------------------------------------------------
    IncludeFile "b64ed.pbi"
    ; -----------------------------------------------------------------
    Define WorkPath.s   = "E:\Work\"  ; !!!!!!!!!!! Заменить на свой
    Define ImageName0.s = "Test0.bmp"
    Define ImageName1.s = "Test1.bmp"
    Define ImageName2.s = "Test2.bmp"
    Define b64Name.s    = "Test0.b64"
    Define flsz_bmp
    Define flsz_b64
    Define *pb_bmp
    Define *pb_b64
    Define W
    Define H
    ; ----------------------------------------------------------------
    ; Создаём картинку для теста и сохраняем её через SaveImage в файл
    ; ----------------------------------------------------------------
    W = Random(200,20)
    H = Random(200,20)
    CreateImage(0, W, H, 24, RGB(Random(255), Random(255), Random(255)))
    StartDrawing(ImageOutput(0))
    Box(W/4, H/4, W/2, H/2, RGB(Random(255), Random(255), Random(255)))
    StopDrawing()
    SaveImage(0,WorkPath+ImageName0)
    FreeImage(0)
    ; ----------------------------------------------------------------
    ; Читаем ранее созданный файл в буфер упаковываем буфер по base64
    ; и записываем полученный буфер в файл с расширением .b64
    ; ----------------------------------------------------------------
    flsz_bmp = FileSize(WorkPath+ImageName0)
    *pb_bmp  = AllocateMemory(flsz_bmp)
    OpenFile(0,WorkPath+ImageName0,#PB_File_NoBuffering)
    ReadData(0, *pb_bmp, flsz_bmp)
    CloseFile(0)
    flsz_b64 = ((flsz_bmp/3) * 4) + 10 ; +10 для страховки
    *pb_b64  = AllocateMemory(flsz_b64)
    ;flsz_b64 = Base64EncoderBuffer(*pb_bmp, flsz_bmp, *pb_b64, flsz_b64) ; flsz_b64 получит реальный размер
    flsz_b64 = B64EB(*pb_bmp, flsz_bmp, *pb_b64, flsz_b64) ; flsz_b64 получит реальный размер
    CreateFile(0, WorkPath+b64Name, #PB_File_NoBuffering)
    WriteData(0, *pb_b64, flsz_b64)
    CloseFile(0)
    FreeMemory(*pb_bmp)
    FreeMemory(*pb_b64)
    ; ----------------------------------------------------------------
    ; Читаем ранее упакованный файл и распаковываем в буфер
    ; Буфер в точности заполнен содержимым ранее созданного файла bmp
    ; ----------------------------------------------------------------
    flsz_b64 = FileSize(WorkPath+b64Name)
    OpenFile(0, WorkPath+b64Name, #PB_File_NoBuffering)
    *pb_b64 = AllocateMemory(flsz_b64)
    ReadData(0, *pb_b64, flsz_b64)
    flsz_bmp = (flsz_b64/4) * 3 + 10 ; +10 для страховки
    *pb_bmp = AllocateMemory(flsz_bmp)
    ;flsz_bmp = Base64DecoderBuffer(*pb_b64, flsz_b64, *pb_bmp, flsz_bmp) ; flsz_bmp получит реальный размер
    flsz_bmp = B64DB(*pb_b64, flsz_b64, *pb_bmp, flsz_bmp) ; flsz_bmp получит реальный размер
    CloseFile(0)
    FreeMemory(*pb_b64)
    ; ----------------------------------------------------------------
    ; В подтверждение, что буфер имеет правильное содержимое,
    ; делаем catch и затем save
    ; ----------------------------------------------------------------
    CatchImage(0, *pb_bmp)
    SaveImage(0, WorkPath+ImageName1)
    ; ----------------------------------------------------------------
    ; И для ещё одной проверки просто записываем буфер в файл .bmp
    ; ----------------------------------------------------------------
    CreateFile(0,WorkPath+ImageName2, #PB_File_NoBuffering)
    WriteData(0, *pb_bmp, flsz_bmp)
    CloseFile(0)
    FreeMemory(*pb_bmp)
    ; ----------------------------------------------------------------
    ; Наблюдаем в папке WorkPath 4 файла
    ; Test0.bmp созданный изначально через SaveImage
    ; Test0.b64 упакованный по алгоритму base64
    ; и абсолютно такие же как Test0.bmp
    ; Test1.bmp созданный через catch и затем save
    ; Test2.bmp простое сохранение раскодированного буфера в файл
    ; ----------------------------------------------------------------
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Как ускорить
СообщениеДобавлено: Вт окт 09, 2018 9:13 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вт апр 14, 2009 7:22 pm
Сообщений: 352
Благодарил (а): 1 раз.
Поблагодарили: 13 раз.
Пункты репутации: 0
newJS писал(а):
..... встроенные не позволяют делать что хочется, .....


Че Те Надо (с)Балаган Лимитед
Провожал ты меня из тенистого сада,
Вдруг взяла тебя нервенная дрожь
Ты скажи, ты скажи, че те надо, че те надо
Может дам, может дам че ты хошь...


Что бы уменьшить степень абсурда темы раскрой же наконец секрет: делать что хочется

Я на каждую строчку трактат в комментах напишу, если тайну раскроешь.
А пока я боюсь, что если скажешь что хотел сделать изначально, я тебе отвечу, что всё нужно выбросить и обойтись совсем одной строчкой и естественно ее в приведённых примерах нет.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 128 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7, 8, 9  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Bing [Bot], Google [Bot] и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB