HACONFIG: correct processing of an empty string

git-svn-id: svn://kolibrios.org@7412 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
theonlymirage 2018-09-24 00:35:56 +00:00
parent be8f12a959
commit 44b96e0b6d
2 changed files with 39 additions and 5 deletions

View File

@ -2,7 +2,7 @@
; Hot Angles Config ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Hot Angles Config ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Compile with FASM ; Compile with FASM
; Version 0.3.1: Sep 23, 2018 ; Version 0.3.2: Sep 24, 2018
; Copyright (c) 2018, Efremenkov Sergey aka TheOnlyMirage ; Copyright (c) 2018, Efremenkov Sergey aka TheOnlyMirage
; All rights reserved. ; All rights reserved.
@ -150,6 +150,15 @@ defaultDataSize = 48+19
copyParam: ;копирует параметр(команду запуска) в буфер (см. дальше) copyParam: ;копирует параметр(команду запуска) в буфер (см. дальше)
push esi ebx ecx push esi ebx ecx
mov ecx, dword[ebx] ;читаем размер строки mov ecx, dword[ebx] ;читаем размер строки
cmp ecx, 0 ;пуста ли строка?
jne copyParam.copy ;если нет, то переходим к копированию содержимого строки (к циклу)
mov byte[eax], '-' ;если же пусто, то заменяем символом минус '-'
inc eax
;jmp copyParam.copyEnd ;и выходим
;далее в начале цикла произойдёт сравнение и выход
.copy: ;копируем символы .copy: ;копируем символы
cmp ecx, 0 cmp ecx, 0
je copyParam.copyEnd je copyParam.copyEnd
@ -183,6 +192,25 @@ applyButton:
add ecx, dword[editLD.size] add ecx, dword[editLD.size]
add ecx, dword[editRU.size] add ecx, dword[editRU.size]
add ecx, dword[editRD.size] ;dataBuffer.size4] add ecx, dword[editRD.size] ;dataBuffer.size4]
;если заданы пустые строки, то мы автоматически добавляем знак минус, значит размер +1 байт
cmp dword[editLU.size], 0
jne @f
inc ecx
@@:
cmp dword[editLD.size], 0
jne @f
inc ecx
@@:
cmp dword[editRU.size], 0
jne @f
inc ecx
@@:
cmp dword[editRD.size], 0
jne @f
inc ecx
@@:
;теперь размер файла конфигурации в ecx ;теперь размер файла конфигурации в ecx
mov dword[createFile.size], ecx ;положим размер байт в структуру создания/перезаписи файла mov dword[createFile.size], ecx ;положим размер байт в структуру создания/перезаписи файла
mcall 68, 12, ecx ;выделяем блок памяти под буфер содержимого mcall 68, 12, ecx ;выделяем блок памяти под буфер содержимого
@ -230,7 +258,10 @@ applyButton:
;иначе здесь нужно вывести окно с ошибкой !!! ;иначе здесь нужно вывести окно с ошибкой !!!
.end: .end:
mcall 68, 13, dword[createFile.data_adr] ;освобождаем память под буфер mcall 68, 13, dword[createFile.data_adr] ;освобождаем память под буфер
call restartHotAnglesApp ;ïåðåçàïóñêàåì @HOTANGLES call finishHotAnglesApp ;завершаем работу всех копий сервиса @HOTANGLES
call loadConfig ;перезагружаем файл конфига
call draw_window ;перерисовываем окно
call startHotAnglesApp ;перезапускаем @HOTANGLES
pop ecx ebx eax pop ecx ebx eax
ret ret
@ -260,7 +291,7 @@ compareBytes2:
ret ret
restartHotAnglesApp: finishHotAnglesApp:
;находим все копии приложения по имени и завершаем их ;находим все копии приложения по имени и завершаем их
push eax ebx ecx esi edi push eax ebx ecx esi edi
;указатели, которые никогда не меняются: ;указатели, которые никогда не меняются:
@ -275,7 +306,7 @@ restartHotAnglesApp:
call compareBytes2 ;сравниваем имя call compareBytes2 ;сравниваем имя
cmp eax, 0 cmp eax, 0
jne restartHotAnglesApp.next ;åñëè íå ñîâïàëî, òî ïåðåõîäèì íà ñëåäóþùèé ñëîò jne finishHotAnglesApp.next ;если не совпало, то переходим на следующий слот
;push eax ebx ecx ;push eax ebx ecx
mcall 18, 2, ecx ;иначе завершаем слот mcall 18, 2, ecx ;иначе завершаем слот
@ -288,7 +319,9 @@ restartHotAnglesApp:
jmp @b jmp @b
@@: @@:
pop edi esi ecx ebx eax pop edi esi ecx ebx eax
ret
startHotAnglesApp:
;запускаем приложение заново ;запускаем приложение заново
push eax ebx push eax ebx
mcall 70, startAppData mcall 70, startAppData

View File

@ -35,10 +35,11 @@ Hot Angles
[-] используется маленький шрифт текста; [-] используется маленький шрифт текста;
[-] нет возможности запуска приложения с параметрами; [-] нет возможности запуска приложения с параметрами;
[-] знак минус не влияет на попытку запуска в конкретном углу; [-] знак минус не влияет на попытку запуска в конкретном углу;
[-] пустое поле в конфигураторе и пустая строка в конфигурационном файле неверно обрабатываются; [+] пустое поле в конфигураторе и пустая строка в конфигурационном файле неверно обрабатываются;
[-] повреждение файла конфигурации после многократного вкл./выкл. опции Hot Angles; [-] повреждение файла конфигурации после многократного вкл./выкл. опции Hot Angles;
[-] режим явной команды клавишей активации: зажимаем горячую клавишу (например, shift), наводим курсор в угол - происходит реакция; [-] режим явной команды клавишей активации: зажимаем горячую клавишу (например, shift), наводим курсор в угол - происходит реакция;
[-] режим жеста/направления: зажимаем активирующую клавишу, после этого приложение анализирует мышь, в зависимости от направления движения мыши (от начальных координат в момент активации опции) выбирается активируемый угол - происходит реакция; [-] режим жеста/направления: зажимаем активирующую клавишу, после этого приложение анализирует мышь, в зависимости от направления движения мыши (от начальных координат в момент активации опции) выбирается активируемый угол - происходит реакция;
[-] добавить диалог выбора пути OpenDialog в конфигураторе;
[+] переход на EditBox из библиотеки box_lib; [+] переход на EditBox из библиотеки box_lib;
[+] размазывание текста или его наслоение при вводе в поле EditBox'а; [+] размазывание текста или его наслоение при вводе в поле EditBox'а;
[+] после запуска приложения, все поля находятся в фокусе (это фича из-за бага в компоненте EditBox); [+] после запуска приложения, все поля находятся в фокусе (это фича из-за бага в компоненте EditBox);