From c4a39efecbedbb903ee0e9ffb4d89c3f1344dd51 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sat, 28 Jun 2025 00:46:38 -0400 Subject: [PATCH] outdated/clip: Post-SVN tidy - Move source code from `trunk` into root directory. - Update build files and ASM include paths. - Note: Line endings standardised from `CRLF` > `LF`, so best to view diffs with whitespace changes hidden. --- .../other/outdated/clip/{trunk => }/@clip.ASM | 832 +++++++++--------- .../outdated/clip/{trunk => }/Tupfile.lua | 2 +- .../outdated/clip/{trunk => }/bdebug.inc | 97 +- .../outdated/clip/{trunk => }/build_ru.bat | 0 .../other/outdated/clip/{trunk => }/clip.inc | 0 .../other/outdated/clip/{trunk => }/clip.txt | 0 .../outdated/clip/{trunk => }/clip_en.txt | 0 .../outdated/clip/{trunk => }/cliptest.ASM | 486 +++++----- .../other/outdated/clip/{trunk => }/makefile | 0 .../other/outdated/clip/{trunk => }/test2.asm | 550 ++++++------ 10 files changed, 994 insertions(+), 973 deletions(-) rename programs/other/outdated/clip/{trunk => }/@clip.ASM (94%) rename programs/other/outdated/clip/{trunk => }/Tupfile.lua (80%) rename programs/other/outdated/clip/{trunk => }/bdebug.inc (84%) rename programs/other/outdated/clip/{trunk => }/build_ru.bat (100%) rename programs/other/outdated/clip/{trunk => }/clip.inc (100%) rename programs/other/outdated/clip/{trunk => }/clip.txt (100%) rename programs/other/outdated/clip/{trunk => }/clip_en.txt (100%) rename programs/other/outdated/clip/{trunk => }/cliptest.ASM (92%) rename programs/other/outdated/clip/{trunk => }/makefile (100%) rename programs/other/outdated/clip/{trunk => }/test2.asm (94%) diff --git a/programs/other/outdated/clip/trunk/@clip.ASM b/programs/other/outdated/clip/@clip.ASM similarity index 94% rename from programs/other/outdated/clip/trunk/@clip.ASM rename to programs/other/outdated/clip/@clip.ASM index 8a82403ef..bb52b8ec7 100644 --- a/programs/other/outdated/clip/trunk/@clip.ASM +++ b/programs/other/outdated/clip/@clip.ASM @@ -1,413 +1,419 @@ -; <--- description ---> -; compiler: FASM -; name: Clipboard server/daemon -; version: 0.2 -; author: barsuk - -; <--- include all MeOS stuff ---> -include "lang.inc" -include "..\..\..\..\macros.inc" - -; <--- start of MenuetOS application ---> -MEOS_APP_START - -;define DEBUG TRUE -define DEBUG FALSE -include "bdebug.inc" - -DEFAULT_SIZE = 0x10010 ; 64K + size of headers -MAX_SIZE = 0x01000000 ; 16 M -MAX_FORMAT = 16 -DELAY = 10 ; 1/10 sec between sending attempts -ATTEMPT = 5 ; number of sending attempts - - -; <--- start of code ---> -CODE - - ; во-первых, надо убить все @clip, какие найдутся: - ; демон буфера обмена должен быть только один! - ; и им окажется самый молодой из демонов... - - mov ecx, 2 ; первый номер слота для проверки - mov ebp, info - mov ebx, ebp - mov edx, 18 -.next_process: - mov eax, 9 - int 0x40 - cmp dword [ebx + 10], '@CLI' - jnz .differ - cmp byte [ebx + 14], 'P' - jnz .differ -.similar: - xchg eax, edx - mov ebx, 2 - int 0x40 - mov ebx, ebp - xchg eax, edx -.differ: - inc ecx - cmp ecx, eax - jae .done ; process not found - jmp .next_process - -.done: - mov eax, 68 ; init heap - mov ebx, 11 - int 0x40 - - mov eax, 66 ; set hotkey: Ctrl-Alt-V - mov ebx, 4 - mov ecx, 47 - mov edx, 0x110 ; 0x110 - int 0x40 -print "set hot key (1 bad)" -pregs - - mov ebp, DEFAULT_SIZE - - mov eax, 68 ; get memory for buffer - mov ebx, 12 - mov ecx, ebp - int 0x40 - mov esi, IPC_buffer - mov [esi], eax - - mov eax, 60 ; define buffer for IPC - mov ebx, 1 - mov ecx, [esi] - mov edx, ebp - int 0x40 - - mov eax, 40 - mov ebx, 01000010b ; - int 0x40 - -wait_event: ; main cycle - mov eax, [IPC_buffer] - mov dword [eax], 0 ; unlock buffer - mov dword [eax + 4], 8 - - mov eax, 10 ; wait - int 0x40 -print "event" -pregs - - ;dec eax - ;dec eax - cmp eax, 2 - jnz ipc_event - -print "hotkey" - - mov eax, 2 - int 0x40 -pregs - cmp ah, 47 ; "v" up - jnz wait_event - -print "hotkey v up" - ; it is hotkey - mov eax, 1 - mov ebx, eax - call find_format -pregs - cmp eax, -1 - jz wait_event - mov esi, [data_buffer + eax * 4] - mov edi, [data_size + eax * 4] - mov ecx, 2 -print "ping" -.next: - mov eax, 72 - movzx edx, byte [esi] - int 0x40 ; here we should pause if eax = 1 -pregs - - inc esi - dec edi - jnz .next - jmp wait_event - -ipc_event: - -; we get an IPC message - -print "recv. " - - mov eax, [IPC_buffer] - mov dword [eax], 1 ; lock buffer - mov dword [eax + 4], 8 - -dph1 dword [eax] ; lock -dph1 dword [eax + 4] ; current used size -dph1 dword [eax + 8] ; pid -dph1 dword [eax + 12] ; len -print "" -dph1 dword [eax + 16] ; cmd << 16 | fmt -dph1 dword [eax + 20] -dph1 dword [eax + 24] - - mov ebx, [eax + 8 + 4] - cmp ebx, 8 - jb wait_event ; all my messages have 8-byte header - ; so ignore this one - - movzx ecx, word [eax + 8 + 8] ; command - cmp ecx, 1 - jz command_setsize - cmp ecx, 2 - jz command_set - cmp ecx, 3 - jz command_getsize - cmp ecx, 4 - jz command_get - cmp ecx, 5 - jz command_delete - jmp wait_event ; unrecognised command - -command_setsize: - -; the only thing we really need to do here is to grow IPC buffer -; no changes are done to real buffer of chosen format - -; the bad thing is that IPC buffer grows and never becomes less. -; i want to fix this in the next version. - -print "set size" - - mov esi, [IPC_buffer_size] - mov ecx, [eax + 24] ; size - add ecx, 0x18 ; for headers -;pregs - cmp esi, ecx - jae wait_event -print "ipc buffer resize from esi to ecx" -pregs - - mov ebp, MAX_SIZE ; sort of protection. forbid transfer of more - cmp ecx, ebp ; than 16,7 Mb of data through buffer - jbe not_much - mov ecx, ebp - -not_much: - xchg eax, edi ; edx := [IPC_buffer] - add ecx, 0x18 ; for headers - - mov [IPC_buffer_size], ecx - mov eax, 68 - mov ebx, 12 - int 0x40 ; get memory -print "get mem for new buf, eax" -pregs - mov [IPC_buffer], eax - - mov dword [eax + 4], 8 - mov edx, ecx - mov ecx, eax - mov eax, 60 - mov ebx, 1 - int 0x40 ; make it IPC buffer - - mov ecx, edi - mov eax, 68 - mov ebx, 13 - int 0x40 ; free old IPC buffer - - jmp wait_event - -command_set: -print "set" - -; here we put the data transfered to us to one of internal buffers - -;;;outs eax + 0x18 - - movzx eax, word [eax + 18] ; format id - call find_format - cmp eax, -1 - jz new_format - mov edx, eax - - ; free old buffer of this format - - mov ecx, [data_buffer + edx * 4] - mov eax, 68 - mov ebx, 13 - int 0x40 - jmp set_buffer - -new_format: - mov eax, data_count ; allocate a buffer - mov edx, [eax] - inc dword [eax] ; no protection, no checks. very bad :( -set_buffer: - mov eax, [IPC_buffer] - mov ecx, dword [eax + 12] - sub ecx, 8 ; get length of data itself - ; subtract size of my headers -;pregs - mov [data_size + edx * 4], ecx ; save length of data - - mov eax, 68 - mov ebx, 12 - int 0x40 - mov [data_buffer + edx * 4], eax - -; copy data from IPC to new buffer - mov esi, [IPC_buffer] - mov ebp, esi - add esi, 24 ; start of data - mov edi, eax - rep movsb ; oh, me knows that it's bad - - mov eax, ebp - movzx ecx, word [eax + 18] ; format id - mov [data_format + edx * 4], ecx - - ; debug -; print "set debug" -; mov eax, [data_buffer + edx * 4] -; mov ebx, [data_size + edx * 4] -; mov ecx, [data_format + edx * 4] -; pregs - - jmp wait_event - -command_delete: - movzx eax, word [eax + 18] ; format id - cmp eax, -1 - jz command_clear - call find_format - cmp eax, -1 - jz wait_event - mov ecx, [data_buffer + eax * 4] - mov [data_format + eax * 4], 0 - mov eax, 68 - mov ebx, 13 - int 0x40 - jmp wait_event - -command_clear: - mov eax, 68 - mov ebx, 13 - mov edx, data_buffer -.next: - mov ecx, [edx] - jecxz .nofree - int 0x40 -.nofree: - mov [edx + data_size - data_buffer], 0 - add edx, 4 - cmp edx, data_format - jnae .next - jmp wait_event - -command_getsize: - -print "get size" - - ; we should send reply, containing size of data with chosen format id - movzx eax, word [eax + 18] ; format id - mov esi, 4 - call find_format -;pregs - cmp eax, -1 - jz zero_size - - lea edx, [data_size + eax * 4] - mov eax, [edx] - jmp send_getsize -zero_size: - mov edx, dw_zero ; send 0 to indicate that the buffer is empty -send_getsize: - jmp send_msg - -command_get: -print "get" - -; we need to send the data - - ; [:||||:] - - movzx eax, word [eax + 18] ; format id - call find_format - cmp eax, -1 - jz wait_event - mov edi, eax ; а нефиг - - mov edx, [data_buffer + edi * 4] - mov esi, [data_size + edi * 4] - ;jmp send_msg - -send_msg: - - ; for debugging -; mov eax, 5 -; mov ebx, DELAY*5 -; int 0x40 - - mov ebp, ATTEMPT ; number of attempts to send - mov eax, [IPC_buffer] - mov ecx, [eax + 8] ; sender PID - mov eax, 60 - mov ebx, 2 - int 0x40 -print "send data result eax" -pregs - cmp eax, 2 - jz .wait - cmp eax, 3 ; it is strange.. - jz .wait ; maybe he needs time to resize his buf - jmp wait_event -.wait: - dec ebp - jz wait_event - mov eax, 5 ; sleep a bit - mov ebx, DELAY - int 0x40 - jmp send_msg - - -find_format: ; small function returning number of format - -;print "find format" - push ebx - mov ebx, eax ; format id - and ebx, 0xffff ; it is word - xor eax, eax -next: - cmp [data_format + eax * 4], ebx - jz found - inc eax - cmp eax, MAX_FORMAT - jb next -not_found: - or eax, -1 -found: -;pregs - pop ebx - ret - -; <--- initialised data ---> -DATA - IPC_buffer dd 0 - IPC_buffer_size dd DEFAULT_SIZE ; initially 64K - - info db 1024 dup(0) ; for process info - - data_buffer dd MAX_FORMAT dup(0) ; buffer for some format - ; (256 formats max) - data_format dd MAX_FORMAT dup(0) ; format id - data_size dd MAX_FORMAT dup(0) ; size of buffer - data_count dd 0 ; number of formats used - dw_zero dd 0 ; used to tell that - ; we don't have a format - -; <--- uninitialised data ---> -UDATA - - -MEOS_APP_END -; <--- end of MenuetOS application ---> +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + + +; <--- description ---> +; compiler: FASM +; name: Clipboard server/daemon +; version: 0.2 +; author: barsuk + +; <--- include all MeOS stuff ---> +include "lang.inc" +include "..\..\..\macros.inc" + +; <--- start of MenuetOS application ---> +MEOS_APP_START + +;define DEBUG TRUE +define DEBUG FALSE +include "bdebug.inc" + +DEFAULT_SIZE = 0x10010 ; 64K + size of headers +MAX_SIZE = 0x01000000 ; 16 M +MAX_FORMAT = 16 +DELAY = 10 ; 1/10 sec between sending attempts +ATTEMPT = 5 ; number of sending attempts + + +; <--- start of code ---> +CODE + + ; во-первых, надо убить все @clip, какие найдутся: + ; демон буфера обмена должен быть только один! + ; и им окажется самый молодой из демонов... + + mov ecx, 2 ; первый номер слота для проверки + mov ebp, info + mov ebx, ebp + mov edx, 18 +.next_process: + mov eax, 9 + int 0x40 + cmp dword [ebx + 10], '@CLI' + jnz .differ + cmp byte [ebx + 14], 'P' + jnz .differ +.similar: + xchg eax, edx + mov ebx, 2 + int 0x40 + mov ebx, ebp + xchg eax, edx +.differ: + inc ecx + cmp ecx, eax + jae .done ; process not found + jmp .next_process + +.done: + mov eax, 68 ; init heap + mov ebx, 11 + int 0x40 + + mov eax, 66 ; set hotkey: Ctrl-Alt-V + mov ebx, 4 + mov ecx, 47 + mov edx, 0x110 ; 0x110 + int 0x40 +print "set hot key (1 bad)" +pregs + + mov ebp, DEFAULT_SIZE + + mov eax, 68 ; get memory for buffer + mov ebx, 12 + mov ecx, ebp + int 0x40 + mov esi, IPC_buffer + mov [esi], eax + + mov eax, 60 ; define buffer for IPC + mov ebx, 1 + mov ecx, [esi] + mov edx, ebp + int 0x40 + + mov eax, 40 + mov ebx, 01000010b ; + int 0x40 + +wait_event: ; main cycle + mov eax, [IPC_buffer] + mov dword [eax], 0 ; unlock buffer + mov dword [eax + 4], 8 + + mov eax, 10 ; wait + int 0x40 +print "event" +pregs + + ;dec eax + ;dec eax + cmp eax, 2 + jnz ipc_event + +print "hotkey" + + mov eax, 2 + int 0x40 +pregs + cmp ah, 47 ; "v" up + jnz wait_event + +print "hotkey v up" + ; it is hotkey + mov eax, 1 + mov ebx, eax + call find_format +pregs + cmp eax, -1 + jz wait_event + mov esi, [data_buffer + eax * 4] + mov edi, [data_size + eax * 4] + mov ecx, 2 +print "ping" +.next: + mov eax, 72 + movzx edx, byte [esi] + int 0x40 ; here we should pause if eax = 1 +pregs + + inc esi + dec edi + jnz .next + jmp wait_event + +ipc_event: + +; we get an IPC message + +print "recv. " + + mov eax, [IPC_buffer] + mov dword [eax], 1 ; lock buffer + mov dword [eax + 4], 8 + +dph1 dword [eax] ; lock +dph1 dword [eax + 4] ; current used size +dph1 dword [eax + 8] ; pid +dph1 dword [eax + 12] ; len +print "" +dph1 dword [eax + 16] ; cmd << 16 | fmt +dph1 dword [eax + 20] +dph1 dword [eax + 24] + + mov ebx, [eax + 8 + 4] + cmp ebx, 8 + jb wait_event ; all my messages have 8-byte header + ; so ignore this one + + movzx ecx, word [eax + 8 + 8] ; command + cmp ecx, 1 + jz command_setsize + cmp ecx, 2 + jz command_set + cmp ecx, 3 + jz command_getsize + cmp ecx, 4 + jz command_get + cmp ecx, 5 + jz command_delete + jmp wait_event ; unrecognised command + +command_setsize: + +; the only thing we really need to do here is to grow IPC buffer +; no changes are done to real buffer of chosen format + +; the bad thing is that IPC buffer grows and never becomes less. +; i want to fix this in the next version. + +print "set size" + + mov esi, [IPC_buffer_size] + mov ecx, [eax + 24] ; size + add ecx, 0x18 ; for headers +;pregs + cmp esi, ecx + jae wait_event +print "ipc buffer resize from esi to ecx" +pregs + + mov ebp, MAX_SIZE ; sort of protection. forbid transfer of more + cmp ecx, ebp ; than 16,7 Mb of data through buffer + jbe not_much + mov ecx, ebp + +not_much: + xchg eax, edi ; edx := [IPC_buffer] + add ecx, 0x18 ; for headers + + mov [IPC_buffer_size], ecx + mov eax, 68 + mov ebx, 12 + int 0x40 ; get memory +print "get mem for new buf, eax" +pregs + mov [IPC_buffer], eax + + mov dword [eax + 4], 8 + mov edx, ecx + mov ecx, eax + mov eax, 60 + mov ebx, 1 + int 0x40 ; make it IPC buffer + + mov ecx, edi + mov eax, 68 + mov ebx, 13 + int 0x40 ; free old IPC buffer + + jmp wait_event + +command_set: +print "set" + +; here we put the data transfered to us to one of internal buffers + +;;;outs eax + 0x18 + + movzx eax, word [eax + 18] ; format id + call find_format + cmp eax, -1 + jz new_format + mov edx, eax + + ; free old buffer of this format + + mov ecx, [data_buffer + edx * 4] + mov eax, 68 + mov ebx, 13 + int 0x40 + jmp set_buffer + +new_format: + mov eax, data_count ; allocate a buffer + mov edx, [eax] + inc dword [eax] ; no protection, no checks. very bad :( +set_buffer: + mov eax, [IPC_buffer] + mov ecx, dword [eax + 12] + sub ecx, 8 ; get length of data itself + ; subtract size of my headers +;pregs + mov [data_size + edx * 4], ecx ; save length of data + + mov eax, 68 + mov ebx, 12 + int 0x40 + mov [data_buffer + edx * 4], eax + +; copy data from IPC to new buffer + mov esi, [IPC_buffer] + mov ebp, esi + add esi, 24 ; start of data + mov edi, eax + rep movsb ; oh, me knows that it's bad + + mov eax, ebp + movzx ecx, word [eax + 18] ; format id + mov [data_format + edx * 4], ecx + + ; debug +; print "set debug" +; mov eax, [data_buffer + edx * 4] +; mov ebx, [data_size + edx * 4] +; mov ecx, [data_format + edx * 4] +; pregs + + jmp wait_event + +command_delete: + movzx eax, word [eax + 18] ; format id + cmp eax, -1 + jz command_clear + call find_format + cmp eax, -1 + jz wait_event + mov ecx, [data_buffer + eax * 4] + mov [data_format + eax * 4], 0 + mov eax, 68 + mov ebx, 13 + int 0x40 + jmp wait_event + +command_clear: + mov eax, 68 + mov ebx, 13 + mov edx, data_buffer +.next: + mov ecx, [edx] + jecxz .nofree + int 0x40 +.nofree: + mov [edx + data_size - data_buffer], 0 + add edx, 4 + cmp edx, data_format + jnae .next + jmp wait_event + +command_getsize: + +print "get size" + + ; we should send reply, containing size of data with chosen format id + movzx eax, word [eax + 18] ; format id + mov esi, 4 + call find_format +;pregs + cmp eax, -1 + jz zero_size + + lea edx, [data_size + eax * 4] + mov eax, [edx] + jmp send_getsize +zero_size: + mov edx, dw_zero ; send 0 to indicate that the buffer is empty +send_getsize: + jmp send_msg + +command_get: +print "get" + +; we need to send the data + + ; [:||||:] + + movzx eax, word [eax + 18] ; format id + call find_format + cmp eax, -1 + jz wait_event + mov edi, eax ; а нефиг + + mov edx, [data_buffer + edi * 4] + mov esi, [data_size + edi * 4] + ;jmp send_msg + +send_msg: + + ; for debugging +; mov eax, 5 +; mov ebx, DELAY*5 +; int 0x40 + + mov ebp, ATTEMPT ; number of attempts to send + mov eax, [IPC_buffer] + mov ecx, [eax + 8] ; sender PID + mov eax, 60 + mov ebx, 2 + int 0x40 +print "send data result eax" +pregs + cmp eax, 2 + jz .wait + cmp eax, 3 ; it is strange.. + jz .wait ; maybe he needs time to resize his buf + jmp wait_event +.wait: + dec ebp + jz wait_event + mov eax, 5 ; sleep a bit + mov ebx, DELAY + int 0x40 + jmp send_msg + + +find_format: ; small function returning number of format + +;print "find format" + push ebx + mov ebx, eax ; format id + and ebx, 0xffff ; it is word + xor eax, eax +next: + cmp [data_format + eax * 4], ebx + jz found + inc eax + cmp eax, MAX_FORMAT + jb next +not_found: + or eax, -1 +found: +;pregs + pop ebx + ret + +; <--- initialised data ---> +DATA + IPC_buffer dd 0 + IPC_buffer_size dd DEFAULT_SIZE ; initially 64K + + info db 1024 dup(0) ; for process info + + data_buffer dd MAX_FORMAT dup(0) ; buffer for some format + ; (256 formats max) + data_format dd MAX_FORMAT dup(0) ; format id + data_size dd MAX_FORMAT dup(0) ; size of buffer + data_count dd 0 ; number of formats used + dw_zero dd 0 ; used to tell that + ; we don't have a format + +; <--- uninitialised data ---> +UDATA + + +MEOS_APP_END +; <--- end of MenuetOS application ---> diff --git a/programs/other/outdated/clip/trunk/Tupfile.lua b/programs/other/outdated/clip/Tupfile.lua similarity index 80% rename from programs/other/outdated/clip/trunk/Tupfile.lua rename to programs/other/outdated/clip/Tupfile.lua index 6abb5e309..19a3c4aec 100644 --- a/programs/other/outdated/clip/trunk/Tupfile.lua +++ b/programs/other/outdated/clip/Tupfile.lua @@ -1,5 +1,5 @@ if tup.getconfig("NO_FASM") ~= "" then return end -HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../../.." or tup.getconfig("HELPERDIR") +HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR") tup.include(HELPERDIR .. "/use_fasm.lua") add_include(tup.getvariantdir()) diff --git a/programs/other/outdated/clip/trunk/bdebug.inc b/programs/other/outdated/clip/bdebug.inc similarity index 84% rename from programs/other/outdated/clip/trunk/bdebug.inc rename to programs/other/outdated/clip/bdebug.inc index 84305e1a3..e8072d7dc 100644 --- a/programs/other/outdated/clip/trunk/bdebug.inc +++ b/programs/other/outdated/clip/bdebug.inc @@ -1,47 +1,50 @@ -; debugging include file by barsuk -; if DEBUG=TRUE, adds debug.inc -; if DEBUG=FALSE, adds stubs for several macros from debug.inc - -match =TRUE, DEBUG -{ - -include '..\..\..\..\debug.inc' - -macro dph1 str -\{ - debug_print_hex str - push eax - mov al, ' ' - call debug_outchar - pop eax -\} - -macro outs str -\{ - pushad - lea edx, [str] - call debug_outstr - popad -\} -} - -match =FALSE, DEBUG -{ - -macro print message -\{ -\} - -macro pregs -\{ -\} - -macro dph1 str -\{ -\} - -macro outs str -\{ -\} - -} \ No newline at end of file +; SPDX-License-Identifier: NOASSERTION +; + +; debugging include file by barsuk +; if DEBUG=TRUE, adds debug.inc +; if DEBUG=FALSE, adds stubs for several macros from debug.inc + +match =TRUE, DEBUG +{ + +include '..\..\..\debug.inc' + +macro dph1 str +\{ + debug_print_hex str + push eax + mov al, ' ' + call debug_outchar + pop eax +\} + +macro outs str +\{ + pushad + lea edx, [str] + call debug_outstr + popad +\} +} + +match =FALSE, DEBUG +{ + +macro print message +\{ +\} + +macro pregs +\{ +\} + +macro dph1 str +\{ +\} + +macro outs str +\{ +\} + +} diff --git a/programs/other/outdated/clip/trunk/build_ru.bat b/programs/other/outdated/clip/build_ru.bat similarity index 100% rename from programs/other/outdated/clip/trunk/build_ru.bat rename to programs/other/outdated/clip/build_ru.bat diff --git a/programs/other/outdated/clip/trunk/clip.inc b/programs/other/outdated/clip/clip.inc similarity index 100% rename from programs/other/outdated/clip/trunk/clip.inc rename to programs/other/outdated/clip/clip.inc diff --git a/programs/other/outdated/clip/trunk/clip.txt b/programs/other/outdated/clip/clip.txt similarity index 100% rename from programs/other/outdated/clip/trunk/clip.txt rename to programs/other/outdated/clip/clip.txt diff --git a/programs/other/outdated/clip/trunk/clip_en.txt b/programs/other/outdated/clip/clip_en.txt similarity index 100% rename from programs/other/outdated/clip/trunk/clip_en.txt rename to programs/other/outdated/clip/clip_en.txt diff --git a/programs/other/outdated/clip/trunk/cliptest.ASM b/programs/other/outdated/clip/cliptest.ASM similarity index 92% rename from programs/other/outdated/clip/trunk/cliptest.ASM rename to programs/other/outdated/clip/cliptest.ASM index b8fbe85ab..1b20c6273 100644 --- a/programs/other/outdated/clip/trunk/cliptest.ASM +++ b/programs/other/outdated/clip/cliptest.ASM @@ -1,240 +1,246 @@ -; <--- description ---> -; compiler: FASM -; name: Clipboard Client Demo -; version: 0.1 -; author: barsuk - - -; <--- include all MeOS stuff ---> -include "lang.inc" -include "..\..\..\..\macros.inc" - -TEST_SIZE = 100000 ; должно делиться на 4 - -IPC_buffer_size = TEST_SIZE + 0x10 -MAX_BUFFER = TEST_SIZE + 0x10 - -SEND_DELAY = 10 -RECV_DELAY = 100 - -ATTEMPT = 5 ; число попыток отправить сообщение демону, если - ; он занят - -; <--- start of MenuetOS application ---> -MEOS_APP_START - -define DEBUG TRUE -include "bdebug.inc" - -include "clip.inc" - -; <--- start of code ---> -CODE - - -;;; This is the entry point of the program - -begin: - -print "clipboard testing module loaded" - - mov eax, 5 - mov ebx, 100 ; 5 sec - int 0x40 - - call clipboard_init - or eax, eax - jz .err - - ; put the data into clip_buffer - - mov esi, test_line - mov edi, cb.data - mov ecx, cb.size - rep movsb - -print "init ok. @clip found." - - mov esi, cb - mov eax, 2 - call clipboard_write - or eax, eax - jz .err - -print "write test ok." - -; слегка очистим буфер, для надежности проверки - - mov dword [cb.data], 0 - -;jmp .exit - mov eax, 3 ; try to read bad data - mov esi, cb - mov edx, 7 - call clipboard_read - or eax, eax - jz .bad2 - cmp eax, -1 - jz .err - -.bad2: -print "unset data read ok 1." - mov eax, 88 ; -"- - mov esi, cb - mov edx, 7 - call clipboard_read - or eax, eax - jz .bad3 - cmp eax, -1 - jz .err - -.bad3: -print "unset data read ok 2." - -.read: - mov eax, 2 - mov esi, cb - mov edx, 7 - call clipboard_read ; read the string we've written - or eax, eax - jz .err - cmp eax, -1 - jz .err - -print "read ok o_O, data:" -outs cb.data -print "" - - mov eax, 5 - mov ebx, 200 - int 0x40 - - -; последняя проверка - на ресайз буфера. а именно, возьмем много данных -; и прокачаем их через буфер - - mov eax, 68 - mov ebx, 11 - int 0x40 - - mov eax, 68 - mov ebx, 12 - mov ecx, TEST_SIZE + 12 - int 0x40 - mov [mega_buf], eax - - mov dword [eax], TEST_SIZE - - lea edx, [eax + 12] - mov eax, 12131415 - shr ecx, 2 -.loop: - mov [edx], eax - add edx, 4 - dec ecx - jnz .loop - -print "mega buffer allocated and filled" - - ; now write it - - mov esi, [mega_buf] - mov eax, 69 - call clipboard_write - or eax, eax - jz .err - -print "mega buffer written" - mov eax, 5 - mov ebx, 100 - int 0x40 - - ; clear it. - - mov edx, [mega_buf] - add edx, 12 - xor eax, eax - mov ecx, TEST_SIZE/4 -.loopc: - mov [edx], eax - add edx, 4 - dec ecx - jnz .loopc - - ; now read - - mov eax, 69 - mov esi, [mega_buf] - mov edx, 7 - call clipboard_read ; read the string we've written - or eax, eax - jz .err - cmp eax, -1 - jz .err - -print "mega buf read" - - ; now compare - - mov edx, [mega_buf] - add edx, 12 - mov eax, 12131415 - mov ecx, TEST_SIZE/4 -.loopm: - cmp eax, [edx] - jnz .err - add edx, 4 - dec ecx - jnz .loopm - -print "deleting mega buf" - - mov eax, 69 - call clipboard_delete - or eax, eax - jz .err - - mov eax, 5 - mov ebx, 100 - int 0x40 - -print "if read error then all is ok" - - mov eax, 69 - mov esi, [mega_buf] - mov edx, 7 - call clipboard_read ; read the string we've written - or eax, eax - jz .reading - jmp .err - -.reading: - -print "test complete!" - -.exit: - or eax, -1 - int 0x40 - -.err: -print "error!" - jmp .exit - - -; <--- initialised data ---> -DATA - - CLIP_BUFFER cb, 256 - -; in_buf db 256 dup(0) -; out_buf db 'Cthulhu Fhtagn',0 - - test_line db 'Cthulhu Fhtagn',0 - mega_buf dd 0 - -; <--- uninitialised data ---> -UDATA - - -MEOS_APP_END -; <--- end of MenuetOS application ---> +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + + +; <--- description ---> +; compiler: FASM +; name: Clipboard Client Demo +; version: 0.1 +; author: barsuk + + +; <--- include all MeOS stuff ---> +include "lang.inc" +include "..\..\..\macros.inc" + +TEST_SIZE = 100000 ; должно делиться на 4 + +IPC_buffer_size = TEST_SIZE + 0x10 +MAX_BUFFER = TEST_SIZE + 0x10 + +SEND_DELAY = 10 +RECV_DELAY = 100 + +ATTEMPT = 5 ; число попыток отправить сообщение демону, если + ; он занят + +; <--- start of MenuetOS application ---> +MEOS_APP_START + +define DEBUG TRUE +include "bdebug.inc" + +include "clip.inc" + +; <--- start of code ---> +CODE + + +;;; This is the entry point of the program + +begin: + +print "clipboard testing module loaded" + + mov eax, 5 + mov ebx, 100 ; 5 sec + int 0x40 + + call clipboard_init + or eax, eax + jz .err + + ; put the data into clip_buffer + + mov esi, test_line + mov edi, cb.data + mov ecx, cb.size + rep movsb + +print "init ok. @clip found." + + mov esi, cb + mov eax, 2 + call clipboard_write + or eax, eax + jz .err + +print "write test ok." + +; слегка очистим буфер, для надежности проверки + + mov dword [cb.data], 0 + +;jmp .exit + mov eax, 3 ; try to read bad data + mov esi, cb + mov edx, 7 + call clipboard_read + or eax, eax + jz .bad2 + cmp eax, -1 + jz .err + +.bad2: +print "unset data read ok 1." + mov eax, 88 ; -"- + mov esi, cb + mov edx, 7 + call clipboard_read + or eax, eax + jz .bad3 + cmp eax, -1 + jz .err + +.bad3: +print "unset data read ok 2." + +.read: + mov eax, 2 + mov esi, cb + mov edx, 7 + call clipboard_read ; read the string we've written + or eax, eax + jz .err + cmp eax, -1 + jz .err + +print "read ok o_O, data:" +outs cb.data +print "" + + mov eax, 5 + mov ebx, 200 + int 0x40 + + +; последняя проверка - на ресайз буфера. а именно, возьмем много данных +; и прокачаем их через буфер + + mov eax, 68 + mov ebx, 11 + int 0x40 + + mov eax, 68 + mov ebx, 12 + mov ecx, TEST_SIZE + 12 + int 0x40 + mov [mega_buf], eax + + mov dword [eax], TEST_SIZE + + lea edx, [eax + 12] + mov eax, 12131415 + shr ecx, 2 +.loop: + mov [edx], eax + add edx, 4 + dec ecx + jnz .loop + +print "mega buffer allocated and filled" + + ; now write it + + mov esi, [mega_buf] + mov eax, 69 + call clipboard_write + or eax, eax + jz .err + +print "mega buffer written" + mov eax, 5 + mov ebx, 100 + int 0x40 + + ; clear it. + + mov edx, [mega_buf] + add edx, 12 + xor eax, eax + mov ecx, TEST_SIZE/4 +.loopc: + mov [edx], eax + add edx, 4 + dec ecx + jnz .loopc + + ; now read + + mov eax, 69 + mov esi, [mega_buf] + mov edx, 7 + call clipboard_read ; read the string we've written + or eax, eax + jz .err + cmp eax, -1 + jz .err + +print "mega buf read" + + ; now compare + + mov edx, [mega_buf] + add edx, 12 + mov eax, 12131415 + mov ecx, TEST_SIZE/4 +.loopm: + cmp eax, [edx] + jnz .err + add edx, 4 + dec ecx + jnz .loopm + +print "deleting mega buf" + + mov eax, 69 + call clipboard_delete + or eax, eax + jz .err + + mov eax, 5 + mov ebx, 100 + int 0x40 + +print "if read error then all is ok" + + mov eax, 69 + mov esi, [mega_buf] + mov edx, 7 + call clipboard_read ; read the string we've written + or eax, eax + jz .reading + jmp .err + +.reading: + +print "test complete!" + +.exit: + or eax, -1 + int 0x40 + +.err: +print "error!" + jmp .exit + + +; <--- initialised data ---> +DATA + + CLIP_BUFFER cb, 256 + +; in_buf db 256 dup(0) +; out_buf db 'Cthulhu Fhtagn',0 + + test_line db 'Cthulhu Fhtagn',0 + mega_buf dd 0 + +; <--- uninitialised data ---> +UDATA + + +MEOS_APP_END +; <--- end of MenuetOS application ---> diff --git a/programs/other/outdated/clip/trunk/makefile b/programs/other/outdated/clip/makefile similarity index 100% rename from programs/other/outdated/clip/trunk/makefile rename to programs/other/outdated/clip/makefile diff --git a/programs/other/outdated/clip/trunk/test2.asm b/programs/other/outdated/clip/test2.asm similarity index 94% rename from programs/other/outdated/clip/trunk/test2.asm rename to programs/other/outdated/clip/test2.asm index 809885c2b..589538d38 100644 --- a/programs/other/outdated/clip/trunk/test2.asm +++ b/programs/other/outdated/clip/test2.asm @@ -1,272 +1,278 @@ -; <--- description ---> -; compiler: FASM -; name: Clipboard test with GUI. -; version: 0.1 -; author: barsuk -; comments: uses edit_box by Maxxxx32, (old static version) - - -; <--- include all MeOS stuff ---> -include "lang.inc" -include "..\..\..\..\macros.inc" - -; <--- start of MenuetOS application ---> -MEOS_APP_START - -SEND_DELAY = 10 -RECV_DELAY = 100 -ATTEMPT = 5 - - -define DEBUG TRUE -include "bdebug.inc" - -include "editbox.inc" - -include "clip.inc" - -use_edit_box - -; <--- start of code ---> -CODE - - call clipboard_init - - call draw_window ; at first create and draw the window - -wait_event: ; main cycle - - mov edi, input_box - call edit_box.mouse - - mov eax, 10 - int 0x40 - - cmp eax, 1 ; if event == 1 - je redraw ; jump to redraw handler - cmp eax, 2 ; else if event == 2 - je key ; jump to key handler - cmp eax, 3 ; else if event == 3 - je button ; jump to button handler - - jmp wait_event ; else return to the start of main cycle - - -redraw: ; redraw event handler - call draw_window - jmp wait_event - - -key: ; key event handler - mov eax, 2 ; get key code - int 0x40 - - cmp ah, '0' - jb no_digit - cmp ah, '9' - ja no_digit - sub ah, '0' - mov byte [format_id], ah - call draw_window - jmp wait_event -no_digit: - - mov edi, input_box - call edit_box.key - - jmp wait_event - - - button: ; button event handler - mov eax, 17 ; get button identifier - int 0x40 - - cmp ah, 1 - jz exit - - cmp ah, 5 - jz copy - cmp ah, 6 - jz paste - jmp wait_event -copy: - mov esi, input_text - mov edi, buffer.data - mov ecx, [buffer.size] - rep movsb ; copy text to buffer - - mov edi, input_box - mov edx, [edi + 38] ; ed_size - xchg edx, [buffer.size] - movzx eax, byte [format_id] - mov esi, buffer - call clipboard_write - xchg edx, [buffer.size] - jmp wait_event - -paste: - mov esi, buffer - movzx eax, byte [format_id] - mov edx, 7 - call clipboard_read - - or eax, eax - jz wait_event - - cmp eax, -1 - jz wait_event - - or edx, edx - jz wait_event ; это все ошибки - - mov eax, input_box -;print "input box" -;dph1 [eax] -;dph1 [eax+4] -;dph1 [eax+8] -;dph1 [eax+12] -;dph1 [eax+16] -;dph1 [eax+20] -;dph1 [eax+24] - -;;;;jmp wait_event - - mov word [input_box + 36], ed_focus ; flags - - mov ecx, [input_box + 38] ; size -print "paste read ecx=size" - jecxz .noloop - mov edi, input_box - mov ah, 8 ; backspace -.loop: - call edit_box.key - dec ecx - jnz .loop -.noloop: - mov esi, buffer.data - mov ecx, edx -pregs -.loop2: - mov ah, [esi] - cmp ah, 0 - jz .done - call edit_box.key ; я бы себе руки отрезал за такое - ; но что делать, если иначе не получается? - inc esi - dec ecx - jnz .loop2 - -.done: -print "rest of data ecx" -pregs - call draw_window - jmp wait_event - -exit: - or eax, -1 ; exit application - int 0x40 - - - draw_window: - mov eax, 12 ; start drawing - mov ebx, 1 - int 0x40 - - mov eax, 0 ; create and draw the window - mov ebx, 100*65536+400 ; (window_cx)*65536+(window_sx) - mov ecx, 100*65536+250 ; (window_cy)*65536+(window_sy) - mov edx, 0x33ffffff ; work area color & window type 3 - mov edi, head - int 0x40 - - mov eax, 4 - mov ebx, 10 shl 16 + 10 - mov ecx, 0x80000000 - mov edx, text1 - int 0x40 - mov eax, 4 - mov ebx, 10 shl 16 + 20 - mov edx, text2 - int 0x40 - mov eax, 47 - mov ebx, 0x00020000 - movzx ecx, byte [format_id] - mov edx, 200 shl 16 + 20 - mov esi, 0 - int 0x40 - - mov eax, 8 - mov ebx, 10 shl 16 + 60 - mov ecx, 40 shl 16 + 15 - mov edx, 5 - mov esi, 0xd72189 - int 0x40 - mov eax, 4 - mov ebx, 12 shl 16 + 42 - mov ecx, 0x80000000 - mov edx, button1 - int 0x40 - - mov eax, 8 - mov ebx, 80 shl 16 + 60 - mov ecx, 40 shl 16 + 15 - mov edx, 6 - mov esi, 0xd72189 - int 0x40 - mov eax, 4 - mov ebx, 82 shl 16 + 42 - mov ecx, 0x80000000 - mov edx, button2 - int 0x40 - - mov edi, input_box - call edit_box.draw - -; mov eax, 4 -; mov ebx, 10 shl 16 + 90 -; mov ecx, 0 -; mov edx, input_text -; mov esi, [input_box + 38] -; int 0x40 -; mov eax, esi -;print "eax = edit etxt len" -;pregs - - - - mov eax, 12 ; finish drawing - mov ebx, 2 - int 0x40 - - ret - - - -; <--- initialised data ---> -DATA - - format_id db 1 - -; buffer db 256 dup(0) - - CLIP_BUFFER buffer, 256 - - input_text db 256 dup(0) - input_box edit_box 100,10,70,0xffffff,0,0x00aaaaaa,0,255,input_text - -; input_box edit_box 100,10,70,0xffffff,0,0xaaaaaa,0,\ -; 0xaaaaaa,0,255,input_text,ed_always_focus - - head db "Пример работы с буфером обмена",0 - text1 db "Нажимайте цифры 0-9 для смены id формата данных",0 - text2 db "Сейчас выбран id формата данных: ",0 - - button1 db "Копировать",0 - button2 db "Вставить",0 - -; <--- uninitialised data ---> -UDATA - - -MEOS_APP_END -; <--- end of MenuetOS application ---> +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + + +; <--- description ---> +; compiler: FASM +; name: Clipboard test with GUI. +; version: 0.1 +; author: barsuk +; comments: uses edit_box by Maxxxx32, (old static version) + + +; <--- include all MeOS stuff ---> +include "lang.inc" +include "..\..\..\macros.inc" + +; <--- start of MenuetOS application ---> +MEOS_APP_START + +SEND_DELAY = 10 +RECV_DELAY = 100 +ATTEMPT = 5 + + +define DEBUG TRUE +include "bdebug.inc" + +include "editbox.inc" + +include "clip.inc" + +use_edit_box + +; <--- start of code ---> +CODE + + call clipboard_init + + call draw_window ; at first create and draw the window + +wait_event: ; main cycle + + mov edi, input_box + call edit_box.mouse + + mov eax, 10 + int 0x40 + + cmp eax, 1 ; if event == 1 + je redraw ; jump to redraw handler + cmp eax, 2 ; else if event == 2 + je key ; jump to key handler + cmp eax, 3 ; else if event == 3 + je button ; jump to button handler + + jmp wait_event ; else return to the start of main cycle + + +redraw: ; redraw event handler + call draw_window + jmp wait_event + + +key: ; key event handler + mov eax, 2 ; get key code + int 0x40 + + cmp ah, '0' + jb no_digit + cmp ah, '9' + ja no_digit + sub ah, '0' + mov byte [format_id], ah + call draw_window + jmp wait_event +no_digit: + + mov edi, input_box + call edit_box.key + + jmp wait_event + + + button: ; button event handler + mov eax, 17 ; get button identifier + int 0x40 + + cmp ah, 1 + jz exit + + cmp ah, 5 + jz copy + cmp ah, 6 + jz paste + jmp wait_event +copy: + mov esi, input_text + mov edi, buffer.data + mov ecx, [buffer.size] + rep movsb ; copy text to buffer + + mov edi, input_box + mov edx, [edi + 38] ; ed_size + xchg edx, [buffer.size] + movzx eax, byte [format_id] + mov esi, buffer + call clipboard_write + xchg edx, [buffer.size] + jmp wait_event + +paste: + mov esi, buffer + movzx eax, byte [format_id] + mov edx, 7 + call clipboard_read + + or eax, eax + jz wait_event + + cmp eax, -1 + jz wait_event + + or edx, edx + jz wait_event ; это все ошибки + + mov eax, input_box +;print "input box" +;dph1 [eax] +;dph1 [eax+4] +;dph1 [eax+8] +;dph1 [eax+12] +;dph1 [eax+16] +;dph1 [eax+20] +;dph1 [eax+24] + +;;;;jmp wait_event + + mov word [input_box + 36], ed_focus ; flags + + mov ecx, [input_box + 38] ; size +print "paste read ecx=size" + jecxz .noloop + mov edi, input_box + mov ah, 8 ; backspace +.loop: + call edit_box.key + dec ecx + jnz .loop +.noloop: + mov esi, buffer.data + mov ecx, edx +pregs +.loop2: + mov ah, [esi] + cmp ah, 0 + jz .done + call edit_box.key ; я бы себе руки отрезал за такое + ; но что делать, если иначе не получается? + inc esi + dec ecx + jnz .loop2 + +.done: +print "rest of data ecx" +pregs + call draw_window + jmp wait_event + +exit: + or eax, -1 ; exit application + int 0x40 + + + draw_window: + mov eax, 12 ; start drawing + mov ebx, 1 + int 0x40 + + mov eax, 0 ; create and draw the window + mov ebx, 100*65536+400 ; (window_cx)*65536+(window_sx) + mov ecx, 100*65536+250 ; (window_cy)*65536+(window_sy) + mov edx, 0x33ffffff ; work area color & window type 3 + mov edi, head + int 0x40 + + mov eax, 4 + mov ebx, 10 shl 16 + 10 + mov ecx, 0x80000000 + mov edx, text1 + int 0x40 + mov eax, 4 + mov ebx, 10 shl 16 + 20 + mov edx, text2 + int 0x40 + mov eax, 47 + mov ebx, 0x00020000 + movzx ecx, byte [format_id] + mov edx, 200 shl 16 + 20 + mov esi, 0 + int 0x40 + + mov eax, 8 + mov ebx, 10 shl 16 + 60 + mov ecx, 40 shl 16 + 15 + mov edx, 5 + mov esi, 0xd72189 + int 0x40 + mov eax, 4 + mov ebx, 12 shl 16 + 42 + mov ecx, 0x80000000 + mov edx, button1 + int 0x40 + + mov eax, 8 + mov ebx, 80 shl 16 + 60 + mov ecx, 40 shl 16 + 15 + mov edx, 6 + mov esi, 0xd72189 + int 0x40 + mov eax, 4 + mov ebx, 82 shl 16 + 42 + mov ecx, 0x80000000 + mov edx, button2 + int 0x40 + + mov edi, input_box + call edit_box.draw + +; mov eax, 4 +; mov ebx, 10 shl 16 + 90 +; mov ecx, 0 +; mov edx, input_text +; mov esi, [input_box + 38] +; int 0x40 +; mov eax, esi +;print "eax = edit etxt len" +;pregs + + + + mov eax, 12 ; finish drawing + mov ebx, 2 + int 0x40 + + ret + + + +; <--- initialised data ---> +DATA + + format_id db 1 + +; buffer db 256 dup(0) + + CLIP_BUFFER buffer, 256 + + input_text db 256 dup(0) + input_box edit_box 100,10,70,0xffffff,0,0x00aaaaaa,0,255,input_text + +; input_box edit_box 100,10,70,0xffffff,0,0xaaaaaa,0,\ +; 0xaaaaaa,0,255,input_text,ed_always_focus + + head db "Пример работы с буфером обмена",0 + text1 db "Нажимайте цифры 0-9 для смены id формата данных",0 + text2 db "Сейчас выбран id формата данных: ",0 + + button1 db "Копировать",0 + button2 db "Вставить",0 + +; <--- uninitialised data ---> +UDATA + + +MEOS_APP_END +; <--- end of MenuetOS application --->