forked from KolibriOS/kolibrios
upload RUN sources; upload KolibriOS.lib
git-svn-id: svn://kolibrios.org@7039 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
58bb0f9255
commit
41838ddb4c
BIN
contrib/sdk/lib/KolibriOS.lib
Normal file
BIN
contrib/sdk/lib/KolibriOS.lib
Normal file
Binary file not shown.
24
programs/system/RunOD/1/LScript.x
Normal file
24
programs/system/RunOD/1/LScript.x
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
PATH_SIZE = 1024;
|
||||||
|
PARAMS_SIZE = 256;
|
||||||
|
STACK_SIZE = 1024;
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
.all : AT(0){
|
||||||
|
LONG(0x554e454D);
|
||||||
|
LONG(0x31305445);
|
||||||
|
LONG(1);
|
||||||
|
LONG("@Main");
|
||||||
|
LONG(END);
|
||||||
|
LONG($END + PATH_SIZE + PARAMS_SIZE + STACK_SIZE);
|
||||||
|
LONG($END + PATH_SIZE + PARAMS_SIZE + STACK_SIZE);
|
||||||
|
LONG($END + PATH_SIZE);
|
||||||
|
LONG($END);
|
||||||
|
*(.text)
|
||||||
|
*(.rdata)
|
||||||
|
*(.data)
|
||||||
|
}
|
||||||
|
END = .;
|
||||||
|
.bss ALIGN(16) : {*(.bss)}
|
||||||
|
$END = .;
|
||||||
|
}
|
655
programs/system/RunOD/1/RUN.asm
Normal file
655
programs/system/RunOD/1/RUN.asm
Normal file
@ -0,0 +1,655 @@
|
|||||||
|
Comment *--------------------+
|
||||||
|
| |
|
||||||
|
| Run with OpenDialog |
|
||||||
|
| UASM + KolibriOS.lib |
|
||||||
|
| |
|
||||||
|
+----------------------------*
|
||||||
|
.586
|
||||||
|
.Model Flat, StdCall
|
||||||
|
Option CaseMap: None
|
||||||
|
|
||||||
|
Public @Main
|
||||||
|
|
||||||
|
FALSE = 0
|
||||||
|
TRUE = Not FALSE
|
||||||
|
|
||||||
|
CStr Macro QuotedText:VarArg
|
||||||
|
Local LocalText
|
||||||
|
.Const
|
||||||
|
LocalText db QuotedText,0
|
||||||
|
.Code
|
||||||
|
ExitM <Offset LocalText>
|
||||||
|
EndM
|
||||||
|
|
||||||
|
IfDef LANG_IT
|
||||||
|
szProgramRunSuccessfully equ <CStr("Programma eseguito correttamente")>
|
||||||
|
szFileNotFound equ <CStr("File non trovato")>
|
||||||
|
szFileIsNotExecutable equ <CStr("File non eseguibile")>
|
||||||
|
szTooManyProcesses equ <CStr("Troppi processi")>
|
||||||
|
szAccessDenied equ <CStr("Accesso negato")>
|
||||||
|
szOutOfMemory equ <CStr("Memoria esaurita")>
|
||||||
|
szUnknownError equ <CStr("Errore sconosciuto")>
|
||||||
|
szTypeNameOfProgram equ <CStr("Digita il nome del programma per eseguirlo")>
|
||||||
|
szRun equ <CStr("Esegui")>
|
||||||
|
szTitle equ <CStr("Esegui")>
|
||||||
|
szPressF1 equ <CStr("Premere F1 per visualizzare le informazioni sui tasti di scelta rapida")>
|
||||||
|
szHelpInfo equ <CStr("Insert - il percorso da aprire la finestra di dialogo casella di modifica\n",\
|
||||||
|
"Ctrl + Insert - aggiungi percorso alla posizione corrente del cursore\n",\
|
||||||
|
"Ctrl + Shift + Insert - aggiungi sempre un percorso senza virgolette")>
|
||||||
|
ElseIfDef LANG_SP
|
||||||
|
szProgramRunSuccessfully equ <CStr("Programa ejecutado con exito")>
|
||||||
|
szFileNotFound equ <CStr("Archivo no encontrado")>
|
||||||
|
szFileIsNotExecutable equ <CStr("Archivo no es ejecutable")>
|
||||||
|
szTooManyProcesses equ <CStr("Muchos procesos")>
|
||||||
|
szAccessDenied equ <CStr("Acceso denegado")>
|
||||||
|
szOutOfMemory equ <CStr("Memoria insuficiente")>
|
||||||
|
szUnknownError equ <CStr("Error desconocido")>
|
||||||
|
szTypeNameOfProgram equ <CStr("Tipo nombre del programa a ejecutar")>
|
||||||
|
szRun equ <CStr("Ejecutar")>
|
||||||
|
szTitle equ <CStr("Ejecutar")>
|
||||||
|
szPressF1 equ <CStr("Presione F1 para ver la informacion acerca de las teclas de acceso rapido")>
|
||||||
|
szHelpInfo equ <CStr("Insert - establecer la ruta de recuadro de dialogo en el cuadro de edicion\n",\
|
||||||
|
"Ctrl + Insert - agregar ruta a la posicion actual del cursor\n",\
|
||||||
|
"Ctrl + Shift + Insert - siempre agregar la ruta sin las comillas")>
|
||||||
|
ElseIfDef LANG_RU
|
||||||
|
szProgramRunSuccessfully equ <CStr("<22>à®£à ¬¬ § ¯ãé¥ ãᯥè®")>
|
||||||
|
szFileNotFound equ <CStr("” ©« ¥ ©¤¥")>
|
||||||
|
szFileIsNotExecutable equ <CStr("” ©« ¥ ï¥âáï ¨á¯®«ï¥¬ë¬")>
|
||||||
|
szTooManyProcesses equ <CStr("‘«¨èª®¬ ¬®£® ¯à®æ¥áᮢ")>
|
||||||
|
szAccessDenied equ <CStr("„®áâ㯠§ ¯à¥é¥")>
|
||||||
|
szOutOfMemory equ <CStr("<22>¥¤®áâ â®ç® ¯ ¬ïâ¨")>
|
||||||
|
szUnknownError equ <CStr("<22>¥¨§¢¥áâ ï ®è¨¡ª ")>
|
||||||
|
szTypeNameOfProgram equ <CStr("‚¢¥¤¨â¥ §¢ ¨¥ ¯à®£à ¬¬ë")>
|
||||||
|
szRun equ <CStr("‡ ¯ãáâ¨âì")>
|
||||||
|
szTitle equ <CStr("‡ ¯ã᪠¯à®£à ¬¬ë")>
|
||||||
|
szPressF1 equ <CStr("<22> ¦¬¨â¥ ª« ¢¨èã F1, çâ®¡ë ¯à®á¬®âà¥âì ¨ä®à¬ æ¨î ® £®àïç¨å ª« ¢¨è å")>
|
||||||
|
szHelpInfo equ <CStr("Insert - ãáâ ®¢¨âì ¯ãâì ¨§ ¤¨ «®£ ®âªàëâ¨ï ¢ ¯®«¥ ¢¢®¤ \n",\
|
||||||
|
"Ctrl + Insert - ¤®¡ ¢¨âì ¯ãâì ¨§ ¤¨ «®£ ®âªàëâ¨ï ¢ ¯®«¥ ¢¢®¤ ¢ ⥪ãéãî ¯®§¨æ¨î ªãàá®à \n",\
|
||||||
|
"Ctrl + Shift + Insert - ¢á¥£¤ ¤®¡ ¢«ïâì ¯ãâì ¡¥§ ª ¢ë祪")>
|
||||||
|
ElseIfDef LANG_EN
|
||||||
|
szProgramRunSuccessfully equ <CStr("Program run successfully")>
|
||||||
|
szFileNotFound equ <CStr("File not found")>
|
||||||
|
szFileIsNotExecutable equ <CStr("File is not executable")>
|
||||||
|
szTooManyProcesses equ <CStr("Too many processes")>
|
||||||
|
szAccessDenied equ <CStr("Access denied")>
|
||||||
|
szOutOfMemory equ <CStr("Out of memory")>
|
||||||
|
szUnknownError equ <CStr("Unknown error")>
|
||||||
|
szTypeNameOfProgram equ <CStr("Type name of program to run")>
|
||||||
|
szRun equ <CStr(" Run ")>
|
||||||
|
szTitle equ <CStr("Run")>
|
||||||
|
szPressF1 equ <CStr("Press F1 to view information about the hot keys")>
|
||||||
|
szHelpInfo equ <CStr("Insert - set path from open dialog to edit box\n",\
|
||||||
|
"Ctrl + Insert - add path from open dialog into edit box at the current cursor position\n",\
|
||||||
|
"Ctrl + Shift + Insert - always add path without quotes")>
|
||||||
|
Else
|
||||||
|
.Err LANG_??
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
; Events
|
||||||
|
REDRAW_EVENT = 1
|
||||||
|
KEY_EVENT = 2
|
||||||
|
BUTTON_EVENT = 3
|
||||||
|
BACKGROUND_EVENT = 5
|
||||||
|
MOUSE_EVENT = 6
|
||||||
|
IPC_EVENT = 7
|
||||||
|
NETWORK_EVENT = 8
|
||||||
|
DEBUG_EVENT = 9
|
||||||
|
|
||||||
|
; Window Style Constants
|
||||||
|
WS_SKINNED_FIXED = 4000000H
|
||||||
|
WS_COORD_CLIENT = 20000000H
|
||||||
|
WS_CAPTION = 10000000H
|
||||||
|
|
||||||
|
; Caption Style Constants
|
||||||
|
CS_MOVABLE = 0
|
||||||
|
|
||||||
|
; Event Mask Constants
|
||||||
|
EM_REDRAW = 001H
|
||||||
|
EM_KEY = 002H
|
||||||
|
EM_BUTTON = 004H
|
||||||
|
EM_BACKGROUND = 010H
|
||||||
|
EM_MOUSE = 020H
|
||||||
|
EM_IPC = 040H
|
||||||
|
EM_NETWORK = 080H
|
||||||
|
EM_DEBUG = 100H
|
||||||
|
|
||||||
|
; Draw zero terminated string for DrawText
|
||||||
|
DT_ZSTRING = 080000000H
|
||||||
|
|
||||||
|
; Charset specifiers for DrawText
|
||||||
|
DT_CP866_8X16 = 10000000H
|
||||||
|
|
||||||
|
; bits for the GetControlKeyState
|
||||||
|
LEFT_SHIFT_PRESSED = 1
|
||||||
|
RIGHT_SHIFT_PRESSED = 2
|
||||||
|
LEFT_CTRL_PRESSED = 4
|
||||||
|
RIGHT_CTRL_PRESSED = 8
|
||||||
|
|
||||||
|
TOpenDialog Struct
|
||||||
|
mode Dword ?
|
||||||
|
procinfo Dword ?
|
||||||
|
com_area_name Dword ?
|
||||||
|
com_area Dword ?
|
||||||
|
opendir_path Dword ?
|
||||||
|
dir_default_path Dword ?
|
||||||
|
start_path Dword ?
|
||||||
|
draw_Window Dword ?
|
||||||
|
status Dword ?
|
||||||
|
openfile_path Dword ?
|
||||||
|
filename_area Dword ?
|
||||||
|
filter_area Dword ?
|
||||||
|
x_size Word ?
|
||||||
|
x_start SWord ?
|
||||||
|
y_size Word ?
|
||||||
|
y_start SWord ?
|
||||||
|
TOpenDialog EndS
|
||||||
|
|
||||||
|
TEditBox Struct
|
||||||
|
x_size Dword ?
|
||||||
|
left SDword ?
|
||||||
|
top SDword ?
|
||||||
|
color Dword ?
|
||||||
|
shift_color Dword ?
|
||||||
|
focus_border_color Dword ?
|
||||||
|
blur_border_color Dword ?
|
||||||
|
text_color Dword ?
|
||||||
|
max Dword ?
|
||||||
|
text Dword ?
|
||||||
|
mouse_variable Dword ?
|
||||||
|
flags Dword ?
|
||||||
|
count Dword ?
|
||||||
|
pos Dword ?
|
||||||
|
offs Dword ?
|
||||||
|
cl_curs_x SWord ?
|
||||||
|
cl_curs_y SWord ?
|
||||||
|
shift Word ?
|
||||||
|
shift_old Word ?
|
||||||
|
height Dword ?
|
||||||
|
char_width Dword ?
|
||||||
|
TEditBox EndS
|
||||||
|
|
||||||
|
TStandartColors Struct
|
||||||
|
frames Dword ?
|
||||||
|
grab Dword ?
|
||||||
|
grab_button Dword ?
|
||||||
|
grab_button_text Dword ?
|
||||||
|
grab_text Dword ?
|
||||||
|
work Dword ?
|
||||||
|
work_button Dword ?
|
||||||
|
work_button_text Dword ?
|
||||||
|
work_text Dword ?
|
||||||
|
work_graph Dword ?
|
||||||
|
TStandartColors EndS
|
||||||
|
|
||||||
|
TRect Struct
|
||||||
|
Left SDword ?
|
||||||
|
Top SDword ?
|
||||||
|
Right SDword ?
|
||||||
|
Bottom SDword ?
|
||||||
|
TRect EndS
|
||||||
|
|
||||||
|
TSize Struct
|
||||||
|
SizeY Word ?
|
||||||
|
SizeX Word ?
|
||||||
|
TSize EndS
|
||||||
|
|
||||||
|
TKeyboardInput Struct
|
||||||
|
Flag Byte ?
|
||||||
|
Code Byte ?
|
||||||
|
Union
|
||||||
|
Scan Byte ?
|
||||||
|
Control Word ?
|
||||||
|
EndS
|
||||||
|
TKeyboardInput EndS
|
||||||
|
|
||||||
|
TButtonInput Struct
|
||||||
|
MouseButton Byte ?
|
||||||
|
ID Word ?
|
||||||
|
HiID Byte ?
|
||||||
|
TButtonInput EndS
|
||||||
|
|
||||||
|
; Button identifiers
|
||||||
|
BUTTON_RUN = 10
|
||||||
|
BUTTON_BROWSE = 20
|
||||||
|
|
||||||
|
KEY_SCAN_ENTER = 01CH
|
||||||
|
KEY_SCAN_INSERT = 052H
|
||||||
|
KEY_SCAN_F1 = 03BH
|
||||||
|
|
||||||
|
KEY_CODE_0 = 030H
|
||||||
|
|
||||||
|
PROC_INFO_BUFFER_SIZE = 1024
|
||||||
|
OPEN_FILE_PATH_BUFFER_SIZE = 4096
|
||||||
|
FILE_NAME_AREA_BUFFER_SIZE = 1024
|
||||||
|
OPEN_DIR_PATH_BUFFER_SIZE = OPEN_FILE_PATH_BUFFER_SIZE - FILE_NAME_AREA_BUFFER_SIZE
|
||||||
|
|
||||||
|
EDIT1_TEXT_BUFFER_SIZE = 4096
|
||||||
|
TMP_BUFFER_SIZE = 4096
|
||||||
|
|
||||||
|
GetButton Proto
|
||||||
|
GetKey Proto
|
||||||
|
WaitEvent Proto
|
||||||
|
BeginDraw Proto
|
||||||
|
EndDraw Proto
|
||||||
|
DrawWindow Proto Left:SDword, Top:SDword, Right:SDword, Bottom:SDword, Caption:Ptr, BackColor:Dword, Style:Dword, CapStyle:Dword
|
||||||
|
ThreadTerminate Proto
|
||||||
|
LoadLibrary Proto Path:Ptr
|
||||||
|
GetProcAddress Proto hLib:Ptr, ProcName:Ptr
|
||||||
|
SetEventMask Proto EventMask:Dword
|
||||||
|
GetScreenSize Proto
|
||||||
|
GetSkinHeight Proto
|
||||||
|
HeapAllocate Proto Bytes:Dword
|
||||||
|
DrawButton Proto Left:SDword, Top:SDword, Right:SDword, Bottom:SDword, BackColor:Dword, Style:Dword, ID:Dword
|
||||||
|
RunFile Proto Path:Ptr, CmdLine:Ptr
|
||||||
|
GetStandardColors Proto ColorTable:Ptr, TableSize:Dword
|
||||||
|
DrawText Proto X:SDword, Y:SDword, Text:Ptr, ForeColor:Dword, BackColor:Dword, Flags:Dword, Count:Dword
|
||||||
|
GetControlKeyState Proto
|
||||||
|
|
||||||
|
EditBoxDraw_proto TypeDef Proto :Ptr
|
||||||
|
EditBoxKey_proto TypeDef Proto :Ptr
|
||||||
|
EditBoxMouse_proto TypeDef Proto :Ptr
|
||||||
|
EditBoxSetText_proto TypeDef Proto :Ptr, :Ptr
|
||||||
|
|
||||||
|
OpenDialogInit_proto TypeDef Proto :Ptr
|
||||||
|
OpenDialogStart_proto TypeDef Proto :Ptr
|
||||||
|
|
||||||
|
OpenDialogInit_proc TypeDef Ptr OpenDialogInit_proto
|
||||||
|
OpenDialogStart_proc TypeDef Ptr OpenDialogStart_proto
|
||||||
|
|
||||||
|
EditBoxDraw_proc TypeDef Ptr EditBoxDraw_proto
|
||||||
|
EditBoxKey_proc TypeDef Ptr EditBoxKey_proto
|
||||||
|
EditBoxMouse_proc TypeDef Ptr EditBoxMouse_proto
|
||||||
|
EditBoxSetText_proc TypeDef Ptr EditBoxSetText_proto
|
||||||
|
; -------------------------------------------------------- ;
|
||||||
|
.Const; -------------------------------------------------- ;
|
||||||
|
; -------------------------------------------------------- ;
|
||||||
|
szFFFFFFFFOpenDialog db "FFFFFFFF_open_dialog",0
|
||||||
|
szSYS db "/sys",0
|
||||||
|
szOpenDialPath db "/sys/File managers/opendial",0
|
||||||
|
szEmpty db 0
|
||||||
|
; -------------------------------------------------------- ;
|
||||||
|
.Data; --------------------------------------------------- ;
|
||||||
|
; -------------------------------------------------------- ;
|
||||||
|
FileFilter Dword 0
|
||||||
|
|
||||||
|
OD TOpenDialog <\
|
||||||
|
0,\
|
||||||
|
Offset ProcInfoBuffer,\
|
||||||
|
Offset szFFFFFFFFOpenDialog,\
|
||||||
|
0,\
|
||||||
|
Offset OpenDirPathBuffer,\
|
||||||
|
Offset szSYS,\
|
||||||
|
Offset szOpenDialPath,\
|
||||||
|
Offset OnRedraw,\
|
||||||
|
0,\
|
||||||
|
0,\
|
||||||
|
Offset FileNameAreaBuffer,\
|
||||||
|
Offset FileFilter,\
|
||||||
|
414,\
|
||||||
|
0,\
|
||||||
|
414,\
|
||||||
|
0\
|
||||||
|
>
|
||||||
|
|
||||||
|
Edit1 TEditBox <\
|
||||||
|
0,\
|
||||||
|
5,\
|
||||||
|
26,\
|
||||||
|
00FFFFFFH,\
|
||||||
|
00A4C4E4H,\
|
||||||
|
0,\
|
||||||
|
0,\
|
||||||
|
DT_CP866_8X16,\
|
||||||
|
EDIT1_TEXT_BUFFER_SIZE,\
|
||||||
|
Offset Edit1TextBuffer,\
|
||||||
|
Offset Edit1MouseVariable,\
|
||||||
|
4002H,\
|
||||||
|
0,\
|
||||||
|
0,\
|
||||||
|
0,\
|
||||||
|
0,\
|
||||||
|
0,\
|
||||||
|
0,\
|
||||||
|
0\
|
||||||
|
>
|
||||||
|
; -------------------------------------------------------- ;
|
||||||
|
.Data? ; ------------------------------------------------- ;
|
||||||
|
; -------------------------------------------------------- ;
|
||||||
|
BoxLib Dword ?
|
||||||
|
ProcLib Dword ?
|
||||||
|
|
||||||
|
OpenDialogInit OpenDialogInit_proc ?
|
||||||
|
OpenDialogStart OpenDialogStart_proc ?
|
||||||
|
|
||||||
|
EditBoxDraw EditBoxDraw_proc ?
|
||||||
|
EditBoxKey EditBoxKey_proc ?
|
||||||
|
EditBoxMouse EditBoxMouse_proc ?
|
||||||
|
EditBoxSetText EditBoxSetText_proc ?
|
||||||
|
|
||||||
|
SC TStandartColors <>
|
||||||
|
Window TRect <>
|
||||||
|
Screen TSize <>
|
||||||
|
|
||||||
|
RunResult Dword ?
|
||||||
|
RunParams Dword ?
|
||||||
|
RunPath Dword ?
|
||||||
|
|
||||||
|
AlwaysWithoutQuote Dword ?
|
||||||
|
ClearBeforeInsert Dword ?
|
||||||
|
|
||||||
|
Key TKeyboardInput <>
|
||||||
|
Button TButtonInput <>
|
||||||
|
|
||||||
|
FileNameAreaBuffer Byte FILE_NAME_AREA_BUFFER_SIZE Dup (?)
|
||||||
|
OpenFilePathBuffer Byte OPEN_FILE_PATH_BUFFER_SIZE Dup (?)
|
||||||
|
OpenDirPathBuffer Byte OPEN_DIR_PATH_BUFFER_SIZE Dup (?)
|
||||||
|
ProcInfoBuffer Byte PROC_INFO_BUFFER_SIZE Dup (?)
|
||||||
|
|
||||||
|
Edit1MouseVariable Dword ?
|
||||||
|
Edit1TextBuffer Byte EDIT1_TEXT_BUFFER_SIZE + 2 Dup (?) ; buffer for Edit1.text
|
||||||
|
TmpBuffer Byte TMP_BUFFER_SIZE Dup (?) ; this buffer uses in StrInsert
|
||||||
|
; -------------------------------------------------------- ;
|
||||||
|
.Code ; -------------------------------------------------- ;
|
||||||
|
; -------------------------------------------------------- ;
|
||||||
|
OnRedraw Proc
|
||||||
|
Invoke BeginDraw
|
||||||
|
Invoke GetStandardColors, Offset SC, SizeOf(SC)
|
||||||
|
|
||||||
|
mov eax, SC.work_graph
|
||||||
|
mov Edit1.focus_border_color, eax
|
||||||
|
|
||||||
|
Invoke DrawWindow, Window.Left, Window.Top, Window.Right, Window.Bottom, szTitle, SC.work, WS_SKINNED_FIXED + WS_COORD_CLIENT + WS_CAPTION, CS_MOVABLE
|
||||||
|
Invoke DrawText, 5, 5, szTypeNameOfProgram, SC.work_text, 0, DT_ZSTRING + DT_CP866_8X16, 0
|
||||||
|
; Browse button
|
||||||
|
mov eax, Window.Right
|
||||||
|
sub eax, 70
|
||||||
|
Invoke DrawButton, eax, 26, 52, 21, SC.work_button, 0, 20
|
||||||
|
mov eax, Window.Right
|
||||||
|
sub eax, 56
|
||||||
|
Invoke DrawText, eax, 29, CStr("..."), SC.work_button_text, 0, DT_ZSTRING + DT_CP866_8X16, 0
|
||||||
|
; Run button
|
||||||
|
mov eax, Window.Right
|
||||||
|
sub eax, 22
|
||||||
|
Invoke DrawButton, 5, 52, eax, 21, SC.work_button, 0, 10
|
||||||
|
mov eax, Window.Right
|
||||||
|
shr eax, 1
|
||||||
|
sub eax, 40
|
||||||
|
Invoke DrawText, eax, 55, szRun, SC.work_button_text, 0, DT_ZSTRING + DT_CP866_8X16, 0
|
||||||
|
; Result text
|
||||||
|
Invoke DrawText, 5, 80, RunResult, SC.work_text, 0, DT_ZSTRING + DT_CP866_8X16, 0
|
||||||
|
Invoke EditBoxDraw, Offset Edit1
|
||||||
|
Invoke EndDraw
|
||||||
|
ret
|
||||||
|
OnRedraw Endp
|
||||||
|
; -------------------------------------------------------- ;
|
||||||
|
StrInsert Proc Uses esi edi Src:Ptr, Dst:Ptr, Pos:Dword
|
||||||
|
Local TotalLength:Dword
|
||||||
|
|
||||||
|
mov TotalLength, 0
|
||||||
|
|
||||||
|
mov esi, Dst
|
||||||
|
mov edi, Offset TmpBuffer
|
||||||
|
mov ecx, Pos
|
||||||
|
add TotalLength, ecx
|
||||||
|
rep movsb
|
||||||
|
|
||||||
|
mov edi, Src
|
||||||
|
mov ecx, 0FFFFFFFFH
|
||||||
|
xor eax, eax
|
||||||
|
repne scasb
|
||||||
|
mov eax, 0FFFFFFFEH
|
||||||
|
sub eax, ecx
|
||||||
|
add TotalLength, eax
|
||||||
|
|
||||||
|
mov esi, Src
|
||||||
|
mov edi, Offset TmpBuffer
|
||||||
|
add edi, Pos
|
||||||
|
mov ecx, eax
|
||||||
|
rep movsb
|
||||||
|
|
||||||
|
push edi
|
||||||
|
|
||||||
|
mov edi, Dst
|
||||||
|
add edi, Pos
|
||||||
|
mov ecx, 0FFFFFFFFH
|
||||||
|
xor eax, eax
|
||||||
|
repne scasb
|
||||||
|
mov eax, 0FFFFFFFEH
|
||||||
|
sub eax, ecx
|
||||||
|
inc eax
|
||||||
|
add TotalLength, eax
|
||||||
|
|
||||||
|
pop edi
|
||||||
|
|
||||||
|
mov esi, Dst
|
||||||
|
add esi, Pos
|
||||||
|
mov ecx, eax
|
||||||
|
rep movsb
|
||||||
|
|
||||||
|
mov esi, Offset TmpBuffer
|
||||||
|
mov edi, Dst
|
||||||
|
mov ecx, TotalLength
|
||||||
|
rep movsb
|
||||||
|
|
||||||
|
ret
|
||||||
|
StrInsert Endp
|
||||||
|
; -------------------------------------------------------- ;
|
||||||
|
OnButtonRun Proc
|
||||||
|
Local TmpChar: Byte
|
||||||
|
Local StartWithQuote: Dword
|
||||||
|
; need to split path & params
|
||||||
|
mov eax, Edit1.text
|
||||||
|
; Skip Spaces
|
||||||
|
.While Byte Ptr [eax] == ' '
|
||||||
|
inc eax
|
||||||
|
.EndW
|
||||||
|
mov StartWithQuote, 0
|
||||||
|
; Skip Possible Quotation Mark
|
||||||
|
.If Byte Ptr [eax] == '"'
|
||||||
|
mov StartWithQuote, TRUE
|
||||||
|
inc eax
|
||||||
|
.EndIf
|
||||||
|
mov RunPath, eax
|
||||||
|
; Find Space Or Quote Or EndOfString
|
||||||
|
.Repeat
|
||||||
|
.If Byte Ptr [eax] == ' '
|
||||||
|
.If !StartWithQuote
|
||||||
|
mov TmpChar, ' '
|
||||||
|
mov Byte Ptr [eax], 0
|
||||||
|
push eax ; save pointer
|
||||||
|
inc eax
|
||||||
|
; Skip Spaces
|
||||||
|
.While Byte Ptr [eax] == ' '
|
||||||
|
inc eax
|
||||||
|
.EndW
|
||||||
|
.Break
|
||||||
|
.EndIf
|
||||||
|
.ElseIf Byte Ptr [eax] == '"'
|
||||||
|
mov TmpChar, '"'
|
||||||
|
mov Byte Ptr [eax], 0
|
||||||
|
push eax ; save pointer
|
||||||
|
inc eax
|
||||||
|
; Skip Spaces
|
||||||
|
.While Byte Ptr [eax] == ' '
|
||||||
|
inc eax
|
||||||
|
.EndW
|
||||||
|
; params can be written immediately after quotation mark
|
||||||
|
; without any spaces
|
||||||
|
; like this way: "path"params
|
||||||
|
.Break
|
||||||
|
.ElseIf Byte Ptr [eax] == 0
|
||||||
|
push eax ; save pointer
|
||||||
|
mov TmpChar, 0
|
||||||
|
.Break
|
||||||
|
.EndIf
|
||||||
|
inc eax
|
||||||
|
.Until 0
|
||||||
|
mov RunParams, eax
|
||||||
|
Invoke RunFile, RunPath, RunParams
|
||||||
|
test eax, eax
|
||||||
|
.If SIGN?
|
||||||
|
.If eax == -5
|
||||||
|
mov RunResult, szFileNotFound
|
||||||
|
.ElseIf eax == -31
|
||||||
|
mov RunResult, szFileIsNotExecutable
|
||||||
|
.ElseIf eax == -32
|
||||||
|
mov RunResult, szTooManyProcesses
|
||||||
|
.ElseIf eax == -10
|
||||||
|
mov RunResult, szAccessDenied
|
||||||
|
.ElseIf eax == -30
|
||||||
|
mov RunResult, szOutOfMemory
|
||||||
|
.Else
|
||||||
|
mov RunResult, szUnknownError
|
||||||
|
.EndIf
|
||||||
|
.Else
|
||||||
|
mov RunResult, szProgramRunSuccessfully
|
||||||
|
.EndIf
|
||||||
|
|
||||||
|
pop eax ; restore char changed by 0
|
||||||
|
mov cl, TmpChar
|
||||||
|
mov Byte Ptr [eax], cl
|
||||||
|
|
||||||
|
Invoke OnRedraw
|
||||||
|
ret
|
||||||
|
OnButtonRun Endp
|
||||||
|
; -------------------------------------------------------- ;
|
||||||
|
OnButtonBrowse Proc
|
||||||
|
Local NeedQuote:Dword
|
||||||
|
|
||||||
|
Invoke OpenDialogStart, Offset OD
|
||||||
|
.If OD.status != 0
|
||||||
|
|
||||||
|
; need to check if spaces are in path and if so then quote path
|
||||||
|
mov eax, OD.openfile_path
|
||||||
|
; by default assume quote not needed
|
||||||
|
mov NeedQuote, 0
|
||||||
|
.While Byte Ptr [eax]
|
||||||
|
.If Byte Ptr [eax] == ' '
|
||||||
|
; need quote
|
||||||
|
mov NeedQuote, TRUE
|
||||||
|
.EndIf
|
||||||
|
inc eax
|
||||||
|
.EndW
|
||||||
|
; eax -> zero byte
|
||||||
|
.If NeedQuote && !AlwaysWithoutQuote
|
||||||
|
mov Byte Ptr [eax], '"'
|
||||||
|
mov Byte Ptr [eax + 1], 0
|
||||||
|
push eax ; save pointer
|
||||||
|
mov eax, OD.openfile_path
|
||||||
|
dec eax
|
||||||
|
.Else
|
||||||
|
mov eax, OD.openfile_path
|
||||||
|
.EndIf
|
||||||
|
|
||||||
|
.If ClearBeforeInsert
|
||||||
|
Invoke EditBoxSetText, Offset Edit1, Offset szEmpty
|
||||||
|
.EndIf
|
||||||
|
|
||||||
|
Invoke StrInsert, eax, Edit1.text, Edit1.pos
|
||||||
|
|
||||||
|
.If NeedQuote && !AlwaysWithoutQuote
|
||||||
|
pop eax ; restore zero changed by quote
|
||||||
|
mov Byte Ptr [eax], 0
|
||||||
|
.EndIf
|
||||||
|
|
||||||
|
Invoke EditBoxSetText, Offset Edit1, Edit1.text
|
||||||
|
.EndIf
|
||||||
|
ret
|
||||||
|
OnButtonBrowse Endp
|
||||||
|
; -------------------------------------------------------- ;
|
||||||
|
@Main:
|
||||||
|
Invoke SetEventMask, EM_REDRAW + EM_KEY + EM_BUTTON + EM_MOUSE
|
||||||
|
Invoke LoadLibrary, CStr("/sys/lib/box_lib.obj")
|
||||||
|
mov BoxLib, eax
|
||||||
|
Invoke LoadLibrary, CStr("/sys/lib/proc_lib.obj")
|
||||||
|
mov ProcLib, eax
|
||||||
|
Invoke GetProcAddress, BoxLib, CStr("edit_box")
|
||||||
|
mov EditBoxDraw, eax
|
||||||
|
Invoke GetProcAddress, BoxLib, CStr("edit_box_key")
|
||||||
|
mov EditBoxKey, eax
|
||||||
|
Invoke GetProcAddress, BoxLib, CStr("edit_box_mouse")
|
||||||
|
mov EditBoxMouse, eax
|
||||||
|
Invoke GetProcAddress, BoxLib, CStr("edit_box_set_text")
|
||||||
|
mov EditBoxSetText, eax
|
||||||
|
Invoke GetProcAddress, ProcLib, CStr("OpenDialog_init")
|
||||||
|
mov OpenDialogInit, eax
|
||||||
|
Invoke GetProcAddress, ProcLib, CStr("OpenDialog_start")
|
||||||
|
mov OpenDialogStart, eax
|
||||||
|
|
||||||
|
; it need for case if spaces are present in filepath
|
||||||
|
lea eax, [OpenFilePathBuffer + 1]
|
||||||
|
mov OD.openfile_path, eax
|
||||||
|
mov OpenFilePathBuffer, '"'
|
||||||
|
|
||||||
|
Invoke OpenDialogInit, Offset OD
|
||||||
|
|
||||||
|
Invoke GetScreenSize
|
||||||
|
mov Screen, eax
|
||||||
|
shr eax, 17
|
||||||
|
add eax, 90
|
||||||
|
mov Window.Right, eax
|
||||||
|
|
||||||
|
Invoke GetSkinHeight
|
||||||
|
add eax, 100
|
||||||
|
mov Window.Bottom, eax
|
||||||
|
|
||||||
|
movzx eax, Screen.SizeX
|
||||||
|
sub eax, Window.Right
|
||||||
|
shr eax, 1
|
||||||
|
mov Window.Left, eax
|
||||||
|
|
||||||
|
movzx eax, Screen.SizeY
|
||||||
|
sub eax, Window.Bottom
|
||||||
|
sub eax, 100
|
||||||
|
mov Window.Top, eax
|
||||||
|
|
||||||
|
mov eax, Window.Right
|
||||||
|
sub eax, 80
|
||||||
|
mov Edit1.x_size, eax
|
||||||
|
|
||||||
|
mov RunResult, szPressF1
|
||||||
|
|
||||||
|
.Repeat
|
||||||
|
Invoke WaitEvent
|
||||||
|
.If eax == REDRAW_EVENT
|
||||||
|
Invoke OnRedraw
|
||||||
|
.ElseIf eax == KEY_EVENT
|
||||||
|
Invoke GetControlKeyState
|
||||||
|
.If eax & (RIGHT_SHIFT_PRESSED Or LEFT_SHIFT_PRESSED)
|
||||||
|
mov AlwaysWithoutQuote, TRUE
|
||||||
|
.Else
|
||||||
|
mov AlwaysWithoutQuote, FALSE
|
||||||
|
.EndIf
|
||||||
|
.If eax & (RIGHT_CTRL_PRESSED Or LEFT_CTRL_PRESSED)
|
||||||
|
mov ClearBeforeInsert, FALSE
|
||||||
|
.Else
|
||||||
|
mov ClearBeforeInsert, TRUE
|
||||||
|
.EndIf
|
||||||
|
Invoke GetKey
|
||||||
|
mov Key, eax
|
||||||
|
.If Key.Scan == KEY_SCAN_ENTER
|
||||||
|
Invoke OnButtonRun
|
||||||
|
; need check Code cause numpad0.Scan = Insert.Scan
|
||||||
|
.ElseIf (Key.Scan == KEY_SCAN_INSERT) && \
|
||||||
|
(Key.Code != KEY_CODE_0)
|
||||||
|
Invoke OnButtonBrowse
|
||||||
|
.ElseIf Key.Scan == KEY_SCAN_F1
|
||||||
|
Invoke RunFile, CStr("/SYS/@NOTIFY"), szHelpInfo
|
||||||
|
.Else
|
||||||
|
Invoke EditBoxKey, Offset Edit1
|
||||||
|
.EndIf
|
||||||
|
.ElseIf eax == BUTTON_EVENT
|
||||||
|
Invoke GetButton
|
||||||
|
mov Button, eax
|
||||||
|
.If Button.ID == 1
|
||||||
|
Invoke ThreadTerminate
|
||||||
|
.ElseIf Button.ID == BUTTON_RUN
|
||||||
|
Invoke OnButtonRun
|
||||||
|
.ElseIf Button.ID == BUTTON_BROWSE
|
||||||
|
Invoke OnButtonBrowse
|
||||||
|
.EndIf
|
||||||
|
.ElseIf eax == MOUSE_EVENT
|
||||||
|
Invoke EditBoxMouse, Offset Edit1
|
||||||
|
.EndIf
|
||||||
|
.Until 0
|
||||||
|
END
|
7
programs/system/RunOD/1/make.bat
Normal file
7
programs/system/RunOD/1/make.bat
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
: %KolibriOS% - directory which contains KolibriOS.lib
|
||||||
|
@jwasm -zt0 -coff -Fi lang.inc RUN.asm
|
||||||
|
@ld -T LScript.x RUN.obj -o RUN.kex -L %KolibriOS% -l KolibriOS
|
||||||
|
@objcopy -O binary -j .all RUN.kex
|
||||||
|
@del RUN.obj
|
||||||
|
@del lang.inc
|
||||||
|
@pause
|
2
programs/system/RunOD/1/make_en.bat
Normal file
2
programs/system/RunOD/1/make_en.bat
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
@echo LANG_EN = 1 > lang.inc
|
||||||
|
make.bat
|
2
programs/system/RunOD/1/make_it.bat
Normal file
2
programs/system/RunOD/1/make_it.bat
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
@echo LANG_IT = 1 > lang.inc
|
||||||
|
make.bat
|
2
programs/system/RunOD/1/make_ru.bat
Normal file
2
programs/system/RunOD/1/make_ru.bat
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
@echo LANG_RU = 1 > lang.inc
|
||||||
|
make.bat
|
2
programs/system/RunOD/1/make_sp.bat
Normal file
2
programs/system/RunOD/1/make_sp.bat
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
@echo LANG_SP = 1 > lang.inc
|
||||||
|
make.bat
|
Loading…
Reference in New Issue
Block a user