\ ***** Системно-зависимая часть ***** S" strings.i" INCLUDED WINAPI: CreateProcessA kernel32 WINAPI: WaitForSingleObject kernel32 WINAPI: CloseHandle kernel32 WINAPI: GetExitCodeProcess kernel32 WINAPI: GetLastError kernel32 VARIABLE ERRNO \ ***** Конец системно-зависимой части ***** 0 [IF] Выполнение внешних программ под Win32 (c) =KRoN= 27.08.1998-28.07.1999 Описание: SYSTEM ( a u -- err ) Выполнить строку 'a u'. Если не находится программа из первой строки, пытаемся вызвать 'c:\command.com /c' с параметром 'a u'. Т.е. можно использовать $" dir" SYSTEM DROP Слово ожидает завершения запущеной задачи. Прочие слова проще понять на примерах: Примеры: S" c:\command.com" SYSTEM THROW RUN c:\command.com THROW RUN" c:\command.com" THROW RUN_ " c:\command.com" THROW RUN_ ( c:\command.com) THROW 27.08.1998 - первый код 28.08.1998 - $Run, Run, Run_ 20.05.1999 - (SYSTEM) под CreateProcess 28.07.1999 - краткое описание и исправление RUN_ [THEN] 0 4 -- si.cb 4 -- si.lpReserved 4 -- si.lpDesktop 4 -- si.lpTitle 4 -- si.dwX 4 -- si.dwY 4 -- si.dwXSize 4 -- si.dwYSize 4 -- si.dwXCountChars 4 -- si.dwYCountChars 4 -- si.dwFillAttribute 4 -- si.dwFlags 2 -- si.wShowWindow 2 -- si.cbReserved2 4 -- si.lpReserved2 4 -- si.hStdInput 4 -- si.hStdOutput 4 -- si.hStdError CONSTANT /STARTUPINFO CREATE si /STARTUPINFO ALLOT : 0si si /STARTUPINFO ERASE \ 2 si si.wShowWindow W! ; 0 4 -- pi.hProcess 4 -- pi.hThread 4 -- pi.dwProcessId 4 -- pi.dwThreadId CONSTANT /PROCESS_INFORMATION CREATE pi /PROCESS_INFORMATION ALLOT : (system) ( $ -- f ) DROP 0si >R pi si 0 0 0 0 0 0 R> 0 CreateProcessA 0= IF GetLastError EXIT THEN -1 pi pi.hProcess @ WaitForSingleObject DROP ERRNO pi pi.hProcess @ GetExitCodeProcess DROP pi pi.hProcess @ CloseHandle DROP 0 ; : SYSTEM ( a u -- err ) \ с попыткой запустить c:\command.com при неудаче 2DUP (system) IF >$ $" c:\command.com /c " $SWAP $+ $> (system) ELSE 2DROP 0 THEN ; : RUN_ ( file-name \ char -- error ) BL WORD 1+ C@ WORD COUNT SYSTEM ; : RUN ( file-name \ -- error ) BL PARSE SYSTEM ; : RUN" ( file-name" \ -- error ) [CHAR] " PARSE STATE @ IF POSTPONE SLITERAL POSTPONE SYSTEM ELSE SYSTEM THEN ; IMMEDIATE : RUN_ ( c file-name\ -- error ) BL WORD CHAR+ C@ PARSE STATE @ IF POSTPONE SLITERAL POSTPONE SYSTEM ELSE SYSTEM THEN ; IMMEDIATE 0 [IF] RUN_ " dir c:\windows" THROW CR DEPTH . BYE [THEN]