forked from KolibriOS/kolibrios
Compare commits
11 Commits
blocks-add
...
rewrite-pi
| Author | SHA1 | Date | |
|---|---|---|---|
| 75ecc961dc | |||
| 81f34cd28c | |||
| 5049d6b0b4 | |||
| 7b0867a6cf | |||
| c65da0d96f | |||
| a0c01e204e | |||
| d50642ce1f | |||
| 8d235ce49b | |||
| e423bfb2d1 | |||
| 1483ec8462 | |||
| e8121c66f8 |
@@ -5,7 +5,7 @@ diamond'ом. Она используется в проектах xonix и fara
|
||||
Kolibri-программу. Утилита всего лишь изменяет формат exe-шника, так что,
|
||||
чтобы действительно получилась работающая программа, нужно выполнение
|
||||
определённых условий. Понятно, что требуется, чтобы программа общалась
|
||||
с внешним миром средствами Колибри (т.е. int 0x40) и не использовала
|
||||
с внешним миром средствами КолибриОС (т.е. int 0x40) и не использовала
|
||||
никаких Windows-библиотек. Помимо этого, требуется также, чтобы программа
|
||||
размещалась по нулевому адресу (ключ линкера "/base:0"). Как писать такие
|
||||
программы - смотрите в уже упомянутых проектах xonix и fara.
|
||||
|
||||
@@ -69,6 +69,7 @@ img_files = {
|
||||
{"SETTINGS/SYSTEM.INI", "common/settings/system.ini"},
|
||||
{"SETTINGS/TASKBAR.INI", "common/settings/taskbar.ini"},
|
||||
{"SETTINGS/SYSTEM.ENV", "common/settings/system.env"},
|
||||
{"SETTINGS/USBDRV.DAT",VAR_DRVS .. "/usb/usbother/usbdrv.dat"},
|
||||
}
|
||||
|
||||
-- For russian build, add russian-only files.
|
||||
@@ -204,6 +205,7 @@ extra_files = {
|
||||
{"kolibrios/emul/chip8/roms/", SRC_PROGS .. "/emulator/chip8/roms/*"},
|
||||
{"kolibrios/emul/kwine/kwine", SRC_PROGS .. "/emulator/kwine/bin/kwine"},
|
||||
{"kolibrios/emul/kwine/lib/", SRC_PROGS .. "/emulator/kwine/bin/lib/*"},
|
||||
{"kolibrios/emul/uxn", SRC_PROGS .. "/emulator/uxn/uxn"},
|
||||
{"kolibrios/emul/uarm/", "common/emul/uarm/*"},
|
||||
{"kolibrios/emul/zsnes/", "common/emul/zsnes/*"},
|
||||
{"kolibrios/games/BabyPainter", "common/games/BabyPainter"},
|
||||
@@ -531,6 +533,7 @@ tup.append_table(img_files, {
|
||||
{"MEDIA/MP3INFO", VAR_PROGS .. "/media/mp3info/mp3info"},
|
||||
{"MEDIA/PALITRA", VAR_PROGS .. "/media/palitra/trunk/palitra"},
|
||||
{"MEDIA/PIANO", VAR_PROGS .. "/media/piano/piano"},
|
||||
{"MEDIA/PIANO.MAP", VAR_PROGS .. "/media/piano/piano.map"},
|
||||
{"MEDIA/STARTMUS", VAR_PROGS .. "/media/startmus/trunk/STARTMUS"},
|
||||
{"NETWORK/PING", VAR_PROGS .. "/network/ping/ping"},
|
||||
{"NETWORK/NETCFG", VAR_PROGS .. "/network/netcfg/netcfg"},
|
||||
@@ -567,6 +570,7 @@ tup.append_table(img_files, {
|
||||
{"DRIVERS/OHCI.SYS", VAR_DRVS .. "/usb/ohci.sys"},
|
||||
{"DRIVERS/EHCI.SYS", VAR_DRVS .. "/usb/ehci.sys"},
|
||||
{"DRIVERS/USBHID.SYS", VAR_DRVS .. "/usb/usbhid/usbhid.sys"},
|
||||
{"DRIVERS/USBOTHER.SYS",VAR_DRVS .. "/usb/usbother/usbother.sys"},
|
||||
{"DRIVERS/USBSTOR.SYS", VAR_DRVS .. "/usb/usbstor.sys"},
|
||||
{"DRIVERS/RDC.SYS", VAR_DRVS .. "/video/rdc.sys"},
|
||||
{"DRIVERS/COMMOUSE.SYS", VAR_DRVS .. "/mouse/commouse.sys"},
|
||||
|
||||
@@ -162,6 +162,7 @@ min=23
|
||||
nes=23
|
||||
sna=23
|
||||
snes=23
|
||||
rom=23
|
||||
bat=24
|
||||
sh=24
|
||||
sys=25
|
||||
|
||||
@@ -68,6 +68,7 @@ sna=/kolibrios/emul/e80/e80
|
||||
gb=/kolibrios/emul/gameboy
|
||||
gbc=/kolibrios/emul/gameboy
|
||||
min=/kolibrios/emul/pokemini
|
||||
rom=/kolibrios/emul/uxn
|
||||
nc=/kolibrios/utils/cnc_editor/cnc_editor
|
||||
kf=/sys/KF_VIEW
|
||||
csv=/sys/table
|
||||
|
||||
@@ -22,3 +22,5 @@ ToggleBar=Tab
|
||||
path=/usbhd0/1/kolibri.img
|
||||
autoclose=0
|
||||
|
||||
[WebView]
|
||||
proxy=http://proxy.kolibrios.org:82/?site=
|
||||
@@ -192,6 +192,7 @@ nc=/kolibrios/utils/cnc_editor/cnc_editor
|
||||
ch8=/kolibrios/emul/chip8/chip8
|
||||
md=/kolibrios/emul/dgen/dgen
|
||||
gen=/kolibrios/emul/dgen/dgen
|
||||
rom=/kolibrios/emul/uxn
|
||||
|
||||
zip=$Unz
|
||||
7z=$Unz
|
||||
|
||||
@@ -9,15 +9,15 @@
|
||||
pre {white-space: pre-wrap;}
|
||||
h2 {margin-bottom:0;}
|
||||
blockquote {
|
||||
margin-bottom:0;
|
||||
border-left: 5px solid #EFE8D5;
|
||||
margin-bottom:0;
|
||||
border-left: 5px solid #EFE8D5;
|
||||
padding-left: 10px;}
|
||||
</style>
|
||||
</head>
|
||||
<body bgcolor="#FDF6E3" link="#5551FF"><pre><h1>Решение проблем и часто задаваемые вопросы</h1>
|
||||
<a href="guide.htm" param="d">< Назад</a>
|
||||
|
||||
<b>Какие есть варианты загрузки Колибри?</b>
|
||||
<b>Какие есть варианты загрузки КолибриОС?</b>
|
||||
С флешки, жесткого диска, CD, дискеты. Смотрите папку /HD_Load в скачанном дистрибутиве.
|
||||
При загрузке с флешки иногда может требоваться использование setmbr.exe, иногда нет. Вначале попробуйте загрузится без него, если не получится, то с ним.
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
2. Поменять настройки в BIOS: зайти в раздел с жесткими дисками и выставить режим совместимости с IDE или что-то похожее. (После всех эксперименов не забудьте поменять все обратно!)
|
||||
3. Воспользоваться драйвером ACHI. Для этого зайдите в SYSPANEL > <a href="/kolibrios/drivers/DRVINST.KEX">DriverInstall</a>.
|
||||
|
||||
<b>Как установить Колибри как основную ОС, скажем, на старенький ноутбук?</b>
|
||||
<b>Как установить КолибриОС как основную ОС, скажем, на старенький ноутбук?</b>
|
||||
Есть масса вариантов. Вот один из них.
|
||||
Если на ноутбуке нет ОС, то ставим на него Windows 98. Если на нем уже стоит Windows 95/98/2k/XP, то они тоже подойдут.
|
||||
Заходим в папку /HD_Load поставляемую в дистрибутиве. Там с помощью утилит устанавливаем Kolibri в дуалбут с Windows.
|
||||
@@ -49,7 +49,7 @@
|
||||
|
||||
MTRRs (Memory type range registers — Диапазонные регистры типа памяти) — используются для назначения типа (политики кеширования) участкам памяти. Регистры MTRR предоставляют механизм, связывающий типы памяти с физическими адресными диапазонами системной памяти. Они позволяют процессору оптимизировать операции для разных типов памяти, таких как ПЗУ, ОЗУ, кадровый буфер и отображаемые в памяти устройства ввода-вывода. Они также упрощают разработку системного оборудования, уменьшая количество контактов управляющих памятью, которые использовались для этой цели в ранних процессорах и внешних логических устройствах.
|
||||
|
||||
<b>На каких ещё языках программирования, кроме ассемблера, можно разрабатывать приложения для Колибри?</b>
|
||||
<b>На каких ещё языках программирования, кроме ассемблера, можно разрабатывать приложения для КолибриОС?</b>
|
||||
|
||||
Портированы:
|
||||
• Компилятор Oberon-07
|
||||
@@ -68,7 +68,7 @@ MTRRs (Memory type range registers — Диапазонные регистры
|
||||
Подробная статья по поддерживаемым компиляторам и их настройке <a href="http://kolibri-n.org/inf/hll/hll">здесь</a>.
|
||||
|
||||
<b>Wi-Fi работает?</b>
|
||||
Нет ни драйверов ни подсистемы.
|
||||
Нет ни драйверов ни подсистемы.
|
||||
Если вы хотите разработать подсистему и драйвер(а) WiFi - напишите нам на форум или в группу ВК, есть возможность оплатить разработку. Для этого нужно весьма неплохо знать ассемблер.
|
||||
|
||||
<b>Не работает мышь, флешка, клавиатура</b>
|
||||
@@ -79,28 +79,28 @@ MTRRs (Memory type range registers — Диапазонные регистры
|
||||
• Использовать PS/2 мышь...
|
||||
• Купить PCI карту на несколько USB 2.0 портов, благо стоит она копейки, часто продается на барахолках
|
||||
|
||||
<b>Можно ли в Колибри запускать EXE (приложения Windows)?</b>
|
||||
<b>Можно ли в КолибриОС запускать EXE (приложения Windows)?</b>
|
||||
Нет, это невозможно.
|
||||
Есть эмулятор DOS и <a href="http://board.kolibrios.org/viewtopic.php?f=9&t=2318&p=48991">PELoad</a> эмулятор некоторых функций WIN32 (в зачаточном состоянии).
|
||||
|
||||
<b>Когда будет нормальный браузер?</b>
|
||||
Браузер штука очень сложная, как в написании, так и в портировании. Есть наработки по портированию Netsurf, но пока все заглохло.
|
||||
Что и когда будет не известно.
|
||||
Что и когда будет не известно.
|
||||
|
||||
<b>У меня есть идея, давайте я вам ее напишу, а вы реализуете!</b>
|
||||
Чаще всего эти идеи мало полезны. Дело в том, что у каждого человека уже вовлеченного в проект, тоже есть множество нереализованных идей, подчас более ценных, чем у новичков, за счет того, что участники лучше разбираются в системе, ее возможностях и ограничениях. Проблема, как всегда, или в мотивации, или в отсутствии времени. Пожалуйста, учитывайте это приходя в проект и не требуйте ничего от незнакомых вам людей. Участвуйте, как наблюдатель и комментатор; и со временем вы сможете генерировать хорошие идеи предметно.
|
||||
К сожалению даже клевая идея не гарантирует ее скорейшей реализации, потому самый надежный шанс воплотить идею в жизнь - реализовать самому.
|
||||
Чаще всего эти идеи мало полезны. Дело в том, что у каждого человека уже вовлеченного в проект, тоже есть множество нереализованных идей, подчас более ценных, чем у новичков, за счет того, что участники лучше разбираются в системе, ее возможностях и ограничениях. Проблема, как всегда, или в мотивации, или в отсутствии времени. Пожалуйста, учитывайте это приходя в проект и не требуйте ничего от незнакомых вам людей. Участвуйте, как наблюдатель и комментатор; и со временем вы сможете генерировать хорошие идеи предметно.
|
||||
К сожалению даже клевая идея не гарантирует ее скорейшей реализации, потому самый надежный шанс воплотить идею в жизнь - реализовать самому.
|
||||
|
||||
<b>Почему в Колибри все еще нет ХХХ? Это же так важно!</b>
|
||||
Потому что это ХХХ еще никто не сделал.
|
||||
<b>Почему в КолибриОС все еще нет ХХХ? Это же так важно!</b>
|
||||
Потому что это ХХХ еще никто не сделал.
|
||||
См. предыдущий ответ.
|
||||
|
||||
<b>Какие у вас дальнейшие планы развития?</b>
|
||||
Большинство путей развития упирается не в планы, а в свободные руки. Особенно в квалифицированные рабочие руки.
|
||||
|
||||
<b>Как насчет версии для ARM вместо Android?</b>
|
||||
Нативно это невозможно. Абсолютно и полностью.
|
||||
Дело в том, что Колибри ОС написана на ассемблере x86, тем самым овермаксимально оптимизирована под процессоры x86. На мобильных девайсах используется другой тип процессора и другая архитектура - arm, что делает портирование невозможным.
|
||||
Нативно это невозможно. Абсолютно и полностью.
|
||||
Дело в том, что КолибриОС написана на ассемблере x86, тем самым овермаксимально оптимизирована под процессоры x86. На мобильных девайсах используется другой тип процессора и другая архитектура - arm, что делает портирование невозможным.
|
||||
Колибри - десктопная ОС для Пека, любите ее такой, какая она есть.
|
||||
</body>
|
||||
</html>
|
||||
|
||||
4
drivers/usb/usbother/Tupfile.lua
Normal file
4
drivers/usb/usbother/Tupfile.lua
Normal file
@@ -0,0 +1,4 @@
|
||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||
ROOT = "../../.."
|
||||
tup.rule("usbother.asm", "fasm %f %o " .. tup.getconfig("PESTRIP_CMD") .. tup.getconfig("KPACK_CMD"), "%B.sys")
|
||||
tup.rule("usbdrv.asm", "fasm %f %o ", "%B.dat")
|
||||
214
drivers/usb/usbother/usbdrv.asm
Normal file
214
drivers/usb/usbother/usbdrv.asm
Normal file
@@ -0,0 +1,214 @@
|
||||
;*****************************************************************************;
|
||||
; Copyright (C) 2025, Mikhail Frolov aka Doczom . All rights reserved. ;
|
||||
; Distributed under terms of the 3-Clause BSD License. ;
|
||||
;*****************************************************************************;
|
||||
; File of usb drivers
|
||||
; base = 0
|
||||
; offset | Size | Name | Description
|
||||
;=======================|=======|===============|=============================
|
||||
; base + 0 | 4 | ID_drv_table | offset to dev_ven drv array
|
||||
; base + 4 | 4 | Class_table | offset to class drv array
|
||||
;
|
||||
; n = 0 .. count driver with ID table
|
||||
; nt = count driver with ID table
|
||||
; ID_drv_table + 0*(n-1)| 4 | ID_TABLE | offset from base to table VID:PID
|
||||
; ID_drv_table + 4*(n-1)| 4 | DRV_NAME | offset from base to name of driver
|
||||
; ID_drv_table + 8*nt | 8 | __ZERO | terminaror of list
|
||||
|
||||
; k = 0 .. count driver on class code
|
||||
; kt = count driver on class code
|
||||
; Class_table + 0*(k-1) | 1 | LENGTH_CLASS | length of class code 1..3
|
||||
; Class_table + 1*(k-1) | 1 | USB_CLASS | main usb class code (M)
|
||||
; Class_table + 2*(k-1) | 1 | USB_SUBCLASS | USB subclass code or zero(V)
|
||||
; Class_table + 2*(k-1) | 1 | USB_PROTOCOL | USB protocol code or zero(V)
|
||||
; Class_table + 4*(k-1) | 4 | DRV_NAME | offset from base to name of driver
|
||||
; Class_table + 8*kt | 8 | __ZERO | terminaror of list
|
||||
|
||||
; i = 0 .. count VID:PID
|
||||
; it = count VID:PID
|
||||
; ID_TABLE + 0*(i-1) | 2 | VID | Vendor id
|
||||
; ID_TABLE + 2*(i-1) | 2 | PID | Product id
|
||||
; ID_TABLE + 4*it | 4 | __ZERO | terminaror of list
|
||||
|
||||
|
||||
macro INIT_USBDRV_FILE {
|
||||
local ..id_list, ..class_list
|
||||
|
||||
format binary as 'dat'
|
||||
use32
|
||||
org 0
|
||||
dd ..id_list
|
||||
dd ..class_list
|
||||
|
||||
|
||||
macro ID_DRV_TABLE \{
|
||||
dd 0, 0
|
||||
\}
|
||||
|
||||
macro CLASS_TABLE \{
|
||||
dd 0, 0
|
||||
\}
|
||||
macro ID_TABLE \{
|
||||
\}
|
||||
macro DRV_NAME_LIST \{
|
||||
\}
|
||||
postpone \{
|
||||
..id_list: ID_DRV_TABLE
|
||||
..class_list: CLASS_TABLE
|
||||
ID_TABLE
|
||||
DRV_NAME_LIST
|
||||
\}
|
||||
}
|
||||
|
||||
macro ADD_CLASS drv_name, class, subclass, protocol {
|
||||
|
||||
local ..length, ..class_code, ..drv_name
|
||||
|
||||
..length = 3
|
||||
|
||||
match =X, class \{
|
||||
err 'Class is mandatory argument'
|
||||
\}
|
||||
match =X, protocol \{
|
||||
..length = 2
|
||||
\}
|
||||
match =X, subclass \{
|
||||
..length = 1
|
||||
\}
|
||||
|
||||
..class_code = ..length or (class shl 8)
|
||||
|
||||
if ..length = 3
|
||||
..class_code = ..class_code or (protocol shl 24)
|
||||
end if
|
||||
if ..length = 2
|
||||
..class_code = ..class_code or (subclass shl 16)
|
||||
end if
|
||||
|
||||
|
||||
; add in list
|
||||
|
||||
macro DRV_NAME_LIST \{
|
||||
..drv_name: db drv_name, 0
|
||||
DRV_NAME_LIST
|
||||
\}
|
||||
|
||||
macro CLASS_TABLE \{
|
||||
dd ..class_code, ..drv_name
|
||||
CLASS_TABLE
|
||||
\}
|
||||
}
|
||||
|
||||
macro ADD_ID drv_name, [device_id] {
|
||||
common
|
||||
local ..drv_name, ..id_table
|
||||
|
||||
macro ID_TABLE \{
|
||||
ID_TABLE
|
||||
..id_table:
|
||||
\}
|
||||
|
||||
reverse
|
||||
local vid_pid
|
||||
match VID:PID, device_id \{
|
||||
vid_pid = (PID shl 16) + VID
|
||||
\}
|
||||
|
||||
|
||||
macro ID_TABLE \{
|
||||
ID_TABLE
|
||||
dd vid_pid
|
||||
\}
|
||||
|
||||
common
|
||||
macro ID_TABLE \{
|
||||
ID_TABLE
|
||||
dd 0
|
||||
\}
|
||||
macro DRV_NAME_LIST \{
|
||||
..drv_name: db drv_name, 0
|
||||
DRV_NAME_LIST
|
||||
\}
|
||||
macro ID_DRV_TABLE \{
|
||||
dd ..id_table, ..drv_name
|
||||
ID_DRV_TABLE
|
||||
\}
|
||||
}
|
||||
|
||||
; ADD ID driver Linux
|
||||
macro ADD_IDL drv_name, [vendor_id, device_id] {
|
||||
common
|
||||
local ..drv_name, ..id_table
|
||||
|
||||
macro ID_TABLE \{
|
||||
ID_TABLE
|
||||
..id_table:
|
||||
\}
|
||||
|
||||
reverse
|
||||
local vid_pid
|
||||
vid_pid = (device_id shl 16) + vendor_id
|
||||
|
||||
macro ID_TABLE \{
|
||||
ID_TABLE
|
||||
dd vid_pid
|
||||
\}
|
||||
|
||||
common
|
||||
macro ID_TABLE \{
|
||||
ID_TABLE
|
||||
dd 0
|
||||
\}
|
||||
macro DRV_NAME_LIST \{
|
||||
..drv_name: db drv_name, 0
|
||||
DRV_NAME_LIST
|
||||
\}
|
||||
macro ID_DRV_TABLE \{
|
||||
dd ..id_table, ..drv_name
|
||||
ID_DRV_TABLE
|
||||
\}
|
||||
}
|
||||
|
||||
|
||||
INIT_USBDRV_FILE
|
||||
|
||||
;ADD_CLASS 'usbcdc-ctrl' , 0x02, X , X
|
||||
;ADD_CLASS 'usbimage' , 0x06, 1 , 1
|
||||
;ADD_CLASS 'usbcdc-data' , 0x0A, X , X
|
||||
;ADD_CLASS 'ccid' , 0x0B, X , X
|
||||
;ADD_CLASS 'uvd' , 0x0E, X , X
|
||||
;ADD_CLASS 'uvd_2' , 0x0E, 0x02, X
|
||||
;ADD_CLASS 'usb_bluetooth' , 0xE0, 0x01, X
|
||||
;ADD_CLASS 'usb_wifi' , 0xE0, 0x02, X
|
||||
|
||||
|
||||
|
||||
ADD_ID 'usbftdi',\
|
||||
0x0403:0 ; Any FTDI device
|
||||
|
||||
;https://github.com/avrdudes/avrdude/blob/main/src/usbdevs.h#L51
|
||||
;ADD_ID 'usbasp',\
|
||||
; 0x16c0:0x05dc,\ ; VOTI Obdev's free shared PID
|
||||
; 0x03e8:0xc7b4,\ ; ATMEL (unofficial) USBasp
|
||||
; 0x16c0:0x092f ; VOTI NIBObee PID
|
||||
|
||||
;https://github.com/WCHSoftGroup/ch341par_linux/blob/main/driver/ch34x_pis.c
|
||||
;ADD_IDL 'ch341par',\
|
||||
; 0x1a86, 0x5512,\ ; ch341a default
|
||||
; 0x1a86, 0x55db,\ ; CH347T Mode1 SPI+IIC+UART
|
||||
; 0x1a86, 0x55dd,\ ; CH347T Mode3 JTAG+UART
|
||||
; 0x1a86, 0x55de,\ ; CH347F
|
||||
; 0x1a86, 0x55e7 ; CH339W
|
||||
|
||||
;https://github.com/openbsd/src/blob/master/sys/dev/usb/uchcom.c
|
||||
;https://github.com/WCHSoftGroup/ch341ser_linux/blob/main/driver/ch341.c
|
||||
;ADD_IDL 'ch341ser',\
|
||||
; 0x1a86, 0x7523,\ ; ch340 chip
|
||||
; 0x1a86, 0x7522,\ ; ch340k chip
|
||||
; 0x1a86, 0x5523,\ ; ch341 chip
|
||||
; 0x1a86, 0xe523,\ ; ch330 chip
|
||||
; 0x4348, 0x5523 ; ch340 custom chip
|
||||
|
||||
|
||||
|
||||
|
||||
523
drivers/usb/usbother/usbother.asm
Normal file
523
drivers/usb/usbother/usbother.asm
Normal file
@@ -0,0 +1,523 @@
|
||||
;*****************************************************************************;
|
||||
; Copyright (C) 2025, Mikhail Frolov aka Doczom . All rights reserved. ;
|
||||
; Distributed under terms of the 3-Clause BSD License. ;
|
||||
; ;
|
||||
; usbother is a driver for loading USB drivers of a certain class and vendor. ;
|
||||
; ;
|
||||
; Version 0.1.1, 24 May 2025 ;
|
||||
; ;
|
||||
;*****************************************************************************;
|
||||
format PE native 0.05
|
||||
entry START
|
||||
; const
|
||||
|
||||
DRV_VERSION = 0x0101 ; 0.1.1
|
||||
|
||||
|
||||
; struct
|
||||
include '../../struct.inc'
|
||||
|
||||
; USB device descriptor
|
||||
struct DEVICE_DESCR
|
||||
bLength db ?
|
||||
bDescriptorType db ?
|
||||
bcdUSB dw ?
|
||||
bDeviceClass db ?
|
||||
bDeviceSubClass db ?
|
||||
bDeviceProtocol db ?
|
||||
bMaxPacketSize0 db ?
|
||||
idVendor dw ?
|
||||
idProduct dw ?
|
||||
bcdDevice dw ?
|
||||
iManufacturer db ?
|
||||
iProduct db ?
|
||||
iSerialNumber db ?
|
||||
bNumConfigurations db ?
|
||||
ends
|
||||
|
||||
struct INTERFACE_DESCR
|
||||
bLength db ?
|
||||
bDescriptorType db ?
|
||||
bInterfaceNumber db ?
|
||||
bAlternateSetting db ?
|
||||
bNumEndpoints db ?
|
||||
bInterfaceClass db ?
|
||||
bInterfaceSubClass db ?
|
||||
bInterfaceProtocol db ?
|
||||
iInterface db ?
|
||||
ends
|
||||
|
||||
|
||||
struct SRV
|
||||
srv_name rb 16 ;ASCIIZ string
|
||||
magic dd ? ;+0x10 ;'SRV '
|
||||
size dd ? ;+0x14 ;size of structure SRV
|
||||
fd dd ? ;+0x18 ;next SRV descriptor
|
||||
bk dd ? ;+0x1C ;prev SRV descriptor
|
||||
base dd ? ;+0x20 ;service base address
|
||||
entry dd ? ;+0x24 ;service START function
|
||||
srv_proc dd ? ;+0x28 ;user mode service handler
|
||||
srv_proc_ex dd ? ;+0x2C ;kernel mode service handler
|
||||
ends
|
||||
|
||||
struct USBSRV
|
||||
srv SRV
|
||||
usb_func dd ?
|
||||
ends
|
||||
|
||||
struct USBFUNC
|
||||
strucsize dd ?
|
||||
add_device dd ?
|
||||
device_disconnect dd ?
|
||||
ends
|
||||
|
||||
USBDRV_TYPE_NOLOCK = 0 ; usb device not controlled (native driver
|
||||
; not found and IOCTL not opened device)
|
||||
USBDRV_TYPE_NATIVE = 1 ; native PE kernel driver for usb
|
||||
USBDRV_TYPE_IOCTL = 2 ; usb device is controlled by IOCTL service
|
||||
; (driver or userspace process/threads)
|
||||
USBDRV_IOCTL_BLOCKED = 4 ; blocked IOCTL interface, device disconnected
|
||||
|
||||
|
||||
|
||||
struct DRV_CONTEXT
|
||||
next dd ?
|
||||
prev dd ?
|
||||
drv_hand dd ?
|
||||
drv_pdata dd ?
|
||||
flags dd ?
|
||||
|
||||
config_descr dd ?
|
||||
interface_descr dd ?
|
||||
ep rd 64 ; 32 IN + 32 OUT endpoints' pipes
|
||||
ends
|
||||
DRV_CONTEXT.ep0 fix (DRV_CONTEXT.ep + 0)
|
||||
|
||||
|
||||
section '.flat' code readable writable executable
|
||||
|
||||
include '../../proc32.inc'
|
||||
include '../../peimport.inc'
|
||||
include '../../macros.inc'
|
||||
|
||||
|
||||
proc START c, state:dword, cmdline:dword
|
||||
|
||||
cmp [state], DRV_ENTRY
|
||||
jne .end
|
||||
; init
|
||||
|
||||
mov ecx, drv_list_lock
|
||||
invoke MutexInit
|
||||
|
||||
mov ecx, interface_list_lock
|
||||
invoke MutexInit
|
||||
|
||||
; load drv_list
|
||||
stdcall load_drv_list, default_list
|
||||
test eax, eax
|
||||
jnz .end
|
||||
|
||||
; reg driver
|
||||
invoke RegUSBDriver, drv_name, service_proc, usb_functions
|
||||
ret
|
||||
.end:
|
||||
xor eax, eax
|
||||
ret
|
||||
endp
|
||||
|
||||
proc load_drv_list stdcall, .path:dword
|
||||
|
||||
push ebx
|
||||
mov ecx, drv_list_lock
|
||||
invoke MutexLock
|
||||
; load file
|
||||
invoke LoadFile, [.path]
|
||||
test eax, eax
|
||||
push eax
|
||||
jnz @f
|
||||
mov dword[esp], -1
|
||||
jmp .exit
|
||||
@@:
|
||||
cmp [drv_list], 0
|
||||
jz @f
|
||||
|
||||
invoke KernelFree, [drv_list]
|
||||
@@:
|
||||
mov eax,[esp]
|
||||
mov [drv_list], eax
|
||||
mov dword[esp], 0
|
||||
.exit:
|
||||
mov ecx, drv_list_lock
|
||||
invoke MutexUnlock
|
||||
pop eax
|
||||
pop ebx
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
proc service_proc stdcall, .ioctl:dword
|
||||
|
||||
push esi
|
||||
or eax, -1
|
||||
mov esi, [.ioctl]
|
||||
|
||||
mov ecx, [esi + IOCTL.io_code]
|
||||
cmp ecx, .count_ioctl_codes
|
||||
jae .fail
|
||||
|
||||
jmp dword[.table_subfunction + ecx*4]
|
||||
|
||||
.table_subfunction:
|
||||
dd .get_version
|
||||
dd .update_list
|
||||
dd .get_array_dev
|
||||
dd .get_full_dev_data
|
||||
dd .open_dev
|
||||
dd .close_dev
|
||||
dd .control_transfer
|
||||
dd .bulk_transfer
|
||||
dd .interrupt_transfer
|
||||
;dd .control_transfer_async
|
||||
;dd .bulk_transfer_async
|
||||
;dd .interrupt_transfer_async
|
||||
.count_ioctl_codes = ($ - .table_subfunction)/4
|
||||
|
||||
.get_version:
|
||||
mov eax, [esi + IOCTL.output]
|
||||
cmp [esi + IOCTL.out_size], 4
|
||||
jne .fail
|
||||
|
||||
mov dword[eax], DRV_VERSION
|
||||
xor eax, eax
|
||||
jmp .exit
|
||||
|
||||
.update_list:
|
||||
; update list
|
||||
mov ecx, [esi + IOCTL.input]
|
||||
cmp [esi + IOCTL.inp_size], 0
|
||||
jnz @f
|
||||
|
||||
mov ecx, default_list
|
||||
@@:
|
||||
stdcall load_drv_list, ecx
|
||||
|
||||
.exit:
|
||||
pop esi
|
||||
ret
|
||||
|
||||
.get_array_dev:
|
||||
.get_full_dev_data:
|
||||
.open_dev:
|
||||
.close_dev:
|
||||
;
|
||||
.control_transfer:
|
||||
.bulk_transfer:
|
||||
.interrupt_transfer:
|
||||
|
||||
.fail:
|
||||
or eax, -1
|
||||
jmp .exit
|
||||
endp
|
||||
|
||||
|
||||
proc AddDevice stdcall, .config_pipe:dword, \
|
||||
.config_descr:dword,\
|
||||
.interface:dword
|
||||
|
||||
push esi edi
|
||||
mov eax, sizeof.DRV_CONTEXT
|
||||
invoke Kmalloc
|
||||
test eax, eax
|
||||
jz .err_init
|
||||
|
||||
mov esi, eax
|
||||
|
||||
mov ecx, interface_list_lock
|
||||
invoke MutexLock
|
||||
|
||||
mov edx, [usb_interface_list] ; next
|
||||
mov [esi + DRV_CONTEXT.next], edx
|
||||
mov [esi + DRV_CONTEXT.prev], usb_interface_list
|
||||
mov [usb_interface_list], esi
|
||||
mov [edx + DRV_CONTEXT.prev], esi
|
||||
|
||||
mov ecx, interface_list_lock
|
||||
invoke MutexUnlock
|
||||
|
||||
and [esi + DRV_CONTEXT.drv_hand], 0
|
||||
mov [esi + DRV_CONTEXT.flags], USBDRV_TYPE_NOLOCK
|
||||
|
||||
; lock mutex
|
||||
mov ecx, drv_list_lock
|
||||
invoke MutexLock
|
||||
|
||||
; save device context data
|
||||
mov eax, [.config_pipe]
|
||||
mov [esi + DRV_CONTEXT.ep0], eax
|
||||
mov eax, [.config_descr]
|
||||
mov [esi + DRV_CONTEXT.config_descr], eax
|
||||
mov eax, [.interface]
|
||||
mov [esi + DRV_CONTEXT.interface_descr], eax
|
||||
|
||||
; get pointer to list
|
||||
mov edx, [drv_list]
|
||||
test edx, edx
|
||||
jz .err_exit
|
||||
|
||||
mov edi, edx
|
||||
add edi, [edx]
|
||||
|
||||
; get in ecx VID:PID code
|
||||
invoke USBGetParam, [.config_pipe], 0
|
||||
mov ecx, dword[eax + DEVICE_DESCR.idVendor]
|
||||
|
||||
.loop_id_drv:
|
||||
cmp dword[edi], 0
|
||||
jz .end_loop_id_drv
|
||||
|
||||
mov edx, [drv_list]
|
||||
add edx, [edi] ; ID_TABLE
|
||||
.loop_id:
|
||||
cmp dword[edx], 0
|
||||
jz .end_loop_id
|
||||
|
||||
; check id
|
||||
mov eax, ecx
|
||||
test word[edx + 2], 0xffff
|
||||
jne @f
|
||||
; driver for all devices of VID
|
||||
and eax, 0xffff
|
||||
@@:
|
||||
cmp [edx], eax ; check VID:PID
|
||||
je @f
|
||||
|
||||
add edx, 4
|
||||
jmp .loop_id
|
||||
@@: ; found
|
||||
call .load_drv
|
||||
jnz .exit
|
||||
|
||||
add edx, 4
|
||||
jmp .loop_id
|
||||
.end_loop_id:
|
||||
add edi, 8
|
||||
jmp .loop_id_drv
|
||||
|
||||
.end_loop_id_drv:
|
||||
|
||||
|
||||
push esi
|
||||
mov esi, str_1
|
||||
invoke SysMsgBoardStr
|
||||
pop esi
|
||||
|
||||
|
||||
; get in ecx class code
|
||||
mov eax, [.interface]
|
||||
mov ecx, dword[eax + INTERFACE_DESCR.bInterfaceClass] ; 24-31 bits
|
||||
|
||||
mov edi, [drv_list]
|
||||
add edi, [edi + 4]
|
||||
.loop_class:
|
||||
cmp dword[edi], 0
|
||||
jz .end_loop_class
|
||||
|
||||
; check class
|
||||
movzx eax, byte[edi] ; length
|
||||
and eax, 11b ; protect - max length = 3
|
||||
lea eax, [eax*8] ; 1 = 8; 2 = 16; 3 = 24
|
||||
xor edx, edx
|
||||
bts edx, eax
|
||||
dec edx ; bitmask
|
||||
|
||||
mov eax, [edi]
|
||||
shr eax, 8
|
||||
and eax, edx ; good class in list
|
||||
|
||||
and edx, ecx ; good class of device
|
||||
|
||||
cmp eax, edx
|
||||
je @f
|
||||
|
||||
add edi, 8
|
||||
jmp .loop_class
|
||||
@@: ; found
|
||||
call .load_drv
|
||||
jnz .exit
|
||||
|
||||
add edi, 8
|
||||
jmp .loop_class
|
||||
|
||||
; IN: edi - item list of driver
|
||||
; esi - DRV_CONTEXT
|
||||
; OUT: ZF - not found zF - found
|
||||
; function save drv handl in DRV_CONTEXT.drv_hand
|
||||
; and pdata in DRV_CONTEXT.drv_pdata
|
||||
.load_drv:
|
||||
push ecx edx
|
||||
; load driver
|
||||
push esi
|
||||
mov esi, str_2
|
||||
invoke SysMsgBoardStr
|
||||
pop esi
|
||||
|
||||
mov ecx, [drv_list]
|
||||
add ecx, [edi + 4]
|
||||
|
||||
pusha
|
||||
mov esi, ecx
|
||||
invoke SysMsgBoardStr
|
||||
mov esi, str_newline
|
||||
invoke SysMsgBoardStr
|
||||
popa
|
||||
|
||||
invoke GetService, ecx
|
||||
test eax, eax
|
||||
jz @f
|
||||
|
||||
mov [esi + DRV_CONTEXT.drv_hand], eax
|
||||
; get function list
|
||||
mov ecx, [eax + USBSRV.usb_func]
|
||||
|
||||
; call AddDevice of driver
|
||||
stdcall [ecx + USBFUNC.add_device], [.config_pipe], \
|
||||
[.config_descr],\
|
||||
[.interface]
|
||||
mov [esi + DRV_CONTEXT.drv_pdata], eax
|
||||
test eax, eax
|
||||
jnz .load_drv.good
|
||||
|
||||
push esi
|
||||
mov esi, str_4
|
||||
invoke SysMsgBoardStr
|
||||
pop esi
|
||||
|
||||
and [esi + DRV_CONTEXT.drv_hand], 0
|
||||
@@:
|
||||
pushf
|
||||
push esi
|
||||
mov esi, str_5
|
||||
invoke SysMsgBoardStr
|
||||
pop esi
|
||||
popf
|
||||
|
||||
pop edx ecx
|
||||
retn
|
||||
.load_drv.good:
|
||||
pushf
|
||||
push esi
|
||||
mov esi, str_3
|
||||
invoke SysMsgBoardStr
|
||||
pop esi
|
||||
popf
|
||||
|
||||
mov [esi + DRV_CONTEXT.flags], USBDRV_TYPE_NATIVE
|
||||
pop edx ecx
|
||||
retn
|
||||
|
||||
|
||||
.err_exit:
|
||||
mov eax, esi
|
||||
invoke Kfree
|
||||
xor esi, esi
|
||||
.end_loop_class:
|
||||
.exit:
|
||||
; driver not found - Added libusb driver
|
||||
|
||||
; unlock mutex
|
||||
mov ecx, drv_list_lock
|
||||
invoke MutexUnlock
|
||||
|
||||
mov eax, esi
|
||||
pop edi esi
|
||||
ret
|
||||
.err_init:
|
||||
xor eax, eax
|
||||
pop edi esi
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
proc DeviceDisconnected stdcall, .pdata:dword
|
||||
|
||||
mov eax, [.pdata]
|
||||
|
||||
test [eax + DRV_CONTEXT.flags], USBDRV_TYPE_NATIVE
|
||||
jz .no_native
|
||||
|
||||
cmp [eax + DRV_CONTEXT.drv_hand], 0
|
||||
jz .free
|
||||
|
||||
; call device disconnected
|
||||
mov ecx, [eax + DRV_CONTEXT.drv_hand]
|
||||
|
||||
mov edx, [ecx + USBSRV.usb_func]
|
||||
cmp dword[edx], USBFUNC.device_disconnect
|
||||
jbe .free ; TODO: check
|
||||
|
||||
stdcall [edx + USBFUNC.device_disconnect], [eax + DRV_CONTEXT.drv_pdata]
|
||||
.free:
|
||||
; clear list of DRV_CONTENT
|
||||
mov ecx, interface_list_lock
|
||||
invoke MutexLock
|
||||
|
||||
mov eax, [.pdata]
|
||||
mov edx, [eax + DRV_CONTEXT.prev]
|
||||
mov ecx, [eax + DRV_CONTEXT.next]
|
||||
mov [edx + DRV_CONTEXT.next], ecx
|
||||
mov [ecx + DRV_CONTEXT.prev], edx
|
||||
|
||||
mov ecx, interface_list_lock
|
||||
invoke MutexUnlock
|
||||
|
||||
; free context
|
||||
mov eax, [.pdata]
|
||||
invoke Kfree
|
||||
ret
|
||||
.no_native:
|
||||
test [eax + DRV_CONTEXT.flags], USBDRV_TYPE_IOCTL
|
||||
jz .free
|
||||
|
||||
; set state for block user api and clear struct
|
||||
or [eax + DRV_CONTEXT.flags], USBDRV_IOCTL_BLOCKED
|
||||
xor ecx, ecx
|
||||
;mov [eax + DRV_CONTEXT.drv_hand], ecx
|
||||
;mov [eax + DRV_CONTEXT.drv_pdata], ecx
|
||||
mov [eax + DRV_CONTEXT.config_descr], ecx
|
||||
mov [eax + DRV_CONTEXT.interface_descr], ecx
|
||||
mov [eax + DRV_CONTEXT.ep0], ecx
|
||||
; TODO
|
||||
jmp .free
|
||||
endp
|
||||
|
||||
; data
|
||||
drv_list_lock MUTEX
|
||||
|
||||
drv_list dd ?
|
||||
|
||||
interface_list_lock MUTEX
|
||||
usb_interface_list:
|
||||
dd usb_interface_list
|
||||
dd usb_interface_list
|
||||
|
||||
|
||||
usb_functions:
|
||||
dd .end - usb_functions
|
||||
dd AddDevice
|
||||
dd DeviceDisconnected
|
||||
.end:
|
||||
|
||||
drv_name db 'usbother', 0
|
||||
|
||||
default_list: db '/sys/settings/usbdrv.dat', 0
|
||||
|
||||
str_1: db 'USBOTHER: Driver for this ID not found', 13, 10, 0
|
||||
str_2: db 'USBOTHER: Check found driver: ', 0, 13, 10, 0
|
||||
str_3: db 'USBOTHER: Device driver is good', 13, 10, 0
|
||||
str_4: db 'USBOTHER: Device driver fail prob', 13, 10, 0
|
||||
str_5: db 'USBOTHER: Device driver load error', 13, 10, 0
|
||||
str_newline: db 13,10,0
|
||||
|
||||
data fixups
|
||||
end data
|
||||
@@ -5,7 +5,7 @@
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
Загрузочный сектор для ОС Колибри (FAT12, дискета)
|
||||
Загрузочный сектор для КолибриОС (FAT12, дискета)
|
||||
|
||||
- Описание
|
||||
Позволяет загружать KERNEL.MNT с дискет/образов
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
Загрузочный сектор для ОС Колибри (FAT12, дискета)
|
||||
Загрузочный сектор для КолибриОС (FAT12, дискета)
|
||||
|
||||
- Описание
|
||||
Позволяет загружать KERNEL.MNT с дискет/образов
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
Загрузочный сектор для ОС Колибри (FAT12, дискета)
|
||||
Загрузочный сектор для КолибриОС (FAT12, дискета)
|
||||
|
||||
- Описание
|
||||
Позволяет загружать KERNEL.MNT с дискет/образов
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
Загрузочный сектор для ОС Колибри (FAT12, дискета)
|
||||
Загрузочный сектор для КолибриОС (FAT12, дискета)
|
||||
|
||||
- Описание
|
||||
Позволяет загружать KERNEL.MNT с дискет/образов
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
//Copyright 2007-2025 by Veliant & Leency
|
||||
//Asper, lev, Lrz, Barsuk, Nable, hidnplayr...
|
||||
//Asper, lev, Lrz, Barsuk, Nable, hidnplayr, Burer...
|
||||
|
||||
//BUGS
|
||||
//if maximize a window on image load => crash
|
||||
//issues with a long line
|
||||
//add proxy settings
|
||||
|
||||
//===================================================//
|
||||
// //
|
||||
@@ -13,6 +12,7 @@
|
||||
//===================================================//
|
||||
|
||||
#define MEMSIZE 1024 * 160
|
||||
|
||||
#include "..\lib\gui.h"
|
||||
#include "..\lib\draw_buf.h"
|
||||
#include "..\lib\list_box.h"
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "..\lib\random.h"
|
||||
#include "..\lib\clipboard.h"
|
||||
|
||||
#include "..\lib\obj\libini.h"
|
||||
#include "..\lib\obj\box_lib.h"
|
||||
#include "..\lib\obj\libimg.h"
|
||||
#include "..\lib\obj\http.h"
|
||||
@@ -67,6 +68,10 @@ _http http = 0;
|
||||
progress_bar prbar;
|
||||
proc_info Form;
|
||||
|
||||
char settings_file[256];
|
||||
char proxy_address[768];
|
||||
|
||||
#include "settings.h"
|
||||
#include "tabs.h"
|
||||
|
||||
dword cur_img_url;
|
||||
@@ -90,6 +95,7 @@ edit_box omnibox_edit = {250, 0, 0, 0xffffff,
|
||||
|
||||
void LoadLibraries()
|
||||
{
|
||||
load_dll(libini, #lib_init,1);
|
||||
load_dll(boxlib, #box_lib_init,0);
|
||||
load_dll(libimg, #libimg_init,1);
|
||||
load_dll(libHTTP, #http_lib_init,1);
|
||||
@@ -130,6 +136,7 @@ void main()
|
||||
TOOLBAR_H = PADDING+TSZE+PADDING+2;
|
||||
|
||||
LoadLibraries();
|
||||
LoadIniConfig();
|
||||
HandleParam();
|
||||
|
||||
omnibox_edit.left = PADDING+TSZE*2+PADDING+6;
|
||||
@@ -517,14 +524,17 @@ bool GetLocalFileData(dword _path)
|
||||
bool GetUrl(dword _http_url)
|
||||
{
|
||||
char new_url_full[URL_SIZE+1];
|
||||
if (!strncmp(_http_url,"http:",5)) {
|
||||
if (!strncmp(_http_url,"http://",7)) {
|
||||
http.get(_http_url);
|
||||
return true;
|
||||
} else if (!strncmp(_http_url,"https://",8)) {
|
||||
strcpy(#new_url_full, "http://gate.aspero.pro/?site=");
|
||||
strncat(#new_url_full, _http_url, URL_SIZE);
|
||||
http.get(#new_url_full);
|
||||
return true;
|
||||
if (#proxy_address) {
|
||||
strcpy(#new_url_full, #proxy_address);
|
||||
strncat(#new_url_full, _http_url, URL_SIZE);
|
||||
http.get(#new_url_full);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ Copy link
|
||||
Download link contents";
|
||||
char loading_text[] = "Loading...";
|
||||
char update_param[] = "-e http://builds.kolibrios.org/en_US/data/programs/cmm/browser/WebView.com";
|
||||
char update_download_error[] = "'WebView\nError receiving an up to date information!' -tE";
|
||||
char update_download_error[] = "'WebView\nError receiving update information!' -tE";
|
||||
char update_ok[] = "'WebView\nThe browser has been updated!' -tO";
|
||||
char update_is_current[] = "'WebView\nThe browser is up to date.' -tI";
|
||||
char update_can_not_copy[] = "'WebView\nError copying a new version from Downloads folder!\nProbably too litle space on Ramdisk.' -tE";
|
||||
@@ -112,4 +112,4 @@ char editbox_icons[] = FROM "res/editbox_icons.raw";
|
||||
|
||||
#define DEFAULT_URL URL_SERVICE_HOMEPAGE
|
||||
|
||||
char version[]="WebView 3.91";
|
||||
char version[]="WebView 3.92";
|
||||
@@ -14,7 +14,7 @@
|
||||
| || | | |
|
||||
\_____||__|________|__|<font color=#DDD>lc</font>
|
||||
|
||||
<font bg=#F8F15B> web <font bg=#FF5A7E color=#fff> 1.0 <font bg=#47D018> compatable
|
||||
<font bg=#F8F15B> web <font bg=#FF5A7E color=#fff> 1.0 <font bg=#47D018> compatible
|
||||
<font bg=#3CE7FF> </font></font></font></font>
|
||||
<td>
|
||||
|
||||
@@ -26,9 +26,9 @@
|
||||
|
||||
By the way,
|
||||
<font color="#555555">• You can check for browser updates from the main menu.
|
||||
• To run a web search, type a text in the adress box and press Ctrl+Enter.
|
||||
• Pressing F6 moves a text cursor to the omnibox.
|
||||
• You can manually change the encoding of a page by clicking on a label in the bottom right corner.
|
||||
• To run a web search, type text in the address box and press Ctrl+Enter.
|
||||
• Pressing F6 moves the text cursor to the omnibox.
|
||||
• You can manually change the encoding of a page by clicking on the label in the bottom right corner.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
<h1> Webpage Not Available</h1>
|
||||
<h2> What could be done:</h2>
|
||||
<ul>
|
||||
<li>Make sure that evetything fine with Internet connection.<br>
|
||||
<li>Make sure that you have a working Internet connection.<br>
|
||||
Open <a href="/sys/network/netcfg">Netcfg</a> network diagnostic tool.<br>
|
||||
<li>Check page address, there may have been made a typo.<br>
|
||||
<li>Check the page address for any typos.<br>
|
||||
<li>Server is temporarily unavailable.<br>
|
||||
Refresh the page.<br>
|
||||
<li>Browser doesn't handled properly server's response.<br>
|
||||
<li>Browser didn't properly handle the server's response.<br>
|
||||
Please, report an error.<br>
|
||||
</ul>
|
||||
|
||||
9
programs/cmm/browser/settings.h
Normal file
9
programs/cmm/browser/settings.h
Normal file
@@ -0,0 +1,9 @@
|
||||
_ini ini;
|
||||
|
||||
void LoadIniConfig()
|
||||
{
|
||||
ini.path = GetIni(#settings_file, "app.ini");
|
||||
ini.section = "WebView";
|
||||
|
||||
ini.GetString("proxy", #proxy_address, sizeof(proxy_address), NULL);
|
||||
}
|
||||
@@ -1,7 +1,12 @@
|
||||
//Copyright 2020 - 2025 by Leency
|
||||
//Burer...
|
||||
|
||||
#define MEMSIZE 1024 * 40
|
||||
//Copyright 2020 - 2021 by Leency
|
||||
|
||||
#include "../lib/gui.h"
|
||||
#include "../lib/random.h"
|
||||
|
||||
#include "../lib/obj/libini.h"
|
||||
#include "../lib/obj/box_lib.h"
|
||||
#include "../lib/obj/http.h"
|
||||
|
||||
@@ -21,6 +26,11 @@ char uEdit[URL_SIZE];
|
||||
char filepath[4096];
|
||||
char save_dir[4096];
|
||||
|
||||
char settings_file[256];
|
||||
char proxy_address[768];
|
||||
|
||||
#include "settings.h"
|
||||
|
||||
char* active_status;
|
||||
|
||||
edit_box ed = {WIN_W-GAPX-GAPX,GAPX,20,0xffffff,0x94AECE,0xffffff,0xffffff,
|
||||
@@ -32,9 +42,13 @@ progress_bar pb = {0, GAPX, 52, WIN_W - GAPX - GAPX, 17, 0, NULL, NULL,
|
||||
void main()
|
||||
{
|
||||
dword shared_url;
|
||||
|
||||
load_dll(libini, #lib_init,1);
|
||||
load_dll(boxlib, #box_lib_init,0);
|
||||
load_dll(libHTTP, #http_lib_init,1);
|
||||
|
||||
LoadIniConfig();
|
||||
|
||||
strcpy(#save_dir, DEFAULT_SAVE_DIR);
|
||||
if (!dir_exists(#save_dir)) CreateDir(#save_dir);
|
||||
SetCurDir(#save_dir);
|
||||
@@ -167,10 +181,8 @@ void StartDownloading()
|
||||
if (http.transfer > 0) return;
|
||||
ResetDownloadSpeed();
|
||||
pb.back_color = 0xFFFfff;
|
||||
if (!strncmp(#uEdit,"https:",6)) {
|
||||
//miniprintf(#get_url, "http://gate.aspero.pro/?site=%s", #uEdit);
|
||||
notify("'HTTPS for download temporary is not supported,\ntrying to download the file via HTTP' -W");
|
||||
miniprintf(#uEdit, "http://%s", #uEdit+8);
|
||||
if (!strncmp(#uEdit,"https://",8)) {
|
||||
miniprintf(#get_url, "%s%s", #proxy_address, #uEdit);
|
||||
}
|
||||
strcpy(#get_url, #uEdit);
|
||||
|
||||
|
||||
9
programs/cmm/downloader/settings.h
Normal file
9
programs/cmm/downloader/settings.h
Normal file
@@ -0,0 +1,9 @@
|
||||
_ini ini;
|
||||
|
||||
void LoadIniConfig()
|
||||
{
|
||||
ini.path = GetIni(#settings_file, "app.ini");
|
||||
ini.section = "WebView";
|
||||
|
||||
ini.GetString("proxy", #proxy_address, sizeof(proxy_address), NULL);
|
||||
}
|
||||
@@ -112,7 +112,6 @@ struct _http
|
||||
dword _http::get(dword _url)
|
||||
{
|
||||
cur_url = _url;
|
||||
if (streqrp(cur_url, "http://gate.aspero.pro/?site=")) cur_url += 29;
|
||||
http_get stdcall (_url, 0, 0, #accept_language);
|
||||
transfer = EAX;
|
||||
return EAX;
|
||||
@@ -138,7 +137,7 @@ bool _http::stop()
|
||||
transfer=0;
|
||||
*/
|
||||
hfree();
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -23,12 +23,6 @@ macro matr_cell c_funct,c_param,funct,param, dia
|
||||
dia dword[esp-4*(c_param*(c_funct-funct)+(1+c_param-param))]
|
||||
}
|
||||
|
||||
;Macro for double type parameters (8 bytes)
|
||||
macro glpush GLDoubleVar {
|
||||
push dword[GLDoubleVar+4]
|
||||
push dword[GLDoubleVar]
|
||||
}
|
||||
|
||||
align 4
|
||||
start:
|
||||
load_library name_tgl, library_path, system_path, import_tinygl
|
||||
@@ -901,22 +895,8 @@ endp
|
||||
|
||||
|
||||
;--------------------------------------------------
|
||||
align 4
|
||||
import_tinygl:
|
||||
include '../import.inc'
|
||||
|
||||
macro E_LIB n
|
||||
{
|
||||
n dd sz_#n
|
||||
}
|
||||
include '../export.inc'
|
||||
dd 0,0
|
||||
macro E_LIB n
|
||||
{
|
||||
sz_#n db `n,0
|
||||
}
|
||||
include '../export.inc'
|
||||
|
||||
;--------------------------------------------------
|
||||
system_path db '/sys/lib/'
|
||||
name_tgl db 'tinygl.obj',0
|
||||
;--------------------------------------------------
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
; SPDX-License-Identifier: GPL-2.0-only
|
||||
; Test 3 - example of drawing triangles
|
||||
; Copyright (C) 2014-2025 KolibriOS team
|
||||
|
||||
use32
|
||||
org 0
|
||||
db 'MENUET01'
|
||||
@@ -8,13 +12,14 @@ include '../../../../../macros.inc'
|
||||
include '../../../../../KOSfuncs.inc'
|
||||
include '../../../../../load_lib.mac'
|
||||
include '../../../../../dll.inc'
|
||||
include '../kosgl.inc'
|
||||
include '../opengl_const.inc'
|
||||
|
||||
@use_library
|
||||
|
||||
align 4
|
||||
start:
|
||||
load_library name_tgl, library_path, system_path, import_lib_tinygl
|
||||
load_library name_tgl, library_path, system_path, import_tinygl
|
||||
cmp eax,SF_TERMINATE_PROCESS
|
||||
jz button.exit
|
||||
|
||||
@@ -34,11 +39,11 @@ red_win:
|
||||
align 16
|
||||
still:
|
||||
mcall SF_WAIT_EVENT
|
||||
cmp al,1
|
||||
cmp al,EV_REDRAW
|
||||
jz red_win
|
||||
cmp al,2
|
||||
cmp al,EV_KEY
|
||||
jz key
|
||||
cmp al,3
|
||||
cmp al,EV_BUTTON
|
||||
jz button
|
||||
jmp still
|
||||
|
||||
@@ -99,7 +104,7 @@ caption db 'Test tinygl library, [Esc] - exit, [<-] and [->] - rotate',0
|
||||
|
||||
align 4
|
||||
draw_3d:
|
||||
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
|
||||
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;clear the color and depth buffer
|
||||
|
||||
call [glPushMatrix]
|
||||
stdcall [glRotatef], [angle_z],0.0,0.0,1.0
|
||||
@@ -136,30 +141,15 @@ angle_z dd 15.0
|
||||
delt_size dd 3.0
|
||||
|
||||
;--------------------------------------------------
|
||||
align 4
|
||||
import_lib_tinygl:
|
||||
include '../import.inc' ;tinygl
|
||||
|
||||
macro E_LIB n
|
||||
{
|
||||
n dd sz_#n
|
||||
}
|
||||
include '../export.inc'
|
||||
dd 0,0
|
||||
macro E_LIB n
|
||||
{
|
||||
sz_#n db `n,0
|
||||
}
|
||||
include '../export.inc'
|
||||
|
||||
;--------------------------------------------------
|
||||
system_path db '/sys/lib/'
|
||||
name_tgl db 'tinygl.obj',0
|
||||
;--------------------------------------------------
|
||||
|
||||
align 16
|
||||
i_end:
|
||||
ctx1 rb 28 ;TinyGLContext or KOSGLContext
|
||||
;sizeof.TinyGLContext = 28
|
||||
ctx1 TinyGLContext
|
||||
cur_dir_path rb 4096
|
||||
library_path rb 4096
|
||||
rb 1024
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
; SPDX-License-Identifier: GPL-2.0-only
|
||||
; Test array1 - example of using vertex array functions
|
||||
; Copyright (C) 2014-2025 KolibriOS team
|
||||
|
||||
use32
|
||||
org 0
|
||||
db 'MENUET01'
|
||||
@@ -8,6 +12,7 @@ include '../../../../../macros.inc'
|
||||
include '../../../../../KOSfuncs.inc'
|
||||
include '../../../../../load_lib.mac'
|
||||
include '../../../../../dll.inc'
|
||||
include '../kosgl.inc'
|
||||
include '../opengl_const.inc'
|
||||
|
||||
@use_library
|
||||
@@ -191,29 +196,15 @@ align 4
|
||||
Indices rb FACES_COUNT*6 ;3 points per edge, point index 2 bytes
|
||||
|
||||
;--------------------------------------------------
|
||||
align 4
|
||||
import_tinygl:
|
||||
include '../import.inc' ;tinygl
|
||||
|
||||
macro E_LIB n
|
||||
{
|
||||
n dd sz_#n
|
||||
}
|
||||
include '../export.inc'
|
||||
dd 0,0
|
||||
macro E_LIB n
|
||||
{
|
||||
sz_#n db `n,0
|
||||
}
|
||||
include '../export.inc'
|
||||
|
||||
;--------------------------------------------------
|
||||
system_path db '/sys/lib/'
|
||||
name_tgl db 'tinygl.obj',0
|
||||
;--------------------------------------------------
|
||||
|
||||
align 4
|
||||
i_end:
|
||||
ctx1 rb 28 ;sizeof.TinyGLContext = 28
|
||||
ctx1 TinyGLContext
|
||||
cur_dir_path rb 4096
|
||||
library_path rb 4096
|
||||
rb 4096
|
||||
|
||||
@@ -490,127 +490,9 @@ white_light dd 0.8, 0.8, 0.8, 1.0 ; Цвет и интенсивность ос
|
||||
lmodel_ambient dd 0.2, 0.2, 0.2, 1.0 ; Параметры фонового освещения
|
||||
|
||||
;--------------------------------------------------
|
||||
align 4
|
||||
import_tinygl:
|
||||
|
||||
macro E_LIB n
|
||||
{
|
||||
if defined sz_#n
|
||||
n dd sz_#n
|
||||
end if
|
||||
}
|
||||
include '../export.inc'
|
||||
dd 0,0
|
||||
macro E_LIB n
|
||||
{
|
||||
if used n
|
||||
sz_#n db `n,0
|
||||
end if
|
||||
}
|
||||
include '../export.inc'
|
||||
|
||||
align 4
|
||||
import_buf2d:
|
||||
dd sz_init0
|
||||
buf2d_create dd sz_buf2d_create
|
||||
buf2d_create_f_img dd sz_buf2d_create_f_img
|
||||
buf2d_clear dd sz_buf2d_clear
|
||||
buf2d_draw dd sz_buf2d_draw
|
||||
buf2d_delete dd sz_buf2d_delete
|
||||
buf2d_resize dd sz_buf2d_resize
|
||||
buf2d_line dd sz_buf2d_line
|
||||
buf2d_rect_by_size dd sz_buf2d_rect_by_size
|
||||
buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
|
||||
buf2d_circle dd sz_buf2d_circle
|
||||
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
|
||||
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
|
||||
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
|
||||
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
|
||||
buf2d_bit_blt dd sz_buf2d_bit_blt
|
||||
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
|
||||
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
|
||||
buf2d_curve_bezier dd sz_buf2d_curve_bezier
|
||||
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
|
||||
buf2d_draw_text dd sz_buf2d_draw_text
|
||||
buf2d_crop_color dd sz_buf2d_crop_color
|
||||
buf2d_offset_h dd sz_buf2d_offset_h
|
||||
buf2d_flood_fill dd sz_buf2d_flood_fill
|
||||
buf2d_set_pixel dd sz_buf2d_set_pixel
|
||||
dd 0,0
|
||||
sz_init0 db 'lib_init',0
|
||||
sz_buf2d_create db 'buf2d_create',0
|
||||
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
|
||||
sz_buf2d_clear db 'buf2d_clear',0
|
||||
sz_buf2d_draw db 'buf2d_draw',0
|
||||
sz_buf2d_delete db 'buf2d_delete',0
|
||||
sz_buf2d_resize db 'buf2d_resize',0
|
||||
sz_buf2d_line db 'buf2d_line',0
|
||||
sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
|
||||
sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
|
||||
sz_buf2d_circle db 'buf2d_circle',0
|
||||
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
|
||||
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
|
||||
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
|
||||
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
|
||||
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
|
||||
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
|
||||
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
|
||||
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
|
||||
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
|
||||
sz_buf2d_draw_text db 'buf2d_draw_text',0
|
||||
sz_buf2d_crop_color db 'buf2d_crop_color',0
|
||||
sz_buf2d_offset_h db 'buf2d_offset_h',0
|
||||
sz_buf2d_flood_fill db 'buf2d_flood_fill',0
|
||||
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
|
||||
|
||||
align 4
|
||||
import_libimg:
|
||||
dd alib_init1
|
||||
; img_is_img dd aimg_is_img
|
||||
; img_info dd aimg_info
|
||||
; img_from_file dd aimg_from_file
|
||||
; img_to_file dd aimg_to_file
|
||||
; img_from_rgb dd aimg_from_rgb
|
||||
; img_to_rgb dd aimg_to_rgb
|
||||
img_to_rgb2 dd aimg_to_rgb2
|
||||
img_decode dd aimg_decode
|
||||
; img_encode dd aimg_encode
|
||||
; img_create dd aimg_create
|
||||
img_destroy dd aimg_destroy
|
||||
; img_destroy_layer dd aimg_destroy_layer
|
||||
; img_count dd aimg_count
|
||||
; img_lock_bits dd aimg_lock_bits
|
||||
; img_unlock_bits dd aimg_unlock_bits
|
||||
; img_flip dd aimg_flip
|
||||
; img_flip_layer dd aimg_flip_layer
|
||||
; img_rotate dd aimg_rotate
|
||||
; img_rotate_layer dd aimg_rotate_layer
|
||||
; img_draw dd aimg_draw
|
||||
; img_convert dd aimg_convert
|
||||
|
||||
dd 0,0
|
||||
alib_init1 db 'lib_init',0
|
||||
; aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
|
||||
; aimg_info db 'img_info',0
|
||||
; aimg_from_file db 'img_from_file',0
|
||||
; aimg_to_file db 'img_to_file',0
|
||||
; aimg_from_rgb db 'img_from_rgb',0
|
||||
; aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB
|
||||
aimg_to_rgb2 db 'img_to_rgb2',0
|
||||
aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных
|
||||
; aimg_encode db 'img_encode',0
|
||||
; aimg_create db 'img_create',0
|
||||
aimg_destroy db 'img_destroy',0
|
||||
; aimg_destroy_layer db 'img_destroy_layer',0
|
||||
; aimg_count db 'img_count',0
|
||||
; aimg_lock_bits db 'img_lock_bits',0
|
||||
; aimg_unlock_bits db 'img_unlock_bits',0
|
||||
; aimg_flip db 'img_flip',0
|
||||
; aimg_flip_layer db 'img_flip_layer',0
|
||||
; aimg_rotate db 'img_rotate',0
|
||||
; aimg_rotate_layer db 'img_rotate_layer',0
|
||||
; aimg_draw db 'img_draw',0
|
||||
; aimg_convert db 'img_convert',0
|
||||
include '../import.inc' ;tinygl
|
||||
include '../../../buf2d/import.inc'
|
||||
include '../../../libs-dev/libimg/import.inc'
|
||||
|
||||
;--------------------------------------------------
|
||||
system_dir_0 db '/sys/lib/'
|
||||
|
||||
@@ -473,127 +473,9 @@ white_light dd 0.8, 0.8, 0.8, 1.0 ; Цвет и интенсивность ос
|
||||
lmodel_ambient dd 0.2, 0.2, 0.2, 1.0 ; Параметры фонового освещения
|
||||
|
||||
;--------------------------------------------------
|
||||
align 4
|
||||
import_tinygl:
|
||||
|
||||
macro E_LIB n
|
||||
{
|
||||
if defined sz_#n
|
||||
n dd sz_#n
|
||||
end if
|
||||
}
|
||||
include '../export.inc'
|
||||
dd 0,0
|
||||
macro E_LIB n
|
||||
{
|
||||
if used n
|
||||
sz_#n db `n,0
|
||||
end if
|
||||
}
|
||||
include '../export.inc'
|
||||
|
||||
align 4
|
||||
import_buf2d:
|
||||
dd sz_init0
|
||||
buf2d_create dd sz_buf2d_create
|
||||
buf2d_create_f_img dd sz_buf2d_create_f_img
|
||||
buf2d_clear dd sz_buf2d_clear
|
||||
buf2d_draw dd sz_buf2d_draw
|
||||
buf2d_delete dd sz_buf2d_delete
|
||||
buf2d_resize dd sz_buf2d_resize
|
||||
buf2d_line dd sz_buf2d_line
|
||||
buf2d_rect_by_size dd sz_buf2d_rect_by_size
|
||||
buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
|
||||
buf2d_circle dd sz_buf2d_circle
|
||||
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
|
||||
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
|
||||
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
|
||||
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
|
||||
buf2d_bit_blt dd sz_buf2d_bit_blt
|
||||
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
|
||||
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
|
||||
buf2d_curve_bezier dd sz_buf2d_curve_bezier
|
||||
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
|
||||
buf2d_draw_text dd sz_buf2d_draw_text
|
||||
buf2d_crop_color dd sz_buf2d_crop_color
|
||||
buf2d_offset_h dd sz_buf2d_offset_h
|
||||
buf2d_flood_fill dd sz_buf2d_flood_fill
|
||||
buf2d_set_pixel dd sz_buf2d_set_pixel
|
||||
dd 0,0
|
||||
sz_init0 db 'lib_init',0
|
||||
sz_buf2d_create db 'buf2d_create',0
|
||||
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
|
||||
sz_buf2d_clear db 'buf2d_clear',0
|
||||
sz_buf2d_draw db 'buf2d_draw',0
|
||||
sz_buf2d_delete db 'buf2d_delete',0
|
||||
sz_buf2d_resize db 'buf2d_resize',0
|
||||
sz_buf2d_line db 'buf2d_line',0
|
||||
sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
|
||||
sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
|
||||
sz_buf2d_circle db 'buf2d_circle',0
|
||||
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
|
||||
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
|
||||
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
|
||||
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
|
||||
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
|
||||
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
|
||||
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
|
||||
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
|
||||
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
|
||||
sz_buf2d_draw_text db 'buf2d_draw_text',0
|
||||
sz_buf2d_crop_color db 'buf2d_crop_color',0
|
||||
sz_buf2d_offset_h db 'buf2d_offset_h',0
|
||||
sz_buf2d_flood_fill db 'buf2d_flood_fill',0
|
||||
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
|
||||
|
||||
align 4
|
||||
import_libimg:
|
||||
dd alib_init1
|
||||
; img_is_img dd aimg_is_img
|
||||
; img_info dd aimg_info
|
||||
; img_from_file dd aimg_from_file
|
||||
; img_to_file dd aimg_to_file
|
||||
; img_from_rgb dd aimg_from_rgb
|
||||
; img_to_rgb dd aimg_to_rgb
|
||||
img_to_rgb2 dd aimg_to_rgb2
|
||||
img_decode dd aimg_decode
|
||||
; img_encode dd aimg_encode
|
||||
; img_create dd aimg_create
|
||||
img_destroy dd aimg_destroy
|
||||
; img_destroy_layer dd aimg_destroy_layer
|
||||
; img_count dd aimg_count
|
||||
; img_lock_bits dd aimg_lock_bits
|
||||
; img_unlock_bits dd aimg_unlock_bits
|
||||
; img_flip dd aimg_flip
|
||||
; img_flip_layer dd aimg_flip_layer
|
||||
; img_rotate dd aimg_rotate
|
||||
; img_rotate_layer dd aimg_rotate_layer
|
||||
; img_draw dd aimg_draw
|
||||
; img_convert dd aimg_convert
|
||||
|
||||
dd 0,0
|
||||
alib_init1 db 'lib_init',0
|
||||
; aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
|
||||
; aimg_info db 'img_info',0
|
||||
; aimg_from_file db 'img_from_file',0
|
||||
; aimg_to_file db 'img_to_file',0
|
||||
; aimg_from_rgb db 'img_from_rgb',0
|
||||
; aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB
|
||||
aimg_to_rgb2 db 'img_to_rgb2',0
|
||||
aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных
|
||||
; aimg_encode db 'img_encode',0
|
||||
; aimg_create db 'img_create',0
|
||||
aimg_destroy db 'img_destroy',0
|
||||
; aimg_destroy_layer db 'img_destroy_layer',0
|
||||
; aimg_count db 'img_count',0
|
||||
; aimg_lock_bits db 'img_lock_bits',0
|
||||
; aimg_unlock_bits db 'img_unlock_bits',0
|
||||
; aimg_flip db 'img_flip',0
|
||||
; aimg_flip_layer db 'img_flip_layer',0
|
||||
; aimg_rotate db 'img_rotate',0
|
||||
; aimg_rotate_layer db 'img_rotate_layer',0
|
||||
; aimg_draw db 'img_draw',0
|
||||
; aimg_convert db 'img_convert',0
|
||||
include '../import.inc' ;tinygl
|
||||
include '../../../buf2d/import.inc'
|
||||
include '../../../libs-dev/libimg/import.inc'
|
||||
|
||||
;--------------------------------------------------
|
||||
system_dir_0 db '/sys/lib/'
|
||||
|
||||
@@ -433,127 +433,9 @@ white_light dd 0.8, 0.8, 0.8, 1.0 ; Цвет и интенсивность ос
|
||||
lmodel_ambient dd 0.2, 0.2, 0.2, 1.0 ; Параметры фонового освещения
|
||||
|
||||
;--------------------------------------------------
|
||||
align 4
|
||||
import_tinygl:
|
||||
|
||||
macro E_LIB n
|
||||
{
|
||||
if defined sz_#n
|
||||
n dd sz_#n
|
||||
end if
|
||||
}
|
||||
include '../export.inc'
|
||||
dd 0,0
|
||||
macro E_LIB n
|
||||
{
|
||||
if used n
|
||||
sz_#n db `n,0
|
||||
end if
|
||||
}
|
||||
include '../export.inc'
|
||||
|
||||
align 4
|
||||
import_buf2d:
|
||||
dd sz_init0
|
||||
buf2d_create dd sz_buf2d_create
|
||||
buf2d_create_f_img dd sz_buf2d_create_f_img
|
||||
buf2d_clear dd sz_buf2d_clear
|
||||
buf2d_draw dd sz_buf2d_draw
|
||||
buf2d_delete dd sz_buf2d_delete
|
||||
buf2d_resize dd sz_buf2d_resize
|
||||
buf2d_line dd sz_buf2d_line
|
||||
buf2d_rect_by_size dd sz_buf2d_rect_by_size
|
||||
buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
|
||||
buf2d_circle dd sz_buf2d_circle
|
||||
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
|
||||
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
|
||||
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
|
||||
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
|
||||
buf2d_bit_blt dd sz_buf2d_bit_blt
|
||||
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
|
||||
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
|
||||
buf2d_curve_bezier dd sz_buf2d_curve_bezier
|
||||
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
|
||||
buf2d_draw_text dd sz_buf2d_draw_text
|
||||
buf2d_crop_color dd sz_buf2d_crop_color
|
||||
buf2d_offset_h dd sz_buf2d_offset_h
|
||||
buf2d_flood_fill dd sz_buf2d_flood_fill
|
||||
buf2d_set_pixel dd sz_buf2d_set_pixel
|
||||
dd 0,0
|
||||
sz_init0 db 'lib_init',0
|
||||
sz_buf2d_create db 'buf2d_create',0
|
||||
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
|
||||
sz_buf2d_clear db 'buf2d_clear',0
|
||||
sz_buf2d_draw db 'buf2d_draw',0
|
||||
sz_buf2d_delete db 'buf2d_delete',0
|
||||
sz_buf2d_resize db 'buf2d_resize',0
|
||||
sz_buf2d_line db 'buf2d_line',0
|
||||
sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
|
||||
sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
|
||||
sz_buf2d_circle db 'buf2d_circle',0
|
||||
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
|
||||
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
|
||||
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
|
||||
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
|
||||
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
|
||||
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
|
||||
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
|
||||
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
|
||||
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
|
||||
sz_buf2d_draw_text db 'buf2d_draw_text',0
|
||||
sz_buf2d_crop_color db 'buf2d_crop_color',0
|
||||
sz_buf2d_offset_h db 'buf2d_offset_h',0
|
||||
sz_buf2d_flood_fill db 'buf2d_flood_fill',0
|
||||
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
|
||||
|
||||
align 4
|
||||
import_libimg:
|
||||
dd alib_init1
|
||||
; img_is_img dd aimg_is_img
|
||||
; img_info dd aimg_info
|
||||
; img_from_file dd aimg_from_file
|
||||
; img_to_file dd aimg_to_file
|
||||
; img_from_rgb dd aimg_from_rgb
|
||||
; img_to_rgb dd aimg_to_rgb
|
||||
img_to_rgb2 dd aimg_to_rgb2
|
||||
img_decode dd aimg_decode
|
||||
; img_encode dd aimg_encode
|
||||
; img_create dd aimg_create
|
||||
img_destroy dd aimg_destroy
|
||||
; img_destroy_layer dd aimg_destroy_layer
|
||||
; img_count dd aimg_count
|
||||
; img_lock_bits dd aimg_lock_bits
|
||||
; img_unlock_bits dd aimg_unlock_bits
|
||||
; img_flip dd aimg_flip
|
||||
; img_flip_layer dd aimg_flip_layer
|
||||
; img_rotate dd aimg_rotate
|
||||
; img_rotate_layer dd aimg_rotate_layer
|
||||
; img_draw dd aimg_draw
|
||||
; img_convert dd aimg_convert
|
||||
|
||||
dd 0,0
|
||||
alib_init1 db 'lib_init',0
|
||||
; aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
|
||||
; aimg_info db 'img_info',0
|
||||
; aimg_from_file db 'img_from_file',0
|
||||
; aimg_to_file db 'img_to_file',0
|
||||
; aimg_from_rgb db 'img_from_rgb',0
|
||||
; aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB
|
||||
aimg_to_rgb2 db 'img_to_rgb2',0
|
||||
aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных
|
||||
; aimg_encode db 'img_encode',0
|
||||
; aimg_create db 'img_create',0
|
||||
aimg_destroy db 'img_destroy',0
|
||||
; aimg_destroy_layer db 'img_destroy_layer',0
|
||||
; aimg_count db 'img_count',0
|
||||
; aimg_lock_bits db 'img_lock_bits',0
|
||||
; aimg_unlock_bits db 'img_unlock_bits',0
|
||||
; aimg_flip db 'img_flip',0
|
||||
; aimg_flip_layer db 'img_flip_layer',0
|
||||
; aimg_rotate db 'img_rotate',0
|
||||
; aimg_rotate_layer db 'img_rotate_layer',0
|
||||
; aimg_draw db 'img_draw',0
|
||||
; aimg_convert db 'img_convert',0
|
||||
include '../import.inc' ;tinygl
|
||||
include '../../../buf2d/import.inc'
|
||||
include '../../../libs-dev/libimg/import.inc'
|
||||
|
||||
;--------------------------------------------------
|
||||
system_dir_0 db '/sys/lib/'
|
||||
|
||||
@@ -364,127 +364,9 @@ angle_y dd 0.0
|
||||
delt_size dd 3.0
|
||||
|
||||
;--------------------------------------------------
|
||||
align 4
|
||||
import_tinygl:
|
||||
|
||||
macro E_LIB n
|
||||
{
|
||||
if defined sz_#n
|
||||
n dd sz_#n
|
||||
end if
|
||||
}
|
||||
include '../export.inc'
|
||||
dd 0,0
|
||||
macro E_LIB n
|
||||
{
|
||||
if used n
|
||||
sz_#n db `n,0
|
||||
end if
|
||||
}
|
||||
include '../export.inc'
|
||||
|
||||
align 4
|
||||
import_buf2d:
|
||||
dd sz_init0
|
||||
buf2d_create dd sz_buf2d_create
|
||||
buf2d_create_f_img dd sz_buf2d_create_f_img
|
||||
buf2d_clear dd sz_buf2d_clear
|
||||
buf2d_draw dd sz_buf2d_draw
|
||||
buf2d_delete dd sz_buf2d_delete
|
||||
buf2d_resize dd sz_buf2d_resize
|
||||
buf2d_line dd sz_buf2d_line
|
||||
buf2d_rect_by_size dd sz_buf2d_rect_by_size
|
||||
buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
|
||||
buf2d_circle dd sz_buf2d_circle
|
||||
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
|
||||
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
|
||||
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
|
||||
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
|
||||
buf2d_bit_blt dd sz_buf2d_bit_blt
|
||||
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
|
||||
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
|
||||
buf2d_curve_bezier dd sz_buf2d_curve_bezier
|
||||
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
|
||||
buf2d_draw_text dd sz_buf2d_draw_text
|
||||
buf2d_crop_color dd sz_buf2d_crop_color
|
||||
buf2d_offset_h dd sz_buf2d_offset_h
|
||||
buf2d_flood_fill dd sz_buf2d_flood_fill
|
||||
buf2d_set_pixel dd sz_buf2d_set_pixel
|
||||
dd 0,0
|
||||
sz_init0 db 'lib_init',0
|
||||
sz_buf2d_create db 'buf2d_create',0
|
||||
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
|
||||
sz_buf2d_clear db 'buf2d_clear',0
|
||||
sz_buf2d_draw db 'buf2d_draw',0
|
||||
sz_buf2d_delete db 'buf2d_delete',0
|
||||
sz_buf2d_resize db 'buf2d_resize',0
|
||||
sz_buf2d_line db 'buf2d_line',0
|
||||
sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
|
||||
sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
|
||||
sz_buf2d_circle db 'buf2d_circle',0
|
||||
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
|
||||
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
|
||||
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
|
||||
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
|
||||
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
|
||||
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
|
||||
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
|
||||
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
|
||||
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
|
||||
sz_buf2d_draw_text db 'buf2d_draw_text',0
|
||||
sz_buf2d_crop_color db 'buf2d_crop_color',0
|
||||
sz_buf2d_offset_h db 'buf2d_offset_h',0
|
||||
sz_buf2d_flood_fill db 'buf2d_flood_fill',0
|
||||
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
|
||||
|
||||
align 4
|
||||
import_libimg:
|
||||
dd alib_init1
|
||||
; img_is_img dd aimg_is_img
|
||||
; img_info dd aimg_info
|
||||
; img_from_file dd aimg_from_file
|
||||
; img_to_file dd aimg_to_file
|
||||
; img_from_rgb dd aimg_from_rgb
|
||||
; img_to_rgb dd aimg_to_rgb
|
||||
img_to_rgb2 dd aimg_to_rgb2
|
||||
img_decode dd aimg_decode
|
||||
; img_encode dd aimg_encode
|
||||
; img_create dd aimg_create
|
||||
img_destroy dd aimg_destroy
|
||||
; img_destroy_layer dd aimg_destroy_layer
|
||||
; img_count dd aimg_count
|
||||
; img_lock_bits dd aimg_lock_bits
|
||||
; img_unlock_bits dd aimg_unlock_bits
|
||||
; img_flip dd aimg_flip
|
||||
; img_flip_layer dd aimg_flip_layer
|
||||
; img_rotate dd aimg_rotate
|
||||
; img_rotate_layer dd aimg_rotate_layer
|
||||
; img_draw dd aimg_draw
|
||||
; img_convert dd aimg_convert
|
||||
|
||||
dd 0,0
|
||||
alib_init1 db 'lib_init',0
|
||||
; aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
|
||||
; aimg_info db 'img_info',0
|
||||
; aimg_from_file db 'img_from_file',0
|
||||
; aimg_to_file db 'img_to_file',0
|
||||
; aimg_from_rgb db 'img_from_rgb',0
|
||||
; aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB
|
||||
aimg_to_rgb2 db 'img_to_rgb2',0
|
||||
aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных
|
||||
; aimg_encode db 'img_encode',0
|
||||
; aimg_create db 'img_create',0
|
||||
aimg_destroy db 'img_destroy',0
|
||||
; aimg_destroy_layer db 'img_destroy_layer',0
|
||||
; aimg_count db 'img_count',0
|
||||
; aimg_lock_bits db 'img_lock_bits',0
|
||||
; aimg_unlock_bits db 'img_unlock_bits',0
|
||||
; aimg_flip db 'img_flip',0
|
||||
; aimg_flip_layer db 'img_flip_layer',0
|
||||
; aimg_rotate db 'img_rotate',0
|
||||
; aimg_rotate_layer db 'img_rotate_layer',0
|
||||
; aimg_draw db 'img_draw',0
|
||||
; aimg_convert db 'img_convert',0
|
||||
include '../import.inc' ;tinygl
|
||||
include '../../../buf2d/import.inc'
|
||||
include '../../../libs-dev/libimg/import.inc'
|
||||
|
||||
;--------------------------------------------------
|
||||
system_dir_0 db '/sys/lib/'
|
||||
|
||||
@@ -315,127 +315,9 @@ angle_y dd 0.0
|
||||
delt_size dd 3.0
|
||||
|
||||
;--------------------------------------------------
|
||||
align 4
|
||||
import_tinygl:
|
||||
|
||||
macro E_LIB n
|
||||
{
|
||||
if defined sz_#n
|
||||
n dd sz_#n
|
||||
end if
|
||||
}
|
||||
include '../export.inc'
|
||||
dd 0,0
|
||||
macro E_LIB n
|
||||
{
|
||||
if used n
|
||||
sz_#n db `n,0
|
||||
end if
|
||||
}
|
||||
include '../export.inc'
|
||||
|
||||
align 4
|
||||
import_buf2d:
|
||||
dd sz_init0
|
||||
buf2d_create dd sz_buf2d_create
|
||||
buf2d_create_f_img dd sz_buf2d_create_f_img
|
||||
buf2d_clear dd sz_buf2d_clear
|
||||
buf2d_draw dd sz_buf2d_draw
|
||||
buf2d_delete dd sz_buf2d_delete
|
||||
buf2d_resize dd sz_buf2d_resize
|
||||
buf2d_line dd sz_buf2d_line
|
||||
buf2d_rect_by_size dd sz_buf2d_rect_by_size
|
||||
buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
|
||||
buf2d_circle dd sz_buf2d_circle
|
||||
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
|
||||
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
|
||||
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
|
||||
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
|
||||
buf2d_bit_blt dd sz_buf2d_bit_blt
|
||||
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
|
||||
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
|
||||
buf2d_curve_bezier dd sz_buf2d_curve_bezier
|
||||
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
|
||||
buf2d_draw_text dd sz_buf2d_draw_text
|
||||
buf2d_crop_color dd sz_buf2d_crop_color
|
||||
buf2d_offset_h dd sz_buf2d_offset_h
|
||||
buf2d_flood_fill dd sz_buf2d_flood_fill
|
||||
buf2d_set_pixel dd sz_buf2d_set_pixel
|
||||
dd 0,0
|
||||
sz_init0 db 'lib_init',0
|
||||
sz_buf2d_create db 'buf2d_create',0
|
||||
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
|
||||
sz_buf2d_clear db 'buf2d_clear',0
|
||||
sz_buf2d_draw db 'buf2d_draw',0
|
||||
sz_buf2d_delete db 'buf2d_delete',0
|
||||
sz_buf2d_resize db 'buf2d_resize',0
|
||||
sz_buf2d_line db 'buf2d_line',0
|
||||
sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
|
||||
sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
|
||||
sz_buf2d_circle db 'buf2d_circle',0
|
||||
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
|
||||
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
|
||||
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
|
||||
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
|
||||
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
|
||||
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
|
||||
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
|
||||
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
|
||||
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
|
||||
sz_buf2d_draw_text db 'buf2d_draw_text',0
|
||||
sz_buf2d_crop_color db 'buf2d_crop_color',0
|
||||
sz_buf2d_offset_h db 'buf2d_offset_h',0
|
||||
sz_buf2d_flood_fill db 'buf2d_flood_fill',0
|
||||
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
|
||||
|
||||
align 4
|
||||
import_libimg:
|
||||
dd alib_init1
|
||||
; img_is_img dd aimg_is_img
|
||||
; img_info dd aimg_info
|
||||
; img_from_file dd aimg_from_file
|
||||
; img_to_file dd aimg_to_file
|
||||
; img_from_rgb dd aimg_from_rgb
|
||||
; img_to_rgb dd aimg_to_rgb
|
||||
img_to_rgb2 dd aimg_to_rgb2
|
||||
img_decode dd aimg_decode
|
||||
; img_encode dd aimg_encode
|
||||
; img_create dd aimg_create
|
||||
img_destroy dd aimg_destroy
|
||||
; img_destroy_layer dd aimg_destroy_layer
|
||||
; img_count dd aimg_count
|
||||
; img_lock_bits dd aimg_lock_bits
|
||||
; img_unlock_bits dd aimg_unlock_bits
|
||||
; img_flip dd aimg_flip
|
||||
; img_flip_layer dd aimg_flip_layer
|
||||
; img_rotate dd aimg_rotate
|
||||
; img_rotate_layer dd aimg_rotate_layer
|
||||
; img_draw dd aimg_draw
|
||||
; img_convert dd aimg_convert
|
||||
|
||||
dd 0,0
|
||||
alib_init1 db 'lib_init',0
|
||||
; aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
|
||||
; aimg_info db 'img_info',0
|
||||
; aimg_from_file db 'img_from_file',0
|
||||
; aimg_to_file db 'img_to_file',0
|
||||
; aimg_from_rgb db 'img_from_rgb',0
|
||||
; aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB
|
||||
aimg_to_rgb2 db 'img_to_rgb2',0
|
||||
aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных
|
||||
; aimg_encode db 'img_encode',0
|
||||
; aimg_create db 'img_create',0
|
||||
aimg_destroy db 'img_destroy',0
|
||||
; aimg_destroy_layer db 'img_destroy_layer',0
|
||||
; aimg_count db 'img_count',0
|
||||
; aimg_lock_bits db 'img_lock_bits',0
|
||||
; aimg_unlock_bits db 'img_unlock_bits',0
|
||||
; aimg_flip db 'img_flip',0
|
||||
; aimg_flip_layer db 'img_flip_layer',0
|
||||
; aimg_rotate db 'img_rotate',0
|
||||
; aimg_rotate_layer db 'img_rotate_layer',0
|
||||
; aimg_draw db 'img_draw',0
|
||||
; aimg_convert db 'img_convert',0
|
||||
include '../import.inc' ;tinygl
|
||||
include '../../../buf2d/import.inc'
|
||||
include '../../../libs-dev/libimg/import.inc'
|
||||
|
||||
;--------------------------------------------------
|
||||
system_dir_0 db '/sys/lib/'
|
||||
|
||||
18
programs/develop/libraries/TinyGL/asm_fork/import.inc
Normal file
18
programs/develop/libraries/TinyGL/asm_fork/import.inc
Normal file
@@ -0,0 +1,18 @@
|
||||
align 4
|
||||
import_tinygl:
|
||||
|
||||
macro E_LIB n
|
||||
{
|
||||
if defined sz_#n
|
||||
n dd sz_#n
|
||||
end if
|
||||
}
|
||||
include 'export.inc'
|
||||
dd 0,0
|
||||
macro E_LIB n
|
||||
{
|
||||
if used n
|
||||
sz_#n db `n,0
|
||||
end if
|
||||
}
|
||||
include 'export.inc'
|
||||
@@ -49,9 +49,9 @@ include '../../../../../load_lib.mac'
|
||||
;--- Start of program ----------------------------------------------
|
||||
;---------------------------------------------------------------------
|
||||
START:
|
||||
mcall 68,11
|
||||
mcall 66,1,1
|
||||
mcall 40,0x27
|
||||
mcall SF_SYS_MISC,SSF_HEAP_INIT
|
||||
mcall SF_KEYBOARD,SSF_SET_INPUT_MODE,1
|
||||
mcall SF_SET_EVENTS_MASK,0x27
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
load_libraries l_libs_start,end_l_libs
|
||||
@@ -84,7 +84,7 @@ load_libraries l_libs_start,end_l_libs
|
||||
|
||||
copy_path icons_file_name,path,library_path,0
|
||||
|
||||
mcall 70,fileinfo
|
||||
mcall SF_FILE,fileinfo
|
||||
|
||||
mov [fileinfo+0],dword 0
|
||||
|
||||
@@ -93,14 +93,14 @@ load_libraries l_libs_start,end_l_libs
|
||||
mov [img_size],ecx
|
||||
|
||||
|
||||
mcall 68,12
|
||||
mcall SF_SYS_MISC,SSF_MEM_ALLOC
|
||||
|
||||
|
||||
mov [fileinfo+16],eax
|
||||
mov [image_file],eax
|
||||
|
||||
|
||||
mcall 70,fileinfo
|
||||
mcall SF_FILE,fileinfo
|
||||
|
||||
xor eax,eax
|
||||
mov [return_code],eax
|
||||
@@ -108,8 +108,7 @@ load_libraries l_libs_start,end_l_libs
|
||||
push image_file
|
||||
call [cnv_png_import.Start]
|
||||
|
||||
mov ecx,[image_file]
|
||||
mcall 68,13,
|
||||
mcall SF_SYS_MISC,SSF_MEM_FREE,[image_file]
|
||||
|
||||
cmp [return_code],dword 0
|
||||
jne button.exit
|
||||
@@ -151,28 +150,28 @@ load_libraries l_libs_start,end_l_libs
|
||||
red:
|
||||
call draw_window
|
||||
still:
|
||||
mcall 10
|
||||
mcall SF_WAIT_EVENT
|
||||
|
||||
cmp eax,1
|
||||
cmp eax,EV_REDRAW
|
||||
je red
|
||||
cmp eax,2
|
||||
cmp eax,EV_KEY
|
||||
je key
|
||||
cmp eax,3
|
||||
cmp eax,EV_BUTTON
|
||||
je button
|
||||
cmp eax,6
|
||||
cmp eax,EV_MOUSE
|
||||
je mouse
|
||||
jmp still
|
||||
;---------------------------------------------------------------------
|
||||
key:
|
||||
mcall 2
|
||||
mcall SF_GET_KEY
|
||||
jmp still
|
||||
;---------------------------------------------------------------------
|
||||
button:
|
||||
mcall 17
|
||||
mcall SF_GET_BUTTON
|
||||
cmp ah,1
|
||||
jne still
|
||||
.exit:
|
||||
mcall -1
|
||||
mcall SF_TERMINATE_PROCESS
|
||||
;---------------------------------------------------------------------
|
||||
mouse:
|
||||
;-----------------------------------------------
|
||||
@@ -184,7 +183,7 @@ mouse:
|
||||
jbe .horizontal
|
||||
; mouse event for Vertical ScrollBar
|
||||
push dword scroll_bar_data_vertical
|
||||
call [scrollbar_ver_mouse]
|
||||
call [scrollbar_v_mouse]
|
||||
mov eax,scroll_bar_data_vertical.redraw
|
||||
xor ebx,ebx
|
||||
cmp [eax],ebx
|
||||
@@ -200,7 +199,7 @@ mouse:
|
||||
jbe .other
|
||||
; mouse event for Horizontal ScrollBar
|
||||
push dword scroll_bar_data_horizontal
|
||||
call [scrollbar_hor_mouse]
|
||||
call [scrollbar_h_mouse]
|
||||
mov eax,scroll_bar_data_horizontal.redraw
|
||||
xor ebx,ebx
|
||||
cmp [eax],ebx
|
||||
@@ -240,7 +239,7 @@ mouse:
|
||||
.mouse_dinamic_button:
|
||||
; mouse event for Dinamic Button 1
|
||||
push dword dinamic_button_data_1
|
||||
call [dinamic_button_mouse]
|
||||
call [dbutton_mouse]
|
||||
mov eax,dinamic_button_data_1.click
|
||||
cmp [eax],dword 1
|
||||
jne @f
|
||||
@@ -249,7 +248,7 @@ mouse:
|
||||
@@:
|
||||
; mouse event for Dinamic Button 2
|
||||
push dword dinamic_button_data_2
|
||||
call [dinamic_button_mouse]
|
||||
call [dbutton_mouse]
|
||||
mov eax,dinamic_button_data_2.click
|
||||
cmp [eax],dword 1
|
||||
jne still ;@f
|
||||
@@ -283,7 +282,7 @@ analyse_out_menu_2:
|
||||
jmp still
|
||||
;---------------------------------------------------------------------
|
||||
about:
|
||||
mcall 51,1,thread3,thread
|
||||
mcall SF_CREATE_THREAD,1,thread3,thread
|
||||
jmp still
|
||||
;---------------------------------------------------------------------
|
||||
OpenDialog_start_0:
|
||||
@@ -320,9 +319,9 @@ OpenDialog_start:
|
||||
;---------------------------------------------------------------------
|
||||
;---------------------------------------------------------------------
|
||||
draw_window:
|
||||
mcall 12,1
|
||||
mcall 0,<0,400>,<0,400>,0x03AABBCC,0x805080D0,0x005080D0
|
||||
mcall 71,1,header_1
|
||||
mcall SF_REDRAW,SSF_BEGIN_DRAW
|
||||
mcall SF_CREATE_WINDOW,<0,400>,<0,400>,0x03AABBCC,0x805080D0,0x005080D0
|
||||
mcall SF_SET_CAPTION,1,header_1
|
||||
;---------------------------------------------
|
||||
; draw for Menu 1
|
||||
push dword menu_data_1
|
||||
@@ -333,15 +332,15 @@ draw_window:
|
||||
;---------------------------------------------
|
||||
; draw for Dinamic Button 1
|
||||
push dword dinamic_button_data_1
|
||||
call [dinamic_button_draw]
|
||||
call [dbutton_draw]
|
||||
; draw for Dinamic Button 2
|
||||
push dword dinamic_button_data_2
|
||||
call [dinamic_button_draw]
|
||||
call [dbutton_draw]
|
||||
;---------------------------------------------
|
||||
mcall 13,<170,200>,<25,15>,0xffffb0
|
||||
mcall SF_DRAW_RECT,<170,200>,<25,15>,0xffffb0
|
||||
; mov bx,28
|
||||
; add ebx,2 shl 16
|
||||
; mcall 4,,0xC0000000,text_work_area,,0xffffb0
|
||||
; mcall SF_DRAW_TEXT,,0xC0000000,text_work_area,,0xffffb0
|
||||
; draw for PathShow
|
||||
push dword PathShow_data_1
|
||||
call [PathShow_draw]
|
||||
@@ -357,21 +356,21 @@ draw_window:
|
||||
|
||||
; draw for Vertical ScrollBar
|
||||
push dword scroll_bar_data_vertical
|
||||
call [scrollbar_ver_draw]
|
||||
call [scrollbar_v_draw]
|
||||
; draw for Horizontal ScrollBar
|
||||
push dword scroll_bar_data_horizontal
|
||||
call [scrollbar_hor_draw]
|
||||
call [scrollbar_h_draw]
|
||||
; reset all_redraw flag
|
||||
xor eax,eax
|
||||
mov [scroll_bar_data_vertical.all_redraw],eax
|
||||
mov [scroll_bar_data_horizontal.all_redraw],eax
|
||||
;---------------------------------------------
|
||||
call draw_cube
|
||||
mcall 12,2
|
||||
mcall SF_REDRAW,SSF_END_DRAW
|
||||
ret
|
||||
;---------------------------------------------------------------------
|
||||
draw_cube:
|
||||
mcall 13,<30,301>,<50,301>,0xafafaf
|
||||
mcall SF_DRAW_RECT,<30,301>,<50,301>,0xafafaf
|
||||
mov ecx,[scroll_bar_data_vertical.position]
|
||||
add ecx,50
|
||||
shl ecx,16
|
||||
@@ -380,7 +379,7 @@ draw_cube:
|
||||
add ebx,30
|
||||
shl ebx,16
|
||||
mov bx,30
|
||||
mcall 13,,,0x0
|
||||
mcall SF_DRAW_RECT,,,0x0
|
||||
ret
|
||||
;---------------------------------------------------------------------
|
||||
include 'data.inc'
|
||||
|
||||
@@ -30,7 +30,7 @@ system_dir_ProcLib db '/sys/lib/proc_lib.obj',0
|
||||
align 4
|
||||
l_libs_start:
|
||||
library01 l_libs system_dir_Boxlib+9, file_name, system_dir_Boxlib,\
|
||||
Box_lib_import, plugins_directory
|
||||
import_box_lib, plugins_directory
|
||||
|
||||
library02 l_libs system_dir_CnvPNG+9, file_name, system_dir_CnvPNG,\
|
||||
cnv_png_import, plugins_directory
|
||||
@@ -126,91 +126,7 @@ deflate_unpack dd 0
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
align 4
|
||||
Box_lib_import:
|
||||
;init_lib dd a_init
|
||||
;version_lib dd a_version
|
||||
|
||||
|
||||
;edit_box_draw dd aEdit_box_draw
|
||||
;edit_box_key dd aEdit_box_key
|
||||
;edit_box_mouse dd aEdit_box_mouse
|
||||
;version_ed dd aVersion_ed
|
||||
|
||||
;check_box_draw dd aCheck_box_draw
|
||||
;check_box_mouse dd aCheck_box_mouse
|
||||
;version_ch dd aVersion_ch
|
||||
|
||||
;option_box_draw dd aOption_box_draw
|
||||
;option_box_mouse dd aOption_box_mouse
|
||||
;version_op dd aVersion_op
|
||||
|
||||
scrollbar_ver_draw dd aScrollbar_ver_draw
|
||||
scrollbar_ver_mouse dd aScrollbar_ver_mouse
|
||||
scrollbar_hor_draw dd aScrollbar_hor_draw
|
||||
scrollbar_hor_mouse dd aScrollbar_hor_mouse
|
||||
;version_scrollbar dd aVersion_scrollbar
|
||||
|
||||
dinamic_button_draw dd aDbutton_draw
|
||||
dinamic_button_mouse dd aDbutton_mouse
|
||||
;version_dbutton dd aVersion_dbutton
|
||||
|
||||
menu_bar_draw dd aMenu_bar_draw
|
||||
menu_bar_mouse dd aMenu_bar_mouse
|
||||
menu_bar_activate dd aMenu_bar_activate
|
||||
;version_menu_bar dd aVersion_menu_bar
|
||||
|
||||
;FileBrowser_draw dd aFileBrowser_draw
|
||||
;FileBrowser_mouse dd aFileBrowser_mouse
|
||||
;FileBrowser_key dd aFileBrowser_key
|
||||
;Version_FileBrowser dd aVersion_FileBrowser
|
||||
|
||||
PathShow_prepare dd sz_PathShow_prepare
|
||||
PathShow_draw dd sz_PathShow_draw
|
||||
;Version_path_show dd szVersion_path_show
|
||||
dd 0,0
|
||||
|
||||
;a_init db 'lib_init',0
|
||||
;a_version db 'version',0
|
||||
|
||||
;aEdit_box_draw db 'edit_box_draw',0
|
||||
;aEdit_box_key db 'edit_box_key',0
|
||||
;aEdit_box_mouse db 'edit_box_mouse',0
|
||||
;aVersion_ed db 'version_ed',0
|
||||
|
||||
;aCheck_box_draw db 'check_box_draw',0
|
||||
;aCheck_box_mouse db 'check_box_mouse',0
|
||||
;aVersion_ch db 'version_ch',0
|
||||
|
||||
;aOption_box_draw db 'option_box_draw',0
|
||||
;aOption_box_mouse db 'option_box_mouse',0
|
||||
;aVersion_op db 'version_op',0
|
||||
|
||||
aScrollbar_ver_draw db 'scrollbar_v_draw',0
|
||||
aScrollbar_ver_mouse db 'scrollbar_v_mouse',0
|
||||
aScrollbar_hor_draw db 'scrollbar_h_draw',0
|
||||
aScrollbar_hor_mouse db 'scrollbar_h_mouse',0
|
||||
;aVersion_scrollbar db 'version_scrollbar',0
|
||||
|
||||
aDbutton_draw db 'dbutton_draw',0
|
||||
aDbutton_mouse db 'dbutton_mouse',0
|
||||
;aVersion_dbutton db 'version_dbutton',0
|
||||
|
||||
aMenu_bar_draw db 'menu_bar_draw',0
|
||||
aMenu_bar_mouse db 'menu_bar_mouse',0
|
||||
aMenu_bar_activate db 'menu_bar_activate',0
|
||||
;aVersion_menu_bar db 'version_menu_bar',0
|
||||
|
||||
;aFileBrowser_draw db 'FileBrowser_draw',0
|
||||
;aFileBrowser_mouse db 'FileBrowser_mouse',0
|
||||
;aFileBrowser_key db 'FileBrowser_key',0
|
||||
;aVersion_FileBrowser db 'version_FileBrowser',0
|
||||
|
||||
sz_PathShow_prepare db 'PathShow_prepare',0
|
||||
sz_PathShow_draw db 'PathShow_draw',0
|
||||
;szVersion_path_show db 'version_PathShow',0
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
include '../../import.inc' ;import_box_lib
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
align 4
|
||||
|
||||
@@ -18,7 +18,7 @@ include '../../../../../load_lib.mac'
|
||||
@use_library ;use load lib macros
|
||||
start:
|
||||
;universal load library/librarys
|
||||
sys_load_library library_name, library_path, system_path, myimport
|
||||
sys_load_library library_name, library_path, system_path, import_box_lib
|
||||
;if return code =-1 then exit, else nornary work
|
||||
cmp eax,-1
|
||||
jz exit
|
||||
@@ -116,37 +116,7 @@ library_name db 'box_lib.obj',0
|
||||
;library_name db 'box_lib.obj',0
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
myimport:
|
||||
|
||||
edit_box_draw dd aEdit_box_draw
|
||||
edit_box_key dd aEdit_box_key
|
||||
edit_box_mouse dd aEdit_box_mouse
|
||||
version_ed dd aVersion_ed
|
||||
|
||||
init_checkbox dd aInit_checkbox
|
||||
check_box_draw dd aCheck_box_draw
|
||||
check_box_mouse dd aCheck_box_mouse
|
||||
version_ch dd aVersion_ch
|
||||
|
||||
option_box_draw dd aOption_box_draw
|
||||
option_box_mouse dd aOption_box_mouse
|
||||
version_op dd aVersion_op
|
||||
|
||||
dd 0,0
|
||||
|
||||
aEdit_box_draw db 'edit_box_draw',0
|
||||
aEdit_box_key db 'edit_box_key',0
|
||||
aEdit_box_mouse db 'edit_box_mouse',0
|
||||
aVersion_ed db 'version_ed',0
|
||||
|
||||
aInit_checkbox db 'init_checkbox2',0
|
||||
aCheck_box_draw db 'check_box_draw2',0
|
||||
aCheck_box_mouse db 'check_box_mouse2',0
|
||||
aVersion_ch db 'version_ch2',0
|
||||
|
||||
aOption_box_draw db 'option_box_draw',0
|
||||
aOption_box_mouse db 'option_box_mouse',0
|
||||
aVersion_op db 'version_op',0
|
||||
include '../../import.inc' ;creating a function import table
|
||||
|
||||
|
||||
check1 check_box2 (10 shl 16 + 12),(45 shl 16 + 12),5,0x80AABBCC,0,0,check_text1,ch_flag_en
|
||||
|
||||
@@ -34,14 +34,14 @@ START:
|
||||
;---------------------------------------------------------------------
|
||||
;--- ˆ<>ˆ–ˆ€‹ˆ‡€–ˆŸ ----------------------------------------
|
||||
;---------------------------------------------------------------------
|
||||
mcall 68, 11
|
||||
mcall SF_SYS_MISC, SSF_HEAP_INIT
|
||||
|
||||
mcall 40, $C0000027 ; ¬ ᪠ᮡë⨩ - ¬ëèì ⮫쪮 ¢ ªâ¨¢®¬ ®ª¥
|
||||
mcall SF_SET_EVENTS_MASK, $C0000027 ; ¬ ᪠ᮡë⨩ - ¬ëèì ⮫쪮 ¢ ªâ¨¢®¬ ®ª¥
|
||||
|
||||
sys_load_library lib_name, lib_path, sys_path, myimport
|
||||
sys_load_library lib_name, lib_path, sys_path, import_box_lib
|
||||
test eax,eax
|
||||
jz @f
|
||||
mcall -1 ; alarm exit
|
||||
mcall SF_TERMINATE_PROCESS
|
||||
@@:
|
||||
|
||||
|
||||
@@ -56,16 +56,16 @@ call draw_window ;
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
still:
|
||||
mcall 23, 5 ; äãªæ¨ï 23 - ¦¤ âì ᮡëâ¨ï <EFBFBD>¥ ¡®«¥¥ 祬 0.05á
|
||||
mcall SF_WAIT_EVENT_TIMEOUT, 5 ; ¦¤ âì ᮡëâ¨ï ¥ ¡®«¥¥ 祬 0.05á
|
||||
test eax, eax ; ¥â ᮡë⨩ - ¯à®¢¥à¨âì à¨á®¢ ¨¥ âã«â¨¯®¢ ¯® â ©¬¥àã
|
||||
je yield
|
||||
cmp eax,1 ; ¯¥à¥à¨á®¢ âì ®ª® ?
|
||||
cmp eax,EV_REDRAW
|
||||
je red ; ¥á«¨ ¤ - ¬¥âªã red
|
||||
cmp eax,2 ; ¦ â ª« ¢¨è ?
|
||||
cmp eax,EV_KEY
|
||||
je key ; ¥á«¨ ¤ - key
|
||||
cmp eax,3 ; ¦ â ª®¯ª ?
|
||||
cmp eax,EV_BUTTON
|
||||
je button ; ¥á«¨ ¤ - button
|
||||
cmp eax,6 ; ᮡë⨥ ¬ëè¨
|
||||
cmp eax,EV_MOUSE
|
||||
je mouse ; ¥á«¨ ¤ - mouse
|
||||
|
||||
jmp still ; ¥á«¨ ¤à㣮¥ ᮡë⨥ - ¢ ç «® 横«
|
||||
@@ -81,21 +81,21 @@ invoke tooltip_mouse, redbox_tt
|
||||
jmp still ; ¢¥àãâìáï ª ç «ã æ¨ª«
|
||||
|
||||
key: ; ¦ â ª« ¢¨è ª« ¢¨ âãà¥
|
||||
mcall 2 ; äãªæ¨ï 2 - áç¨â âì ª®¤ ᨬ¢®« (¢ ah)
|
||||
mcall SF_GET_KEY ; áç¨â âì ª®¤ ᨬ¢®« (¢ ah)
|
||||
|
||||
jmp still ; ¢¥àãâìáï ª ç «ã æ¨ª«
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
button:
|
||||
mcall 17 ; 17 - ¯®«ãç¨âì ¨¤¥â¨ä¨ª â®à ¦ ⮩ ª®¯ª¨
|
||||
mcall SF_GET_BUTTON ; ¯®«ãç¨âì ¨¤¥â¨ä¨ª â®à ¦ ⮩ ª®¯ª¨
|
||||
|
||||
cmp ah, 1 ; ¥á«¨ <20>… ¦ â ª®¯ª á ®¬¥à®¬ 1,
|
||||
jne still ; ¢¥àãâìáï
|
||||
|
||||
pexit:
|
||||
invoke tooltip_delete, redbox_tt ; ®á¢®¡®¦¤ ¥¬ ¯ ¬ïâì
|
||||
mcall -1 ; ¨ ç¥ ª®¥æ ¯à®£à ¬¬ë
|
||||
mcall SF_TERMINATE_PROCESS
|
||||
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
@@ -104,20 +104,20 @@ mcall -1 ;
|
||||
|
||||
draw_window:
|
||||
|
||||
mcall 12, 1 ; äãªæ¨ï 12: á®®¡é¨âì Ž‘ ® ç «¥ ®âà¨á®¢ª¨
|
||||
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
||||
|
||||
mcall 48, 3, sc,sizeof.system_colors
|
||||
mcall SF_STYLE_SETTINGS, SSF_GET_COLORS, sc, sizeof.system_colors
|
||||
|
||||
mov edx, [sc.work] ; 梥â ä®
|
||||
or edx, 0x33000000 ; ¨ ⨯ ®ª 3
|
||||
mcall 0, <200,300>, <200,150>, , ,title
|
||||
mcall SF_CREATE_WINDOW, <200,300>, <200,150>, , ,title
|
||||
|
||||
; ¢ë¢®¤ ª¢ ¤à ⨪®¢
|
||||
mcall 13, <60,50>, <50,50>, $FF0000
|
||||
mcall 13, <140,50>, <50,50>, $FF
|
||||
mcall SF_DRAW_RECT, <60,50>, <50,50>, $FF0000
|
||||
mcall SF_DRAW_RECT, <140,50>, <50,50>, $FF
|
||||
|
||||
|
||||
mcall 12, 2 ; äãªæ¨ï 12.2, § ª®ç¨«¨ à¨á®¢ âì
|
||||
mcall SF_REDRAW, SSF_END_DRAW
|
||||
|
||||
ret ; ¢ë室¨¬ ¨§ ¯à®æ¥¤ãàë
|
||||
|
||||
@@ -135,22 +135,7 @@ lib_name db 'box_lib.obj',0
|
||||
cur_dir_path rb 4096
|
||||
lib_path rb 4096
|
||||
|
||||
myimport:
|
||||
dd sz_lib_init ;äãªæ¨ï § ¯ã᪠¥âáï ¬ ªà®á®¬ 1 à § ¯à¨ ¯®¤ª«î票¨
|
||||
;¡¨¡«¨®â¥ª¨, ¯®â®¬ã ¢ ¯à®£à ¬¬¥ ¬¥âª ¥¥ ¥ ã¦
|
||||
tooltip_init dd sz_tooltip_init
|
||||
tooltip_delete dd sz_tooltip_delete
|
||||
tooltip_test_show dd sz_tooltip_test_show
|
||||
tooltip_mouse dd sz_tooltip_mouse
|
||||
get_font_size dd sz_get_font_size
|
||||
dd 0,0
|
||||
|
||||
sz_lib_init db 'lib_init',0
|
||||
sz_tooltip_init db 'tooltip_init', 0
|
||||
sz_tooltip_delete db 'tooltip_delete', 0
|
||||
sz_tooltip_test_show db 'tooltip_test_show', 0
|
||||
sz_tooltip_mouse db 'tooltip_mouse', 0
|
||||
sz_get_font_size db 'get_font_size', 0
|
||||
include '../../import.inc' ;import_box_lib
|
||||
|
||||
|
||||
;tooltip txt, next, zone_x, zone_w, zone_y, zone_h, col_txt, col_bkg, tm_wait
|
||||
|
||||
117
programs/develop/libraries/box_lib/export.inc
Normal file
117
programs/develop/libraries/box_lib/export.inc
Normal file
@@ -0,0 +1,117 @@
|
||||
;
|
||||
; Export functions
|
||||
;
|
||||
|
||||
E_LIB lib_init
|
||||
E_LIB version
|
||||
|
||||
E_LIB edit_box_draw
|
||||
E_LIB edit_box_key
|
||||
E_LIB edit_box_key_safe
|
||||
E_LIB edit_box_mouse
|
||||
E_LIB edit_box_set_text
|
||||
E_LIB version_ed
|
||||
|
||||
E_LIB init_checkbox, init_checkbox2
|
||||
E_LIB check_box_draw, check_box_draw2
|
||||
E_LIB check_box_mouse, check_box_mouse2
|
||||
E_LIB version_ch, version_ch2
|
||||
|
||||
E_LIB option_box_draw
|
||||
E_LIB option_box_mouse
|
||||
E_LIB version_op
|
||||
|
||||
E_LIB scrollbar_v_draw
|
||||
E_LIB scrollbar_v_mouse
|
||||
E_LIB scrollbar_h_draw
|
||||
E_LIB scrollbar_h_mouse
|
||||
E_LIB version_scrollbar
|
||||
|
||||
E_LIB dbutton_draw
|
||||
E_LIB dbutton_mouse
|
||||
E_LIB version_dbutton
|
||||
|
||||
E_LIB menu_bar_draw
|
||||
E_LIB menu_bar_mouse
|
||||
E_LIB menu_bar_activate
|
||||
E_LIB version_menu_bar
|
||||
|
||||
E_LIB FileBrowser_draw
|
||||
E_LIB FileBrowser_mouse
|
||||
E_LIB FileBrowser_key
|
||||
E_LIB version_FileBrowser
|
||||
|
||||
E_LIB tl_data_init
|
||||
E_LIB tl_data_clear
|
||||
E_LIB tl_info_clear
|
||||
E_LIB tl_key
|
||||
E_LIB tl_mouse
|
||||
E_LIB tl_draw
|
||||
E_LIB tl_info_undo
|
||||
E_LIB tl_info_redo
|
||||
E_LIB tl_node_add
|
||||
E_LIB tl_node_set_data
|
||||
E_LIB tl_node_get_data
|
||||
E_LIB tl_node_delete
|
||||
E_LIB tl_cur_beg
|
||||
E_LIB tl_cur_next
|
||||
E_LIB tl_cur_perv
|
||||
E_LIB tl_node_close_open
|
||||
E_LIB tl_node_lev_inc
|
||||
E_LIB tl_node_lev_dec
|
||||
E_LIB tl_node_move_up
|
||||
E_LIB tl_node_move_down
|
||||
E_LIB tl_node_poi_get_info
|
||||
E_LIB tl_node_poi_get_next_info
|
||||
E_LIB tl_node_poi_get_data
|
||||
E_LIB tl_save_mem
|
||||
E_LIB tl_load_mem
|
||||
E_LIB tl_get_mem_size
|
||||
E_LIB version_tree_list
|
||||
|
||||
E_LIB PathShow_prepare
|
||||
E_LIB PathShow_draw
|
||||
E_LIB version_PathShow
|
||||
|
||||
E_LIB ted_but_sumb_upper
|
||||
E_LIB ted_but_sumb_lover
|
||||
E_LIB ted_but_convert_by_table
|
||||
E_LIB ted_can_save
|
||||
E_LIB ted_clear
|
||||
E_LIB ted_delete
|
||||
E_LIB ted_draw
|
||||
E_LIB ted_init
|
||||
E_LIB ted_init_scroll_bars
|
||||
E_LIB ted_init_syntax_file
|
||||
E_LIB ted_is_select
|
||||
E_LIB ted_key
|
||||
E_LIB ted_mouse
|
||||
E_LIB ted_open_file
|
||||
E_LIB ted_save_file
|
||||
E_LIB ted_text_add
|
||||
E_LIB ted_but_select_word
|
||||
E_LIB ted_but_cut
|
||||
E_LIB ted_but_copy
|
||||
E_LIB ted_but_paste
|
||||
E_LIB ted_but_undo
|
||||
E_LIB ted_but_redo
|
||||
E_LIB ted_but_reverse
|
||||
E_LIB ted_but_find
|
||||
E_LIB ted_but_replace
|
||||
E_LIB ted_text_colored
|
||||
E_LIB ted_go_to_position
|
||||
E_LIB version_text_edit
|
||||
|
||||
E_LIB frame_draw
|
||||
E_LIB version_frame
|
||||
|
||||
E_LIB progressbar_draw
|
||||
E_LIB progressbar_progress
|
||||
|
||||
E_LIB tooltip_init
|
||||
E_LIB tooltip_delete
|
||||
E_LIB tooltip_test_show
|
||||
E_LIB tooltip_mouse
|
||||
E_LIB get_font_size
|
||||
|
||||
purge E_LIB
|
||||
24
programs/develop/libraries/box_lib/import.inc
Normal file
24
programs/develop/libraries/box_lib/import.inc
Normal file
@@ -0,0 +1,24 @@
|
||||
align 4
|
||||
import_box_lib:
|
||||
|
||||
macro E_LIB n, lfn
|
||||
{
|
||||
if n eq lib_init
|
||||
dd strz_#n
|
||||
else if defined sz_#n
|
||||
n dd sz_#n
|
||||
end if
|
||||
}
|
||||
include 'export.inc'
|
||||
dd 0,0
|
||||
macro E_LIB n, lfn
|
||||
{
|
||||
if used n
|
||||
if lfn eq
|
||||
sz_#n db `n,0
|
||||
else
|
||||
sz_#n db `lfn,0
|
||||
end if
|
||||
end if
|
||||
}
|
||||
include 'export.inc'
|
||||
48
programs/develop/libraries/buf2d/export.inc
Normal file
48
programs/develop/libraries/buf2d/export.inc
Normal file
@@ -0,0 +1,48 @@
|
||||
;
|
||||
; Export functions
|
||||
;
|
||||
|
||||
E_LIB lib_init
|
||||
E_LIB buf2d_create
|
||||
E_LIB buf2d_create_f_img
|
||||
E_LIB buf2d_clear
|
||||
E_LIB buf2d_draw
|
||||
E_LIB buf2d_delete
|
||||
E_LIB buf2d_resize
|
||||
E_LIB buf2d_rotate
|
||||
E_LIB buf2d_line
|
||||
E_LIB buf2d_line_sm
|
||||
E_LIB buf2d_rect_by_size
|
||||
E_LIB buf2d_filled_rect_by_size
|
||||
E_LIB buf2d_circle
|
||||
E_LIB buf2d_img_hdiv2
|
||||
E_LIB buf2d_img_wdiv2
|
||||
E_LIB buf2d_conv_24_to_8
|
||||
E_LIB buf2d_conv_24_to_32
|
||||
E_LIB buf2d_bit_blt
|
||||
E_LIB buf2d_bit_blt_transp
|
||||
E_LIB buf2d_bit_blt_alpha
|
||||
E_LIB buf2d_curve_bezier
|
||||
E_LIB buf2d_convert_text_matrix
|
||||
E_LIB buf2d_draw_text
|
||||
E_LIB buf2d_crop_color
|
||||
E_LIB buf2d_offset_h
|
||||
E_LIB buf2d_flood_fill
|
||||
E_LIB buf2d_set_pixel
|
||||
E_LIB buf2d_get_pixel
|
||||
E_LIB buf2d_flip_h
|
||||
E_LIB buf2d_flip_v
|
||||
E_LIB buf2d_filter_dither
|
||||
|
||||
E_LIB buf2d_vox_brush_create
|
||||
E_LIB buf2d_vox_brush_delete
|
||||
E_LIB buf2d_vox_obj_get_img_w_3g
|
||||
E_LIB buf2d_vox_obj_get_img_h_3g
|
||||
E_LIB buf2d_vox_obj_draw_1g
|
||||
E_LIB buf2d_vox_obj_draw_3g
|
||||
E_LIB buf2d_vox_obj_draw_3g_scaled
|
||||
E_LIB buf2d_vox_obj_draw_pl
|
||||
E_LIB buf2d_vox_obj_draw_pl_scaled
|
||||
E_LIB buf2d_vox_obj_draw_3g_shadows
|
||||
|
||||
purge E_LIB
|
||||
20
programs/develop/libraries/buf2d/import.inc
Normal file
20
programs/develop/libraries/buf2d/import.inc
Normal file
@@ -0,0 +1,20 @@
|
||||
align 4
|
||||
import_buf2d:
|
||||
|
||||
macro E_LIB n
|
||||
{
|
||||
if n eq lib_init
|
||||
dd strz_#n
|
||||
else if defined sz_#n
|
||||
n dd sz_#n
|
||||
end if
|
||||
}
|
||||
include 'export.inc'
|
||||
dd 0,0
|
||||
macro E_LIB n
|
||||
{
|
||||
if used n
|
||||
sz_#n db `n,0
|
||||
end if
|
||||
}
|
||||
include 'export.inc'
|
||||
@@ -11,7 +11,7 @@ include '../../../../develop/libraries/box_lib/trunk/box_lib.mac'
|
||||
include '../../../../dll.inc'
|
||||
|
||||
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
||||
caption db '˜¨ä஢ ¨¥ «£®à¨â¬®¬ DES 05.03.13',0 ;¯®¤¯¨áì ®ª
|
||||
caption db '˜¨ä஢ ¨¥ «£®à¨â¬®¬ DES 21.05.25',0 ;¯®¤¯¨áì ®ª
|
||||
|
||||
struct FileInfoBlock
|
||||
Function dd ?
|
||||
@@ -112,13 +112,13 @@ align 4
|
||||
still:
|
||||
mcall SF_WAIT_EVENT
|
||||
|
||||
cmp al,1
|
||||
cmp al,EV_REDRAW
|
||||
jz red_win
|
||||
cmp al,2
|
||||
cmp al,EV_KEY
|
||||
jz key
|
||||
cmp al,3
|
||||
cmp al,EV_BUTTON
|
||||
jz button
|
||||
cmp al,6 ;¬ëèì
|
||||
cmp al,EV_MOUSE
|
||||
jne @f
|
||||
jmp mouse
|
||||
@@:
|
||||
@@ -410,52 +410,7 @@ l_libs_start:
|
||||
lib_4 l_libs lib_name_4, library_path, system_dir_4, import_box_lib
|
||||
l_libs_end:
|
||||
|
||||
align 4
|
||||
import_libimg:
|
||||
dd alib_init1
|
||||
img_is_img dd aimg_is_img
|
||||
img_info dd aimg_info
|
||||
img_from_file dd aimg_from_file
|
||||
img_to_file dd aimg_to_file
|
||||
img_from_rgb dd aimg_from_rgb
|
||||
img_to_rgb dd aimg_to_rgb
|
||||
img_to_rgb2 dd aimg_to_rgb2
|
||||
img_decode dd aimg_decode
|
||||
img_encode dd aimg_encode
|
||||
img_create dd aimg_create
|
||||
img_destroy dd aimg_destroy
|
||||
img_destroy_layer dd aimg_destroy_layer
|
||||
img_count dd aimg_count
|
||||
img_lock_bits dd aimg_lock_bits
|
||||
img_unlock_bits dd aimg_unlock_bits
|
||||
img_flip dd aimg_flip
|
||||
img_flip_layer dd aimg_flip_layer
|
||||
img_rotate dd aimg_rotate
|
||||
img_rotate_layer dd aimg_rotate_layer
|
||||
img_draw dd aimg_draw
|
||||
|
||||
dd 0,0
|
||||
alib_init1 db 'lib_init',0
|
||||
aimg_is_img db 'img_is_img',0 ;®¯à¥¤¥«ï¥â ¯® ¤ ë¬, ¬®¦¥â «¨ ¡¨¡«¨®â¥ª ᤥ« âì ¨§ ¨å ¨§®¡à ¦¥¨¥
|
||||
aimg_info db 'img_info',0
|
||||
aimg_from_file db 'img_from_file',0
|
||||
aimg_to_file db 'img_to_file',0
|
||||
aimg_from_rgb db 'img_from_rgb',0
|
||||
aimg_to_rgb db 'img_to_rgb',0 ;¯à¥®¡à §®¢ ¨¥ ¨§®¡à ¦¥¨ï ¢ ¤ ë¥ RGB
|
||||
aimg_to_rgb2 db 'img_to_rgb2',0
|
||||
aimg_decode db 'img_decode',0 ; ¢â®¬ â¨ç¥áª¨ ®¯à¥¤¥«ï¥â ä®à¬ â £à ä¨ç¥áª¨å ¤ ëå
|
||||
aimg_encode db 'img_encode',0
|
||||
aimg_create db 'img_create',0
|
||||
aimg_destroy db 'img_destroy',0
|
||||
aimg_destroy_layer db 'img_destroy_layer',0
|
||||
aimg_count db 'img_count',0
|
||||
aimg_lock_bits db 'img_lock_bits',0
|
||||
aimg_unlock_bits db 'img_unlock_bits',0
|
||||
aimg_flip db 'img_flip',0
|
||||
aimg_flip_layer db 'img_flip_layer',0
|
||||
aimg_rotate db 'img_rotate',0
|
||||
aimg_rotate_layer db 'img_rotate_layer',0
|
||||
aimg_draw db 'img_draw',0
|
||||
include '../../libs-dev/libimg/import.inc'
|
||||
|
||||
align 4
|
||||
import_proclib: ;®¯¨á ¨¥ íªá¯®àâ¨à㥬ëå äãªæ¨©
|
||||
@@ -465,57 +420,7 @@ dd 0,0
|
||||
aOpenDialog_Init db 'OpenDialog_init',0
|
||||
aOpenDialog_Start db 'OpenDialog_start',0
|
||||
|
||||
align 4
|
||||
import_buf2d:
|
||||
init dd sz_init
|
||||
buf2d_create dd sz_buf2d_create
|
||||
buf2d_create_f_img dd sz_buf2d_create_f_img
|
||||
buf2d_clear dd sz_buf2d_clear
|
||||
buf2d_draw dd sz_buf2d_draw
|
||||
buf2d_delete dd sz_buf2d_delete
|
||||
;buf2d_line dd sz_buf2d_line
|
||||
;buf2d_rect_by_size dd sz_buf2d_rect_by_size
|
||||
;buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
|
||||
;buf2d_circle dd sz_buf2d_circle
|
||||
;buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
|
||||
;buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
|
||||
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
|
||||
;buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
|
||||
;buf2d_bit_blt dd sz_buf2d_bit_blt
|
||||
;buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
|
||||
;buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
|
||||
;buf2d_curve_bezier dd sz_buf2d_curve_bezier
|
||||
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
|
||||
buf2d_draw_text dd sz_buf2d_draw_text
|
||||
;buf2d_crop_color dd sz_buf2d_crop_color
|
||||
;buf2d_offset_h dd sz_buf2d_offset_h
|
||||
;buf2d_flood_fill dd sz_buf2d_flood_fill
|
||||
;buf2d_set_pixel dd sz_buf2d_set_pixel
|
||||
dd 0,0
|
||||
sz_init db 'lib_init',0
|
||||
sz_buf2d_create db 'buf2d_create',0
|
||||
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
|
||||
sz_buf2d_clear db 'buf2d_clear',0
|
||||
sz_buf2d_draw db 'buf2d_draw',0
|
||||
sz_buf2d_delete db 'buf2d_delete',0
|
||||
;sz_buf2d_line db 'buf2d_line',0
|
||||
;sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
|
||||
;sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
|
||||
;sz_buf2d_circle db 'buf2d_circle',0
|
||||
;sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
|
||||
;sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
|
||||
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
|
||||
;sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
|
||||
;sz_buf2d_bit_blt db 'buf2d_bit_blt',0
|
||||
;sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
|
||||
;sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
|
||||
;sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
|
||||
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
|
||||
sz_buf2d_draw_text db 'buf2d_draw_text',0
|
||||
;sz_buf2d_crop_color db 'buf2d_crop_color',0
|
||||
;sz_buf2d_offset_h db 'buf2d_offset_h',0
|
||||
;sz_buf2d_flood_fill db 'buf2d_flood_fill',0
|
||||
;sz_buf2d_set_pixel db 'buf2d_set_pixel',0
|
||||
include '../../buf2d/import.inc'
|
||||
|
||||
align 4
|
||||
import_des: ;®¯¨á ¨¥ íªá¯®àâ¨à㥬ëå äãªæ¨©
|
||||
@@ -525,22 +430,7 @@ dd 0,0
|
||||
sz_des_encryption db 'des_encryption',0
|
||||
sz_des_decryption db 'des_decryption',0
|
||||
|
||||
align 4
|
||||
import_box_lib:
|
||||
;dd sz_init1
|
||||
edit_box_draw dd sz_edit_box_draw
|
||||
edit_box_key dd sz_edit_box_key
|
||||
edit_box_mouse dd sz_edit_box_mouse
|
||||
;edit_box_set_text dd sz_edit_box_set_text
|
||||
|
||||
dd 0,0
|
||||
;sz_init1 db 'lib_init',0
|
||||
sz_edit_box_draw db 'edit_box_draw',0
|
||||
sz_edit_box_key db 'edit_box_key',0
|
||||
sz_edit_box_mouse db 'edit_box_mouse',0
|
||||
;sz_edit_box_set_text db 'edit_box_set_text',0
|
||||
|
||||
mouse_dd dd 0x0
|
||||
include '../../box_lib/import.inc'
|
||||
|
||||
align 4
|
||||
buf_0: dd 0 ;㪠§ â¥«ì ¡ãä¥à ¨§®¡à ¦¥¨ï
|
||||
@@ -564,12 +454,13 @@ buf_1:
|
||||
edit1 edit_box 58, 140,8, 0xffffff, 0xff, 0x80ff, 0, 0x8000, 8, txt_key, mouse_dd, ed_focus+ed_always_focus,8,8
|
||||
|
||||
txt_openfile db 'Žâªà®©â¥ ä ©« ¤«ï è¨ä஢ ¨ï ¨«¨ ¤¥è¨ä஢ ¨ï.',0
|
||||
txt_buf rb 80
|
||||
txt_key db 'des_0123',0
|
||||
mem_key rb 120
|
||||
|
||||
align 16
|
||||
i_end:
|
||||
txt_buf rb 80
|
||||
mem_key rb 120
|
||||
mouse_dd rd 1
|
||||
procinfo process_information
|
||||
sc system_colors
|
||||
rb 2048
|
||||
|
||||
@@ -100,6 +100,10 @@ lib_init: ;//////////////////////////////////////////////////////////////////;;
|
||||
mov [mem.alloc], eax
|
||||
mov [mem.free], ebx
|
||||
mov [mem.realloc], ecx
|
||||
|
||||
cmp [dll.load], edx
|
||||
je .ok
|
||||
|
||||
mov [dll.load], edx
|
||||
|
||||
invoke dll.load, @IMPORT
|
||||
@@ -115,6 +119,7 @@ lib_init: ;//////////////////////////////////////////////////////////////////;;
|
||||
invoke ini.get_str, inifile, sec_proxy, key_password, proxyPassword, 256, proxyPassword
|
||||
popa
|
||||
|
||||
.ok:
|
||||
DEBUGF 1, "HTTP library: init OK\n"
|
||||
xor eax, eax
|
||||
ret
|
||||
|
||||
34
programs/develop/libraries/libs-dev/libimg/export.inc
Normal file
34
programs/develop/libraries/libs-dev/libimg/export.inc
Normal file
@@ -0,0 +1,34 @@
|
||||
;
|
||||
; Export functions
|
||||
;
|
||||
|
||||
E_LIB lib_init
|
||||
E_LIB version
|
||||
E_LIB img_is_img
|
||||
E_LIB img_info
|
||||
E_LIB img_from_file
|
||||
E_LIB img_to_file
|
||||
E_LIB img_from_rgb
|
||||
E_LIB img_to_rgb
|
||||
E_LIB img_to_rgb2
|
||||
E_LIB img_decode
|
||||
E_LIB img_encode ;supported formats: PNG 24 32, BMP 24 32, PNM 1 8g 24
|
||||
E_LIB img_create
|
||||
E_LIB img_destroy
|
||||
E_LIB img_destroy_layer
|
||||
E_LIB img_count
|
||||
E_LIB img_lock_bits
|
||||
E_LIB img_unlock_bits
|
||||
E_LIB img_flip
|
||||
E_LIB img_flip_layer
|
||||
E_LIB img_rotate
|
||||
E_LIB img_rotate_layer
|
||||
E_LIB img_draw
|
||||
E_LIB img_scale
|
||||
E_LIB img_get_scaled_size
|
||||
E_LIB img_convert
|
||||
E_LIB img_blend
|
||||
E_LIB img_resize_data
|
||||
E_LIB img_formats_table
|
||||
|
||||
purge E_LIB
|
||||
20
programs/develop/libraries/libs-dev/libimg/import.inc
Normal file
20
programs/develop/libraries/libs-dev/libimg/import.inc
Normal file
@@ -0,0 +1,20 @@
|
||||
align 4
|
||||
import_libimg:
|
||||
|
||||
macro E_LIB n
|
||||
{
|
||||
if n eq lib_init
|
||||
dd strz_#n
|
||||
else if defined sz_#n
|
||||
n dd sz_#n
|
||||
end if
|
||||
}
|
||||
include 'export.inc'
|
||||
dd 0,0
|
||||
macro E_LIB n
|
||||
{
|
||||
if used n
|
||||
sz_#n db `n,0
|
||||
end if
|
||||
}
|
||||
include 'export.inc'
|
||||
@@ -78,6 +78,10 @@ proc lib_init ;///////////////////////////////////////////////////////////////;;
|
||||
mov [mem.alloc], eax
|
||||
mov [mem.free], ebx
|
||||
mov [mem.realloc], ecx
|
||||
|
||||
cmp [dll.load], edx
|
||||
je .ok
|
||||
|
||||
mov [dll.load], edx
|
||||
|
||||
or edx, edx
|
||||
|
||||
@@ -34,21 +34,25 @@ proc libini._.init ;////////////////////////////////////////////////////////////
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< eax = 1 (fail) / 0 (ok) (library initialization result) ;;
|
||||
;;================================================================================================;;
|
||||
mov [mem.alloc], eax
|
||||
mov [mem.free], ebx
|
||||
mov [mem.realloc], ecx
|
||||
mov [dll.load], edx
|
||||
mov [mem.alloc], eax
|
||||
mov [mem.free], ebx
|
||||
mov [mem.realloc], ecx
|
||||
|
||||
invoke dll.load, @IMPORT
|
||||
or eax, eax
|
||||
jz .ok
|
||||
cmp [dll.load], edx
|
||||
je .ok
|
||||
|
||||
xor eax, eax
|
||||
inc eax
|
||||
ret
|
||||
mov [dll.load], edx
|
||||
|
||||
.ok: xor eax,eax
|
||||
ret
|
||||
invoke dll.load, @IMPORT
|
||||
or eax, eax
|
||||
jz .ok
|
||||
|
||||
xor eax, eax
|
||||
inc eax
|
||||
ret
|
||||
|
||||
.ok: xor eax,eax
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
@@ -60,16 +64,16 @@ proc libini._.unget_char _f ;///////////////////////////////////////////////////
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push eax ecx
|
||||
mov ecx, [_f]
|
||||
inc [ecx + IniFile.cnt]
|
||||
dec esi
|
||||
mov eax, [ecx + IniFile.bsize]
|
||||
cmp [ecx + IniFile.cnt], eax
|
||||
jle @f
|
||||
stdcall libini._.unload_block, [_f]
|
||||
@@: pop ecx eax
|
||||
ret
|
||||
push eax ecx
|
||||
mov ecx, [_f]
|
||||
inc [ecx + IniFile.cnt]
|
||||
dec esi
|
||||
mov eax, [ecx + IniFile.bsize]
|
||||
cmp [ecx + IniFile.cnt], eax
|
||||
jle @f
|
||||
stdcall libini._.unload_block, [_f]
|
||||
@@: pop ecx eax
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
@@ -81,13 +85,13 @@ proc libini._.get_char _f ;/////////////////////////////////////////////////////
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
mov ecx, [_f]
|
||||
dec [ecx + IniFile.cnt]
|
||||
jns @f
|
||||
stdcall libini._.preload_block, [_f]
|
||||
dec [ecx + IniFile.cnt]
|
||||
mov ecx, [_f]
|
||||
dec [ecx + IniFile.cnt]
|
||||
jns @f
|
||||
stdcall libini._.preload_block, [_f]
|
||||
dec [ecx + IniFile.cnt]
|
||||
@@: lodsb
|
||||
ret
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
@@ -99,22 +103,22 @@ proc libini._.skip_nonblanks _f ;///////////////////////////////////////////////
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
mov ecx, [_f]
|
||||
mov ecx, [_f]
|
||||
@@: stdcall libini._.get_char, [_f]
|
||||
cmp al, 32
|
||||
je @b
|
||||
cmp al, 13
|
||||
je @b
|
||||
cmp al, 10
|
||||
je @b
|
||||
cmp al, 9
|
||||
je @b
|
||||
cmp al, ini.COMMENT_CHAR
|
||||
jne @f
|
||||
stdcall libini._.skip_line, [_f]
|
||||
jmp @b
|
||||
cmp al, 32
|
||||
je @b
|
||||
cmp al, 13
|
||||
je @b
|
||||
cmp al, 10
|
||||
je @b
|
||||
cmp al, 9
|
||||
je @b
|
||||
cmp al, ini.COMMENT_CHAR
|
||||
jne @f
|
||||
stdcall libini._.skip_line, [_f]
|
||||
jmp @b
|
||||
@@: stdcall libini._.unget_char, [_f]
|
||||
ret
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
@@ -126,14 +130,14 @@ proc libini._.skip_spaces _f ;//////////////////////////////////////////////////
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
mov ecx, [_f]
|
||||
mov ecx, [_f]
|
||||
@@: stdcall libini._.get_char, [_f]
|
||||
cmp al, 32
|
||||
je @b
|
||||
cmp al, 9
|
||||
je @b
|
||||
cmp al, 32
|
||||
je @b
|
||||
cmp al, 9
|
||||
je @b
|
||||
@@: stdcall libini._.unget_char, [_f]
|
||||
ret
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
@@ -145,16 +149,16 @@ proc libini._.skip_line _f ;////////////////////////////////////////////////////
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
mov ecx, [_f]
|
||||
mov ecx, [_f]
|
||||
@@: stdcall libini._.get_char, [_f]
|
||||
or al, al
|
||||
jz @f
|
||||
cmp al, 13
|
||||
je @f
|
||||
cmp al, 10
|
||||
jne @b
|
||||
or al, al
|
||||
jz @f
|
||||
cmp al, 13
|
||||
je @f
|
||||
cmp al, 10
|
||||
jne @b
|
||||
@@: stdcall libini._.unget_char, [_f]
|
||||
ret
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
@@ -166,16 +170,16 @@ proc libini._.unload_block _f ;/////////////////////////////////////////////////
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push eax ebx ecx
|
||||
mov ebx, [_f]
|
||||
mov eax, [ebx + IniFile.pos]
|
||||
add eax, -ini.BLOCK_SIZE
|
||||
invoke file.seek, [ebx + IniFile.fh], eax, SEEK_SET
|
||||
stdcall libini._.preload_block, ebx
|
||||
add esi, eax
|
||||
mov [ebx + IniFile.cnt], 0
|
||||
pop ecx ebx eax
|
||||
ret
|
||||
push eax ebx ecx
|
||||
mov ebx, [_f]
|
||||
mov eax, [ebx + IniFile.pos]
|
||||
add eax, -ini.BLOCK_SIZE
|
||||
invoke file.seek, [ebx + IniFile.fh], eax, SEEK_SET
|
||||
stdcall libini._.preload_block, ebx
|
||||
add esi, eax
|
||||
mov [ebx + IniFile.cnt], 0
|
||||
pop ecx ebx eax
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
@@ -187,25 +191,25 @@ proc libini._.preload_block _f ;////////////////////////////////////////////////
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push eax ebx ecx
|
||||
mov ebx, [_f]
|
||||
@@: mov esi, [ebx + IniFile.buf]
|
||||
push edi
|
||||
mov edi, esi
|
||||
mov ecx, ini.BLOCK_SIZE / 4
|
||||
xor eax, eax
|
||||
rep stosd
|
||||
pop edi
|
||||
invoke file.tell, [ebx + IniFile.fh]
|
||||
mov [ebx + IniFile.pos], eax
|
||||
invoke file.read, [ebx + IniFile.fh], esi, ini.BLOCK_SIZE
|
||||
mov esi,[ebx + IniFile.buf]
|
||||
cmp eax,ini.BLOCK_SIZE
|
||||
jl @f
|
||||
@@: mov [ebx + IniFile.cnt], eax
|
||||
mov [ebx + IniFile.bsize], eax
|
||||
pop ecx ebx eax
|
||||
ret
|
||||
push eax ebx ecx
|
||||
mov ebx, [_f]
|
||||
@@: mov esi, [ebx + IniFile.buf]
|
||||
push edi
|
||||
mov edi, esi
|
||||
mov ecx, ini.BLOCK_SIZE / 4
|
||||
xor eax, eax
|
||||
rep stosd
|
||||
pop edi
|
||||
invoke file.tell, [ebx + IniFile.fh]
|
||||
mov [ebx + IniFile.pos], eax
|
||||
invoke file.read, [ebx + IniFile.fh], esi, ini.BLOCK_SIZE
|
||||
mov esi,[ebx + IniFile.buf]
|
||||
cmp eax,ini.BLOCK_SIZE
|
||||
jl @f
|
||||
@@: mov [ebx + IniFile.cnt], eax
|
||||
mov [ebx + IniFile.bsize], eax
|
||||
pop ecx ebx eax
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
@@ -217,18 +221,18 @@ proc libini._.reload_block _f ;/////////////////////////////////////////////////
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push eax ebx ecx
|
||||
mov ebx, [_f]
|
||||
push [ebx + IniFile.bsize]
|
||||
push esi [ebx + IniFile.cnt]
|
||||
invoke file.seek, [ebx + IniFile.fh], [ebx + IniFile.pos], SEEK_SET
|
||||
stdcall libini._.preload_block, ebx
|
||||
pop [ebx + IniFile.cnt] esi
|
||||
pop eax
|
||||
sub eax,[ebx + IniFile.bsize]
|
||||
sub [ebx + IniFile.cnt], eax
|
||||
pop ecx ebx eax
|
||||
ret
|
||||
push eax ebx ecx
|
||||
mov ebx, [_f]
|
||||
push [ebx + IniFile.bsize]
|
||||
push esi [ebx + IniFile.cnt]
|
||||
invoke file.seek, [ebx + IniFile.fh], [ebx + IniFile.pos], SEEK_SET
|
||||
stdcall libini._.preload_block, ebx
|
||||
pop [ebx + IniFile.cnt] esi
|
||||
pop eax
|
||||
sub eax,[ebx + IniFile.bsize]
|
||||
sub [ebx + IniFile.cnt], eax
|
||||
pop ecx ebx eax
|
||||
ret
|
||||
endp
|
||||
|
||||
; f_info - contains current file block number
|
||||
@@ -249,91 +253,91 @@ locals
|
||||
buf dd ?
|
||||
endl
|
||||
|
||||
xor eax, eax
|
||||
cmp [_delta], 0
|
||||
je .skip
|
||||
xor eax, eax
|
||||
cmp [_delta], 0
|
||||
je .skip
|
||||
|
||||
push ebx ecx
|
||||
invoke mem.alloc, ini.BLOCK_SIZE
|
||||
or eax, eax
|
||||
jz .fail
|
||||
mov [buf], eax
|
||||
push ebx ecx
|
||||
invoke mem.alloc, ini.BLOCK_SIZE
|
||||
or eax, eax
|
||||
jz .fail
|
||||
mov [buf], eax
|
||||
|
||||
cmp [_delta], 0
|
||||
jl .down
|
||||
cmp [_delta], 0
|
||||
jl .down
|
||||
|
||||
mov ebx, [_f]
|
||||
mov ecx, [ebx + IniFile.cnt]
|
||||
mov ebx, [ebx + IniFile.fh]
|
||||
invoke file.tell, ebx
|
||||
sub eax, ecx
|
||||
invoke file.seek, ebx, eax, SEEK_SET
|
||||
@@: invoke file.seek, ebx, [_delta], SEEK_CUR
|
||||
invoke file.eof?, ebx
|
||||
or eax, eax
|
||||
jnz .done
|
||||
invoke file.read, ebx, [buf], ini.BLOCK_SIZE
|
||||
mov ecx, eax
|
||||
mov eax, [_delta]
|
||||
neg eax
|
||||
sub eax, ecx
|
||||
invoke file.seek, ebx, eax, SEEK_CUR
|
||||
push ecx
|
||||
invoke file.write, ebx, [buf], ecx
|
||||
pop ecx
|
||||
cmp eax, ecx
|
||||
jz @b
|
||||
mov ebx, [_f]
|
||||
mov ecx, [ebx + IniFile.cnt]
|
||||
mov ebx, [ebx + IniFile.fh]
|
||||
invoke file.tell, ebx
|
||||
sub eax, ecx
|
||||
invoke file.seek, ebx, eax, SEEK_SET
|
||||
@@: invoke file.seek, ebx, [_delta], SEEK_CUR
|
||||
invoke file.eof?, ebx
|
||||
or eax, eax
|
||||
jnz .done
|
||||
invoke file.read, ebx, [buf], ini.BLOCK_SIZE
|
||||
mov ecx, eax
|
||||
mov eax, [_delta]
|
||||
neg eax
|
||||
sub eax, ecx
|
||||
invoke file.seek, ebx, eax, SEEK_CUR
|
||||
push ecx
|
||||
invoke file.write, ebx, [buf], ecx
|
||||
pop ecx
|
||||
cmp eax, ecx
|
||||
jz @b
|
||||
.fail:
|
||||
or eax, -1
|
||||
pop ecx ebx
|
||||
ret
|
||||
or eax, -1
|
||||
pop ecx ebx
|
||||
ret
|
||||
.done:
|
||||
mov eax, [_delta]
|
||||
neg eax
|
||||
invoke file.seek, ebx, eax, SEEK_CUR
|
||||
invoke file.seteof, ebx
|
||||
stdcall libini._.reload_block, [_f]
|
||||
invoke mem.free, [buf]
|
||||
pop ecx ebx
|
||||
mov eax, [_delta]
|
||||
neg eax
|
||||
invoke file.seek, ebx, eax, SEEK_CUR
|
||||
invoke file.seteof, ebx
|
||||
stdcall libini._.reload_block, [_f]
|
||||
invoke mem.free, [buf]
|
||||
pop ecx ebx
|
||||
.skip:
|
||||
ret
|
||||
ret
|
||||
|
||||
.down:
|
||||
neg [_delta]
|
||||
neg [_delta]
|
||||
|
||||
mov ebx, [_f]
|
||||
mov ecx, [ebx + IniFile.cnt]
|
||||
mov ebx, [ebx + IniFile.fh]
|
||||
invoke file.tell, ebx
|
||||
sub eax, ecx
|
||||
lea edx, [eax - 1]
|
||||
push edx
|
||||
@@: invoke file.seek, ebx, edx, SEEK_SET
|
||||
invoke file.eof?, ebx
|
||||
or eax, eax
|
||||
jnz @f
|
||||
add edx, ini.BLOCK_SIZE
|
||||
jmp @b
|
||||
@@: cmp edx, [esp]
|
||||
je .skip.2
|
||||
add edx, -ini.BLOCK_SIZE
|
||||
cmp edx, [esp]
|
||||
jl @f
|
||||
invoke file.seek, ebx, edx, SEEK_SET
|
||||
invoke file.read, ebx, [buf], ini.BLOCK_SIZE
|
||||
mov ecx, eax
|
||||
mov eax, [_delta]
|
||||
sub eax, ecx
|
||||
invoke file.seek, ebx, eax, SEEK_CUR
|
||||
invoke file.write, ebx, [buf], ecx
|
||||
jmp @b
|
||||
mov ebx, [_f]
|
||||
mov ecx, [ebx + IniFile.cnt]
|
||||
mov ebx, [ebx + IniFile.fh]
|
||||
invoke file.tell, ebx
|
||||
sub eax, ecx
|
||||
lea edx, [eax - 1]
|
||||
push edx
|
||||
@@: invoke file.seek, ebx, edx, SEEK_SET
|
||||
invoke file.eof?, ebx
|
||||
or eax, eax
|
||||
jnz @f
|
||||
add edx, ini.BLOCK_SIZE
|
||||
jmp @b
|
||||
@@: cmp edx, [esp]
|
||||
je .skip.2
|
||||
add edx, -ini.BLOCK_SIZE
|
||||
cmp edx, [esp]
|
||||
jl @f
|
||||
invoke file.seek, ebx, edx, SEEK_SET
|
||||
invoke file.read, ebx, [buf], ini.BLOCK_SIZE
|
||||
mov ecx, eax
|
||||
mov eax, [_delta]
|
||||
sub eax, ecx
|
||||
invoke file.seek, ebx, eax, SEEK_CUR
|
||||
invoke file.write, ebx, [buf], ecx
|
||||
jmp @b
|
||||
@@:
|
||||
.skip.2:
|
||||
add esp, 4
|
||||
stdcall libini._.reload_block, [_f]
|
||||
invoke mem.free, [buf]
|
||||
pop ecx ebx
|
||||
ret
|
||||
add esp, 4
|
||||
stdcall libini._.reload_block, [_f]
|
||||
invoke mem.free, [buf]
|
||||
pop ecx ebx
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
@@ -345,25 +349,25 @@ proc libini._.get_value_length _f ;/////////////////////////////////////////////
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push ebx ecx edx eax
|
||||
mov ebx, [_f]
|
||||
invoke file.tell, [ebx + IniFile.fh]
|
||||
push esi [ebx + IniFile.cnt] [ebx + IniFile.pos]
|
||||
sub eax, [ebx + IniFile.cnt]
|
||||
mov edx, eax
|
||||
push ebx ecx edx eax
|
||||
mov ebx, [_f]
|
||||
invoke file.tell, [ebx + IniFile.fh]
|
||||
push esi [ebx + IniFile.cnt] [ebx + IniFile.pos]
|
||||
sub eax, [ebx + IniFile.cnt]
|
||||
mov edx, eax
|
||||
|
||||
stdcall libini._.skip_line, [_f]
|
||||
invoke file.tell, [ebx + IniFile.fh]
|
||||
sub eax, [ebx + IniFile.cnt]
|
||||
sub eax, edx
|
||||
mov [esp + 4 * 3], eax
|
||||
stdcall libini._.skip_line, [_f]
|
||||
invoke file.tell, [ebx + IniFile.fh]
|
||||
sub eax, [ebx + IniFile.cnt]
|
||||
sub eax, edx
|
||||
mov [esp + 4 * 3], eax
|
||||
|
||||
pop eax
|
||||
invoke file.seek, [ebx + IniFile.fh], eax, SEEK_SET
|
||||
stdcall libini._.preload_block, [_f]
|
||||
pop [ebx + IniFile.cnt] esi
|
||||
pop eax edx ecx ebx
|
||||
ret
|
||||
pop eax
|
||||
invoke file.seek, [ebx + IniFile.fh], eax, SEEK_SET
|
||||
stdcall libini._.preload_block, [_f]
|
||||
pop [ebx + IniFile.cnt] esi
|
||||
pop eax edx ecx ebx
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
@@ -376,10 +380,10 @@ proc libini._.string_copy ;/////////////////////////////////////////////////////
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
@@: lodsb
|
||||
or al, al
|
||||
jz @f
|
||||
stosb
|
||||
jmp @b
|
||||
or al, al
|
||||
jz @f
|
||||
stosb
|
||||
jmp @b
|
||||
@@: ret
|
||||
endp
|
||||
|
||||
@@ -392,26 +396,26 @@ proc libini._.find_next_section _f ;////////////////////////////////////////////
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push ebx edi
|
||||
push ebx edi
|
||||
|
||||
@@: stdcall libini._.skip_nonblanks, [_f]
|
||||
cmp al, '['
|
||||
je @f
|
||||
or al, al
|
||||
jz .exit_error
|
||||
stdcall libini._.skip_line, [_f]
|
||||
or al, al
|
||||
jz .exit_error
|
||||
jmp @b
|
||||
cmp al, '['
|
||||
je @f
|
||||
or al, al
|
||||
jz .exit_error
|
||||
stdcall libini._.skip_line, [_f]
|
||||
or al, al
|
||||
jz .exit_error
|
||||
jmp @b
|
||||
@@:
|
||||
pop edi ebx
|
||||
xor eax, eax
|
||||
ret
|
||||
pop edi ebx
|
||||
xor eax, eax
|
||||
ret
|
||||
|
||||
.exit_error:
|
||||
pop edi ebx
|
||||
or eax, -1
|
||||
ret
|
||||
pop edi ebx
|
||||
or eax, -1
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
@@ -425,50 +429,50 @@ proc libini._.find_section _f, _sec_name ;//////////////////////////////////////
|
||||
;< eax = -1 (fail) / 0 (ok) ;;
|
||||
;< [_f.pos] = new cursor position (right after ']' char if eax = 0, at the end of file otherwise) ;;
|
||||
;;================================================================================================;;
|
||||
push ebx edi
|
||||
push ebx edi
|
||||
|
||||
mov ecx, [_f]
|
||||
invoke file.seek, [ecx + IniFile.fh], 0, SEEK_SET
|
||||
stdcall libini._.preload_block, [_f]
|
||||
mov ecx, [_f]
|
||||
invoke file.seek, [ecx + IniFile.fh], 0, SEEK_SET
|
||||
stdcall libini._.preload_block, [_f]
|
||||
|
||||
.next_section:
|
||||
stdcall libini._.find_next_section, [_f]
|
||||
or eax, eax
|
||||
jnz .exit_error
|
||||
stdcall libini._.find_next_section, [_f]
|
||||
or eax, eax
|
||||
jnz .exit_error
|
||||
|
||||
stdcall libini._.get_char, [_f]
|
||||
stdcall libini._.skip_spaces, [_f]
|
||||
mov edi, [_sec_name]
|
||||
stdcall libini._.get_char, [_f]
|
||||
stdcall libini._.skip_spaces, [_f]
|
||||
mov edi, [_sec_name]
|
||||
@@: stdcall libini._.get_char, [_f]
|
||||
cmp al, ']'
|
||||
je @f
|
||||
or al, al
|
||||
jz .exit_error
|
||||
cmp al, 13
|
||||
je .next_section
|
||||
cmp al, 10
|
||||
je .next_section
|
||||
scasb
|
||||
je @b
|
||||
cmp byte[edi - 1], 0
|
||||
jne .next_section
|
||||
dec edi
|
||||
stdcall libini._.unget_char, [_f]
|
||||
stdcall libini._.skip_spaces, [_f]
|
||||
stdcall libini._.get_char, [_f]
|
||||
cmp al, ']'
|
||||
jne .next_section
|
||||
cmp al, ']'
|
||||
je @f
|
||||
or al, al
|
||||
jz .exit_error
|
||||
cmp al, 13
|
||||
je .next_section
|
||||
cmp al, 10
|
||||
je .next_section
|
||||
scasb
|
||||
je @b
|
||||
cmp byte[edi - 1], 0
|
||||
jne .next_section
|
||||
dec edi
|
||||
stdcall libini._.unget_char, [_f]
|
||||
stdcall libini._.skip_spaces, [_f]
|
||||
stdcall libini._.get_char, [_f]
|
||||
cmp al, ']'
|
||||
jne .next_section
|
||||
@@:
|
||||
cmp byte[edi], 0
|
||||
jne .next_section
|
||||
pop edi ebx
|
||||
xor eax, eax
|
||||
ret
|
||||
cmp byte[edi], 0
|
||||
jne .next_section
|
||||
pop edi ebx
|
||||
xor eax, eax
|
||||
ret
|
||||
|
||||
.exit_error:
|
||||
pop edi ebx
|
||||
or eax, -1
|
||||
ret
|
||||
pop edi ebx
|
||||
or eax, -1
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
@@ -483,44 +487,44 @@ proc libini._.find_key _f, _key_name ;//////////////////////////////////////////
|
||||
;< [_f.pos] = new cursor position (right after '=' char if eax = 0, at the end of file or right ;;
|
||||
;< before '[' char otherwise) ;;
|
||||
;;================================================================================================;;
|
||||
push ebx edi
|
||||
push ebx edi
|
||||
|
||||
.next_value:
|
||||
mov edi, [_key_name]
|
||||
stdcall libini._.skip_line, [_f]
|
||||
stdcall libini._.skip_nonblanks, [_f]
|
||||
or al, al
|
||||
jz .exit_error
|
||||
cmp al, '['
|
||||
je .exit_error
|
||||
mov edi, [_key_name]
|
||||
stdcall libini._.skip_line, [_f]
|
||||
stdcall libini._.skip_nonblanks, [_f]
|
||||
or al, al
|
||||
jz .exit_error
|
||||
cmp al, '['
|
||||
je .exit_error
|
||||
@@: stdcall libini._.get_char, [_f]
|
||||
or al, al
|
||||
jz .exit_error
|
||||
cmp al, '='
|
||||
je @f
|
||||
scasb
|
||||
je @b
|
||||
cmp byte[edi - 1], 0
|
||||
jne .next_value
|
||||
dec edi
|
||||
stdcall libini._.unget_char, [_f]
|
||||
stdcall libini._.skip_spaces, [_f]
|
||||
stdcall libini._.get_char, [_f]
|
||||
cmp al, '='
|
||||
je @f
|
||||
jmp .next_value
|
||||
or al, al
|
||||
jz .exit_error
|
||||
cmp al, '='
|
||||
je @f
|
||||
scasb
|
||||
je @b
|
||||
cmp byte[edi - 1], 0
|
||||
jne .next_value
|
||||
dec edi
|
||||
stdcall libini._.unget_char, [_f]
|
||||
stdcall libini._.skip_spaces, [_f]
|
||||
stdcall libini._.get_char, [_f]
|
||||
cmp al, '='
|
||||
je @f
|
||||
jmp .next_value
|
||||
@@:
|
||||
cmp byte[edi], 0
|
||||
jne .next_value
|
||||
cmp byte[edi], 0
|
||||
jne .next_value
|
||||
|
||||
pop edi ebx
|
||||
xor eax, eax
|
||||
ret
|
||||
pop edi ebx
|
||||
xor eax, eax
|
||||
ret
|
||||
|
||||
.exit_error:
|
||||
pop edi ebx
|
||||
or eax, -1
|
||||
ret
|
||||
pop edi ebx
|
||||
or eax, -1
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
@@ -532,31 +536,31 @@ proc libini._.low.read_value _f_addr, _buffer, _buf_len ;///////////////////////
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push edi eax
|
||||
mov edi, [_buffer]
|
||||
stdcall libini._.skip_spaces, [_f_addr]
|
||||
@@: dec [_buf_len]
|
||||
jz @f
|
||||
stdcall libini._.get_char, [_f_addr]
|
||||
cmp al, 13
|
||||
je @f
|
||||
cmp al, 10
|
||||
je @f
|
||||
stosb
|
||||
or al, al
|
||||
jnz @b
|
||||
push edi eax
|
||||
mov edi, [_buffer]
|
||||
stdcall libini._.skip_spaces, [_f_addr]
|
||||
@@: dec [_buf_len]
|
||||
jz @f
|
||||
stdcall libini._.get_char, [_f_addr]
|
||||
cmp al, 13
|
||||
je @f
|
||||
cmp al, 10
|
||||
je @f
|
||||
stosb
|
||||
or al, al
|
||||
jnz @b
|
||||
@@: stdcall libini._.unget_char, [_f_addr]
|
||||
mov byte[edi], 0
|
||||
dec edi
|
||||
@@: cmp edi, [_buffer]
|
||||
jb @f
|
||||
cmp byte[edi], 32
|
||||
ja @f
|
||||
mov byte[edi], 0
|
||||
dec edi
|
||||
jmp @b
|
||||
@@: pop eax edi
|
||||
ret
|
||||
mov byte[edi], 0
|
||||
dec edi
|
||||
@@: cmp edi, [_buffer]
|
||||
jb @f
|
||||
cmp byte[edi], 32
|
||||
ja @f
|
||||
mov byte[edi], 0
|
||||
dec edi
|
||||
jmp @b
|
||||
@@: pop eax edi
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
@@ -568,25 +572,25 @@ proc libini._.str_to_int ;//////////////////////////////////////////////////////
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< eax = binary number representation (no overflow checks made) ;;
|
||||
;;================================================================================================;;
|
||||
push edx
|
||||
push edx
|
||||
|
||||
xor eax, eax
|
||||
xor edx, edx
|
||||
xor eax, eax
|
||||
xor edx, edx
|
||||
|
||||
@@: lodsb
|
||||
cmp al, '0'
|
||||
jb @f
|
||||
cmp al, '9'
|
||||
ja @f
|
||||
add eax, -'0'
|
||||
imul edx, 10
|
||||
add edx, eax
|
||||
jmp @b
|
||||
cmp al, '0'
|
||||
jb @f
|
||||
cmp al, '9'
|
||||
ja @f
|
||||
add eax, -'0'
|
||||
imul edx, 10
|
||||
add edx, eax
|
||||
jmp @b
|
||||
|
||||
@@: dec esi
|
||||
mov eax, edx
|
||||
pop edx
|
||||
ret
|
||||
@@: dec esi
|
||||
mov eax, edx
|
||||
pop edx
|
||||
ret
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
@@ -600,29 +604,29 @@ proc libini._.int_to_str ;//////////////////////////////////////////////////////
|
||||
;;------------------------------------------------------------------------------------------------;;
|
||||
;< --- TBD --- ;;
|
||||
;;================================================================================================;;
|
||||
push ecx edx
|
||||
push ecx edx
|
||||
|
||||
or eax, eax
|
||||
jns @f
|
||||
mov byte[edi], '-'
|
||||
inc edi
|
||||
@@: call .recurse
|
||||
pop edx ecx
|
||||
ret
|
||||
or eax, eax
|
||||
jns @f
|
||||
mov byte[edi], '-'
|
||||
inc edi
|
||||
@@: call .recurse
|
||||
pop edx ecx
|
||||
ret
|
||||
|
||||
.recurse:
|
||||
cmp eax,ecx
|
||||
jb @f
|
||||
xor edx,edx
|
||||
div ecx
|
||||
push edx
|
||||
call .recurse
|
||||
pop eax
|
||||
@@: cmp al,10
|
||||
sbb al,0x69
|
||||
das
|
||||
stosb
|
||||
retn
|
||||
cmp eax,ecx
|
||||
jb @f
|
||||
xor edx,edx
|
||||
div ecx
|
||||
push edx
|
||||
call .recurse
|
||||
pop eax
|
||||
@@: cmp al,10
|
||||
sbb al,0x69
|
||||
das
|
||||
stosb
|
||||
retn
|
||||
endp
|
||||
|
||||
;;================================================================================================;;
|
||||
@@ -635,50 +639,50 @@ proc libini._.ascii_to_scan ;_ascii_code ;//////////////////////////////////////
|
||||
;< eax = 0 (error) / scancode (success) ;;
|
||||
;;================================================================================================;;
|
||||
; /sys/keymap.key
|
||||
sub esp, 256
|
||||
mov eax, esp
|
||||
push ebx
|
||||
push 'key'
|
||||
push 'map.'
|
||||
push '/key'
|
||||
push '/sys'
|
||||
push eax ; buffer in the stack
|
||||
push 0x100 ; read 0x100 bytes
|
||||
push 0
|
||||
push 0 ; from position zero
|
||||
push 0 ; subfunction: read
|
||||
mov ebx, esp
|
||||
push 70
|
||||
pop eax
|
||||
mcall
|
||||
add esp, 36
|
||||
pop ebx
|
||||
test eax, eax
|
||||
jnz .die
|
||||
mov al, [esp+256+4] ; get ASCII code
|
||||
push edi
|
||||
sub esp, 256
|
||||
mov eax, esp
|
||||
push ebx
|
||||
push 'key'
|
||||
push 'map.'
|
||||
push '/key'
|
||||
push '/sys'
|
||||
push eax ; buffer in the stack
|
||||
push 0x100 ; read 0x100 bytes
|
||||
push 0
|
||||
push 0 ; from position zero
|
||||
push 0 ; subfunction: read
|
||||
mov ebx, esp
|
||||
push 70
|
||||
pop eax
|
||||
mcall
|
||||
add esp, 36
|
||||
pop ebx
|
||||
test eax, eax
|
||||
jnz .die
|
||||
mov al, [esp+256+4] ; get ASCII code
|
||||
push edi
|
||||
; first keytable - no modifiers pressed
|
||||
; check scancodes from 1 to 36h (inclusive)
|
||||
lea edi, [esp+4+1]
|
||||
mov edx, edi
|
||||
mov ecx, 36h
|
||||
repnz scasb
|
||||
jz .found
|
||||
lea edi, [esp+4+1]
|
||||
mov edx, edi
|
||||
mov ecx, 36h
|
||||
repnz scasb
|
||||
jz .found
|
||||
; second keytable - Shift pressed
|
||||
lea edi, [esp+4+128+1]
|
||||
mov edx, edi
|
||||
mov ecx, 36h
|
||||
repnz scasb
|
||||
jz .found
|
||||
pop edi
|
||||
lea edi, [esp+4+128+1]
|
||||
mov edx, edi
|
||||
mov ecx, 36h
|
||||
repnz scasb
|
||||
jz .found
|
||||
pop edi
|
||||
.die:
|
||||
xor eax, eax
|
||||
jmp .ret
|
||||
xor eax, eax
|
||||
jmp .ret
|
||||
.found:
|
||||
mov eax, edi
|
||||
sub eax, edx
|
||||
pop edi
|
||||
mov eax, edi
|
||||
sub eax, edx
|
||||
pop edi
|
||||
.ret:
|
||||
add esp, 256
|
||||
ret 4
|
||||
add esp, 256
|
||||
ret 4
|
||||
endp
|
||||
|
||||
@@ -33,38 +33,39 @@ use_ColorDialog
|
||||
;--------------------------------------------------
|
||||
align 16
|
||||
lib_init:
|
||||
ret
|
||||
xor eax, eax
|
||||
ret
|
||||
|
||||
;--------------------------------------------------
|
||||
align 16
|
||||
EXPORTS:
|
||||
|
||||
|
||||
dd sz_init, lib_init
|
||||
dd sz_version, 0x00000001
|
||||
dd sz_init, lib_init
|
||||
dd sz_version, 0x00000001
|
||||
|
||||
dd sz_OpenDialog_init, OpenDialog.init
|
||||
dd sz_OpenDialog_start, OpenDialog.start
|
||||
dd sz_OpenDialog_set_file_name, OpenDialog.set_file_name
|
||||
dd sz_OpenDialog_set_file_ext, OpenDialog.set_file_ext
|
||||
dd szVersion_OpenDialog, 0x00010001
|
||||
dd sz_OpenDialog_init, OpenDialog.init
|
||||
dd sz_OpenDialog_start, OpenDialog.start
|
||||
dd sz_OpenDialog_set_file_name, OpenDialog.set_file_name
|
||||
dd sz_OpenDialog_set_file_ext, OpenDialog.set_file_ext
|
||||
dd szVersion_OpenDialog, 0x00010001
|
||||
|
||||
dd sz_ColorDialog_init, ColorDialog.init
|
||||
dd sz_ColorDialog_start, ColorDialog.start
|
||||
dd szVersion_ColorDialog, 0x00010001
|
||||
dd sz_ColorDialog_init, ColorDialog.init
|
||||
dd sz_ColorDialog_start, ColorDialog.start
|
||||
dd szVersion_ColorDialog, 0x00010001
|
||||
|
||||
dd 0,0
|
||||
dd 0,0
|
||||
;-----------------------------------------------------------------------------
|
||||
sz_init db 'lib_init',0
|
||||
sz_version db 'version',0
|
||||
sz_init db 'lib_init',0
|
||||
sz_version db 'version',0
|
||||
|
||||
sz_OpenDialog_init db 'OpenDialog_init',0
|
||||
sz_OpenDialog_start db 'OpenDialog_start',0
|
||||
sz_OpenDialog_set_file_name db 'OpenDialog_set_file_name',0
|
||||
sz_OpenDialog_set_file_ext db 'OpenDialog_set_file_ext',0
|
||||
szVersion_OpenDialog db 'Version_OpenDialog',0
|
||||
sz_OpenDialog_init db 'OpenDialog_init',0
|
||||
sz_OpenDialog_start db 'OpenDialog_start',0
|
||||
sz_OpenDialog_set_file_name db 'OpenDialog_set_file_name',0
|
||||
sz_OpenDialog_set_file_ext db 'OpenDialog_set_file_ext',0
|
||||
szVersion_OpenDialog db 'Version_OpenDialog',0
|
||||
|
||||
sz_ColorDialog_init db 'ColorDialog_init',0
|
||||
sz_ColorDialog_start db 'ColorDialog_start',0
|
||||
szVersion_ColorDialog db 'Version_ColorDialog',0
|
||||
sz_ColorDialog_init db 'ColorDialog_init',0
|
||||
sz_ColorDialog_start db 'ColorDialog_start',0
|
||||
szVersion_ColorDialog db 'Version_ColorDialog',0
|
||||
;-----------------------------------------------------------------------------
|
||||
|
||||
6
programs/emulator/uxn/.gitignore
vendored
Normal file
6
programs/emulator/uxn/.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
# SPDX-FileCopyrightText: 2025 iyzsong@envs.net
|
||||
#
|
||||
# SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
zig-out
|
||||
.zig-cache
|
||||
17
programs/emulator/uxn/README
Normal file
17
programs/emulator/uxn/README
Normal file
@@ -0,0 +1,17 @@
|
||||
// SPDX-FileCopyrightText: 2025 iyzsong@envs.net
|
||||
//
|
||||
// SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
Uxn/Varvara emulator for Kolibri OS
|
||||
|
||||
Based on https://github.com/chmod222/zuxn
|
||||
|
||||
compile: zig build --release=fast
|
||||
result: zig-out/bin/uxn
|
||||
run: uxn SOME.rom
|
||||
control:
|
||||
Up/Down/Left/Right
|
||||
Ctrl/Shift/Alt/Home
|
||||
F1: change scale (1x, 2x, 3x)
|
||||
|
||||
TODO: file/directory stat, audio latency, open dialog?
|
||||
36
programs/emulator/uxn/build.zig
Normal file
36
programs/emulator/uxn/build.zig
Normal file
@@ -0,0 +1,36 @@
|
||||
// SPDX-FileCopyrightText: 2025 iyzsong@envs.net
|
||||
//
|
||||
// SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
const std = @import("std");
|
||||
|
||||
pub fn build(b: *std.Build) void {
|
||||
const target_query = std.Target.Query{
|
||||
.cpu_arch = std.Target.Cpu.Arch.x86,
|
||||
.os_tag = std.Target.Os.Tag.freestanding,
|
||||
.abi = std.Target.Abi.none,
|
||||
.cpu_model = std.Target.Query.CpuModel{ .explicit = &std.Target.x86.cpu.i586 },
|
||||
};
|
||||
const target = b.resolveTargetQuery(target_query);
|
||||
const optimize = b.standardOptimizeOption(.{});
|
||||
const zuxn = b.dependency("zuxn", .{
|
||||
.target = target,
|
||||
.optimize = optimize,
|
||||
});
|
||||
const elf = b.addExecutable(.{
|
||||
.name = "uxn.elf",
|
||||
.root_source_file = b.path("src/main.zig"),
|
||||
.target = target,
|
||||
.optimize = optimize,
|
||||
.unwind_tables = .none,
|
||||
});
|
||||
elf.root_module.addImport("uxn-core", zuxn.module("uxn-core"));
|
||||
elf.root_module.addImport("uxn-varvara", zuxn.module("uxn-varvara"));
|
||||
elf.setLinkerScript(b.path("src/linker.ld"));
|
||||
const bin = elf.addObjCopy(.{
|
||||
.format = .bin,
|
||||
});
|
||||
const install_bin = b.addInstallBinFile(bin.getOutput(), "uxn");
|
||||
b.getInstallStep().dependOn(&install_bin.step);
|
||||
b.installArtifact(elf);
|
||||
}
|
||||
21
programs/emulator/uxn/build.zig.zon
Normal file
21
programs/emulator/uxn/build.zig.zon
Normal file
@@ -0,0 +1,21 @@
|
||||
// SPDX-FileCopyrightText: 2025 iyzsong@envs.net
|
||||
//
|
||||
// SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
.{
|
||||
.name = .uxn_kolibrios,
|
||||
.version = "0.0.0",
|
||||
.fingerprint = 0x3aef20f25c0a0218,
|
||||
.minimum_zig_version = "0.14.0",
|
||||
.dependencies = .{
|
||||
.zuxn = .{
|
||||
.url = "git+https://github.com/chmod222/zuxn.git#fc3a76724fa87dd08039438b56fc326ac3d51e4d",
|
||||
.hash = "zuxn-0.0.1-XnoOpbqsAgD-fU6rv_AoLffA1utIzXuae2cmnHj6SzE6",
|
||||
},
|
||||
},
|
||||
.paths = .{
|
||||
"build.zig",
|
||||
"build.zig.zon",
|
||||
"src",
|
||||
},
|
||||
}
|
||||
604
programs/emulator/uxn/src/kolibri.zig
Normal file
604
programs/emulator/uxn/src/kolibri.zig
Normal file
@@ -0,0 +1,604 @@
|
||||
// SPDX-FileCopyrightText: 2025 iyzsong@envs.net
|
||||
//
|
||||
// SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
const std = @import("std");
|
||||
|
||||
pub const SYS = enum(i32) {
|
||||
terminate_process = -1,
|
||||
create_window = 0,
|
||||
put_pixel = 1,
|
||||
get_key = 2,
|
||||
get_sys_time = 3,
|
||||
draw_text = 4,
|
||||
sleep = 5,
|
||||
put_image = 7,
|
||||
define_button = 8,
|
||||
thread_info = 9,
|
||||
wait_event = 10,
|
||||
check_event = 11,
|
||||
redraw = 12,
|
||||
draw_rect = 13,
|
||||
get_screen_size = 14,
|
||||
get_button = 17,
|
||||
system = 18,
|
||||
screen_put_image = 25,
|
||||
system_get = 26,
|
||||
get_sys_date = 29,
|
||||
mouse_get = 37,
|
||||
set_events_mask = 40,
|
||||
style_settings = 48,
|
||||
create_thread = 51,
|
||||
board = 63,
|
||||
keyboard = 66,
|
||||
change_window = 67,
|
||||
sys_misc = 68,
|
||||
file = 70,
|
||||
blitter = 73,
|
||||
};
|
||||
|
||||
pub const Event = enum(u32) {
|
||||
none = 0,
|
||||
redraw = 1,
|
||||
key = 2,
|
||||
button = 3,
|
||||
background = 5,
|
||||
mouse = 6,
|
||||
ipc = 7,
|
||||
};
|
||||
|
||||
pub inline fn syscall0(number: SYS) u32 {
|
||||
return asm volatile ("int $0x40"
|
||||
: [ret] "={eax}" (-> u32),
|
||||
: [number] "{eax}" (@intFromEnum(number)),
|
||||
);
|
||||
}
|
||||
|
||||
pub inline fn syscall1(number: SYS, arg1: u32) u32 {
|
||||
return asm volatile ("int $0x40"
|
||||
: [ret] "={eax}" (-> u32),
|
||||
: [number] "{eax}" (@intFromEnum(number)),
|
||||
[arg1] "{ebx}" (arg1),
|
||||
);
|
||||
}
|
||||
|
||||
pub inline fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
|
||||
return asm volatile ("int $0x40"
|
||||
: [ret] "={eax}" (-> u32),
|
||||
: [number] "{eax}" (@intFromEnum(number)),
|
||||
[arg1] "{ebx}" (arg1),
|
||||
[arg2] "{ecx}" (arg2),
|
||||
);
|
||||
}
|
||||
|
||||
pub inline fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
|
||||
return asm volatile ("int $0x40"
|
||||
: [ret] "={eax}" (-> u32),
|
||||
: [number] "{eax}" (@intFromEnum(number)),
|
||||
[arg1] "{ebx}" (arg1),
|
||||
[arg2] "{ecx}" (arg2),
|
||||
[arg3] "{edx}" (arg3),
|
||||
);
|
||||
}
|
||||
|
||||
pub inline fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
|
||||
return asm volatile ("int $0x40"
|
||||
: [ret] "={eax}" (-> u32),
|
||||
: [number] "{eax}" (@intFromEnum(number)),
|
||||
[arg1] "{ebx}" (arg1),
|
||||
[arg2] "{ecx}" (arg2),
|
||||
[arg3] "{edx}" (arg3),
|
||||
[arg4] "{esi}" (arg4),
|
||||
);
|
||||
}
|
||||
|
||||
pub inline fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u32) u32 {
|
||||
return asm volatile ("int $0x40"
|
||||
: [ret] "={eax}" (-> u32),
|
||||
: [number] "{eax}" (@intFromEnum(number)),
|
||||
[arg1] "{ebx}" (arg1),
|
||||
[arg2] "{ecx}" (arg2),
|
||||
[arg3] "{edx}" (arg3),
|
||||
[arg4] "{esi}" (arg4),
|
||||
[arg5] "{edi}" (arg5),
|
||||
);
|
||||
}
|
||||
|
||||
pub fn terminateProcess() noreturn {
|
||||
_ = syscall0(SYS.terminate_process);
|
||||
unreachable;
|
||||
}
|
||||
|
||||
pub const WindowFlags = struct {
|
||||
skinned: bool = true,
|
||||
fixed: bool = true,
|
||||
no_title: bool = false,
|
||||
relative_coordinates: bool = false,
|
||||
no_fill: bool = false,
|
||||
unmovable: bool = false,
|
||||
};
|
||||
|
||||
pub fn createWindow(x: u16, y: u16, width: u16, height: u16, bgcolor: u24, flags: WindowFlags, title: [*:0]const u8) void {
|
||||
var f1: u32 = 0x00000000;
|
||||
if (flags.no_fill)
|
||||
f1 |= 0x40000000;
|
||||
if (flags.relative_coordinates)
|
||||
f1 |= 0x20000000;
|
||||
if (!flags.no_title)
|
||||
f1 |= 0x10000000;
|
||||
if (flags.skinned) {
|
||||
if (flags.fixed) {
|
||||
f1 |= 0x04000000;
|
||||
} else {
|
||||
f1 |= 0x03000000;
|
||||
}
|
||||
} else {
|
||||
f1 |= 0x01000000;
|
||||
}
|
||||
var f2: u32 = 0x00000000;
|
||||
if (flags.unmovable)
|
||||
f2 = 0x01000000;
|
||||
_ = syscall5(SYS.create_window, @as(u32, x) * 0x10000 + width, @as(u32, y) * 0x10000 + height, f1 | @as(u32, bgcolor), f2 | @as(u32, bgcolor), @intFromPtr(title));
|
||||
}
|
||||
|
||||
pub fn putPixel(x: u16, y: u16, color: u24) void {
|
||||
_ = syscall3(SYS.put_pixel, x, y, color);
|
||||
}
|
||||
|
||||
pub fn invertPixel(x: u16, y: u16) void {
|
||||
_ = syscall3(SYS.put_pixel, x, y, 0x01000000);
|
||||
}
|
||||
|
||||
pub const Key = packed struct(u32) {
|
||||
_unused: u8 = 0,
|
||||
key: u8 = 0,
|
||||
scancode: u8 = 0,
|
||||
empty: u8 = 1,
|
||||
|
||||
pub fn pressed(self: *const Key) bool {
|
||||
return self.key & 0x80 > 0;
|
||||
}
|
||||
};
|
||||
|
||||
pub fn getKey() Key {
|
||||
return @bitCast(syscall0(SYS.get_key));
|
||||
}
|
||||
|
||||
pub fn getSysTime() u24 {
|
||||
return @intCast(syscall0(SYS.get_sys_time));
|
||||
}
|
||||
|
||||
pub fn getButton() u32 {
|
||||
return syscall0(SYS.get_button);
|
||||
}
|
||||
|
||||
pub fn terminateThreadId(id: u32) void {
|
||||
_ = syscall2(SYS.system, 18, id);
|
||||
}
|
||||
|
||||
pub fn drawText(x: u16, y: u16, color: u24, text: [*:0]const u8) void {
|
||||
_ = syscall5(SYS.draw_text, @as(u32, x) * 0x10000 + y, 0x80000000 | @as(u32, color), @intFromPtr(text), 0, 0);
|
||||
}
|
||||
|
||||
pub fn sleep(centisecond: u32) void {
|
||||
_ = syscall1(SYS.sleep, centisecond);
|
||||
}
|
||||
|
||||
pub fn beginDraw() void {
|
||||
_ = syscall1(SYS.redraw, 1);
|
||||
}
|
||||
|
||||
pub fn endDraw() void {
|
||||
_ = syscall1(SYS.redraw, 2);
|
||||
}
|
||||
|
||||
pub fn putImage(image: [*]const u8, width: u16, height: u16, x: u16, y: u16) void {
|
||||
_ = syscall3(SYS.put_image, @intFromPtr(image), @as(u32, width) * 0x10000 + height, @as(u32, x) * 0x10000 + y);
|
||||
}
|
||||
|
||||
pub fn drawRect(x: u16, y: u16, width: u16, height: u16, color: u24) void {
|
||||
_ = syscall3(SYS.draw_rect, @as(u32, x) * 0x10000 + width, @as(u32, y) * 0x10000 + height, color);
|
||||
}
|
||||
|
||||
pub fn getScreenSize() packed struct(u32) { height: u16, width: u16 } {
|
||||
return @bitCast(syscall0(SYS.get_screen_size));
|
||||
}
|
||||
|
||||
pub fn waitEvent() Event {
|
||||
return @enumFromInt(syscall0(SYS.wait_event));
|
||||
}
|
||||
|
||||
pub fn checkEvent() Event {
|
||||
return @enumFromInt(syscall0(SYS.check_event));
|
||||
}
|
||||
|
||||
pub fn createThread(entry: *const fn () void, stack: []u8) u32 {
|
||||
return syscall3(SYS.create_thread, 1, @intFromPtr(entry), @intFromPtr(stack.ptr) + stack.len);
|
||||
}
|
||||
|
||||
pub fn debugWrite(byte: u8) void {
|
||||
_ = syscall2(SYS.board, 1, byte);
|
||||
}
|
||||
|
||||
pub fn debugWriteText(bytes: []const u8) void {
|
||||
for (bytes) |byte| {
|
||||
debugWrite(byte);
|
||||
}
|
||||
}
|
||||
|
||||
pub const EventsMask = packed struct(u32) {
|
||||
redraw: bool = true, // 0
|
||||
key: bool = true,
|
||||
button: bool = true,
|
||||
_reserved: bool = false,
|
||||
background: bool = false,
|
||||
mouse: bool = false,
|
||||
ipc: bool = false,
|
||||
network: bool = false,
|
||||
debug: bool = false,
|
||||
_unused: u23 = 0,
|
||||
};
|
||||
|
||||
pub fn setEventsMask(mask: EventsMask) EventsMask {
|
||||
return @bitCast(syscall1(SYS.set_events_mask, @bitCast(mask)));
|
||||
}
|
||||
|
||||
pub fn getSkinHeight() u16 {
|
||||
return @intCast(syscall1(SYS.style_settings, 4));
|
||||
}
|
||||
|
||||
pub fn screenPutImage(image: [*]const u32, width: u16, height: u16, x: u16, y: u16) void {
|
||||
_ = syscall3(SYS.screen_put_image, @intFromPtr(image), @as(u32, width) * 0x10000 + height, @as(u32, x) * 0x10000 + y);
|
||||
}
|
||||
|
||||
pub fn systemGetTimeCount() u32 {
|
||||
return syscall1(SYS.system_get, 9);
|
||||
}
|
||||
|
||||
pub fn getSysDate() u24 {
|
||||
return @intCast(syscall0(SYS.get_sys_date));
|
||||
}
|
||||
|
||||
pub fn mouseGetScreenPosition() packed struct(u32) { y: u16, x: u16 } {
|
||||
return @bitCast(syscall1(SYS.mouse_get, 0));
|
||||
}
|
||||
|
||||
pub fn mouseGetWindowPosition() packed struct(u32) { y: u16, x: u16 } {
|
||||
return @bitCast(syscall1(SYS.mouse_get, 1));
|
||||
}
|
||||
|
||||
pub fn loadCursorIndirect(image: *const [32 * 32]u32, spotx: u5, spoty: u5) u32 {
|
||||
return syscall3(SYS.mouse_get, 4, @intFromPtr(image), 0x0002 | (@as(u32, spotx) << 24) | (@as(u32, spoty) << 16));
|
||||
}
|
||||
|
||||
pub fn setCursor(cursor: u32) u32 {
|
||||
return syscall2(SYS.mouse_get, 5, cursor);
|
||||
}
|
||||
|
||||
pub const MouseEvents = packed struct(u32) {
|
||||
left_hold: bool = false,
|
||||
right_hold: bool = false,
|
||||
middle_hold: bool = false,
|
||||
button4_hold: bool = false,
|
||||
button5_hold: bool = false,
|
||||
_unused0: u3 = 0,
|
||||
left_pressed: bool = false,
|
||||
right_pressed: bool = false,
|
||||
middle_pressed: bool = false,
|
||||
_unused1: u4 = 0,
|
||||
vertical_scroll: bool = false,
|
||||
left_released: bool = false,
|
||||
right_released: bool = false,
|
||||
middle_released: bool = false,
|
||||
_unused2: u4 = 0,
|
||||
horizontal_scroll: bool = false,
|
||||
left_double_clicked: bool = false,
|
||||
_unused3: u7 = 0,
|
||||
};
|
||||
|
||||
pub fn mouseGetEvents() MouseEvents {
|
||||
return @bitCast(syscall1(SYS.mouse_get, 3));
|
||||
}
|
||||
|
||||
pub fn heapInit() u32 {
|
||||
return syscall1(SYS.sys_misc, 11);
|
||||
}
|
||||
|
||||
pub fn memAlloc(size: u32) *anyopaque {
|
||||
return @ptrFromInt(syscall2(SYS.sys_misc, 12, size));
|
||||
}
|
||||
|
||||
pub fn memFree(ptr: *anyopaque) void {
|
||||
_ = syscall2(SYS.sys_misc, 13, @intFromPtr(ptr));
|
||||
}
|
||||
|
||||
pub fn memRealloc(size: u32, ptr: *anyopaque) *anyopaque {
|
||||
return @ptrFromInt(syscall3(SYS.sys_misc, 20, size, @intFromPtr(ptr)));
|
||||
}
|
||||
|
||||
fn alloc(ctx: *anyopaque, len: usize, alignment: std.mem.Alignment, ret_addr: usize) ?[*]u8 {
|
||||
_ = ctx;
|
||||
_ = alignment;
|
||||
_ = ret_addr;
|
||||
return @ptrCast(memAlloc(len));
|
||||
}
|
||||
|
||||
fn free(ctx: *anyopaque, memory: []u8, alignment: std.mem.Alignment, ret_addr: usize) void {
|
||||
_ = ctx;
|
||||
_ = alignment;
|
||||
_ = ret_addr;
|
||||
memFree(@ptrCast(memory.ptr));
|
||||
}
|
||||
|
||||
fn resize(ctx: *anyopaque, memory: []u8, alignment: std.mem.Alignment, new_len: usize, ret_addr: usize) bool {
|
||||
_ = ctx;
|
||||
_ = alignment;
|
||||
_ = ret_addr;
|
||||
_ = memRealloc(new_len, @ptrCast(memory.ptr));
|
||||
return true;
|
||||
}
|
||||
|
||||
fn remap(ctx: *anyopaque, memory: []u8, alignment: std.mem.Alignment, new_len: usize, ret_addr: usize) ?[*]u8 {
|
||||
_ = ctx;
|
||||
_ = memory;
|
||||
_ = alignment;
|
||||
_ = new_len;
|
||||
_ = ret_addr;
|
||||
return null;
|
||||
}
|
||||
|
||||
pub const allocator: std.mem.Allocator = .{
|
||||
.ptr = undefined,
|
||||
.vtable = &.{
|
||||
.alloc = alloc,
|
||||
.free = free,
|
||||
.resize = resize,
|
||||
.remap = remap,
|
||||
},
|
||||
};
|
||||
|
||||
pub fn loadDriver(name: [*:0]const u8) u32 {
|
||||
return syscall2(SYS.sys_misc, 16, @intFromPtr(name));
|
||||
}
|
||||
|
||||
pub fn controlDriver(drv: u32, func: u32, in: ?[]const u32, out: ?[]const *anyopaque) u32 {
|
||||
const ioctl: packed struct(u192) {
|
||||
drv: u32,
|
||||
func: u32,
|
||||
inptr: u32,
|
||||
insize: u32,
|
||||
outptr: u32,
|
||||
outsize: u32,
|
||||
} = .{
|
||||
.drv = drv,
|
||||
.func = func,
|
||||
.inptr = if (in) |v| @intFromPtr(v.ptr) else 0,
|
||||
.insize = if (in) |v| v.len * 4 else 0,
|
||||
.outptr = if (out) |v| @intFromPtr(v.ptr) else 0,
|
||||
.outsize = if (out) |v| v.len * 4 else 0,
|
||||
};
|
||||
return syscall2(SYS.sys_misc, 17, @intFromPtr(&ioctl));
|
||||
}
|
||||
|
||||
pub const Signal = packed struct(u192) {
|
||||
kind: u32,
|
||||
data0: u32,
|
||||
data1: u32,
|
||||
data2: u32,
|
||||
data3: u32,
|
||||
data4: u32,
|
||||
};
|
||||
|
||||
pub fn waitSignal(sig: *Signal) void {
|
||||
_ = syscall2(SYS.sys_misc, 14, @intFromPtr(sig));
|
||||
}
|
||||
|
||||
pub const Sound = struct {
|
||||
drv: u32,
|
||||
|
||||
pub const Buffer = struct {
|
||||
drv: u32,
|
||||
handle: u32,
|
||||
|
||||
pub fn play(self: *const Buffer, flags: u32) void {
|
||||
_ = controlDriver(self.drv, 10, &.{ self.handle, flags }, null);
|
||||
}
|
||||
|
||||
pub fn set(self: *const Buffer, src: []u8, offset: u32) void {
|
||||
_ = controlDriver(self.drv, 8, &.{ self.handle, @intFromPtr(src.ptr), offset, src.len }, null);
|
||||
}
|
||||
};
|
||||
|
||||
pub fn init() Sound {
|
||||
return .{
|
||||
.drv = loadDriver("INFINITY"),
|
||||
};
|
||||
}
|
||||
|
||||
pub fn createBuffer(self: *const Sound, format: u32, size: u32) Buffer {
|
||||
var ret: u32 = 0;
|
||||
_ = controlDriver(self.drv, 1, &.{ format, size }, &.{&ret});
|
||||
return .{
|
||||
.drv = self.drv,
|
||||
.handle = ret,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
pub const InputMode = enum(u32) {
|
||||
normal = 0,
|
||||
scancodes = 1,
|
||||
};
|
||||
|
||||
pub fn setInputMode(mode: InputMode) void {
|
||||
_ = syscall2(SYS.keyboard, 1, @intFromEnum(mode));
|
||||
}
|
||||
|
||||
pub fn changeWindow(x: u32, y: u32, width: u32, height: u32) void {
|
||||
_ = syscall4(SYS.change_window, x, y, width, height);
|
||||
}
|
||||
|
||||
pub const ControlKeys = packed struct(u32) {
|
||||
left_shift: bool,
|
||||
right_shift: bool,
|
||||
left_ctrl: bool,
|
||||
right_ctrl: bool,
|
||||
left_alt: bool,
|
||||
right_alt: bool,
|
||||
caps_lock: bool,
|
||||
num_lock: bool,
|
||||
scroll_lock: bool,
|
||||
left_win: bool,
|
||||
right_win: bool,
|
||||
_unused: u21,
|
||||
};
|
||||
|
||||
pub fn getControlKeys() ControlKeys {
|
||||
return @bitCast(syscall1(SYS.keyboard, 3));
|
||||
}
|
||||
|
||||
const FileInfo = packed struct(u200) {
|
||||
subfn: u32,
|
||||
offset: u64,
|
||||
size: u32,
|
||||
buffer: u32,
|
||||
path0: u8 = 0,
|
||||
pathptr: *const u8,
|
||||
};
|
||||
|
||||
pub fn readFile(pathname: [*:0]const u8, offset: u64, buffer: []u8) !u32 {
|
||||
const info: FileInfo = .{
|
||||
.subfn = 0,
|
||||
.offset = offset,
|
||||
.size = buffer.len,
|
||||
.buffer = @intFromPtr(buffer.ptr),
|
||||
.pathptr = @ptrCast(pathname),
|
||||
};
|
||||
const err = asm volatile ("int $0x40"
|
||||
: [ret] "={eax}" (-> u32),
|
||||
: [number] "{eax}" (SYS.file),
|
||||
[info] "{ebx}" (&info),
|
||||
);
|
||||
const size = asm volatile (""
|
||||
: [ret] "={ebx}" (-> u32),
|
||||
);
|
||||
return switch (err) {
|
||||
0 => size,
|
||||
10 => error.AccessDenied,
|
||||
6 => size,
|
||||
else => error.Unexpected,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn createFile(pathname: [*:0]const u8, buffer: []u8) !u32 {
|
||||
const info: FileInfo = .{
|
||||
.subfn = 2,
|
||||
.offset = 0,
|
||||
.size = buffer.len,
|
||||
.buffer = @intFromPtr(buffer.ptr),
|
||||
.pathptr = @ptrCast(pathname),
|
||||
};
|
||||
const err = asm volatile ("int $0x40"
|
||||
: [ret] "={eax}" (-> u32),
|
||||
: [number] "{eax}" (SYS.file),
|
||||
[info] "{ebx}" (&info),
|
||||
);
|
||||
const size = asm volatile (""
|
||||
: [ret] "={ebx}" (-> u32),
|
||||
);
|
||||
return switch (err) {
|
||||
0 => size,
|
||||
10 => error.AccessDenied,
|
||||
8 => size,
|
||||
else => error.Unexpected,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn writeFile(pathname: [*:0]const u8, offset: u64, buffer: []u8) !u32 {
|
||||
const info: FileInfo = .{
|
||||
.subfn = 3,
|
||||
.offset = offset,
|
||||
.size = buffer.len,
|
||||
.buffer = @intFromPtr(buffer.ptr),
|
||||
.pathptr = @ptrCast(pathname),
|
||||
};
|
||||
const err = asm volatile ("int $0x40"
|
||||
: [ret] "={eax}" (-> u32),
|
||||
: [number] "{eax}" (SYS.file),
|
||||
[info] "{ebx}" (&info),
|
||||
);
|
||||
const size = asm volatile (""
|
||||
: [ret] "={ebx}" (-> u32),
|
||||
);
|
||||
return switch (err) {
|
||||
0 => size,
|
||||
10 => error.AccessDenied,
|
||||
5 => error.FileNotFound,
|
||||
else => error.Unexpected,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn fileGetSize(pathname: [*:0]const u8) !u64 {
|
||||
var ret: [10]u32 = undefined;
|
||||
const info: FileInfo = .{
|
||||
.subfn = 5,
|
||||
.offset = 0,
|
||||
.size = 0,
|
||||
.buffer = @intFromPtr(&ret),
|
||||
.pathptr = @ptrCast(pathname),
|
||||
};
|
||||
if (syscall1(SYS.file, @intFromPtr(&info)) != 0)
|
||||
return error.Unexpected;
|
||||
return ret[8] | (@as(u64, ret[9]) << 32);
|
||||
}
|
||||
|
||||
pub fn deleteFile(pathname: [*:0]const u8) !void {
|
||||
const info: FileInfo = .{
|
||||
.subfn = 8,
|
||||
.offset = 0,
|
||||
.size = 0,
|
||||
.buffer = 0,
|
||||
.pathptr = @ptrCast(pathname),
|
||||
};
|
||||
const err = syscall1(SYS.file, @intFromPtr(&info));
|
||||
if (err != 0)
|
||||
return error.Unexpected;
|
||||
}
|
||||
|
||||
pub const File = struct {
|
||||
pathname: [*:0]const u8,
|
||||
offset: u64 = 0,
|
||||
|
||||
pub fn reader(file: *File) std.io.GenericReader(*File, anyerror, struct {
|
||||
fn read(context: *File, buffer: []u8) !usize {
|
||||
const size = try readFile(context.pathname, context.offset, buffer);
|
||||
context.offset += size;
|
||||
return size;
|
||||
}
|
||||
}.read) {
|
||||
return .{ .context = file };
|
||||
}
|
||||
};
|
||||
|
||||
pub const BlitterFlags = packed struct(u32) {
|
||||
rop: u4 = 0,
|
||||
background: bool = false,
|
||||
transparent: bool = false,
|
||||
reserved1: u23 = 0,
|
||||
client_relative: bool = true,
|
||||
reserved2: u2 = 0,
|
||||
};
|
||||
|
||||
pub fn blitter(dstx: u32, dsty: u32, dstw: u32, dsth: u32, srcx: u32, srcy: u32, srcw: u32, srch: u32, src: *const u8, pitch: u32, flags: BlitterFlags) void {
|
||||
_ = syscall2(SYS.blitter, @bitCast(flags), @intFromPtr(&[_]u32{ dstx, dsty, dstw, dsth, srcx, srcy, srcw, srch, @intFromPtr(src), pitch }));
|
||||
}
|
||||
|
||||
pub const DebugWriter = std.io.GenericWriter(void, anyerror, struct {
|
||||
fn write(context: void, bytes: []const u8) !usize {
|
||||
_ = context;
|
||||
debugWriteText(bytes);
|
||||
return bytes.len;
|
||||
}
|
||||
}.write);
|
||||
|
||||
pub const debug_writer: DebugWriter = .{ .context = {} };
|
||||
42
programs/emulator/uxn/src/linker.ld
Normal file
42
programs/emulator/uxn/src/linker.ld
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2025 iyzsong@envs.net
|
||||
*
|
||||
* SPDX-License-Identifier: MPL-2.0
|
||||
*/
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.text 0x00000000 :
|
||||
{
|
||||
/* MENUET01 header */
|
||||
LONG(0x554e454d);
|
||||
LONG(0x31305445);
|
||||
LONG(1);
|
||||
LONG(_start);
|
||||
LONG(_image_end);
|
||||
LONG(_memory_end);
|
||||
LONG(_stack_top);
|
||||
LONG(_cmdline);
|
||||
LONG(0);
|
||||
*(.text)
|
||||
*(.text.*)
|
||||
}
|
||||
.rodata : ALIGN(8)
|
||||
{
|
||||
*(.rodata)
|
||||
*(.rodata.*)
|
||||
}
|
||||
.data : ALIGN(8)
|
||||
{
|
||||
*(.data)
|
||||
}
|
||||
_image_end = .;
|
||||
|
||||
.bss : ALIGN(8)
|
||||
{
|
||||
*(.bss)
|
||||
. = . + 4K;
|
||||
_stack_top = .;
|
||||
}
|
||||
_memory_end = .;
|
||||
}
|
||||
418
programs/emulator/uxn/src/main.zig
Normal file
418
programs/emulator/uxn/src/main.zig
Normal file
@@ -0,0 +1,418 @@
|
||||
// SPDX-FileCopyrightText: 2025 iyzsong@envs.net
|
||||
//
|
||||
// SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
const std = @import("std");
|
||||
const kos = @import("kolibri.zig");
|
||||
const uxn = @import("uxn-core");
|
||||
const varvara = @import("uxn-varvara");
|
||||
|
||||
const allocator = kos.allocator;
|
||||
export var _cmdline: [1024]u8 = undefined;
|
||||
|
||||
pub const std_options: std.Options = .{
|
||||
.log_level = .info,
|
||||
.logFn = struct {
|
||||
fn log(comptime level: std.log.Level, comptime scope: @Type(.enum_literal), comptime format: []const u8, args: anytype) void {
|
||||
_ = level;
|
||||
_ = scope;
|
||||
kos.debug_writer.print(format, args) catch return;
|
||||
}
|
||||
}.log,
|
||||
};
|
||||
|
||||
const VarvaraDefault = varvara.VarvaraSystem(kos.DebugWriter, kos.DebugWriter);
|
||||
const emu = struct {
|
||||
var cpu: uxn.Cpu = undefined;
|
||||
var sys: VarvaraDefault = undefined;
|
||||
var rom: *[0x10000]u8 = undefined;
|
||||
var pixels: []u8 = undefined;
|
||||
var screen_width: u32 = undefined;
|
||||
var screen_height: u32 = undefined;
|
||||
var null_cursor: u32 = undefined;
|
||||
var hide_cursor: bool = false;
|
||||
var audio_thread: ?u32 = null;
|
||||
var scale: u4 = 1;
|
||||
|
||||
fn init(rompath: [*:0]const u8) !void {
|
||||
const screen = &emu.sys.screen_device;
|
||||
var rom_file = kos.File{ .pathname = rompath };
|
||||
emu.rom = try uxn.loadRom(allocator, rom_file.reader());
|
||||
emu.cpu = uxn.Cpu.init(emu.rom);
|
||||
emu.sys = try VarvaraDefault.init(allocator, kos.debug_writer, kos.debug_writer);
|
||||
emu.cpu.device_intercept = struct {
|
||||
var file_offsets: [2]u64 = .{ 0, 0 };
|
||||
|
||||
fn bcd8(x: u8) u8 {
|
||||
return (x & 0xf) + 10 * ((x & 0xf0) >> 4);
|
||||
}
|
||||
|
||||
fn getFilePortSlice(dev: *varvara.file.File, comptime port: comptime_int) []u8 {
|
||||
const ports = varvara.file.ports;
|
||||
const ptr: usize = dev.loadPort(u16, &cpu, port);
|
||||
|
||||
return if (port == ports.name)
|
||||
std.mem.sliceTo(cpu.mem[ptr..], 0x00)
|
||||
else
|
||||
return cpu.mem[ptr..ptr +| dev.loadPort(u16, &cpu, ports.length)];
|
||||
}
|
||||
|
||||
pub fn intercept(self: *uxn.Cpu, addr: u8, kind: uxn.Cpu.InterceptKind, data: ?*anyopaque) !void {
|
||||
_ = data;
|
||||
const port: u4 = @truncate(addr & 0x0f);
|
||||
if (audio_thread == null and addr >= 0x30 and addr < 0x70) {
|
||||
audio_thread = kos.createThread(&audio, allocator.alloc(u8, 32 * 1024) catch unreachable);
|
||||
}
|
||||
switch (addr >> 4) {
|
||||
0xa, 0xb => {
|
||||
if (kind != .output)
|
||||
return;
|
||||
|
||||
const idx = (addr >> 4) - 0xa;
|
||||
const dev = &sys.file_devices[idx];
|
||||
const ports = varvara.file.ports;
|
||||
switch (port) {
|
||||
ports.stat + 1 => {
|
||||
// TODO: file/directory stat
|
||||
dev.storePort(u16, &cpu, ports.success, 0);
|
||||
},
|
||||
ports.delete => {
|
||||
const name_slice = getFilePortSlice(dev, ports.name);
|
||||
_ = kos.deleteFile(@ptrCast(name_slice)) catch {};
|
||||
dev.storePort(u16, &cpu, ports.success, 0);
|
||||
},
|
||||
ports.name + 1 => {
|
||||
file_offsets[idx] = 0;
|
||||
dev.storePort(u16, &cpu, ports.success, 1);
|
||||
},
|
||||
ports.read + 1 => {
|
||||
const name_slice = getFilePortSlice(dev, ports.name);
|
||||
const data_slice = getFilePortSlice(dev, ports.read);
|
||||
const ret: u32 = kos.readFile(@ptrCast(name_slice), file_offsets[idx], data_slice) catch 0;
|
||||
file_offsets[idx] += ret;
|
||||
dev.storePort(u16, &cpu, ports.success, @intCast(ret));
|
||||
},
|
||||
ports.write + 1 => {
|
||||
const append = dev.loadPort(u8, &cpu, ports.append) == 0x01;
|
||||
const pathname: [*:0]const u8 = @ptrCast(getFilePortSlice(dev, ports.name));
|
||||
const buffer = getFilePortSlice(dev, ports.write);
|
||||
var ret: u32 = 0;
|
||||
if (append) {
|
||||
const offset: u32 = @intCast(kos.fileGetSize(pathname) catch 0);
|
||||
ret = kos.writeFile(pathname, offset, buffer) catch |err| blk: {
|
||||
if (err == error.FileNotFound) {
|
||||
break :blk kos.createFile(pathname, buffer) catch 0;
|
||||
} else {
|
||||
break :blk 0;
|
||||
}
|
||||
};
|
||||
} else {
|
||||
ret = kos.createFile(pathname, buffer) catch 0;
|
||||
}
|
||||
dev.storePort(u16, &cpu, ports.success, @intCast(ret));
|
||||
},
|
||||
else => {},
|
||||
}
|
||||
},
|
||||
0xc => {
|
||||
if (kind != .input)
|
||||
return;
|
||||
|
||||
const dev = &sys.datetime_device;
|
||||
const date = kos.getSysDate();
|
||||
const time = kos.getSysTime();
|
||||
switch (port) {
|
||||
0x0, 0x1 => {
|
||||
const year: u8 = bcd8(@truncate(date & 0xff));
|
||||
dev.storePort(u16, &cpu, 0x0, @as(u16, 2000) + bcd8(year));
|
||||
},
|
||||
0x02 => {
|
||||
const month: u8 = bcd8(@truncate((date & 0xff00) >> 8));
|
||||
dev.storePort(u8, &cpu, port, month);
|
||||
},
|
||||
0x03 => {
|
||||
const day: u8 = bcd8(@truncate((date & 0xff0000) >> 16));
|
||||
dev.storePort(u8, &cpu, port, day);
|
||||
},
|
||||
0x04 => {
|
||||
const hour: u8 = bcd8(@truncate(time & 0xff));
|
||||
dev.storePort(u8, &cpu, port, hour);
|
||||
},
|
||||
0x05 => {
|
||||
const minute: u8 = bcd8(@truncate((time & 0xff00) >> 8));
|
||||
dev.storePort(u8, &cpu, port, minute);
|
||||
},
|
||||
0x06 => {
|
||||
const second: u8 = bcd8(@truncate((time & 0xff0000) >> 16));
|
||||
dev.storePort(u8, &cpu, port, second);
|
||||
},
|
||||
else => {},
|
||||
}
|
||||
},
|
||||
else => try emu.sys.intercept(self, addr, kind),
|
||||
}
|
||||
}
|
||||
}.intercept;
|
||||
emu.cpu.output_intercepts = varvara.full_intercepts.output;
|
||||
emu.cpu.input_intercepts = varvara.full_intercepts.input;
|
||||
|
||||
try emu.cpu.evaluateVector(0x0100);
|
||||
screen_width = screen.width * emu.scale;
|
||||
screen_height = screen.height * emu.scale;
|
||||
emu.pixels = try allocator.alloc(u8, @as(usize, 4) * screen_width * screen_height);
|
||||
}
|
||||
|
||||
fn exit() void {
|
||||
if (audio_thread) |tid| {
|
||||
kos.terminateThreadId(tid);
|
||||
}
|
||||
kos.terminateProcess();
|
||||
}
|
||||
|
||||
fn audio() void {
|
||||
var samples: [8192]i16 = undefined;
|
||||
var sig: kos.Signal = undefined;
|
||||
const buf = kos.Sound.init().createBuffer(3 | 0x10000000, 0);
|
||||
buf.play(0);
|
||||
while (true) {
|
||||
kos.waitSignal(&sig);
|
||||
if (sig.kind != 0xFF000001) continue;
|
||||
@memset(&samples, 0);
|
||||
for (0..samples.len / 512) |i| {
|
||||
const w = samples[i * 512 .. (i + 1) * 512];
|
||||
for (&sys.audio_devices) |*poly| {
|
||||
if (poly.duration <= 0) {
|
||||
poly.evaluateFinishVector(&cpu) catch unreachable;
|
||||
}
|
||||
poly.updateDuration();
|
||||
poly.renderAudio(w);
|
||||
}
|
||||
}
|
||||
for (0..samples.len) |i| {
|
||||
samples[i] <<= 6;
|
||||
}
|
||||
buf.set(@ptrCast(&samples), sig.data2);
|
||||
}
|
||||
}
|
||||
|
||||
fn update() !void {
|
||||
const screen = &sys.screen_device;
|
||||
const colors = &sys.system_device.colors;
|
||||
if (sys.system_device.exit_code) |_| {
|
||||
exit();
|
||||
}
|
||||
if (screen_width != screen.width * scale or screen_height != screen.height * scale) {
|
||||
const skin_height = kos.getSkinHeight();
|
||||
allocator.free(emu.pixels);
|
||||
screen_width = screen.width * scale;
|
||||
screen_height = screen.height * scale;
|
||||
emu.pixels = try allocator.alloc(u8, @as(usize, 4) * screen_width * screen_height);
|
||||
kos.changeWindow(100, 100, screen_width + 9, screen_height + skin_height + 4);
|
||||
}
|
||||
try screen.evaluateFrame(&cpu);
|
||||
if (screen.dirty_region) |region| {
|
||||
for (region.y0..region.y1) |y| {
|
||||
for (region.x0..region.x1) |x| {
|
||||
const idx = y * screen.width + x;
|
||||
const pal = (@as(u4, screen.foreground[idx]) << 2) | screen.background[idx];
|
||||
const color = colors[if ((pal >> 2) > 0) (pal >> 2) else (pal & 0x3)];
|
||||
for (0..scale) |sy| {
|
||||
for (0..scale) |sx| {
|
||||
pixels[4 * ((y * scale + sy) * screen.width * scale + (x * scale + sx)) + 2] = color.r;
|
||||
pixels[4 * ((y * scale + sy) * screen.width * scale + (x * scale + sx)) + 1] = color.g;
|
||||
pixels[4 * ((y * scale + sy) * screen.width * scale + (x * scale + sx)) + 0] = color.b;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
const ix = region.x0 * scale;
|
||||
const iy = region.y0 * scale;
|
||||
const iw = (region.x1 - region.x0) * scale;
|
||||
const ih = (region.y1 - region.y0) * scale;
|
||||
kos.blitter(ix, iy, iw, ih, ix, iy, iw, ih, @ptrCast(emu.pixels.ptr), screen.width * scale * 4, .{});
|
||||
screen.dirty_region = null;
|
||||
}
|
||||
}
|
||||
|
||||
fn changeScale() void {
|
||||
const screen = &sys.screen_device;
|
||||
scale = switch (scale) {
|
||||
1 => 2,
|
||||
2 => 3,
|
||||
3 => 1,
|
||||
else => 1,
|
||||
};
|
||||
screen.forceRedraw();
|
||||
}
|
||||
};
|
||||
|
||||
export fn _start() noreturn {
|
||||
const cursor: [32 * 32]u32 = .{0} ** (32 * 32);
|
||||
var counter: u32 = 0;
|
||||
var last_tick = kos.systemGetTimeCount();
|
||||
|
||||
_ = kos.heapInit();
|
||||
_ = kos.setEventsMask(.{ .mouse = true });
|
||||
kos.setInputMode(.scancodes);
|
||||
emu.null_cursor = kos.loadCursorIndirect(&cursor, 0, 0);
|
||||
emu.init(@ptrCast(&_cmdline)) catch unreachable;
|
||||
|
||||
const screen = &emu.sys.screen_device;
|
||||
const controller = &emu.sys.controller_device;
|
||||
|
||||
const callbacks = struct {
|
||||
fn redraw() void {
|
||||
const skin_height = kos.getSkinHeight();
|
||||
kos.beginDraw();
|
||||
kos.createWindow(300, 300, screen.width * emu.scale + 9, screen.height * emu.scale + skin_height + 4, 0x000000, .{ .skinned = true, .no_fill = true, .relative_coordinates = true }, "UXN");
|
||||
kos.endDraw();
|
||||
}
|
||||
|
||||
fn key() void {
|
||||
const symtab: [0x80]u8 = .{
|
||||
// 0x0*
|
||||
0, 27, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', 8, '\t',
|
||||
// 0x1*
|
||||
'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\r', 0, 'a', 's',
|
||||
// 0x2*
|
||||
'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'', '`', 0, '\\', 'z', 'x', 'c', 'v',
|
||||
// 0x3*
|
||||
'b', 'n', 'm', ',', '.', '/', 0, 0, 0, ' ', 0, 0, 0, 0, 0, 0,
|
||||
// 0x00* + SHIFT
|
||||
0, 27, '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', 8, '\t',
|
||||
// 0x10* + SHIFT
|
||||
'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '{', '}', '\r', 0, 'A', 'S',
|
||||
// 0x20* + SHIFT
|
||||
'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', '"', '~', 0, '|', 'Z', 'X', 'C', 'V',
|
||||
// 0x30* + SHIFT,
|
||||
'B', 'N', 'M', '<', '>', '?', 0, 0, 0, ' ', 0, 0, 0, 0, 0, 0,
|
||||
};
|
||||
const scancode1 = kos.getKey().key;
|
||||
const input: ?union(enum) {
|
||||
button: struct {
|
||||
flags: varvara.controller.ButtonFlags,
|
||||
pressed: bool,
|
||||
},
|
||||
key: u8,
|
||||
} = switch (scancode1) {
|
||||
0xe0 => blk: {
|
||||
const scancode2 = kos.getKey().key;
|
||||
break :blk switch (scancode2) {
|
||||
0x1d => .{ .button = .{ .flags = .{ .ctrl = true }, .pressed = true } },
|
||||
0x9d => .{ .button = .{ .flags = .{ .ctrl = true }, .pressed = false } },
|
||||
0x38 => .{ .button = .{ .flags = .{ .alt = true }, .pressed = true } },
|
||||
0xb8 => .{ .button = .{ .flags = .{ .alt = true }, .pressed = false } },
|
||||
0x47 => .{ .button = .{ .flags = .{ .start = true }, .pressed = true } },
|
||||
0xc7 => .{ .button = .{ .flags = .{ .start = true }, .pressed = false } },
|
||||
0x48 => .{ .button = .{ .flags = .{ .up = true }, .pressed = true } },
|
||||
0xc8 => .{ .button = .{ .flags = .{ .up = true }, .pressed = false } },
|
||||
0x50 => .{ .button = .{ .flags = .{ .down = true }, .pressed = true } },
|
||||
0xd0 => .{ .button = .{ .flags = .{ .down = true }, .pressed = false } },
|
||||
0x4b => .{ .button = .{ .flags = .{ .left = true }, .pressed = true } },
|
||||
0xcb => .{ .button = .{ .flags = .{ .left = true }, .pressed = false } },
|
||||
0x4d => .{ .button = .{ .flags = .{ .right = true }, .pressed = true } },
|
||||
0xcd => .{ .button = .{ .flags = .{ .right = true }, .pressed = false } },
|
||||
else => null,
|
||||
};
|
||||
},
|
||||
0x3b => blk: {
|
||||
emu.changeScale();
|
||||
break :blk null;
|
||||
},
|
||||
0x1d => .{ .button = .{ .flags = .{ .ctrl = true }, .pressed = true } },
|
||||
0x9d => .{ .button = .{ .flags = .{ .ctrl = true }, .pressed = false } },
|
||||
0x38 => .{ .button = .{ .flags = .{ .alt = true }, .pressed = true } },
|
||||
0xb8 => .{ .button = .{ .flags = .{ .alt = true }, .pressed = false } },
|
||||
0x2a, 0x36 => .{ .button = .{ .flags = .{ .shift = true }, .pressed = true } },
|
||||
0xaa, 0xb6 => .{ .button = .{ .flags = .{ .shift = true }, .pressed = false } },
|
||||
else => blk: {
|
||||
if (scancode1 > 0x40) {
|
||||
break :blk null;
|
||||
}
|
||||
const ctrls = kos.getControlKeys();
|
||||
const k = if (ctrls.left_shift or ctrls.right_shift) symtab[scancode1 + 0x40] else symtab[scancode1];
|
||||
break :blk if (k > 0) .{ .key = k } else null;
|
||||
},
|
||||
};
|
||||
|
||||
if (input) |v| {
|
||||
switch (v) {
|
||||
.button => {
|
||||
if (v.button.pressed) {
|
||||
controller.pressButtons(&emu.cpu, v.button.flags, 0) catch unreachable;
|
||||
} else {
|
||||
controller.releaseButtons(&emu.cpu, v.button.flags, 0) catch unreachable;
|
||||
}
|
||||
},
|
||||
.key => {
|
||||
controller.pressKey(&emu.cpu, v.key) catch unreachable;
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn button() void {
|
||||
const btn = kos.getButton();
|
||||
if (btn >> 8 == 1)
|
||||
emu.exit();
|
||||
}
|
||||
|
||||
fn mouse() void {
|
||||
const dev = &emu.sys.mouse_device;
|
||||
const pos = kos.mouseGetWindowPosition();
|
||||
const events = kos.mouseGetEvents();
|
||||
const mouse_pressed: varvara.mouse.ButtonFlags = .{
|
||||
.left = events.left_pressed,
|
||||
.middle = events.middle_pressed,
|
||||
.right = events.right_pressed,
|
||||
._unused = 0,
|
||||
};
|
||||
const mouse_released: varvara.mouse.ButtonFlags = .{
|
||||
.left = events.left_released,
|
||||
.middle = events.middle_released,
|
||||
.right = events.right_released,
|
||||
._unused = 0,
|
||||
};
|
||||
if (emu.hide_cursor and pos.y > emu.screen_height) {
|
||||
_ = kos.setCursor(0);
|
||||
emu.hide_cursor = false;
|
||||
}
|
||||
if (!emu.hide_cursor and pos.y < emu.screen_height) {
|
||||
_ = kos.setCursor(emu.null_cursor);
|
||||
emu.hide_cursor = true;
|
||||
}
|
||||
dev.updatePosition(&emu.cpu, pos.x / emu.scale, pos.y / emu.scale) catch unreachable;
|
||||
if (@as(u8, @bitCast(mouse_pressed)) > 0) {
|
||||
dev.pressButtons(&emu.cpu, mouse_pressed) catch unreachable;
|
||||
}
|
||||
if (@as(u8, @bitCast(mouse_released)) > 0) {
|
||||
dev.releaseButtons(&emu.cpu, mouse_released) catch unreachable;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
callbacks.redraw();
|
||||
while (true) {
|
||||
while (true) {
|
||||
const event = kos.checkEvent();
|
||||
switch (event) {
|
||||
.none => break,
|
||||
.redraw => callbacks.redraw(),
|
||||
.key => callbacks.key(),
|
||||
.button => callbacks.button(),
|
||||
.mouse => callbacks.mouse(),
|
||||
else => {},
|
||||
}
|
||||
}
|
||||
const tick = kos.systemGetTimeCount();
|
||||
counter += (tick - last_tick) * 3;
|
||||
last_tick = tick;
|
||||
|
||||
if (counter > 5) {
|
||||
counter -= 5;
|
||||
emu.update() catch unreachable;
|
||||
} else {
|
||||
kos.sleep(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
programs/emulator/uxn/uxn
Executable file
BIN
programs/emulator/uxn/uxn
Executable file
Binary file not shown.
@@ -1,4 +1,4 @@
|
||||
// Èñõîäíèê èãðû "Êòî õî÷åò áûòü ìèëëèîíåðîì?" äëÿ Êîëèáðè ÎÑ
|
||||
// Èñõîäíèê èãðû "Êòî õî÷åò áûòü ìèëëèîíåðîì?" äëÿ ÊîëèáðèÎÑ
|
||||
// by Àíäðåé Ìèõàéëîâè÷ (Dron2004)
|
||||
|
||||
#include <kosSyst.h>
|
||||
@@ -83,7 +83,7 @@ void getFilePathName(){
|
||||
for (tmpcnt=0; tmpcnt<strlen(ourfilename); tmpcnt++){
|
||||
filepathname[tmpcnt+lastslashindex+1]=ourfilename[tmpcnt];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void prepareFileData() { //Ïðåäâàðèòåëüíûå ïîäñ÷¸òû
|
||||
@@ -105,22 +105,22 @@ void loadquestion(){
|
||||
int qcodee;
|
||||
|
||||
int skipsleft;
|
||||
|
||||
|
||||
regenerate:
|
||||
qcodee=(rtlRand()%questioncount)+1;
|
||||
|
||||
qcodee=(rtlRand()%questioncount)+1;
|
||||
|
||||
Byte inputbyte[1]={0x00};
|
||||
|
||||
|
||||
//Ïåðâûé ïðîõîä - ïðîâåðÿåì ñëîæíîñòü è ñ÷èòàåì äëèíû ñòðîê
|
||||
tempquestionlength = 0;
|
||||
tempanswerAlength = 0;
|
||||
tempanswerBlength = 0;
|
||||
tempanswerClength = 0;
|
||||
tempanswerDlength = 0;
|
||||
|
||||
|
||||
skipsleft=qcodee;
|
||||
CKosFile basefile(filepathname);
|
||||
|
||||
skipsleft=qcodee;
|
||||
CKosFile basefile(filepathname);
|
||||
//Íàéä¸ì òî ìåñòî, îòêóäà íà÷èíàåòñÿ íàø âîïðîñ
|
||||
while (skipsleft>0){
|
||||
basefile.Read (inputbyte,1);
|
||||
@@ -132,7 +132,7 @@ regenerate:
|
||||
|
||||
//Ïðîâåðèì ñëîæíîñòü
|
||||
basefile.Read (inputbyte,1);
|
||||
|
||||
|
||||
// Íàì íóæíî, ÷òîáû ñëîæíîñòü çàäàâàåìîãî âîïðîñà ñîîòâåòñòâîâàëà íîìåðó çàäàâàåìîãî
|
||||
// â èãðå âîïðîñà (íà êàêóþ ñóììó ìû èãðàåì; âîïðîñ íà 1000000 äîëæåí áûòü ïîñëîæíåå,
|
||||
// ÷åì âîïðîñ íà 100 ðóáëåé :-)))
|
||||
@@ -155,7 +155,7 @@ regenerate:
|
||||
goto regenerate;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
for (int counter=0; counter <currentquestion; counter++){
|
||||
if (askedquestions[counter]==qcodee){goto regenerate;}
|
||||
@@ -163,7 +163,7 @@ regenerate:
|
||||
|
||||
|
||||
askedquestions[currentquestion-1]=qcodee;
|
||||
|
||||
|
||||
|
||||
inputbyte[0]=0x00;
|
||||
//Ñ÷èòàåì, ñêîëüêî ñèìâîëîâ â âîïðîñå
|
||||
@@ -210,12 +210,12 @@ regenerate:
|
||||
tempanswerD = new char[tempanswerDlength+1];
|
||||
|
||||
|
||||
|
||||
|
||||
// ÂÒÎÐÎÉ ÏÐÎÕÎÄ: ÔÎÐÌÈÐÓÅÌ Â ÏÀÌßÒÈ ÂÎÏÐÎÑ È ÂÀÐÈÀÍÒÛ ÎÒÂÅÒÀ
|
||||
CKosFile basefile2(filepathname);
|
||||
inputbyte[0]=0x00;
|
||||
skipsleft=qcodee;
|
||||
|
||||
skipsleft=qcodee;
|
||||
|
||||
//Íàéä¸ì òî ìåñòî, îòêóäà íà÷èíàåòñÿ íàø âîïðîñ
|
||||
while (skipsleft>0){
|
||||
basefile2.Read (inputbyte,1);
|
||||
@@ -224,11 +224,11 @@ regenerate:
|
||||
}
|
||||
inputbyte[0]=0x00;
|
||||
}
|
||||
|
||||
|
||||
basefile2.Read (inputbyte,1); // Ýòî - ñëîæíîñòü âîïðîñà. Ìû å¸ óæå ïðîâåðèëè.
|
||||
|
||||
//×èòàåì âîïðîñ
|
||||
int currentbyte=0;
|
||||
int currentbyte=0;
|
||||
while (inputbyte[0]!=0x01){
|
||||
basefile2.Read (inputbyte,1);
|
||||
if (inputbyte[0]!=0x01){tempquestion[currentbyte]=inputbyte[0];}
|
||||
@@ -237,7 +237,7 @@ regenerate:
|
||||
tempquestion[currentbyte]='\n';
|
||||
|
||||
//×èòàåì îòâåò A
|
||||
currentbyte=0;
|
||||
currentbyte=0;
|
||||
while (inputbyte[0]!=0x02){
|
||||
basefile2.Read (inputbyte,1);
|
||||
if (inputbyte[0]!=0x02){tempanswerA[currentbyte]=inputbyte[0];}
|
||||
@@ -246,7 +246,7 @@ regenerate:
|
||||
tempanswerA[currentbyte]='\n';
|
||||
|
||||
//×èòàåì îòâåò B
|
||||
currentbyte=0;
|
||||
currentbyte=0;
|
||||
while (inputbyte[0]!=0x03){
|
||||
basefile2.Read (inputbyte,1);
|
||||
if (inputbyte[0]!=0x03){tempanswerB[currentbyte]=inputbyte[0];}
|
||||
@@ -255,7 +255,7 @@ regenerate:
|
||||
tempanswerB[currentbyte]='\n';
|
||||
|
||||
//×èòàåì îòâåò C
|
||||
currentbyte=0;
|
||||
currentbyte=0;
|
||||
while (inputbyte[0]!=0x04){
|
||||
basefile2.Read (inputbyte,1);
|
||||
if (inputbyte[0]!=0x04){tempanswerC[currentbyte]=inputbyte[0];}
|
||||
@@ -264,7 +264,7 @@ regenerate:
|
||||
tempanswerC[currentbyte]='\n';
|
||||
|
||||
//×èòàåì îòâåò D
|
||||
currentbyte=0;
|
||||
currentbyte=0;
|
||||
while (inputbyte[0]!=0x08){
|
||||
basefile2.Read (inputbyte,1);
|
||||
if (inputbyte[0]!=0x08){tempanswerD[currentbyte]=inputbyte[0];}
|
||||
@@ -275,7 +275,7 @@ regenerate:
|
||||
basefile2.Read (inputbyte,1); // Ýòî-ïðàâèëüíûé îòâåò
|
||||
tempcorrectanswer=inputbyte[0];
|
||||
// ÂѨ!!!!!! ÃÎÒÎÂÎ!!!! ÓÐÀ!
|
||||
|
||||
|
||||
//Ñ÷èòàëè. Òåïåðü íàäî ïåðåòàñîâàòü âîïðîñû.
|
||||
questionlength = 0;
|
||||
answerAlength = 0;
|
||||
@@ -297,7 +297,7 @@ regenerate:
|
||||
bool answerDfree = true;
|
||||
|
||||
int tmpvalue=0;
|
||||
|
||||
|
||||
//Ïåðâûé âîïðîñ
|
||||
regenA:
|
||||
tmpvalue = (rtlRand() % 4) +1;
|
||||
@@ -306,7 +306,7 @@ regenA:
|
||||
answerAfree=false;
|
||||
answerAlength=tempanswerAlength;
|
||||
answerA= new char [answerAlength];
|
||||
|
||||
|
||||
for (int c=0; c<answerAlength; c++){
|
||||
answerA[c]=tempanswerA[c];
|
||||
}
|
||||
@@ -322,7 +322,7 @@ regenA:
|
||||
answerBfree=false;
|
||||
answerBlength=tempanswerAlength;
|
||||
answerB= new char [answerBlength];
|
||||
|
||||
|
||||
for (int c=0; c<answerBlength; c++){
|
||||
answerB[c]=tempanswerA[c];
|
||||
}
|
||||
@@ -338,7 +338,7 @@ regenA:
|
||||
answerCfree=false;
|
||||
answerClength=tempanswerAlength;
|
||||
answerC= new char [answerClength];
|
||||
|
||||
|
||||
for (int c=0; c<answerClength; c++){
|
||||
answerC[c]=tempanswerA[c];
|
||||
}
|
||||
@@ -354,7 +354,7 @@ regenA:
|
||||
answerDfree=false;
|
||||
answerDlength=tempanswerAlength;
|
||||
answerD= new char [answerDlength];
|
||||
|
||||
|
||||
for (int c=0; c<answerDlength; c++){
|
||||
answerD[c]=tempanswerA[c];
|
||||
}
|
||||
@@ -374,7 +374,7 @@ regenB:
|
||||
answerAfree=false;
|
||||
answerAlength=tempanswerBlength;
|
||||
answerA= new char [answerAlength];
|
||||
|
||||
|
||||
for (int c=0; c<answerAlength; c++){
|
||||
answerA[c]=tempanswerB[c];
|
||||
}
|
||||
@@ -390,7 +390,7 @@ regenB:
|
||||
answerBfree=false;
|
||||
answerBlength=tempanswerBlength;
|
||||
answerB= new char [answerBlength];
|
||||
|
||||
|
||||
for (int c=0; c<answerBlength; c++){
|
||||
answerB[c]=tempanswerB[c];
|
||||
}
|
||||
@@ -406,7 +406,7 @@ regenB:
|
||||
answerCfree=false;
|
||||
answerClength=tempanswerBlength;
|
||||
answerC= new char [answerClength];
|
||||
|
||||
|
||||
for (int c=0; c<answerClength; c++){
|
||||
answerC[c]=tempanswerB[c];
|
||||
}
|
||||
@@ -422,7 +422,7 @@ regenB:
|
||||
answerDfree=false;
|
||||
answerDlength=tempanswerBlength;
|
||||
answerD= new char [answerDlength];
|
||||
|
||||
|
||||
for (int c=0; c<answerDlength; c++){
|
||||
answerD[c]=tempanswerB[c];
|
||||
}
|
||||
@@ -442,7 +442,7 @@ regenC:
|
||||
answerAfree=false;
|
||||
answerAlength=tempanswerClength;
|
||||
answerA= new char [answerAlength];
|
||||
|
||||
|
||||
for (int c=0; c<answerAlength; c++){
|
||||
answerA[c]=tempanswerC[c];
|
||||
}
|
||||
@@ -458,7 +458,7 @@ regenC:
|
||||
answerBfree=false;
|
||||
answerBlength=tempanswerClength;
|
||||
answerB= new char [answerBlength];
|
||||
|
||||
|
||||
for (int c=0; c<answerBlength; c++){
|
||||
answerB[c]=tempanswerC[c];
|
||||
}
|
||||
@@ -474,7 +474,7 @@ regenC:
|
||||
answerCfree=false;
|
||||
answerClength=tempanswerClength;
|
||||
answerC= new char [answerClength];
|
||||
|
||||
|
||||
for (int c=0; c<answerClength; c++){
|
||||
answerC[c]=tempanswerC[c];
|
||||
}
|
||||
@@ -490,7 +490,7 @@ regenC:
|
||||
answerDfree=false;
|
||||
answerDlength=tempanswerClength;
|
||||
answerD= new char [answerDlength];
|
||||
|
||||
|
||||
for (int c=0; c<answerDlength; c++){
|
||||
answerD[c]=tempanswerC[c];
|
||||
}
|
||||
@@ -510,7 +510,7 @@ regenD:
|
||||
answerAfree=false;
|
||||
answerAlength=tempanswerDlength;
|
||||
answerA= new char [answerAlength];
|
||||
|
||||
|
||||
for (int c=0; c<answerAlength; c++){
|
||||
answerA[c]=tempanswerD[c];
|
||||
}
|
||||
@@ -526,7 +526,7 @@ regenD:
|
||||
answerBfree=false;
|
||||
answerBlength=tempanswerDlength;
|
||||
answerB= new char [answerBlength];
|
||||
|
||||
|
||||
for (int c=0; c<answerBlength; c++){
|
||||
answerB[c]=tempanswerD[c];
|
||||
}
|
||||
@@ -542,7 +542,7 @@ regenD:
|
||||
answerCfree=false;
|
||||
answerClength=tempanswerDlength;
|
||||
answerC= new char [answerClength];
|
||||
|
||||
|
||||
for (int c=0; c<answerClength; c++){
|
||||
answerC[c]=tempanswerD[c];
|
||||
}
|
||||
@@ -558,7 +558,7 @@ regenD:
|
||||
answerDfree=false;
|
||||
answerDlength=tempanswerDlength;
|
||||
answerD= new char [answerDlength];
|
||||
|
||||
|
||||
for (int c=0; c<answerDlength; c++){
|
||||
answerD[c]=tempanswerD[c];
|
||||
}
|
||||
@@ -585,7 +585,7 @@ void draw_window(void){ //
|
||||
kos_WindowRedrawStatus(1);
|
||||
kos_DefineAndDrawWindow(10,10,619,179+kos_GetSkinHeight(),0x74, 0xDDDDFF, 0,0, (Dword)header);
|
||||
kos_WindowRedrawStatus(2);
|
||||
|
||||
|
||||
kos_ProcessInfo( &sPI );
|
||||
if (sPI.rawData[70]&0x04) return; //íè÷åãî íå äåëàòü åñëè îêíî ñõëîïíóòî â çàãîëîâîê
|
||||
|
||||
@@ -593,9 +593,9 @@ void draw_window(void){ //
|
||||
if (status==0){ //Ìåíþ
|
||||
kos_DrawBar(0,0,610,175,0xFFFFBB);
|
||||
kos_WriteTextToWindow (10,10,0x80,0x000000, "Šâ® å®ç¥â ¡ëâì ¬¨««¨®¥à®¬?", 3);
|
||||
|
||||
|
||||
kos_WriteTextToWindow (10,25,0x80,0x000000, sVersion, 3);
|
||||
|
||||
|
||||
kos_WriteTextToWindow (10,70,0x80,0x770000, "<ENTER> - ç âì ¨£àã", 0);
|
||||
kos_WriteTextToWindow (10,85,0x80,0x770000, "<ESC> - ¢ë室", 0);
|
||||
|
||||
@@ -607,7 +607,7 @@ void draw_window(void){ //
|
||||
kos_DrawBar(0,0,610,175,0xEEEEFF);
|
||||
|
||||
kos_WriteTextToWindow (10,10,0x0,0x000000, question, questionlength-1);
|
||||
|
||||
|
||||
if (drawA==true){
|
||||
kos_WriteTextToWindow (10,40,0x80,0x000000, "A. ", 0);
|
||||
kos_WriteTextToWindow (30,40,0x0,0x000000, answerA, answerAlength-1);
|
||||
@@ -637,12 +637,12 @@ void draw_window(void){ //
|
||||
kos_WriteTextToWindow (500,150,0x80,0x000000, summs[currentquestion-1], 0);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
if (status==2){ //Îêíî "Ýòî - ïðàâèëüíûé îòâåò"
|
||||
kos_DrawBar(0,0,610,175,0xDDFFDD);
|
||||
kos_WriteTextToWindow (10,10,0x80,0x000000, "„ , íâ® ¯à ¢¨«ìë© ®â¢¥â!", 0);
|
||||
|
||||
|
||||
kos_WriteTextToWindow (10,150,0x80,0x000000, "<ENTER> - ¯à®¤®«¦¨âì", 0);
|
||||
}
|
||||
if (status==3){ //Âû âûèãðàëè ìèëëèîí, îäíàêî æ!!!
|
||||
@@ -683,7 +683,7 @@ void draw_window(void){ //
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
kos_WriteTextToWindow (10,150,0x80,0x000000, "<ENTER> - ¯à®¤®«¦¨âì", 0);
|
||||
}
|
||||
|
||||
@@ -696,7 +696,7 @@ void draw_window(void){ //
|
||||
if (status==-1){ //Âû îøèáëèñü :-(
|
||||
kos_DrawBar(0,0,610,175,0xFF8888);
|
||||
kos_WriteTextToWindow (10,10,0x80,0x000000, "Š á®¦ «¥¨î, ¢ë ®è¨¡«¨áì... <20>à ¢¨«ìë© ®â¢¥â -", 0);
|
||||
|
||||
|
||||
switch (correctanswer){
|
||||
case 0x01:
|
||||
kos_WriteTextToWindow (10,25,0x80,0x000000, "A. ", 0);
|
||||
@@ -716,7 +716,7 @@ void draw_window(void){ //
|
||||
break;
|
||||
}
|
||||
kos_WriteTextToWindow (10,50,0x80,0x000000, "‚ १ã«ìâ ⥠¢ë ¢ë¨£à «¨:", 0);
|
||||
|
||||
|
||||
if (currentquestion<6) {kos_WriteTextToWindow (220,50,0x80,0x000000,summs[0], 0);}
|
||||
if ((currentquestion>5)&&(currentquestion<11)) {kos_WriteTextToWindow (220,50,0x80,0x000000,summs[5], 0);}
|
||||
if (currentquestion>10) {kos_WriteTextToWindow (220,50,0x80,0x000000,summs[10], 0);}
|
||||
@@ -733,9 +733,9 @@ void draw_window(void){ //
|
||||
|
||||
void call_friend(){
|
||||
int tmpcodee;
|
||||
|
||||
|
||||
recode5:
|
||||
tmpcodee =(rtlRand()%10)+1;
|
||||
tmpcodee =(rtlRand()%10)+1;
|
||||
int tmpbyte;
|
||||
|
||||
if (currentquestion < 6 ){
|
||||
@@ -747,7 +747,7 @@ void call_friend(){
|
||||
}
|
||||
else //Äðóã ãîâîðèò íàóãàä
|
||||
{
|
||||
|
||||
|
||||
int tmpbyte2=0;
|
||||
recode51:
|
||||
int tmpcodee2=(rtlRand()%4)+1;
|
||||
@@ -779,7 +779,7 @@ void call_friend(){
|
||||
}
|
||||
else //Äðóã ãîâîðèò íàóãàä
|
||||
{
|
||||
|
||||
|
||||
int tmpbyte2=0;
|
||||
recode52:
|
||||
int tmpcodee2=(rtlRand()%4)+1;
|
||||
@@ -917,7 +917,7 @@ void call_zal(){ //
|
||||
zalA=100-zalD;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ((drawB==true)&&(drawC==true)){
|
||||
if (correctanswer==0x02){
|
||||
zalB=maxpercent;
|
||||
@@ -940,7 +940,7 @@ void call_zal(){ //
|
||||
zalB=100-zalD;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ((drawC==true)&&(drawD==true)){
|
||||
if (correctanswer==0x03){
|
||||
zalC=maxpercent;
|
||||
@@ -1005,7 +1005,7 @@ void kos_Main(){
|
||||
drawB = true;
|
||||
drawC = true;
|
||||
drawD = true;
|
||||
|
||||
|
||||
draw_window();
|
||||
}
|
||||
}
|
||||
@@ -1023,8 +1023,8 @@ void kos_Main(){
|
||||
drawB = true;
|
||||
drawC = true;
|
||||
drawD = true;
|
||||
|
||||
draw_window();
|
||||
|
||||
draw_window();
|
||||
}
|
||||
}
|
||||
if (drawC==true){
|
||||
@@ -1040,8 +1040,8 @@ void kos_Main(){
|
||||
drawB = true;
|
||||
drawC = true;
|
||||
drawD = true;
|
||||
|
||||
draw_window();
|
||||
|
||||
draw_window();
|
||||
}
|
||||
}
|
||||
if (drawD==true){
|
||||
@@ -1057,11 +1057,11 @@ void kos_Main(){
|
||||
drawB = true;
|
||||
drawC = true;
|
||||
drawD = true;
|
||||
|
||||
|
||||
draw_window();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (callfriendavailable==true){ //Ðåàëèçàöèÿ ïîäñêàçêè "Çâîíîê äðóãó"
|
||||
if (keyCode==56){
|
||||
callfriendavailable=false;
|
||||
@@ -1082,17 +1082,17 @@ void kos_Main(){
|
||||
|
||||
if (na50available==true){ //Ðåàëèçàöèÿ ïîäñêàçêè "50 íà 50"
|
||||
if (keyCode==55){
|
||||
|
||||
|
||||
if (correctanswer==0x01){
|
||||
drawA=true;
|
||||
|
||||
int tmpcodee;
|
||||
|
||||
|
||||
recode1:
|
||||
tmpcodee =(rtlRand()%3)+1;
|
||||
|
||||
tmpcodee =(rtlRand()%3)+1;
|
||||
|
||||
int tmpbyte;
|
||||
|
||||
|
||||
switch(tmpcodee){
|
||||
case 1:
|
||||
drawB=true;
|
||||
@@ -1107,19 +1107,19 @@ void kos_Main(){
|
||||
drawB=false;
|
||||
drawC=false;
|
||||
drawD=true;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
if (correctanswer==0x02){
|
||||
drawB=true;
|
||||
|
||||
int tmpcodee;
|
||||
|
||||
|
||||
recode2:
|
||||
tmpcodee =(rtlRand()%3)+1;
|
||||
|
||||
tmpcodee =(rtlRand()%3)+1;
|
||||
|
||||
int tmpbyte;
|
||||
|
||||
|
||||
|
||||
switch(tmpcodee){
|
||||
case 1:
|
||||
@@ -1135,18 +1135,18 @@ void kos_Main(){
|
||||
drawA=false;
|
||||
drawC=false;
|
||||
drawD=true;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
if (correctanswer==0x03){
|
||||
drawC=true;
|
||||
|
||||
int tmpcodee;
|
||||
|
||||
|
||||
recode3:
|
||||
tmpcodee =(rtlRand()%3)+1;
|
||||
tmpcodee =(rtlRand()%3)+1;
|
||||
int tmpbyte;
|
||||
|
||||
|
||||
|
||||
switch(tmpcodee){
|
||||
case 1:
|
||||
@@ -1162,19 +1162,19 @@ void kos_Main(){
|
||||
drawB=false;
|
||||
drawA=false;
|
||||
drawD=true;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
if (correctanswer==0x04){
|
||||
drawA=true;
|
||||
|
||||
int tmpcodee;
|
||||
|
||||
|
||||
recode4:
|
||||
tmpcodee =(rtlRand()%3)+1;
|
||||
|
||||
tmpcodee =(rtlRand()%3)+1;
|
||||
|
||||
int tmpbyte;
|
||||
|
||||
|
||||
|
||||
switch(tmpcodee){
|
||||
case 1:
|
||||
@@ -1190,7 +1190,7 @@ void kos_Main(){
|
||||
drawB=false;
|
||||
drawC=false;
|
||||
drawA=true;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
na50available=false;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
Автор: Mario79
|
||||
xx.01.2006 - набор статьи
|
||||
20.03.2006 - публикация статьи
|
||||
Автор: Mario79
|
||||
xx.01.2006 - набор статьи
|
||||
20.03.2006 - публикация статьи
|
||||
23.03.2006 - исправление и дополнение статьи
|
||||
26.02.2007 - переработано и дополнено в связи с изменившимися реалиями
|
||||
|
||||
Загрузка ОС Колибри с USB Flash Drive
|
||||
На сегодняшний день ОС Колибри не имеет поддержки USB устройств на уровне самой системы, по этой причине для запуска с USB Flash накопителей приходится идти на определенные хитрости.
|
||||
Существует 2 известных способа запустить ОС Колибри с «флешки».
|
||||
Загрузка КолибриОС с USB Flash Drive
|
||||
На сегодняшний день КолибриОС не имеет поддержки USB устройств на уровне самой системы, по этой причине для запуска с USB Flash накопителей приходится идти на определенные хитрости.
|
||||
Существует 2 известных способа запустить КолибриОС с «флешки».
|
||||
|
||||
1) Эмуляция флоппи диска в BIOS.
|
||||
Метод прост до тупости на «флешку» записывается IMG образ, с полной эмуляцией, то есть 0 сектор IMG образа становится 0 сектором «флешки», и так далее пока все сектора образа не будут скопированы на накопитель. Из недостатков этого способа сразу можно заметить потерю рабочего пространства выше 1,44 Мб. Особенно обидным это является для накопителей, емкость которых намного превышает этот размер.
|
||||
@@ -23,7 +23,7 @@ xx.01.2006 -
|
||||
Поскольку на данный момент Колибри не является полностью самостоятельной ОС, то повсеместно она применяется параллельно с другими ОС. Эта ситуация привела к тому, что собственного независимого загрузчика (если не считать флоппи диски) у Колибри фактически нет.
|
||||
На сегодняшний день остались актуальными только 2 загрузчика: meosload.com и mtldr.
|
||||
Оба могут запускаться из среды DOS.
|
||||
Установка Колибри на флешку в моем варианте начинается с установки DOS на флешку, как первичной системой, из-под которой будут запущены загрузчики Колибри. Конечно, в этом случае с точки зрения лицензии лучше использовать полные аналоги DOS, которые имеют свободную лицензию на использование, но не в этом суть, так что не будем отвлекаться на мелочи.
|
||||
Установка КолибриОС на флешку в моем варианте начинается с установки DOS на флешку, как первичной системой, из-под которой будут запущены загрузчики КолибриОС. Конечно, в этом случае с точки зрения лицензии лучше использовать полные аналоги DOS, которые имеют свободную лицензию на использование, но не в этом суть, так что не будем отвлекаться на мелочи.
|
||||
|
||||
Установить DOS на «флешку» можно несколькими способами:
|
||||
а) ОС Windows при форматировании флешки выбрать пункт скопировать системные файлы, в общем, то же самое что и для флоппи дискеты. К сожалению, этот метод подходит только для линейки 9х, на 2К не проверял, но в ХР этот пункт недоступен.
|
||||
@@ -54,4 +54,4 @@ xx.01.2006 -
|
||||
|
||||
P.S.
|
||||
1) Хочу выразить большую признательность за помощь в подготовке материала Андрею (NoName), Эдуарду (DoomEdArchangel) и Сергею (Serge).
|
||||
2) В архиве с этим файлом содержаться упомянутые в тексте enable.exe и meosload.com и их исходные коды.
|
||||
2) В архиве с этим файлом содержаться упомянутые в тексте enable.exe и meosload.com и их исходные коды.
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
€¢â®à: Mario79
|
||||
xx.01.2006 - ¡®à áâ âì¨
|
||||
20.03.2006 - ¯ã¡«¨ª æ¨ï áâ âì¨
|
||||
€¢â®à: Mario79
|
||||
xx.01.2006 - ¡®à áâ âì¨
|
||||
20.03.2006 - ¯ã¡«¨ª æ¨ï áâ âì¨
|
||||
23.03.2006 - ¨á¯à ¢«¥¨¥ ¨ ¤®¯®«¥¨¥ áâ âì¨
|
||||
26.02.2007 - ¯¥à¥à ¡®â ® ¨ ¤®¯®«¥® ¢ á¢ï§¨ á ¨§¬¥¨¢è¨¬¨áï ॠ«¨ï¬¨
|
||||
|
||||
‡ £à㧪 Ž‘ Š®«¨¡à¨ á USB Flash Drive
|
||||
<EFBFBD> ᥣ®¤ï訩 ¤¥ì Ž‘ Š®«¨¡à¨ ¥ ¨¬¥¥â ¯®¤¤¥à¦ª¨ USB ãáâனá⢠ã஢¥ á ¬®© á¨á⥬ë, ¯® í⮩ ¯à¨ç¨¥ ¤«ï § ¯ã᪠á USB Flash ª®¯¨â¥«¥© ¯à¨å®¤¨âáï ¨¤â¨ ®¯à¥¤¥«¥ë¥ å¨âà®áâ¨.
|
||||
‘ãé¥áâ¢ã¥â 2 ¨§¢¥áâëå ᯮᮡ § ¯ãáâ¨âì Ž‘ Š®«¨¡à¨ á «ä«¥èª¨».
|
||||
‡ £à㧪 Š®«¨¡à¨Ž‘ á USB Flash Drive
|
||||
<EFBFBD> ᥣ®¤ï訩 ¤¥ì Š®«¨¡à¨Ž‘ ¥ ¨¬¥¥â ¯®¤¤¥à¦ª¨ USB ãáâனá⢠ã஢¥ á ¬®© á¨á⥬ë, ¯® í⮩ ¯à¨ç¨¥ ¤«ï § ¯ã᪠á USB Flash ª®¯¨â¥«¥© ¯à¨å®¤¨âáï ¨¤â¨ ®¯à¥¤¥«¥ë¥ å¨âà®áâ¨.
|
||||
‘ãé¥áâ¢ã¥â 2 ¨§¢¥áâëå ᯮᮡ § ¯ãáâ¨âì Š®«¨¡à¨Ž‘ á «ä«¥èª¨».
|
||||
|
||||
1) <20>¬ã«ïæ¨ï ä«®¯¯¨ ¤¨áª ¢ BIOS.
|
||||
Œ¥â®¤ ¯à®áâ ¤® â㯮á⨠«ä«¥èªã» § ¯¨áë¢ ¥âáï IMG ®¡à §, á ¯®«®© í¬ã«ï樥©, â® ¥áâì 0 ᥪâ®à IMG ®¡à § áâ ®¢¨âáï 0 ᥪâ®à®¬ «ä«¥èª¨», ¨ â ª ¤ «¥¥ ¯®ª ¢á¥ ᥪâ®à ®¡à § ¥ ¡ã¤ãâ ᪮¯¨à®¢ ë ª®¯¨â¥«ì. ˆ§ ¥¤®áâ ⪮¢ í⮣® ᯮᮡ áà §ã ¬®¦® § ¬¥â¨âì ¯®â¥àî à ¡®ç¥£® ¯à®áâà á⢠¢ëè¥ 1,44 Œ¡. Žá®¡¥® ®¡¨¤ë¬ í⮠ï¥âáï ¤«ï ª®¯¨â¥«¥©, ¥¬ª®áâì ª®â®àëå ¬®£® ¯à¥¢ëè ¥â íâ®â à §¬¥à.
|
||||
@@ -23,7 +23,7 @@ xx.01.2006 -
|
||||
<EFBFBD>®áª®«ìªã ¤ ë© ¬®¬¥â Š®«¨¡à¨ ¥ ï¥âáï ¯®«®áâìî á ¬®áâ®ï⥫쮩 Ž‘, â® ¯®¢á¥¬¥áâ® ® ¯à¨¬¥ï¥âáï ¯ à ««¥«ì® á ¤à㣨¬¨ Ž‘. <20>â á¨âã æ¨ï ¯à¨¢¥« ª ⮬ã, ç⮠ᮡá⢥®£® ¥§ ¢¨á¨¬®£® § £àã§ç¨ª (¥á«¨ ¥ áç¨â âì ä«®¯¯¨ ¤¨áª¨) ã Š®«¨¡à¨ ä ªâ¨ç¥áª¨ ¥â.
|
||||
<EFBFBD> ᥣ®¤ï訩 ¤¥ì ®áâ «¨áì ªâã «ì묨 ⮫쪮 2 § £àã§ç¨ª : meosload.com ¨ mtldr.
|
||||
Ž¡ ¬®£ãâ § ¯ã᪠âìáï ¨§ á।ë DOS.
|
||||
“áâ ®¢ª Š®«¨¡à¨ ä«¥èªã ¢ ¬®¥¬ ¢ à¨ â¥ ç¨ ¥âáï á ãáâ ®¢ª¨ DOS ä«¥èªã, ª ª ¯¥à¢¨ç®© á¨á⥬®©, ¨§-¯®¤ ª®â®à®© ¡ã¤ãâ § ¯ãé¥ë § £àã§ç¨ª¨ Š®«¨¡à¨. Š®¥ç®, ¢ í⮬ á«ãç ¥ á â®çª¨ §à¥¨ï «¨æ¥§¨¨ «ãçè¥ ¨á¯®«ì§®¢ âì ¯®«ë¥ «®£¨ DOS, ª®â®àë¥ ¨¬¥îâ ᢮¡®¤ãî «¨æ¥§¨î ¨á¯®«ì§®¢ ¨¥, ® ¥ ¢ í⮬ áãâì, â ª çâ® ¥ ¡ã¤¥¬ ®â¢«¥ª âìáï ¬¥«®ç¨.
|
||||
“áâ ®¢ª Š®«¨¡à¨Ž‘ ä«¥èªã ¢ ¬®¥¬ ¢ à¨ â¥ ç¨ ¥âáï á ãáâ ®¢ª¨ DOS ä«¥èªã, ª ª ¯¥à¢¨ç®© á¨á⥬®©, ¨§-¯®¤ ª®â®à®© ¡ã¤ãâ § ¯ãé¥ë § £àã§ç¨ª¨ Š®«¨¡à¨Ž‘. Š®¥ç®, ¢ í⮬ á«ãç ¥ á â®çª¨ §à¥¨ï «¨æ¥§¨¨ «ãçè¥ ¨á¯®«ì§®¢ âì ¯®«ë¥ «®£¨ DOS, ª®â®àë¥ ¨¬¥îâ ᢮¡®¤ãî «¨æ¥§¨î ¨á¯®«ì§®¢ ¨¥, ® ¥ ¢ í⮬ áãâì, â ª çâ® ¥ ¡ã¤¥¬ ®â¢«¥ª âìáï ¬¥«®ç¨.
|
||||
|
||||
“áâ ®¢¨âì DOS «ä«¥èªã» ¬®¦® ¥áª®«ìª¨¬¨ ᯮᮡ ¬¨:
|
||||
) Ž‘ Windows ¯à¨ ä®à¬ â¨à®¢ ¨¨ 䫥誨 ¢ë¡à âì ¯ãªâ ᪮¯¨à®¢ âì á¨áâ¥¬ë¥ ä ©«ë, ¢ ®¡é¥¬, â® ¦¥ á ¬®¥ çâ® ¨ ¤«ï ä«®¯¯¨ ¤¨áª¥âë. Š á®¦ «¥¨î, íâ®â ¬¥â®¤ ¯®¤å®¤¨â ⮫쪮 ¤«ï «¨¥©ª¨ 9å, 2Š ¥ ¯à®¢¥àï«, ® ¢ •<> íâ®â ¯ãªâ ¥¤®áâ㯥.
|
||||
@@ -54,4 +54,4 @@ xx.01.2006 -
|
||||
|
||||
P.S.
|
||||
1) •®çã ¢ëà §¨âì ¡®«ìèãî ¯à¨§ ⥫ì®áâì § ¯®¬®éì ¢ ¯®¤£®â®¢ª¥ ¬ â¥à¨ « €¤à¥î (NoName), <20>¤ã à¤ã (DoomEdArchangel) ¨ ‘¥à£¥î (Serge).
|
||||
2) ‚ à娢¥ á í⨬ ä ©«®¬ ᮤ¥à¦ âìáï 㯮¬ïãâë¥ ¢ ⥪á⥠enable.exe ¨ meosload.com ¨ ¨å ¨áå®¤ë¥ ª®¤ë.
|
||||
2) ‚ à娢¥ á í⨬ ä ©«®¬ ᮤ¥à¦ âìáï 㯮¬ïãâë¥ ¢ ⥪á⥠enable.exe ¨ meosload.com ¨ ¨å ¨áå®¤ë¥ ª®¤ë.
|
||||
|
||||
@@ -23,6 +23,9 @@ library_fun_memory_free equ mem_free
|
||||
library_fun_memory_realloc equ mem_realloc
|
||||
library_fun_dll_load equ dll_load
|
||||
|
||||
align 4
|
||||
strz_lib_init db 'lib_init',0
|
||||
|
||||
align 4
|
||||
arrea_xx dd 0
|
||||
file_name db '/sys/@notify',0
|
||||
@@ -214,7 +217,7 @@ end if
|
||||
jmp i_error
|
||||
align 4
|
||||
i_begin:
|
||||
import_boxlib myimport
|
||||
import_some_library myimport
|
||||
test eax,eax
|
||||
jz i_exit
|
||||
i_error:
|
||||
@@ -234,13 +237,13 @@ macro load_library library_name__, library_path__, system_path__, myimport, poin
|
||||
local i_begin
|
||||
local i_error
|
||||
local i_exit
|
||||
push ebx
|
||||
if point_dir_name__ eq
|
||||
copy_path library_name__, [32], library_path__,0
|
||||
else
|
||||
;the macros making way /current path a program/ + name system library
|
||||
copy_path library_name__, [32], library_path__,point_dir_name__
|
||||
end if
|
||||
push ebx
|
||||
mcall SF_SYS_MISC,SSF_LOAD_DLL,library_path__ ; load of alternative
|
||||
test eax,eax
|
||||
jnz i_begin
|
||||
@@ -251,7 +254,7 @@ end if
|
||||
jmp i_error
|
||||
align 4
|
||||
i_begin:
|
||||
import_boxlib myimport
|
||||
import_some_library myimport
|
||||
test eax,eax
|
||||
jz i_exit
|
||||
i_error:
|
||||
@@ -309,7 +312,7 @@ align 4
|
||||
align 4
|
||||
end_steep:
|
||||
mov adr_load_lib,eax ;save adr lib in memory
|
||||
import_boxlib my_import
|
||||
import_some_library my_import
|
||||
test eax,eax
|
||||
jz cycle0n
|
||||
or status_lib,2 ; status of code - enable error - import error
|
||||
@@ -387,7 +390,7 @@ align 4
|
||||
align 4
|
||||
end_steep:
|
||||
mov adr_load_lib,eax ;save adr lib in memory
|
||||
import_boxlib my_import
|
||||
import_some_library my_import
|
||||
test eax,eax
|
||||
jz cycle0n
|
||||
or status_lib,2 ; status of code - enable error - import error
|
||||
@@ -451,7 +454,7 @@ pop ebx eax
|
||||
;output:
|
||||
; eax - ¥á«¨ ã¤ ç® â® 0 ¨«¨ 㪠§ â¥«ì ¨¬ï äãªæ¨¨ ª®â®àãî ¥ 㤠«®áì § £à㧨âì
|
||||
; ebx - à §àãè ¥âáï
|
||||
macro import_boxlib myimport
|
||||
macro import_some_library myimport
|
||||
{
|
||||
local import_loop
|
||||
local import_find
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
; SPDX-License-Identifier: GPL-2.0-only
|
||||
; ImgTransform - utility for creating textures from images
|
||||
; Copyright (C) 2020-2025 KolibriOS team
|
||||
|
||||
use32
|
||||
org 0
|
||||
db 'MENUET01'
|
||||
@@ -9,23 +13,23 @@ include '../../proc32.inc'
|
||||
include '../../KOSfuncs.inc'
|
||||
include '../../load_img.inc'
|
||||
include '../../load_lib.mac'
|
||||
include '../../develop/libraries/TinyGL/asm_fork/kosgl.inc'
|
||||
include '../../develop/libraries/TinyGL/asm_fork/opengl_const.inc'
|
||||
include '../../develop/libraries/TinyGL/asm_fork/zbuffer.inc'
|
||||
include '../../develop/libraries/libs-dev/libimg/libimg.inc'
|
||||
include '../../develop/info3ds/info_fun_float.inc'
|
||||
|
||||
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
||||
caption db 'Image transform 08.12.20',0 ;¯®¤¯¨áì ®ª
|
||||
caption db 'Image transform 21.05.25',0
|
||||
|
||||
BUF_STRUCT_SIZE equ 21
|
||||
buf2d_data equ dword[edi] ;¤ ë¥ ¡ãä¥à ¨§®¡à ¦¥¨ï
|
||||
buf2d_w equ dword[edi+8] ;è¨à¨ ¡ãä¥à
|
||||
buf2d_h equ dword[edi+12] ;¢ëá®â ¡ãä¥à
|
||||
buf2d_l equ word[edi+4]
|
||||
buf2d_t equ word[edi+6] ;®âáâ㯠ᢥàåã
|
||||
buf2d_size_lt equ dword[edi+4] ;®âáâ㯠᫥¢ ¨ á¯à ¢ ¤«ï ¡ãä¥à
|
||||
buf2d_color equ dword[edi+16] ;梥â ä® ¡ãä¥à
|
||||
buf2d_bits equ byte[edi+20] ;ª®«¨ç¥á⢮ ¡¨â ¢ 1-© â®çª¥ ¨§®¡à ¦¥¨ï
|
||||
buf2d_data equ dword[edi] ;image buffer data
|
||||
buf2d_w equ dword[edi+8] ;buffer width
|
||||
buf2d_h equ dword[edi+12] ;buffer height
|
||||
buf2d_l equ word[edi+4] ;left space
|
||||
buf2d_t equ word[edi+6] ;top space
|
||||
buf2d_color equ dword[edi+16] ;buffer background color
|
||||
buf2d_bits equ byte[edi+20] ;number of bits in 1 image pixel
|
||||
|
||||
NAV_WND_L equ 145
|
||||
NAV_WND_T equ 1
|
||||
@@ -88,13 +92,13 @@ still:
|
||||
cmp eax,0
|
||||
je timer_funct
|
||||
|
||||
cmp al,1
|
||||
cmp al,EV_REDRAW
|
||||
jz red_win
|
||||
cmp al,2
|
||||
cmp al,EV_KEY
|
||||
jz key
|
||||
cmp al,3
|
||||
cmp al,EV_BUTTON
|
||||
jz button
|
||||
cmp al,6
|
||||
cmp al,EV_MOUSE
|
||||
jne @f
|
||||
mcall SF_THREAD_INFO,procinfo,-1
|
||||
cmp ax,word[procinfo.window_stack_position]
|
||||
@@ -1428,56 +1432,9 @@ l_libs_start:
|
||||
lib_0 l_libs lib_name_0, file_name, system_dir_0, import_proclib
|
||||
lib_1 l_libs lib_name_1, file_name, system_dir_1, import_libimg
|
||||
lib_2 l_libs lib_name_2, library_path, system_dir_2, import_buf2d
|
||||
lib_3 l_libs lib_name_3, library_path, system_dir_3, import_lib_tinygl
|
||||
lib_3 l_libs lib_name_3, library_path, system_dir_3, import_tinygl
|
||||
l_libs_end:
|
||||
|
||||
align 4
|
||||
import_libimg:
|
||||
dd alib_init1
|
||||
img_is_img dd aimg_is_img
|
||||
img_info dd aimg_info
|
||||
img_from_file dd aimg_from_file
|
||||
img_to_file dd aimg_to_file
|
||||
img_from_rgb dd aimg_from_rgb
|
||||
img_to_rgb dd aimg_to_rgb
|
||||
img_to_rgb2 dd aimg_to_rgb2
|
||||
img_decode dd aimg_decode
|
||||
img_encode dd aimg_encode
|
||||
img_create dd aimg_create
|
||||
img_destroy dd aimg_destroy
|
||||
img_destroy_layer dd aimg_destroy_layer
|
||||
img_count dd aimg_count
|
||||
img_lock_bits dd aimg_lock_bits
|
||||
img_unlock_bits dd aimg_unlock_bits
|
||||
img_flip dd aimg_flip
|
||||
img_flip_layer dd aimg_flip_layer
|
||||
img_rotate dd aimg_rotate
|
||||
img_rotate_layer dd aimg_rotate_layer
|
||||
img_draw dd aimg_draw
|
||||
|
||||
dd 0,0
|
||||
alib_init1 db 'lib_init',0
|
||||
aimg_is_img db 'img_is_img',0 ;®¯à¥¤¥«ï¥â ¯® ¤ ë¬, ¬®¦¥â «¨ ¡¨¡«¨®â¥ª ᤥ« âì ¨§ ¨å ¨§®¡à ¦¥¨¥
|
||||
aimg_info db 'img_info',0
|
||||
aimg_from_file db 'img_from_file',0
|
||||
aimg_to_file db 'img_to_file',0
|
||||
aimg_from_rgb db 'img_from_rgb',0
|
||||
aimg_to_rgb db 'img_to_rgb',0 ;¯à¥®¡à §®¢ ¨¥ ¨§®¡à ¦¥¨ï ¢ ¤ ë¥ RGB
|
||||
aimg_to_rgb2 db 'img_to_rgb2',0
|
||||
aimg_decode db 'img_decode',0 ; ¢â®¬ â¨ç¥áª¨ ®¯à¥¤¥«ï¥â ä®à¬ â £à ä¨ç¥áª¨å ¤ ëå
|
||||
aimg_encode db 'img_encode',0
|
||||
aimg_create db 'img_create',0
|
||||
aimg_destroy db 'img_destroy',0
|
||||
aimg_destroy_layer db 'img_destroy_layer',0
|
||||
aimg_count db 'img_count',0
|
||||
aimg_lock_bits db 'img_lock_bits',0
|
||||
aimg_unlock_bits db 'img_unlock_bits',0
|
||||
aimg_flip db 'img_flip',0
|
||||
aimg_flip_layer db 'img_flip_layer',0
|
||||
aimg_rotate db 'img_rotate',0
|
||||
aimg_rotate_layer db 'img_rotate_layer',0
|
||||
aimg_draw db 'img_draw',0
|
||||
|
||||
align 4
|
||||
import_proclib:
|
||||
OpenDialog_Init dd aOpenDialog_Init
|
||||
@@ -1490,76 +1447,9 @@ dd 0,0
|
||||
aOpenDialog_Set_file_name db 'OpenDialog_set_file_name',0
|
||||
aOpenDialog_Set_file_ext db 'OpenDialog_set_file_ext',0
|
||||
|
||||
align 4
|
||||
import_buf2d:
|
||||
init dd sz_init
|
||||
buf2d_create dd sz_buf2d_create
|
||||
buf2d_create_f_img dd sz_buf2d_create_f_img
|
||||
buf2d_clear dd sz_buf2d_clear
|
||||
buf2d_draw dd sz_buf2d_draw
|
||||
buf2d_delete dd sz_buf2d_delete
|
||||
buf2d_resize dd sz_buf2d_resize
|
||||
buf2d_line dd sz_buf2d_line
|
||||
buf2d_rect_by_size dd sz_buf2d_rect_by_size
|
||||
buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
|
||||
buf2d_circle dd sz_buf2d_circle
|
||||
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
|
||||
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
|
||||
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
|
||||
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
|
||||
buf2d_bit_blt dd sz_buf2d_bit_blt
|
||||
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
|
||||
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
|
||||
buf2d_curve_bezier dd sz_buf2d_curve_bezier
|
||||
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
|
||||
buf2d_draw_text dd sz_buf2d_draw_text
|
||||
buf2d_crop_color dd sz_buf2d_crop_color
|
||||
buf2d_offset_h dd sz_buf2d_offset_h
|
||||
buf2d_flood_fill dd sz_buf2d_flood_fill
|
||||
buf2d_set_pixel dd sz_buf2d_set_pixel
|
||||
buf2d_get_pixel dd sz_buf2d_get_pixel
|
||||
dd 0,0
|
||||
sz_init db 'lib_init',0
|
||||
sz_buf2d_create db 'buf2d_create',0
|
||||
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
|
||||
sz_buf2d_clear db 'buf2d_clear',0
|
||||
sz_buf2d_draw db 'buf2d_draw',0
|
||||
sz_buf2d_delete db 'buf2d_delete',0
|
||||
sz_buf2d_resize db 'buf2d_resize',0
|
||||
sz_buf2d_line db 'buf2d_line',0
|
||||
sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
|
||||
sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
|
||||
sz_buf2d_circle db 'buf2d_circle',0
|
||||
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
|
||||
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
|
||||
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
|
||||
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
|
||||
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
|
||||
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
|
||||
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
|
||||
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
|
||||
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
|
||||
sz_buf2d_draw_text db 'buf2d_draw_text',0
|
||||
sz_buf2d_crop_color db 'buf2d_crop_color',0
|
||||
sz_buf2d_offset_h db 'buf2d_offset_h',0
|
||||
sz_buf2d_flood_fill db 'buf2d_flood_fill',0
|
||||
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
|
||||
sz_buf2d_get_pixel db 'buf2d_get_pixel',0
|
||||
|
||||
align 4
|
||||
import_lib_tinygl:
|
||||
|
||||
macro E_LIB n
|
||||
{
|
||||
n dd sz_#n
|
||||
}
|
||||
include '../../../programs/develop/libraries/TinyGL/asm_fork/export.inc'
|
||||
dd 0,0
|
||||
macro E_LIB n
|
||||
{
|
||||
sz_#n db `n,0
|
||||
}
|
||||
include '../../../programs/develop/libraries/TinyGL/asm_fork/export.inc'
|
||||
include '../../develop/libraries/libs-dev/libimg/import.inc'
|
||||
include '../../develop/libraries/buf2d/import.inc'
|
||||
include '../../develop/libraries/TinyGL/asm_fork/import.inc'
|
||||
|
||||
align 4
|
||||
buf_0: dd 0
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
|
||||
tup.include(HELPERDIR .. "/use_fasm.lua")
|
||||
add_include(tup.getvariantdir())
|
||||
|
||||
tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"})
|
||||
tup.rule({"piano.asm", extra_inputs = {"lang.inc"}}, FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "piano")
|
||||
tup.rule("keymap.asm", FASM .. " %f %o", "piano.map")
|
||||
tup.rule("piano.asm", FASM .. " -dlang=" .. tup.getconfig("LANG") .. " %f %o" .. tup.getconfig("KPACK_CMD"), "%B")
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
@echo lang fix en_US >lang.inc
|
||||
@fasm piano.asm piano
|
||||
@erase lang.inc
|
||||
@pause
|
||||
79
programs/media/piano/keymap.asm
Normal file
79
programs/media/piano/keymap.asm
Normal file
@@ -0,0 +1,79 @@
|
||||
; SPDX-License-Identifier: GPL-2.0-only
|
||||
;
|
||||
; Piano - Default Keymap (256 bytes)
|
||||
; Copyright (C) 2025 KolibriOS team
|
||||
;
|
||||
; Contributor Burer - Main code
|
||||
; Contributor Doczom - Idea
|
||||
|
||||
; ====================================================================
|
||||
|
||||
format binary as ""
|
||||
org 0
|
||||
|
||||
; ====================================================================
|
||||
|
||||
BAD_NOTE = 0xFF
|
||||
|
||||
; ====================================================================
|
||||
|
||||
keymap:
|
||||
db BAD_NOTE ; 0x00
|
||||
db BAD_NOTE ; 0x01
|
||||
db 0x21 ; 0x02 '1' -> note 0x31
|
||||
db 0x22 ; 0x03 '2' -> note 0x32
|
||||
db 0x23 ; 0x04 '3' -> note 0x33
|
||||
db 0x24 ; 0x05 '4' -> note 0x34
|
||||
db 0x25 ; 0x06 '5' -> note 0x35
|
||||
db 0x26 ; 0x07 '6' -> note 0x36
|
||||
db 0x27 ; 0x08 '7' -> note 0x37
|
||||
db 0x28 ; 0x09 '8' -> note 0x38
|
||||
db 0x29 ; 0x0A '9' -> note 0x39
|
||||
db 0x2A ; 0x0B '0' -> note 0x3A
|
||||
db 0x2B ; 0x0C '-' -> note 0x3B
|
||||
db 0x2C ; 0x0D '=' -> note 0x3C
|
||||
db 0x1C ; 0x0E Backspace -> note 0x2C
|
||||
db BAD_NOTE ; 0x0F
|
||||
|
||||
db 0x31 ; 0x10 'q' -> note 0x41
|
||||
db 0x32 ; 0x11 'w' -> note 0x42
|
||||
db 0x33 ; 0x12 'e' -> note 0x43
|
||||
db 0x34 ; 0x13 'r' -> note 0x44
|
||||
db 0x35 ; 0x14 't' -> note 0x45
|
||||
db 0x36 ; 0x15 'y' -> note 0x46
|
||||
db 0x37 ; 0x16 'u' -> note 0x47
|
||||
db 0x38 ; 0x17 'i' -> note 0x48
|
||||
db 0x39 ; 0x18 'o' -> note 0x49
|
||||
db 0x3A ; 0x19 'p' -> note 0x4A
|
||||
db 0x3B ; 0x1A '[' -> note 0x4B
|
||||
db 0x3C ; 0x1B ']' -> note 0x4C
|
||||
db 0x0C ; 0x1C Enter -> note 0x1C
|
||||
db BAD_NOTE ; 0x1D
|
||||
|
||||
db 0x01 ; 0x1E 'a' -> note 0x11
|
||||
db 0x02 ; 0x1F 's' -> note 0x12
|
||||
db 0x03 ; 0x20 'd' -> note 0x13
|
||||
db 0x04 ; 0x21 'f' -> note 0x14
|
||||
db 0x05 ; 0x22 'g' -> note 0x15
|
||||
db 0x06 ; 0x23 'h' -> note 0x16
|
||||
db 0x07 ; 0x24 'j' -> note 0x17
|
||||
db 0x08 ; 0x25 'k' -> note 0x18
|
||||
db 0x09 ; 0x26 'l' -> note 0x19
|
||||
db 0x0A ; 0x27 ';' -> note 0x1A
|
||||
db 0x0B ; 0x28 ''' -> note 0x1B
|
||||
db BAD_NOTE ; 0x29
|
||||
db BAD_NOTE ; 0x2A
|
||||
|
||||
db 0x1B ; 0x2B '\' -> note 0x2B
|
||||
db 0x11 ; 0x2C 'z' -> note 0x21
|
||||
db 0x12 ; 0x2D 'x' -> note 0x22
|
||||
db 0x13 ; 0x2E 'c' -> note 0x23
|
||||
db 0x14 ; 0x2F 'v' -> note 0x24
|
||||
db 0x15 ; 0x30 'b' -> note 0x25
|
||||
db 0x16 ; 0x31 'n' -> note 0x26
|
||||
db 0x17 ; 0x32 'm' -> note 0x27
|
||||
db 0x18 ; 0x33 ',' -> note 0x28
|
||||
db 0x19 ; 0x34 '.' -> note 0x29
|
||||
db 0x1A ; 0x35 '/' -> note 0x2A
|
||||
|
||||
times 256-($-keymap) db BAD_NOTE
|
||||
File diff suppressed because it is too large
Load Diff
@@ -259,99 +259,10 @@ aOpenDialog_Init db 'OpenDialog_init',0
|
||||
aOpenDialog_Start db 'OpenDialog_start',0
|
||||
;aOpenDialog_Version db 'Version_OpenDialog',0
|
||||
;---------------------------------------------------------------------
|
||||
align 4
|
||||
Box_lib_import:
|
||||
;init_lib dd a_init
|
||||
;version_lib dd a_version
|
||||
|
||||
edit_box_draw dd aEdit_box_draw
|
||||
edit_box_key dd aEdit_box_key
|
||||
edit_box_mouse dd aEdit_box_mouse
|
||||
edit_box_set_text dd aEdit_box_set_text
|
||||
;version_ed dd aVersion_ed
|
||||
|
||||
init_checkbox dd aInit_checkbox
|
||||
check_box_draw dd aCheck_box_draw
|
||||
check_box_mouse dd aCheck_box_mouse
|
||||
;version_ch dd aVersion_ch
|
||||
|
||||
option_box_draw dd aOption_box_draw
|
||||
option_box_mouse dd aOption_box_mouse
|
||||
;version_op dd aVersion_op
|
||||
|
||||
PathShow_prepare dd sz_PathShow_prepare
|
||||
PathShow_draw dd sz_PathShow_draw
|
||||
;Version_path_show dd szVersion_path_show
|
||||
dd 0,0
|
||||
|
||||
;a_init db 'lib_init',0
|
||||
;a_version db 'version',0
|
||||
|
||||
aEdit_box_draw db 'edit_box_draw',0
|
||||
aEdit_box_key db 'edit_box_key',0
|
||||
aEdit_box_mouse db 'edit_box_mouse',0
|
||||
aEdit_box_set_text db 'edit_box_set_text',0
|
||||
;aVersion_ed db 'version_ed',0
|
||||
|
||||
|
||||
aInit_checkbox db 'init_checkbox2',0
|
||||
aCheck_box_draw db 'check_box_draw2',0
|
||||
aCheck_box_mouse db 'check_box_mouse2',0
|
||||
;aVersion_ch db 'version_ch2',0
|
||||
|
||||
aOption_box_draw db 'option_box_draw',0
|
||||
aOption_box_mouse db 'option_box_mouse',0
|
||||
;aVersion_op db 'version_op',0
|
||||
|
||||
sz_PathShow_prepare db 'PathShow_prepare',0
|
||||
sz_PathShow_draw db 'PathShow_draw',0
|
||||
;szVersion_path_show db 'version_PathShow',0
|
||||
;---------------------------------------------------------------------
|
||||
align 4
|
||||
import_libimg:
|
||||
dd alib_init1
|
||||
img_is_img dd aimg_is_img
|
||||
img_info dd aimg_info
|
||||
img_from_file dd aimg_from_file
|
||||
img_to_file dd aimg_to_file
|
||||
img_from_rgb dd aimg_from_rgb
|
||||
img_to_rgb dd aimg_to_rgb
|
||||
img_to_rgb2 dd aimg_to_rgb2
|
||||
img_decode dd aimg_decode
|
||||
img_encode dd aimg_encode
|
||||
img_create dd aimg_create
|
||||
img_destroy dd aimg_destroy
|
||||
img_destroy_layer dd aimg_destroy_layer
|
||||
img_count dd aimg_count
|
||||
img_lock_bits dd aimg_lock_bits
|
||||
img_unlock_bits dd aimg_unlock_bits
|
||||
img_flip dd aimg_flip
|
||||
img_flip_layer dd aimg_flip_layer
|
||||
img_rotate dd aimg_rotate
|
||||
img_rotate_layer dd aimg_rotate_layer
|
||||
img_draw dd aimg_draw
|
||||
dd 0,0
|
||||
alib_init1 db 'lib_init',0
|
||||
aimg_is_img db 'img_is_img',0
|
||||
aimg_info db 'img_info',0
|
||||
aimg_from_file db 'img_from_file',0
|
||||
aimg_to_file db 'img_to_file',0
|
||||
aimg_from_rgb db 'img_from_rgb',0
|
||||
aimg_to_rgb db 'img_to_rgb',0
|
||||
aimg_to_rgb2 db 'img_to_rgb2',0
|
||||
aimg_decode db 'img_decode',0
|
||||
aimg_encode db 'img_encode',0
|
||||
aimg_create db 'img_create',0
|
||||
aimg_destroy db 'img_destroy',0
|
||||
aimg_destroy_layer db 'img_destroy_layer',0
|
||||
aimg_count db 'img_count',0
|
||||
aimg_lock_bits db 'img_lock_bits',0
|
||||
aimg_unlock_bits db 'img_unlock_bits',0
|
||||
aimg_flip db 'img_flip',0
|
||||
aimg_flip_layer db 'img_flip_layer',0
|
||||
aimg_rotate db 'img_rotate',0
|
||||
aimg_rotate_layer db 'img_rotate_layer',0
|
||||
aimg_draw db 'img_draw',0
|
||||
Box_lib_import equ import_box_lib
|
||||
include '../../develop/libraries/box_lib/import.inc'
|
||||
include '../../develop/libraries/libs-dev/libimg/import.inc'
|
||||
;---------------------------------------------------------------------
|
||||
;width,left,top,color,shift_color,focus_border_color,\
|
||||
; blur_border_color,text_color,max,text,mouse_variable,flags,size,pos
|
||||
|
||||
@@ -140,13 +140,13 @@ still:
|
||||
jmp still
|
||||
@@:
|
||||
|
||||
cmp al,1
|
||||
cmp al,EV_REDRAW
|
||||
jz red_win
|
||||
cmp al,2
|
||||
cmp al,EV_KEY
|
||||
jz key
|
||||
cmp al,3
|
||||
cmp al,EV_BUTTON
|
||||
jz button
|
||||
cmp al,6
|
||||
cmp al,EV_MOUSE
|
||||
jne @f
|
||||
mcall SF_THREAD_INFO,procinfo,-1
|
||||
cmp ax,word[procinfo.window_stack_position]
|
||||
@@ -757,52 +757,6 @@ l_libs_start:
|
||||
lib_4 l_libs lib_name_4, file_name, system_dir_4, import_libkmenu
|
||||
l_libs_end:
|
||||
|
||||
align 4
|
||||
import_libimg:
|
||||
dd alib_init1
|
||||
img_is_img dd aimg_is_img
|
||||
img_info dd aimg_info
|
||||
img_from_file dd aimg_from_file
|
||||
img_to_file dd aimg_to_file
|
||||
img_from_rgb dd aimg_from_rgb
|
||||
img_to_rgb dd aimg_to_rgb
|
||||
img_to_rgb2 dd aimg_to_rgb2
|
||||
img_decode dd aimg_decode
|
||||
img_encode dd aimg_encode
|
||||
img_create dd aimg_create
|
||||
img_destroy dd aimg_destroy
|
||||
img_destroy_layer dd aimg_destroy_layer
|
||||
img_count dd aimg_count
|
||||
img_lock_bits dd aimg_lock_bits
|
||||
img_unlock_bits dd aimg_unlock_bits
|
||||
img_flip dd aimg_flip
|
||||
img_flip_layer dd aimg_flip_layer
|
||||
img_rotate dd aimg_rotate
|
||||
img_rotate_layer dd aimg_rotate_layer
|
||||
img_draw dd aimg_draw
|
||||
|
||||
dd 0,0
|
||||
alib_init1 db 'lib_init',0
|
||||
aimg_is_img db 'img_is_img',0 ;®¯à¥¤¥«ï¥â ¯® ¤ ë¬, ¬®¦¥â «¨ ¡¨¡«¨®â¥ª ᤥ« âì ¨§ ¨å ¨§®¡à ¦¥¨¥
|
||||
aimg_info db 'img_info',0
|
||||
aimg_from_file db 'img_from_file',0
|
||||
aimg_to_file db 'img_to_file',0
|
||||
aimg_from_rgb db 'img_from_rgb',0
|
||||
aimg_to_rgb db 'img_to_rgb',0 ;¯à¥®¡à §®¢ ¨¥ ¨§®¡à ¦¥¨ï ¢ ¤ ë¥ RGB
|
||||
aimg_to_rgb2 db 'img_to_rgb2',0
|
||||
aimg_decode db 'img_decode',0 ; ¢â®¬ â¨ç¥áª¨ ®¯à¥¤¥«ï¥â ä®à¬ â £à ä¨ç¥áª¨å ¤ ëå
|
||||
aimg_encode db 'img_encode',0
|
||||
aimg_create db 'img_create',0
|
||||
aimg_destroy db 'img_destroy',0
|
||||
aimg_destroy_layer db 'img_destroy_layer',0
|
||||
aimg_count db 'img_count',0
|
||||
aimg_lock_bits db 'img_lock_bits',0
|
||||
aimg_unlock_bits db 'img_unlock_bits',0
|
||||
aimg_flip db 'img_flip',0
|
||||
aimg_flip_layer db 'img_flip_layer',0
|
||||
aimg_rotate db 'img_rotate',0
|
||||
aimg_rotate_layer db 'img_rotate_layer',0
|
||||
aimg_draw db 'img_draw',0
|
||||
|
||||
align 4
|
||||
import_proclib:
|
||||
@@ -816,110 +770,9 @@ dd 0,0
|
||||
aOpenDialog_Set_file_name db 'OpenDialog_set_file_name',0
|
||||
;aOpenDialog_Set_file_ext db 'OpenDialog_set_file_ext',0
|
||||
|
||||
align 4
|
||||
import_buf2d:
|
||||
init dd sz_init
|
||||
buf2d_create dd sz_buf2d_create
|
||||
buf2d_create_f_img dd sz_buf2d_create_f_img
|
||||
buf2d_clear dd sz_buf2d_clear
|
||||
buf2d_draw dd sz_buf2d_draw
|
||||
buf2d_delete dd sz_buf2d_delete
|
||||
buf2d_resize dd sz_buf2d_resize
|
||||
buf2d_line dd sz_buf2d_line
|
||||
buf2d_line_sm dd sz_buf2d_line_sm
|
||||
buf2d_rect_by_size dd sz_buf2d_rect_by_size
|
||||
buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
|
||||
buf2d_circle dd sz_buf2d_circle
|
||||
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
|
||||
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
|
||||
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
|
||||
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
|
||||
buf2d_bit_blt dd sz_buf2d_bit_blt
|
||||
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
|
||||
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
|
||||
buf2d_curve_bezier dd sz_buf2d_curve_bezier
|
||||
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
|
||||
buf2d_draw_text dd sz_buf2d_draw_text
|
||||
buf2d_crop_color dd sz_buf2d_crop_color
|
||||
buf2d_flip_h dd sz_buf2d_flip_h
|
||||
buf2d_flip_v dd sz_buf2d_flip_v
|
||||
buf2d_offset_h dd sz_buf2d_offset_h
|
||||
buf2d_flood_fill dd sz_buf2d_flood_fill
|
||||
buf2d_set_pixel dd sz_buf2d_set_pixel
|
||||
dd 0,0
|
||||
sz_init db 'lib_init',0
|
||||
sz_buf2d_create db 'buf2d_create',0
|
||||
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
|
||||
sz_buf2d_clear db 'buf2d_clear',0
|
||||
sz_buf2d_draw db 'buf2d_draw',0
|
||||
sz_buf2d_delete db 'buf2d_delete',0
|
||||
sz_buf2d_resize db 'buf2d_resize',0
|
||||
sz_buf2d_line db 'buf2d_line',0
|
||||
sz_buf2d_line_sm db 'buf2d_line_sm',0
|
||||
sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
|
||||
sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
|
||||
sz_buf2d_circle db 'buf2d_circle',0
|
||||
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
|
||||
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
|
||||
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
|
||||
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
|
||||
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
|
||||
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
|
||||
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
|
||||
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
|
||||
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
|
||||
sz_buf2d_draw_text db 'buf2d_draw_text',0
|
||||
sz_buf2d_crop_color db 'buf2d_crop_color',0
|
||||
sz_buf2d_flip_h db 'buf2d_flip_h',0
|
||||
sz_buf2d_flip_v db 'buf2d_flip_v',0
|
||||
sz_buf2d_offset_h db 'buf2d_offset_h',0
|
||||
sz_buf2d_flood_fill db 'buf2d_flood_fill',0
|
||||
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
|
||||
|
||||
align 4
|
||||
import_box_lib:
|
||||
dd sz_init1
|
||||
|
||||
init_checkbox dd sz_Init_checkbox
|
||||
check_box_draw dd sz_Check_box_draw
|
||||
check_box_mouse dd sz_Check_box_mouse
|
||||
;version_ch dd sz_Version_ch
|
||||
|
||||
option_box_draw dd sz_Option_box_draw
|
||||
option_box_mouse dd sz_Option_box_mouse
|
||||
;version_op dd sz_Version_op
|
||||
|
||||
edit_box_draw dd sz_edit_box_draw
|
||||
edit_box_key dd sz_edit_box_key
|
||||
edit_box_mouse dd sz_edit_box_mouse
|
||||
edit_box_set_text dd sz_edit_box_set_text
|
||||
scrollbar_ver_draw dd sz_scrollbar_ver_draw
|
||||
scrollbar_hor_draw dd sz_scrollbar_hor_draw
|
||||
|
||||
progressbar_draw dd sz_progressbar_draw
|
||||
progressbar_progress dd sz_progressbar_progress
|
||||
|
||||
dd 0,0
|
||||
sz_init1 db 'lib_init',0
|
||||
|
||||
sz_Init_checkbox db 'init_checkbox2',0
|
||||
sz_Check_box_draw db 'check_box_draw2',0
|
||||
sz_Check_box_mouse db 'check_box_mouse2',0
|
||||
;sz_Version_ch db 'version_ch2',0
|
||||
|
||||
sz_Option_box_draw db 'option_box_draw',0
|
||||
sz_Option_box_mouse db 'option_box_mouse',0
|
||||
;sz_Version_op db 'version_op',0
|
||||
|
||||
sz_edit_box_draw db 'edit_box_draw',0
|
||||
sz_edit_box_key db 'edit_box_key',0
|
||||
sz_edit_box_mouse db 'edit_box_mouse',0
|
||||
sz_edit_box_set_text db 'edit_box_set_text',0
|
||||
sz_scrollbar_ver_draw db 'scrollbar_v_draw',0
|
||||
sz_scrollbar_hor_draw db 'scrollbar_h_draw',0
|
||||
|
||||
sz_progressbar_draw db 'progressbar_draw', 0
|
||||
sz_progressbar_progress db 'progressbar_progress', 0
|
||||
include '../../develop/libraries/libs-dev/libimg/import.inc'
|
||||
include '../../develop/libraries/buf2d/import.inc'
|
||||
include '../../develop/libraries/box_lib/import.inc'
|
||||
|
||||
align 4
|
||||
import_libkmenu:
|
||||
|
||||
@@ -15,16 +15,16 @@ include 'cnc_editor.inc'
|
||||
include '../../develop/info3ds/info_fun_float.inc'
|
||||
|
||||
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
||||
caption db 'CNC editor 23.05.19',0 ;¯®¤¯¨áì ®ª
|
||||
caption db 'CNC editor 07.05.25',0 ;window signature
|
||||
|
||||
run_file_70 FileInfoBlock
|
||||
|
||||
offs_last_timer dd 0 ;¯®á«¥¤¨© ᤢ¨£ ¯®ª § ë© ¢ äãªæ¨¨ â ©¬¥à
|
||||
|
||||
IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3
|
||||
image_data_toolbar dd 0 ;㪠§ â¥«ì ¢à¥¬¥ãî ¯ ¬ïâì. ¤«ï 㦥 ¯à¥®¡à §®¢ ¨ï ¨§®¡à ¦¥¨ï
|
||||
icon_tl_sys dd 0 ;㪠§ â¥«ì ¯ ¬ïâì ¤«ï åà ¥¨ï á¨á⥬ëå ¨ª®®ª
|
||||
icon_toolbar dd 0 ;㪠§ â¥«ì ¯ ¬ïâì ¤«ï åà ¥¨ï ¨ª®®ª ®¡ê¥ªâ®¢
|
||||
image_data_toolbar dd 0 ;pointer to temporary memory, needed for image conversion
|
||||
icon_tl_sys dd 0 ;pointer to memory for storing system icons
|
||||
icon_toolbar dd 0 ;pointer to memory for storing object icons
|
||||
|
||||
include 'wnd_point_coords.inc'
|
||||
include 'wnd_scale.inc'
|
||||
@@ -111,13 +111,13 @@ still:
|
||||
jmp still
|
||||
@@:
|
||||
|
||||
cmp al,1
|
||||
cmp al,EV_REDRAW
|
||||
jz red_win
|
||||
cmp al,2
|
||||
cmp al,EV_KEY
|
||||
jz key
|
||||
cmp al,3
|
||||
cmp al,EV_BUTTON
|
||||
jz button
|
||||
cmp al,6
|
||||
cmp al,EV_MOUSE
|
||||
jne @f
|
||||
mcall SF_THREAD_INFO,procinfo,-1
|
||||
cmp ax,word[procinfo.window_stack_position]
|
||||
@@ -360,8 +360,7 @@ pushad
|
||||
cmp eax,dword[buf_0.h] ;ᬮâਬ à §¬¥à ¡ãä¥à
|
||||
jne @f
|
||||
cmp ebx,dword[buf_0.w]
|
||||
jne @f
|
||||
jmp .end0
|
||||
je .end0
|
||||
@@:
|
||||
stdcall [buf2d_resize],buf_0,ebx,eax,1
|
||||
mov eax,ObjData
|
||||
@@ -2105,53 +2104,6 @@ l_libs_start:
|
||||
lib_3 l_libs lib_name_3, file_name, system_dir_3, import_box_lib
|
||||
l_libs_end:
|
||||
|
||||
align 4
|
||||
import_libimg:
|
||||
dd alib_init1
|
||||
img_is_img dd aimg_is_img
|
||||
img_info dd aimg_info
|
||||
img_from_file dd aimg_from_file
|
||||
img_to_file dd aimg_to_file
|
||||
img_from_rgb dd aimg_from_rgb
|
||||
img_to_rgb dd aimg_to_rgb
|
||||
img_to_rgb2 dd aimg_to_rgb2
|
||||
img_decode dd aimg_decode
|
||||
img_encode dd aimg_encode
|
||||
img_create dd aimg_create
|
||||
img_destroy dd aimg_destroy
|
||||
img_destroy_layer dd aimg_destroy_layer
|
||||
img_count dd aimg_count
|
||||
img_lock_bits dd aimg_lock_bits
|
||||
img_unlock_bits dd aimg_unlock_bits
|
||||
img_flip dd aimg_flip
|
||||
img_flip_layer dd aimg_flip_layer
|
||||
img_rotate dd aimg_rotate
|
||||
img_rotate_layer dd aimg_rotate_layer
|
||||
img_draw dd aimg_draw
|
||||
|
||||
dd 0,0
|
||||
alib_init1 db 'lib_init',0
|
||||
aimg_is_img db 'img_is_img',0 ;®¯à¥¤¥«ï¥â ¯® ¤ ë¬, ¬®¦¥â «¨ ¡¨¡«¨®â¥ª ᤥ« âì ¨§ ¨å ¨§®¡à ¦¥¨¥
|
||||
aimg_info db 'img_info',0
|
||||
aimg_from_file db 'img_from_file',0
|
||||
aimg_to_file db 'img_to_file',0
|
||||
aimg_from_rgb db 'img_from_rgb',0
|
||||
aimg_to_rgb db 'img_to_rgb',0 ;¯à¥®¡à §®¢ ¨¥ ¨§®¡à ¦¥¨ï ¢ ¤ ë¥ RGB
|
||||
aimg_to_rgb2 db 'img_to_rgb2',0
|
||||
aimg_decode db 'img_decode',0 ; ¢â®¬ â¨ç¥áª¨ ®¯à¥¤¥«ï¥â ä®à¬ â £à ä¨ç¥áª¨å ¤ ëå
|
||||
aimg_encode db 'img_encode',0
|
||||
aimg_create db 'img_create',0
|
||||
aimg_destroy db 'img_destroy',0
|
||||
aimg_destroy_layer db 'img_destroy_layer',0
|
||||
aimg_count db 'img_count',0
|
||||
aimg_lock_bits db 'img_lock_bits',0
|
||||
aimg_unlock_bits db 'img_unlock_bits',0
|
||||
aimg_flip db 'img_flip',0
|
||||
aimg_flip_layer db 'img_flip_layer',0
|
||||
aimg_rotate db 'img_rotate',0
|
||||
aimg_rotate_layer db 'img_rotate_layer',0
|
||||
aimg_draw db 'img_draw',0
|
||||
|
||||
align 4
|
||||
import_proclib:
|
||||
OpenDialog_Init dd aOpenDialog_Init
|
||||
@@ -2164,162 +2116,10 @@ dd 0,0
|
||||
aOpenDialog_Set_file_name db 'OpenDialog_set_file_name',0
|
||||
aOpenDialog_Set_file_ext db 'OpenDialog_set_file_ext',0
|
||||
|
||||
align 4
|
||||
import_buf2d:
|
||||
init dd sz_init
|
||||
buf2d_create dd sz_buf2d_create
|
||||
buf2d_create_f_img dd sz_buf2d_create_f_img
|
||||
buf2d_clear dd sz_buf2d_clear
|
||||
buf2d_draw dd sz_buf2d_draw
|
||||
buf2d_delete dd sz_buf2d_delete
|
||||
buf2d_resize dd sz_buf2d_resize
|
||||
buf2d_line dd sz_buf2d_line
|
||||
buf2d_line_sm dd sz_buf2d_line_sm
|
||||
buf2d_rect_by_size dd sz_buf2d_rect_by_size
|
||||
buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
|
||||
buf2d_circle dd sz_buf2d_circle
|
||||
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
|
||||
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
|
||||
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
|
||||
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
|
||||
buf2d_bit_blt dd sz_buf2d_bit_blt
|
||||
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
|
||||
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
|
||||
buf2d_curve_bezier dd sz_buf2d_curve_bezier
|
||||
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
|
||||
buf2d_draw_text dd sz_buf2d_draw_text
|
||||
buf2d_crop_color dd sz_buf2d_crop_color
|
||||
buf2d_flip_h dd sz_buf2d_flip_h
|
||||
buf2d_flip_v dd sz_buf2d_flip_v
|
||||
buf2d_offset_h dd sz_buf2d_offset_h
|
||||
buf2d_flood_fill dd sz_buf2d_flood_fill
|
||||
buf2d_set_pixel dd sz_buf2d_set_pixel
|
||||
dd 0,0
|
||||
sz_init db 'lib_init',0
|
||||
sz_buf2d_create db 'buf2d_create',0
|
||||
sz_buf2d_create_f_img db 'buf2d_create_f_img',0
|
||||
sz_buf2d_clear db 'buf2d_clear',0
|
||||
sz_buf2d_draw db 'buf2d_draw',0
|
||||
sz_buf2d_delete db 'buf2d_delete',0
|
||||
sz_buf2d_resize db 'buf2d_resize',0
|
||||
sz_buf2d_line db 'buf2d_line',0
|
||||
sz_buf2d_line_sm db 'buf2d_line_sm',0
|
||||
sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
|
||||
sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
|
||||
sz_buf2d_circle db 'buf2d_circle',0
|
||||
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
|
||||
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
|
||||
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
|
||||
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
|
||||
sz_buf2d_bit_blt db 'buf2d_bit_blt',0
|
||||
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
|
||||
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
|
||||
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
|
||||
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
|
||||
sz_buf2d_draw_text db 'buf2d_draw_text',0
|
||||
sz_buf2d_crop_color db 'buf2d_crop_color',0
|
||||
sz_buf2d_flip_h db 'buf2d_flip_h',0
|
||||
sz_buf2d_flip_v db 'buf2d_flip_v',0
|
||||
sz_buf2d_offset_h db 'buf2d_offset_h',0
|
||||
sz_buf2d_flood_fill db 'buf2d_flood_fill',0
|
||||
sz_buf2d_set_pixel db 'buf2d_set_pixel',0
|
||||
include '../../develop/libraries/libs-dev/libimg/import.inc'
|
||||
include '../../develop/libraries/buf2d/import.inc'
|
||||
include '../../develop/libraries/box_lib/import.inc'
|
||||
|
||||
align 4
|
||||
import_box_lib:
|
||||
dd sz_init1
|
||||
|
||||
init_checkbox dd sz_Init_checkbox
|
||||
check_box_draw dd sz_Check_box_draw
|
||||
check_box_mouse dd sz_Check_box_mouse
|
||||
;version_ch dd sz_Version_ch
|
||||
|
||||
option_box_draw dd sz_Option_box_draw
|
||||
option_box_mouse dd sz_Option_box_mouse
|
||||
;version_op dd sz_Version_op
|
||||
|
||||
edit_box_draw dd sz_edit_box_draw
|
||||
edit_box_key dd sz_edit_box_key
|
||||
edit_box_mouse dd sz_edit_box_mouse
|
||||
edit_box_set_text dd sz_edit_box_set_text
|
||||
scrollbar_ver_draw dd sz_scrollbar_ver_draw
|
||||
scrollbar_hor_draw dd sz_scrollbar_hor_draw
|
||||
|
||||
tl_data_init dd sz_tl_data_init
|
||||
tl_data_clear dd sz_tl_data_clear
|
||||
tl_info_clear dd sz_tl_info_clear
|
||||
tl_key dd sz_tl_key
|
||||
tl_mouse dd sz_tl_mouse
|
||||
tl_draw dd sz_tl_draw
|
||||
tl_info_undo dd sz_tl_info_undo
|
||||
tl_info_redo dd sz_tl_info_redo
|
||||
tl_node_add dd sz_tl_node_add
|
||||
tl_node_set_data dd sz_tl_node_set_data
|
||||
tl_node_get_data dd sz_tl_node_get_data
|
||||
tl_node_delete dd sz_tl_node_delete
|
||||
tl_node_move_up dd sz_tl_node_move_up
|
||||
tl_node_move_down dd sz_tl_node_move_down
|
||||
tl_cur_beg dd sz_tl_cur_beg
|
||||
tl_cur_next dd sz_tl_cur_next
|
||||
tl_cur_perv dd sz_tl_cur_perv
|
||||
tl_node_close_open dd sz_tl_node_close_open
|
||||
tl_node_lev_inc dd sz_tl_node_lev_inc
|
||||
tl_node_lev_dec dd sz_tl_node_lev_dec
|
||||
tl_node_poi_get_info dd sz_tl_node_poi_get_info
|
||||
tl_node_poi_get_next_info dd sz_tl_node_poi_get_next_info
|
||||
tl_node_poi_get_data dd sz_tl_node_poi_get_data
|
||||
|
||||
dd 0,0
|
||||
sz_init1 db 'lib_init',0
|
||||
|
||||
sz_Init_checkbox db 'init_checkbox2',0
|
||||
sz_Check_box_draw db 'check_box_draw2',0
|
||||
sz_Check_box_mouse db 'check_box_mouse2',0
|
||||
;sz_Version_ch db 'version_ch2',0
|
||||
|
||||
sz_Option_box_draw db 'option_box_draw',0
|
||||
sz_Option_box_mouse db 'option_box_mouse',0
|
||||
;sz_Version_op db 'version_op',0
|
||||
|
||||
sz_edit_box_draw db 'edit_box_draw',0
|
||||
sz_edit_box_key db 'edit_box_key',0
|
||||
sz_edit_box_mouse db 'edit_box_mouse',0
|
||||
sz_edit_box_set_text db 'edit_box_set_text',0
|
||||
sz_scrollbar_ver_draw db 'scrollbar_v_draw',0
|
||||
sz_scrollbar_hor_draw db 'scrollbar_h_draw',0
|
||||
|
||||
sz_tl_data_init db 'tl_data_init',0
|
||||
sz_tl_data_clear db 'tl_data_clear',0
|
||||
sz_tl_info_clear db 'tl_info_clear',0
|
||||
sz_tl_key db 'tl_key',0
|
||||
sz_tl_mouse db 'tl_mouse',0
|
||||
sz_tl_draw db 'tl_draw',0
|
||||
sz_tl_info_undo db 'tl_info_undo',0
|
||||
sz_tl_info_redo db 'tl_info_redo',0
|
||||
sz_tl_node_add db 'tl_node_add',0
|
||||
sz_tl_node_set_data db 'tl_node_set_data',0
|
||||
sz_tl_node_get_data db 'tl_node_get_data',0
|
||||
sz_tl_node_delete db 'tl_node_delete',0
|
||||
sz_tl_node_move_up db 'tl_node_move_up',0
|
||||
sz_tl_node_move_down db 'tl_node_move_down',0
|
||||
sz_tl_cur_beg db 'tl_cur_beg',0
|
||||
sz_tl_cur_next db 'tl_cur_next',0
|
||||
sz_tl_cur_perv db 'tl_cur_perv',0
|
||||
sz_tl_node_close_open db 'tl_node_close_open',0
|
||||
sz_tl_node_lev_inc db 'tl_node_lev_inc',0
|
||||
sz_tl_node_lev_dec db 'tl_node_lev_dec',0
|
||||
sz_tl_node_poi_get_info db 'tl_node_poi_get_info',0
|
||||
sz_tl_node_poi_get_next_info db 'tl_node_poi_get_next_info',0
|
||||
sz_tl_node_poi_get_data db 'tl_node_poi_get_data',0
|
||||
|
||||
align 4
|
||||
mouse_dd dd 0
|
||||
last_time dd 0
|
||||
|
||||
align 16
|
||||
sc system_colors
|
||||
|
||||
align 16
|
||||
procinfo process_information
|
||||
|
||||
align 4
|
||||
buf_0: dd 0 ;㪠§ â¥«ì ¡ãä¥à ¨§®¡à ¦¥¨ï
|
||||
@@ -2348,7 +2148,7 @@ buf_png:
|
||||
align 4
|
||||
el_focus dd tree1
|
||||
tree1 tree_list size_one_list,1000+2, tl_key_no_edit+tl_draw_par_line,\
|
||||
16,16, 0xffffff,0xb0d0ff,0x400040, 5,35,195-16,340, 16,Figure.Caption,0,\
|
||||
16,16, 0xffffff,0xb0d0ff,0x10400040, 5,35,195-16,340, 16,Figure.Caption,0,\
|
||||
el_focus,w_scr_t1,0
|
||||
|
||||
align 4
|
||||
@@ -2400,6 +2200,14 @@ endp
|
||||
|
||||
align 16
|
||||
i_end:
|
||||
mouse_dd dd 0
|
||||
last_time dd 0
|
||||
|
||||
align 16
|
||||
sc system_colors
|
||||
|
||||
align 16
|
||||
procinfo process_information
|
||||
rb 2048
|
||||
thread_coords:
|
||||
rb 2048
|
||||
|
||||
@@ -30,7 +30,7 @@ format binary as "" ; Binary file format without extension
|
||||
use32 ; Tell compiler to use 32 bit instructions
|
||||
org 0 ; the base address of code, always 0x0
|
||||
|
||||
; ‡àãîëîâîê èñïîëíÿåìîãî ôàéëà Êîëèáðè ÎÑ
|
||||
; ‡àãîëîâîê èñïîëíÿåìîãî ôàéëà ÊîëèáðèÎÑ
|
||||
db 'MENUET01'
|
||||
dd 1
|
||||
dd START
|
||||
@@ -1662,7 +1662,7 @@ but_open_dlg:
|
||||
.end_open:
|
||||
popad
|
||||
ret
|
||||
|
||||
|
||||
;äàííûå äëß äèàëîãà îòêðûòèß ôàéëîâ
|
||||
align 4
|
||||
OpenDialog_data:
|
||||
@@ -1684,12 +1684,12 @@ OpenDialog_data:
|
||||
.y:
|
||||
.y_size dw 320 ;+52 ; Window y size
|
||||
.y_start dw 10 ;+54 ; Window Y position
|
||||
|
||||
|
||||
default_dir db '/sys',0 ;äèðåêòîðèß ïî óìîë÷àíèþ
|
||||
communication_area_name: db 'FFFFFFFF_open_dialog',0
|
||||
open_dialog_name: db 'opendial',0
|
||||
communication_area_default_path: db '/sys/File managers/',0
|
||||
|
||||
|
||||
Filter:
|
||||
dd Filter.end - Filter.1
|
||||
.1:
|
||||
|
||||
@@ -81,148 +81,7 @@ lib_name_5 db 'kmenu.obj',0
|
||||
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
align 4
|
||||
import_box_lib:
|
||||
dd alib_init0 ;äãªæ¨ï § ¯ã᪠¥âáï ¬ ªà®á®¬ 1 à § ¯à¨ ¯®¤ª«î票¨ ¡¨¡¨«¨®â¥ª¨, ¯®â®¬ã ¢ ¯à®£à ¬¬¥ ¬¥âª ¥¥ ¥ ã¦
|
||||
|
||||
edit_box_draw dd aEdit_box_draw
|
||||
edit_box_key dd aEdit_box_key
|
||||
edit_box_mouse dd aEdit_box_mouse
|
||||
;edit_box_set_text dd aEdit_box_set_text
|
||||
;version_ed dd aVersion_ed
|
||||
|
||||
init_checkbox dd ainit_checkbox
|
||||
check_box_draw dd acheck_box_draw
|
||||
check_box_mouse dd acheck_box_mouse
|
||||
|
||||
option_box_draw dd aOption_box_draw
|
||||
option_box_mouse dd aOption_box_mouse
|
||||
;version_op dd aVersion_op
|
||||
|
||||
scrollbar_ver_draw dd aScrollbar_ver_draw
|
||||
scrollbar_ver_mouse dd aScrollbar_ver_mouse
|
||||
scrollbar_hor_draw dd aScrollbar_hor_draw
|
||||
scrollbar_hor_mouse dd aScrollbar_hor_mouse
|
||||
;version_scrollbar dd aVersion_scrollbar
|
||||
|
||||
tl_data_init dd sz_tl_data_init
|
||||
tl_data_clear dd sz_tl_data_clear
|
||||
tl_info_clear dd sz_tl_info_clear
|
||||
tl_key dd sz_tl_key
|
||||
tl_mouse dd sz_tl_mouse
|
||||
tl_draw dd sz_tl_draw
|
||||
tl_info_undo dd sz_tl_info_undo
|
||||
tl_info_redo dd sz_tl_info_redo
|
||||
tl_node_add dd sz_tl_node_add
|
||||
tl_node_set_data dd sz_tl_node_set_data
|
||||
tl_node_get_data dd sz_tl_node_get_data
|
||||
tl_node_delete dd sz_tl_node_delete
|
||||
tl_cur_beg dd sz_tl_cur_beg
|
||||
tl_cur_next dd sz_tl_cur_next
|
||||
tl_cur_perv dd sz_tl_cur_perv
|
||||
;tl_node_close_open dd sz_tl_node_close_open
|
||||
tl_node_lev_inc dd sz_tl_node_lev_inc
|
||||
tl_node_lev_dec dd sz_tl_node_lev_dec
|
||||
|
||||
ted_but_sumb_upper dd sz_ted_but_sumb_upper
|
||||
ted_but_sumb_lover dd sz_ted_but_sumb_lover
|
||||
ted_but_convert_by_table dd sz_ted_but_convert_by_table
|
||||
ted_can_save dd sz_ted_can_save
|
||||
ted_clear dd sz_ted_clear
|
||||
ted_delete dd sz_ted_delete
|
||||
ted_draw dd sz_ted_draw
|
||||
ted_init dd sz_ted_init
|
||||
ted_init_scroll_bars dd sz_ted_init_scroll_bars
|
||||
ted_init_syntax_file dd sz_ted_init_syntax_file
|
||||
ted_is_select dd sz_ted_is_select
|
||||
ted_key dd sz_ted_key
|
||||
ted_mouse dd sz_ted_mouse
|
||||
ted_open_file dd sz_ted_open_file
|
||||
ted_save_file dd sz_ted_save_file
|
||||
ted_text_add dd sz_ted_text_add
|
||||
ted_but_select_word dd sz_ted_but_select_word
|
||||
ted_but_cut dd sz_ted_but_cut
|
||||
ted_but_copy dd sz_ted_but_copy
|
||||
ted_but_paste dd sz_ted_but_paste
|
||||
ted_but_undo dd sz_ted_but_undo
|
||||
ted_but_redo dd sz_ted_but_redo
|
||||
ted_but_reverse dd sz_ted_but_reverse
|
||||
ted_but_find dd sz_ted_but_find
|
||||
ted_but_replace dd sz_ted_but_replace
|
||||
ted_text_colored dd sz_ted_text_colored
|
||||
ted_go_to_position dd sz_ted_go_to_position
|
||||
version_text_edit dd sz_ted_version
|
||||
|
||||
dd 0,0
|
||||
alib_init0 db 'lib_init',0
|
||||
|
||||
aEdit_box_draw db 'edit_box_draw',0
|
||||
aEdit_box_key db 'edit_box_key',0
|
||||
aEdit_box_mouse db 'edit_box_mouse',0
|
||||
;aEdit_box_set_text db 'edit_box_set_text',0
|
||||
;aVersion_ed db 'version_ed',0
|
||||
|
||||
ainit_checkbox db 'init_checkbox2',0
|
||||
acheck_box_draw db 'check_box_draw2',0
|
||||
acheck_box_mouse db 'check_box_mouse2',0
|
||||
|
||||
aOption_box_draw db 'option_box_draw',0
|
||||
aOption_box_mouse db 'option_box_mouse',0
|
||||
;aVersion_op db 'version_op',0
|
||||
|
||||
aScrollbar_ver_draw db 'scrollbar_v_draw',0
|
||||
aScrollbar_ver_mouse db 'scrollbar_v_mouse',0
|
||||
aScrollbar_hor_draw db 'scrollbar_h_draw',0
|
||||
aScrollbar_hor_mouse db 'scrollbar_h_mouse',0
|
||||
;aVersion_scrollbar db 'version_scrollbar',0
|
||||
|
||||
sz_tl_data_init db 'tl_data_init',0
|
||||
sz_tl_data_clear db 'tl_data_clear',0
|
||||
sz_tl_info_clear db 'tl_info_clear',0
|
||||
sz_tl_key db 'tl_key',0
|
||||
sz_tl_mouse db 'tl_mouse',0
|
||||
sz_tl_draw db 'tl_draw',0
|
||||
sz_tl_info_undo db 'tl_info_undo',0
|
||||
sz_tl_info_redo db 'tl_info_redo',0
|
||||
sz_tl_node_add db 'tl_node_add',0
|
||||
sz_tl_node_set_data db 'tl_node_set_data',0
|
||||
sz_tl_node_get_data db 'tl_node_get_data',0
|
||||
sz_tl_node_delete db 'tl_node_delete',0
|
||||
sz_tl_cur_beg db 'tl_cur_beg',0
|
||||
sz_tl_cur_next db 'tl_cur_next',0
|
||||
sz_tl_cur_perv db 'tl_cur_perv',0
|
||||
;sz_tl_node_close_open db 'tl_node_close_open',0
|
||||
sz_tl_node_lev_inc db 'tl_node_lev_inc',0
|
||||
sz_tl_node_lev_dec db 'tl_node_lev_dec',0
|
||||
|
||||
sz_ted_but_sumb_upper db 'ted_but_sumb_upper',0
|
||||
sz_ted_but_sumb_lover db 'ted_but_sumb_lover',0
|
||||
sz_ted_but_convert_by_table db 'ted_but_convert_by_table',0
|
||||
sz_ted_can_save db 'ted_can_save',0
|
||||
sz_ted_clear db 'ted_clear',0
|
||||
sz_ted_delete db 'ted_delete',0
|
||||
sz_ted_draw db 'ted_draw',0
|
||||
sz_ted_init db 'ted_init',0
|
||||
sz_ted_init_scroll_bars db 'ted_init_scroll_bars',0
|
||||
sz_ted_init_syntax_file db 'ted_init_syntax_file',0
|
||||
sz_ted_is_select db 'ted_is_select',0
|
||||
sz_ted_key db 'ted_key',0
|
||||
sz_ted_mouse db 'ted_mouse',0
|
||||
sz_ted_open_file db 'ted_open_file',0
|
||||
sz_ted_save_file db 'ted_save_file',0
|
||||
sz_ted_text_add db 'ted_text_add',0
|
||||
sz_ted_but_select_word db 'ted_but_select_word',0
|
||||
sz_ted_but_cut db 'ted_but_cut',0
|
||||
sz_ted_but_copy db 'ted_but_copy',0
|
||||
sz_ted_but_paste db 'ted_but_paste',0
|
||||
sz_ted_but_undo db 'ted_but_undo',0
|
||||
sz_ted_but_redo db 'ted_but_redo',0
|
||||
sz_ted_but_reverse db 'ted_but_reverse',0
|
||||
sz_ted_but_find db 'ted_but_find',0
|
||||
sz_ted_but_replace db 'ted_but_replace',0
|
||||
sz_ted_text_colored db 'ted_text_colored',0
|
||||
sz_ted_go_to_position db 'ted_go_to_position',0
|
||||
sz_ted_version db 'version_text_edit',0
|
||||
include '../../develop/libraries/box_lib/import.inc'
|
||||
|
||||
align 4
|
||||
import_proclib:
|
||||
@@ -241,18 +100,8 @@ dd 0,0
|
||||
amb_create db 'mb_create',0
|
||||
amb_reinit db 'mb_reinit',0
|
||||
amb_setfunctions db 'mb_setfunctions',0
|
||||
|
||||
align 4
|
||||
import_libimg:
|
||||
dd alib_init1
|
||||
img_to_rgb2 dd aimg_to_rgb2
|
||||
img_decode dd aimg_decode
|
||||
img_destroy dd aimg_destroy
|
||||
dd 0,0
|
||||
alib_init1 db 'lib_init',0
|
||||
aimg_to_rgb2 db 'img_to_rgb2',0
|
||||
aimg_decode db 'img_decode',0 ; ¢â®¬ â¨ç¥áª¨ ®¯à¥¤¥«ï¥â ä®à¬ â £à ä¨ç¥áª¨å ¤ ëå
|
||||
aimg_destroy db 'img_destroy',0
|
||||
|
||||
include '../../develop/libraries/libs-dev/libimg/import.inc'
|
||||
|
||||
align 4
|
||||
import_libini:
|
||||
|
||||
@@ -394,11 +394,11 @@ p_syntax:
|
||||
mov ecx,ted_wnd_t
|
||||
shl ecx,16
|
||||
mov cx,20
|
||||
mcall SF_DRAW_RECT,TED_PANEL_WIDTH,,[sc.work] ;ðèñîâàíèå âåðõíåãî ôîíîâîãî ïðÿìîóãîëüíèêà
|
||||
mcall SF_DRAW_RECT,TED_PANEL_WIDTH,,[sc.work] ;drawing the top background rectangle
|
||||
|
||||
stdcall [tl_draw], tree1
|
||||
mov [ws_dir_lbox.all_redraw],1 ;äëÿ ïîëíîé ïåðåðèñîâêè äî÷åðíåãî ñêðîëëèíãà
|
||||
stdcall [scrollbar_ver_draw], ws_dir_lbox
|
||||
mov [ws_dir_lbox.all_redraw],1 ;for a complete redraw of the child scroll
|
||||
stdcall [scrollbar_v_draw], ws_dir_lbox
|
||||
|
||||
ror ecx,16
|
||||
add ecx,[tree1.box_height]
|
||||
@@ -411,7 +411,7 @@ p_syntax:
|
||||
sub cx,20
|
||||
sub ecx,[tree1.box_height]
|
||||
inc cx
|
||||
int 0x40 ;ðèñîâàíèå íèæíåãî ôîíîâîãî ïðÿìîóãîëüíèêà
|
||||
int 0x40 ;drawing the bottom background rectangle
|
||||
|
||||
mov ecx,ted_wnd_t
|
||||
add ecx,25
|
||||
@@ -436,7 +436,7 @@ p_syntax:
|
||||
popad
|
||||
ret
|
||||
|
||||
MIN_M_WND_H equ 100 ;ìèíèìàëüíàÿ âûñîòà ãëàâíîãî îêíà
|
||||
MIN_M_WND_H equ 100 ;minimum height of main window
|
||||
;input:
|
||||
; edi = pointer to tedit struct
|
||||
align 4
|
||||
|
||||
@@ -80,7 +80,7 @@ pushad
|
||||
@@:
|
||||
|
||||
mov dword[w_scr_t3.all_redraw],1
|
||||
stdcall [scrollbar_ver_draw], w_scr_t3
|
||||
stdcall [scrollbar_v_draw], w_scr_t3
|
||||
stdcall [tl_draw], tree3
|
||||
stdcall [edit_box_draw], edit3
|
||||
mcall SF_REDRAW,SSF_END_DRAW
|
||||
|
||||
Reference in New Issue
Block a user