· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Помогите отловить ошибку

Посл.отвђт Сообщенiе


Дата: Апр 21, 2003 21:37:02

Помогите отловить ошибку в процедуре:
proc FindItem
ind dd 0
hwndkat dd 0
i dd 0
enter
mov eax,[Find.Flag]; сохраняем в еах флаг поиска для последующего анализа
cmp eax,FIND_FOR_TREE; если поиск по категории и подкатегории
je findtree; переходим на соответствующую метку
findtree:
mov eax,[lpAlloc]
cmp [CurAdress],eax
je next2
xor eax,eax
mov [hwndkat],eax
mov [i],eax
mov ebx,[lpAlloc] ; устанавливаем указатель на начало памяти содержащей структуры каталогов
beg: Kat.new.Adr ; пересчитываем указатели на членов структуры
xor eax,eax
mov [ind],eax
mov edx,Kat.Kat; сохраняем адрес текущей категории в edx
mov ecx,Find.Kat; сохраняем адрес искомой категории в ecx
next: mov eax,[edx] ; загружаем в eax первые 4 символа текущей категории и
cmp eax,[ecx] ; сравниваем их с содержимым ячейки памяти по адресу в ecx
jne stop ; если категории не совпадают переходим на метку пропучка структуры
add ecx,4
add edx,4
inc [ind]
cmp [ind],10
jne next
mov eax,Kat.Kat_hwnd
mov [hwndkat],eax
xor eax,eax
mov [ind],eax
mov edx,Kat.SubKat
mov ecx,Find.SubKat
next1: mov eax,[edx] ; загружаем в eax первые 4 символа текущей подкатегории и
cmp eax,[ecx] ; сравниваем их с содержимым ячейки памяти по адресу в ecx
jne stop ; если подкатегории не совпадают переходим на метку пропуска структуры
add ecx,4
add edx,4
inc [ind]
cmp [ind],10 ; необходимо добавить проверку
jne next1
mov eax,Kat.Kat_hwnd
mov edx,Kat.SubKat_hwnd
mov ebx,[CurAdress]
Kat.new.Adr
mov Kat.Kat_hwnd,eax
mov Kat.SubKat_hwnd,edx
jmp stop1
stop:
xor eax,eax
cmp Kat.New,eax
je stop2
add ebx,512
jmp beg
stop2:
xor eax,eax
cmp [hwndkat],eax ; если hwndkat=0 значит нет такой категории и подкатегории
jne sub_kat
next2: ;invoke MessageBox,0,TempFileName,TempFileName,MB_OK
mov [tvinsert.hParent],0
mov [tvinsert.hInsertAfter],TVI_LAST
mov [tvinsert.item.imask],TVIF_TEXT+TVIF_SELECTEDIMAGE+TVIF_IMAGE
mov eax,[AdrKat]
mov [tvinsert.item.pszText],eax
mov [tvinsert.item.iImage],0
mov [tvinsert.item.iSelectedImage],0
invoke SendMessage,[hwndTree],TVM_INSERTITEM,NULL,tvinsert
mov [hwndkat],eax
mov Kat.Kat_hwnd,eax
sub_kat:
mov eax,[hwndkat]
mov [tvinsert.hParent],eax
mov [tvinsert.hInsertAfter],TVI_LAST
mov [tvinsert.item.imask],TVIF_TEXT+TVIF_SELECTEDIMAGE+TVIF_IMAGE
mov eax,[AdrSubKat]
mov [tvinsert.item.pszText],eax
mov [tvinsert.item.iImage],0
mov [tvinsert.item.iSelectedImage],0
invoke SendMessage,[hwndTree],TVM_INSERTITEM,NULL,tvinsert
mov Kat.SubKat_hwnd,eax
stop1:
return
Смысл данной процедуры в следующем:
Запускаю программу, нажимаю кнопку добавить в категории пишу "кате" в подкатегории "под1" в остальных полях всякая ерунда
(но в полях № CD и Кол.CD должны быть цифры) нажимаю кнопку "Добавить" все нормально в TreeView добавилась категория и подкатегория
и сколько бы я повторно ни щелкал на кнопке "Добавить" повторно ни чего не добавляется (это нормально). Далее
изменяю название подкатегории на "под2" жму кнопку в имеющуюся категорию добавляется подкатегория "под2", но если ещё раз
щелкнуть на кнопке "Добавить" в тойже категории появится ещё одна подкатегория с названием "под2".
Далее если изменить название категории появится новая категория с подкатегорией и при повторных нажатиях кнопки "Добавить"
создаются новые категории с одинаковыми названиями.
Find.Kat, Find.SubKat, Kat.Kat, Kat.SubKat - строки длинной 40 байт.
Kat. - структуры неограниченного количества (при запуске отводится 100k, каждая структура длинной 512 байт).
Полностью исходники и исполнимый файл в архиве весят 92k. Если кто имеет время могу отправить по почте.
Мой адрес mailto: pas1@e-mail.ru


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.071