Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Тест подсветки 
:(
    Опции темы
Alex
Дата 7.10.2004, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Эта тема создана по просьбе sergej.z http://forum.vingrad.ru/index.php?showtopi...ad=#entry229608 для тестирования подсветки. Убедительная просьба к модераторам не удалять и не закрывать эту тему.

Код
type  
 EServerThread = class( Exception );  
 // serverthread это потомок TServerClientThread  
 TServerThread = class( TServerClientThread )  
   private  
     fSocketStream : TWinSocketStream;  
   public  
     procedure ClientExecute; override;  
     // ClientExecute отменяет  
     // TServerClientThread.ClientExecute  
     // и содержит код, который  
     // выполняется при старте потока  
 end;  



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
sergejzr
Дата 7.10.2004, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 1
Всего: 360



Кстати, пользуясь возможностью, предлагаю всем кто баги нашёл постить сюда свои примеры smile.gif


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Pakshin A. S.
Дата 7.10.2004, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Код

0 пробелов
1 пробел
 2 пробела
  3 пробела
   4 пробела

Так и не сделано...
PM   Вверх
sergejzr
Дата 7.10.2004, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 1
Всего: 360



Pakshin A. S., пожалуйста, пользуйся тестовой страничкой! Именно там баги исправляются как только появляется сообщение об этом smile.gif

http://www.iwi-iuk.org:8081/tests/vingrad/...t=0#entry230002
Добавлено @ 21:03
Но ты прав там ещё где то жучок... будем вытравливать smile.gif

Это сообщение отредактировал(а) sergej.z - 7.10.2004, 20:56


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
sergejzr
Дата 7.10.2004, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 1
Всего: 360



Мда.. такое не вытравишь....

Вот взгляни, как различные браузеру отдают твой код....
Видишь. Во первых все по разному, а во вторых ИЕ просто не отдаёт первый пробел...
Ничего не могу поделать... подсветка ни при чём.. Пользуйся табами
Добавлено @ 21:21
Вот поросята нестандартные!

Это сообщение отредактировал(а) sergej.z - 7.10.2004, 21:21

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  test2.gif


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Girder
Дата 8.10.2004, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Подсветка Index-а не везде бывает.
Код
public
   { Public declarations }
   function XXX(Index:integer); //Index - Здесь не должен подсвечиваться
   property Items[Index:integer]:TTB_Info read LoadIndexButton;
 end;


Плюс не нравиться что аsm код подсвечивается в delphi разделе.


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Pakshin A. S.
Дата 8.10.2004, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Цитата(sergej @ 7.10.2004, 22:20)
Пользуйся табами

По табу происходит табуляция на другой элемент страници, а именно на кнопку "Отправить"... sad.gif
PM   Вверх
sergejzr
Дата 8.10.2004, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 1
Всего: 360



Girder к сож. такое наверное не станет реальным. Найти такую конструкцию сегодняшней подсветкой практ. невозможно.

ПС:
Ну вот мы и добираемся потихоньку до границ возможного smile.gif



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
p0s0l
Дата 16.10.2004, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Код

// delphi reserved words
and array as
begin  case class const
constructor  destructor dispinterface div
do downto else end
except exports file finalization
finally for function goto
if implementation in inherited
initialization inline interface is
label library mod nil
not object of or
out packed procedure program
property raise record repeat
resourcestring set shl shr
string then threadvar to
try type unit until
uses var while with
xor

message
abstract override reintroduce dynamic overload virtual platform deprecated
cdecl stdcall register pascal safecall
private, protected, public, published, automated
assembler asm ... mov eax, ebx end

// не должны подсвечиваться
index default nodefault stored read write implements

// а сейчас должны подсвечиваться
property index default nodefault stored read write implements

// тест комментариев
{ comment 1 }
{ comment2 begin
// comment
(* comment
comment2 end }
normal code
(* comment4
// cooment4 end*) normal code

// тест директив
{$DIRECTIVE}
{$ directive}
{ $Comment}
(*$Directive }
*)
(* $ comments *)

program apodfpadf;
begin
// не должны подсвечиваться:
 true false
 break continue exit
 name

// types, в Дельфи не подсвечиваются
byte word integer cardinal shortint smallint int64 longword
dword
char ansichar widechar
shortstring ansistring widestring
boolean bytebool wordbool longbool
bool
real real48 single double extended comp currency
pointer pchar pwidechar
variant olevariant

// проверка асм-инструкций в дельфи-коде
 aaa  aad  aam  aas  adc  add  and
 bound  bsf  bsr  bswap  bt  btc  btr
 bts  call  cbw  cwde  clc  cld  cli
 cmc  cmp  cmps/cmpsb/cmpsw/cmpsd
 cmpxchg  cwd  cdq  daa
 das  dec  div  enter  hlt  idiv  imul
 in  inc  ins/insb/insw/insd  int  into  iret/iretd
 jcxz  jecxz  jmp  lahf  lds  les  lfs
 lgs  lss  lea  leave  lgdt  lidt  lods/lodsb/lodsw/lodsd
 loop  loope  loopz  loopne  loopnz  
 mov  movs/movsb/movsw/movsd movsx  movzx  
 mul  neg  nop  not  or
 out  outs  pop  popa  popad  popf  popfd
 push  pusha  pushad  pushf  pushfd  rcl  rcr
 rep/repe/repz/repne/repnz  ret/retf  rol  ror  sahf  sal  sar
 sbb  scas/scasb/scasw/scasd  setcc  sgdt  sidt  shl  shld
 shr  shrd  stc  std  sti  stos/stosb/stosw/stosd  sub
 test  xadd  xchg  xlat/xlatb  xor

// проверка подсветки асм-регистров
asm
 al ah bl bh cl ch dl dh
 ax bx cx dx bp sp si di
 eax ebx ecx edx ebp esp esi edi
 cs ds es ss fs gs
end;

// проверка подсветки асм-инструкций
asm
 aaa  aad  aam  aas  adc  add  and
 bound  bsf  bsr  bswap  bt  btc  btr
 bts  call  cbw  cwde  clc  cld  cli
 cmc  cmp  cmps/cmpsb/cmpsw/cmpsd
 cmpxchg  cwd  cdq  daa
 das  dec  div  enter  hlt  idiv  imul
 in  inc  ins/insb/insw/insd  int  into  iret/iretd
 jcxz  jecxz  jmp  lahf  lds  les  lfs
 lgs  lss  lea  leave  lgdt  lidt  lods/lodsb/lodsw/lodsd
 loop  loope  loopz  loopne  loopnz  
 mov  movs/movsb/movsw/movsd movsx  movzx  
 mul  neg  nop  not  or
 out  outs  pop  popa  popad  popf  popfd
 push  pusha  pushad  pushf  pushfd  rcl  rcr
 rep/repe/repz/repne/repnz  ret/retf  rol  ror  sahf  sal  sar
 sbb  scas/scasb/scasw/scasd  setcc  sgdt  sidt  shl  shld
 shr  shrd  stc  std  sti  stos/stosb/stosw/stosd  sub
 test  xadd  xchg  xlat/xlatb  xor
end;

// как дельфи подсвечивается в асм-частях
asm
and array as
begin  case class const
constructor  destructor dispinterface div
do downto else
except exports file finalization
finally for function goto
if implementation in inherited
initialization inline interface is
label library mod nil
not object of or
out packed procedure program
property raise record repeat
resourcestring set shl shr
string then threadvar to
try type unit until
uses var while with
xor
message
abstract overridre reintroduce dynamic overload virtual platform deprecated
cdecl stdcall register pascal safecall
private, protected, public, published, automated
assembler asm
index default nodefault stored read write implements

end;

// не должны светится
asm
model dup equ org use16 use32 format include invoke import section entry readable writeable code library directory dialogitem ... и др...
end;

// не должны светится в Дельфи:
db dw dd dup model equ org use16 use32 format include invoke import section entry readable writeable code directory dialogitem ... и др...

asm
// тест комментариев
{ comment 1 }
{ comment2 begin
// comment
(* comment
comment2 _end }
normal code
(* comment4
// cooment4 end*) normal code

// тест директив
{$DIRECTIVE}
{$ directive}
{ $Comment}
(*$Directive }
*)
(* $ comments *)
end;

end;


Это сообщение отредактировал(а) p0s0l - 16.10.2004, 16:02


--------------------
С уважением, г-н Посол.
PM   Вверх
sergejzr
Дата 17.10.2004, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 1
Всего: 360



Дурацкого глюка с директивами больше не существует в тестах :)
Осталось подсветить правильно Асм и немного отретушировать дельфи :)


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
p0s0l
Дата 20.10.2004, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Код
procedure TForm1.Button28Click(Sender: TObject);
var
 s : string;
 i : integer;
 r : real;
begin
 Caption := 'Hello';
 Left := 48;
 Width := 50 + (Left*2 div Top);
 s := 'String ¹' + IntToHex(Random($FF), 2);
 s := s + #13;
 for i := 1 to 255 do
 begin
   r := Cos(i*pi/255) + Sin(i*2*pi/255);
   r := Round(r*10)/10; // Округляем до 10 части
   s := s + FloatToStr(r) + #13#10;
 end;
 MessageBox (0, PChar(s), 'TestCaption', MB_ICONEXCLAMATION);
end;



Всю ночь сидел набирал, надо тестить :)

Код

asm
mov cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb
cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle
cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp
cmovpo xchg bswap xadd cmpxchg cmpxchg8b push pop pusha pushad popa
popad cwd cdq cbw cwde movsx movzx add adc sub sbb imul mul idiv div inc dec
neg cmp daa das aaa aas aam aad and or xor not sar shr sal shl shrd shld ror rol
rcr rcl bt bts btr btc bsf bsr sete setz setne setnz seta setnbe setae setnb setnc
setb setnae setc setbe setna setg setnle setge setnl setl setnge setle setng
sets setns seto setno setpe setp setpo setnp test jmp je jz jne jnz jnbe ja jae
jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp
jcxz jecxz loop loopz loope loopnz loopne call ret retf retn iret iretd int into bound
enter leave movs movsb movsw movsd cmps cmpsb cmpsw cmpsd scas scasb
scasw scasd lods lodsb lodsw lodsd stos stosb stosw stosd rep repe repz repne
repnz in out ins insb insw insd outs outsb outsw outsd stc clc cmc cld std lahf
sahf pushf pushfd popf popfd sti cli lds les lfs lgs lss lea nop ud1 ud2 xlat xlatb
cpuid lgdt sgdt lldt sldt ltr str lidt sidt lmsw smsw clts arpl lar lsl verr verw invd
wbinvd invlpg lock hlt rsm rdmsr wrmsr rdpmc rdtsc sysenter sysexit

// fpu
fld fst fstp fild fist fistp fbld fbstp fxch fcmove fcmovne fcmovb fcmovbe fcmovnb
fcmovnbe fcmovu fcmovnu fadd faddp fiadd fsub fsubp fisub fsubr fsubrp fisubr
fmul fmulp fimul fdiv fdivp fidiv fdivr fdivrp fidivr fprem fprem1 fabs fchs frndint
fscale fsqrt fxtract fcom fcomp fcompp fucom fucomp fucompp ficom ficomp fcomi
fucomi fcomip fucomip ftst fxam fsin fcos fsincos fptan fpatan f2xm1 fyl2x fyl2xp1
fld1 fldz fldpi fldl2e fldln2 fldl2t fldlg2 fincstp fdecstp ffree finit fninit fclex fnclex
fstcw fnstcw fldcw fstenv fnstenv fldenv fsave fnsave frstor fstsw fnstsw wait
fwait fnop fxsave fxrstor

// mmx
movd movq packsswb packssdw packuswb punpckhbw punpckhwd punpckhdq
punpcklbw punpcklwd punpckldq paddb paddw paddd paddsb paddsw paddusb
paddusw psubb psubw psubd psubsb psubsw psubusb psubusw pmulhw pmullw
pmaddwd pcmpeqb pcmpeqw pcmpeqd pcmpgtb pcmpgtw pcmpgtd pand pandn
por pxor psllw pslld psllq psrlw psrld psrlq psraw psrad emms pfcmpge pfcmpeq
pfcmpgt pavgusbpmulhrw pfrsqrt pfrcpit1 pfrcpit2 pi2fd pf2id pfrsqit1 pfacc pfadd
pi2fw pf2iw femms pfmin pfrcp pfmax pfsub pfmul pfnacc pswapd pfsubr pfpnacc

// sse
movaps movups movhps movhlps movlps movlhps movmskps movss addps
addss subps subss mulps mulss divps divss rcpps rcpss sqrtps sqrtss rsqrtps
rsqrtss maxps maxss minps minss cmpps cmpss comiss ucomiss andps andnps
orps xorps shufps unpckhps unpcklps cvtpi2ps cvtsi2ss cvtps2pi cvttps2pi
cvtss2si cvttss2si ldmxcsr stmxcsr pavgb pavgw pextrw pinsrw pmaxub pmaxsw
pminub pminsw pmovmskb pmulhuw psadbw pshufw maskmovq movntq
movntps sfence prefetcht0 prefetcht1 prefetcht2 prefetchnta prefetch prefetchw

// sse2
movapd movupd movhpd movlpd movmskpd movsd addpd addsd subpd subsd
mulpd mulsd divpd divsd sqrtpd sqrtsd maxpd maxsd minpd minsd andpd andnpd
orpd xorpd shufpd unpckhpd unpcklpd cvtpd2pi cvttpd2pi cvtpi2pd cvtpd2dq
cvttpd2dq cvtdq2pd cvtps2pd cvtpd2ps cvtss2sd cvtsd2ss cvtsd2si cvttsd2si
cvtsi2sd cvtdq2ps cvtps2dq cvttps2dq movdqa movdqu movq2dq movdq2q
pmuludq paddq psubq pshuflw pshufhw pshufd pslldq psrldq punpckhqdq
punpcklqdq clflush lfence mfence pause maskmovdqu movntpd movntdq movnti
cmppd cmpsd comisd ucomisd cmplepd cmplesd cmpgesd cmpeqsd cmpgess
cmpgtsd cmpleps cmpltpd cmpless cmpltsd cmpunordss cmpunordps cmpeqps
cmpeqss cmpgtss cmpltps cmpltss cmpngesd cmpnlepd cmpnlesd cmpneqpd
cmpordpd cmpngess cmpngtsd cmpnleps cmpnltpd cmpnless cmpnltsd cmpneqps
cmpordps cmpneqss cmpordss cmpngtss cmpnltps cmpnltss cmpunordpd
cmpunordsd cmpneqsd cmpordsd


// registers
al ah bl bh cl ch dl dh ax bx cx dx bp sp si di cs ds es ss fs gs
eax ebx ecx edx ebp esp esi edi
dr0 dr1 dr2 dr3 dr6 dr7 cr0 cr2 cr3 cr4
mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7
xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7

// special
byte word dword fword qword tword tbyte dqword db dw dd dq low high small large offset ptr seg type mod vmtoffset dmtindex

// symbols
[ ] ( ) : = + - / *

end


Delphi:
Код

platform on constructor deprecated shr shl absolute abstract assembler
automated cdecl contains default dispid dynamic export external far forward
implements index message name near nodefault overload override package
pascal private protected public published read readonly register reintroduce
requires resident safecall stdcall stored virtual write writeonly and array as
begin case class const constructor destructor dispinterface div do downto else
end except exports file finalization finally for function goto if implementation in
inherited initialization inline interface is label library mod nil not object of or out
packed procedure program property raise record repeat resourcestring set string
then threadvar to try type unit until uses var while with xor
asm end

Особый случай в Delphi:
Код

// Не должно подсвечиваться
index default nodefault stored read write readonly writeonly implements

// Должно подсвечиваться
property index default nodefault stored read write readonly writeonly implements;

Очередной тест комментариев и вложенных комментариев:
Код

code // комментарии
code//комментарии
{комментарии} code
{ комментарии } cod { комментарии // комментарии } code
(*комментарии*) code (* { комментарии *) code
(* комментарии *) code { (* комментарии } code
{ комментарии
(* комментарии *)
комментарии } code
(* комментарии { комментарии // комментарии *) code

Очередной тест директив
Код

{$ директива }
{$директива }
{ $комментарии}
{ $ комментарии }
(*$ директива *)
(*$директива*)
(* $комментарии*)
(* $ комментарии *)
// {$ комментарии } комментарии
// (*$ комментарии } комментарии
код
(*$ директива
директива
*)


Это сообщение отредактировал(а) p0s0l - 27.10.2004, 21:25


--------------------
С уважением, г-н Посол.
PM   Вверх
sergejzr
Дата 20.10.2004, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 1
Всего: 360



И Ысчо раз :)
Код

{$ директива }
{$директива }
{ $комментарии}
{ $ комментарии }
(*$ директива *)
(*$директива*)
(* $комментарии*)
(* $ комментарии *)
// {$ комментарии } комментарии
// (*$ комментарии } комментарии
код
(*$ директива
директива
*)



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
p0s0l
Дата 20.10.2004, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Код
// числа

123  123.456  123.456.789
-123  -123.456  -123.456.789

16 $16
-16 $-16 -$10
+16 +$10 $+16

$
$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $A $B $C $D $E $F
$G $H $I $J $K $L $M $N $O $P $Q $R $S $T $U $V $W $X $Y $Z
$0ABCDEFGH  $0abcdefgh

0.123  .123
12e56 -1e56 12e-56 -12e-56 -12e+56
0.11e56 -0.12e56 0.12e-56 -0.12e-56 -0.12e+56
.12e56 -.12e56 .12e-56 -.12e-56 -.12e+56

0e123abc

// строки

'string1'
'abc''def''ghi'+'klm''nop'

// символы

#
#0 #1 #2 #3 #4 #5 #6 #7 #8 #9 #a #b #c #d #e #f #g #h
#$0 #$1 #$2 #$3 #$4 #$5 #$6 #$7 #$8 #$9 #$a #$b #$c #$d #$e #$f #$g #$h

#$+44 #$-44
#$45a #$45b #$45c #$45d #$45e #$45f #$45g #$45h
#123abc

Снова директивы и комментарии
Код

{
abc
(* abc
// abc
*) // abc
{$ abc } // abc
} abc
{ aaa *) _end }


asm..end тест:
Код

asm
loop
//end
{ end } jmp
(* end } jmp *) mul
loop
end


asm..end тест2:
Код

asm
jmp @codeend
@codeend:
jmp @end1
@end1:
jmp @_end
@_end:
jmp @end
@end:
jmp
end


Для тестирования подсветки Delphi и Delphi-asm'а:
Код

unit uMsg;

{ Модуль для работы с текущим набором объявлений }

interface

uses uTypes;

type
 TMessags      = array of PMess;

var
 messagCnt     : integer;
 messags       : TMessags;

 fmessagCnt    : integer;
 fmessags      : TMessags;

 addMask       : cardinal;

procedure msgCRC;
procedure msgCmp;
function msgSize (msg : PMess) : integer;
function msgFind (msg : PMess) : PMess;
procedure msgAdd (msg : PMess);
procedure msgBaseFree;
procedure msgBaseSave (const fn : string);
procedure msgBaseLoad (const fn : string);
procedure msgBaseCRC;
procedure msgBaseCRCfree;
procedure msgFields (msg : PMess; var fld : TMessFields);
procedure msgSetDates;

implementation

uses Windows, SysUtils, uConst, uGlobal, uIdentifiers, uSet, uUtils, uMsgFilter;

var
 crc           : pointer = nil;
 _objCount     : byte;
 fnd_adr       : cardinal;
 
////////////////////////////////////////////////////////////////////////////////


// Освобождает память
procedure msgBaseFree;
var i : integer;
begin
 for i := 0 to messagCnt-1 do GlobalFree (cardinal(messags[i]));
 messagCnt := 0;
 setLength (messags, 0);
end;


////////////////////////////////////////////////////////////////////////////////


// Вычисляет CRC объявления
// in: eax = message
// out: eax = CRC of message
procedure msgCRC; assembler;
asm
 push ebx
 push ecx

 movzx ecx, word ptr [eax + TMess.sizMain]
 sub cx, msgVarSize
 mov ebx, eax

 push ecx
 xor eax, eax
 shr ecx, 2
 add ebx, msgVarSize
@loopCRC:
 add eax, [ebx]
 add ebx, 4
 ror eax, 1
 loop @loopCRC
 pop ecx
 and ecx, 3
 jz @skip
@loopCRC2:
 add al, [ebx]
 inc ebx
 ror eax, 1
 loop @loopCRC2
@skip:

 pop ecx
 pop ebx
 ret
end;


////////////////////////////////////////////////////////////////////////////////


// Сравнивает объявления
// in: esi, edi = адреса двух объявлений
// out: z=1 -> объявления одинаковые
procedure msgCmp; assembler;
asm
 push ecx

 movzx ecx, word ptr [esi + TMess.sizMain]
 cmp cx, [edi + TMess.sizMain]
 jnz @exit

 sub cx, msgVarSize
 push esi
 push edi

 add esi, msgVarSize
 add edi, msgVarSize

 push ecx
 shr ecx, 2
 repe cmpsd
 pop ecx
 jnz @exit2

 and ecx, 3
 jz @exit2
 repe cmpsb

@exit2:
 pop edi
 pop esi

@exit:
 pop ecx
 ret
end;


////////////////////////////////////////////////////////////////////////////////


// Вычисляет размер обявления
// in: eax = message
// out: eax = size of message
function msgSize; assembler;
asm
 push ecx
 push edx
 mov ecx, eax
 movzx eax, word ptr [ecx + TMess.sizMain]
 movzx edx, byte ptr [ecx + eax] // other
 lea eax, [eax + edx + 1]
 mov dl, byte ptr [ecx + eax] // phone
 lea eax, [eax + edx + 1]
 mov dx, word ptr [ecx + eax] // txt
 lea eax, [eax + edx + 2]
 pop edx
 pop ecx
 ret
end;


////////////////////////////////////////////////////////////////////////////////


// Записывает объявления в dat-файл
procedure msgBaseSave;
var
 f : file;
 i, siz, res : integer;

begin
 AssignFile (f, fn + '.dat');
 Rewrite (f, 1);
 siz := sizeof(version);
 BlockWrite (f, version, siz, res);
 if res = siz then
 begin
   siz := sizeof(gOptions.skips);
   BlockWrite (f, gOptions.skips[0], siz, res);
   if res = siz then
   begin
     siz := sizeof(messagCnt);
     BlockWrite (f, messagCnt, siz, res);
     if res = siz then
       for i := 0 to messagCnt-1 do
       begin
         siz := msgSize(messags[i]);
         BlockWrite(f, messags[i]^, siz, res);
         if res <> siz then break;
       end;
   end;
 end;

 CloseFile (f);

 if res <> siz then Raise Exception.Create(error_SaveBase);
end;


////////////////////////////////////////////////////////////////////////////////


// Считывает объявления из dat-файла
procedure msgBaseLoad;
begin
 msgBaseFree;
 setLoadDat(fn, true);
 checkPhones;
end;


////////////////////////////////////////////////////////////////////////////////


// Создает массив контрольных сумм для объявлений
procedure msgBaseCRC;
begin
 CRC := VirtualAlloc (0, length(messags)*4, MEM_COMMIT, PAGE_READWRITE);

 asm
   push ecx
   push esi
   push edi
   mov ecx, [messagCnt]
   jcxz @end
   mov esi, [messags]
   mov edi, [crc]
   cld
 @calcs:
   lodsd
   call msgCRC
   stosd
   loop @calcs
 @end:
   pop edi
   pop esi
   pop ecx
 end;
end;


////////////////////////////////////////////////////////////////////////////////


// Освобождает массив контрольных сумм
procedure msgBaseCRCfree;
begin
 if crc <> nil then VirtualFreeEx (hProcess, crc, 0, MEM_RELEASE);
end;


////////////////////////////////////////////////////////////////////////////////


// in: eax = message
// out: z = 1 - message already exists
function msgFind; assembler;
asm
 pushad
 cld

 mov ebx, eax
 call msgCRC
// eax = CRC of message
 mov ecx, [messagCnt]
 mov edi, [crc]
@scan:
 jcxz @not_found
 repne scasd
 jnz @not_found

 push eax
 mov eax, [messagCnt]
 sub eax, ecx
 dec eax
 mov edx, [messags]
 lea edx, [edx + eax*4]

 push edi
 mov esi, ebx
 mov edi, [edx]
 call msgCmp
 pop edi
 pop eax
 jnz @scan

// found equal messages
 mov [fnd_adr], edx
 popad
 mov eax, [fnd_adr]
 mov eax, [eax]
 test eax, eax
 ret

@not_found:
 popad
 xor eax, eax
 ret
end;


////////////////////////////////////////////////////////////////////////////////


// Добавляет объявление в базу
// in: eax = message
procedure msgAdd; assembler;
asm
 pushad
 cld

 mov ebx, eax
 call msgCRC
// eax = CRC of message
 mov ecx, [messagCnt]
 mov edi, [crc]
 lea edi, [edi + ecx*4]
 mov [edi], eax

 push ebx

 mov eax, ebx
 call msgSize
 push eax

 push eax // eax = size
 push DWORD (GMEM_FIXED)
 call GlobalAlloc

 mov ecx, [messagCnt]
 mov edx, [messags]
 lea edx, [edx + ecx*4]
 mov [edx], eax
 pop ecx
 pop esi
 mov edi, eax
 push ecx
 shr ecx, 2
 rep movsd
 pop ecx
 and ecx, 3
 jz @skip1
 rep movsb
@skip1:
 inc dword ptr [messagCnt]

@end:
 popad
 ret
end;


////////////////////////////////////////////////////////////////////////////////


// Добавляет в строковое поле символы ->
procedure _arrow; assembler;
asm
 push eax
 movzx eax, byte ptr [edi]
 lea eax, [eax + edi + 1]
 mov word ptr [eax], '>-'
 add byte ptr [edi], 2
 pop eax
end;


////////////////////////////////////////////////////////////////////////////////


// Расшифровывает массив битов (создает строку)
// in: eax = Value, edi = адрес текстового поля, ebp = адрес строковых эквивалентов
procedure _bitsTxt; assembler;
asm
 push esi
 push edi
 movzx ecx, [edi]
 lea edi, [edi + ecx + 1]
@loop:
 test eax, eax
 jz @end
 shr eax, 1
 jnc @no_print

 mov cl, [ebp]
 jcxz @no_print
 lea esi, [ebp+1]
 rep movsb
 test eax, eax
 jz @end
 mov byte ptr [edi], ','
 inc edi
@no_print:
 add ebp, 16
 jmp @loop

@end:
 pop ecx
 sub edi, ecx
 lea edx, [edi-1]
 mov byte ptr [ecx], dl
 pop esi
 ret
end;

procedure _bitsTxt0; assembler;
asm
 mov byte ptr [edi], 0
 jmp _bitsTxt;
end;

// Для обмена: если есть хоть один включенный бит, то прибавляет "->"
procedure _bitsTxt2; assembler;
asm
 test eax, eax
 jz _bitsTxt
 call _arrow
 jmp _bitsTxt
end;

////////////////////////////////////////////////////////////////////////////////


// Расшифровывает поле reg в строковый вид
procedure _regTxt; assembler;
asm
 push edi
 movzx ecx, byte ptr [edi]
 lea edi, [edi + ecx + 1]
 mov cl, byte ptr [esi]
 inc esi
 shr ecx, 1
 jz @reg1_end
 xor eax, eax
@reg1:
 lodsw
 mov edx, [groups]
 mov edx, [edx + sizIdGroup + TIdGroup.grp_names]
 push esi
 push ecx
 mov esi, [edx + eax*4]
 mov ecx, [esi-4]
 rep movsb
 pop ecx
 pop esi
 cmp ecx, 1
 jz @reg1_next
 mov word ptr [edi], ' ,'
 inc edi
 inc edi
@reg1_next:
 loop @reg1
@reg1_end:
 pop ecx
 sub edi, ecx
 lea edx, [edi-1]
 mov byte ptr [ecx], dl
 ret
end;


////////////////////////////////////////////////////////////////////////////////


// Расшифровывает поле adr в строковый вид
procedure _adrTxt; assembler;
asm
 push edi
 movzx edx, byte ptr [edi]
 lea edi, [edi + edx + 1]
 mov dl, byte ptr [esi]
 inc esi
@adr1:
 test edx, edx
 jz @adr1_end
 xor eax, eax
 lodsw
 mov ecx, [groups]
 mov ecx, [ecx + TIdGroup.grp_names]
 push esi
 mov esi, [ecx + eax*4]
 mov ecx, [esi-4]
 rep movsb
 pop esi
 movzx ecx, byte ptr [esi]
 inc esi
 sub edx, 3
 sub edx, ecx
 jcxz @adr1_next
 mov byte ptr [edi], ' '
 inc edi
 rep movsb

@adr1_next:
 test edx, edx
 jz @adr1_end
 mov word ptr [edi], ' ,'
 inc edi
 inc edi
 jmp @adr1

@adr1_end:
 pop ecx
 sub edi, ecx
 lea edx, [edi-1]
 mov byte ptr [ecx], dl
 ret
end;


////////////////////////////////////////////////////////////////////////////////


// Заполняет у объявления строковые поля
// in: eax = message, edx = адрес структуры TMessFields
procedure msgFields; assembler;
asm
 pushad
 cld
 mov esi, eax
 mov ebx, edx
 mov dl, [esi + TMess.objCount]
 push edx
 xor eax, eax

// deal
 mov al, byte ptr [esi + TMess.deal]
 lea edi, [ebx + TMessFields.deal]
 lea ebp, [_Names._deal]
 call _bitsTxt0


// price
 xor ecx, ecx
 mov edx, [esi + TMess.price]
 lea edi, [ebx + TMessFields.price + 1]
 mov ebp, edi
 test edx, edx
 jz @price_end
 mov cl, 8
@price:
 rol edx, 4
 mov al, dl
 and al, $0F
 jnz @price_wr
 cmp cl, 4
 jz @price_wr
 cmp edi, ebp
 jz @price_next
@price_wr:
 add al, $30
 stosb

@price_next:
 cmp cl, 4
 jnz @price_next2
 mov byte ptr [edi], '.'
 inc edi
@price_next2:
 loop @price

@price_2:
 cmp byte ptr [edi-1], '0'
 jnz @price_3
 dec edi
 jmp @price_2

@price_3:
 cmp byte ptr [edi-1], '.'
 jnz @price_4
 dec edi

@price_4:
 mov dl, [esi + TMess.price_flg]
 test dl, $02
 jnz @rubli
 mov dword ptr [edi], 'у.т '
 mov dword ptr [edi+4], ' .е.'
 add edi, 7
 jmp @price_5
@rubli:
 mov dword ptr [edi], 'р.т '
 mov byte ptr [edi+4], '.'
 add edi, 5

@price_5:
 test dl, $10
 jz @price_end
 mov dword ptr [edi], 'м 1/'
 mov byte ptr [edi+4], '.'
 add edi, 5
 
@price_end:
 sub edi, ebp
 mov ecx, edi
 mov [ebp-1], cl


 add esi, sizMess


// area

 movzx ecx, byte ptr [esi]
 push ebx
 lea ebx, [ebx + TMessFields.area + 1]
 mov edi, ebx
 inc esi
 jcxz @area_end
@area:
 lodsb
 test al, al
 jz @ar_code
 stosb
 loop @area
 jmp @area_end

@ar_code:
 cmp ebx, edi
 jz @ar_first
 mov byte ptr [edi], ';'
 inc edi

@ar_first:
 movzx eax, [esi]
 shl eax, 4
 inc esi
 push esi
 push ecx
 lea esi, [_Names._area]
 add esi, eax
 mov cl, [esi]
 inc esi
 rep movsb
 mov byte ptr [edi], ' '
 inc edi
 pop ecx
 pop esi
 dec ecx
 loop @area

@area_end:
 mov edx, edi
 sub edx, ebx
 mov [ebx-1], dl
 pop ebx

 movzx eax, byte ptr [esi]
 lea esi, [esi + eax + 1] // skip phone_abc


//////////////////////////////////
// object1


// immove1
 mov al, byte ptr [esi + TImmoveInfo.immove]
 lea edi, [ebx + TMessFields.immove]
 lea ebp, [_Names._immove]
 call _bitsTxt0

// rooms1
 movzx eax, byte ptr [esi + TImmoveInfo.rooms]
 lea edi, [ebx + TMessFields.rooms]
 lea ebp, [_Names._rooms]
 call _bitsTxt0

// roomsav1
 movzx eax, byte ptr [esi + TImmoveInfo.roomsav]
 lea edi, [ebx + TMessFields.roomsav]
 lea ebp, [_Names._roomsav]
 call _bitsTxt0

// mat1
 mov al, byte ptr [esi + TImmoveInfo.mat]
 lea edi, [ebx + TMessFields.mat]
 lea ebp, [_Names._mat]
 call _bitsTxt0

// plan1
 mov al, byte ptr [esi + TImmoveInfo.plan]
 lea edi, [ebx + TMessFields.plan]
 lea ebp, [_Names._plan]
 call _bitsTxt0

// floor1
 mov eax, [esi + TImmoveInfo.floor]
 lea edi, [ebx + TMessFields.floor]
 lea ebp, [_Names._floor]
 call _bitsTxt0

// floors1
 mov eax, [esi + TImmoveInfo.floors]
 lea edi, [ebx + TMessFields.floors]
 lea ebp, [_Names._floors]
 call _bitsTxt0

 add esi, sizImmoveInfo

// reg1
 lea edi, [ebx + TMessFields.reg]
 mov byte ptr [edi], 0
 call _regTxt


// adr1
 lea edi, [ebx + TMessFields.adr]
 mov byte ptr [edi], 0
 call _adrTxt


//////////////////////////////////////////////////
// object2

 pop edx
 cmp dl, 2
 jb @other


// immove2
 movzx eax, byte ptr [esi + TImmoveInfo.immove]
 lea edi, [ebx + TMessFields.immove]
 lea ebp, [_Names._immove]
 call _bitsTxt2

// rooms2
 movzx eax, byte ptr [esi + TImmoveInfo.rooms]
 lea edi, [ebx + TMessFields.rooms]
 lea ebp, [_Names._rooms]
 call _bitsTxt2

// roomsav2
 movzx eax, byte ptr [esi + TImmoveInfo.roomsav]
 lea edi, [ebx + TMessFields.roomsav]
 lea ebp, [_Names._roomsav]
 call _bitsTxt2

// mat2
 mov al, byte ptr [esi + TImmoveInfo.mat]
 lea edi, [ebx + TMessFields.mat]
 lea ebp, [_Names._mat]
 call _bitsTxt2

// plan2
 mov al, byte ptr [esi + TImmoveInfo.plan]
 lea edi, [ebx + TMessFields.plan]
 lea ebp, [_Names._plan]
 call _bitsTxt2

// floor2
 movzx eax, word ptr [esi + TImmoveInfo.floor]
 lea edi, [ebx + TMessFields.floor]
 lea ebp, [_Names._floor]
 call _bitsTxt2

// floors2
 movzx eax, word ptr [esi + TImmoveInfo.floors]
 lea edi, [ebx + TMessFields.floors]
 lea ebp, [_Names._floors]
 call _bitsTxt2

 add esi, sizImmoveInfo

// reg2
 lea edi, [ebx + TMessFields.reg]
 cmp byte ptr [esi], 0
 jz @skip_reg2
 call _arrow
@skip_reg2:
 call _regTxt

// adr2
 lea edi, [ebx + TMessFields.adr]
 cmp byte ptr [esi], 0
 jz @skip_adr2
 call _arrow
@skip_adr2:
 call _adrTxt

@other:
// other
 lea edi, [ebx + TMessFields.other]
 movzx ecx, byte ptr [esi]
 inc ecx
 rep movsb

// phone
 lea edi, [ebx + TMessFields.phone]
 movzx ecx, byte ptr [esi]
 inc ecx
 rep movsb

 popad
 ret
end;

////////////////////////////////////////////////////////////////////////////////

// Ставит у объявлений последнюю возможную дату
procedure msgSetDates;
var
 i, j : integer;
 _sets, _set : cardinal;
begin
 for i := 0 to messagCnt-1 do
 begin
   _sets := messags[i].dates;
   for j := setCnt-1 downto 0 do
   begin
     _set := sets[j].s_mask;
     if (_sets and _set) <> 0 then
     begin
       messags[i].datelast := _set;
       break;
     end;
   end;
 end;
end;

////////////////////////////////////////////////////////////////////////////////

initialization
 messagCnt := 0;
 setLength (messags, 0);
finalization
 msgBaseFree;
 msgBaseCRCfree;
end.


Опять тест ключевых слов Delphi:
Код

and xor or not shl shr mod div cdecl stdcall register pascal safecall varargs export far near external
forward platform deprecated assembler begin asm end virtual dynamic abstract automated dispid
overload override reintroduce constructor destructor private protected public published
package contains requires program unit library implementation initialization finalization uses var
threadvar const resourcestring type label try except finally raise for do while repeat until on to
downto is as on in of if then else exports class dispinterface interface file array object packed record
set string  function procedure  absolute message case goto inherited inline nil out with property

Свойства:
Код
index default nodefault stored read write readonly writeonly implements
property abc : integer
index 5 default 3 nodefault stored 1 read write readonly writeonly implements;
index default nodefault stored read write readonly writeonly implements


Это сообщение отредактировал(а) p0s0l - 20.10.2004, 21:03


--------------------
С уважением, г-н Посол.
PM   Вверх
sergejzr
Дата 20.10.2004, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 1
Всего: 360



Эх ребята, вот, что значит тестироват! :D :D
Все бы языки так продрали сразу, не надо было бы десять раз скрипт переставлять :)


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Girder
Дата 20.10.2004, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



sergej.z было бы еще прикольней... если можно было бы в настроках профиля менять параметры подсветки... а то мне например не нравиться когда мнемоника подсвечивается :(


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1206 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.