From 881739653b8c6c4aa7066e374b5e2a8f569759c1 Mon Sep 17 00:00:00 2001 From: savelij13 Date: Fri, 25 Jul 2025 16:01:19 +0300 Subject: [PATCH] =?UTF-8?q?CDplayer.flx=201.1:=20-=20=D0=BF=D0=BB=D0=B0?= =?UTF-8?q?=D0=B3=D0=B8=D0=BD=20=D0=B4=D0=BE=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD?= =?UTF-8?q?,=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5/history=20?= =?UTF-8?q?=D0=B2=20cdplayer.txt=20=D1=80=D1=8F=D0=B4=D0=BE=D0=BC=20=D1=81?= =?UTF-8?q?=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=D0=BE=D0=BC.=20FE=201.0?= =?UTF-8?q?9=20-=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE:=20=D0=BF=D1=80=D0=B8=20=D0=B2=D1=8B=D1=85=D0=BE=D0=B4?= =?UTF-8?q?=D0=B5=20=D0=B8=D0=B7=20=D1=80=D0=B5=D0=B4=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B0=20=D1=81=20=D0=BD=D0=B5=D1=81=D0=BE=D1=85?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=BD=D1=8B=D0=BC=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D0=BE=D0=BC=20=D0=B8=20=D0=B7=D0=B0=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=81=D0=B5=20=D0=BD=D0=B0=20=D1=81=D0=BE=D1=85=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20=20=20=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D1=88=D0=B0=20Enter=20=D1=82=D0=B5=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D1=8C=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5=D1=82?= =?UTF-8?q?=20=D0=BA=D0=B0=D0=BA=20=D0=BF=D0=BE=D0=B4=D1=82=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D0=BE=D1=85?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F.=20FN=201.16=20-=20?= =?UTF-8?q?=D0=B2=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BD=D0=BD=D1=8B=D0=B9=20?= =?UTF-8?q?editor=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B5=D1=85=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B2=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=20=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D1=83=D0=B4=D0=B0=20=D0=B8=20=D0=B7=D0=B0=D0=BF=D1=83?= =?UTF-8?q?=D1=81=D0=BA=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D0=BF=D0=BE=20F4,?= =?UTF-8?q?=20=D0=B8=D0=B7=20FN=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD.=20?= =?UTF-8?q?-=20=D0=B2=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D0=B9=20viewer=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B5=D1=85=D0=B0?= =?UTF-8?q?=D0=BB=20=D0=B2=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=20=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D1=83=D0=B4=D0=B0=20=D0=B8=20=D0=B7=D0=B0=D0=BF?= =?UTF-8?q?=D1=83=D1=81=D0=BA=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D0=BF=D0=BE?= =?UTF-8?q?=20F3,=20=D0=B8=D0=B7=20FN=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD.=20-=20=D0=B2=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20help=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B5=D1=85?= =?UTF-8?q?=D0=B0=D0=BB=20=D0=B2=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=20?= =?UTF-8?q?=D0=BE=D1=82=D0=BA=D1=83=D0=B4=D0=B0=20=D0=B8=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BF=D1=83=D1=81=D0=BA=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=20=D0=BD=D0=B0=D0=B6=D0=B0=D1=82=D0=B8=D0=B8=20F1,?= =?UTF-8?q?=20=D0=B8=D0=B7=20FN=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD.=20?= =?UTF-8?q?-=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B0=20=D0=BF?= =?UTF-8?q?=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=D0=B0=20=D0=BE=D1=82=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=82=20=D0=B7=D0=B0=D0=BF?= =?UTF-8?q?=D1=83=D1=81=D0=BA=D0=B0,=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D1=8C=20=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=20=D0=B7=D0=B0=D0=BF?= =?UTF-8?q?=D1=83=D1=81=D0=BA=D0=B0=D1=82=D1=8C=20=D0=BF=D0=BB=D0=B0=D0=B3?= =?UTF-8?q?=D0=B8=D0=BD=D1=8B=20=D0=BD=D0=B5=20=20=20=D1=82=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=BA=D0=BE=20=D0=B8=D0=B7=20=D0=BF=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BB=D0=B8=20FN.=20-=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BC=D0=B0=D0=BA=D1=80=D0=BE=D1=81=20=D1=84?= =?UTF-8?q?=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2.=20-=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA?= =?UTF-8?q?=D0=B0=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D0=BF=D0=BB?= =?UTF-8?q?=D0=B0=D0=B3=D0=B8=D0=BD=D0=BE=D0=B2=20=D0=B2=20=D0=B0=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D1=81=D0=B0=200x4000-0x7FFF=20(=D0=BE=D0=BA=D0=BD?= =?UTF-8?q?=D0=BE=201)=20=D0=B2=20=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=20=20=D0=BA=20=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D1=80=D1=8B=D0=BC=200xC000-0xBFFF=20(=D0=BE=D0=BA=D0=BD=D0=BE?= =?UTF-8?q?=203),=20=D0=BF=D0=BE=D0=BA=D0=B0=20=D0=B8=D1=81=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=B7=D1=83=D0=B5=D1=82=D1=81=D1=8F=20=D0=B2=20?= =?UTF-8?q?=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=D0=B5=20cdplayer.=20-=20?= =?UTF-8?q?=D0=B2=20=D0=BE=D0=BA=D0=BD=D0=B0=D1=85=20=D1=81=20=D0=BE=D1=88?= =?UTF-8?q?=D0=B8=D0=B1=D0=BA=D0=BE=D0=B9=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=B0=D0=BD=20=D0=BD=D0=B0=202=20=D1=82=D0=B8?= =?UTF-8?q?=D0=BF=D0=B0=20=D0=BE=D0=BA=D0=BE=D0=BD=20=D0=B2=D0=BC=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D0=BE=20=D0=BC=D0=BD=D0=BE=D0=B3=D0=B8=D1=85=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=20=D0=BA=D0=B0=D0=B6=D0=B4=D1=83=D1=8E=20?= =?UTF-8?q?=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D1=83.=20-=20=D0=B8=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BF=D0=BE=D1=82?= =?UTF-8?q?=D0=B5=D1=80=D1=8F=20=D1=86=D0=B2=D0=B5=D1=82=D0=B0=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=20=D0=BF=D0=B5=D1=87=D0=B0=D1=82=D0=B8=20=D1=82?= =?UTF-8?q?=D0=B5=D0=BA=D1=81=D1=82=D0=B0=20=D0=BF=D0=BE=20=D1=83=D0=BA?= =?UTF-8?q?=D0=B0=D0=B7=D0=B0=D0=BD=D0=BD=D0=BE=D0=BC=D1=83=20=D0=B0=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D1=81=D1=83.=20-=20=D1=82=D0=B5=D0=BA=D1=81=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=D1=8B=D0=BC=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0=D0=BC?= =?UTF-8?q?=20=D0=B2=D0=B5=D1=80=D0=BD=D1=83=D0=BB=20=D0=BA=D0=BE=D0=B4?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D1=83=20CP866,=20readme.md=20?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=B2=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=B4=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B5=20UTF8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.bat | 4 +- docs/FN.EXT | 17 + docs/FNEDIT.EXT | 3 + docs/FNVIEW.EXT | 13 + docs/HELP.ENG | 25 - docs/HELP.RUS | 29 - docs/flx_header.eng | 35 ++ docs/flx_header.rus | 38 ++ docs/fn_api_0.2.txt | 698 ++++++++++----------- docs/fn_api_0.3.txt | 746 +++++++++++----------- docs/fn_api_0.4.txt | 776 +++++++++++------------ docs/fn_api_0.5.txt | 818 ++++++++++++------------- docs/hist866.txt | 157 ----- docs/history.txt | 198 +++--- docs/todo.txt | 30 +- fn/flx/calc.flx | Bin 1227 -> 1227 bytes fn/flx/cdplayer.flx | Bin 12732 -> 9657 bytes fn/flx/cdplayer.txt | 46 ++ fn/flx/date.flx | Bin 1321 -> 1324 bytes fn/flx/fneditor.flx | Bin 11763 -> 11780 bytes fn/flx/fnviewer.flx | Bin 7006 -> 7006 bytes fn/flx/help.flx | Bin 6363 -> 6361 bytes fn/flx/test.flx | Bin 298 -> 298 bytes fn/fn.exe | Bin 78114 -> 48551 bytes fn/history.txt | 22 +- fn_const.a80 | 202 +++--- fn_exe_boot.a80 | 159 +++-- fn_macros.a80 | 49 +- fn_version.a80 | 6 +- fnbar.a80 | 200 +++--- fndos.a80 | 42 +- fndosline.a80 | 46 +- fninit.a80 | 108 ++-- fnmain.a80 | 127 ++-- fnmenu.a80 | 58 +- fnmouse.a80 | 194 +++--- fnpanel.a80 | 104 ++-- fnsort.a80 | 10 +- fnsys.a80 | 153 ++--- fntree.a80 | 40 +- fnwin.a80 | 54 +- fnwork.a80 | 644 ++++++++++--------- plugins/calc/calc.a80 | 10 +- plugins/cdplayer/build.bat | 6 +- plugins/cdplayer/cdplayer.a80 | 756 ++++++++++++++++++----- plugins/cdplayer/cdplayer.txt | 46 ++ plugins/cdplayer/cdrom.a80 | 18 +- plugins/cdplayer/digits.a80 | 786 ++++++++++++------------ plugins/cdplayer/{cd.a80 => icons.a80} | 0 plugins/cdplayer/shaos.a80 | 14 +- plugins/cdplayer/vers.a80 | 7 + plugins/date/date.a80 | 11 +- plugins/fneditor/feditor.a80 | 6 +- plugins/fneditor/femain.a80 | 12 +- plugins/fneditor/fesetup.a80 | 6 +- plugins/fnviewer/fvmain.a80 | 12 +- plugins/help/header.a80 | 10 +- plugins/help/help_t.a80 | 6 +- plugins/test/test.a80 | 10 +- readme.md | 2 +- rez2_fnconfig.a80 | 22 +- rez2_fnerror.a80 | 395 +++++------- rez2_fnfunct.a80 | 561 +++++++++-------- rez2_fnmisc.a80 | 54 +- rez2_fnsearch.a80 | 36 +- rez3_fnmark.a80 | 423 +++++++++---- rez3_fnnext.a80 | 36 +- 67 files changed, 4946 insertions(+), 4150 deletions(-) create mode 100644 docs/FN.EXT create mode 100644 docs/FNEDIT.EXT create mode 100644 docs/FNVIEW.EXT delete mode 100644 docs/HELP.ENG delete mode 100644 docs/HELP.RUS create mode 100644 docs/flx_header.eng create mode 100644 docs/flx_header.rus delete mode 100644 docs/hist866.txt create mode 100644 fn/flx/cdplayer.txt create mode 100644 plugins/cdplayer/cdplayer.txt rename plugins/cdplayer/{cd.a80 => icons.a80} (100%) create mode 100644 plugins/cdplayer/vers.a80 diff --git a/build.bat b/build.bat index b41fba7..5c74a2d 100644 --- a/build.bat +++ b/build.bat @@ -24,7 +24,9 @@ rem cd .. copy /Y /B tmp\fn.exe fn\fn.exe copy /Y /B plugins\*.flx fn\flx -copy /Y /B docs\hist866.txt fn\history.txt +copy /Y /B plugins\*.txt fn\flx +copy /Y /B docs\history.txt fn\history.txt +rem copy /Y /B docs\*.ext fn echo ######################## echo # -= End Compile Ok =- # diff --git a/docs/FN.EXT b/docs/FN.EXT new file mode 100644 index 0000000..a3ccebe --- /dev/null +++ b/docs/FN.EXT @@ -0,0 +1,17 @@ +bat: C:\system.exe /c !\!.! +ima: C:\DSS\mountima.exe /m !\!.! +trd: C:\ZX\spectrum.exe sp.zx !\!.! +scl: C:\ZX\spectrum.exe sp.zx !\!.! +zx : C:\ZX\spectrum.exe !\!.! +fli: C:\BIN\flicplay.exe !\!.! +flc: C:\BIN\flicplay.exe !\!.! +bmp: C:\BIN\gfxview.exe !\!.! +pcx: C:\BIN\gfxview.exe !\!.! +scr: C:\BIN\zxview.exe !\!.! +ico: C:\BIN\gfxview.exe !\!.! +img: C:\BIN\zxview.exe !\!.! +gff: C:\BIN\gffview.exe !\!.! +wav: C:\BIN\wavplay.exe !\!.! +pt3: C:\BIN\pt3play.exe !\!.! +mod: C:\BIN\proplay.exe !\!.! +sgi: C:\BIN\sgiver.exe !\!.! diff --git a/docs/FNEDIT.EXT b/docs/FNEDIT.EXT new file mode 100644 index 0000000..ef5ccf2 --- /dev/null +++ b/docs/FNEDIT.EXT @@ -0,0 +1,3 @@ +trd: C:\ZX\spectrum.exe sc256.zx !\!.! +scl: C:\ZX\spectrum.exe sc256.zx !\!.! + diff --git a/docs/FNVIEW.EXT b/docs/FNVIEW.EXT new file mode 100644 index 0000000..33577a7 --- /dev/null +++ b/docs/FNVIEW.EXT @@ -0,0 +1,13 @@ +trd: C:\ZX\spectrum.exe p128.zx !\!.! +scl: C:\ZX\spectrum.exe p128.zx !\!.! +fli: C:\BIN\flicplay.exe !\!.! +flc: C:\BIN\flicplay.exe !\!.! +bmp: C:\BIN\gfxview.exe !\!.! +pcx: C:\BIN\gfxview.exe !\!.! +scr: C:\BIN\gfxview.exe !\!.! +ico: C:\BIN\gfxview.exe !\!.! +img: C:\BIN\zxview.exe !\!.! +gff: C:\BIN\gffview.exe !\!.! +wav: C:\BIN\wavplay.exe !\!.! +pt3: C:\BIN\pt3play.exe !\!.! +mod: C:\BIN\proplay.exe !\!.! diff --git a/docs/HELP.ENG b/docs/HELP.ENG deleted file mode 100644 index ea8d9f1..0000000 --- a/docs/HELP.ENG +++ /dev/null @@ -1,25 +0,0 @@ - -struct FlxPluginHeader { - char Id[8]; - unsigned short LoadOffset; - unsigned short EntryOffset; - unsigned char PluginMode; - unsigned char Reserved[3]; -}; - - Header of Plugin for Flex Navigator v1.xx: - 8 bytes Id - identifier of plugin, you should begin from three symbols - FLX - 2 bytes LoadOffset - displacement in page of memory for load (0 - 0x3FFF) - 2 bytes EntryOffset - displacement in page of memory for executing (0 - 0x3FFF) - 1 byte PluginMode - modes of work: - 0 - repairing Flex Navigator screen after finish - 1 - without repairing Flex Navigator screen after finish - 3 bytes Reserved - length = 16 bytes - - ATTANTION!!! - 1. Size of plugin code (without header) must be less 4000 bytes. - 2. ORG = 0xC000 - 3. When control will return to Flex Navigator, Carry Flag are specify error status: - CF = 1 error during initialization - CF = 0 no error diff --git a/docs/HELP.RUS b/docs/HELP.RUS deleted file mode 100644 index 814b3ae..0000000 --- a/docs/HELP.RUS +++ /dev/null @@ -1,29 +0,0 @@ - -struct FlxPluginHeader { - char Id[8]; - unsigned short LoadOffset; - unsigned short EntryOffset; - unsigned char PluginMode; - unsigned char Reserved[3]; -}; - - Заголовок плагина для Flex Navigator v1.xx: - 8 байт Id - индентификатор плагина, первые 3 символа всегда должны быть FLX - 2 байта LoadOffset - смещение в странице памяти для загрузки (0 - 0x3FFF) - 2 байта EntryOffset - смещение в странице памяти для запуска (0 - 0x3FFF) - 1 байт PluginMode - режим работы: - 0 - работает с восстановлением рабочей области Flex Navigator - (т.е. после работы плагина не нужно восстанавливать экран) - 1 - работает без восстановления рабочей области Flex Navigator - (т.е. после работы плагина нужно восстанавливать экран) - 3 байта Reserved - зарезервировано - длина = 16 байт - - !!! ВНИМАНИЕ - 1. все плагины для Flex Navigator v1.xx не должны превышать в размере основного кода -(т.е. без заголовка) 0x4000 байта. - 2. все плагины для Flex Navigator v1.xx должны быть откомпилированы с адреса 0xC000 -(т.е. org = 0xC000). - 3. возвращаемое значение: - CF = 1 ошибка на стадии инитиализации (после неё ничего не восстанавливается) - CF = 0 нет ошибки diff --git a/docs/flx_header.eng b/docs/flx_header.eng new file mode 100644 index 0000000..6f8f582 --- /dev/null +++ b/docs/flx_header.eng @@ -0,0 +1,35 @@ + +Version 2. The minimum version of Flex Navigator is 1.16. + +struct FlxPluginHeader { + char Id[8]; + unsigned short LoadOffset; + unsigned short EntryOffset; + unsigned char PluginMode; + unsigned char Reserved[3]; +}; + + Header of Plugin for Flex Navigator v1.xx: + 8 bytes Id - identifier of plugin, you should begin from three symbols - FLX + 2 bytes LoadOffset - displacement in page of memory for load (0 - 0x3FFF) + (according to the 0x3FFF mask, the 2 highest ones are not counted) + 2 bytes EntryOffset - displacement in page of memory for executing (0 - 0x3FFF) + (according to the 0x3FFF mask, the 2 highest ones are not counted) + 1 byte PluginMode - modes of work: + 0 - repairing Flex Navigator screen after finish + 1 - without repairing Flex Navigator screen after finish + bit 1 = 0 is the compilation and operation address in addresses 0xC000-0xFFFF + bit 1 = 1 - compilation and operation address in addresses 0x4000-0x7FFF + 3 bytes Reserved + length = 16 bytes + + ATTENTION!!! + 1. Size of plugin code (without header) must be less 4000 bytes. + 2. all plug-ins for Flex Navigator v1.xx must be compiled depending + on bit 1 in PluginMode from address 0x4000 or 0xC000 (i.e. org = 0x4000 or org= 0xC000). + 3. When control will return to Flex Navigator, Carry Flag are specify error status: + CF = 1 an error at the initialization stage (nothing is restored after it) + CF = 0 no error + +History: +14.07.2025: added the ability for plugins to work in window 1 (addresses 0x4000-0x7FFF). diff --git a/docs/flx_header.rus b/docs/flx_header.rus new file mode 100644 index 0000000..e8f7a83 --- /dev/null +++ b/docs/flx_header.rus @@ -0,0 +1,38 @@ + + 2. 쭠 Flex Navigator 1.16. + +struct FlxPluginHeader { + char Id[8]; + unsigned short LoadOffset; + unsigned short EntryOffset; + unsigned char PluginMode; + unsigned char Reserved[3]; +}; + + Flex Navigator v1.xx: + 8 Id - 䨪 , 3 ᨬ ᥣ FLX + 2 LoadOffset - ᬥ饭 ࠭ 㧪 (0 - 0x3FFF) + ( ᪥ 0x3FFF, 2 뢠) + 2 EntryOffset - ᬥ饭 ࠭ ᪠ (0 - 0x3FFF) + ( ᪥ 0x3FFF, 2 뢠) + 1 PluginMode - ० ࠡ: + bit 0 = 0 - ࠡ⠥ ⠭ ࠡ祩 Flex Navigator + (.. ᫥ ࠡ 㦭 ⠭ ࠭) + bit 0 = 1 - ࠡ⠥ ⠭ ࠡ祩 Flex Navigator + (.. ᫥ ࠡ 㦭 ⠭ ࠭) + bit 1 = 0 - 樨 ࠡ 0xC000-0xFFFF + bit 1 = 1 - 樨 ࠡ 0x4000-0x7FFF + 3 Reserved - १ࢨ஢ + = 16 + + !!! + 1. Flex Navigator v1.xx ॢ ࠧ ᭮ +(.. ) 0x4000 . + 2. Flex Navigator v1.xx ⪮஢ ᨬ + 1 PluginMode 0x4000 0xC000 (.. org = 0x4000 org = 0xC000). + 3. 頥 祭: + CF = 1 訡 ⠤ ⨠樨 (᫥ 祣 ⠭) + CF = 0 訡 + +History: +14.07.2025: ࠡ 1 ( 0x4000-0x7FFF). diff --git a/docs/fn_api_0.2.txt b/docs/fn_api_0.2.txt index 3d5628e..9e47e18 100644 --- a/docs/fn_api_0.2.txt +++ b/docs/fn_api_0.2.txt @@ -1,7 +1,7 @@ []========================================================================[] * * -* Описание Flex Navigator API v1.xx для разработчиков Flx-Plugins * -* doc v0.2 от 07.07.2002 * +* ᠭ Flex Navigator API v1.xx ࠧࠡ稪 Flx-Plugins * +* doc v0.2 07.07.2002 * * * []========================================================================[] @@ -11,554 +11,554 @@ []------------------------------------------------------------------------[] - ClearScreen - процедура отчистки 0-го экана нужным цветом. + ClearScreen - 楤 ⪨ 0- 㦭 梥⮬. - на вход: - A - цвет отчистки (00-0Fh) - на выход: + 室: + A - 梥 ⪨ (00-0Fh) + 室: - []------------------------------------------------------------------------[] - MakeWindow - процедура создания графического окна + MakeWindow - 楤 ᮧ ᪮ - на вход: - (SP) - описатель окна - на выход: + 室: + (SP) - ⥫ + 室: - - сразу за вызовом этой процедуры в программе следует описатель окна. - возврат из процедуры происходит по адресу, следующему за описателем. + ࠧ 맮 ⮩ 楤 ணࠬ ᫥ ⥫ . + 楤 ந室 , ᫥饬 ⥫. - например: + ਬ: call MakeWindow - ... ; описатель окна + ... ; ⥫ - описатель окна: - +00 (1) флаг вывода окна: 0 - без сохранения данных под окном - (используется для полноэкранных окон) - 1 - с сохранением данных под окном - (используется для небольших окон) - 0x7F - восстановить данные под окном - (флаг служит для закрытия - текущего окна) - +01 (2) координата x для вывода (0 - 639) - +03 (2) координата y для вывода (0 - 255) - +05 (2) длина окна по x (0 - 639) - +07 (2) длина окна по y (0 - 255) + ⥫ : + +00 (1) 䫠 뢮 : 0 - ࠭ + (ᯮ ࠭ ) + 1 - ࠭ + (ᯮ ) + 0x7F - ⠭ + (䫠 㦨 + ⥪饣 ) + +01 (2) न x 뢮 (0 - 639) + +03 (2) न y 뢮 (0 - 255) + +05 (2) x (0 - 639) + +07 (2) y (0 - 255) - далее идут об'екты окна в формате: - +00 (1) тип обекта - +01 ... описатели обекта + ' ଠ: + +00 (1) ⨯ + +01 ... ⥫ - об'екты окна: - 0. +00 (1) == 0 - конец списка об'ектов. после этого оконная - функция возвращает управление. + ' : + 0. +00 (1) == 0 - ᯨ᪠ '⮢. ᫥ ⮣ + 㭪 頥 ࠢ. - 1. +00 (1) == 1 - текстовая строка - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (1) цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - +06 ... текстовая строка (конец строки - 0) + 1. +00 (1) == 1 - ⥪⮢ ப + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (1) 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + +06 ... ⥪⮢ ப ( ப - 0) - 2. +00 (1) == 2 - заполнение прямоугольной плоскости - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по x (0 - 639) - +07 (2) длина по y (0 - 255) - +09 (1) цвет заполнения - (d7-d4 цвет background, d3-d0 цвет foreground) + 2. +00 (1) == 2 - אַ㣮쭮 ᪮ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) x (0 - 639) + +07 (2) y (0 - 255) + +09 (1) 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) - 3. +00 (1) == 3 - отрисовка углублённой прямоугольной плоскости - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по x (0 - 639) - +07 (2) длина по y (0 - 255) + 3. +00 (1) == 3 - ᮢ 㣫㡫񭭮 אַ㣮쭮 ᪮ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) x (0 - 639) + +07 (2) y (0 - 255) - 4. +00 (1) == 4 - отрисовка выпуклой прямоугольной плоскости - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по x (0 - 639) - +07 (2) длина по y (0 - 255) + 4. +00 (1) == 4 - ᮢ 㪫 אַ㣮쭮 ᪮ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) x (0 - 639) + +07 (2) y (0 - 255) - 5. +00 (1) == 5 - отрисовка кнопки с текстом - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по x (0 - 639) - +07 (2) длина по y (0 - 255) - +09 (1) цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - +10 ... текстовая строка (конец строки - 0) + 5. +00 (1) == 5 - ᮢ ⥪⮬ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) x (0 - 639) + +07 (2) y (0 - 255) + +09 (1) 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + +10 ... ⥪⮢ ப ( ப - 0) - Внимание! печать текста осуществляется с позиций + ! ⥪ ⢫ 権 x + 4, y + 1 - 6. +00 (1) == 6 - отрисовка горизонтального разделителя - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по x (0 - 639) + 6. +00 (1) == 6 - ᮢ ਧ⠫쭮 ࠧ⥫ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) x (0 - 639) - 7. +00 (1) == 7 - отрисовка вертикального разделителя - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по y (0 - 255) + 7. +00 (1) == 7 - ᮢ ⨪쭮 ࠧ⥫ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) y (0 - 255) - 8. +00 (1) == 8 - отрисовка левой кнопки скролбара <- - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) + 8. +00 (1) == 8 - ᮢ ஫ <- + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) - 9. +00 (1) == 9 - отрисовка правой кнопки скролбара -> - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) + 9. +00 (1) == 9 - ᮢ ࠢ ஫ -> + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) - 10. +00 (1) == 10 - отрисовка верхней кнопки скролбара ^ - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) + 10. +00 (1) == 10 - ᮢ 孥 ஫ ^ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) - 11. +00 (1) == 11 - отрисовка нижней кнопки скролбара - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) + 11. +00 (1) == 11 - ᮢ ஫ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) []------------------------------------------------------------------------[] - InvertRectan - процедура замены цвета прямоугольной плоскости + InvertRectan - 楤 梥 אַ㣮쭮 ᪮ - на вход: - HL - x координата - BC - y координата - HX - длина y - LX - длина x - D - текущий цвет - (d7-d4 цвет background, d3-d0 цвет foreground) - E - нужный цвет - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: + 室: + HL - x न + BC - y न + HX - y + LX - x + D - ⥪騩 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + E - 㦭 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: - - к сожалению процедура не очень быстрая, поэтому большие - прямоугольники советую особо не инвертировать... ;) + ᮦ 楤 祭 , ⮬ 訥 + אַ㣮쭨 ᮢ ᮡ ஢... ;) []------------------------------------------------------------------------[] - PrnTxtLnIFF - процедура вывода текстовых строк на графический экран - 640x256 в режиме размерного по X шрифта - на вход: - HL - адрес текстовой строки (конец строки - 0) - DE - позиция вывода по X - BC - позиция вывода по Y - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: - HL - адрес байта, следующего за строкой + PrnTxtLnIFF - 楤 뢮 ⥪⮢ ப ᪨ ࠭ + 640x256 ० ࠧ୮ X + 室: + HL - ⥪⮢ ப ( ப - 0) + DE - 뢮 X + BC - 뢮 Y + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: + HL - , ᫥饣 ப []------------------------------------------------------------------------[] - PrnTxtLnNorm - процедура вывода текстовых строк на графический экран + PrnTxtLnNorm - 楤 뢮 ⥪⮢ ப ᪨ ࠭ 640x256 - на вход: - HL - адрес текстовой строки (конец строки - 0) - DE - позиция вывода по X - BC - позиция вывода по Y - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: - HL - адрес байта, следующего за строкой + 室: + HL - ⥪⮢ ப ( ப - 0) + DE - 뢮 X + BC - 뢮 Y + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: + HL - , ᫥饣 ப []------------------------------------------------------------------------[] - PrnTxtLnNormC - процедура вывода текстовых строк на графический экран - 640x256 с известным числом символов - на вход: - HL - адрес текстовой строки - DE - позиция вывода по X - C - позиция вывода по Y - B - кол-во печатаемых символов - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: - HL - адрес байта, следующего за последним символом + PrnTxtLnNormC - 楤 뢮 ⥪⮢ ப ᪨ ࠭ + 640x256 ᫮ ᨬ + 室: + HL - ⥪⮢ ப + DE - 뢮 X + C - 뢮 Y + B - - ⠥ ᨬ + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: + HL - , ᫥饣 ᫥ ᨬ []------------------------------------------------------------------------[] - PrnRangPathL - процедура вывода досовских путей на графический экран - 640x256 в режиме размерного по X шрифта, прижатых к - левому краю ( |-> ) - на вход: - IX - кол-во пикселей под вывод строки - HL - адрес текстовой строки (конец строки - 0) - DE - позиция вывода по X - BC - позиция вывода по Y - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: + PrnRangPathL - 楤 뢮 ᮢ᪨ ⥩ ᪨ ࠭ + 640x256 ० ࠧ୮ X , ਦ + ( |-> ) + 室: + IX - - ᥫ 뢮 ப + HL - ⥪⮢ ப ( ப - 0) + DE - 뢮 X + BC - 뢮 Y + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: - - процедура грамотно укорачивает досовский путь до нужного - размера путём замещения невлезающих директорий на ..\ + 楤 ࠬ⭮ 㪮稢 ᮢ᪨ 㦭 + ࠧ 饭 ४਩ ..\ []------------------------------------------------------------------------[] - PrnRangPathR - процедура вывода досовских путей на графический экран - 640x256 в режиме размерного по X шрифта, прижатых к - правому краю ( <-| ) - на вход: - IX - кол-во пикселей под вывод строки - HL - адрес текстовой строки (конец строки - 0) - DE - позиция вывода по X - BC - позиция вывода по Y - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: + PrnRangPathR - 楤 뢮 ᮢ᪨ ⥩ ᪨ ࠭ + 640x256 ० ࠧ୮ X , ਦ + ࠢ ( <-| ) + 室: + IX - - ᥫ 뢮 ப + HL - ⥪⮢ ப ( ப - 0) + DE - 뢮 X + BC - 뢮 Y + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: - - процедура грамотно укорачивает досовский путь до нужного - размера путём замещения невлезающих директорий на ..\ + 楤 ࠬ⭮ 㪮稢 ᮢ᪨ 㦭 + ࠧ 饭 ४਩ ..\ []------------------------------------------------------------------------[] - PrnRangPathC - процедура вывода досовских путей на графический экран - 640x256 в режиме размерного по X шрифта, отцентрированных - относительно краёв ( <-|-> ) - на вход: - IX - кол-во пикселей под вывод строки - HL - адрес текстовой строки (конец строки - 0) - DE - позиция вывода по X - BC - позиция вывода по Y - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: + PrnRangPathC - 楤 뢮 ᮢ᪨ ⥩ ᪨ ࠭ + 640x256 ० ࠧ୮ X , 業஢ + ⭮⥫쭮 ( <-|-> ) + 室: + IX - - ᥫ 뢮 ப + HL - ⥪⮢ ப ( ப - 0) + DE - 뢮 X + BC - 뢮 Y + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: - - процедура грамотно укорачивает досовский путь до нужного - размера путём замещения невлезающих директорий на ..\ + 楤 ࠬ⭮ 㪮稢 ᮢ᪨ 㦭 + ࠧ 饭 ४਩ ..\ []------------------------------------------------------------------------[] - InputLine - процедура редактирования строки на графическом экране - 640x256 в режиме размерного по X шрифта + InputLine - 楤 ।஢ ப ᪮ ࠭ + 640x256 ० ࠧ୮ X - на вход: - IX - адрес описателя строки - HL - адрес описателя элементов экрана (для мышки) - на выход: + 室: + IX - ⥫ ப + HL - ⥫ ⮢ ࠭ ( 誨) + 室: - - описатель строки: - +00 (1) максимальная длина строки - +01 (1) флаг готовности - +02 (1) текущая X позиция курсора (инициализируется в InputLine) - +03 (1) текущая add_x (инициализируется в InputLine) - +04 (1) количество введенных символов / длина строки - +05 (2) X позиция строки на экране - +07 (2) Y позиция строки на экране - +09 (2) X длина строки на экране - +0B (1) цвет строки (d7-d4 цвет background, d3-d0 цвет foreground) - +0C ... сама строка + ⥫ ப: + +00 (1) ᨬ쭠 ப + +01 (1) 䫠 ⮢ + +02 (1) ⥪ X (樠 InputLine) + +03 (1) ⥪ add_x (樠 InputLine) + +04 (1) ⢮ ᨬ / ப + +05 (2) X ப ࠭ + +07 (2) Y ப ࠭ + +09 (2) X ப ࠭ + +0B (1) 梥 ப (d7-d4 梥 background, d3-d0 梥 foreground) + +0C ... ᠬ ப - процедуры для таблицы элементов экрана: - InpLnExtN - процедура нормального выхода из редакции - InpLnExtC - процедура выхода из редакции по cancel - (восстанавливает изначальную строку) + 楤 ⠡ ⮢ ࠭: + InpLnExtN - 楤 ଠ쭮 室 ।樨 + InpLnExtC - 楤 室 ।樨 cancel + (⠭ 砫 ப) []------------------------------------------------------------------------[] - InitScrBar - процедура инициализации описателя скроллбара + InitScrBar - 楤 樠樨 ⥫ ஫ - на вход: - IX - адрес описателя скроллбара - на выход: + 室: + IX - ⥫ ஫ + 室: - []------------------------------------------------------------------------[] - PrnHScrBar - процедура печати горизонтального скроллбара + PrnHScrBar - 楤 ਧ⠫쭮 ஫ - на вход: - IX - адрес описателя скроллбара - на выход: + 室: + IX - ⥫ ஫ + 室: - []------------------------------------------------------------------------[] - PrnVScrBar - процедура печати вертикального скроллбара + PrnVScrBar - 楤 ⨪쭮 ஫ - на вход: - IX - адрес описателя скроллбара - на выход: + 室: + IX - ⥫ ஫ + 室: - []------------------------------------------------------------------------[] - InitProcess - процедура инициализации описателя процессбара + InitProcess - 楤 樠樨 ⥫ ᡠ - на вход: - IX - адрес описателя процессбара - на выход: + 室: + IX - ⥫ ᡠ + 室: - []------------------------------------------------------------------------[] - PrnProcess - процедура печати процессбара + PrnProcess - 楤 ᡠ - на вход: - IX - адрес описателя процессбара - на выход: + 室: + IX - ⥫ ᡠ + 室: - []------------------------------------------------------------------------[] - ResFire - процедура ожидания, пока все кнопки мыши не будут отпущены + ResFire - 楤 , 饭 - на вход: + 室: - - на выход: + 室: - []------------------------------------------------------------------------[] - TestCoords - процедура проверки координат мыши по таблице элементов - зкрана + TestCoords - 楤 ஢ન न ⠡ ⮢ + ࠭ - на вход: - IX - адрес таблицы элементов зкрана - на выход: + 室: + IX - ⠡ ⮢ ࠭ + 室: - - таблица элементов зкрана: - +00 (2) левая x координата элемента - +02 (2) правая x координата элемента - +04 (2) верхняя y координата элемента - +06 (2) нижняя y координата элемента - +08 (2) флаги элемента - +10 (2) адрес обработчика при не нажатом огне - +12 (2) адрес обработчика при нажатом огне (левая кнопка) - +14 (2) адрес обработчика при нажатом огне (правая кнопка) + ⠡ ⮢ ࠭: + +00 (2) x न + +02 (2) ࠢ x न + +04 (2) y न + +06 (2) y न + +08 (2) 䫠 + +10 (2) ࠡ稪 ⮬ + +12 (2) ࠡ稪 ⮬ ( ) + +14 (2) ࠡ稪 ⮬ (ࠢ ) - флаги элемента: - d00 - элемент кнопка - d01 - рабочая кнопка - d02 - инверт - d03 - статичный инверт - d04 - программа запускается без адреса возврата без огня - d05 - программа запускается без адреса возврата по левой кнопке - огня - d06 - программа запускается без адреса возврата по правой кнопке - огня - d07 - вызвать функцию закрытия окна перед запуском программы без - огня - d08 - вызвать функцию закрытия окна перед запуском программы по - левой кнопке - d09 - вызвать функцию закрытия окна перед запуском программы по - правой кнопке - d15 - это флаг: 1 - инверт при огне не убирать + 䫠 : + d00 - + d01 - ࠡ + d02 - + d03 - + d04 - ணࠬ ᪠ + d05 - ணࠬ ᪠ + + d06 - ணࠬ ᪠ ࠢ + + d07 - 맢 㭪 । ᪮ ணࠬ + + d08 - 맢 㭪 । ᪮ ணࠬ + + d09 - 맢 㭪 । ᪮ ணࠬ + ࠢ + d15 - 䫠: 1 - 㡨 - если +00 == 0x8000 это считается концом таблицы элементов зкрана + ᫨ +00 == 0x8000 ⠥ 殬 ⠡ ⮢ ࠭ []------------------------------------------------------------------------[] - SetCMOSPrint - процедура включения печати даты/время из CMOS + SetCMOSPrint - 楤 祭 /६ CMOS - на вход: - - будет описано позднее - на выход: + 室: + - 㤥 ᠭ + 室: - []------------------------------------------------------------------------[] - ResCMOSPrint - процедура выключения печати даты/время из CMOS + ResCMOSPrint - 楤 몫祭 /६ CMOS - на вход: - - будет описано позднее - на выход: + 室: + - 㤥 ᠭ + 室: - []------------------------------------------------------------------------[] - SetClock - процедура установки курсора мыши в часы + SetClock - 楤 ⠭ - на вход: + 室: - - на выход: + 室: - []------------------------------------------------------------------------[] - SetMouse - процедура установки курсора мыши в нормальный курсор + SetMouse - 楤 ⠭ ଠ - на вход: + 室: - - на выход: + 室: - []------------------------------------------------------------------------[] - MoveBytes - процедура быстрого копирования памяти с помощью - акселлератора с увеличением адресов - на вход: - HL - откуда - DE - куда - BC - сколько - на выход: - HL - (откуда + сколько) - DE - (куда + сколько) + MoveBytes - 楤 ண ஢ + ᥫ 㢥祭 ᮢ + 室: + HL - 㤠 + DE - 㤠 + BC - ᪮쪮 + 室: + HL - (㤠 + ᪮쪮) + DE - (㤠 + ᪮쪮) []------------------------------------------------------------------------[] - MoveBytesUp - процедура быстрого копирования памяти с помощью - акселлератора с уменьшением адресов - на вход: - HL - откуда - DE - куда - BC - сколько - на выход: - HL - (откуда - сколько) - DE - (куда - сколько) + MoveBytesUp - 楤 ண ஢ + ᥫ 㬥襭 ᮢ + 室: + HL - 㤠 + DE - 㤠 + BC - ᪮쪮 + 室: + HL - (㤠 - ᪮쪮) + DE - (㤠 - ᪮쪮) []------------------------------------------------------------------------[] - Mult8 - процедура умножения 8 * 8 bit = 16 bit + Mult8 - 楤 㬭 8 * 8 bit = 16 bit - на вход: + 室: E * C - на выход: - HL - результат + 室: + HL - १ []------------------------------------------------------------------------[] - Mult16X8 - процедура умножения 16 * 8 bit = 24 bit + Mult16X8 - 楤 㬭 16 * 8 bit = 24 bit - на вход: + 室: DE * C - на выход: - A, HL - результат + 室: + A, HL - १ []------------------------------------------------------------------------[] - Mult16 - процедура умножения 16 * 16 bit = 16 bit + Mult16 - 楤 㬭 16 * 16 bit = 16 bit - на вход: + 室: DE * BC - на выход: - HL - результат + 室: + HL - १ []------------------------------------------------------------------------[] - Mult16X16 - процедура умножения 16 * 16 bit = 32 bit + Mult16X16 - 楤 㬭 16 * 16 bit = 32 bit - на вход: + 室: DE * BC - на выход: - HL, DE - результат + 室: + HL, DE - १ []------------------------------------------------------------------------[] - Mult32 - процедура умножения 32 * 16 bit = 32 bit + Mult32 - 楤 㬭 32 * 16 bit = 32 bit - на вход: + 室: HL, DE * BC - на выход: - HL, DE - результат + 室: + HL, DE - १ []------------------------------------------------------------------------[] - Divis16X16 - процедура деления 16 / 16 bit = 16.16 bit + Divis16X16 - 楤 16 / 16 bit = 16.16 bit - на вход: + 室: BC / DE - на выход: - BC - результат - HL - остаток + 室: + BC - १ + HL - ⮪ []------------------------------------------------------------------------[] - Divis24X16 - процедура деления 24 / 16 bit = 8.16 bit + Divis24X16 - 楤 24 / 16 bit = 8.16 bit - на вход: + 室: HL, C / DE - на выход: - A - результат - HL - остаток + 室: + A - १ + HL - ⮪ []------------------------------------------------------------------------[] - Divis32X16 - процедура деления 32 / 16 bit = 16.16 bit + Divis32X16 - 楤 32 / 16 bit = 16.16 bit - на вход: + 室: HL, DE / BC - на выход: - DE - результат - HL - остаток + 室: + DE - १ + HL - ⮪ []------------------------------------------------------------------------[] - Divis32 - процедура деления 32 / 16 bit = 32.16 bit + Divis32 - 楤 32 / 16 bit = 32.16 bit - на вход: + 室: HL, DE / BC - на выход: - HL, DE - результат - BC - остаток + 室: + HL, DE - १ + BC - ⮪ []------------------------------------------------------------------------[] - ConvNumTxt32 - процедура конвертации числа 32 bit в текст + ConvNumTxt32 - 楤 樨 ᫠ 32 bit ⥪ - на вход: - BC, HL - число 32 bit - DE - адрес буфера - на выход: - DE - адрес следующего байта за числом + 室: + BC, HL - ᫮ 32 bit + DE - + 室: + DE - ᫥饣 ᫮ []------------------------------------------------------------------------[] - ConvNumTxt16 - процедура конвертации числа 16 bit в текст + ConvNumTxt16 - 楤 樨 ᫠ 16 bit ⥪ - на вход: - HL - число 16 bit - DE - адрес буфера - на выход: - DE - адрес следующего байта за числом + 室: + HL - ᫮ 16 bit + DE - + 室: + DE - ᫥饣 ᫮ []------------------------------------------------------------------------[] - ConvNumTxt8 - процедура конвертации числа 8 bit в текст + ConvNumTxt8 - 楤 樨 ᫠ 8 bit ⥪ - на вход: - A - число 8 bit - DE - адрес буфера - на выход: - DE - адрес следующего байта за числом + 室: + A - ᫮ 8 bit + DE - + 室: + DE - ᫥饣 ᫮ []------------------------------------------------------------------------[] - ConvTxtNum32 - процедура конвертации текста в число 32 bit + ConvTxtNum32 - 楤 樨 ⥪ ᫮ 32 bit - на вход: - DE - адрес текста (конец строки - 0) - на выход: - HL, IX - число - C flag - ошибка + 室: + DE - ⥪ ( ப - 0) + 室: + HL, IX - ᫮ + C flag - 訡 []------------------------------------------------------------------------[] - ConvTxtNum16 - процедура конвертации текста в число 16 bit + ConvTxtNum16 - 楤 樨 ⥪ ᫮ 16 bit - на вход: - DE - адрес текста (конец строки - 0) - на выход: - HL - число - C flag - ошибка + 室: + DE - ⥪ ( ப - 0) + 室: + HL - ᫮ + C flag - 訡 []------------------------------------------------------------------------[] - DOSError - процедура вывода окна ошибки (для дос ошибок) + DOSError - 楤 뢮 訡 ( 訡) - на вход: - A - номер ошибки - на выход: + 室: + A - 訡 + 室: - []------------------------------------------------------------------------[] @@ -569,4 +569,4 @@ 07 july 2002 Anton Enin (C) Copyright 2002 R-lab -если есть вопросы e-mail: r-lab@mail.ru или на спринтер форуме. \ No newline at end of file +᫨ e-mail: r-lab@mail.ru ਭ 㬥. \ No newline at end of file diff --git a/docs/fn_api_0.3.txt b/docs/fn_api_0.3.txt index 79ca775..a688359 100644 --- a/docs/fn_api_0.3.txt +++ b/docs/fn_api_0.3.txt @@ -1,7 +1,7 @@ []========================================================================[] * * -* Описание Flex Navigator API v1.xx для разработчиков Flx-Plugins * -* doc v0.3 от 10.07.2002 * +* ᠭ Flex Navigator API v1.xx ࠧࠡ稪 Flx-Plugins * +* doc v0.3 10.07.2002 * * * []========================================================================[] @@ -10,579 +10,579 @@ []------------------------------------------------------------------------[] - ClearScreen - процедура отчистки 0-го экана нужным цветом. + ClearScreen - 楤 ⪨ 0- 㦭 梥⮬. - на вход: - A - цвет отчистки (00-0Fh) - на выход: + 室: + A - 梥 ⪨ (00-0Fh) + 室: - []------------------------------------------------------------------------[] - MakeWindow - процедура создания графического окна + MakeWindow - 楤 ᮧ ᪮ - на вход: - (SP) - описатель окна - на выход: + 室: + (SP) - ⥫ + 室: - - сразу за вызовом этой процедуры в программе следует описатель окна. - возврат из процедуры происходит по адресу, следующему за описателем. + ࠧ 맮 ⮩ 楤 ணࠬ ᫥ ⥫ . + 楤 ந室 , ᫥饬 ⥫. - например: + ਬ: call MakeWindow - ... ; описатель окна + ... ; ⥫ - описатель окна: - +00 (1) флаг вывода окна: 0 - без сохранения данных под окном - (используется для полноэкранных окон) - 1 - с сохранением данных под окном - (используется для небольших окон) - 0x7F - восстановить данные под окном - (флаг служит для закрытия - текущего окна) - +01 (2) координата x для вывода (0 - 639) - +03 (2) координата y для вывода (0 - 255) - +05 (2) длина окна по x (0 - 639) - +07 (2) длина окна по y (0 - 255) + ⥫ : + +00 (1) 䫠 뢮 : 0 - ࠭ + (ᯮ ࠭ ) + 1 - ࠭ + (ᯮ ) + 0x7F - ⠭ + (䫠 㦨 + ⥪饣 ) + +01 (2) न x 뢮 (0 - 639) + +03 (2) न y 뢮 (0 - 255) + +05 (2) x (0 - 639) + +07 (2) y (0 - 255) - далее идут об'екты окна в формате: - +00 (1) тип обекта - +01 ... описатели обекта + ' ଠ: + +00 (1) ⨯ + +01 ... ⥫ - об'екты окна: - 0. +00 (1) == 0 - конец списка об'ектов. после этого оконная - функция возвращает управление. + ' : + 0. +00 (1) == 0 - ᯨ᪠ '⮢. ᫥ ⮣ + 㭪 頥 ࠢ. - 1. +00 (1) == 1 - текстовая строка - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (1) цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - +06 ... текстовая строка (конец строки - 0) + 1. +00 (1) == 1 - ⥪⮢ ப + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (1) 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + +06 ... ⥪⮢ ப ( ப - 0) - 2. +00 (1) == 2 - заполнение прямоугольной плоскости - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по x (0 - 639) - +07 (2) длина по y (0 - 255) - +09 (1) цвет заполнения - (d7-d4 цвет background, d3-d0 цвет foreground) + 2. +00 (1) == 2 - אַ㣮쭮 ᪮ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) x (0 - 639) + +07 (2) y (0 - 255) + +09 (1) 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) - 3. +00 (1) == 3 - отрисовка углублённой прямоугольной плоскости - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по x (0 - 639) - +07 (2) длина по y (0 - 255) + 3. +00 (1) == 3 - ᮢ 㣫㡫񭭮 אַ㣮쭮 ᪮ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) x (0 - 639) + +07 (2) y (0 - 255) - 4. +00 (1) == 4 - отрисовка выпуклой прямоугольной плоскости - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по x (0 - 639) - +07 (2) длина по y (0 - 255) + 4. +00 (1) == 4 - ᮢ 㪫 אַ㣮쭮 ᪮ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) x (0 - 639) + +07 (2) y (0 - 255) - 5. +00 (1) == 5 - отрисовка кнопки с текстом - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по x (0 - 639) - +07 (2) длина по y (0 - 255) - +09 (1) цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - +10 ... текстовая строка (конец строки - 0) + 5. +00 (1) == 5 - ᮢ ⥪⮬ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) x (0 - 639) + +07 (2) y (0 - 255) + +09 (1) 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + +10 ... ⥪⮢ ப ( ப - 0) - Внимание! печать текста осуществляется с позиций + ! ⥪ ⢫ 権 x + 4, y + 1 - 6. +00 (1) == 6 - отрисовка горизонтального разделителя - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по x (0 - 639) + 6. +00 (1) == 6 - ᮢ ਧ⠫쭮 ࠧ⥫ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) x (0 - 639) - 7. +00 (1) == 7 - отрисовка вертикального разделителя - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по y (0 - 255) + 7. +00 (1) == 7 - ᮢ ⨪쭮 ࠧ⥫ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) y (0 - 255) - 8. +00 (1) == 8 - отрисовка левой кнопки скролбара <- - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) + 8. +00 (1) == 8 - ᮢ ஫ <- + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) - 9. +00 (1) == 9 - отрисовка правой кнопки скролбара -> - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) + 9. +00 (1) == 9 - ᮢ ࠢ ஫ -> + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) - 10. +00 (1) == 10 - отрисовка верхней кнопки скролбара ^ - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) + 10. +00 (1) == 10 - ᮢ 孥 ஫ ^ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) - 11. +00 (1) == 11 - отрисовка нижней кнопки скролбара - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) + 11. +00 (1) == 11 - ᮢ ஫ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) []------------------------------------------------------------------------[] - InvertRectan - процедура замены цвета прямоугольной плоскости + InvertRectan - 楤 梥 אַ㣮쭮 ᪮ - на вход: - HL - x координата - BC - y координата - HX - длина y - LX - длина x - D - текущий цвет - (d7-d4 цвет background, d3-d0 цвет foreground) - E - нужный цвет - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: + 室: + HL - x न + BC - y न + HX - y + LX - x + D - ⥪騩 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + E - 㦭 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: - - к сожалению процедура не очень быстрая, поэтому большие - прямоугольники советую особо не инвертировать... ;) + ᮦ 楤 祭 , ⮬ 訥 + אַ㣮쭨 ᮢ ᮡ ஢... ;) []------------------------------------------------------------------------[] - PrnTxtLnIFF - процедура вывода текстовых строк на графический экран - 640x256 в режиме размерного по X шрифта - на вход: - HL - адрес текстовой строки (конец строки - 0) - DE - позиция вывода по X - BC - позиция вывода по Y - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: - HL - адрес байта, следующего за строкой + PrnTxtLnIFF - 楤 뢮 ⥪⮢ ப ᪨ ࠭ + 640x256 ० ࠧ୮ X + 室: + HL - ⥪⮢ ப ( ப - 0) + DE - 뢮 X + BC - 뢮 Y + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: + HL - , ᫥饣 ப []------------------------------------------------------------------------[] - PrnTxtLnNorm - процедура вывода текстовых строк на графический экран + PrnTxtLnNorm - 楤 뢮 ⥪⮢ ப ᪨ ࠭ 640x256 - на вход: - HL - адрес текстовой строки (конец строки - 0) - DE - позиция вывода по X - BC - позиция вывода по Y - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: - HL - адрес байта, следующего за строкой + 室: + HL - ⥪⮢ ப ( ப - 0) + DE - 뢮 X + BC - 뢮 Y + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: + HL - , ᫥饣 ப []------------------------------------------------------------------------[] - PrnTxtLnNormC - процедура вывода текстовых строк на графический экран - 640x256 с известным числом символов - на вход: - HL - адрес текстовой строки - DE - позиция вывода по X - C - позиция вывода по Y - B - кол-во печатаемых символов - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: - HL - адрес байта, следующего за последним символом + PrnTxtLnNormC - 楤 뢮 ⥪⮢ ப ᪨ ࠭ + 640x256 ᫮ ᨬ + 室: + HL - ⥪⮢ ப + DE - 뢮 X + C - 뢮 Y + B - - ⠥ ᨬ + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: + HL - , ᫥饣 ᫥ ᨬ []------------------------------------------------------------------------[] - PrnRangPathL - процедура вывода досовских путей на графический экран - 640x256 в режиме размерного по X шрифта, прижатых к - левому краю ( |-> ) - на вход: - IX - кол-во пикселей под вывод строки - HL - адрес текстовой строки (конец строки - 0) - DE - позиция вывода по X - BC - позиция вывода по Y - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: + PrnRangPathL - 楤 뢮 ᮢ᪨ ⥩ ᪨ ࠭ + 640x256 ० ࠧ୮ X , ਦ + ( |-> ) + 室: + IX - - ᥫ 뢮 ப + HL - ⥪⮢ ப ( ப - 0) + DE - 뢮 X + BC - 뢮 Y + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: - - процедура грамотно укорачивает досовский путь до нужного - размера путём замещения невлезающих директорий на ..\ + 楤 ࠬ⭮ 㪮稢 ᮢ᪨ 㦭 + ࠧ 饭 ४਩ ..\ []------------------------------------------------------------------------[] - PrnRangPathR - процедура вывода досовских путей на графический экран - 640x256 в режиме размерного по X шрифта, прижатых к - правому краю ( <-| ) - на вход: - IX - кол-во пикселей под вывод строки - HL - адрес текстовой строки (конец строки - 0) - DE - позиция вывода по X - BC - позиция вывода по Y - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: + PrnRangPathR - 楤 뢮 ᮢ᪨ ⥩ ᪨ ࠭ + 640x256 ० ࠧ୮ X , ਦ + ࠢ ( <-| ) + 室: + IX - - ᥫ 뢮 ப + HL - ⥪⮢ ப ( ப - 0) + DE - 뢮 X + BC - 뢮 Y + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: - - процедура грамотно укорачивает досовский путь до нужного - размера путём замещения невлезающих директорий на ..\ + 楤 ࠬ⭮ 㪮稢 ᮢ᪨ 㦭 + ࠧ 饭 ४਩ ..\ []------------------------------------------------------------------------[] - PrnRangPathC - процедура вывода досовских путей на графический экран - 640x256 в режиме размерного по X шрифта, отцентрированных - относительно краёв ( <-|-> ) - на вход: - IX - кол-во пикселей под вывод строки - HL - адрес текстовой строки (конец строки - 0) - DE - позиция вывода по X - BC - позиция вывода по Y - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: + PrnRangPathC - 楤 뢮 ᮢ᪨ ⥩ ᪨ ࠭ + 640x256 ० ࠧ୮ X , 業஢ + ⭮⥫쭮 ( <-|-> ) + 室: + IX - - ᥫ 뢮 ப + HL - ⥪⮢ ப ( ப - 0) + DE - 뢮 X + BC - 뢮 Y + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: - - процедура грамотно укорачивает досовский путь до нужного - размера путём замещения невлезающих директорий на ..\ + 楤 ࠬ⭮ 㪮稢 ᮢ᪨ 㦭 + ࠧ 饭 ४਩ ..\ []------------------------------------------------------------------------[] - InputLine - процедура редактирования строки на графическом экране - 640x256 в режиме размерного по X шрифта + InputLine - 楤 ।஢ ப ᪮ ࠭ + 640x256 ० ࠧ୮ X - на вход: - IX - адрес описателя строки - HL - адрес описателя элементов экрана (для мышки) - на выход: + 室: + IX - ⥫ ப + HL - ⥫ ⮢ ࠭ ( 誨) + 室: - - описатель строки: - +00 (1) максимальная длина строки - +01 (1) флаг готовности - +02 (1) текущая X позиция курсора (инициализируется в InputLine) - +03 (1) текущая add_x (инициализируется в InputLine) - +04 (1) количество введенных символов / длина строки - +05 (2) X позиция строки на экране - +07 (2) Y позиция строки на экране - +09 (2) X длина строки на экране - +0B (1) цвет строки (d7-d4 цвет background, d3-d0 цвет foreground) - +0C ... сама строка + ⥫ ப: + +00 (1) ᨬ쭠 ப + +01 (1) 䫠 ⮢ + +02 (1) ⥪ X (樠 InputLine) + +03 (1) ⥪ add_x (樠 InputLine) + +04 (1) ⢮ ᨬ / ப + +05 (2) X ப ࠭ + +07 (2) Y ப ࠭ + +09 (2) X ப ࠭ + +0B (1) 梥 ப (d7-d4 梥 background, d3-d0 梥 foreground) + +0C ... ᠬ ப - процедуры для таблицы элементов экрана: - InpLnExtN - процедура нормального выхода из редакции - InpLnExtC - процедура выхода из редакции по cancel - (восстанавливает изначальную строку) + 楤 ⠡ ⮢ ࠭: + InpLnExtN - 楤 ଠ쭮 室 ।樨 + InpLnExtC - 楤 室 ।樨 cancel + (⠭ 砫 ப) []------------------------------------------------------------------------[] - InitScrBar - процедура инициализации описателя скроллбара + InitScrBar - 楤 樠樨 ⥫ ஫ - на вход: - IX - адрес описателя скроллбара - на выход: + 室: + IX - ⥫ ஫ + 室: - - описатель скроллбара: - +00 (2) X позиция скролбара (0-639) - +02 (2) Y позиция скролбара (0-255) - +04 (2) длина скролбара - +06 (2) текущая длина скролбара (инициализируется в InitScrBar) - +08 (2) адрес ячейки, куда запишется начальная координата бара - если 0, то не используется - (используется для таблицы элементов экрана) - +10 (2) адрес ячейки, куда запишется конечная координата бара - если 0, то не используется - (используется для таблицы элементов экрана) - +12 (2) кол-во видимых элементов - +14 (2) общее кол-во элементов - +16 (2) первая видимый элемент + ⥫ ஫: + +00 (2) X ஫ (0-639) + +02 (2) Y ஫ (0-255) + +04 (2) ஫ + +06 (2) ⥪ ஫ (樠 InitScrBar) + +08 (2) 祩, 㤠 砫쭠 न + ᫨ 0, ᯮ + (ᯮ ⠡ ⮢ ࠭) + +10 (2) 祩, 㤠 筠 न + ᫨ 0, ᯮ + (ᯮ ⠡ ⮢ ࠭) + +12 (2) - ⮢ + +14 (2) 饥 - ⮢ + +16 (2) ࢠ []------------------------------------------------------------------------[] - PrnHScrBar - процедура печати горизонтального скроллбара + PrnHScrBar - 楤 ਧ⠫쭮 ஫ - на вход: - IX - адрес описателя скроллбара (см. выше) - на выход: + 室: + IX - ⥫ ஫ (. ) + 室: - []------------------------------------------------------------------------[] - PrnVScrBar - процедура печати вертикального скроллбара + PrnVScrBar - 楤 ⨪쭮 ஫ - на вход: - IX - адрес описателя скроллбара (см. выше) - на выход: + 室: + IX - ⥫ ஫ (. ) + 室: - []------------------------------------------------------------------------[] - InitProcess - процедура инициализации описателя процессбара + InitProcess - 楤 樠樨 ⥫ ᡠ - на вход: - IX - адрес описателя процессбара - на выход: + 室: + IX - ⥫ ᡠ + 室: - - описателя процессбара: - +00 (2) X позиция процессбара (0-639) - +02 (2) Y позиция процессбара (0-255) - +04 (2) длина процессбара - +06 (2) коэффициент для процесса (инициализируется в InitProcess) - +08 (2) коррекция коэфициента (инициализируется в InitProcess) - +10 (4) максимум (инициализируется в InitProcess) - +14 (4) текущее (инициализируется в InitProcess) - +18 (1) цвет процессбара - (d7-d4 цвет background, d3-d0 цвет foreground) + ⥫ ᡠ: + +00 (2) X ᡠ (0-639) + +02 (2) Y ᡠ (0-255) + +04 (2) ᡠ + +06 (2) 樥 (樠 InitProcess) + +08 (2) ४ 樥 (樠 InitProcess) + +10 (4) ᨬ (樠 InitProcess) + +14 (4) ⥪饥 (樠 InitProcess) + +18 (1) 梥 ᡠ + (d7-d4 梥 background, d3-d0 梥 foreground) []------------------------------------------------------------------------[] - PrnProcess - процедура печати процессбара + PrnProcess - 楤 ᡠ - на вход: - IX - адрес описателя процессбара (см. выше) - на выход: + 室: + IX - ⥫ ᡠ (. ) + 室: - []------------------------------------------------------------------------[] - ResFire - процедура ожидания, пока все кнопки мыши не будут отпущены + ResFire - 楤 , 饭 - на вход: + 室: - - на выход: + 室: - []------------------------------------------------------------------------[] - TestCoords - процедура проверки координат мыши по таблице элементов - зкрана + TestCoords - 楤 ஢ન न ⠡ ⮢ + ࠭ - на вход: - IX - адрес таблицы элементов зкрана - на выход: + 室: + IX - ⠡ ⮢ ࠭ + 室: - - таблица элементов зкрана: - +00 (2) левая x координата элемента - +02 (2) правая x координата элемента - +04 (2) верхняя y координата элемента - +06 (2) нижняя y координата элемента - +08 (2) флаги элемента - +10 (2) адрес обработчика при не нажатом огне - +12 (2) адрес обработчика при нажатом огне (левая кнопка) - +14 (2) адрес обработчика при нажатом огне (правая кнопка) + ⠡ ⮢ ࠭: + +00 (2) x न + +02 (2) ࠢ x न + +04 (2) y न + +06 (2) y न + +08 (2) 䫠 + +10 (2) ࠡ稪 ⮬ + +12 (2) ࠡ稪 ⮬ ( ) + +14 (2) ࠡ稪 ⮬ (ࠢ ) - если +00 == 0x8000 это считается концом таблицы элементов зкрана + ᫨ +00 == 0x8000 ⠥ 殬 ⠡ ⮢ ࠭ - флаги элемента: - d00 - элемент кнопка - d01 - рабочая кнопка - d02 - инверт - d03 - статичный инверт - d04 - программа запускается без адреса возврата без огня - d05 - программа запускается без адреса возврата по левой кнопке - огня - d06 - программа запускается без адреса возврата по правой кнопке - огня - d07 - вызвать функцию закрытия окна перед запуском программы без - огня - d08 - вызвать функцию закрытия окна перед запуском программы по - левой кнопке - d09 - вызвать функцию закрытия окна перед запуском программы по - правой кнопке - d15 - это флаг: 1 - инверт при огне не убирать + 䫠 : + d00 - + d01 - ࠡ + d02 - + d03 - + d04 - ணࠬ ᪠ + d05 - ணࠬ ᪠ + + d06 - ணࠬ ᪠ ࠢ + + d07 - 맢 㭪 । ᪮ ணࠬ + + d08 - 맢 㭪 । ᪮ ணࠬ + + d09 - 맢 㭪 । ᪮ ணࠬ + ࠢ + d15 - 䫠: 1 - 㡨 []------------------------------------------------------------------------[] - SetCMOSPrint - процедура включения печати даты/время из CMOS + SetCMOSPrint - 楤 祭 /६ CMOS - на вход: - - будет описано позднее - на выход: + 室: + - 㤥 ᠭ + 室: - []------------------------------------------------------------------------[] - ResCMOSPrint - процедура выключения печати даты/время из CMOS + ResCMOSPrint - 楤 몫祭 /६ CMOS - на вход: - - будет описано позднее - на выход: + 室: + - 㤥 ᠭ + 室: - []------------------------------------------------------------------------[] - SetClock - процедура установки курсора мыши в часы + SetClock - 楤 ⠭ - на вход: + 室: - - на выход: + 室: - []------------------------------------------------------------------------[] - SetMouse - процедура установки курсора мыши в нормальный курсор + SetMouse - 楤 ⠭ ଠ - на вход: + 室: - - на выход: + 室: - []------------------------------------------------------------------------[] - MoveBytes - процедура быстрого копирования памяти с помощью - акселлератора с увеличением адресов - на вход: - HL - откуда - DE - куда - BC - сколько - на выход: - HL - (откуда + сколько) - DE - (куда + сколько) + MoveBytes - 楤 ண ஢ + ᥫ 㢥祭 ᮢ + 室: + HL - 㤠 + DE - 㤠 + BC - ᪮쪮 + 室: + HL - (㤠 + ᪮쪮) + DE - (㤠 + ᪮쪮) []------------------------------------------------------------------------[] - MoveBytesUp - процедура быстрого копирования памяти с помощью - акселлератора с уменьшением адресов - на вход: - HL - откуда - DE - куда - BC - сколько - на выход: - HL - (откуда - сколько) - DE - (куда - сколько) + MoveBytesUp - 楤 ண ஢ + ᥫ 㬥襭 ᮢ + 室: + HL - 㤠 + DE - 㤠 + BC - ᪮쪮 + 室: + HL - (㤠 - ᪮쪮) + DE - (㤠 - ᪮쪮) []------------------------------------------------------------------------[] - Mult8 - процедура умножения 8 * 8 bit = 16 bit + Mult8 - 楤 㬭 8 * 8 bit = 16 bit - на вход: + 室: E * C - на выход: - HL - результат + 室: + HL - १ []------------------------------------------------------------------------[] - Mult16X8 - процедура умножения 16 * 8 bit = 24 bit + Mult16X8 - 楤 㬭 16 * 8 bit = 24 bit - на вход: + 室: DE * C - на выход: - A, HL - результат + 室: + A, HL - १ []------------------------------------------------------------------------[] - Mult16 - процедура умножения 16 * 16 bit = 16 bit + Mult16 - 楤 㬭 16 * 16 bit = 16 bit - на вход: + 室: DE * BC - на выход: - HL - результат + 室: + HL - १ []------------------------------------------------------------------------[] - Mult16X16 - процедура умножения 16 * 16 bit = 32 bit + Mult16X16 - 楤 㬭 16 * 16 bit = 32 bit - на вход: + 室: DE * BC - на выход: - HL, DE - результат + 室: + HL, DE - १ []------------------------------------------------------------------------[] - Mult32 - процедура умножения 32 * 16 bit = 32 bit + Mult32 - 楤 㬭 32 * 16 bit = 32 bit - на вход: + 室: HL, DE * BC - на выход: - HL, DE - результат + 室: + HL, DE - १ []------------------------------------------------------------------------[] - Divis16X16 - процедура деления 16 / 16 bit = 16.16 bit + Divis16X16 - 楤 16 / 16 bit = 16.16 bit - на вход: + 室: BC / DE - на выход: - BC - результат - HL - остаток + 室: + BC - १ + HL - ⮪ []------------------------------------------------------------------------[] - Divis24X16 - процедура деления 24 / 16 bit = 8.16 bit + Divis24X16 - 楤 24 / 16 bit = 8.16 bit - на вход: + 室: HL, C / DE - на выход: - A - результат - HL - остаток + 室: + A - १ + HL - ⮪ []------------------------------------------------------------------------[] - Divis32X16 - процедура деления 32 / 16 bit = 16.16 bit + Divis32X16 - 楤 32 / 16 bit = 16.16 bit - на вход: + 室: HL, DE / BC - на выход: - DE - результат - HL - остаток + 室: + DE - १ + HL - ⮪ []------------------------------------------------------------------------[] - Divis32 - процедура деления 32 / 16 bit = 32.16 bit + Divis32 - 楤 32 / 16 bit = 32.16 bit - на вход: + 室: HL, DE / BC - на выход: - HL, DE - результат - BC - остаток + 室: + HL, DE - १ + BC - ⮪ []------------------------------------------------------------------------[] - ConvNumTxt32 - процедура конвертации числа 32 bit в текст + ConvNumTxt32 - 楤 樨 ᫠ 32 bit ⥪ - на вход: - BC, HL - число 32 bit - DE - адрес буфера - на выход: - DE - адрес следующего байта за числом + 室: + BC, HL - ᫮ 32 bit + DE - + 室: + DE - ᫥饣 ᫮ []------------------------------------------------------------------------[] - ConvNumTxt16 - процедура конвертации числа 16 bit в текст + ConvNumTxt16 - 楤 樨 ᫠ 16 bit ⥪ - на вход: - HL - число 16 bit - DE - адрес буфера - на выход: - DE - адрес следующего байта за числом + 室: + HL - ᫮ 16 bit + DE - + 室: + DE - ᫥饣 ᫮ []------------------------------------------------------------------------[] - ConvNumTxt8 - процедура конвертации числа 8 bit в текст + ConvNumTxt8 - 楤 樨 ᫠ 8 bit ⥪ - на вход: - A - число 8 bit - DE - адрес буфера - на выход: - DE - адрес следующего байта за числом + 室: + A - ᫮ 8 bit + DE - + 室: + DE - ᫥饣 ᫮ []------------------------------------------------------------------------[] - ConvTxtNum32 - процедура конвертации текста в число 32 bit + ConvTxtNum32 - 楤 樨 ⥪ ᫮ 32 bit - на вход: - DE - адрес текста (конец строки - 0) - на выход: - HL, IX - число - C flag - ошибка + 室: + DE - ⥪ ( ப - 0) + 室: + HL, IX - ᫮ + C flag - 訡 []------------------------------------------------------------------------[] - ConvTxtNum16 - процедура конвертации текста в число 16 bit + ConvTxtNum16 - 楤 樨 ⥪ ᫮ 16 bit - на вход: - DE - адрес текста (конец строки - 0) - на выход: - HL - число - C flag - ошибка + 室: + DE - ⥪ ( ப - 0) + 室: + HL - ᫮ + C flag - 訡 []------------------------------------------------------------------------[] - DOSError - процедура вывода окна ошибки (для дос ошибок) + DOSError - 楤 뢮 訡 ( 訡) - на вход: - A - номер ошибки - на выход: + 室: + A - 訡 + 室: - []------------------------------------------------------------------------[] @@ -593,4 +593,4 @@ 10 july 2002 Anton Enin (C) Copyright 2002 R-lab -если есть вопросы e-mail: r-lab@mail.ru или на спринтер форуме. \ No newline at end of file +᫨ e-mail: r-lab@mail.ru ਭ 㬥. \ No newline at end of file diff --git a/docs/fn_api_0.4.txt b/docs/fn_api_0.4.txt index 41686a3..8047424 100644 --- a/docs/fn_api_0.4.txt +++ b/docs/fn_api_0.4.txt @@ -1,7 +1,7 @@ []========================================================================[] * * -* Описание Flex Navigator API v1.xx для разработчиков Flx-Plugins * -* doc v0.4 от 13.07.2002 * +* ᠭ Flex Navigator API v1.xx ࠧࠡ稪 Flx-Plugins * +* doc v0.4 13.07.2002 * * * []========================================================================[] @@ -10,594 +10,594 @@ []------------------------------------------------------------------------[] - ClearScreen - процедура отчистки 0-го экана нужным цветом. + ClearScreen - 楤 ⪨ 0- 㦭 梥⮬. - на вход: - A - цвет отчистки (00-0Fh) - на выход: + 室: + A - 梥 ⪨ (00-0Fh) + 室: - []------------------------------------------------------------------------[] - MakeWindow - процедура создания графического окна + MakeWindow - 楤 ᮧ ᪮ - на вход: - (SP) - описатель окна - на выход: + 室: + (SP) - ⥫ + 室: - - сразу за вызовом этой процедуры в программе следует описатель окна. - возврат из процедуры происходит по адресу, следующему за описателем. + ࠧ 맮 ⮩ 楤 ணࠬ ᫥ ⥫ . + 楤 ந室 , ᫥饬 ⥫. - например: + ਬ: call MakeWindow - ... ; описатель окна + ... ; ⥫ - описатель окна: - +00 (1) флаг вывода окна: 0 - без сохранения данных под окном - (используется для полноэкранных окон) - 1 - с сохранением данных под окном - (используется для небольших окон) - 0x7F - восстановить данные под окном - (флаг служит для закрытия - текущего окна) - +01 (2) координата x для вывода (0 - 639) - +03 (2) координата y для вывода (0 - 255) - +05 (2) длина окна по x (0 - 639) - +07 (2) длина окна по y (0 - 255) + ⥫ : + +00 (1) 䫠 뢮 : 0 - ࠭ + (ᯮ ࠭ ) + 1 - ࠭ + (ᯮ ) + 0x7F - ⠭ + (䫠 㦨 + ⥪饣 ) + +01 (2) न x 뢮 (0 - 639) + +03 (2) न y 뢮 (0 - 255) + +05 (2) x (0 - 639) + +07 (2) y (0 - 255) - далее идут об'екты окна в формате: - +00 (1) тип обекта - +01 ... описатели обекта + ' ଠ: + +00 (1) ⨯ + +01 ... ⥫ - об'екты окна: - 0. +00 (1) == 0 - конец списка об'ектов. после этого оконная - функция возвращает управление. + ' : + 0. +00 (1) == 0 - ᯨ᪠ '⮢. ᫥ ⮣ + 㭪 頥 ࠢ. - 1. +00 (1) == 1 - текстовая строка - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (1) цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - +06 ... текстовая строка (конец строки - 0) + 1. +00 (1) == 1 - ⥪⮢ ப + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (1) 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + +06 ... ⥪⮢ ப ( ப - 0) - 2. +00 (1) == 2 - заполнение прямоугольной плоскости - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по x (0 - 639) - +07 (2) длина по y (0 - 255) - +09 (1) цвет заполнения - (d7-d4 цвет background, d3-d0 цвет foreground) + 2. +00 (1) == 2 - אַ㣮쭮 ᪮ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) x (0 - 639) + +07 (2) y (0 - 255) + +09 (1) 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) - 3. +00 (1) == 3 - отрисовка углублённой прямоугольной плоскости - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по x (0 - 639) - +07 (2) длина по y (0 - 255) + 3. +00 (1) == 3 - ᮢ 㣫㡫񭭮 אַ㣮쭮 ᪮ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) x (0 - 639) + +07 (2) y (0 - 255) - 4. +00 (1) == 4 - отрисовка выпуклой прямоугольной плоскости - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по x (0 - 639) - +07 (2) длина по y (0 - 255) + 4. +00 (1) == 4 - ᮢ 㪫 אַ㣮쭮 ᪮ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) x (0 - 639) + +07 (2) y (0 - 255) - 5. +00 (1) == 5 - отрисовка кнопки с текстом - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по x (0 - 639) - +07 (2) длина по y (0 - 255) - +09 (1) цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - +10 ... текстовая строка (конец строки - 0) + 5. +00 (1) == 5 - ᮢ ⥪⮬ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) x (0 - 639) + +07 (2) y (0 - 255) + +09 (1) 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + +10 ... ⥪⮢ ப ( ப - 0) - Внимание! печать текста осуществляется с позиций + ! ⥪ ⢫ 権 x + 4, y + 1 - 6. +00 (1) == 6 - отрисовка горизонтального разделителя - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по x (0 - 639) + 6. +00 (1) == 6 - ᮢ ਧ⠫쭮 ࠧ⥫ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) x (0 - 639) - 7. +00 (1) == 7 - отрисовка вертикального разделителя - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по y (0 - 255) + 7. +00 (1) == 7 - ᮢ ⨪쭮 ࠧ⥫ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) y (0 - 255) - 8. +00 (1) == 8 - отрисовка левой кнопки скролбара <- - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) + 8. +00 (1) == 8 - ᮢ ஫ <- + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) - 9. +00 (1) == 9 - отрисовка правой кнопки скролбара -> - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) + 9. +00 (1) == 9 - ᮢ ࠢ ஫ -> + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) - 10. +00 (1) == 10 - отрисовка верхней кнопки скролбара ^ - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) + 10. +00 (1) == 10 - ᮢ 孥 ஫ ^ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) - 11. +00 (1) == 11 - отрисовка нижней кнопки скролбара - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) + 11. +00 (1) == 11 - ᮢ ஫ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) []------------------------------------------------------------------------[] - InvertRectan - процедура замены цвета прямоугольной плоскости + InvertRectan - 楤 梥 אַ㣮쭮 ᪮ - на вход: - HL - x координата - BC - y координата - HX - длина y - LX - длина x - D - текущий цвет - (d7-d4 цвет background, d3-d0 цвет foreground) - E - нужный цвет - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: + 室: + HL - x न + BC - y न + HX - y + LX - x + D - ⥪騩 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + E - 㦭 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: - - к сожалению процедура не очень быстрая, поэтому большие - прямоугольники советую особо не инвертировать... ;) + ᮦ 楤 祭 , ⮬ 訥 + אַ㣮쭨 ᮢ ᮡ ஢... ;) []------------------------------------------------------------------------[] - PrnTxtLnIFF - процедура вывода текстовых строк на графический экран - 640x256 в режиме размерного по X шрифта - на вход: - HL - адрес текстовой строки (конец строки - 0) - DE - позиция вывода по X - BC - позиция вывода по Y - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: - HL - адрес байта, следующего за строкой + PrnTxtLnIFF - 楤 뢮 ⥪⮢ ப ᪨ ࠭ + 640x256 ० ࠧ୮ X + 室: + HL - ⥪⮢ ப ( ப - 0) + DE - 뢮 X + BC - 뢮 Y + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: + HL - , ᫥饣 ப []------------------------------------------------------------------------[] - PrnTxtLnNorm - процедура вывода текстовых строк на графический экран + PrnTxtLnNorm - 楤 뢮 ⥪⮢ ப ᪨ ࠭ 640x256 - на вход: - HL - адрес текстовой строки (конец строки - 0) - DE - позиция вывода по X - BC - позиция вывода по Y - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: - HL - адрес байта, следующего за строкой + 室: + HL - ⥪⮢ ப ( ப - 0) + DE - 뢮 X + BC - 뢮 Y + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: + HL - , ᫥饣 ப []------------------------------------------------------------------------[] - PrnTxtLnNormC - процедура вывода текстовых строк на графический экран - 640x256 с известным числом символов - на вход: - HL - адрес текстовой строки - DE - позиция вывода по X - C - позиция вывода по Y - B - кол-во печатаемых символов - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: - HL - адрес байта, следующего за последним символом + PrnTxtLnNormC - 楤 뢮 ⥪⮢ ப ᪨ ࠭ + 640x256 ᫮ ᨬ + 室: + HL - ⥪⮢ ப + DE - 뢮 X + C - 뢮 Y + B - - ⠥ ᨬ + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: + HL - , ᫥饣 ᫥ ᨬ []------------------------------------------------------------------------[] - PrnRangPathL - процедура вывода досовских путей на графический экран - 640x256 в режиме размерного по X шрифта, прижатых к - левому краю ( |-> ) - на вход: - IX - кол-во пикселей под вывод строки - HL - адрес текстовой строки (конец строки - 0) - DE - позиция вывода по X - BC - позиция вывода по Y - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: + PrnRangPathL - 楤 뢮 ᮢ᪨ ⥩ ᪨ ࠭ + 640x256 ० ࠧ୮ X , ਦ + ( |-> ) + 室: + IX - - ᥫ 뢮 ப + HL - ⥪⮢ ப ( ப - 0) + DE - 뢮 X + BC - 뢮 Y + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: - - процедура грамотно укорачивает досовский путь до нужного - размера путём замещения невлезающих директорий на ..\ + 楤 ࠬ⭮ 㪮稢 ᮢ᪨ 㦭 + ࠧ 饭 ४਩ ..\ []------------------------------------------------------------------------[] - PrnRangPathR - процедура вывода досовских путей на графический экран - 640x256 в режиме размерного по X шрифта, прижатых к - правому краю ( <-| ) - на вход: - IX - кол-во пикселей под вывод строки - HL - адрес текстовой строки (конец строки - 0) - DE - позиция вывода по X - BC - позиция вывода по Y - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: + PrnRangPathR - 楤 뢮 ᮢ᪨ ⥩ ᪨ ࠭ + 640x256 ० ࠧ୮ X , ਦ + ࠢ ( <-| ) + 室: + IX - - ᥫ 뢮 ப + HL - ⥪⮢ ப ( ப - 0) + DE - 뢮 X + BC - 뢮 Y + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: - - процедура грамотно укорачивает досовский путь до нужного - размера путём замещения невлезающих директорий на ..\ + 楤 ࠬ⭮ 㪮稢 ᮢ᪨ 㦭 + ࠧ 饭 ४਩ ..\ []------------------------------------------------------------------------[] - PrnRangPathC - процедура вывода досовских путей на графический экран - 640x256 в режиме размерного по X шрифта, отцентрированных - относительно краёв ( <-|-> ) - на вход: - IX - кол-во пикселей под вывод строки - HL - адрес текстовой строки (конец строки - 0) - DE - позиция вывода по X - BC - позиция вывода по Y - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: + PrnRangPathC - 楤 뢮 ᮢ᪨ ⥩ ᪨ ࠭ + 640x256 ० ࠧ୮ X , 業஢ + ⭮⥫쭮 ( <-|-> ) + 室: + IX - - ᥫ 뢮 ப + HL - ⥪⮢ ப ( ப - 0) + DE - 뢮 X + BC - 뢮 Y + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: - - процедура грамотно укорачивает досовский путь до нужного - размера путём замещения невлезающих директорий на ..\ + 楤 ࠬ⭮ 㪮稢 ᮢ᪨ 㦭 + ࠧ 饭 ४਩ ..\ []------------------------------------------------------------------------[] - InputLine - процедура редактирования строки на графическом экране - 640x256 в режиме размерного по X шрифта + InputLine - 楤 ।஢ ப ᪮ ࠭ + 640x256 ० ࠧ୮ X - на вход: - IX - адрес описателя строки - HL - адрес описателя элементов экрана (для мышки) - на выход: + 室: + IX - ⥫ ப + HL - ⥫ ⮢ ࠭ ( 誨) + 室: - - описатель строки: - +00 (1) максимальная длина строки - +01 (1) флаг готовности - +02 (1) текущая X позиция курсора (инициализируется в InputLine) - +03 (1) текущая add_x (инициализируется в InputLine) - +04 (1) количество введенных символов / длина строки - +05 (2) X позиция строки на экране - +07 (2) Y позиция строки на экране - +09 (2) X длина строки на экране - +0B (1) цвет строки (d7-d4 цвет background, d3-d0 цвет foreground) - +0C ... сама строка + ⥫ ப: + +00 (1) ᨬ쭠 ப + +01 (1) 䫠 ⮢ + +02 (1) ⥪ X (樠 InputLine) + +03 (1) ⥪ add_x (樠 InputLine) + +04 (1) ⢮ ᨬ / ப + +05 (2) X ப ࠭ + +07 (2) Y ப ࠭ + +09 (2) X ப ࠭ + +0B (1) 梥 ப (d7-d4 梥 background, d3-d0 梥 foreground) + +0C ... ᠬ ப - процедуры для таблицы элементов экрана: - InpLnExtN - процедура нормального выхода из редакции - InpLnExtC - процедура выхода из редакции по cancel - (восстанавливает изначальную строку) + 楤 ⠡ ⮢ ࠭: + InpLnExtN - 楤 ଠ쭮 室 ।樨 + InpLnExtC - 楤 室 ।樨 cancel + (⠭ 砫 ப) []------------------------------------------------------------------------[] - InitScrBar - процедура инициализации описателя скроллбара + InitScrBar - 楤 樠樨 ⥫ ஫ - на вход: - IX - адрес описателя скроллбара - на выход: + 室: + IX - ⥫ ஫ + 室: - - описатель скроллбара: - +00 (2) X позиция скролбара (0-639) - +02 (2) Y позиция скролбара (0-255) - +04 (2) длина скролбара - +06 (2) текущая длина скролбара (инициализируется в InitScrBar) - +08 (2) адрес ячейки, куда запишется начальная координата бара - если 0, то не используется - (используется для таблицы элементов экрана) - +10 (2) адрес ячейки, куда запишется конечная координата бара - если 0, то не используется - (используется для таблицы элементов экрана) - +12 (2) кол-во видимых элементов - +14 (2) общее кол-во элементов - +16 (2) первая видимый элемент + ⥫ ஫: + +00 (2) X ஫ (0-639) + +02 (2) Y ஫ (0-255) + +04 (2) ஫ + +06 (2) ⥪ ஫ (樠 InitScrBar) + +08 (2) 祩, 㤠 砫쭠 न + ᫨ 0, ᯮ + (ᯮ ⠡ ⮢ ࠭) + +10 (2) 祩, 㤠 筠 न + ᫨ 0, ᯮ + (ᯮ ⠡ ⮢ ࠭) + +12 (2) - ⮢ + +14 (2) 饥 - ⮢ + +16 (2) ࢠ []------------------------------------------------------------------------[] - PrnHScrBar - процедура печати горизонтального скроллбара + PrnHScrBar - 楤 ਧ⠫쭮 ஫ - на вход: - IX - адрес описателя скроллбара (см. выше) - на выход: + 室: + IX - ⥫ ஫ (. ) + 室: - []------------------------------------------------------------------------[] - PrnVScrBar - процедура печати вертикального скроллбара + PrnVScrBar - 楤 ⨪쭮 ஫ - на вход: - IX - адрес описателя скроллбара (см. выше) - на выход: + 室: + IX - ⥫ ஫ (. ) + 室: - []------------------------------------------------------------------------[] - InitProcess - процедура инициализации описателя процессбара + InitProcess - 楤 樠樨 ⥫ ᡠ - на вход: - IX - адрес описателя процессбара - на выход: + 室: + IX - ⥫ ᡠ + 室: - - описателя процессбара: - +00 (2) X позиция процессбара (0-639) - +02 (2) Y позиция процессбара (0-255) - +04 (2) длина процессбара - +06 (2) коэффициент для процесса (инициализируется в InitProcess) - +08 (2) коррекция коэфициента (инициализируется в InitProcess) - +10 (4) максимум (инициализируется в InitProcess) - +14 (4) текущее (инициализируется в InitProcess) - +18 (1) цвет процессбара - (d7-d4 цвет background, d3-d0 цвет foreground) + ⥫ ᡠ: + +00 (2) X ᡠ (0-639) + +02 (2) Y ᡠ (0-255) + +04 (2) ᡠ + +06 (2) 樥 (樠 InitProcess) + +08 (2) ४ 樥 (樠 InitProcess) + +10 (4) ᨬ (樠 InitProcess) + +14 (4) ⥪饥 (樠 InitProcess) + +18 (1) 梥 ᡠ + (d7-d4 梥 background, d3-d0 梥 foreground) []------------------------------------------------------------------------[] - PrnProcess - процедура печати процессбара + PrnProcess - 楤 ᡠ - на вход: - IX - адрес описателя процессбара (см. выше) - на выход: + 室: + IX - ⥫ ᡠ (. ) + 室: - []------------------------------------------------------------------------[] - ResFire - процедура ожидания, пока все кнопки мыши не будут отпущены + ResFire - 楤 , 饭 - на вход: + 室: - - на выход: + 室: - []------------------------------------------------------------------------[] - TestCoords - процедура проверки координат мыши по таблице элементов - зкрана + TestCoords - 楤 ஢ન न ⠡ ⮢ + ࠭ - на вход: - IX - адрес таблицы элементов зкрана - на выход: + 室: + IX - ⠡ ⮢ ࠭ + 室: - - таблица элементов зкрана: - +00 (2) левая x координата элемента - +02 (2) правая x координата элемента - +04 (2) верхняя y координата элемента - +06 (2) нижняя y координата элемента - +08 (2) флаги элемента - +10 (2) адрес обработчика при не нажатом огне - +12 (2) адрес обработчика при нажатом огне (левая кнопка) - +14 (2) адрес обработчика при нажатом огне (правая кнопка) + ⠡ ⮢ ࠭: + +00 (2) x न + +02 (2) ࠢ x न + +04 (2) y न + +06 (2) y न + +08 (2) 䫠 + +10 (2) ࠡ稪 ⮬ + +12 (2) ࠡ稪 ⮬ ( ) + +14 (2) ࠡ稪 ⮬ (ࠢ ) - если +00 == 0x8000 это считается концом таблицы элементов зкрана + ᫨ +00 == 0x8000 ⠥ 殬 ⠡ ⮢ ࠭ - флаги элемента: - d00 - элемент кнопка - d01 - рабочая кнопка - d02 - инверт - d03 - статичный инверт - d04 - программа запускается без адреса возврата без огня - (т.е. при попадании курсора мыши в эту прямоугольную - область удаляется адрес возрата со стека и осуществляется - переход на адрес, который находиться в +10) - d05 - программа запускается без адреса возврата по левой кнопке - огня - (т.е. при нажатии левой кнопки мыши над прямоугольной - областью удаляется адрес возрата со стека и осуществляется - переход на адрес, который находиться в +12) - d06 - программа запускается без адреса возврата по правой кнопке - огня - (т.е. при нажатии правой кнопки мыши над прямоугольной - областью удаляется адрес возрата со стека и осуществляется - переход на адрес, который находиться в +14) - d07 - вызвать функцию закрытия окна перед запуском программы без - огня - (т.е. при попадании курсора мыши в эту прямоугольную - область удаляется последнее окно с экрана) - d08 - вызвать функцию закрытия окна перед запуском программы по - левой кнопке - (т.е. при нажатии левой кнопки мыши над прямоугольной - областью удаляется последнее окно с экрана) - d09 - вызвать функцию закрытия окна перед запуском программы по - правой кнопке - (т.е. при нажатии правой кнопки мыши над прямоугольной - областью удаляется последнее окно с экрана) - d15 - это флаг: 1 - инверт при огне не убирать + 䫠 : + d00 - + d01 - ࠡ + d02 - + d03 - + d04 - ணࠬ ᪠ + (.. אַ㣮 + 㤠 ⥪ ⢫ + 室 , 室 +10) + d05 - ணࠬ ᪠ + + (.. ⨨ אַ㣮쭮 + 㤠 ⥪ ⢫ + 室 , 室 +12) + d06 - ணࠬ ᪠ ࠢ + + (.. ⨨ ࠢ אַ㣮쭮 + 㤠 ⥪ ⢫ + 室 , 室 +14) + d07 - 맢 㭪 । ᪮ ணࠬ + + (.. אַ㣮 + 㤠 ᫥ ࠭) + d08 - 맢 㭪 । ᪮ ணࠬ + + (.. ⨨ אַ㣮쭮 + 㤠 ᫥ ࠭) + d09 - 맢 㭪 । ᪮ ணࠬ + ࠢ + (.. ⨨ ࠢ אַ㣮쭮 + 㤠 ᫥ ࠭) + d15 - 䫠: 1 - 㡨 []------------------------------------------------------------------------[] - SetCMOSPrint - процедура включения печати даты/время из CMOS + SetCMOSPrint - 楤 祭 /६ CMOS - на вход: - - будет описано позднее - на выход: + 室: + - 㤥 ᠭ + 室: - []------------------------------------------------------------------------[] - ResCMOSPrint - процедура выключения печати даты/время из CMOS + ResCMOSPrint - 楤 몫祭 /६ CMOS - на вход: - - будет описано позднее - на выход: + 室: + - 㤥 ᠭ + 室: - []------------------------------------------------------------------------[] - SetClock - процедура установки курсора мыши в часы + SetClock - 楤 ⠭ - на вход: + 室: - - на выход: + 室: - []------------------------------------------------------------------------[] - SetMouse - процедура установки курсора мыши в нормальный курсор + SetMouse - 楤 ⠭ ଠ - на вход: + 室: - - на выход: + 室: - []------------------------------------------------------------------------[] - MoveBytes - процедура быстрого копирования памяти с помощью - акселлератора с увеличением адресов - на вход: - HL - откуда - DE - куда - BC - сколько - на выход: - HL - (откуда + сколько) - DE - (куда + сколько) + MoveBytes - 楤 ண ஢ + ᥫ 㢥祭 ᮢ + 室: + HL - 㤠 + DE - 㤠 + BC - ᪮쪮 + 室: + HL - (㤠 + ᪮쪮) + DE - (㤠 + ᪮쪮) []------------------------------------------------------------------------[] - MoveBytesUp - процедура быстрого копирования памяти с помощью - акселлератора с уменьшением адресов - на вход: - HL - откуда - DE - куда - BC - сколько - на выход: - HL - (откуда - сколько) - DE - (куда - сколько) + MoveBytesUp - 楤 ண ஢ + ᥫ 㬥襭 ᮢ + 室: + HL - 㤠 + DE - 㤠 + BC - ᪮쪮 + 室: + HL - (㤠 - ᪮쪮) + DE - (㤠 - ᪮쪮) []------------------------------------------------------------------------[] - Mult8 - процедура беззнакового умножения 8 * 8 bit = 16 bit + Mult8 - 楤 㬭 8 * 8 bit = 16 bit - на вход: + 室: E * C - на выход: - HL - результат + 室: + HL - १ []------------------------------------------------------------------------[] - Mult16X8 - процедура беззнакового умножения 16 * 8 bit = 24 bit + Mult16X8 - 楤 㬭 16 * 8 bit = 24 bit - на вход: + 室: DE * C - на выход: - A, HL - результат + 室: + A, HL - १ []------------------------------------------------------------------------[] - Mult16 - процедура беззнакового умножения 16 * 16 bit = 16 bit + Mult16 - 楤 㬭 16 * 16 bit = 16 bit - на вход: + 室: DE * BC - на выход: - HL - результат + 室: + HL - १ []------------------------------------------------------------------------[] - Mult16X16 - процедура беззнакового умножения 16 * 16 bit = 32 bit + Mult16X16 - 楤 㬭 16 * 16 bit = 32 bit - на вход: + 室: DE * BC - на выход: - HL, DE - результат + 室: + HL, DE - १ []------------------------------------------------------------------------[] - Mult32 - процедура беззнакового умножения 32 * 16 bit = 32 bit + Mult32 - 楤 㬭 32 * 16 bit = 32 bit - на вход: + 室: HL, DE * BC - на выход: - HL, DE - результат + 室: + HL, DE - १ []------------------------------------------------------------------------[] - Divis16X16 - процедура беззнакового деления 16 / 16 bit = 16.16 bit + Divis16X16 - 楤 16 / 16 bit = 16.16 bit - на вход: + 室: BC / DE - на выход: - BC - результат - HL - остаток + 室: + BC - १ + HL - ⮪ []------------------------------------------------------------------------[] - Divis24X16 - процедура беззнакового деления 24 / 16 bit = 8.16 bit + Divis24X16 - 楤 24 / 16 bit = 8.16 bit - на вход: + 室: HL, C / DE - на выход: - A - результат - HL - остаток + 室: + A - १ + HL - ⮪ []------------------------------------------------------------------------[] - Divis32X16 - процедура беззнакового деления 32 / 16 bit = 16.16 bit + Divis32X16 - 楤 32 / 16 bit = 16.16 bit - на вход: + 室: HL, DE / BC - на выход: - DE - результат - HL - остаток + 室: + DE - १ + HL - ⮪ []------------------------------------------------------------------------[] - Divis32 - процедура беззнакового деления 32 / 16 bit = 32.16 bit + Divis32 - 楤 32 / 16 bit = 32.16 bit - на вход: + 室: HL, DE / BC - на выход: - HL, DE - результат - BC - остаток + 室: + HL, DE - १ + BC - ⮪ []------------------------------------------------------------------------[] - ConvNumTxt32 - процедура конвертации беззнакового числа 32 bit в текст + ConvNumTxt32 - 楤 樨 ᫠ 32 bit ⥪ - на вход: - BC, HL - число 32 bit - DE - адрес буфера - на выход: - DE - адрес следующего байта за числом + 室: + BC, HL - ᫮ 32 bit + DE - + 室: + DE - ᫥饣 ᫮ []------------------------------------------------------------------------[] - ConvNumTxt16 - процедура конвертации беззнакового числа 16 bit в текст + ConvNumTxt16 - 楤 樨 ᫠ 16 bit ⥪ - на вход: - HL - число 16 bit - DE - адрес буфера - на выход: - DE - адрес следующего байта за числом + 室: + HL - ᫮ 16 bit + DE - + 室: + DE - ᫥饣 ᫮ []------------------------------------------------------------------------[] - ConvNumTxt8 - процедура конвертации беззнакового числа 8 bit в текст + ConvNumTxt8 - 楤 樨 ᫠ 8 bit ⥪ - на вход: - A - число 8 bit - DE - адрес буфера - на выход: - DE - адрес следующего байта за числом + 室: + A - ᫮ 8 bit + DE - + 室: + DE - ᫥饣 ᫮ []------------------------------------------------------------------------[] - ConvTxtNum32 - процедура конвертации текста в беззнаковое число 32 bit + ConvTxtNum32 - 楤 樨 ⥪ ᫮ 32 bit - на вход: - DE - адрес текста (конец строки - 0) - на выход: - HL, IX - число - C flag - ошибка + 室: + DE - ⥪ ( ப - 0) + 室: + HL, IX - ᫮ + C flag - 訡 []------------------------------------------------------------------------[] - ConvTxtNum16 - процедура конвертации текста в беззнаковое число 16 bit + ConvTxtNum16 - 楤 樨 ⥪ ᫮ 16 bit - на вход: - DE - адрес текста (конец строки - 0) - на выход: - HL - число - C flag - ошибка + 室: + DE - ⥪ ( ப - 0) + 室: + HL - ᫮ + C flag - 訡 []------------------------------------------------------------------------[] - DOSError - процедура вывода окна ошибки (для дос ошибок) + DOSError - 楤 뢮 訡 ( 訡) - на вход: - A - номер ошибки - на выход: + 室: + A - 訡 + 室: - []------------------------------------------------------------------------[] @@ -608,4 +608,4 @@ 13 july 2002 Anton Enin (C) Copyright 2002 R-lab -если есть вопросы e-mail: r-lab@mail.ru или на спринтер форуме. \ No newline at end of file +᫨ e-mail: r-lab@mail.ru ਭ 㬥. \ No newline at end of file diff --git a/docs/fn_api_0.5.txt b/docs/fn_api_0.5.txt index a432f0f..db053bf 100644 --- a/docs/fn_api_0.5.txt +++ b/docs/fn_api_0.5.txt @@ -1,279 +1,279 @@ []========================================================================[] * * -* Описание Flex Navigator API v1.xx для разработчиков Flx-Plugins * -* doc v0.5 от 31.03.2025 (в процессе) * +* ᠭ Flex Navigator API v1.xx ࠧࠡ稪 Flx-Plugins * +* doc v0.5 31.03.2025 ( ) * * * []========================================================================[] - Доступ к функциям осуществляется через набор переходов в начале ядра - Flex Navigator для сборки плагинов независимо от ядра. - Таблица переходов начинается с адреса JUMPS + 3 или она же с - BASE_ADDR + 3. Адрес начала таблицы выровнен по границе 256 байт. Первый - адрес переход занят для запуска самого навигатора. - Размер таблицы переходов 192 байта, после таблицы расположены некоторые - переменные Flex Navigator для доступа к ним из плагинов. - Для правильной работы при сборке плагина предлагается инклудить - файл fn_const.a80 + 㭪 ⢫ १ 室 砫 + Flex Navigator ᡮન ᨬ . + 室 稭 JUMPS + 3 + BASE_ADDR + 3. 砫 ⠡ ஢ ࠭ 256 . + 室 ᪠ ᠬ . + ⠡ 室 192 , ᫥ ⠡ ᯮ + ६ Flex Navigator 㯠 . + ࠢ쭮 ࠡ ᡮથ । 㤨 + 䠩 fn_const.a80 []------------------------------------------------------------------------[] - JUMPS.ClearScreen - процедура отчистки 0-го экрана нужным цветом. + JUMPS.ClearScreen - 楤 ⪨ 0- ࠭ 㦭 梥⮬. - на вход: - A - цвет отчистки (00-0Fh) - на выход: + 室: + A - 梥 ⪨ (00-0Fh) + 室: - []------------------------------------------------------------------------[] - JUMPS.MakeWindow - процедура создания графического окна + JUMPS.MakeWindow - 楤 ᮧ ᪮ - на вход: - (SP) - описатель окна - на выход: + 室: + (SP) - ⥫ + 室: - - сразу за вызовом этой процедуры в программе следует описатель окна. - возврат из процедуры происходит по адресу, следующему за описателем. + ࠧ 맮 ⮩ 楤 ணࠬ ᫥ ⥫ . + 楤 ந室 , ᫥饬 ⥫. - например: + ਬ: call MakeWindow - ... ; описатель окна + ... ; ⥫ - описатель окна: - +00 (1) флаг вывода окна: 0 - без сохранения данных под окном - (используется для полноэкранных окон) - 1 - с сохранением данных под окном - (используется для небольших окон) - 0x7F - восстановить данные под окном - (флаг служит для закрытия - текущего окна) - 0x8x - без привязки к описателю окна - +01 (2) координата x для вывода (0 - 639) - +03 (2) координата y для вывода (0 - 255) - +05 (2) ширина (0 - 639) - +07 (2) высота (0 - 255) + ⥫ : + +00 (1) 䫠 뢮 : 0 - ࠭ + (ᯮ ࠭ ) + 1 - ࠭ + (ᯮ ) + 0x7F - ⠭ + (䫠 㦨 + ⥪饣 ) + 0x8x - ਢ離 ⥫ + +01 (2) न x 뢮 (0 - 639) + +03 (2) न y 뢮 (0 - 255) + +05 (2) ਭ (0 - 639) + +07 (2) (0 - 255) - далее идут об'екты окна в формате: - +00 (1) тип объекта - +01 ... описатели обекта + ' ଠ: + +00 (1) ⨯ ꥪ + +01 ... ⥫ - об'екты окна: - 0. +00 (1) == 0 - конец списка об'ектов. после этого оконная - функция возвращает управление. + ' : + 0. +00 (1) == 0 - ᯨ᪠ '⮢. ᫥ ⮣ + 㭪 頥 ࠢ. - 1. +00 (1) == 1 - текстовая строка - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (1) цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - +06 ... текстовая строка (конец строки - 0) + 1. +00 (1) == 1 - ⥪⮢ ப + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (1) 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + +06 ... ⥪⮢ ப ( ப - 0) - 2. +00 (1) == 2 - заполнение прямоугольной плоскости - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по x (0 - 639) - +07 (2) длина по y (0 - 255) - +09 (1) цвет заполнения - (d7-d4 цвет background, d3-d0 цвет foreground) + 2. +00 (1) == 2 - אַ㣮쭮 ᪮ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) x (0 - 639) + +07 (2) y (0 - 255) + +09 (1) 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) - 3. +00 (1) == 3 - отрисовка углублённой прямоугольной плоскости - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по x (0 - 639) - +07 (2) длина по y (0 - 255) + 3. +00 (1) == 3 - ᮢ 㣫㡫񭭮 אַ㣮쭮 ᪮ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) x (0 - 639) + +07 (2) y (0 - 255) - 4. +00 (1) == 4 - отрисовка выпуклой прямоугольной плоскости - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по x (0 - 639) - +07 (2) длина по y (0 - 255) + 4. +00 (1) == 4 - ᮢ 㪫 אַ㣮쭮 ᪮ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) x (0 - 639) + +07 (2) y (0 - 255) - 5. +00 (1) == 5 - отрисовка кнопки с текстом - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по x (0 - 639) - +07 (2) длина по y (0 - 255) - +09 (1) цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - +10 ... текстовая строка (конец строки - 0) + 5. +00 (1) == 5 - ᮢ ⥪⮬ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) x (0 - 639) + +07 (2) y (0 - 255) + +09 (1) 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + +10 ... ⥪⮢ ப ( ப - 0) - Внимание! печать текста осуществляется с позиций + ! ⥪ ⢫ 権 x + 4, y + 1 - 6. +00 (1) == 6 - отрисовка горизонтального разделителя - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по x (0 - 639) + 6. +00 (1) == 6 - ᮢ ਧ⠫쭮 ࠧ⥫ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) x (0 - 639) - 7. +00 (1) == 7 - отрисовка вертикального разделителя - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) - +05 (2) длина по y (0 - 255) + 7. +00 (1) == 7 - ᮢ ⨪쭮 ࠧ⥫ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) + +05 (2) y (0 - 255) - 8. +00 (1) == 8 - отрисовка левой кнопки скролбара <- - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) + 8. +00 (1) == 8 - ᮢ ஫ <- + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) - 9. +00 (1) == 9 - отрисовка правой кнопки скролбара -> - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) + 9. +00 (1) == 9 - ᮢ ࠢ ஫ -> + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) - 10. +00 (1) == 10 - отрисовка верхней кнопки скролбара ^ - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) + 10. +00 (1) == 10 - ᮢ 孥 ஫ ^ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) - 11. +00 (1) == 11 - отрисовка нижней кнопки скролбара - +01 (2) смещение x от начала окна (0 - 639) - +03 (2) смещение y от начала окна (0 - 255) + 11. +00 (1) == 11 - ᮢ ஫ + +01 (2) ᬥ饭 x 砫 (0 - 639) + +03 (2) ᬥ饭 y 砫 (0 - 255) []------------------------------------------------------------------------[] - JUMPS.InvertRectan - процедура замены цвета прямоугольной плоскости + JUMPS.InvertRectan - 楤 梥 אַ㣮쭮 ᪮ - на вход: - HL - x координата - BC - y координата - HX - длина y - LX - длина x - D - текущий цвет - (d7-d4 цвет background, d3-d0 цвет foreground) - E - нужный цвет - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: + 室: + HL - x न + BC - y न + HX - y + LX - x + D - ⥪騩 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + E - 㦭 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: - - к сожалению процедура не очень быстрая, поэтому большие - прямоугольники советую особо не инвертировать... ;) + ᮦ 楤 祭 , ⮬ 訥 + אַ㣮쭨 ᮢ ᮡ ஢... ;) []------------------------------------------------------------------------[] - JUMPS.PrnTxtLnIFF - процедура вывода текстовых строк на графический - экран 640x256 в режиме размерного по X шрифта + JUMPS.PrnTxtLnIFF - 楤 뢮 ⥪⮢ ப ᪨ + ࠭ 640x256 ० ࠧ୮ X - на вход: - HL - адрес текстовой строки (конец строки - 0) - DE - позиция вывода по X - BC - позиция вывода по Y - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: - HL - адрес байта, следующего за строкой + 室: + HL - ⥪⮢ ப ( ப - 0) + DE - 뢮 X + BC - 뢮 Y + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: + HL - , ᫥饣 ப []------------------------------------------------------------------------[] - JUMPS.PrnTxtLnNorm - процедура вывода текстовых строк на графический - экран 640x256 + JUMPS.PrnTxtLnNorm - 楤 뢮 ⥪⮢ ப ᪨ + ࠭ 640x256 - на вход: - HL - адрес текстовой строки (конец строки - 0) - DE - позиция вывода по X - BC - позиция вывода по Y - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: - HL - адрес байта, следующего за строкой + 室: + HL - ⥪⮢ ப ( ப - 0) + DE - 뢮 X + BC - 뢮 Y + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: + HL - , ᫥饣 ப []------------------------------------------------------------------------[] - JUMPS.PrnTxtLnNormC - процедура вывода текстовых строк на графический - экран 640x256 с известным числом символов + JUMPS.PrnTxtLnNormC - 楤 뢮 ⥪⮢ ப ᪨ + ࠭ 640x256 ᫮ ᨬ - на вход: - HL - адрес текстовой строки - DE - позиция вывода по X - C - позиция вывода по Y - B - кол-во печатаемых символов - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: - HL - адрес байта, следующего за последним символом + 室: + HL - ⥪⮢ ப + DE - 뢮 X + C - 뢮 Y + B - - ⠥ ᨬ + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: + HL - , ᫥饣 ᫥ ᨬ []------------------------------------------------------------------------[] - JUMPS.PrnRangPathL - процедура вывода досовских путей на графический - экран 640x256 в режиме размерного по X шрифта, прижатых к - левому краю ( |-> ) + JUMPS.PrnRangPathL - 楤 뢮 ᮢ᪨ ⥩ ᪨ + ࠭ 640x256 ० ࠧ୮ X , ਦ + ( |-> ) - на вход: - IX - кол-во пикселей под вывод строки - HL - адрес текстовой строки (конец строки - 0) - DE - позиция вывода по X - BC - позиция вывода по Y - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: + 室: + IX - - ᥫ 뢮 ப + HL - ⥪⮢ ப ( ப - 0) + DE - 뢮 X + BC - 뢮 Y + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: - - процедура грамотно укорачивает досовский путь до нужного - размера путём замещения невлезающих директорий на ..\ + 楤 ࠬ⭮ 㪮稢 ᮢ᪨ 㦭 + ࠧ 饭 ४਩ ..\ []------------------------------------------------------------------------[] - JUMPS.PrnRangPathR - процедура вывода досовских путей на графический - экран 640x256 в режиме размерного по X шрифта, прижатых к - правому краю ( <-| ) + JUMPS.PrnRangPathR - 楤 뢮 ᮢ᪨ ⥩ ᪨ + ࠭ 640x256 ० ࠧ୮ X , ਦ + ࠢ ( <-| ) - на вход: - IX - кол-во пикселей под вывод строки - HL - адрес текстовой строки (конец строки - 0) - DE - позиция вывода по X - BC - позиция вывода по Y - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: + 室: + IX - - ᥫ 뢮 ப + HL - ⥪⮢ ப ( ப - 0) + DE - 뢮 X + BC - 뢮 Y + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: - - процедура грамотно укорачивает досовский путь до нужного - размера путём замещения невлезающих директорий на ..\ + 楤 ࠬ⭮ 㪮稢 ᮢ᪨ 㦭 + ࠧ 饭 ४਩ ..\ []------------------------------------------------------------------------[] - JUMPS.PrnRangPathC - процедура вывода досовских путей на графический - экран 640x256 в режиме размерного по X шрифта, отцентрированных - относительно краёв ( <-|-> ) + JUMPS.PrnRangPathC - 楤 뢮 ᮢ᪨ ⥩ ᪨ + ࠭ 640x256 ० ࠧ୮ X , 業஢ + ⭮⥫쭮 ( <-|-> ) - на вход: - IX - кол-во пикселей под вывод строки - HL - адрес текстовой строки (конец строки - 0) - DE - позиция вывода по X - BC - позиция вывода по Y - A - цвет печати - (d7-d4 цвет background, d3-d0 цвет foreground) - на выход: + 室: + IX - - ᥫ 뢮 ப + HL - ⥪⮢ ப ( ப - 0) + DE - 뢮 X + BC - 뢮 Y + A - 梥 + (d7-d4 梥 background, d3-d0 梥 foreground) + 室: - - процедура грамотно укорачивает досовский путь до нужного - размера путём замещения невлезающих директорий на ..\ + 楤 ࠬ⭮ 㪮稢 ᮢ᪨ 㦭 + ࠧ 饭 ४਩ ..\ []------------------------------------------------------------------------[] - JUMPS.InputLine - процедура редактирования строки на графическом - экране 640x256 в режиме размерного по X шрифта + JUMPS.InputLine - 楤 ।஢ ப ᪮ + ࠭ 640x256 ० ࠧ୮ X - на вход: - IX - адрес описателя строки - HL - адрес описателя элементов экрана (для мышки) - на выход: + 室: + IX - ⥫ ப + HL - ⥫ ⮢ ࠭ ( 誨) + 室: - - описатель строки: - +00 (1) максимальная длина строки - +01 (1) флаг готовности - +02 (1) текущая X позиция курсора (инициализируется в InputLine) - +03 (1) текущая add_x (инициализируется в InputLine) - +04 (1) количество введенных символов / длина строки - +05 (2) X позиция строки на экране - +07 (2) Y позиция строки на экране - +09 (2) X длина строки на экране - +0B (1) цвет строки (d7-d4 цвет background, d3-d0 цвет foreground) - +0C ... сама строка + ⥫ ப: + +00 (1) ᨬ쭠 ப + +01 (1) 䫠 ⮢ + +02 (1) ⥪ X (樠 InputLine) + +03 (1) ⥪ add_x (樠 InputLine) + +04 (1) ⢮ ᨬ / ப + +05 (2) X ப ࠭ + +07 (2) Y ப ࠭ + +09 (2) X ப ࠭ + +0B (1) 梥 ப (d7-d4 梥 background, d3-d0 梥 foreground) + +0C ... ᠬ ப - процедуры для таблицы элементов экрана: - InpLnExtN - процедура нормального выхода из редакции - InpLnExtC - процедура выхода из редакции по cancel - (восстанавливает изначальную строку) + 楤 ⠡ ⮢ ࠭: + InpLnExtN - 楤 ଠ쭮 室 ।樨 + InpLnExtC - 楤 室 ।樨 cancel + (⠭ 砫 ப) []------------------------------------------------------------------------[] @@ -285,82 +285,82 @@ []------------------------------------------------------------------------[] - JUMPS.DOSError - процедура вывода окна ошибки (для DOS ошибок) + JUMPS.DOSError - 楤 뢮 訡 ( DOS 訡) - на вход: - A - номер ошибки - на выход: + 室: + A - 訡 + 室: - []------------------------------------------------------------------------[] - JUMPS.InitScrBar - процедура инициализации описателя скроллбара + JUMPS.InitScrBar - 楤 樠樨 ⥫ ஫ - на вход: - IX - адрес описателя скроллбара - на выход: + 室: + IX - ⥫ ஫ + 室: - - описатель скроллбара: - +00 (2) X позиция скролбара (0-639) - +02 (2) Y позиция скролбара (0-255) - +04 (2) длина скролбара - +06 (2) текущая длина скролбара (инициализируется в InitScrBar) - +08 (2) адрес ячейки, куда запишется начальная координата бара - если 0, то не используется - (используется для таблицы элементов экрана) - +10 (2) адрес ячейки, куда запишется конечная координата бара - если 0, то не используется - (используется для таблицы элементов экрана) - +12 (2) кол-во видимых элементов - +14 (2) общее кол-во элементов - +16 (2) первая видимый элемент + ⥫ ஫: + +00 (2) X ஫ (0-639) + +02 (2) Y ஫ (0-255) + +04 (2) ஫ + +06 (2) ⥪ ஫ (樠 InitScrBar) + +08 (2) 祩, 㤠 砫쭠 न + ᫨ 0, ᯮ + (ᯮ ⠡ ⮢ ࠭) + +10 (2) 祩, 㤠 筠 न + ᫨ 0, ᯮ + (ᯮ ⠡ ⮢ ࠭) + +12 (2) - ⮢ + +14 (2) 饥 - ⮢ + +16 (2) ࢠ []------------------------------------------------------------------------[] - JUMPS.PrnHScrBar - процедура печати горизонтального скроллбара + JUMPS.PrnHScrBar - 楤 ਧ⠫쭮 ஫ - на вход: - IX - адрес описателя скроллбара (см. выше) - на выход: + 室: + IX - ⥫ ஫ (. ) + 室: - []------------------------------------------------------------------------[] - JUMPS.PrnVScrBar - процедура печати вертикального скроллбара + JUMPS.PrnVScrBar - 楤 ⨪쭮 ஫ - на вход: - IX - адрес описателя скроллбара (см. выше) - на выход: + 室: + IX - ⥫ ஫ (. ) + 室: - []------------------------------------------------------------------------[] - JUMPS.InitProcess - процедура инициализации описателя процессбара + JUMPS.InitProcess - 楤 樠樨 ⥫ ᡠ - на вход: - IX - адрес описателя процессбара - на выход: + 室: + IX - ⥫ ᡠ + 室: - - описателя процессбара: - +00 (2) X позиция процессбара (0-639) - +02 (2) Y позиция процессбара (0-255) - +04 (2) длина процессбара - +06 (2) коэффициент для процесса (инициализируется в InitProcess) - +08 (2) коррекция коэфициента (инициализируется в InitProcess) - +10 (4) максимум (инициализируется в InitProcess) - +14 (4) текущее (инициализируется в InitProcess) - +18 (1) цвет процессбара - (d7-d4 цвет background, d3-d0 цвет foreground) + ⥫ ᡠ: + +00 (2) X ᡠ (0-639) + +02 (2) Y ᡠ (0-255) + +04 (2) ᡠ + +06 (2) 樥 (樠 InitProcess) + +08 (2) ४ 樥 (樠 InitProcess) + +10 (4) ᨬ (樠 InitProcess) + +14 (4) ⥪饥 (樠 InitProcess) + +18 (1) 梥 ᡠ + (d7-d4 梥 background, d3-d0 梥 foreground) []------------------------------------------------------------------------[] - JUMPS.PrnProcess - процедура печати процессбара + JUMPS.PrnProcess - 楤 ᡠ - на вход: - IX - адрес описателя процессбара (см. выше) - на выход: + 室: + IX - ⥫ ᡠ (. ) + 室: - []------------------------------------------------------------------------[] @@ -373,113 +373,113 @@ []------------------------------------------------------------------------[] - 3 команд перехода (12 байт) зарезервированы и заполнены - командой RET (12 байт 0xC9) + 3 室 (12 ) १ࢨ஢ + RET (12 0xC9) []------------------------------------------------------------------------[] - JUMPS.ResFire - процедура ожидания, пока все кнопки мыши не будут - отпущены + JUMPS.ResFire - 楤 , + 饭 - на вход: + 室: - - на выход: + 室: - []------------------------------------------------------------------------[] - JUMPS.TestCoords - процедура проверки координат мыши по таблице - элементов экрана + JUMPS.TestCoords - 楤 ஢ન न ⠡ + ⮢ ࠭ - на вход: - IX - адрес таблицы элементов зкрана - на выход: + 室: + IX - ⠡ ⮢ ࠭ + 室: - - таблица элементов зкрана: - +00 (2) левая x координата элемента - +02 (2) правая x координата элемента - +04 (2) верхняя y координата элемента - +06 (2) нижняя y координата элемента - +08 (2) флаги элемента - +10 (2) адрес обработчика при не нажатом огне - +12 (2) адрес обработчика при нажатом огне (левая кнопка) - +14 (2) адрес обработчика при нажатом огне (правая кнопка) + ⠡ ⮢ ࠭: + +00 (2) x न + +02 (2) ࠢ x न + +04 (2) y न + +06 (2) y न + +08 (2) 䫠 + +10 (2) ࠡ稪 ⮬ + +12 (2) ࠡ稪 ⮬ ( ) + +14 (2) ࠡ稪 ⮬ (ࠢ ) - если +00 == 0x8000 это считается концом таблицы элементов зкрана + ᫨ +00 == 0x8000 ⠥ 殬 ⠡ ⮢ ࠭ - флаги элемента: - d00 - элемент кнопка - d01 - рабочая кнопка - d02 - инверт - d03 - статичный инверт - d04 - программа запускается без адреса возврата без огня - (т.е. при попадании курсора мыши в эту прямоугольную - область удаляется адрес возрата со стека и осуществляется - переход на адрес, который находиться в +10) - d05 - программа запускается без адреса возврата по левой кнопке - огня - (т.е. при нажатии левой кнопки мыши над прямоугольной - областью удаляется адрес возрата со стека и осуществляется - переход на адрес, который находиться в +12) - d06 - программа запускается без адреса возврата по правой кнопке - огня - (т.е. при нажатии правой кнопки мыши над прямоугольной - областью удаляется адрес возрата со стека и осуществляется - переход на адрес, который находиться в +14) - d07 - вызвать функцию закрытия окна перед запуском программы без - огня - (т.е. при попадании курсора мыши в эту прямоугольную - область удаляется последнее окно с экрана) - d08 - вызвать функцию закрытия окна перед запуском программы по - левой кнопке - (т.е. при нажатии левой кнопки мыши над прямоугольной - областью удаляется последнее окно с экрана) - d09 - вызвать функцию закрытия окна перед запуском программы по - правой кнопке - (т.е. при нажатии правой кнопки мыши над прямоугольной - областью удаляется последнее окно с экрана) - d15 - это флаг: 1 - инверт при огне не убирать + 䫠 : + d00 - + d01 - ࠡ + d02 - + d03 - + d04 - ணࠬ ᪠ + (.. אַ㣮 + 㤠 ⥪ ⢫ + 室 , 室 +10) + d05 - ணࠬ ᪠ + + (.. ⨨ אַ㣮쭮 + 㤠 ⥪ ⢫ + 室 , 室 +12) + d06 - ணࠬ ᪠ ࠢ + + (.. ⨨ ࠢ אַ㣮쭮 + 㤠 ⥪ ⢫ + 室 , 室 +14) + d07 - 맢 㭪 । ᪮ ணࠬ + + (.. אַ㣮 + 㤠 ᫥ ࠭) + d08 - 맢 㭪 । ᪮ ணࠬ + + (.. ⨨ אַ㣮쭮 + 㤠 ᫥ ࠭) + d09 - 맢 㭪 । ᪮ ணࠬ + ࠢ + (.. ⨨ ࠢ אַ㣮쭮 + 㤠 ᫥ ࠭) + d15 - 䫠: 1 - 㡨 []------------------------------------------------------------------------[] - JUMPS.SetCMOSPrint - процедура включения печати даты/время из CMOS + JUMPS.SetCMOSPrint - 楤 祭 /६ CMOS - на вход: - - будет описано позднее - на выход: + 室: + - 㤥 ᠭ + 室: - []------------------------------------------------------------------------[] - JUMPS.ResCMOSPrint - процедура выключения печати даты/время из CMOS + JUMPS.ResCMOSPrint - 楤 몫祭 /६ CMOS - на вход: - - будет описано позднее - на выход: + 室: + - 㤥 ᠭ + 室: - []------------------------------------------------------------------------[] - JUMPS.SetClock - процедура установки курсора мыши в часы + JUMPS.SetClock - 楤 ⠭ - на вход: + 室: - - на выход: + 室: - []------------------------------------------------------------------------[] - JUMPS.SetMouse - процедура установки курсора мыши в нормальный курсор + JUMPS.SetMouse - 楤 ⠭ ଠ - на вход: + 室: - - на выход: + 室: - []------------------------------------------------------------------------[] - 4 команды перехода (12 байт) зарезервированы и заполнены - командой RET (12 байт 0xC9) + 4 室 (12 ) १ࢨ஢ + RET (12 0xC9) []------------------------------------------------------------------------[] @@ -487,178 +487,178 @@ []------------------------------------------------------------------------[] - JUMPS.MoveBytes - процедура быстрого копирования памяти с помощью - акселлератора с увеличением адресов + JUMPS.MoveBytes - 楤 ண ஢ + ᥫ 㢥祭 ᮢ - на вход: - HL - откуда - DE - куда - BC - сколько - на выход: - HL - (откуда + сколько) - DE - (куда + сколько) + 室: + HL - 㤠 + DE - 㤠 + BC - ᪮쪮 + 室: + HL - (㤠 + ᪮쪮) + DE - (㤠 + ᪮쪮) []------------------------------------------------------------------------[] - JUMPS.MoveBytesUp - процедура быстрого копирования памяти с помощью - акселлератора с уменьшением адресов + JUMPS.MoveBytesUp - 楤 ண ஢ + ᥫ 㬥襭 ᮢ - на вход: - HL - откуда - DE - куда - BC - сколько - на выход: - HL - (откуда - сколько) - DE - (куда - сколько) + 室: + HL - 㤠 + DE - 㤠 + BC - ᪮쪮 + 室: + HL - (㤠 - ᪮쪮) + DE - (㤠 - ᪮쪮) []------------------------------------------------------------------------[] - JUMPS.Mult8 - процедура беззнакового умножения + JUMPS.Mult8 - 楤 㬭 8 * 8 bit = 16 bit - на вход: + 室: E * C - на выход: - HL - результат + 室: + HL - १ []------------------------------------------------------------------------[] - JUMPS.Mult16X8 - процедура беззнакового умножения + JUMPS.Mult16X8 - 楤 㬭 16 * 8 bit = 24 bit - на вход: + 室: DE * C - на выход: - A, HL - результат + 室: + A, HL - १ []------------------------------------------------------------------------[] - JUMPS.Mult16 - процедура беззнакового умножения + JUMPS.Mult16 - 楤 㬭 16 * 16 bit = 16 bit - на вход: + 室: DE * BC - на выход: - HL - результат + 室: + HL - १ []------------------------------------------------------------------------[] - JUMPS.Mult16X16 - процедура беззнакового умножения + JUMPS.Mult16X16 - 楤 㬭 16 * 16 bit = 32 bit - на вход: + 室: DE * BC - на выход: - HL, DE - результат + 室: + HL, DE - १ []------------------------------------------------------------------------[] - JUMPS.Mult32 - процедура беззнакового умножения + JUMPS.Mult32 - 楤 㬭 32 * 16 bit = 32 bit - на вход: + 室: HL, DE * BC - на выход: - HL, DE - результат + 室: + HL, DE - १ []------------------------------------------------------------------------[] - JUMPS.Divis16X16 - процедура беззнакового деления + JUMPS.Divis16X16 - 楤 16 / 16 bit = 16.16 bit - на вход: + 室: BC / DE - на выход: - BC - результат - HL - остаток + 室: + BC - १ + HL - ⮪ []------------------------------------------------------------------------[] - JUMPS.Divis24X16 - процедура беззнакового деления + JUMPS.Divis24X16 - 楤 24 / 16 bit = 8.16 bit - на вход: + 室: HL, C / DE - на выход: - A - результат - HL - остаток + 室: + A - १ + HL - ⮪ []------------------------------------------------------------------------[] - JUMPS.Divis32X16 - процедура беззнакового деления + JUMPS.Divis32X16 - 楤 32 / 16 bit = 16.16 bit - на вход: + 室: HL, DE / BC - на выход: - DE - результат - HL - остаток + 室: + DE - १ + HL - ⮪ []------------------------------------------------------------------------[] - JUMPS.Divis32 - процедура беззнакового деления + JUMPS.Divis32 - 楤 32 / 16 bit = 32.16 bit - на вход: + 室: HL, DE / BC - на выход: - HL, DE - результат - BC - остаток + 室: + HL, DE - १ + BC - ⮪ []------------------------------------------------------------------------[] - JUMPS.ConvNumTxt32 - процедура конвертации беззнакового числа - 32 bit в текст + JUMPS.ConvNumTxt32 - 楤 樨 ᫠ + 32 bit ⥪ - на вход: - BC, HL - число 32 bit - DE - адрес буфера - на выход: - DE - адрес следующего байта за числом + 室: + BC, HL - ᫮ 32 bit + DE - + 室: + DE - ᫥饣 ᫮ []------------------------------------------------------------------------[] - JUMPS.ConvNumTxt16 - процедура конвертации беззнакового числа - 16 bit в текст + JUMPS.ConvNumTxt16 - 楤 樨 ᫠ + 16 bit ⥪ - на вход: - HL - число 16 bit - DE - адрес буфера - на выход: - DE - адрес следующего байта за числом + 室: + HL - ᫮ 16 bit + DE - + 室: + DE - ᫥饣 ᫮ []------------------------------------------------------------------------[] - JUMPS.ConvNumTxt8 - процедура конвертации беззнакового числа - 8 bit в текст + JUMPS.ConvNumTxt8 - 楤 樨 ᫠ + 8 bit ⥪ - на вход: - A - число 8 bit - DE - адрес буфера - на выход: - DE - адрес следующего байта за числом + 室: + A - ᫮ 8 bit + DE - + 室: + DE - ᫥饣 ᫮ []------------------------------------------------------------------------[] - JUMPS.ConvTxtNum32 - процедура конвертации текста в беззнаковое - число 32 bit + JUMPS.ConvTxtNum32 - 楤 樨 ⥪ + ᫮ 32 bit - на вход: - DE - адрес текста (конец строки - 0) - на выход: - HL, IX - число - C flag - ошибка + 室: + DE - ⥪ ( ப - 0) + 室: + HL, IX - ᫮ + C flag - 訡 []------------------------------------------------------------------------[] - JUMPS.ConvTxtNum16 - процедура конвертации текста в беззнаковое - число 16 bit + JUMPS.ConvTxtNum16 - 楤 樨 ⥪ + ᫮ 16 bit - на вход: - DE - адрес текста (конец строки - 0) - на выход: - HL - число - C flag - ошибка + 室: + DE - ⥪ ( ப - 0) + 室: + HL - ᫮ + C flag - 訡 []------------------------------------------------------------------------[] @@ -668,4 +668,4 @@ 13 july 2002 Anton Enin (C) Copyright 2002 R-lab -если есть вопросы e-mail: r-lab@mail.ru или на спринтер форуме. +᫨ e-mail: r-lab@mail.ru ਭ 㬥. diff --git a/docs/hist866.txt b/docs/hist866.txt deleted file mode 100644 index c4b5e2f..0000000 --- a/docs/hist866.txt +++ /dev/null @@ -1,157 +0,0 @@ - -FN - FlexNavigator -FV - FileViewer -FE - FileEditor - -25.06.2025 -FN 1.15 -- ࠩ ஥ help ⠢ ᡮથ. -- "About" ⥯ 뢠 ᡮન. -- ࠢ ஥ help. -- ⮣ ஢ 866 ஢ fn. -- ॢ UTF8 ஢. -- ࠢ CorrBigChar. -- 訥 । bat 䠩. -- ࠢ "attribut" "attribute". -- ࠢ 2 "claster" "cluster". - -28.05.2025 -FE v1.08 -- ࠭ "᪠" 䠩 ᪥. -FV v1.05 -- ࠭ "᪠" 䠩 ᪥. -FN v1.14 -- ࠢ ᠭ ப ⨨ ALT+F1/F2. -- ᤥ ய ४ਨ ".." ஢騪 ࠢ쭮 ஢. -- ࠢ ⨯ ஢. -- ᤥ ⥫ ࠧ ४ਨ ஢ ४ﬨ ( ⠭). -- ᮤন ४ਨ ॢ ᤥ ENTER ⮯ ( ⠭). -- ࠢ ॢ 䠩. - -------------------------------------------------------------------------------- - -25/06/24 - ⮡ࠦ ᮮ饭 . - -13/05/24 -ࠢ 訡 樠樨 ࠭ help. - প 䠩 FAT32 - - -11/05/24 - 뢮 ᮮ饭 ⮬, ᫨誮 䠩 ४ਨ. 䠩, " " - ⮡ࠦ. - - -12/12/23 -প Current Dir, ⮡ࠦ ⥪ ४ ᪠. - - -07/09/23 -⢥ ࠢ. - - -01/08/23 -ᠥ FN ᫥ १㧪 让 (titd, ldconf). -࠭ ஢ઠ Sp97. - ଠ쭮 யᠭ, 譨 ࠩ ᪥ ࠭. - - -29/07/23 - 訡 訢襣 ਫ - 32 . -DSS ࠭ 頫 䫠 CF 室 訡, FN ᥣ ஢ ᫥ ਫ 䫠 CF. -DSS ⥯ , FN 訡 ஢, ⠬ FF, ⠡ 32... - disttest.exe, 室 祬- ⠭ 訡 #FF, ⠪ . -㦭 㫥 室 訡. - - -17/07/23 - 2.55  㭪 - । ࠢ ࠡ稪 뢠 㫥 . -C ஢ઠ . - - -10/05/22 -Viewer: -* ࠢ ᬥ᪨ ப ᬥ 㭪樮 . -* ࠢ ᠭ ਭ ⠩ . -* ந᪨ ⠪⮢ ⠬, ))). -+ ७ᥭ F7, ⮡ 룭 ))). -+ ⠭ CTRL+P . -? ࠢ Wrap, ⠫ 孥 ப. , 祬 祣. - -Editor: -+ "F7 Print" -+ ⠭ CTRL+P ० HEX -* ࠢ ᬥ᪨ ப ᬥ 㭪樮 -* ࠢ ᠭ ਭ ⠩ - -------------------------------------------------------------------------------- - -FE v.1.06 05.08.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -+ F9 뢠 ன । ࠭ ன - 䠩 - -FN v.1.13.1 02.08.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -* ᦠ - -FE v.1.05.1 02.08.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -+ ࠬ 䨣-䠩 fnedit.ini, 砥/⪫砥 - ⢥ত । - -FE v.1.05 07.06.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -* ࠢ , ਢ ᠭ ᫥ 7- - । -+ ⮧⨥ ᨬ ᪮ 祪 -+ ।  䨣-䠩 fnedit.ini, १ ⪫ - - -FE v.1.04 18.04.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -+ Ctrl+P (⥬ F9 㤥 ७祭 㣮 - 㭪樮) -+ 㭪樮 ⬥ Ctrl+Z ( 蠣 Undo, 業, - 뢠 ⥪饩 ।㥬 ப, 室 - ப) - -FE v.1.03 17.04.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -+ ࠢ Alt+CursorLeft(Home) Alt+CursorRight(End) -* ࠢ ணࠬ THomeString - ⮩ ப 横 -* ࠢ TEndString, 筮 - ⮩ ப 横 -* ࠢ ணࠬ ⥪饩 ப ( 㫥 - ப 頫) - -FN v.1.12.1 13.04.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -* ࠢ ⮬᪮ ᬥ -+ ன SetUp ⪫祭 ⮬᪮ ⨢樨 - ᬥ ᪠ - -FE v.1.02 10.04.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -+ Ctrl+D 㡫஢ ப (ࠡ⠥ - ⮫쪮 ப 127 ᨬ) -+ ७ ப 砫 ப ⠪ 砫, - ।饩 ப -* ࠡ⠭ 楤 樮஢ - -FN v.1.12+ 07.04.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -+ , ன Alt+F1/F2 ⠭ ⨢ - -FE v.1.01 07.04.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -+ ᮬ ⢥ত 室 । -+ 祭 ப ப 頥 - ࠭ 뫮  - ப 樨 ப -* ࠡ⠭ 楤 樮஢ 樨 ப - (࠭) / - ᨬ ⠡஢ ப, - ᪠ ᪮쪮 権 ஭ -+ 㤠 楫 ப Ctrl+Y -+ ࠭ Ctrl+S -+ ० ࠡ Home - ᫨ ⠡ 砫 ப, - ࢮ ⨨ ६頥 -஡ - ᨬ, ୮ ⨨ - ६頥 - -FN v.1.12 02.04.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -+ BAT-䠩, , ⠪ ப - ।祩 ࠬ஢. - -FN v.1.11 27.03.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -* ࠢ । ⠫ ஬ ᯮ 䠩 FlexNavigator-. - -FV v.1.03 10.02.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -+ ४祭 ஢ ⥪ WIN/DOS/KOI diff --git a/docs/history.txt b/docs/history.txt index dfed099..d80ef70 100644 --- a/docs/history.txt +++ b/docs/history.txt @@ -3,155 +3,177 @@ FN - FlexNavigator FV - FileViewer FE - FileEditor +25.07.2025 +CDplayer.flx 1.1: +- , ᠭ/history cdplayer.txt 冷 . +FE 1.09 +- ࠢ: 室 । ࠭ 䠩 ࠭ + Enter ⥯ ࠡ⠥ ⢥ত ࠭. +FN 1.16 +- ஥ editor ॥堫 㤠 ᪠ F4, FN 㤠. +- ஥ viewer ॥堫 㤠 ᪠ F3, FN 㤠. +- ஥ help ॥堫 㤠 ᪠ ⨨ F1, FN 㤠. +- 㧪 ⤥ ᪠, ⥯ ᪠ + ⮫쪮 FN. +- ନ஢ . +- প ࠡ 0x4000-0x7FFF ( 1) + 0xC000-0xBFFF ( 3), ᯮ cdplayer. +- 訡 । 2 ⨯ 訡. +- ࠢ 梥 ⥪ 㪠 . +- ⥪⮢ 䠩 ஢ CP866, readme.md ⠢ ஢ UTF8. + +27.06.2025 +FN 1.15.01 +- ࠫ data date. + 25.06.2025 FN 1.15 -- год копирайта во встроенном help вставляется при сборке. -- в окне "About" теперь показывает дату сборки. -- поправлен встроенный help. -- добавлена копия этого хистори в кодировке 866 с копированием в папку fn. -- доки переведены на UTF8 кодировку. -- поправлена CorrBigChar. -- небольшие переделки в bat файлах. -- исправлен "attribut" на "attribute". -- исправлен в 2х местах "claster" на "cluster". +- ࠩ ஥ help ⠢ ᡮથ. +- "About" ⥯ 뢠 ᡮન. +- ࠢ ஥ help. +- ⮣ ஢ 866 ஢ fn. +- ॢ UTF8 ஢. +- ࠢ CorrBigChar. +- 訥 । bat 䠩. +- ࠢ "attribut" "attribute". +- ࠢ 2 "claster" "cluster". 28.05.2025 FE v1.08 -- убрано "искажение" имени файла при запуске. +- ࠭ "᪠" 䠩 ᪥. FV v1.05 -- убрано "искажение" имени файла при запуске. +- ࠭ "᪠" 䠩 ᪥. FN v1.14 -- исправлено зависание в командной строке при нажатии ALT+F1/F2. -- сделан пропуск для имени директории ".." для сортировщика для правильной сортировки. -- поправлены названия типов сортировки. -- сделан измеритель размера директории в байтах для копирования директориями (пока спрятан). -- показ содержимого директории из дерева сделан по ENTER вместо автопоказа (пока спрятана). -- поправлена генерация дерева файлов. +- ࠢ ᠭ ப ⨨ ALT+F1/F2. +- ᤥ ய ४ਨ ".." ஢騪 ࠢ쭮 ஢. +- ࠢ ⨯ ஢. +- ᤥ ⥫ ࠧ ४ਨ ஢ ४ﬨ ( ⠭). +- ᮤন ४ਨ ॢ ᤥ ENTER ⮯ ( ⠭). +- ࠢ ॢ 䠩. ------------------------------------------------------------------------------- 25/06/24 -Добавлено отображение сообщения о защите от записи. + ⮡ࠦ ᮮ饭 . 13/05/24 -Исправлена ошибка инициализации страницы help. -Добавлена поддержка больших файлов для FAT32 - +ࠢ 訡 樠樨 ࠭ help. + প 䠩 FAT32 11/05/24 -Теперь выводится сообщение о том, что слишком много файлов в директории. Те файлы, которые "не влезли" - не отображаются. + 뢮 ᮮ饭 ⮬, ᫨誮 䠩 ४ਨ. 䠩, " " - ⮡ࠦ. 12/12/23 -Поддержка Current Dir, при старте отображается текущая директория диска. +প Current Dir, ⮡ࠦ ⥪ ४ ᪠. 07/09/23 -Множественные мелкие правки. +⢥ ࠢ. 01/08/23 -Повисает FN после перезагрузки большой альтеры (titd, ldconf). -Убрана проверка на Sp97. -Версия нормально прописана, лишние копирайты при запуске убраны. +ᠥ FN ᫥ १㧪 让 (titd, ldconf). +࠭ ஢ઠ Sp97. + ଠ쭮 யᠭ, 譨 ࠩ ᪥ ࠭. 29/07/23 -Таблица ошибок от завершившегося приложения - 32 записи. -DSS раньше не возвращал флаг CF при выходе с ошибкой, но FN всегда проверял после возврата из приложения флаг CF. -DSS теперь вернул, FN полез ошибку проверять, а там FF, а таблица на 32... -Найдено на disttest.exe, он выходит зачем-то установив код ошибки #FF, а такого кода нет. -Нужно с нулем выходить без ошибок. + 訡 訢襣 ਫ - 32 . +DSS ࠭ 頫 䫠 CF 室 訡, FN ᥣ ஢ ᫥ ਫ 䫠 CF. +DSS ⥯ , FN 訡 ஢, ⠬ FF, ⠡ 32... + disttest.exe, 室 祬- ⠭ 訡 #FF, ⠪ . +㦭 㫥 室 訡. 17/07/23 -В биосе 2.55 появилась функция - передавать управление из ПЗУ обработчику прерывания в нулевой банке ОЗУ. -Cделана проверка на версию биоса. + 2.55  㭪 - । ࠢ ࠡ稪 뢠 㫥 . +C ஢ઠ . 10/05/22 Viewer: -* Поправлен косметический баг в нижней строке при смене функциональных клавиш. -* Исправлено зависание принтера до таймаута при печати. -* Героически сэкономлено немного тактов там, где никто не заметит))). -+ Печать перенесена на клавишу F7, чтоб выгнать вас из зоны комфорта))). -+ Добавлено сочетание CTRL+P для печати. -? Почти исправлен Wrap, остался баг с верхней строкой. Лучше, чем ничего. +* ࠢ ᬥ᪨ ப ᬥ 㭪樮 . +* ࠢ ᠭ ਭ ⠩ . +* ந᪨ ⠪⮢ ⠬, ))). ++ ७ᥭ F7, ⮡ 룭 ))). ++ ⠭ CTRL+P . +? ࠢ Wrap, ⠫ 孥 ப. , 祬 祣. Editor: -+ Добавлена кнопка "F7 Print" -+ Добавлено сочетание CTRL+P для печати в режиме HEX -* Поправлен косметический баг в нижней строке при смене функциональных клавиш -* Исправлено зависание принтера до таймаута при печати ++ "F7 Print" ++ ⠭ CTRL+P ० HEX +* ࠢ ᬥ᪨ ப ᬥ 㭪樮 +* ࠢ ᠭ ਭ ⠩ ------------------------------------------------------------------------------- FE v.1.06 05.08.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -+ По кнопке F9 вызываются настройки редактора с возможностью сохранить настройки - в файл ++ F9 뢠 ன । ࠭ ன + 䠩 FN v.1.13.1 02.08.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -* версия без сжатия кодовых блоков +* ᦠ FE v.1.05.1 02.08.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -+ Добавлен параметр в конфиг-файле fnedit.ini, который включает/отключает диалог - подтверждения закрытия редактора ++ ࠬ 䨣-䠩 fnedit.ini, 砥/⪫砥 + ⢥ত । FE v.1.05 07.06.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -* исправлен глюк, который приводил к зависанию или сбросу после 7-го открытия - редактора -+ Добавлено автозакрытие символов скобок и кавычек -+ У редактора появился конфиг-файл fnedit.ini, через который можно отключить - некоторые фичи +* ࠢ , ਢ ᠭ ᫥ 7- + । ++ ⮧⨥ ᨬ ᪮ 祪 ++ ।  䨣-䠩 fnedit.ini, १ ⪫ + FE v.1.04 18.04.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -+ Добавлена кнопка Ctrl+P для печати (затем F9 будет переназначена на другой - функционал) -+ Добавлен функционал отмены по Ctrl+Z (это не пошаговый Undo, не полноценный, - просто сбрасывает буфер текущей редактируемой строки, на момент перехода - на эту строку) ++ Ctrl+P (⥬ F9 㤥 ७祭 㣮 + 㭪樮) ++ 㭪樮 ⬥ Ctrl+Z ( 蠣 Undo, 業, + 뢠 ⥪饩 ।㥬 ப, 室 + ப) FE v.1.03 17.04.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -+ Добавлены кнопки управления Alt+CursorLeft(Home) и Alt+CursorRight(End) -* Исправлен баг в подпрограмме THomeString - на пустой строке могла зациклиться -* Исправлен баг в TEndString, аналогично - на пустой строке могла зациклиться -* Исправлена подпрограмма заполнения буфера текущей строки (при нулевой длине - строки он не очищался) ++ ࠢ Alt+CursorLeft(Home) Alt+CursorRight(End) +* ࠢ ணࠬ THomeString - ⮩ ப 横 +* ࠢ TEndString, 筮 - ⮩ ப 横 +* ࠢ ணࠬ ⥪饩 ப ( 㫥 + ப 頫) FN v.1.12.1 13.04.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -* Исправлен баг при автоматической смене панели -+ Добавлена настройка в SetUp для отключения автоматической активации панели при - смене диска +* ࠢ ⮬᪮ ᬥ ++ ன SetUp ⪫祭 ⮬᪮ ⨢樨 + ᬥ ᪠ FE v.1.02 10.04.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -+ Добавлена горячая кнопка Ctrl+D для дублирования строки (работает - только для строк до 127 символов) -+ При переносе строки в начале строки делается такой же отступ от начала, как и - на предыдущей строке -* Переработаны процедуры позиционирования курсора ++ Ctrl+D 㡫஢ ப (ࠡ⠥ + ⮫쪮 ப 127 ᨬ) ++ ७ ப 砫 ப ⠪ 砫, + ।饩 ப +* ࠡ⠭ 楤 樮஢ FN v.1.12+ 07.04.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -+ Панель, в которой меняется диск по Alt+F1/F2 становится активной ++ , ன Alt+F1/F2 ⠭ ⨢ FE v.1.01 07.04.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -+ Добавлен диалог с запросом подтверждения выхода из редактора -+ При извлечении строки буфер строки очищается - ранее можно было наблюдать - некоторый мусор в конце строки при навигации между строками -* Доработана процедура позиционирования курсора при навигации на строку - (страницу) выше/ниже - в зависимости от наличия табуляторов в строке, курсор - мог отскакивать на несколько позиций в сторону -+ Добавлена возможность удаления целой строки по Ctrl+Y -+ Добавлена горячая кнопка для сохранения Ctrl+S -+ Реализация нового режима работы Home - если есть табуляторы в начале строки, - то при первом нажатии курсор перемещается в позицию с первым не-пробельным - символом, при повторном нажатии - перемещается в первую позицию ++ ᮬ ⢥ত 室 । ++ 祭 ப ப 頥 - ࠭ 뫮  + ப 樨 ப +* ࠡ⠭ 楤 樮஢ 樨 ப + (࠭) / - ᨬ ⠡஢ ப, + ᪠ ᪮쪮 権 ஭ ++ 㤠 楫 ப Ctrl+Y ++ ࠭ Ctrl+S ++ ० ࠡ Home - ᫨ ⠡ 砫 ப, + ࢮ ⨨ ६頥 -஡ + ᨬ, ୮ ⨨ - ६頥 FN v.1.12 02.04.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -+ Реализован запуск BAT-файлов, как из панели, так и из командной строки с - передачей параметров. ++ BAT-䠩, , ⠪ ப + ।祩 ࠬ஢. FN v.1.11 27.03.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -* Исправлено определение каталога в котором располагаются файлы FlexNavigator-а. +* ࠢ । ⠫ ஬ ᯮ 䠩 FlexNavigator-. FV v.1.03 10.02.2021 (Mikhaltchenkov Dmitry aka Hard/WCG) -+ Добавлено переключение кодировки текста WIN/DOS/KOI ++ ४祭 ஢ ⥪ WIN/DOS/KOI diff --git a/docs/todo.txt b/docs/todo.txt index 08b1587..19e122e 100644 --- a/docs/todo.txt +++ b/docs/todo.txt @@ -1,19 +1,19 @@ Flex navigator TODO: -[] добавить в настройки автопоказ или по ENTER при перемещении по дереву каталогов -[] добавить в настройки выбор менять ли активную панель при смене диска на не активной панели -[] при выводе дерева каталогов сделать скролл влево/вправо если дерево не влезает по горизонтали -[] по кнопке F6 только переименование, а должно быть переименование/перемещение файла если на панелях разные пути -[] переделать захордкоженные координаты, переделать на привязку к координатам окна -[] разобраться как работает строка ввода при поиске файла по имени -[] плагин редактирования шрифта -[] плагин для создания форм окон -[] загрузка FLX плагина по имени без запуска -[?] вызов и взаимодействие плагина с плагином +[] ன ⮯ ENTER ६饭 ॢ ⠫ +[] ன 롮 ⨢ ᬥ ᪠ ⨢ +[] 뢮 ॢ ⠫ ᤥ ஫ /ࠢ ᫨ ॢ ਧ⠫ +[] F6 ⮫쪮 २, २/६饭 䠩 ᫨ ࠧ +[] । प न, । ਢ離 न⠬ +[] ࠧ ࠡ⠥ ப ᪥ 䠩 +[] ।஢ +[] ᮧ +[?] 맮 ⢨ -[x] ввод в командную строку и нажатие ALT+F1/F2 (выбор драйва) подвисает -[x] сортировщик сортирует "..", а не должен -[x] вьювер при получении имени файла делает его конверсию и при наличии русских символов портит имя и "File not found" -[x] в Disk Info окне показывает имя диска имя файла (npl.exe) -[x] построитель дерева каталогов не работает +[x] 㧪 FLX ᪠ +[x] ப ⨥ ALT+F1/F2 (롮 ࠩ) ᠥ +[x] ஢騪 "..", +[x]  祭 䠩 稨 ᪨ ᨬ "File not found" +[x] Disk Info 뢠 ᪠ 䠩 (npl.exe) +[x] ந⥫ ॢ ⠫ ࠡ⠥ diff --git a/fn/flx/calc.flx b/fn/flx/calc.flx index 01b0a97ed747b74657d8e71eeab1b0fe0cddf0ad..a2a85c09555f37187abd475481d3d23dea9769b5 100644 GIT binary patch delta 21 bcmX@jd76{Q%_l}LT0L5Kxk delta 21 ccmX@jd76{Q%_l-Pz$et5fq~(`MxOmF07lyeL;wH) diff --git a/fn/flx/cdplayer.flx b/fn/flx/cdplayer.flx index 1357ff9ac3c056d3f9943206b0a81bbfcb00ac43..217a0e38bab91c2ab2e509d6ce21a40787d88ad2 100644 GIT binary patch literal 9657 zcmeHIYiv|S6rQ`?wo56cOKfQIk$by_l&ZM2LU99YclQ=h-VZ4R#TIh0ib5ZT7LBVC zu#lip68&i`$RiL7hzLTWyzO$isfaIvo7gBS5=bh7A==e*=FZ%gm{RR7HDQ{bIo~-m z=X~eP%-wO5=G+sJr%fU-T=1`DGz(M6RPwzrfw%TKNOVn#6c>FA(xZ!Re~nVo(p zFVuNzP3Nf8*4T{uCm3JV#3|G?qy8n;#muh{DG3k?VaAkhFbUGY-$vcZcfWz6%a7kxO zoh&}lAlB9^4a$;dh-s-_Kn=6%s~0YA2#9_^k*ehRzS+KKceQUN<0&fkg`gAM+mtyGw_3<{%ACbTe*Yw#hvnu`WV`D0BZ}8RoMv?qSuC?e`R%K$$ z==hgoDsRjGN?NZ($F_~k?*|HW@}su<;0_dSP_*%Q{n^u4)TS;ukUx-KLvfh8=z#hI z_$8&{FdQ4uK)>i!F9MU|ol4K=!=dG?2h6$s{g&nb$iWqr}w2bRSIX+zgIbkRh1t6sjZ;#z zB?;6^2RGel%y}edHqTj)uj5(-R8U-t4~Yu67^rc97X={`u!_Jp1O^otguCb>9Xt24 z&}Mv=+RTrEQaQ}>X;w@5h@liFn3vaRK(l;(x!E3E;@FP{YDJ$u9QnC9C37Zbp+Zkb zP^W@n)QM?;!_EY381VEnso?9Ke#d@Ce1z8gdXyAMJXMyNa?mlYOBd8n3uOY=)5@7( zn3d1=<64`amw)Z}X8F1wW9q|+xjhN9<>v{b*V6ipJouC;P2GafV$h+*VC>Tsx*7$u zcZVI@dj^f*|6VCI28~flI3}fNDCGv!D5euSl7uk}4i;Yr)L^Qn#@HBseHVpE;@4gM z*cogN=dVLFP}UrpM9pIQmS$gB=-9ZW5;*uc`wcW%Jvu1>Hg>&_ZQ;8;e@+j1;!cyEt{ME8 zl6=hj#qu-A`5Dk8YA-m|2pYl$%WOb?(7M6WS-KFcHmbdio%y=|e%kps_xCox?&3M~ zchBF}&XfVDgAM&yfww-4_rxK4U#!hw#SLsSl>d%-pOqSh%&tS`_DVq=Vo@d3|>9O#>VSZdK%xk{yNj#Tz0bq IeWL?^0X1$i`v3p{ literal 12732 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 a=zSx83LCJ)?}?Z2b0^OMy5TMf!u)>|n%CL@ delta 603 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 OZ&Dl$>XZEoe*0ftHj0n{ delta 4229 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 VN+iUSE=qos5WNLTmwm-g4T0&AFOj}}XzEss$2 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
P$8$%JiUN}8Zu{QS92 zYh8o%)mx^fw<<8X18(VkuE9EsAACv6)e9eiX}zV);?5D2i>2Vr5b6 z@hDav#a@VFd!pFhC{_{0-YZ}!1uU(AWfZWP1#Er+%PC;_1+1umZ7g7A1?=$xR$jnf zC}4XE*xmwGQNZ47WGRg-t&wFkvYCx+ek03iWciJ(sF7`KWMz%)@kUnO$X;kOcv563mKDznUjV2lZBkgLjGi-XtJ=$P47v}F5a`p@P`-P(Y!p8kV*?!^i{X+SE;f4Lep8dk!{X)fl z;k|fGO1vg5UXu~8nHjH{AFs)Y*W|}*isCgJ<27aRn#bccG_&tU-c)gj zKd+xZ+dO6BU_DJ+fyl35c}HKzDJxXIPRdfEE+GLor<9bS=Ryk8Ptk(q#WdGqj!UV6 zEIp}1lAmq|cwH#cI^`UBc&j|riqnjL$Q#PaPHoL4QQPo*IVjna@-6j@RSbt?s5j8MhfO4K~v% z*LQsU;Y&qUEa(Uxh~SI1Atc|ft^AAwnO^8`#var9moRzOzhuhTqb}-I>v@t($A0sN zi|?<0SzY6gwH{EpcgGtLgn3Qfm>lP+*v{A1OYdLWe(@NtnO#PE)cuxc!v3o<`n1@l zixv+G$A;iX%2V3cc2HDN*>U6Wb4$YV8NxB3V5ijrTpY=e!20@V(G$&JU~tTR<9k@C zpF9lKzb^zh)>!i;uL+V4IS!1ySXVXhJ-k}XS?$QvFR8~CUXSHH)YGSnddvx^=Bp7S zau@j1P5#svY!|uuH$+CXH~3cXU)|4NX!ft_<1gq7%xh0O1&Hh3vUMl!^NKmhkiHep zg_g&JfWt8rq6WR+*~fpdZ;e?@;FzY=fX!PKhKuuAHEIfsKQ>Xu?3_KZ{4hP80Do9fA;g*oc>Iw zHh0ZJkp^DZJQSDk(8bA3=nL4RA8)NXJmIb7yit(f{ZR;~KjTl2^{4iR1Vtg_R-b=f zAODQLbUVR&!avXCpAiE*N=%HqD*mc+3rZR1pBL+&(Hj{~aD1Lx#qqiOu}&~iT4gdZ z5_Pm~1=Zqr*5O$MrO=Dt^F^^TNLy7pT)Vs)s0K97mKZZHB&2MgL_zfa6~2~f-rE19#Bqec zVuZ;KG4r&VHC9;m!a*> z<&xN?tieUFAjJ53CHC_>`}q%=YfxFazo?(T$gHeciocJ)sIL-gezsF%x%?9MR3_B$ zrYZg+Ri=#2K7PT>?%} zc!^XslO`!_>q-jQC$vmBqxesd->7Ms;4mdwl%O*dWJZvhBuRk382%FuiN`T8+ZnC_mXu3FtdoS_kwBvEX zGJ*pnMwfG$$H#LPmovC+eCox(@b_Oh{L|d3=kjjO5~Gi*INGuY5?HZ2$)zD0R?ZEG zkL|#vV)601fKkboJztgDEqjtPUcx)$CEf%f-F8zaC|y-f{sBOP;z%ZhqTDGK+0hD3HHiDh zt9c8g?XDt7<&$TBvPX=frun_K57mH3kqc}%hkyGT#N@e^N(#e0Qu?DVBBRD~QG=n7qI9JkrUvyWG^Pp9nC7hjTmbKfpNBNclm zs5)fq@$A{vznM$4p^?_?MJ&>opW?aiRC7}!nh_inpNj8O1+t=c=@?Fv0a<}P$u69O z(&-;~t?TNV<6{FUwur-Gj5X-eDK6n~^GUk#VLpYyAMHZX23FFtBLmXtS&&1I21qVI zslbUpcx~u^s;F@vQT=B4?}Xo_`gQQng8!s5AfYbI)LPjcNUpu?4$Q5Mcs~K9REX#3 zTmrMX1U4hY_aQp-`y8W%I01Xi#`oQAkVTRohb^|O6|PIbBsvvPG3la^)=GdwjqkMhllu=tFyE873Rvc+)%DF%X#TQ;vpsf@Hl%=)+Fah`f&xAY%_|WlTkoY zcZu9M6(z+LZ0y|M!NA4)Wd=I;F5l(%rksF^bj^qnK@{bBY#cc&T+Fm>Ixxks6NXoa zS_D}GkS6J!clfz^4ZDk7U=HQn{7ZgrzMRg@XXIuTu}B*m!fsHH*u_#vWSJSfU(b9RMo!00yKY$aA9hgbFUd4;TkqP04=*^f~O$bOt)a2n6UK zhj1Q2c+%qB!e0ns%JP#CPWZ4Lgm3&15FY(umk{3b;ZHz#*N6XF2v5EWglm2j!X`Ez z=6N_)n=)@Ve{I?~#r&1&@u}wX0K4g%8J=?=Hoo(YbnJKMT&A=v^C@*OOi#@;|1s#k zf42D@N*z7Ve842kHNR&1Xo2}*nTq1ip?Fi%RP*Pi^V7_K zHvM&)xzV&f(_ClTm}x#?I+1C1n@(k#kE2YF5kkc2-_RB4n@-!lDXtJNNcW%ctqb(G znFGCSDHWA#1Ji6tfmybj1JiN+b%rh8b<(3hS@q64$-PgG{d?63M>l(K9%4L+kTC(R zD3pgnfcWR@q}wT`!q#8PI62nVN4gu&XlV|fdTAk^5mL@c^u9F1!OS|`NO3TGuak6{ z6F*`4H+qO!e(JIZ#E8_WLf(*O{(SBu3K387@H%?#szZm%(IC&FdQ52{lEp&}XB5NP ziI$b7f)L;w4hj=cjexoVg2vxDJz-M%bV>kCoT&x5d4&`M_pQ^X-IR7?T9?aHigr2$K8lS3(4GQXJEx4J8AJGD}t! zX06}}3sx*FL_-JwOnUc%5TR+;2JDwAgh1=SfXyJZ1_lP)X<|1a5E$56Z2$IDiM{uq z*4Y#PM5>k-)Ku;qo-UMX)}Ko3PNdq!Q$-`MDG(UmY8&cKLk@D|NZXx(Op3d=dnQlQ zif|pdT9KmI{$~`!>eku^;BI76-3I%tI$F1(5oy}`Cqqw#9^*n8KYGIH5TV$^0Nr8s zHgy@}IssZ-*-XeIH)>Rn=q43xsjF!y^9Wp_I6K8*Y`M-3;@}L$B@sApWCtn9DB$Yy z<;uY^l>vV!oiZ*H2|cs!U0tZGc&jKC!rD^tW=sPb3?C9Y6Qe{33Q!db_zWq8jX0Vf zdE{@)Y^S!YP})++O4ApvfcjbKL<{*Uzc*|L$P!jqdm00hOj3idFZYz|620 z*JBddSJt~6%zs!oTKO5hHF$%L^K_h;Z>{IVyz0{v!LSfHr!afH&5)d2Keoox_jK~q z`U4`mywjz)*wf+ zv#KE~aQd~phH?G#zYvm$F z_Nt16b;n~!myri)D5xMp-f-L~=O=39K{sCMZz{doJ4PdpEQB1`iw zhm&n$k8NO&*HwV%RhDI}bMLJmpVaVHVm;EEv!vZ0`-q4~gI&JP#c3&Yi@`BhmW{1R zKJp1sPB<@l?*HT>GE_bM3A_QJCJk|%Xokg5e?#|>aRQ*qw#*So3$Yf2hW=5*m{P|% z5|^DrC}dp@wnsFPfU7q56WQlAN23J~)nG8)PLlAvMDjqcx=xHY$}(%gdE*`AyPv=O zGx=^{h2gH#8Oht^3Q<>L*T}_ou10A1+lPCk)&RuJ-5h?y*B?5#z>6eR65DKI#=XLC zTR(JZG3g*KnTqM@Dz_gk%g=#*09^XF^!tr4w)^SC(R8tFgdBFUY~blGt<4s!&I>m- zYj>AP5Ij_W2BonXgTf>xD)Fu4J|BBcTgfX_cUpnFzLTFvCWW2wd`|RD{M*76{g#GCd;0>mL2r( zWHTm_KB(7dg)p+~2&aAaCsxnbpFnbBV(EMz2~h!hfQDh`woP_PpZ~@5bPGxYg6ggA z!wJpG6Sixt?m#pCTmVh7o8S2hf@QA)72qUhGGmy_FgOStKcD9GbHDq@f zOc?8h)JOr*AK#9F6V2pWk;IZ_tfWoCDspn^4c@or=Vj;8rA%@BqWsl`R6>80(A^;n zge(WX1o-eer3BW4u*2ttFX9LGIb?be_ym}btrwzj-HWk{h=C6A-`P}>BlTsMXeTG$ zmbH8(i<}w^Ud)3>@J6u69l_v(Josi&5tUpB21g21$VfDGWeJNMC#Yqo^Wah9w5&X0 zmLs*g=i`bWVy&?p@<^%mkRi@cUky_R>q{#AN^ zK@?AY*lT&->mOwr;U5)4M6Wc0v46w7EeCo*{q<(y*GvzkZx?x8thWHIX}#*L!6BRgw0Kx!3`Vl}l;)rAE6pSCi z@C7N+f-@eh3GMX1!nMD^4b{;oJ+zV`j*V6Tiq-g;|WAcfBG3oX|JUOmO8W*^p97B>u2X2DHoQM^s zcG>5F{GFu|H&ORVgRd23~?uxo03%dlp9Jp0q_G7>nSx^Rg6i zUV8hI=kHBtY?Dzb*o{icSc6;NNMrsO5AxUkg(v4xQuO(9Z7FH-+q<8)cRO#_o~QZI zM&6h!m@Ds(o?Dub9*X?6DW4-ZHj)nUu#K$X{ew;)j(+nwqCte~w3r*XhLG~PH`#bT zkc<;OVm5G+1{RzvIO2$brV@wR&pvIG4CiqkBPET%iOyv!9b~17H}LnJ;&miB>|P6l>}zG!0Gk{L$C=o)3vVr*=8_*t#cB*q&XK42sZ`B2OpHZPM6G zLvYwJX%_4w^iI}n!e!82Y64oD&C&b}Y!gno5Q@xU=RP<5?i|iZu-2YFK?iFc@84ep zs!HP_yH&uWMLVhv?P|94#;%ElPSem5l#QD^v4|HYMVvkZmF8}e=DgV;{o_l|z$VYo zCfNB7s7@T5Bprl4dKI0z-H!tw%I&S9PTdbxZHGh$RCKwBAFL?{JQ3%IY&{PJ`*;_}C%gF5Up6le<^|gFs6^#9YzfuLWN5j@I`xro$CT3Zdtj7H82yU z*zr_TQcg;(hOVnhdn#zev(236Xjjlw=g%_J$!viySp3Q_S^w2vvKa4|tv`Ma^nl42@RYYyvU%Y=cOh*XC=?goSiv+(v;zoW=#@ryj5hwCybxY z$j3@~({QD!Sa_y=WB+gXuv9{E8s~rUy!I7Xt!!+1$p1O~)7irz|F1t{@VyrD$DP7G zOZI8VzoL%8rv)dbl=mF`6NUAfpnzilXaXIK;jIohyjPSo0`@a}VGng>`e~z&_ zP@QYAKOcl5W3jU$e*(LO`>$2~DQpV&`#B9!XtE9I^XuDa@>cc*-%kW-@>aI}BQ!EZ zlee+~pvY}Bc`I893fxAMx3U+wpUWvgqeZoR@=pa#Yx6@e5a$0a;=}!{bSOI(>d|cU zfc(K8WvKpJSQ_uqy{bQr-Oc?gRR7)VUhXe~KRBn+V&22xDinmkzoN(4VLc=mhxf3i zQ;%l>TEQ_K(ZCq_gFQ|_56B-J!^9uyQO7Y1_At1v{`1Cgdb=JC3QDkpV_y0g*5+W3 zR-R^z{J|crQ~kj)d`R_AVRQJHZCCwsST6VfUiIg)BJO`z^%r3qPFP<8h*9~Eu>a)# z57hYoWP7;(OVz)Jy~+KWGfMh5VO@{%4^aJ8*ie&y6#Q4inT`%|tKO>BPCI8*<2j?02 z=fEGt0`f0}KL}Iu=fJPDFq)D74M2qa;BEyGF2xU7YMB4iAms?gmtKI(ZXMggFbE8v zIAFJd!wmYrfS*C(1V4&qK5~Toe+x_hbK1x^2O%gN`o&P-mE$4ekDuA80d0O-#pZ^^mugDU#mIv z7e8VA_y22usXiJzs#(+DW7D)p+4R%L*o^OvvDuKuW zY|6Y7?9L@8*mXAKyzLAdGy4pikb8zrbe>_8o;t%)*EF!PFP~wK<7ZgPxif4WYhdHA zX<&Vyb20N@Tx_J~53Nji<9EzvL;*`1*_hf!HWoI%9BHU-L_@0r>;HG3!OJCdLeDQ8 za1$ru{7z<-pi)!Xwf3z02h096hy%IlE*NT}yRelKwws626r&@Sx6|Z#CV56oOXj<2 z9#2};SK}4q9!Q~>06_|W-ZlR0ftGjEU^^^;G zd4Bh-s;2-+uCM?q3YCJY{Co%pR!sN^g7;|UU}-D1(_H!am7s#cm%)%9!W9(yl7a$d z!52DJ?Swn&6pXYJZbPBbj0-L;d&J-&vFW4RR5?*h`4jfq+hpnZZPKCDZE6a&w?P!_ zGmOCzZp*EeX~nNQ2G)+-OikW_CXW-+6;*>I-sGo3O%`-GkSI+p$X}66M{V(}l()#p zt_RnM7R9g|*Z^u#gpnl$gKklRAdP=74T5@VE7V8nvIWyy-bj-^y3KMhjbF0qG)|tD zGx-tupCWm$vl>3IgVEiA%JD)tu2|)-YQE6x*m;g&kd;rM!~+7sK*P+?__WP zR>RoS_V;1l;z67@4|yYvj&(nsgu1LizB|K^ZmX>Yt)dwC){hMJsK->I_@=u7=^)oNPp zUne0=%ba6ria-~(0bsE)Nm4r~aqDHtwP`p__RP4=>kPDtxW;tWY(`AWoTF*<9gMbU z#9XZsKx$4+`$}$7!KYT@PJ>mo#^aNM^}LJH+S+d$SQUpGjHvWDRoXK-JULQQBl?}D zP&0qVoTd;w-%o>8Sw4Pl_RtWTx6$$pBf5?mI^^BpG@gcOI^+<5Ws6I|9LC!O5Yr`h zb$V9abt`J|dx4!B8B+RJ$N3B6QJ#Nwe}CZsl;mH1jlXbU^5Hap(Y3*|ji7RodP)Uk zC!2qlaOdOVpN_)TSNrfr%^#FIRxlvoJ$Y#@dWHVPoc8EaFTyM^Iq~KlqT_?A*^^)_ zOidHsTck%^M>GL)png(ka^cDs&9XPJ&oT>1$}BTt#%N#`ErQ)RC2Q5Hg*nidoJtdo zzWAG+zkGRq5g8bSdQz4+Y1ZwT(=(G4v( z5BZ(<} za!_adbzArGFo2}0jCY}mIFA<1pr**rRYinyFe_CuB|||b?8gKf1XZQei2)dcg_qxZ zazJw?c<-rviuBx?wgvv#DbPdQHD!KZ*7EP880L|5dG|T4J82uNl0I7K6dc8^L4Nsl z6a!goqmyT-%e$r^$QUG@XOg!}apxQ@z5`|BYEAO9Q`#vtg7FitBdaRP5r5eI>5hh4 zl%xB9l3^8UjO9J0F|UR0c+q)xZNDjm7&^s3DCa)VM6Mh|dC`JK2zbM!k{#J<#FYKYf&Jq500giV12bDu6J&^(-?>SwI94p=+J zcGEhtYf5%>{~%t+U$#iS)qKh6K1@mQ_4>c?&?Fss*Nzb{`s(lj@Sp)7oT!6(E4mLG zrXM$wPH;#E;$*Q7H!8UKV)Pw0-|2G|e5&bUloDVVgNzOTD`%eeXQ6t>na3w>zu*KA zhw_h-T#m2!IR>i0QeO3nW!T!O7#kJSI}L8TF{6gq3_;Roxnr8uOg=?#0XuU9z~b52 zb&Ar0+0v=B@O||i(~wl1VVx3|+ow!Z_~5DS`C!KR;All(lC!)FY;xDUa8WMqPc6z4 zCr-L^()39a!(iDZ%_KPFvfUkkTG6R)R8gXJDoGe z$ER_|c%lRcF~%b@Ib*zNn#vgOovtv(pkPA)ZW@u=8{f04b-VoOasJeJeB^BJbQ$q7 zHdczzBeb_tHbsg61kw*xRx<5VMtdW^PwL^nFV4SGDFkJNc3O8#1Ff$beivvBM}&m7 zuKzfn(5N(q_z8f+Yf!FvKu}_E=Rge`dmoUc#3<~WDvoLXP_=hDxPA=(<=s__rg7YV zR0)7GDi=V^f&d~hTmbPOM1{jp0yp8fAVLWOQ8mJVuquGKMwK?Gjkg@kl%=PqD06h^&mBmXiVi(vP8w+#je z1qO8JIMSgh?YMO8QbI$j6!SkE(wC>VAJVEfGxxLA9a;P}9LYHB2Pt?2i*vn+55BzH zmpo-!#nGd*ABL$les8CVf^46ezL){P(5wz)Cw~TOC1!TLek__1zJ7r6lOb(ob?E0q zWt^Wfw((O(7tPR{{|tueYwy(-8>^F;`WaSTov-7)CW}IG ziX|H>te6O~{#E__1(4MI>zKSWT539&h3Q}nvEw?^F*&y)(-$~Y+H{&x+rtp9<5yAfrWC_Rv-vz6+POoLek~rS7opLF47!(k-*K-IRi*$)zy)(QLY9HVj?UxLn{`V~dn=QNCG`MB~Em zY0zzN2FVldF4NuLPW#O$z`k^RVPQe;BHTb;6&6pqhO*K-v+}|MgL_qqOyW0!7hWY6 zSC~_C3sx11_by+J>*NK&WGr$h+RFvvx3Nra4TNElz&)8sg34iHQ1)*FRG9D>0beyqU?ir7yMwYlbsaM*g7j-xPvnV?ECi@IOn${~gzT;` zewxI%a-)j9FlT;Cd+F(~{|*LyLnVyJmAqc71s_ zl6kV`c$2!344XdMVZIJ2TIPH|2jb*dq)%pZ>yY#a2}iT$Bt>{$o5RJcC;(#Q);SO( z`@L(FMGGc|D&u24MRU#|6&cU|y9-}RAbV`?G<*gct*fZ4t0s7~TamjGt{pk)dYj#c0STjfEF;{bx{1Kh9aU-a zJ*LEalzB-u_pvpj-F&lY@;&_XdN9Ag0iW5!2;s(^VuDQM5*XxCMo{|4J#;4sCpwYy zO!wR)^Z+T4ocEY^-lL7C*{+sK2RPLer%0TK;a_kc0CQ{jc)J_#I*<~Wx-mKL@%(;4 zh@g0XD*4WK$qAJ|!%=7@D^TdjA%4>~kx;p_IS7@Yq^64yNR!0?Om2Qp47dz(GU4`& z%&-_vGgN9avFjL+l3S-_WCm%3LS-mRDhb017cLi9WUa_AC~2R7l2IZULP*7@Q?8yS zatvFbOs`qc;(`Gp`^e#mqlViP?IUTeIr`I-hkpxTDy(Z{VP(UQE;_DMyo3o{w!n=f z)72PUIBcA!WuAo#bZd7t?A$e`!KSbCRX5c6beD9O`Z6HIyf~}VXSMw2Jga3J{(gnO zhvs?bD^x(i9d2hzwW`5{dx)24 z|E)+S+=+809A2+jnV&}prIH1F7fVQGiDVEb59eLDbT5>WSD_W-Su*hmble4lRQXCQ zf^Hg~n8bv!gf%>tu9T{I5rkOS9I>$(tkj;Em^f6Ngzs{RBL&#!acBkQu4D=Ge0A%q^ z@-R`2BrewWVZi)DXEDgUG_vp-PD{LPJMkSt>hAke;KMd=1k3aU>f6bSj_zr2H)pl*Z zoDCPs?%3MbT|uHlHU})raF4HLU$Sqh{nC;ON5F>b{$FR8 z+h53qVNiSI(h5hbO&Du`C7bYn0r4r|vNe%R!xVL!6P!;WGeImu$6{ctXe7gx_E`2S zHiAV%SkQ-En7S~JYz!K3z;=P?3dBnWb{)H*Tw@P@+=l{(u?wmtu0;#)T}Bqb@)lG0 z$WS;wnw!-YKDLW+(WZPfXfP9g%gi|L!wlUAgCoDi#MJGFN{@bm(2wF^Z!3+*T_23Q zf#PnUI4r9Zc-*L9+-Qm$%_0hsc^vX;BiS8*0YqbWfg^K3@=&{d)Jvnj=Pt$Tsk>|SE~LRz2Wqual+wd`wQde0_@xHNEk?Voc4<7?ScvI8}%c1JD}?8$}sr+v9F|8yufFq>SN zaFIp>mTuw&v52cSClEj%$dK@fps>@|#uH0mWrDs?NoRk2AC{D-ljJ4fL6q%4+uVqW zt+0)N-3y2fEPH&);_Ve+PeR=e#^Q*stKj6wrO3iI(M{84Nb-UwihgK6VTvhy2I}$*?Gfr^KumfCNTWxTWS{hGA3D;DMl{pxFHP1TnOrb$%^C`azQuIIy&ZH z=4iMw*45wbPN9Eq)m-u{T6R&vyQKk1;J1 zi%f+~*v%Xlz|X-bFz9a}*TE1UxilENEfgz_+H5+o%xqKNH%KElo4!~EZ7${APr7-t zssD1bPJMR=BR00k9O)cWQzT_9_ti;FOVK!G$t{E3kYx|h@fT7nqwP}46`)qsTPadl z!pwT5G|VN~fL$ugTw0CA;IpMp>^;k4*42MzKeJSp{Ht3HqoW-LyR|!b~-QvF*ZzXtJZ4(AW(_mKE^l5eYepsB*4~v+oIvCnt%INDf?O=svgoDi#gq7#OGS3&wJpGqfWh}?i zm^^B;YCy;G!%{%T5xFf5JTN{8r?C8o1VEKD?L>RWma8 zi5h}m(bC}&8Q}~wJR%MkMoAI3BSiSSbt%K-MfO-WYuSlq4D$dX@+n!u{Uu?uDDF4I zOo%!bMHW>hE_buBH|G{rEK&jiu|3syWK@NZOIOICH+HoxH)6O z|3vEt8&|V5Z0^EYkRra&=Jwz_%={DJUui*3IPL|a!e-5l{j(MD%LJ|r(!v$O{o%r` z;Rf{{a%GklPV8496SaH2Xi1A2$<0MeKm~q+d}qO2!N<&J!wMb{fmPW3C0?G>n`X@UZ)Qq{Xn1#z%U|;rkA$hlM-v1QbFapjn+d1P(f460n zIt-vjP8rGR5d7_q(s6*9(vKn|VW|}Aw<8T#7=IsmZ<5}EPPm&(?jr5)L+eAJO^g7z zS>drQszxksTZjYlzYmyVG9-L)ctmtK%W?a5&{<0giN4>D;qd>83m1!TuDlb)rWk)AAopFlqR3c^`}Vj3m| zRv}FC&u1cNem6e9A^awvpM=RLk;)|rS{L3>#7$`AeaB?#alUJI};RM3Y#dzmO zYFP0BzPJko0gGQGoMd=Y$cH(I<0(Wge}c&=9wH4>hzWSlDnN;S)9}@*jtA2b1Gz3f z0v2B+EH-__6_Oe3%<+@^+g`C*dTc z{DMEx$6{Io`TDYIkxsB^2xrh|tyX)Mgg$tzQre$)$?jmyUQKWMO2w0(7bn|6(XB+CK)%q8BUFWLBB}yr(s4GPk zA=gmF?rUwTkX=I+KVRdj5WbaNwH-J?XL0;qFUcOTMN&5{NkV1Y_Ob^>z*Jpuk|dvC ztITJ4f;eYJ|nrQ#yvr7U2b!NV7Vxrw73FnID@$J_VAKsjrL&i%n&sh=QTQQ@L zVp8AVc~Sz^w3Vm*`aHgfl3o|4=8)HUCDfajU!Us~UI_)bD@U>1N)ctyV7o3Gl2}4t zv+V*&kk@Qv3oXW>t&I{LE9dM~tL4-&c|A zstPK#CR&iLA``e95=Kj!RSy^e^4iIHO}XxgNaJ-02vQd3c%&VW4_(7lpY8V5obLCmC>=x1V!vmg?Q30C~6 z!XGSU&iEr`EI}C6FV*wuD24?k+y)#cd4}U?i-Z5%Su5Jn`e8bb7tpL9!d@6oZtdy* zbX0O#?sHin`kQ4?J!+8}Gt6J3LlZ)WZ!!Wqa;*Y7ghf?T#@vEhRHZ-Q#%OF}v+_`_ zBHlsWSN78-&%v(vsTk{M-l6dAzP8WQHik&YLjTiG`W@T1zY-Sbdn(H3znoku5C?C3zD?FTQH-qs>lo0>nCvxrPGIhZ| zxpw}!0!s)zWPJ)S(g_%rhh$hxm`2zuux2dGO&C2BkNX%H0Ha24yYfbFIfJ@p#Bdmm zpF!h2*pTqaQM2&oPi#oY;_coBg~i}?AnbzC?1y+Www#7iixJxcJ0E9m_(cWAf;+?~NP%w|ddsSc8$?cY}wI9?h5$vuCuqCbU^^v7;jJF8bx&c$vvv zq96!983aBV!d-50ubq>~EaEUJ2qkB$))H-F{>cbn(S%9hxhVW;6OFEj`BAf$E+x~8 zWg#vmqUctV=ntVNN#w{x82u7iwAm_V7h*9zt`vc$x?;NJNz zZrC(TE5HtC`a}UUNAVF6Ca)l0%gI+1`C5iA>q~%v=bt1@l4}v9kM!GQv%OJL(UPkb zknL!0zVLd!%4cdprr+Fbg)pR$-#o~&^1a<5+=bZUY9R@9B>}l^t`t05VTl-r2PCFA zQ!03-=OXGALU{qnt9G~wt+Zw%@U@DuCW=7Qx?!xz%G1zG%NK?ez>p_c!(6b2xfU@x zcM;s;6~4=w5bZ9DW~T8%3V29`-FOp@r`aUJIS9GDUKe3^HrLT^V=kN*L0a0k06r6e zK96297bjW%P~qefs0-XEaakx6&X)Pf9Mmk!zS{nF=AYRA4=^B{ov#9!yI|rck%?>W zd`b4hWr??AOs>T!-97f<0LFoGKx^Lv~?Mew-61N$lQPLD+y-&fG_at8~l>U%^O&Ym6@#BX)oz;A+r`N zOBO1X#Y^F3vNPL>{LopkUiJ=e>a0ZWI!m^*C+ik>R@7D9k$vo7DVr^eM##*~_OiVb z&D@!_vgb<)?7`h+Ur0$4*uj3|zokx|qTOttqaqlBFdwgY-*1r`Cgn!8EvL3J!>i0E(NGjYqAfb=N zWIyIBZwKAKy}M!l3(I77F(!sAB^4cdFnpCxy~vpb6V+E|>Mh9d=nF1HA`-~~CQ%|K zrJ*e!VU=cLv?aX6NJhbFpm=h-j{X zD_Zy7CJ8uy-Fsh1!212=22Pt=%pcJBD)^dZ1El7+0UrcbHw~o7*Gg;iC~DImL^RjN zo&LD~@avDaiS4g^B|s#aySyy`L^K0TWU#!EU96GC-;RnJ0u{G+RK;km*`T^Pke>kb18 zSFq;2u__lnipM1B8j~psX%mZQ5uMFk3s;G{kky+MbudG=!L5sm`aqk$7bcgTU&l|! z`E^vRQ$)m+brf~Pn>Sn*51(EI5Hc6e?Zf(n3;dL14hb4OPFVc(5e1HGf{9Sx5$^BpT_w^^A*IsjR={RVR z|3rU364XEW)nDs>x_iT%UwnTWG~rRxz|jl+tGhjY_`H#%KTh~`&Dzh_txw#rant8t zY~Hdp>C3Oa{^r|l+js2TwR_KZd-sX=Cm%SNa_DgCk)y|sr=@2oD=Mq*snpe)nxAX$ z*FC7ec>3l~+2uL^xgfc8_x3Htof9WdJ<|R5?AOL$^pBggPoKzsxc;y#KP&UcYo*fj z|2>zRclk`i_h(D478Vs3$ZuSE{y@B6eK6(T0hOVGdQ!uo=aOP^8bs=9dm{ElCd>>@c!uaLpwyZVyz6JQrCt2=- z;T+=^3f7hj{nwWJd@GSHDE0Y=D@WK(;RZr9gCTwkk(th# z6}Z_dF}8lTif={is4na>w`Fc_9t1_r`0Oun9wYi$~hh&J`CI&tQtmlU-@P1D^X=42<<)O2Ae zfi@g0Zt_*|$=z+CAfgQv(pnYTdZ|@IB^7*Ajlmf>Ci+O~HsY9*uW}p{b@K=SL;?^m zzG>H0*f0R3>B`fF1`9gHscl5~YKR~Niu^5Ak_|sBA0!-a@`*c4Z&ShLzFYUC1dTx25$lYJc`;_>7tgWw7`%5SkaRPjkw2 ztoJqeKFz$Cc^yvu0GnO#W^G5E@cMv?_g~Kx?HP)6LkUmT zVIy%nWe&Gf-5fqOWGYyCo#e_{be)gUbwm^aj3|_a(u=^^g6<^%)0fjGSW~#9iS{5%d@jC_p(aq(pNl}*IOi*7YYbv|B z==yuZ2(I~2Cfm4S-sWr%ELdHEZI1K_k-7^8ju}xG+)PFJXtC;LNUt#Ji!3NHA14#~ zVX&A^pJ-*8DTU+kCfzJ=lQLH4F4v9nmzTNgth_svb<|nOsV$&3UuPm5q~vg)3Xz+; zz=J#7b1$&yOJaJz!O4Yj*NOkQ7gu)8FRobb@cjjObjZE9QV2(r`*VfxOgT?izw>%( zNFu%7(c{XL!6e4~CuOkbG1}hBOv=5TWz)*Z# z2dIWO18L#RvH-bv_jb6lgBl>fRShsW0N}#3{;$YV+`@zX7{Z0SfD2ol_GA7YAAXEU z^U$pv?ift`27@QR$Y$k#g&&)bk9P%P`~-5_Cw`srOYUcd?|elBbq-g4oz6`1%8QN$ z_sR=TKXAHl`_c=W@AB&k^4hB;hGf8lud_seY7lo4)5lB#o`7)~F|L1j-AgOVe@ve1 z_*s+j>*nV~{&e;WAb-rs8}B?@&5+Wl|~l- z--4ZDgT;Rk7$Zi0TwWQqaBZpVnsEz@OMkv*+(K`Jj9VCwaN8EPZIQ8$0xwwb{^J&r zA=?CJ&7_U5Q1PLdR3l*VMZ!vh9Fz}pN75k1kWRwi8Ra)f)4UnkQ>k25pwKKGziyto=# z#aFLE#8!VDBDTrIbL_(#ka~5KLxlGJ4am0&Zb1IkvmElTq2;{%D^%2l$k-;543m%{ zpBK7yDOhk_*S+A!Yq~z9qP_(uOCcLWMFR>xC3RdZLw2(psKZZ=I$}v3SIbdH9p;yC zOD)%ff*@!xx9viIg>e`5HuuB7U}mLJXC@XT-a#Fw?f~+mJAiC)7qvOxMQuaxq96C~ zq90wAt>k!93Zh8*-n%FhtVEgRO4{mtjOYK>N9d1p^$l{az9C^f2dE_48BF0jFsi9? zl`SaZMs_*&V_?ak=%|{}LhVGy# zeE^DSKC;U8Of#=*2%fr|euvrK_ zO1#?o^H2Ieu4~)W0-GG{w`_9I*bm6>v23|ljtxO4rHVF!FI$36gV>9EGDbz4aJOwN z_97{q*ee`+6^O2qaEqGo{=#tbj8RE`506-apCS|dB=1Ij+DOK%BEgVNB28YwrXdS% z*&||&FV7Zt+QC0VzifpzjShKp|3dwa@O;L%x zdyP|Fa24*&Z1aR3wJuh9!hl*A>pX?fBu_RVQP{w^xFFDt2K0KDu6g|!msj#2n$90k zD~T)g#k+2!|8edSxVltHTx|2en2b}%Z>(6t5%)X?e3E>7kKut zbR)KkI3=m_$g=x;po{?Zif#sjp9UZTzIWsgcrjsTe^=1QaT6m!A0D9o9}D_I+cNGK zl&N1X=<|L-&{wzr=X+9M_8HYrIV@3e3Mv&hzbjA(5A(`HtJK-LZ0Md`Cb}mDYYSXp z=sLcS;`_eM`Y3A)1Vc@4aB3}U3p^e`>4NB*D1?h;AWxL<*ijK}h3BN5c*9CV5;?U0 zz8*>|X8pgShhoHR8Om&p^iZV6dMMu%c+_L>W5b0Cp~+f_TEi!anps3wZeRMbIde&J3bL0~o% zc^Cn|dEg#he@s?8f;dJnk;tcEyEhbi@C(D|(#3ZkUNGW~fjh%*2?FSrfOBsS^S~Pn z@w-U8!S1gLD_*nyjuPAL1Y+m+W1=_Vgi~*~whJ`1xzmYmB|5;Mufhv$UCmU;r%#0O zRN=tRuGYkSYNnrU!JWc)iFHv?2ivE$4n18}wWuk`970O^xCVABOK#pN6iOwvery-! zyt`SQ*x|SBUHPJ9ctBImis;^o=st?*zKUp;Y{+XR?NVcA{$m-TV7dpJh<3LS=crX` z|1%EeZjTU_=t%_<)XHK7REB!x zo%t*5yO2_LX#iU5rqy80o&b@gLHL3T7c4_0ekI{=#(EKjD@9fWF|cgJ#rgt^_8{GZ60xMo=YX|5YJkqYxWnb-a z6)d^du(*!lXayR(0S_#e$1=gvGEJ&!2Sx` zX|^8X5?oE<9}-A(d2H#0PfC;HO4pP>%O^FdBq~c4H=e^#6~DhmMJ0b+69M>2H?Aft z53{T7)d7A39wBqNI%G(`(5%$Xs#IWG>L(y}mP}0B`R-~mph9A2R_Y2RO=Q-_Gurhg zzOp3j|Fi9EOY7bvlsAlMa56~jmH4 z7BQ2&0k(N{)2av+iQx9cmK+gKJ&p)6_e2N#0bP+=K~p={1=C2MSMs#m80~ozPy=b1 z$18dCXfY@;Ux4-h#Sd<9JL@b8zPyH0cSEVpGW)S?S*dJtnM5`eXy9(ca;%H|1c#-v zX{GWQ2*k`p{XdDDHr>}Ri*?qyWalhHN6mB%(tc~S;ezw$Y4nX_#n5Cn8BdUocimSwwSO2E6d?_JCt)Sl;S3n}$ zt5(H9+WE3y38TOeVLD+gteZyJqtx+5{@jYab~YD4J;2JGVY{`BXHCpazz|~K<@{8M z%&Y{MAIM=Iya?SIHwukK`@Wp18q_&nX9?jMD;lD66TPk*EE?EBG?{k(?Q)NVCQ+CY<7?KTs4D=c$m7P$R&Xuzn(VD4PJBO@za^Ol4R z6`>_5+zWw%p~?fBZP`&69@}5hT{6#rTMol$25LlonIgNFRjC{6O)AZ$l|E>xl&b{| zBDHw3+BePGG{XqD9R7qrRd1lm5%}v4{Pk!Tf7ZaA0V#%lfL!4Cz*6K22z>#;2@rZh z>7&-6`wK8gG(f~=;_6xZ7P%D#b&K54;hBS(kS>Id{9;JRdMOkXPq`OLE)} zYu_X}U0ZTiOIDr1MLmH-cd}$Q(R*YbAVy18Koq08UTG#CzLILH4O>$rx!DaOE^J1z zQ6;<5Y6&+bQ5|0w0dk3GKN$f5%K$}nVK`dL6m@SyS+QB}CJy(t9|?eCt)~e?==xHSPlcZT+JEKk&>Hr<@UCX{DKEzf+e4s zU|aO+DAgtO4`4b>pJ?0I!3?oUxFkm>fA<=$hnzOB(YcJ6NLnFLJw!dP_LPF@7?Qh7d^)z)r6hC}~d4V3bmHRm) zY0sNVNkd;uR9y$uk_zK1w@=EPx#P&>=|Cc^D~$s7c;o=sq{QJWG)9|hJOs_5hJf}#(X0Uk2e zKoD-;a@_eH1s_W*>&`Z|UG01HbnNBayD#hdO260o4{#gg{>G3uJ-y!c89LMtN?!p1 z@4h>1*zn;aMvNR87&vNFP|)bn|N7T^@4f%Nu&2VVw*tn+|8URPQ$hEPy%oT6p}%3v z=&JbREhDNh+A{W57;hO}6))d1+O^#>=C|w^rTm7m9eEqJgEn_`mIW*BjKlN-C!;bm z?DmTZp|I0piAn};fQU*)v5`i`IAZMEyn(ecw<#2G{}~QqehidM1QsvuH!N^4infRs zpNz(+I=uRa`IjLZ%5=o^bj5K%_C%re>?n|(x?|K*9!NIuoSBUYf+R3pFd%wd9VH9C zCF^-Bzik0k-Gqt@iFd$F1_JOWY8$qPF#HZwR15{jnVWMbT~vskuJ;qjHr;tCc$R+1 z^h8$R4HxHf38@#q$Dw6I)qQn+S({O42C9s~riRIJzDxd~4D!h)-6l;WOOtjiQ}{MC z80#iT`NF=Rs{67%NLezONq=$7j3FR~-faZ|73oamT2JmaoP$c@`V=FsPpg^?>txhj zz=WqZjQm@sT#lTpcS#jE&Y~>dLD_I zmArnNDYrl%KTcBaG^CO^yaw=)1X>#ET&}DOrZu&S0S|A#8qG~gL-EXi&Pc)1aWdcm zlclIaBIDEf=|d|aG$w6btD|@4I;vY`=qN!nmXf*&sQ{-5j^Fi_h$f+xd)W2Zo`7eHf0uQy>#@NLSN;#;pb!-IIe zz5~+%-{w%M*Xuhn9cc<=ocL>rw}^VZ72Htk^_`ebG{qX~T6%qFrZc{~FkSF%1KV~4 z+MnsNM$o3qC2{TcF^)+1|DcNyfYC`!Ne;pg=x!5*Lv&tfd2hSN`AT1ptV&OJS04>s z>9FN{c1t$6>SNi=Do)j~s_F$*!`)T9s$o@Cv#Q~>N}_6LdC#C~Xhu{G&sRd#(DI(a z2K;tZ1tD5irO)|Fs%m(?(oo_BRYNXQ!KTWgfRd9~$rsa^A&LM-6v|TdybheIA-ZBv zHQZIzO4Tr~3KGE3DynK2T9u93n{!&;L#Rd7Fs_QI8vZEURb{Mdh@wz6JYOlWyeG4{ zcQdilplZln;kgr5PZcfb2G5vQ$!~5uMdltMc{Ezp2Hl*JA=eASRtE4ol417@V4oVcB){KJKVuv;%(KG6zBHRniu$HJ1 zw!5inyJ?bXRo>lYlhjZzWUFKw)tqwSBy}6*!Wzi43_C>GaFw@p%kI#j9>sWtLQ;-O zd3d#Ma42rSM->VGr#rs>Z5!XBREXJPwC}s|XZC&OW1&c>RT&fswJM@Ws8zM2NJt0Z zf1*e@SPiyjq)2!|{fB~)){2A}B%(-&KSYrbfBsOBFmU8>a)Sp|ooru^LUlXxCTdR- zWa5*XNFRVA3$fy8LAFgdL#u`II)a=oc8K#H>oKJo1fa4Ltnp+79U+;kfJtGLuqUan z4ZtosaO7cF@pTrOtci!PubXSU$Cw-VinxX^zfyd$Ik*y2LAFWFTJp8=novG$jz_*) zW?$o>uJ##o!y}je9-#4wxaN^Ze=pSd_?3D{>F;eCGRLG)z-VB?Ih835Rhgom*m!aA za)YJ`#BcTnv!vail*3s!g-KWV=@!AJDinIc=PfjtB#oFyb(A2uGtyEb<_=s9Fox@U}(;%N|iR&^>gj(FGNF*T8aVNKHP> z>PmgFItv|ZeDc-UqSE1tw!6*1SSzesS|{cNC6dHkl1RsoCVtc^F^?qD0i}uSS|v(J zA{}9x_-%6{Dg^ZaGDylNPYs&#k*Yydpdn+uDiE|0IfIxvQodgUQikBz>V~(yho;8c zQkbI#@j~qB$AB6kf~9oNv8`^fe0LO@FW{rhqZ)=;AV_TvZ$((nd?lE}zy=~dPBgq; zu$+mbVQ(7lFIdZLrr{78_7Hr{K)V#5D1>42iF^rId=dBt`!9#P11?}8Tkw)3e+Isd(3^BzaIL$q0o&pgeRAgRFeBX z$;gm&lEV-t>7>Vht%t@M#4{`ZXFYbl+q%a?5e{PH*e`QEY)~?cMzElHM5-!UW8^+x z-hh#=$j@2OGH5LS)J9{OgpDjPHpnP!jF8ot_h1-0S`7G!*?A2GYoGj=ucRW3l1GiFGl4aOUIH|5R4h_ zLFJhZK1;`5$Bh!M$`Qwu3v{OCvhcC)&+<{kW8C(x_T@0B=T$Ck`8Ci~G1v@o(sG*M z+6hX4-u-oCxFTogV@}3G*puzvHH z{B%VX*6`a-cfSlqr&Gi;LxjZ_~Xl8j(d1<+c=r|1)1M}%sXhRUO2 zu)qP>U|s-8wUS=~R%O?PaU5GwIE(EPsECWkvyn@1Q&x8Z%I%efv$A6p|CPdFSRng0 z=k;y+#Qu&%^T2N74gPGU{%CVi+7x?2n!D2v_tko9ng z^gD+^LW6hPcSbB^SpaO$XC(Tnp7texSco#dS1sQt)E zyTVx!Zl{>nRXd}%c2b|ZsoE`lwb6aGANAI*=!0k0hVpP3PReV;owP6xJi|sY$u^^I z0tY}F-dj7b5ASJsLMs3=>5s&x=yq5><9mwVgGMgTi(!de3F&~*d*cbXqO;-L znZZrK^2Ll9Yj_6aOP&GY@)*9h`3FN^7(EOU!1Ew+(ipXvmVqoc;axXjqj@+>!=OvRSthu+QE#rA9I~}Yi8fn#+?_vu5vZE z=%w=)nVx6uiGx&Eb5lM@{iRm0owfZ0+PLV<%O6j?IBlYx1LLT0EKxvNmCe$wvd~tP z^P{l5w>GK|8M|eU+Q?qzAUX?ZxjKBG4>IR5BbOWV2Hz{;0J$0{3bv{zvJ5rsmR5w(r^ONePNp&Aeblw6(BQQ0L>sI@T4&qTIC{`4yHFFQw>vxps!5c2Y0M{iUFDLc6W- z1Oa(p4ma&INgMB|{l1qJ&b$PUjHP);PsY{uS-b7Tcq2>Uddv8MnQRlPeJRX#ixZN; zfSRNIFQFLPZ5wleBA!WAL^B)>C>&`wtH=Q&3=69s2F^cLl?=}8dQ3SSb_a*O=t zBq$abkU6aO4kPJ=L`>9+iG(A5e-f-NBu>KP`reaam0{6j*k4eD!2ZIc5Mmd1HN5Rzgbrc% zDK1eVSRGu}hu}9BJ^^F9z3!xayf6D0ubDp!Q3yW{$$2}G>?-=1^k(_A6I+4>jyvbI(tl&z!C#o)CI2&QBwo)j{RxIeDpWvqn zFt<>|m2Mmz6`+99JcfoK@0p|`A3*K8Pa%X@7i?%-&W4ZyD?;EZO*muez=0|*9gjom zrhOJN(66V(cBi_tmAxlf3}qj|jdE0oeO>VS5K^ca)|e5F1Gm>5sSKD@ca~)J&|jY3Xpg}fI^BR zbE~K*0uf%GL+o4z0Ahvt)ix;O;Ta*xTrWE}dbn(wH#_6T2^WAUPru3I7lh9YDSWEWSuM zfJ&lT!km1-mP#PF{0SxvM)`@PiT%r;)|Q|D4g}WVEr_L_jei%!@QBFRsD<+vtRQBi z*|si>-Pqt2g9nWdgA26fvpQbze(8m`Ia>a``E1s zo7a85hsJ&RRnnGC3B>X_4Sun1^In!6L|iTmGLGQ3Vy&XaMXp#F5#B0_xVLTPSk>}3j@zCWcRBc(beEj7iBJ(^ybu0$kakEI-_POW6th&5HLQoKLC zvWl%>4~o;$YLBM^=Dl>~agYN$CU_9ANoax$N$XLd?P*hahB5^tB~Ct8pHj(Ir0-8Z zg4U!a*H))hJz(#NkD$@`f%s$T)kmw?%G3-o%Z`O_FL()un{qhOnhV$7qBJo(9nK-|wYXr&JtGKhCD6Ri-HKr5ve9 z8O$c7h>xWbGEb{Tqr^umX(sfxB89zIm3CB}n#wmZ{RqQ1F_k@dte!(qEzm-7fl*-B zRiJ5WYFSl!WojibTV0vHzqaj2q=~Cj)5OQvisbYM1|(;sR~$=WlaC&IK*pq=K_fHn zKR_eJq%Q>XKvD`D{6X-)8x(TFNm1d2z6+4jiijZGc)ZdTa%1BUt1Hj;%~N zT2+&BggKb1OgRcl0=_CpOVTUoFsC0?R#hHN9n5Y`QKq29YnB(a+$Z|}aoT^D>C(fD;IO*t9J?Sl1{y55rL7vCc52dB^ zSyPU%!&gKt85n||lY!Y(rL0I-rq!l2gBrvhOin#SyOfbmyCObLvyPuNKP)5?^99sa zQK=NCrK+n8T}=}o79VWRHG=qHYd2qV2Kvfnq&i81FoGC%Oim7YVjds`H4-)=NQR^7 zX({S<(%)UOVqoAK$WnoRr=s6!=@p+; z^5kTUVk(<@yq+&i`eta6*f=+-uHD?N+E7o6P#XA<^bO+y#zyAIQP2U!*->#N2IK(E zNbyUF?LHSaMo0=uksfg=ZMxek?JZPw6qAwQflmxfaGdM7VL};W ziOjd7X!+69BXmlpAEhK<3=S?;Kv*2dB`mSMEQE}}c<9W)7=qJ~;ZJR8Qy?Ly);TaZ z8nDu|RBpJrQ6rSqI@>`EAIGt{9E84F=TM3dA5T#lp*zqEdG@CqZpmld5<-M8M_wSM zI=-J61l5c9c!M%24iksP8C4ZW#VN;Y+sjBWcQ5tWeJ~p`&*_5FiYJnBeRuHSsieKN zm;hu^OUJ6iF$aF%VYIKK2>p_qC}cxWajfc4Y9*#edIiWL4Qz+h!#9d=Ia#H|*bt?F z$sfo1^x3g`hA^?@)Wc%3=yMYz(=)^spfPas6f7llQ334ZwOE_Tt|U!-h_V>E zTvah?*l1OPTi4fAJ*cQ>vC?rHigYah_rX~C#fgsJNOYB~yr~sr2?b6_XN-o&Ft@>^ z2&bftpn0%eq6=_J3-fFtuW1D8izSTr2`?-lv^mrNxM1t0gxd=8duz@g&meB?rM}G; zhR=%_Ja{mmwmSp4?TrZR-wh*$?GgTfzCoymvHMJ|ccWcmTYtor%GCW;m2QN)Cxb$; zOQ^t>iK7vY>vC3w{{+Ju8MAN&8fVN^Tla{+sO9@aFJI?JMSK*=b?W!|U`Y51s;aF~P?D7?1OKA~aExa94sld!g zIiAv{ndCTTXyh=s)}4pey_|0cene54k$zB#^#UaGBHy0K^{`z=NY2*8lGk!n@)Axs zGA3-!M{v5+zn{}u4?BWj5hJl39O2fqB zadVVAakV~Hwjl+2>NbFwgc}+3upK%|PEl5XySEFf{nI)Y1|aaD;c&(#r=@7pQdMBr z+<}^|E%dZpi#3JreQ_M&4>MH{Drr-#=W1(=m7&2ZC+M@53?D zc~ndaR35+kyO^u}8+!JqAk&kL zYULXT0WS3kIBjm!!jHqI`+PW!c&4BJA(;roc{q{fvXQgkhAnJG6bF%Tb9mz*#YiIM z(%jC6KS9tol3a$*?*a$+CIeI7JXqL$kW(!`N?eZ(kjP&{Yfv*Q94vgvI%-^^&2J%^ zZdiOlsLJ#sqJ8uUxR?cXeSDQE51pFMF_e`k0bK`P1}Wj_YmK z>1|Kx?G*a1;rdhdJ@nm%>ANfRJ?0M5_bk&p)ao6D`d%yb%!M0z8+}87uHZM})5hl= zs`Yl&Ki|8nAJx#SdhZp@_YJO^>g*bqU%abNY(7(@u{c&-T-Z%h`}2a#?n#l$ZuWZ6 zVePWUtcY{ZHdJZY4eRb?T`YPw>akO?T}Y8heeCD=G|v~*Mh1`C8&W$rVeNvgVRqB> zb}?%8SmiRiTDzEF=ZXW4xz7$4@3wUkIg5uyJV|}Gf3HKmO0>WB`r-2p&*n7EnYsGR zQ}Zdev;M8QadGkUWoi32oqgvltJc4}q1WfVv}-p6YV?a<*Ly{Jel{d%+-pOMq_&yA zY_cjT^w#`jD$3nlH>UWq^gwZF_?YZro*q$B&6*-#{Z}{Y=EyooXK8OYZB~C8dK>yHA{L5a(|wcl(D;}*PXrHW-dA#xbI)?4YxGDO-0YL zmLH#UFIYaO*jHZYW$NLbaNm1h!zVUg|81PLIY^pTS#|yCFHXVoV9nFHg}xe9W6AKW zfvSGr*a?f(->>hUnB*8cDr;x;2-iE|2V;vJwbdJTYUV}icl6HHR?EL^to!CcA=1z51-J>~U3Zo#=Vi6;Th@?nw4tU;lb}L*pw$WTT#Mlb){W))*8y+WM|_w_*`U>`%6;e(V3@rWQOWvo3?3Y-&(L}e7JXb@tkK1 z=GQ2<)-7<yg`2Q(sGS{aiB&m zweO^Sa9MNyz-td3%8Q@R*?r>mC%dQlJjjSXdz&cq2&f*p#Tz?%S8^ zUK+T_J8Wn1j`6WOH#(hoxcf7oCcy@$9Zou@Uynbq8LyN7dgX%#=DW!GDyO{~x1ZnF z=*arE6d~i)b1CzX1&okL_Dl`NYj|&&f*`wDj1UWg{D#Drn&rVUDvNS z_}y;|)iml?57ED$bwK0vM$_=(g}xF^qkH#f(&d`rO`e-=H_N>zN?o&>>|KkS+=`1l zHeA+BX=)TZ_9z~_ta#rO@7UCz3C@F0B^Z#(dj7xC9?NBK3_AcsBl#8 z(>r{|?1&07?OHfWRD8K`f#n9}g8bSepLlM+>EO|D|Ac%)?nve1^E>TVHU*Z>*e4I% zvA$tf%)Cybkm2GVjufP&+8oc8&XY;|ZZg-OU}LK@_Y7@{%}^`9Ix_eA&TpT*-k_QP zTk=__ujiZY&i=r;PtB(A>ZMP{2~S4KGe4+4_RuEcz-YIqFi*WlQ`se(#7`^C66fl_ zn)mImGfoelzA?=4>3rAS*W;u~@u9YijtvM+5N9j1pG<8sNzp&AJuof zuD4jEKVvynZAQ#MdmPpGysmdZ zg5y+uuQa{WB)#)7eeV!`pQHM|*YzwCgj4iPt=^^~M(>Pgo}XEKqiuTj?&GO;Z&csY z|F%q#{kTNY>uDd2(#|fcLH*>jpX&pU9p1Y}xkwp%W50U;Q>Cnzl{CpZwW@s1`KX_K zRk6iC6<>66_iWrRQ_8Bxq>fwcd+D^)`{zSLwn|-<4~HuQK23Mc{;g=UtGKC1>>a%1 z+N+J{%f7T(|MlVfd-pp<{?N0R&e>`IBEK-($awSIpoeC10kbP#daU(JXbci+GK3M79aHaU?<5NQKjwu+UeAN4*?z2nr33uQ3(Vu4DWTvRL?@Dk4(|%PM+UvK_ zollbg%{V>X=?Wjtch@{(ZZ3SnsP8JmBDQ(GJNwXg37J98+J>c-+1mWthVfyY$Jnn7 zDDcl-a!7Z2N0Hc7^K`hPo0qcIwwqbPwS>ab9m9ol8s4cBU)Jc)gqDA&3;Rg!X!etG znd`-*N6UJj4A{fW)xNhYG}?*n^G3FtzEoKhSNZ{~EP8{{pB8^yH1(HV*|C!{b}*SG zOyrS->g+zYIq^5=?R>g-hTG$!|A@VOhA6W($UGZPYnC@Ienae%J;c((yK%hB19wm9 zkMdx_d*6HAdKNw;+a~nco`K=nZ*_uUINMckh-|#Fr;KPwdh+p|gs_;bN%MBctE%>1 znAIiWT=?DjyYqL6AI|t~X6(MNuFd<6&DG4@`QI|Z;<8WT@5X)n;azr~-HM7m31N00 ze*LX7;DcvzVRb_N2XnQ)I|3qZJlL7=w%+dKyiIYpH^s*95-*MRf2dDA7r5F{tQO~P zxVP(C3^g%)MME)tHd&7%IdL3%F9Codz z**NTr%Hd}F=dMK$`JFp0lL$7VjQN_Y)m-f{r%n0K)rC(4#kP%w}j=& z@79ODdPv!Sx7fznL-~D7sT+Ic)cHjTQ!3AcIV+EJa=bS;p?F^GOsA@lfQ@kpYUS%s z*wr7HsKs&R0Xuih*RtxI$#y@9Gt1dY%Gd#YfBk;t2**fal2eKQ*X!K}tyeyeoA)p$ zH=+Np>~8&zrhh5J*M~XAyj8X&d%iYhla}2h54)W0c_(1DKO14LY1*+c_k*(s7Uzv} zEMCtH+{S9fbIbJ^cLU0f#P1B9mA(7nCtoS&tkT8xNe-I3@Wf%cc<(f3=ecPCt9$AD zB!sT+qt`4`s7K_6_6rCsdw2X^rR5e!dd&p9Cx8+#elt zWA&#K%CZ~Q>kj=E({R!{M|ZEdDf!1=yr0)?dG4{NEZXLf{x$Q_cb?AQtyF#fy`23m zd&ABhtIU=(&9@UbZDkT>=ZSZ+fqId6!G=XY%nlT*y$7)2O|#dBexUhcFQcD5FJM{m z-h}x(HEQuf&Aul}&+Ive66_qstCQyZ6gq#G(xGW*wv&3dc;}A00rPfdtD8n=f3Y)k zz0$8~{%@h5?+jH--%*QWi}$3?`LB5XPBvE@t5pB&^(4Vv8F*(|!lsAHv&sz*#arT( zTO9P;KV#=4>UUf(Y1&&n=a9a~?mauNWQ`8j&v_Uyzb19h^ssXMKF{o5#2wD`N*w8_ zj_UQ9`Hxwv{F~|yTPNof_e*2duYOUGUoN)EOgP;Tp0Gvz*6q|;OSYa~u=UQff5{HG z@3^%5r-s>6X9V6qRQdX0;jYDwq8n>Ry|ZRhpf~dT$Tl0k3^E#Y3)xqIcNy5Iee)c=`X8#W& (de) -ConcatString: ex hl,de +STRCAT: ex hl,de .loop: ld a,(hl) or a jr z,.end @@ -610,10 +611,10 @@ ConcatString: ex hl,de ;[]----------------------------------------------------------[] ; ஢ ப . ⮦. ; (hl) -> (de) -CopyString: ld a,(hl) +STRCPY: ld a,(hl) ldi or a - jr nz,CopyString + jr nz,STRCPY dec de ret @@ -642,21 +643,21 @@ CopyWord: ld bc, 0x20FF ; "c" - string1 < string2 ; - string1 > string2 ;[]----------------------------------------------------------[] -CompareStrings: ld a,(de) +STRCMP: ld a,(de) cp (hl) ret nz inc hl inc de ld a,(hl) or a - jr nz,CompareStrings ; ࠧ 祭 + jr nz,STRCMP ; ࠧ 祭 ld a,(de) cp (hl) ret -; ᫮ ப -;> hl - ப -;< hl - ப +; ᫮ ப +; > hl - ப +; < hl - ப SkipWord: ld b,0x20 .loop: ld a,(hl) inc hl diff --git a/fntree.a80 b/fntree.a80 index 0928f61..ac5a2e4 100644 --- a/fntree.a80 +++ b/fntree.a80 @@ -1,14 +1,14 @@ -; LAST UPDATE: 28.05.2025 savelij +; LAST UPDATE: 24.07.2025 savelij MAX_LEVEL_DIR EQU 21 ;[]----------------------------------------------------------[] ReadTreeR PUSH IY POP HL - LD BC,PANEL.EFL + LD BC,PANEL.FILES_ALL ADD HL,BC - LD B,PANEL.FILEMASK - PANEL.EFL + LD B,PANEL.FILE_MASK - PANEL.FILES_ALL .LL1 LD (HL),0 INC HL DJNZ .LL1 @@ -196,8 +196,8 @@ ReadTreeR PUSH IY LD A,C SETPORT WINSP.CPU1,,0 LD HL,(TreeDIRS) - LD (IY+PANEL.EFL),L ; EQUIP FIL - LD (IY+PANEL.EFH),H + LD (IY+PANEL.FILES_ALL),L ; EQUIP FIL + LD (IY+PANEL.FILES_ALL + 1),H PUSH IY GETPORT WINSP.CPU3 PUSH AF @@ -293,8 +293,8 @@ LoadTreeR EX AF,AF' CP 0x0B JR C,.L5 SET VIEWFLAG.B_SHORTTREE,(IY+PANEL.VIEWFLAG) -.L5 LD (IY+PANEL.EFL),C ; EQUIP FILES - LD (IY+PANEL.EFH),B +.L5 LD (IY+PANEL.FILES_ALL),C ; EQUIP FILES + LD (IY+PANEL.FILES_ALL + 1),B BIT PANELFLAG.B_PRNDOSPATH,(IY+PANEL.PANELFLAG) LD A,1 JR NZ,.L6 @@ -304,7 +304,7 @@ LoadTreeR EX AF,AF' SETPORT WINSP.CPU3,,0 .TreeOkey PUSH IY POP HL - LD DE,PANEL.CURRPATH + LD DE,PANEL.CURR_PATH ADD HL,DE INC HL INC HL @@ -504,10 +504,10 @@ TestTreeR BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) .L14 SETPORT WINSP.CPU1,,0 SETPORT WINSP.Y_PORT,0xC0 - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) - LD E,(IY+PANEL.CFL) - LD D,(IY+PANEL.CFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) + LD E,(IY+PANEL.CURR_FILE) + LD D,(IY+PANEL.CURR_FILE + 1) ADD HL,DE ADD HL,HL ADD HL,HL @@ -553,10 +553,10 @@ MakeTreePathR LD A,(RAMPAGES.RIGHTPANEL) .L5 SETPORT WINSP.CPU1,,0 - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) - LD E,(IY+PANEL.CFL) - LD D,(IY+PANEL.CFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) + LD E,(IY+PANEL.CURR_FILE) + LD D,(IY+PANEL.CURR_FILE + 1) ADD HL,DE ADD HL,HL ADD HL,HL @@ -723,12 +723,12 @@ FindTreeDIRR SBC HL,BC JR NC,.L13 LD HL,0 -.L13 LD (IX+PANEL.FFL),L - LD (IX+PANEL.FFH),H +.L13 LD (IX+PANEL.FIRST_FILE),L + LD (IX+PANEL.FIRST_FILE + 1),H EX DE,HL OR A SBC HL,DE - LD (IX+PANEL.CFL),L - LD (IX+PANEL.CFH),H + LD (IX+PANEL.CURR_FILE),L + LD (IX+PANEL.CURR_FILE + 1),H OR A RET diff --git a/fnwin.a80 b/fnwin.a80 index d98877f..b7fb423 100644 --- a/fnwin.a80 +++ b/fnwin.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 30.03.2025 savelij +; LAST UPDATE: 17.07.2025 savelij ;[]----------------------------------------------------------[] ;楤 ᪨ 0 ࠭ @@ -132,29 +132,29 @@ MakeWindow: EX (SP),IY PUSH HL LD A,(IY+0x00) ; ⥪騩 ' INC IY - CP WINSUBOBJ.TEXT;0x01 ; ⥪⮢ ப + CP WINSUBOBJ.TEXT ; ⥪⮢ ப JP Z,PutTxtLine - CP WINSUBOBJ.FILL;0x02 ; + CP WINSUBOBJ.FILL ; JP Z,PutHeadPlc - CP WINSUBOBJ.BORDER;0x03 ; 㣫㡫 + CP WINSUBOBJ.BORDER ; 㣫㡫 JP Z,PutDRectan - CP WINSUBOBJ.BUTTON;0x04 ; + CP WINSUBOBJ.BUTTON ; JP Z,PutURectan - CP WINSUBOBJ.BUTTONTEXT;0x05 ; ⥪⮬ + CP WINSUBOBJ.BUTTONTEXT ; ⥪⮬ JP Z,PutButton - CP WINSUBOBJ.HORIZLINE;0x06 ; ਧ⠫쭠 + CP WINSUBOBJ.HORIZLINE ; ਧ⠫쭠 JP Z,PutHorizLine - CP WINSUBOBJ.VERTICLINE;0x07 ; ⨪쭠 + CP WINSUBOBJ.VERTICLINE ; ⨪쭠 JP Z,PutVertLine - CP WINSUBOBJ.ICONLEFTARROW;0x08 ; "५ " + CP WINSUBOBJ.ICONLEFTARROW ; "५ " JP Z,PutSBleft - CP WINSUBOBJ.ICONRIGHTARROW;0x09 ; "५ ࠢ" + CP WINSUBOBJ.ICONRIGHTARROW ; "५ ࠢ" JP Z,PutSBright - CP WINSUBOBJ.ICONUPARROW;0x0A ; "५ " + CP WINSUBOBJ.ICONUPARROW ; "५ " JP Z,PutSBup - CP WINSUBOBJ.ICONDOWNARROW;0x0B ; "५ " + CP WINSUBOBJ.ICONDOWNARROW ; "५ " JP Z,PutSBdown - CP WINSUBOBJ.RESTOREWIN;0x7F ; ⠭ ࠭ + CP WINSUBOBJ.RESTOREWIN ; ⠭ ࠭ JP Z,RestoreWindow CP WINSUBOBJ.ADRTEXT JP Z,PutAdrTxtLine @@ -171,14 +171,14 @@ MakeWindow: EX (SP),IY ;-------------------------------------------------------------- ; -.PositX DEFW 0x0000 ; X न -.PositY DEFW 0x0000 ; Y न -.LenX DEFW 0x0000 ; X/2 -.LenY DEFW 0x0000 ; Y -.Free DEFW 0x0000 -.Open DEFB 0x00 ; - -.Type DEFB 0x00 -.Buffer DUPL 0x40,0 +.PositX DW 0 ; X न +.PositY DW 0 ; Y न +.LenX DW 0 ; X/2 +.LenY DW 0 ; Y +.Free DW 0 +.Open DB 0 ; - +.Type DB 0 +.Buffer DB 0x40 DUP 0 ;-------------------------------------------------------------- ; 楤 ࠭ אַ㣮쭮 ᪮ @@ -440,20 +440,20 @@ PutRectan HALT SETPORT WINSP.CPU1,,0 RET -; ⥪⮢ ப 㪠 +; ⥪⮢ ப 㪠 PutAdrTxtLine LD HL,(MakeWindow.PositX) SLA L RL H - LD E,(IY+0x00) ; Xpos + LD E,(IY+0x00) INC IY - LD D,(IY+0x00) + LD D,(IY+0x00) ; Xpos INC IY ADD HL,DE EX DE,HL LD HL,(MakeWindow.PositY) - LD C,(IY+0x00) ; Ypos + LD C,(IY+0x00) INC IY - LD B,(IY+0x00) + LD B,(IY+0x00) ; Ypos INC IY ADD HL,BC LD C,L @@ -465,8 +465,10 @@ PutAdrTxtLine LD HL,(MakeWindow.PositX) LD H,(IY+0) ; ⥪ INC IY PUSH IY + LD IYL,A LD A,H OR L + LD A,IYL CALL NZ,PrnTxtLnIFF ; ᫨ 0 POP IY RET diff --git a/fnwork.a80 b/fnwork.a80 index eb157fa..16b59db 100644 --- a/fnwork.a80 +++ b/fnwork.a80 @@ -1,17 +1,17 @@ -; LAST UPDATE: 24.06.2025 savelij +; LAST UPDATE: 25.07.2025 savelij ;[]===========================================================[] -CursUp LD A,(IY + PANEL.EFL) - OR (IY + PANEL.EFH) +CursUp LD A,(IY + PANEL.FILES_ALL) + OR (IY + PANEL.FILES_ALL + 1) RET Z - LD L,(IY + PANEL.CFL) - LD H,(IY + PANEL.CFH) + LD L,(IY + PANEL.CURR_FILE) + LD H,(IY + PANEL.CURR_FILE + 1) LD A,H OR L JR NZ,CursUp1 - LD A,(IY + PANEL.FFL) - OR (IY + PANEL.FFH) + LD A,(IY + PANEL.FIRST_FILE) + OR (IY + PANEL.FIRST_FILE + 1) RET Z JR ScrlDn1 @@ -19,16 +19,16 @@ CursUp1 DEC HL PUSH HL CALL ResInvert POP HL - LD (IY + PANEL.CFL),L - LD (IY + PANEL.CFH),H + LD (IY + PANEL.CURR_FILE),L + LD (IY + PANEL.CURR_FILE + 1),H CALL SetInvert JP PrnFileInfo -ScrollDown: LD A,(IY + PANEL.EFL) - OR (IY + PANEL.EFH) +ScrollDown: LD A,(IY + PANEL.FILES_ALL) + OR (IY + PANEL.FILES_ALL + 1) RET Z - LD A,(IY + PANEL.FFL) - OR (IY + PANEL.FFH) + LD A,(IY + PANEL.FIRST_FILE) + OR (IY + PANEL.FIRST_FILE + 1) RET Z ScrlDn1 BIT VIEWFLAG.B_FULL,(IY + PANEL.VIEWFLAG) JP NZ,ScrlDnP @@ -42,8 +42,8 @@ ScrlDn1 BIT VIEWFLAG.B_FULL,(IY + PANEL.VIEWFLAG) LD A,(RAMPAGES.RIGHTPANEL) .L1 SETPORT WINSP.CPU1,,0 - LD L,(IY + PANEL.EFL) - LD H,(IY + PANEL.EFH) + LD L,(IY + PANEL.FILES_ALL) + LD H,(IY + PANEL.FILES_ALL + 1) ADD HL,HL ; *2 ADD HL,HL ; *4 ADD HL,HL ; *8 @@ -54,8 +54,8 @@ ScrlDn1 BIT VIEWFLAG.B_FULL,(IY + PANEL.VIEWFLAG) SET 6,H ; | 0x4000 - 砫 ࠭ PUSH HL POP IX - LD L,(IY + PANEL.FFL) - LD H,(IY + PANEL.FFH) + LD L,(IY + PANEL.FIRST_FILE) + LD H,(IY + PANEL.FIRST_FILE + 1) DEC HL ADD HL,HL ; *2 ADD HL,HL ; *4 @@ -109,8 +109,8 @@ ScrlDn1 BIT VIEWFLAG.B_FULL,(IY + PANEL.VIEWFLAG) LD B,A PUSH BC SETPORT WINSP.CPU1,0x50 - LD L,(IY + PANEL.XL) - LD H,(IY + PANEL.XH) + LD L,(IY + PANEL.X) + LD H,(IY + PANEL.X + 1) LD DE,6 ADD HL,DE LD DE,63 << 8 | 71 @@ -160,16 +160,16 @@ ScrlDn1 BIT VIEWFLAG.B_FULL,(IY + PANEL.VIEWFLAG) LD A,C SETPORT WINSP.Y_PORT,,0 POP IY - LD L,(IY + PANEL.FFL) - LD H,(IY + PANEL.FFH) + LD L,(IY + PANEL.FIRST_FILE) + LD H,(IY + PANEL.FIRST_FILE + 1) DEC HL - LD (IY + PANEL.FFL),L - LD (IY + PANEL.FFH),H + LD (IY + PANEL.FIRST_FILE),L + LD (IY + PANEL.FIRST_FILE + 1),H CALL SetInvert CALL PrnFileInfo PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE JP PrnHScrBar @@ -182,8 +182,8 @@ ScrlDnP LD A,(RAMPAGES.RIGHTPANEL) .L1 SETPORT WINSP.CPU1,,0 - LD L,(IY + PANEL.FFL) - LD H,(IY + PANEL.FFH) + LD L,(IY + PANEL.FIRST_FILE) + LD H,(IY + PANEL.FIRST_FILE + 1) DEC HL ADD HL,HL ; *2 ADD HL,HL ; *4 @@ -228,8 +228,8 @@ ScrlDnP LD B,A PUSH BC SETPORT WINSP.CPU1,0x50 - LD L,(IY+PANEL.XL) - LD H,(IY+PANEL.XH) + LD L,(IY+PANEL.X) + LD H,(IY+PANEL.X + 1) LD DE,4 ADD HL,DE LD DE,63 << 8 | 71 @@ -246,16 +246,16 @@ ScrlDnP LD A,C SETPORT WINSP.Y_PORT,,0 POP IY - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) DEC HL - LD (IY+PANEL.FFL),L - LD (IY+PANEL.FFH),H + LD (IY+PANEL.FIRST_FILE),L + LD (IY+PANEL.FIRST_FILE + 1),H CALL SetInvert CALL PrnFileInfo PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE JP PrnVScrBar @@ -277,8 +277,8 @@ ScrlDnT DJNZ .L2 POP DE LD HL,0x4000 - LD C,(IY+PANEL.FFL) - LD B,(IY+PANEL.FFH) + LD C,(IY+PANEL.FIRST_FILE) + LD B,(IY+PANEL.FIRST_FILE + 1) DEC BC LD A,B OR C @@ -315,8 +315,8 @@ ScrDdn2 LD DE,WorkBuffer+0x100 LD B,A PUSH BC SETPORT WINSP.CPU1,0x50 - LD L,(IY+PANEL.XL) - LD H,(IY+PANEL.XH) + LD L,(IY+PANEL.X) + LD H,(IY+PANEL.X + 1) LD DE,6 ADD HL,DE LD DE,63 << 8 | 71 @@ -333,38 +333,38 @@ ScrDdn2 LD DE,WorkBuffer+0x100 LD A,C SETPORT WINSP.Y_PORT,,0 POP IY - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) DEC HL - LD (IY+PANEL.FFL),L - LD (IY+PANEL.FFH),H + LD (IY+PANEL.FIRST_FILE),L + LD (IY+PANEL.FIRST_FILE + 1),H CALL SetInvert CALL PrnFileInfo PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE JP PrnVScrBar ;[]===========================================================[] -CursDown LD C,(IY+PANEL.EFL) - LD B,(IY+PANEL.EFH) +CursDown LD C,(IY+PANEL.FILES_ALL) + LD B,(IY+PANEL.FILES_ALL + 1) LD A,B OR C RET Z - LD L,(IY+PANEL.CFL) - LD H,(IY+PANEL.CFH) + LD L,(IY+PANEL.CURR_FILE) + LD H,(IY+PANEL.CURR_FILE + 1) INC HL PUSH HL - LD E,(IY+PANEL.FFL) - LD D,(IY+PANEL.FFH) + LD E,(IY+PANEL.FIRST_FILE) + LD D,(IY+PANEL.FIRST_FILE + 1) ADD HL,DE OR A SBC HL,BC POP HL RET NC - LD E,(IY+PANEL.FPL) - LD D,(IY+PANEL.FPH) + LD E,(IY+PANEL.FILES_PAGE) + LD D,(IY+PANEL.FILES_PAGE + 1) OR A SBC HL,DE JR NC,ScrlUp1 @@ -372,21 +372,21 @@ CursDown LD C,(IY+PANEL.EFL) PUSH HL CALL ResInvert POP HL - LD (IY+PANEL.CFL),L - LD (IY+PANEL.CFH),H + LD (IY+PANEL.CURR_FILE),L + LD (IY+PANEL.CURR_FILE + 1),H CALL SetInvert JP PrnFileInfo -ScrollUp: LD A,(IY+PANEL.EFL) - OR (IY+PANEL.EFH) +ScrollUp: LD A,(IY+PANEL.FILES_ALL) + OR (IY+PANEL.FILES_ALL + 1) RET Z - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) - LD E,(IY+PANEL.FPL) - LD D,(IY+PANEL.FPH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) + LD E,(IY+PANEL.FILES_PAGE) + LD D,(IY+PANEL.FILES_PAGE + 1) ADD HL,DE - LD E,(IY+PANEL.EFL) - LD D,(IY+PANEL.EFH) + LD E,(IY+PANEL.FILES_ALL) + LD D,(IY+PANEL.FILES_ALL + 1) OR A SBC HL,DE RET NC @@ -402,8 +402,8 @@ ScrlUp1 BIT VIEWFLAG.B_FULL,(IY+PANEL.VIEWFLAG) LD A,(RAMPAGES.RIGHTPANEL) .L1 SETPORT WINSP.CPU1,,0 - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) LD DE,0x0011 ADD HL,DE ADD HL,HL @@ -444,8 +444,8 @@ ScrlUp1 BIT VIEWFLAG.B_FULL,(IY+PANEL.VIEWFLAG) LD B,A PUSH BC SETPORT WINSP.CPU1,0x50 - LD L,(IY+PANEL.XL) - LD H,(IY+PANEL.XH) + LD L,(IY+PANEL.X) + LD H,(IY+PANEL.X + 1) LD DE,6 ADD HL,DE LD DE,71 << 8 | 63 @@ -496,16 +496,16 @@ ScrlUp1 BIT VIEWFLAG.B_FULL,(IY+PANEL.VIEWFLAG) LD A,C SETPORT WINSP.Y_PORT,,0 POP IY - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) INC HL - LD (IY+PANEL.FFL),L - LD (IY+PANEL.FFH),H + LD (IY+PANEL.FIRST_FILE),L + LD (IY+PANEL.FIRST_FILE + 1),H CALL SetInvert CALL PrnFileInfo PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE JP PrnHScrBar @@ -518,8 +518,8 @@ ScrlUpP LD A,(RAMPAGES.RIGHTPANEL) .L1 SETPORT WINSP.CPU1,,0 - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) LD DE,0x0012 ADD HL,DE ADD HL,HL @@ -565,8 +565,8 @@ ScrlUpP LD B,A PUSH BC SETPORT WINSP.CPU1,0x50 - LD L,(IY+PANEL.XL) - LD H,(IY+PANEL.XH) + LD L,(IY+PANEL.X) + LD H,(IY+PANEL.X + 1) LD DE,4 ADD HL,DE LD DE,71 << 8 | 63 @@ -583,16 +583,16 @@ ScrlUpP LD A,C SETPORT WINSP.Y_PORT,,0 POP IY - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) INC HL - LD (IY+PANEL.FFL),L - LD (IY+PANEL.FFH),H + LD (IY+PANEL.FIRST_FILE),L + LD (IY+PANEL.FIRST_FILE + 1),H CALL SetInvert CALL PrnFileInfo PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE JP PrnVScrBar @@ -613,8 +613,8 @@ ScrlUpT INC L DJNZ .L2 POP DE - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) LD BC,0x0012 ADD HL,BC LD C,L @@ -652,8 +652,8 @@ ScrDup1 PUSH BC LD B,A PUSH BC SETPORT WINSP.CPU1,0x50 - LD L,(IY+PANEL.XL) - LD H,(IY+PANEL.XH) + LD L,(IY+PANEL.X) + LD H,(IY+PANEL.X + 1) LD DE,6 ADD HL,DE LD DE,71 << 8 | 63 @@ -670,16 +670,16 @@ ScrDup1 PUSH BC LD A,C SETPORT WINSP.Y_PORT,,0 POP IY - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) INC HL - LD (IY+PANEL.FFL),L - LD (IY+PANEL.FFH),H + LD (IY+PANEL.FIRST_FILE),L + LD (IY+PANEL.FIRST_FILE + 1),H CALL SetInvert CALL PrnFileInfo PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE JP PrnVScrBar @@ -719,11 +719,11 @@ ScrollDIRDownUp: ;[]===========================================================[] CursLeft BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) RET NZ - LD A,(IY+PANEL.EFL) - OR (IY+PANEL.EFH) + LD A,(IY+PANEL.FILES_ALL) + OR (IY+PANEL.FILES_ALL + 1) RET Z - LD L,(IY+PANEL.CFL) - LD H,(IY+PANEL.CFH) + LD L,(IY+PANEL.CURR_FILE) + LD H,(IY+PANEL.CURR_FILE + 1) LD A,H OR L JP Z,PageUp @@ -735,13 +735,13 @@ CursLeft BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) CursRight BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) RET NZ - LD A,(IY+PANEL.EFL) - OR (IY+PANEL.EFH) + LD A,(IY+PANEL.FILES_ALL) + OR (IY+PANEL.FILES_ALL + 1) RET Z - LD L,(IY+PANEL.CFL) - LD H,(IY+PANEL.CFH) - LD E,(IY+PANEL.FPL) - LD D,(IY+PANEL.FPH) + LD L,(IY+PANEL.CURR_FILE) + LD H,(IY+PANEL.CURR_FILE + 1) + LD E,(IY+PANEL.FILES_PAGE) + LD D,(IY+PANEL.FILES_PAGE + 1) DEC DE OR A PUSH HL @@ -756,16 +756,16 @@ CursRight BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) .L1 EX DE,HL SBC HL,DE JR NC,CursRg1 - LD E,(IY+PANEL.FPL) - LD D,(IY+PANEL.FPH) + LD E,(IY+PANEL.FILES_PAGE) + LD D,(IY+PANEL.FILES_PAGE + 1) DEC DE CursRg1 EX DE,HL PUSH HL - LD E,(IY+PANEL.FFL) - LD D,(IY+PANEL.FFH) + LD E,(IY+PANEL.FIRST_FILE) + LD D,(IY+PANEL.FIRST_FILE + 1) ADD HL,DE - LD C,(IY+PANEL.EFL) - LD B,(IY+PANEL.EFH) + LD C,(IY+PANEL.FILES_ALL) + LD B,(IY+PANEL.FILES_ALL + 1) OR A SBC HL,BC POP HL @@ -776,8 +776,8 @@ CursRg1 EX DE,HL SBC HL,DE DEC HL PUSH HL - LD E,(IY+PANEL.CFL) - LD D,(IY+PANEL.CFH) + LD E,(IY+PANEL.CURR_FILE) + LD D,(IY+PANEL.CURR_FILE + 1) OR A SBC HL,DE POP HL @@ -785,42 +785,42 @@ CursRg1 EX DE,HL CursLRex PUSH HL CALL ResInvert POP HL - LD (IY+PANEL.CFL),L - LD (IY+PANEL.CFH),H + LD (IY+PANEL.CURR_FILE),L + LD (IY+PANEL.CURR_FILE + 1),H CALL SetInvert JP PrnFileInfo ;[]===========================================================[] -PageUp LD A,(IY+PANEL.EFL) - OR (IY+PANEL.EFH) +PageUp LD A,(IY+PANEL.FILES_ALL) + OR (IY+PANEL.FILES_ALL + 1) RET Z - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) LD A,H OR L JP Z,Home PUSH HL CALL ResInvert POP HL - LD E,(IY+PANEL.FPL) - LD D,(IY+PANEL.FPH) + LD E,(IY+PANEL.FILES_PAGE) + LD D,(IY+PANEL.FILES_PAGE + 1) OR A SBC HL,DE JR NC,.L1 LD HL,0x0000 -.L1 LD (IY+PANEL.FFL),L - LD (IY+PANEL.FFH),H +.L1 LD (IY+PANEL.FIRST_FILE),L + LD (IY+PANEL.FIRST_FILE + 1),H JR PageUDex -PageDown LD C,(IY+PANEL.EFL) - LD B,(IY+PANEL.EFH) +PageDown LD C,(IY+PANEL.FILES_ALL) + LD B,(IY+PANEL.FILES_ALL + 1) LD A,B OR C RET Z - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) - LD E,(IY+PANEL.FPL) - LD D,(IY+PANEL.FPH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) + LD E,(IY+PANEL.FILES_PAGE) + LD D,(IY+PANEL.FILES_PAGE + 1) ADD HL,DE OR A SBC HL,BC @@ -831,29 +831,29 @@ PageDown LD C,(IY+PANEL.EFL) POP BC POP HL ADD HL,BC - LD (IY+PANEL.FFL),L - LD (IY+PANEL.FFH),H - LD E,(IY+PANEL.CFL) - LD D,(IY+PANEL.CFH) + LD (IY+PANEL.FIRST_FILE),L + LD (IY+PANEL.FIRST_FILE + 1),H + LD E,(IY+PANEL.CURR_FILE) + LD D,(IY+PANEL.CURR_FILE + 1) ADD HL,DE OR A SBC HL,BC JR C,PageUDex LD L,C LD H,B - LD E,(IY+PANEL.FFL) - LD D,(IY+PANEL.FFH) + LD E,(IY+PANEL.FIRST_FILE) + LD D,(IY+PANEL.FIRST_FILE + 1) OR A SBC HL,DE DEC HL - LD (IY+PANEL.CFL),L - LD (IY+PANEL.CFH),H + LD (IY+PANEL.CURR_FILE),L + LD (IY+PANEL.CURR_FILE + 1),H PageUDex CALL PrintDIR CALL SetInvert CALL PrnFileInfo PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE LD A,(IY+PANEL.VIEWFLAG) AND VIEWFLAG.MASK @@ -872,39 +872,39 @@ PgUDext PUSH BC RET ;[]===========================================================[] -Home LD A,(IY+PANEL.EFL) - OR (IY+PANEL.EFH) +Home LD A,(IY+PANEL.FILES_ALL) + OR (IY+PANEL.FILES_ALL + 1) RET Z - LD A,(IY+PANEL.FFL) - OR (IY+PANEL.FFH) + LD A,(IY+PANEL.FIRST_FILE) + OR (IY+PANEL.FIRST_FILE + 1) JR NZ,Home1 - LD A,(IY+PANEL.CFL) - OR (IY+PANEL.CFH) + LD A,(IY+PANEL.CURR_FILE) + OR (IY+PANEL.CURR_FILE + 1) RET Z CALL ResInvert SUB A - LD (IY+PANEL.CFL),A - LD (IY+PANEL.CFH),A + LD (IY+PANEL.CURR_FILE),A + LD (IY+PANEL.CURR_FILE + 1),A CALL SetInvert JP PrnFileInfo Home1 CALL ResInvert SUB A - LD (IY+PANEL.FFL),A - LD (IY+PANEL.FFH),A - LD (IY+PANEL.CFL),A - LD (IY+PANEL.CFH),A + LD (IY+PANEL.FIRST_FILE),A + LD (IY+PANEL.FIRST_FILE + 1),A + LD (IY+PANEL.CURR_FILE),A + LD (IY+PANEL.CURR_FILE + 1),A JR PageUDex -End LD C,(IY+PANEL.EFL) - LD B,(IY+PANEL.EFH) +End LD C,(IY+PANEL.FILES_ALL) + LD B,(IY+PANEL.FILES_ALL + 1) LD A,B OR C RET Z - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) - LD E,(IY+PANEL.CFL) - LD D,(IY+PANEL.CFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) + LD E,(IY+PANEL.CURR_FILE) + LD D,(IY+PANEL.CURR_FILE + 1) ADD HL,DE INC HL OR A @@ -913,26 +913,26 @@ End LD C,(IY+PANEL.EFL) PUSH BC CALL ResInvert POP BC - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) BIT VIEWFLAG.B_FULL,(IY+PANEL.VIEWFLAG) - LD E,(IY+PANEL.FPL) - LD D,(IY+PANEL.FPH) + LD E,(IY+PANEL.FILES_PAGE) + LD D,(IY+PANEL.FILES_PAGE + 1) ADD HL,DE INC HL OR A SBC HL,BC JR Z,End1 JR C,End1 - LD L,(IY+PANEL.EFL) - LD H,(IY+PANEL.EFH) - LD E,(IY+PANEL.FFL) - LD D,(IY+PANEL.FFH) + LD L,(IY+PANEL.FILES_ALL) + LD H,(IY+PANEL.FILES_ALL + 1) + LD E,(IY+PANEL.FIRST_FILE) + LD D,(IY+PANEL.FIRST_FILE + 1) OR A SBC HL,DE DEC HL - LD (IY+PANEL.CFL),L - LD (IY+PANEL.CFH),H + LD (IY+PANEL.CURR_FILE),L + LD (IY+PANEL.CURR_FILE + 1),H CALL SetInvert CALL PrnFileInfo RET @@ -940,19 +940,19 @@ End1 LD L,C LD H,B OR A SBC HL,DE - LD (IY+PANEL.FFL),L - LD (IY+PANEL.FFH),H + LD (IY+PANEL.FIRST_FILE),L + LD (IY+PANEL.FIRST_FILE + 1),H BIT VIEWFLAG.B_FULL,(IY+PANEL.VIEWFLAG) - LD L,(IY+PANEL.FPL) - LD H,(IY+PANEL.FPH) + LD L,(IY+PANEL.FILES_PAGE) + LD H,(IY+PANEL.FILES_PAGE + 1) DEC HL - LD (IY+PANEL.CFL),L - LD (IY+PANEL.CFH),H + LD (IY+PANEL.CURR_FILE),L + LD (IY+PANEL.CURR_FILE + 1),H JP PageUDex ;[]==========================================================[] -NewFile LD A,(IY+PANEL.EFL) - OR (IY+PANEL.EFH) +NewFile LD A,(IY+PANEL.FILES_ALL) + OR (IY+PANEL.FILES_ALL + 1) RET Z LD A,(IY+PANEL.VIEWFLAG) AND VIEWFLAG.MASK @@ -1008,17 +1008,17 @@ NewFile1 LD HL,0x003F LD C,A LD B,0x00 ADD HL,BC - LD C,(IY+PANEL.CFL) - LD B,(IY+PANEL.CFH) + LD C,(IY+PANEL.CURR_FILE) + LD B,(IY+PANEL.CURR_FILE + 1) OR A SBC HL,BC JP Z,OpenFile ADD HL,BC - LD E,(IY+PANEL.FFL) - LD D,(IY+PANEL.FFH) + LD E,(IY+PANEL.FIRST_FILE) + LD D,(IY+PANEL.FIRST_FILE + 1) ADD HL,DE - LD C,(IY+PANEL.EFL) - LD B,(IY+PANEL.EFH) + LD C,(IY+PANEL.FILES_ALL) + LD B,(IY+PANEL.FILES_ALL + 1) OR A SBC HL,BC RET NC @@ -1028,8 +1028,8 @@ NewFile1 LD HL,0x003F PUSH HL CALL ResInvert POP HL - LD (IY+PANEL.CFL),L - LD (IY+PANEL.CFH),H + LD (IY+PANEL.CURR_FILE),L + LD (IY+PANEL.CURR_FILE + 1),H CALL SetInvert CALL PrnFileInfo JP ResFire @@ -1041,8 +1041,8 @@ OpenFile BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) ELSE JP NZ,TestTreeR.TestTreeBeg ENDIF - LD A,(IY+PANEL.EFL) - OR (IY+PANEL.EFH) + LD A,(IY+PANEL.FILES_ALL) + OR (IY+PANEL.FILES_ALL + 1) RET Z GETPORT WINSP.CPU1 PUSH AF @@ -1052,10 +1052,10 @@ OpenFile BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) LD A,(RAMPAGES.RIGHTPANEL) .L1 SETPORT WINSP.CPU1,,0 - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) - LD E,(IY+PANEL.CFL) - LD D,(IY+PANEL.CFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) + LD E,(IY+PANEL.CURR_FILE) + LD D,(IY+PANEL.CURR_FILE + 1) ADD HL,DE ADD HL,HL ; *2 ADD HL,HL ; *4 @@ -1076,7 +1076,7 @@ OpenFile BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) POP AF SETPORT WINSP.CPU1,,0 LD HL,WorkBuffer - BIT 4,(HL) + BIT DIR.B_Dir,(HL) INC HL JP Z,RunEXEfile LD A,(HL) @@ -1085,13 +1085,13 @@ OpenFile BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) PUSH HL PUSH IY POP HL - LD DE,PANEL.CURRPATH + LD DE,PANEL.CURR_PATH ADD HL,DE SUB A .L2 INC HL CP (HL) JR NZ,.L2 - LD A,0x5C + LD A,'\\' DEC HL CP (HL) JR Z,OpenF1 @@ -1121,7 +1121,7 @@ OpenF2 PUSH AF PUSH IY SPDSS DSSF.CURDISK POP HL - LD DE,PANEL.CURRPATH + LD DE,PANEL.CURR_PATH ADD HL,DE ADD A,'A' LD (HL),A @@ -1141,7 +1141,7 @@ OpenF2 PUSH AF CALL PrnFileInfo PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE CALL InitScrollBar LD A,(IY+PANEL.VIEWFLAG) @@ -1161,7 +1161,7 @@ OpenF2 PUSH AF JR NZ,.L5 LD IY,RightPanel LD HL,LeftPanel -.L5 LD DE,PANEL.CURRPATH +.L5 LD DE,PANEL.CURR_PATH ADD HL,DE INC HL INC HL @@ -1174,7 +1174,7 @@ OpenF2 PUSH AF CALL PrnFileInfo PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE CALL PrnVScrBar POP IY @@ -1200,10 +1200,10 @@ ChPanel CALL ResInvert .L1 SETPORT WINSP.CPU1,,0 SETPORT WINSP.Y_PORT,0xC0 - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) - LD E,(IY+PANEL.CFL) - LD D,(IY+PANEL.CFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) + LD E,(IY+PANEL.CURR_FILE) + LD D,(IY+PANEL.CURR_FILE + 1) ADD HL,DE ADD HL,HL ADD HL,HL @@ -1232,10 +1232,10 @@ ChPan1 LD IY,LeftPanel .L2 SETPORT WINSP.CPU1,,0 SETPORT WINSP.Y_PORT,0xC0 - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) - LD E,(IY+PANEL.CFL) - LD D,(IY+PANEL.CFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) + LD E,(IY+PANEL.CURR_FILE) + LD D,(IY+PANEL.CURR_FILE + 1) ADD HL,DE ADD HL,HL ADD HL,HL @@ -1250,7 +1250,7 @@ ChPan1 LD IY,LeftPanel ChPan2 CALL SetInvert PUSH IY POP HL - LD DE,PANEL.CURRPATH + LD DE,PANEL.CURR_PATH ADD HL,DE PUSH IY SPDSS DSSF.CHDIR @@ -1267,8 +1267,8 @@ ChangeDriveR LD IX,RightPanel ChangeDrive PUSH IY PUSH IX POP IY - LD C,(IY+PANEL.XL) - LD B,(IY+PANEL.XH) + LD C,(IY+PANEL.X) + LD B,(IY+PANEL.X + 1) INC BC INC BC OR A @@ -1281,7 +1281,7 @@ ChangeDrive PUSH IY ADD A,'A' PUSH IY POP HL - LD DE,PANEL.CURRPATH + LD DE,PANEL.CURR_PATH ADD HL,DE LD (HL),D LD HL,NewDrive @@ -1300,7 +1300,7 @@ loc_C82E BIT PANELFLAG.B_PRNDOSPATH,(IY+PANEL.PANELFLAG) RET NZ PUSH IY POP HL - LD DE,PANEL.CURRPATH + LD DE,PANEL.CURR_PATH ADD HL,DE PUSH IY SPDSS DSSF.CHDIR @@ -1314,17 +1314,17 @@ NewDrive DZ " :\\" ;[]==========================================================[] ReplacePanels LD IX,LeftPanel SET PANELFLAG.B_SIDE,(IX+PANEL.PANELFLAG) - LD L,(IX+PANEL.XL) - LD H,(IX+PANEL.XH) + LD L,(IX+PANEL.X) + LD H,(IX+PANEL.X + 1) LD IX,RightPanel RES PANELFLAG.B_SIDE,(IX+PANEL.PANELFLAG) - LD E,(IX+PANEL.XL) - LD D,(IX+PANEL.XH) - LD (IX+PANEL.XL),L - LD (IX+PANEL.XH),H + LD E,(IX+PANEL.X) + LD D,(IX+PANEL.X + 1) + LD (IX+PANEL.X),L + LD (IX+PANEL.X + 1),H LD IX,LeftPanel - LD (IX+PANEL.XL),E - LD (IX+PANEL.XH),D + LD (IX+PANEL.X),E + LD (IX+PANEL.X + 1),D LD HL,RAMPAGES.LEFTPANEL LD DE,RAMPAGES.RIGHTPANEL LD A,(DE) @@ -1333,7 +1333,7 @@ ReplacePanels LD IX,LeftPanel LD (HL),A LD HL,LeftPanel LD DE,RightPanel - LD BC,PANEL.CURRPATH + 0x100 + LD BC,PANEL.CURR_PATH + 0x100 ReplPan LD A,(DE) LDI DEC HL @@ -1427,12 +1427,12 @@ RunBATfile: LD A,(HL) PUSH DE ld hl,ShellFile ld de,WorkBuffer - call CopyString + call STRCPY bit PANELFLAG.B_SIDE,(iy+PANEL.PANELFLAG) - ld hl,RightPanel + PANEL.CURRPATH + ld hl,RightPanel + PANEL.CURR_PATH jr nz,.next - ld hl,LeftPanel + PANEL.CURRPATH -.next: call ConcatString + ld hl,LeftPanel + PANEL.CURR_PATH +.next: call STRCAT dec de ex hl,de ld a,'\\' @@ -1443,7 +1443,7 @@ RunBATfile: LD A,(HL) .skipSlash: inc hl ex hl,de pop hl - call CopyString + call STRCPY ld de,WorkBuffer jr RunFile @@ -1483,7 +1483,7 @@ TestEXT: PUSH IX POP HL GETPORT WINSP.CPU1 PUSH AF - LD A,(RAMPAGES.FNHELP) + LD A,(RAMPAGES.FNREZ3) SETPORT WINSP.CPU1,,0 TestEXT1: LD C,(HL) INC HL @@ -1623,7 +1623,7 @@ TstEXT2: LD (DE),A RestoreDIR: PUSH AF PUSH IY POP HL - LD BC,PANEL.CURRPATH + LD BC,PANEL.CURR_PATH ADD HL,BC PUSH IY SPDSS DSSF.CHDIR @@ -1648,7 +1648,7 @@ EName: INC HL POP HL INC HL JP TstEXT1 -EDrive: LD A,(IY+PANEL.CURRPATH) +EDrive: LD A,(IY+PANEL.CURR_PATH) LD (DE),A INC DE LD A,':' @@ -1661,7 +1661,7 @@ EPath: PUSH HL PUSH BC PUSH IY POP HL - LD BC,PANEL.CURRPATH + LD BC,PANEL.CURR_PATH ADD HL,BC SUB A .L1 LDI @@ -1678,11 +1678,39 @@ EPath: PUSH HL INC HL JP TstEXT1 -; FLX 䠩 -RunFLX: LD HL,RestoreDIR - PUSH HL - LD HL,WorkBuffer - LD A,0x21 +; 㧪 , ᫥ CALL 0 +LOADFLX4RUN EX (SP),HL + GETPORT WINSP.CPU1 + EX AF,AF' + LD A,(RAMPAGES.FNREZ2) + SETPORT WINSP.CPU1,,0 + LD DE,0 ; 墮 +.NAMEFLX EQU $-2 + XOR A +.L2 CP (HL) + JR Z,.L1 + LDI + JR .L2 + +.L1 LD (DE),A + INC HL + EX (SP),HL ; 㫨 + EX AF,AF' + PUSH AF + LD HL,BUF_REZ2.FLXdir ; 㧪 ⥬ + PUSH IY + SPDSS DSSF.OPEN,,1 + POP IY + EX AF,AF' + POP AF + SETPORT WINSP.CPU1,,0 + EX AF,AF' + JP C,RestoreDIR ; 室 訡 " " + JR LOADFLX.LDF1 + +; 㧪 ᪠ +LOADFLX: LD HL,WorkBuffer + LD A,'!' .L1 INC HL CP (HL) JR C,.L1 @@ -1695,8 +1723,8 @@ RunFLX: LD HL,RestoreDIR SPDSS DSSF.OPEN,,1 POP IY POP HL - RET C - LD (.FLXHandle),A + RET C ; 室, 訡 +.LDF1 LD (.FLXHandle),A PUSH HL LD IX,0x0000 LD HL,0x0000 @@ -1709,8 +1737,8 @@ RunFLX: LD HL,RestoreDIR OR L POP HL SCF - LD A,0x1E - RET NZ + LD A,ERR_DSS.NOT_ENOUGH_MEMORY + RET NZ ; 室, 訡 :) PUSH IY PUSH HL ; !FIXIT ஢ ⮣ SAFE_PORTY @@ -1734,39 +1762,47 @@ RunFLX: LD HL,RestoreDIR INC HL CP 'F' SCF - LD A,0x10 + LD A,ERR_DSS.INVALID_NAME JR NZ,.L2 LD A,(HL) INC HL CP 'L' SCF - LD A,0x10 + LD A,ERR_DSS.INVALID_NAME JR NZ,.L2 LD A,(HL) INC HL CP 'X' SCF - LD A,0x10 + LD A,ERR_DSS.INVALID_NAME JR NZ,.L2 - LD L,0x08 + LD L,LOW (WorkBuffer + 0x0100) + 8 LD E,(HL) INC HL - LD D,(HL) + LD D,(HL) ; DE - ᬥ饭 ࠭ 㧪 INC HL LD C,(HL) INC HL - LD B,(HL) + LD B,(HL) ; BC - ᬥ饭 ࠭ ᪠ INC HL - LD (.FLXexec),BC - LD A,(HL) + LD A,(HL) ; ० ࠡ INC HL - LD (.FLXmode),A - RES 7,D - SET 6,D - LD HL,0x8000 - OR A - SBC HL,DE - EX DE,HL + LD (RunFLX.FLXmode),A + AND FLXMODES.M_ADRORG + LD HL,%0011111101000000 ; ᪠ 0x3F, 0x40 + JR NZ,.L3 + LD L,%11000000 ; 0x0 +.L3 LD A,B + AND H + OR L + LD B,A ; BC - ॠ ᪠ + LD (RunFLX.FLXexec),BC + LD A,D + AND H + OR 0x40 + LD H,A + LD L,E ; HL - ॠ 㧪 + LD DE,0x4000 ; ᪮쪮 㧨 (ᨬ) LD A,(.FLXHandle) SPDSS DSSF.READ .L2: EX AF,AF' @@ -1774,26 +1810,41 @@ RunFLX: LD HL,RestoreDIR SETPORT WINSP.CPU1,,0 EX AF,AF' PUSH AF - LD A,(.FLXHandle) + LD A,0 +.FLXHandle EQU $-1 SPDSS DSSF.CLOSE POP AF POP HL POP IY - RET C - LD DE,0x0000 + RET +; LOAD FLX PLUGIN + +RUNFLXONLY LD HL,RestoreDIR + PUSH HL + JR RunFLX.ONLYRUN + +; FLX 䠩 +RunFLX: LD HL,RestoreDIR + PUSH HL + CALL LOADFLX + RET C +; 㦥, ᪠ +.ONLYRUN LD DE,0x0000 ; ᪠ .FLXexec EQU $-2 - SET 7,D - SET 6,D - LD A,(RAMPAGES.FLX) - LD C,WINSP.CPU3 + LD A,(.FLXmode) + AND FLXMODES.M_ADRORG + LD C,WINSP.CPU1 ; ᪠ 0x4000 + JR NZ,.L3 + LD C,WINSP.CPU3 ; ᪠ 0xC000 +.L3 LD A,(RAMPAGES.FLX) ; ࠭ ᪠ PUSH IY CALL Resident POP IY CCF RET NC - LD A,0x00 + LD A,0 .FLXmode: EQU $-1 - OR A + AND FLXMODES.M_NORESTORE RET Z INC SP INC SP @@ -1807,19 +1858,19 @@ RunFLX: LD HL,RestoreDIR OR A RET -.FLXHandle: DEFB 0x00 - ;[]===========================================================[] -Help: LD DE,HelpR - LD A,(RAMPAGES.FNHELP) - LD C,WINSP.CPU1 - JP Resident +Help: CALL LOADFLX4RUN + DZ FILENAME.HELP_FLX + JP NC,RUNFLXONLY +; 뢮 訡 " " + LD A,FNinternal.PlugNotFound + JP DOSError ;[]----------------------------------------------------------[] ViewFileSH: BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) RET NZ - LD A,(IY+PANEL.EFL) - OR (IY+PANEL.EFH) + LD A,(IY+PANEL.FILES_ALL) + OR (IY+PANEL.FILES_ALL + 1) RET Z CALL ResInvert LD HL,SetInvert @@ -1875,12 +1926,20 @@ ViewFile: SUB A ;------------------------------------------- StViewFile: LD A,0x01 -.L1 LD (VFlag+1),A +.L1 LD (VFlag),A BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) RET NZ - LD A,(IY+PANEL.EFL) - OR (IY+PANEL.EFH) + LD A,(IY+PANEL.FILES_ALL) + OR (IY+PANEL.FILES_ALL + 1) RET Z + IFNDEF ENABLE.VIEW +; ⪠ 㧪 + CALL LOADFLX4RUN + DZ FILENAME.VIEW_FLX +; 뢮 訡 " " + LD A,FNinternal.PlugNotFound + JP C,DOSError + ENDIF GETPORT WINSP.CPU1 PUSH AF BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG) @@ -1889,10 +1948,10 @@ StViewFile: LD A,0x01 LD A,(RAMPAGES.RIGHTPANEL) .L2 SETPORT WINSP.CPU1,,0 - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) - LD E,(IY+PANEL.CFL) - LD D,(IY+PANEL.CFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) + LD E,(IY+PANEL.CURR_FILE) + LD D,(IY+PANEL.CURR_FILE + 1) ADD HL,DE ADD HL,HL ; *2 ADD HL,HL ; *4 @@ -1922,7 +1981,8 @@ StViewFile: LD A,0x01 CP (HL) JR NZ,.L3 LD (DE),A -VFlag: LD A,0x00 + LD A,0x00 +VFlag: EQU $-1 OR A JR NZ,View1 View: LD IX,fnview_ext @@ -1934,9 +1994,18 @@ View1: CALL ResInvert PUSH HL PUSH IY LD HL,PrevFile - LD DE,0xC000 - LD A,(RAMPAGES.FNVIEW) - LD C,WINSP.CPU3 + LD DE,(RunFLX.FLXexec) + LD A,(RunFLX.FLXmode) + AND FLXMODES.M_ADRORG + LD C,WINSP.CPU1 ; ᪠ 0x4000 + JR NZ,.L4 + LD C,WINSP.CPU3 ; ᪠ 0xC000 +.L4 + IFDEF ENABLE.VIEW + LD A,(RAMPAGES.FNVIEW) + ELSE + LD A,(RAMPAGES.FLX) + ENDIF CALL Resident POP IY RET C @@ -2010,9 +2079,17 @@ StEditFile: LD A,0x01 .L1 LD (EFlag),A BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) RET NZ - LD A,(IY+PANEL.EFL) - OR (IY+PANEL.EFH) + LD A,(IY+PANEL.FILES_ALL) + OR (IY+PANEL.FILES_ALL + 1) RET Z + IFNDEF ENABLE.VIEW +; ⪠ 㧪 + CALL LOADFLX4RUN + DZ FILENAME.EDIT_FLX +; 뢮 訡 " " + LD A,FNinternal.PlugNotFound + JP C,DOSError + ENDIF GETPORT WINSP.CPU1 PUSH AF BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG) @@ -2021,10 +2098,10 @@ StEditFile: LD A,0x01 LD A,(RAMPAGES.RIGHTPANEL) .L2 SETPORT WINSP.CPU1,,0 - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) - LD E,(IY+PANEL.CFL) - LD D,(IY+PANEL.CFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) + LD E,(IY+PANEL.CURR_FILE) + LD D,(IY+PANEL.CURR_FILE + 1) ADD HL,DE ADD HL,HL ; *2 ADD HL,HL ; *4 @@ -2067,9 +2144,18 @@ Edit1: CALL ResInvert PUSH HL PUSH IY LD HL,PrevFile - LD DE,CPU3 - LD A,(RAMPAGES.FNEDIT) - LD C,WINSP.CPU3 + LD DE,(RunFLX.FLXexec) + LD A,(RunFLX.FLXmode) + AND FLXMODES.M_ADRORG + LD C,WINSP.CPU1 ; ᪠ 0x4000 + JR NZ,.L4 + LD C,WINSP.CPU3 ; ᪠ 0xC000 +.L4 + IFDEF ENABLE.VIEW + LD A,(RAMPAGES.FNEDIT) + ELSE + LD A,(RAMPAGES.FLX) + ENDIF CALL Resident POP IY RET C diff --git a/plugins/calc/calc.a80 b/plugins/calc/calc.a80 index 91eb8f9..f5f3c30 100644 --- a/plugins/calc/calc.a80 +++ b/plugins/calc/calc.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 20.03.2025 savelij +; LAST UPDATE: 15.07.2025 savelij include macros.a80 include fn_const.a80 @@ -9,13 +9,7 @@ include macros_sp.a80 include dss_sp.a80 - org PluginOrg ; #C000 - Header lenght -; Flex Navigator plugin header -PluginStart: db "FLX-PLUG" ; Id - dw 0x0000 ; LoadOffset - dw PluginEntry ; EntryOffset - db 0x00 ; PluginMode - db 0x00,0x00,0x00 ; Reserved + HDR_FLX "-CALC" PluginEntry: MAKEWINDOW WINSUBOBJ.STORE diff --git a/plugins/cdplayer/build.bat b/plugins/cdplayer/build.bat index 512d2e8..27a9cd2 100644 --- a/plugins/cdplayer/build.bat +++ b/plugins/cdplayer/build.bat @@ -6,9 +6,13 @@ set path=d:\yad\svn\pentevo\tools\asl\bin\;d:\yad\svn\pentevo\tools\mhmt\;d:\yad call ..\..\setpath_includes set includes=%includes%;..\..\ -asl -U -L -C -x -olist tmp\flx-date.lst -i %includes% cdplayer.a80 || goto error +cls + +asl -U -L -C -x -olist tmp\cdplayer.lst -i %includes% cdplayer.a80 || goto error p2bin cdplayer.p ..\cdplayer.flx -r $-$ -k +copy /Y /B cdplayer.txt .. + echo ######################## echo # -= End Compile Ok =- # echo ######################## diff --git a/plugins/cdplayer/cdplayer.a80 b/plugins/cdplayer/cdplayer.a80 index ee4b509..988b446 100644 --- a/plugins/cdplayer/cdplayer.a80 +++ b/plugins/cdplayer/cdplayer.a80 @@ -1,32 +1,28 @@ -; LAST UPDATE: 20.03.2025 savelij +; LAST UPDATE: 15.07.2025 savelij -;// DEVICE ZXSPECTRUM128 -;// include '../FPLUGIN.INC' include macros.a80 include fn_const.a80 include fn_macros.a80 include accel_sp.a80 include ports_sp.a80 include define_sp.a80 + include errors_sp.a80 include macros_sp.a80 include dss_sp.a80 + include bios_sp.a80 + include vers.a80 - org PluginOrg ; #C000 - Header lenght -; Flex Navigator plugin header -PluginStart: db "FLX-PLUG" ; Id - dw 0x0000 ; LoadOffset - dw 0x0000 ; EntryOffset - db 0x00 ; PluginMode - db 0x00,0x00,0x00 ; Reserved +DEBUG EQU 0 +BUF_TOC EQU RESULT + 3000 -;// include 'dos_equ.inc' + HDR_FLX "-CDPL",,,FLXMODES.M_ADRORG PluginEntry: MAKEWINDOW WINSUBOBJ.STORE W_MAIN 78,79,484,72 W_FILL 4,2,464,10,COLORI.BLUE + COLORP.BLUE - W_TEXT 8,4,COLORI.WHITE + COLORP.BLUE,"SHAOS CD-Player v1.0 beta1" + W_TEXT 8,4,COLORI.WHITE + COLORP.BLUE,"SHAOS CD-Player v\{CDVERS}" W_BUTTONTEXT 468,2,12,10,COLORP.HIGHGRAY,"x" W_BORDER 8,15,268,38 W_FILL 10,16,264,36,COLORI.BLACK @@ -41,112 +37,90 @@ PluginEntry: W_HORIZLINE 2,56,480 W_END call JUMPS.ResFire - call shows - ld hl,cd_play - ld ix,201 - ld iy,95 - call show - ld hl,cd_paus - ld ix,241 - ld iy,95 - call show - ld hl,cd_stop - ld ix,261 - ld iy,95 - call show - ld hl,cd_ll - ld ix,181 - ld iy,115 - call show - ld hl,cd_l - ld ix,201 - ld iy,115 - call show - ld hl,cd_r - ld ix,221 - ld iy,115 - call show - ld hl,cd_rr - ld ix,241 - ld iy,115 - call show - ld hl,cd_ejec - ld ix,261 - ld iy,115 - call show - call shaos - call CDinit -plugin_loop: ld ix, PluginMouseTab + CALL SHOW_BUTTON ; 뢮 + IF DEBUG + CALL DEBUG_TXTKEYS ; ⫠ ⥪ + ENDIF + call CDinit ; Audio-CD + call BIGDIGITSALL +plugin_loop: LD HL,FLAG + BIT B_RDUPDATE,(HL) + JR NZ,.L2 +; 뢠 ⥪饥 ⮬ ० + SET B_RDUPDATE,(HL) + BIT B_PAUSE,(HL) + JR NZ,.L3 + BIT B_TRAY,(HL) + JR NZ,.L4 + BIT B_PLAY,(HL) + CALL NZ,RDSUBCHAN ; ⠥ ⥪饥 ६ ᫨ ३ ० + CALL UPDATE_CURRTRACK ; ப 뢮 +.L4 LD HL,(APCMD.PLAY_MSF + 6) ; ६ ᪠ + LD DE,(RESULT + 9) ; ⥪饥 ६ + AND A + SBC HL,DE + CALL Z,CDSTOP ; ਭ㤨⥫ ⮯ ᫨ ᪠ + JR .L3 + +; ᮢ뢠 ⥪ ࠭ +.L2 RES B_RDUPDATE,(HL) + BIT B_TRAY,(HL) + CALL Z,BIGDIGITSALL ; 뢮 ࠭ +; ᭮ 横 ࠢ +.L3 ld ix,PluginMouseTab call JUMPS.TestCoords -; ld c, 0x31 -; rst 0x10 SPDSS DSSF.SCANKEY - jr z, plugin_loop - ld a, b + jr z,plugin_loop + ld a,b or a - jr nz, plugin_loop - ld a, e - cp 0x1B - jr z, PluginExit + jr nz,plugin_loop + ld a,e + CALL CHECKHOTKEYS ; ஢ઠ ⪥ ᯨ + JR NC,plugin_loop +.L1 cp 0x1B + jr z,PluginExit cp 0x0D - jr nz, plugin_loop + jr nz,plugin_loop PluginExit: + CALL RESTORE_STATE WINDOWCLOSE or a ; cf = 0 ret -Ok: ld HL,String - ld DE,0x00CA - ld BC,0x00A0 - ld A,0x80 - call JUMPS.PrnTxtLnIFF - ret - ; hl - bitmap 32x16 for 16-color mode ; ix,iy - coords (320x256) -show: -; in a,(82h) +show: di GETPORT WINSP.CPU0 - ld (shwin),a -; ld a,50h -; out (82h),a + PUSH AF + GETPORT WINSP.Y_PORT + PUSH AF SETPORT WINSP.CPU0,0x50 push ix pop de - push iy - pop bc + LD C,IYL ld b,16 -show1: ld a,c -; out (89h),a +.L1: ld a,c SETPORT WINSP.Y_PORT,,0 push de - di -; ACC_SetBlockSize ACCEL ACCELCMD.SET_BUFFER ld a,16 -; ACC_CopyBlock ACCEL ACCELCMD.COPY ld a,(hl) ld (de),a -; ACC_Off ACCEL ACCELCMD.OFF - ei ld de,16 add hl,de pop de inc c dec b - jp nz,show1 -; ld a,0xFF -; out (89h),a - SETPORT WINSP.Y_PORT,0xFF - ld a,(shwin) -; out (82h),a + jp nz,.L1 + POP AF + SETPORT WINSP.Y_PORT,,0 + POP AF SETPORT WINSP.CPU0,,0 + ei ret -shwin db 0 - ; a - digit ; ix,iy - coords (320x256) showd: rlca @@ -157,18 +131,39 @@ showd: rlca call show ld de,16 add iy,de - call show - ret + jp show -; Show Digit string -shows: ld ix,46 - ld iy,97 - ld c,8 - ld hl,Digits -shows1: push bc +; ४ ६ ந뢠 㯭 ⮬ +BIGDIGITSALL: LD HL,(Digits) + LD (DigitsNone),HL ; ஢ ४ + LD HL,FLAG + BIT B_PAUSE,(HL) + LD DE,Digits ; 㬮砭 ᥣ + JR Z,.L3 +; 稪 ࣠ 㧥 + LD A,PAUSEDIGITS +.L4 EQU $-1 + DEC A + JR NZ,.L5 + LD A,PAUSEDIGITS +.L5 LD (.L4),A + JR NZ,.L6 + LD A,M_VIEWNONE + XOR (HL) + LD (HL),A +.L6 BIT B_VIEWNONE,(HL) + JR Z,.L3 + LD DE,DigitsNone ; ⮥ ६ ० 㧠 +; ⥪饣 ४ ६ +.L3 EX DE,HL +; HL - 뢮 ⥪饣 ४/६ ࠭ + ld ix,46 ; X + ld c,8 ; ᪮쪮 ᨬ ᮢ +.L2 ld iy,97 ; Y +.L1: push bc push hl push iy - ld a,(hl) + ld a,(hl) call showd ld bc,16 add ix,bc @@ -177,77 +172,546 @@ shows1: push bc pop bc inc hl dec c - jp nz,shows1 + jp nz,.L1 ret - include cdrom.a80 +CHANGEDISK: LD A,(CDDRIVE) + SPBIOS BIOSF.DRV_RESET + JR NC,.cont + CP ERR_DRV.ATAPI_UnitAttention + JR Z,.drv_change + CP ERR_DRV.ATAPI_NotReady + SCF + RET NZ + LD A,ERR_DSS.NOT_READY + RET -CDinit: call CD_INI - jr nc,noCD -yesCD: call SAVE_BUF - ld hl,CD_BUF - ld bc,54 - add hl,bc - ld de,msg_ -yesCD1: ld a,(hl) - ld (de),a - or a - jr z,yesCD0 - inc hl - inc de - jr yesCD1 +.drv_change: LD A,(CDDRIVE) + CALL SAVE_MEDIA_CHANGED +.cont: CALL INITDISK + RET C + AND A + RET +INITDISK: LD B,4 +.CD_I_LP PUSH BC + LD IX,0x0010 + LD HL,0x0000 + LD DE,RESULT + LD A,(CDDRIVE) + SPBIOS BIOSF.DRV_READ,1 + POP BC + JR NC,.CD_I_OK + DJNZ .CD_I_LP +.UNKCD LD A,ERR_DSS.UNKNOWN_FORMAT + SCF + RET + +.CD_I_OK LD HL,RESULT + LD A,(HL) + INC HL + DEC A + JR NZ,.UNKCD + LD A,(HL) + INC HL + CP 'C' + JR NZ,.UNKCD + LD A,(HL) + INC HL + CP 'D' + JR NZ,.UNKCD + XOR A + RET + +RESTORE_STATE: LD B,1 +.set_par: EQU $-1 + LD A,(CDDRIVE) + SPBIOS BIOSF.DRV_SET_PAR + RET + +SAVE_MEDIA_CHANGED: + SPBIOS BIOSF.DRV_GET_PAR + OR %00000010 + LD B,A + LD A,(RESTORE_STATE.set_par) + OR B + LD (RESTORE_STATE.set_par),A + RET + +; CD-ROM 樠 +CDinit: LD B,0xC0 - 1 +.loop: INC B + LD A,B + CP 0xC4 + SCF + JP Z,noCD + PUSH BC + SPBIOS BIOSF.DRV_DETECT + POP BC + JR NC,.found + CP ERR_DRV.ATAPI_MediumError + JR Z,.found + CP ERR_DRV.ATAPI_UnitAttention + JR NZ,.loop +.found: LD A,B + LD (CDDRIVE),A + CALL yesCD0 +.CLOSETRAY LD HL,APCMD.CLOSETRAY + CALL SEND_PACKET + CALL CHANGEDISK + LD HL,FLAG + RES B_TRAY,(HL) +.UPDATE_TOC LD HL,RESULT+6 + LD (HL),0xAA + LD HL,APCMD.READTOC + CALL SEND_PACKET + LD HL,RESULT-2 + LD B,0xFF + LD DE,8 +.L1 INC B + ADD HL,DE + LD A,(HL) + CP 0xAA + JR NZ,.L1 + LD A,B + LD (TRACKS),A +; ନ஢ ⠡ ४ + LD HL,RESULT + 4 + 5 + LD A,(RESULT + 3) + LD DE,BUF_TOC + 3 ; 㫥 +.L2 EX AF,AF' + LDI + LDI + LDI + LD A,5 + ADD A,L + LD L,A + ADC A,H + SUB L + LD H,A + EX AF,AF' + DEC A + JP NZ,.L2 + LD DE,APCMD.PLAY_MSF + 6 ; ᪠ + LDI + LDI + LDI + LD A,(TRACKS) + LD HL,TXTTRACKS.DIGITS + CALL A2HALFDEC + LD A,'0' + ADD A,(HL) + LD (HL),A + DEC HL + LD A,'0' + ADD A,(HL) + LD (HL),A + LD HL,TXTTRACKS + LD DE,360 + LD BC,140 + LD A,COLORP.HIGHGRAY + COLORI.BLUE + CALL JUMPS.PrnTxtLnIFF + LD A,1 + LD (CURRENT.TRACK),A +; ⥪饣 ४ ६ ࠭ ࠭ +UPDATE_CURRTRACK + LD A,(CURRENT.TRACK) + LD HL,Digits + CALL A2HALFDEC + LD A,(CURRENT.MINUTE) + LD HL,Digits.MIN + CALL A2HALFDEC + LD A,(CURRENT.SECUND) + LD HL,Digits.SEC +; ᫠ 뢮 ᯫ +A2HALFDEC LD BC,10 +.L1 INC B + SUB C + JR NC,.L1 + DEC B + ADD A,C + LD (HL),B + INC HL + LD (HL),A + RET + + IF DEBUG +A2HEX PUSH AF + AND %11110000 + RRCA + RRCA + RRCA + RRCA + CALL .L2 + LD B,A + POP AF + AND %00001111 +.L2 ADD A,'0' + CP '9'+1 + RET C + ADD A,7 + RET + ENDIF + +; CD-ROM yesCD0: ld hl,msgY - ld a,0x80 + ld a,COLORP.HIGHGRAY + COLORI.BLUE jr CDprn +; CD-ROM noCD: ld hl,msgN - ld a,0x81 + ld a,COLORP.HIGHGRAY + COLORI.RED CDprn: ld de,84 ld bc,140 - call JUMPS.PrnTxtLnIFF - ret + JP JUMPS.PrnTxtLnIFF -msgY db "CD-ROM is present " -msg_ DB 100 DUP 0 -msgN db "CD-ROM is absent",0 +msgY DZ "CD-ROM is present" +msgN DZ "CD-ROM is absent" +TXTTRACKS DZ "Tracks: 00" ; ⢮ ४ ᪥ +.DIGITS EQU $-3 -CDplay: ld hl,AP_PLA - call ATAPI - ret +; ᮢ ⠡窥 権 +SHOW_BUTTON LD HL,TABLBUTTONS +.L1 LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD A,D + OR E + RET Z + PUSH DE + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD IXH,D + LD IXL,E + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD IYH,D + LD IYL,E + EX (SP),HL + CALL show + POP HL + JR .L1 -CDejec: ld hl,AP_CD2 - call ATAPI - ret + IF DEBUG +; ⠡ ᪠ ⪥ +DEBUG_TXTKEYS LD HL,DEBUGTABLKEYS +.L1 LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD A,D + OR E + RET Z + PUSH DE + LD E,(HL) + INC HL + LD D,(HL) + INC HL + LD C,(HL) + INC HL + LD B,(HL) + INC HL + EX (SP),HL + LD A,COLORP.HIGHGRAY + COLORI.RED + CALL JUMPS.PrnTxtLnIFF + POP HL + JR .L1 + ENDIF +; ஢ઠ ⪥ ⠡ +CHECKHOTKEYS LD HL,TABLHOTKEYS +.L1 LD B,(HL) + INC B + DEC B + SCF + RET Z + INC HL + LD E,(HL) + INC HL + LD D,(HL) + INC HL + CP B + JR NZ,.L1 + PUSH AF + EX DE,HL + CALL JP_HL + POP AF + AND A + RET -Digits db 0x00,0x00,0x0B,0x00,0x00,0x0A,0x00,0x00 +JP_HL JP (HL) +; ⥭ ⥪饣 ﭨ ࠭ +RDSUBCHAN LD HL,APCMD.RDSUBCHAN + CALL SEND_PACKET + LD A,(RESULT + 6) + LD (CURRENT.TRACK),A + LD HL,RESULT + 13 + LD DE,CURRENT.MINUTE + LDI + LDI + RET -PluginMouseTab: dw 546,558,81,91,0x21,0,PluginExit,PluginExit - dw 360,476, 94,112,0x01,0,CDplay,0 - dw 480,516, 94,112,0x01,0,0,0 - dw 520,556, 94,112,0x01,0,0,0 - dw 360,396,114,132,0x01,0,0,0 - dw 400,436,114,132,0x01,0,0,0 - dw 440,476,114,132,0x01,0,0,0 - dw 480,516,114,132,0x01,0,0,0 - dw 520,556,114,132,0x01,0,CDejec,0 +; ⠭ 樨 ࠭ +SETPOS_MSF EXX + LD HL,(CURRENT.TRACK) + LD H,0 + LD E,L + LD D,H + ADD HL,HL + ADD HL,DE + LD DE,BUF_TOC + ADD HL,DE + LD DE,APCMD.PLAY_MSF + 3 + LDI + LDI + LDI + EXX + RET -PluginMT2: dw 252,324,138,156,0x01,0,Ok,0 - dw 0x8000 +; ६⪠ +REWIND LD A,(FLAG) + BIT B_PAUSE,A + RET NZ + BIT B_PLAY,A + RET Z +; ⮫쪮 ० + CALL RDSUBCHAN + LD HL,APCMD.PLAY_MSF + 3 + LD DE,(RESULT + 9) + LD A,D + SUB PAUSE + LD D,A + JR NC,.L1 + ADD A,60 + LD D,A ; ᥪ㭤 + DEC E ; +.L1 LD (HL),E ; + INC HL + LD (HL),D ; ᥪ㭤 + INC HL + LD (HL),0 ; ३ + JR CDPLAY.L1 -StringBuf: db 16,1 - db 0,0,0 - dw 0x00CC,0x0057,0x00E8 - db 0xF0 +; ६⪠ । +FORWARD LD A,(FLAG) + BIT B_PAUSE,A + RET NZ + BIT B_PLAY,A + RET Z +; ⮫쪮 ० + CALL RDSUBCHAN + LD HL,APCMD.PLAY_MSF + 3 + LD DE,(RESULT + 9) + LD A,D + ADD A,PAUSE + LD D,A + CP 60 + JR C,REWIND.L1 + SUB 60 + LD D,A ; ᥪ㭤 + INC E ; + JR REWIND.L1 -String: DB 16 DUP 0 - DB 13 DUP 0 +; ।騩 ४ +PREV_TRACK LD HL,CURRENT.TRACK + LD A,(HL) + DEC A + RET Z + DEC (HL) + JR NEXT_TRACK.L1 - include shaos.a80 - include cd.a80 +; ᫥騩 ४ +NEXT_TRACK LD HL,CURRENT.TRACK + LD A,(TRACKS) + CP (HL) + RET Z + INC (HL) +.L1 LD HL,0 + LD (CURRENT.MINUTE),HL + CALL SETPOS_MSF ; ⠭ 樨 + CALL UPDATE_CURRTRACK ; ப ४ ६ + CALL BIGDIGITSALL ; ᮢ ࠭ ப ४ ६ + LD HL,FLAG + BIT B_PLAY,(HL) ; ० ? + RET Z ; 室 ᫨ + BIT B_PAUSE,(HL) ; ० ? + RET NZ ; 室 ᫨ + JR CDPLAY.L1 ; ᪠ ४ + +; ४ +CDPLAY: LD HL,FLAG + BIT B_PAUSE,(HL) + JR NZ,CDPAUSE.PAUSEON ; ᫨ ० 㧠, ᭠砫 ० + BIT B_PLAY,(HL) + RET NZ ; ᫨ ० , 室 +.L2 SET B_PLAY,(HL) + CALL SETPOS_MSF +.L1 LD HL,APCMD.PLAY_MSF + JP SEND_PACKET + +CDPAUSE LD HL,FLAG + BIT B_PLAY,(HL) + RET Z ; ᫨ ⮯ ਬ + BIT B_PAUSE,(HL) + JR NZ,.PAUSEON +; 祭 ० 㧠 + SET B_PAUSE,(HL) + CALL RDSUBCHAN + LD HL,(RESULT + 9) + LD (CURRENT.PAUSE_POS),HL + LD HL,APCMD.PAUSE + JP SEND_PACKET + +; 몫祭 ० 㧠 +.PAUSEON RES B_PAUSE,(HL) + RES B_VIEWNONE,(HL) + BIT B_PAUSENEW,(HL) + RES B_PAUSENEW,(HL) + JP Z,CDPLAY.L1 + LD HL,(CURRENT.PAUSE_POS) + LD (APCMD.PLAY_MSF + 3),HL + JR CDPLAY.L1 + +; ⠭ +CDSTOP: LD HL,FLAG + RES B_PLAY,(HL) + RES B_PAUSE,(HL) + RES B_VIEWNONE,(HL) + LD A,1 + LD (CURRENT.TRACK),A + LD HL,0 + LD (CURRENT.MINUTE),HL + CALL SETPOS_MSF + CALL UPDATE_CURRTRACK + CALL BIGDIGITSALL +; ⮯ +CD_APSTOP LD HL,APCMD.STOP +; 뫪 ATAPI +SEND_PACKET LD DE,RESULT + LD A,0 +CDDRIVE EQU $-1 + SPBIOS BIOSF.DRV_EXTENDED,DRV_EXTENDED.ATAPI_Custom_PCMD + RET + +; ⨥/⨥ +CDEJECT: CALL CDSTOP + LD HL,FLAG + BIT B_TRAY,(HL) + SET B_TRAY,(HL) + JP NZ,CDinit.CLOSETRAY ; ⨥ २ +; ⨥ + LD HL,APCMD.OPENTRAY + CALL SEND_PACKET + LD HL,BUF_TOC + LD DE,BUF_TOC + 1 + LD BC,99 * 3 + LD (HL),0 + LDIR + RET + + IF DEBUG +TXT +.D1 DZ "1" +.D2 DZ "2" +.D3 DZ "3" +.D4 DZ "4" +.D5 DZ "5" +.D6 DZ "6" +.D7 DZ "7" +.D8 DZ "8" + +DEBUGTABLKEYS DW TXT.D1,363,95 + DW TXT.D2,483,95 + DW TXT.D3,523,95 + DW TXT.D4,363,115 + DW TXT.D5,403,115 + DW TXT.D6,443,115 + DW TXT.D7,483,115 + DW TXT.D8,523,115 + DW 0 + ENDIF + +; ⠡ +TABLBUTTONS DW cd_play,201,95 + DW cd_paus,241,95 + DW cd_stop,261,95 + DW cd_ll,181,115 + DW cd_l,201,115 + DW cd_r,221,115 + DW cd_rr,241,115 + DW cd_ejec,261,115 + DW 0 + +; ⪥ +TABLHOTKEYS DB '1' + DW CDPLAY ; + DB '2' + DW CDPAUSE ; 㧠 + DB '3' + DW CDSTOP ; ⮯ + DB '4' + DW PREV_TRACK ; ।騩 ४ + DB '5' + DW REWIND ; ६⪠ + DB '6' + DW FORWARD ; ६⪠ । + DB '7' + DW NEXT_TRACK ; ᫥騩 ४ + DB '8' + DW CDEJECT ; ⨥/⨥ + DB 0 + +; ⥪騩 ४ ⥪饥 ६ ४ +Digits DB 0x00,0x00,0x0B +.MIN DB 0x00,0x00,0x0A +.SEC DB 0x00,0x00 +; ⮥ ६ ࣠ 㧥 +DigitsNone DB 0x0B,0x0B,0x0B,0x0B,0x0B,0x0A,0x0B,0x0B + +; ⠡ +PluginMouseTab: dw 546,558, 81, 91,%0000000000100001,0,PluginExit,PluginExit + dw 360,476, 94,112,%0000000000000001,0,CDPLAY,0 + dw 480,516, 94,112,%0000000000000001,0,CDPAUSE,0 + dw 520,556, 94,112,%0000000000000001,0,CDSTOP,0 + dw 360,396,114,132,%0000000000000001,0,PREV_TRACK,0 + dw 400,436,114,132,%0000000000000001,0,REWIND,0 + dw 440,476,114,132,%0000000000000001,0,FORWARD,0 + dw 480,516,114,132,%0000000000000001,0,NEXT_TRACK,0 + dw 520,556,114,132,%0000000000000001,0,CDEJECT,0 + dw 0x8000 + +APCMD + ; 00 01 02 03 04 05 06 07 08 09 0A 0B +.STOP DB 0x4E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.PAUSE DB 0x4B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +; SM SS SF EM ES EF +.PLAY_MSF DB 0x47,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ; 3-5 START MSF, 6-8 END MSF +.READTOC DB 0x43,0x02,0x00,0x00,0x00,0x00,0x01,0x03,0x24,0x00,0x00,0x00 +.CLOSETRAY DB 0x1B,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.OPENTRAY DB 0x1B,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +.RDSUBCHAN DB 0x42,0x02,0x40,0x01,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00 + + include icons.a80 include digits.a80 -PluginEnd: -;// savebin 'Build/FN/Plugins/cdplayer.flx',PluginStart,PluginEnd-PluginStart +FLAG DB 0 + BITMASK TRAY, 7 ; 1-३ , 0-३ + BITMASK RDUPDATE, 6 ; 1- ६,0-⥭ ६ + BITMASK PAUSE, 5 ; 1-० ,0- + BITMASK PLAY, 4 ; 1-० ⨢,0- + BITMASK PAUSENEW, 3 ; 1- ० 㧠 室 㣮 ४ + BITMASK VIEWNONE, 2 ; 1- ,0-ଠ +CURRENT ; ४ ६ 뢮 ࠭ +.TRACK DB 0 ; ⥪騩 ४ +.MINUTE DB 0 ; ⥪ +.SECUND DB 0 ; ⥪ ᥪ㭤 +.PAUSE_POS DW 0 ; ⥪ +TRACKS DB 0 ; ⢮ ४ ᪥ +; 砫 祭 १ 믮 ATAPI +RESULT DB 0 ; १ 믮 ATAPI diff --git a/plugins/cdplayer/cdplayer.txt b/plugins/cdplayer/cdplayer.txt new file mode 100644 index 0000000..259f25a --- /dev/null +++ b/plugins/cdplayer/cdplayer.txt @@ -0,0 +1,46 @@ + + SHAOS CD-Player Flex Navigator ।祭 ࠢ +ந 樨 Audio CD ᪮. + ⥬ ॡ: FN ᨨ 1.16 . + + ࠢ ஬ ந 稬 蠬. +᮪ ࠢ: +1 - ; +2 - 㧠, ⮬ ० 稭 ࣠ ६ ந뢠; +3 - ⮯; +4 - ३ ।騩 ४; +5 - ६⪠ , ⨥ ᪠ 10 ᥪ㭤 + (⮫쪮 ० ); +6 - ६⪠ ।, ⨥ ᪠ 10 ᥪ㭤 + (⮫쪮 ० ); +7 - ३ ᫥騩 ४; +8 - / ३ ਢ CD ᪮. ﭨ ஫. + ⨥ , ᫥饥 ⨥ + . + +" , ": +- ⨥ ⮯ ᥣ 뢠 ६ ࠭ 0 室 ४; +- ६⪠ ࠡ⠥ ⮫쪮 ० ; +- 室 ந த. ᫥饬 + ᪥ ᫨ ந 㤥 뢠 ० ⮯ + ४ 1, ६ 00:00. +- ० 㧠 室 ᫥騩/।騩 ४ ६ 뢠 00:00. + +History: + 1.1 +- ᮢ ஥ 㯭 . +- ࠫ ࠢ ᤥ ࠢ . +- ० 㧠 ᤥ ࣠ ६ ࠭. +- ६⪠ ᤥ 10 ᥪ㭤 ⮫쪮 ० . +- ᯮ짮 , 室 㬥 ⮫쪮 + ⨥ . +- 2 뢠 ⥪饣 ४, ⠫ 뢠 + ६ ந뢠 ४. +- ᤥ ⢠ ४ ᪥. +- ࠭ 㭪樮. +- ࠢ 뢮 ४ ६ ࠭, ᡮ. +- ࠢ CD ਢ ᤥ 뫪 ATAPI ⠬ १ BIOS. +- ࠭ ࠡ १ IDE, 室 ⠢. +- ࠭ , 室 ⠢. +- ࠡ⪠ 室 ᨨ SHAOS CD-Player v1.0 beta1. + diff --git a/plugins/cdplayer/cdrom.a80 b/plugins/cdplayer/cdrom.a80 index b8925f1..038d045 100644 --- a/plugins/cdplayer/cdrom.a80 +++ b/plugins/cdplayer/cdrom.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 11.03.2025 savelij +; LAST UPDATE: 30.06.2025 savelij ; CDROM.A - Alexander Shabarshin 13.10.2002 @@ -106,14 +106,11 @@ CD_TRANS: ld d,(hl) ; HL - address of 12-bytes command SEND_ATAPI: ld de,CD_BUF di -; ACC_SetBlockSize ACCEL ACCELCMD.SET_BUFFER ld a,12 -; ACC_CopyBlock ACCEL ACCELCMD.COPY ld a,(hl) ld (de),a -; ACC_Off ACCEL ACCELCMD.OFF ei SA0: call NO_BSY @@ -191,21 +188,14 @@ NO_CDROM: pop hl SAVE_BUF: push hl ld hl,FNAME -; ld c,Dss.Create -; ld a,0 -; rst ToDSS SPDSS DSSF.CREATE,,0 ld (FHAND),a -; ld c,Dss.Write ld a,(FHAND) ld de,2048 ld hl,CD_BUF -; rst ToDSS SPDSS DSSF.WRITE ; !FIXIT WRITE ERROR -; ld c,0x12 ld a,(FHAND) -; rst ToDSS SPDSS DSSF.CLOSE pop hl ret @@ -214,14 +204,12 @@ FNAME db "cd_buf.dat",0 FHAND db 0 AP_NOP: ld hl,AP_00 - call SEND_ATAPI - ret + JP SEND_ATAPI ; ATAPI command ; HL - address of ATAPI command (AP_*) ATAPI: -AP_COM: call SEND_ATAPI - ret +AP_COM: JP SEND_ATAPI AP_00 db 0x00 DB 11 DUP 0 diff --git a/plugins/cdplayer/digits.a80 b/plugins/cdplayer/digits.a80 index f3a80fa..ad31448 100644 --- a/plugins/cdplayer/digits.a80 +++ b/plugins/cdplayer/digits.a80 @@ -1,384 +1,402 @@ -digit0 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -digit1 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -digit2 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -digit3 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -digit4 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -digit5 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -digit6 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -digit7 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x22,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x22,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -digit8 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -digit9 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x22,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -digi_sp db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -digi_ss db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 + +; LAST UPDATE: 25.07.2025 savelij + +ii EQU COLORP.BLACK + COLORI.BLACK ; 䮭 +HH EQU COLORP.YELLOW + COLORI.YELLOW ; ᥫ + +; 0 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F +digit0 db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii ; 00 + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii ; 01 + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii ; 02 + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii ; 03 + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii ; 04 + db ii,ii,HH,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii ; 05 + db ii,ii,HH,HH,ii,HH,HH,HH,HH,HH,HH,ii,HH,HH,ii,ii ; 06 + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii ; 07 + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii ; 08 + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii ; 09 + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii ; 0A + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii ; 0B + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii ; 0C + db ii,ii,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii ; 0D + db ii,ii,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,ii,ii ; 0E + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii ; 0F + db ii,ii,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,ii,ii ; 10 + db ii,ii,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii ; 11 + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii ; 12 + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii ; 13 + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii ; 14 + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii ; 15 + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii ; 16 + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii ; 17 + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii ; 18 + db ii,ii,HH,HH,ii,HH,HH,HH,HH,HH,HH,ii,HH,HH,ii,ii ; 19 + db ii,ii,HH,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii ; 1A + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii ; 1B + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii ; 1C + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii ; 1D + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii ; 1E + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii ; 1F +; 1 +digit1 db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii +; 2 +digit2 db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii + db ii,ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii + db ii,ii,ii,ii,ii,HH,HH,HH,HH,HH,HH,ii,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii + db ii,ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii + db ii,ii,HH,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii,ii + db ii,ii,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,HH,ii,HH,HH,HH,HH,HH,HH,ii,ii,ii,ii,ii + db ii,ii,HH,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii,ii + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii +; 3 +digit3 db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii + db ii,ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii + db ii,ii,ii,ii,ii,HH,HH,HH,HH,HH,HH,ii,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii + db ii,ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii + db ii,ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,HH,HH,HH,HH,HH,HH,ii,HH,HH,ii,ii + db ii,ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii +; 4 +digit4 db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,ii,ii + db ii,ii,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii + db ii,ii,HH,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii + db ii,ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii +; 5 +digit5 db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii + db ii,ii,HH,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii,ii + db ii,ii,HH,HH,ii,HH,HH,HH,HH,HH,HH,ii,ii,ii,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii,ii + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii + db ii,ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,HH,HH,HH,HH,HH,HH,ii,HH,HH,ii,ii + db ii,ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii +; 6 +digit6 db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii + db ii,ii,HH,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii,ii + db ii,ii,HH,HH,ii,HH,HH,HH,HH,HH,HH,ii,ii,ii,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,HH,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii,ii + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii + db ii,ii,HH,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii + db ii,ii,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,ii,HH,HH,HH,HH,HH,HH,ii,HH,HH,ii,ii + db ii,ii,HH,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii +; 7 +digit7 db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii + db ii,ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii + db ii,ii,ii,ii,ii,HH,HH,HH,HH,HH,HH,ii,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii +; 8 +digit8 db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii + db ii,ii,HH,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii + db ii,ii,HH,HH,ii,HH,HH,HH,HH,HH,HH,ii,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii + db ii,ii,HH,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii + db ii,ii,HH,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii + db ii,ii,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,ii,HH,HH,HH,HH,HH,HH,ii,HH,HH,ii,ii + db ii,ii,HH,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii +; 9 +digit9 db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii + db ii,ii,HH,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii + db ii,ii,HH,HH,ii,HH,HH,HH,HH,HH,HH,ii,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,HH,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,HH,HH,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii + db ii,ii,HH,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii + db ii,ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,HH,HH,HH,ii,ii + db ii,ii,ii,ii,ii,HH,HH,HH,HH,HH,HH,ii,HH,HH,ii,ii + db ii,ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,ii,HH,ii,ii + db ii,ii,ii,HH,HH,HH,HH,HH,HH,HH,HH,HH,HH,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii +; 稥 +digi_sp db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,HH,HH,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii +; ஡ +digi_ss db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii + db ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii,ii diff --git a/plugins/cdplayer/cd.a80 b/plugins/cdplayer/icons.a80 similarity index 100% rename from plugins/cdplayer/cd.a80 rename to plugins/cdplayer/icons.a80 diff --git a/plugins/cdplayer/shaos.a80 b/plugins/cdplayer/shaos.a80 index f538623..a6490ad 100644 --- a/plugins/cdplayer/shaos.a80 +++ b/plugins/cdplayer/shaos.a80 @@ -1,30 +1,23 @@ -; LAST UPDATE: 03.02.2025 savelij +; LAST UPDATE: 30.06.2025 savelij ; Shaos face shaos: ld hl,shaosraw ld de,44 ld c,95 ld b,36 -; in a,(82h) GETPORT WINSP.CPU0 ld (shaowin),a -; ld a,50h -; out (82h),a SETPORT WINSP.CPU0,0x50 shaos1: ld a,c -; out (89h),a - SETPORT WINSP.CPU0,,0 + SETPORT WINSP.Y_PORT,,0 push de di -; ACC_SetBlockSize ACCEL ACCELCMD.SET_BUFFER ld a,32 -; ACC_CopyBlock ACCEL ACCELCMD.COPY ld a,(hl) ld (de),a -; ACC_Off ACCEL ACCELCMD.OFF ei ld de,32 @@ -33,11 +26,8 @@ shaos1: ld a,c inc c dec b jp nz,shaos1 -; ld a,0xFF -; out (89h),a SETPORT WINSP.Y_PORT,0xFF ld a,(shaowin) -; out (82h),a SETPORT WINSP.CPU0,,0 ret diff --git a/plugins/cdplayer/vers.a80 b/plugins/cdplayer/vers.a80 new file mode 100644 index 0000000..533feed --- /dev/null +++ b/plugins/cdplayer/vers.a80 @@ -0,0 +1,7 @@ + +; LAST UPDATE: 11.07.2025 savelij + +CDVERS EQU "1.1" + +PAUSE EQU 10 ; 蠣 ᥪ㭤 ६⪨ +PAUSEDIGITS EQU 12 ; 㧠 ࣠ ० 㧠 \ No newline at end of file diff --git a/plugins/date/date.a80 b/plugins/date/date.a80 index 860261b..4f7e515 100644 --- a/plugins/date/date.a80 +++ b/plugins/date/date.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 31.03.2025 savelij +; LAST UPDATE: 15.07.2025 savelij include macros.a80 include fn_const.a80 @@ -7,12 +7,9 @@ include macros_sp.a80 include dss_sp.a80 - org PluginOrg -PluginStart: db "FLX-PLUG" - dw 0 - dw PluginEntry - db 0 - db 0,0,0 + HDR_FLX "-DATE" + + JP PluginEntry db "Date preferences plug-in for Flex Navigator",0 db "2003 (c) Mac Buster",0 diff --git a/plugins/fneditor/feditor.a80 b/plugins/fneditor/feditor.a80 index bf667bb..435ec51 100644 --- a/plugins/fneditor/feditor.a80 +++ b/plugins/fneditor/feditor.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 11.03.2025 savelij +; LAST UPDATE: 18.07.2025 savelij INIT_VAR SETVAR CursorX ;EQU 0x00 @@ -307,7 +307,7 @@ SureLoop LD IX,SureTab SCF JR Z,SureExit CP 0x0D - JR Z,SureExit + JR Z,SureOkey RES 5,A CP 'N' JR Z,SureExit @@ -704,7 +704,7 @@ FEAbout CALL FEResCursor W_FILL 4,2,312,10,COLORI.BLACK W_TEXT 144,3,COLORI.WHITE,"About" W_TEXT 96,18,COLORP.HIGHGRAY,"Flex Navigator File Editor" - W_TEXT 144,28,COLORP.HIGHGRAY,"v\{FLEX_VERS.EDITOR}" + W_TEXT 96,28,COLORP.HIGHGRAY,"v\{FLEX_VERS.EDITOR} build \{BUILDDATE}" W_TEXT 18,40,COLORP.HIGHGRAY,"Programming: (C)2000 Enin Anton" W_TEXT 92,50,COLORP.HIGHGRAY,"(C)2021 Mikhaltchenkov Dmitry" W_BUTTON 124,66,72,14 diff --git a/plugins/fneditor/femain.a80 b/plugins/fneditor/femain.a80 index 2412d30..b975033 100644 --- a/plugins/fneditor/femain.a80 +++ b/plugins/fneditor/femain.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 20.03.2025 savelij +; LAST UPDATE: 18.07.2025 savelij include macros.a80 include fn_const.a80 @@ -13,12 +13,6 @@ include bios_sp.a80 include mouse_sp.a80 - org PluginOrg ; #C000 - Header lenght -; Flex Navigator plugin header -PluginStart: db "FLX-PLUG" ; Id - dw 0x0000 ; LoadOffset - dw 0x0000 ; EntryOffset - db 0x00 ; PluginMode - db 0x00,0x00,0x00 ; Reserved + HDR_FLX "-EDIT",,,;FLXMODES.M_ADRORG -PluginEntry: include feditor.a80 + include feditor.a80 diff --git a/plugins/fneditor/fesetup.a80 b/plugins/fneditor/fesetup.a80 index 7096e45..d835197 100644 --- a/plugins/fneditor/fesetup.a80 +++ b/plugins/fneditor/fesetup.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 24.03.2025 savelij +; LAST UPDATE: 16.07.2025 savelij FECSign: DB "FEC" HomeKeyFlag: DB 0 @@ -28,7 +28,7 @@ ReadEditorIni: ld a,0 POP IY GETPORT WINSP.CPU1 PUSH AF - LD A,(JUMPS.FNFUNCT) + LD A,(JUMPS.FNREZ2) SETPORT WINSP.CPU1,,0 LD HL,ADDR.FlexDIRECTORY PUSH IY @@ -244,7 +244,7 @@ FESetupOkey: ld a,(ExitDlgFlag) SPDSS DSSF.CURDIR GETPORT WINSP.CPU1 PUSH AF - LD A,(JUMPS.FNFUNCT) + LD A,(JUMPS.FNREZ2) SETPORT WINSP.CPU1,,0 LD HL,ADDR.FlexDIRECTORY SPDSS DSSF.CHDIR diff --git a/plugins/fnviewer/fvmain.a80 b/plugins/fnviewer/fvmain.a80 index 1784503..8536e66 100644 --- a/plugins/fnviewer/fvmain.a80 +++ b/plugins/fnviewer/fvmain.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 30.05.2025 savelij +; LAST UPDATE: 18.07.2025 savelij include macros.a80 @@ -15,12 +15,6 @@ include fat_dir_sp.a80 include macros_sp.a80 - org PluginOrg ; #C000 - Header lenght -; Flex Navigator plugin header -PluginStart: db "FLX-PLUG" ; Id - dw 0x0000 ; LoadOffset - dw 0x0000 ; EntryOffset - db 0x00 ; PluginMode - db 0x00,0x00,0x00 ; Reserved + HDR_FLX "-VIEW",,,;FLXMODES.M_ADRORG -PluginEntry: include fviewer.a80 + include fviewer.a80 diff --git a/plugins/help/header.a80 b/plugins/help/header.a80 index 929ab4b..cdba762 100644 --- a/plugins/help/header.a80 +++ b/plugins/help/header.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 26.03.2025 savelij +; LAST UPDATE: 15.07.2025 savelij include macros.a80 include fn_const.a80 @@ -16,13 +16,7 @@ WINSP_CPU EQU WINSP.CPU1 WINSP_ADR EQU 0x4000 - org PluginOrg ; #C000 - Header lenght -; Flex Navigator plugin header -PluginStart: db "FLX-PLUG" ; Id - dw 0x0000 ; LoadOffset - dw 0x0000 ; EntryOffset - db 0x00 ; PluginMode - db 0x00,0x00,0x00 ; Reserved + HDR_FLX "-HELP" PluginEntry: include help.a80 diff --git a/plugins/help/help_t.a80 b/plugins/help/help_t.a80 index d85b599..20eaa94 100644 --- a/plugins/help/help_t.a80 +++ b/plugins/help/help_t.a80 @@ -1,9 +1,9 @@ -; LAST UPDATE: 25.06.2025 savelij +; LAST UPDATE: 27.06.2025 savelij DB 0,0 DB " Flex Navigator",0,0 - DB " version \{FLEX_VERS.NAVIGATOR}",0,0,0 + DB " version \{FLEX_VERS.NAVIGATOR}",0,0,0 DB " Copyright (C) 2000, Enin Anton, St.-Petersburg, Russia",0 DB " Copyright (C) \{SUBSTR(DATE,STRLEN(DATE)-4,4)}, Sprinter Team",0 DB 0 @@ -112,7 +112,7 @@ DB " Filtr... - 䨫 ᯨ᪠ 䠩",0 DB " Name - ஢ ",0 DB " Extention - ஢ ७",0 - DB " Data - ஢ ",0 + DB " Date - ஢ ",0 DB " Size - ஢ ࠧ",0 DB " Unsorted - ஢",0,0,0," ",9 DB " - Config -",0,0 diff --git a/plugins/test/test.a80 b/plugins/test/test.a80 index e02a9d7..4fcc967 100644 --- a/plugins/test/test.a80 +++ b/plugins/test/test.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 24.03.2025 savelij +; LAST UPDATE: 15.07.2025 savelij ;// DEVICE ZXSPECTRUM128 ;[]=======================================================================[] @@ -24,13 +24,7 @@ include macros_sp.a80 include dss_sp.a80 - org PluginOrg ; #C000 - Header lenght -PluginStart: ; Flex Navigator plugin header - db "FLX-PLUG" ; Id - dw 0x0000 ; LoadOffset - dw PluginEntry ; EntryOffset - db 0x00 ; PluginMode - db 0x00, 0x00, 0x00 ; Reserved + HDR_FLX "-TEST" PluginEntry: MAKEWINDOW WINSUBOBJ.STORE diff --git a/readme.md b/readme.md index d1e9605..8164727 100644 --- a/readme.md +++ b/readme.md @@ -1,4 +1,4 @@  -Flex Navigator для компьтера Sprinter +Flex Navigator v1.16 для компьютера Sprinter Собранные файлы забирать из папки fn diff --git a/rez2_fnconfig.a80 b/rez2_fnconfig.a80 index 26eb9e8..a2181a5 100644 --- a/rez2_fnconfig.a80 +++ b/rez2_fnconfig.a80 @@ -1,5 +1,5 @@ -; LAST UPDATE: 24.03.2025 savelij +; LAST UPDATE: 24.07.2025 savelij PALITRA.RESERV EQU PALETTE + 0x34 @@ -177,7 +177,7 @@ SaveSetup CALL SetClock PUSH IY SPDSS DSSF.CURDIR POP IY - LD HL,FlexDIRECTORY + LD HL,BUF_REZ2.FlexDIRECTORY PUSH IY SPDSS DSSF.CHDIR POP IY @@ -215,7 +215,7 @@ SaveSetup CALL SetClock LDI LDI POP HL - LD BC,PANEL.FILEMASK + LD BC,PANEL.FILE_MASK ADD HL,BC SUB A .L1 LDI @@ -229,7 +229,7 @@ SaveSetup CALL SetClock LDI LDI POP HL - LD BC,PANEL.FILEMASK + LD BC,PANEL.FILE_MASK ADD HL,BC SUB A .L2 LDI @@ -286,8 +286,8 @@ SetupExit LD A,(SaveFlag) OR A RET Z LD IX,LeftPanel - LD HL,LeftPanel + PANEL.CURRPATH - LD DE,FlexDIRECTORY + LD HL,LeftPanel + PANEL.CURR_PATH + LD DE,BUF_REZ2.FlexDIRECTORY LD A,(DE) SetRef1 CP (HL) JR NZ,SetRef2 @@ -299,8 +299,8 @@ SetRef1 CP (HL) CP (HL) CALL Z,RefreshSetup SetRef2 LD IX,RightPanel - LD HL,RightPanel + PANEL.CURRPATH - LD DE,FlexDIRECTORY + LD HL,RightPanel + PANEL.CURR_PATH + LD DE,BUF_REZ2.FlexDIRECTORY LD A,(DE) SetRef3 CP (HL) JR NZ,SetRef4 @@ -313,7 +313,7 @@ SetRef3 CP (HL) CALL Z,RefreshSetup SetRef4 PUSH IY POP HL - LD DE,PANEL.CURRPATH + LD DE,PANEL.CURR_PATH ADD HL,DE PUSH IY SPDSS DSSF.CHDIR @@ -327,7 +327,7 @@ RefreshSetup BIT VIEWFLAG.B_TREE,(IX+PANEL.VIEWFLAG) POP IY PUSH IY POP HL - LD DE,PANEL.CURRPATH + LD DE,PANEL.CURR_PATH ADD HL,DE PUSH IY SPDSS DSSF.CHDIR @@ -338,7 +338,7 @@ RefreshSetup BIT VIEWFLAG.B_TREE,(IX+PANEL.VIEWFLAG) CALL PrnFileInfo PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE CALL InitScrollBar LD A,(IY+PANEL.VIEWFLAG) diff --git a/rez2_fnerror.a80 b/rez2_fnerror.a80 index 4c0d37e..a2547c8 100644 --- a/rez2_fnerror.a80 +++ b/rez2_fnerror.a80 @@ -1,122 +1,161 @@ -; LAST UPDATE: 25.03.2025 savelij +; LAST UPDATE: 18.07.2025 savelij ; !FIXIT । ࠧ ⥪⮬ 訡 ⮬ 楤 ;[]===========================================================[] DOSErrorR ;[x] 30/07/23 -bug 뫥 । ⠡ 訡 - CP (.error - .ErrorWins)/2 - JR C,.calc_addr - LD HL,.error - JR .goto_addr + CP (.UNKerror - .ErrorWins) / 4 + JR C,.calc_addr + CP 0xF0 + JR NC,.FNerror + LD HL,.UNKerror + JR .goto_addr -.calc_addr: LD HL,.ErrorWins - ADD A,A - ADD A,L - LD L,A - JR NC,.goto_addr - INC H -.goto_addr: LD A,(HL) - INC HL - LD H,(HL) - LD L,A - LD A,H - OR L - RET Z - CALL SetMouse - JP (HL) +; ७ 訡 FN +.FNerror SUB FNinternal.PlugNotFound + LD HL,.PlugNotFound + JR .INT_ERR -.ErrorWins DEFW 0x0000 ; 00 - DEFW 0x0000 ; 01 - DEFW InvDrive ; 02 - DEFW FileNFound ; 03 - DEFW InvPath ; 04 - DEFW 0x0000 ; 05 - DEFW FileNFound ; 06 - DEFW FILEexists ; 07 - DEFW 0x0000 ; 08 - DEFW ROOToverflow ; 09 - DEFW NoDiskSpace ; 0A - DEFW DIRnotEmpty ; 0B - DEFW 0x0000 ; 0C - DEFW InvMedia ; 0D - DEFW 0x0000 ; 0E - DEFW DIRexists ; 0F - DEFW InvName ; 10 - DEFW InvEXEfile ; 11 - DEFW InvEXEver ; 12 - DEFW 0x0000 ; 13 - DEFW NotReady ; 14 - DEFW 0x0000 ; 15 - DEFW 0x0000 ; 16 - DEFW 0x0000 ; 17 - DEFW WriteProtect ; 18 ; [ ] 26/06/2024 - DEFW 0x0000 ; 19 - DEFW 0x0000 ; 1A - DEFW 0x0000 ; 1B - DEFW NotReady ; 1C - DEFW 0x0000 ; 1D - DEFW NoMemory ; 1E - DEFW 0x0000 ; 1F - DEFW 0x0000 ; 20 - DEFW 0x0000 ; 21 - DEFW 0x0000 ; 22 - DEFW ToManyFilesInDir ; 23 +.calc_addr: LD HL,.ErrorWins +.INT_ERR ADD A,A ; *2 + ADD A,A ; *4 + ADD A,L + LD L,A + ADC A,H + SUB L + LD H,A +.goto_addr LD E,(HL) + INC HL + LD D,(HL) ; ⥪ 樥 + INC HL + LD A,(DE) + INC DE + LD C,A ; X 訩 + LD A,(DE) + INC DE + LD (.WINTYPE),A + RES 7,A + LD B,A ; X 訩 + LD (.XPOSTXT),BC ; X + LD (.XPOSTXT2),BC ; X + LD (.ADRTXT),DE ; ⥪ + LD (.ADRTXT2),DE ; ⥪ + LD A,(HL) + INC HL + LD H,(HL) + LD L,A ; 㤠 室 ᫥ + OR H + RET Z ; ᫨ 室 0, 室 + LD (.ADRJUMP),HL + LD (.ADRJUMP2),HL + CALL SetMouse + LD A,0 +.WINTYPE EQU $-1 + BIT 7,A + JR NZ,.TYPE2 +; ⥪⮬ 訡 + MAKEWINDOW WINSUBOBJ.STORE + W_MAIN 224,88,192,48 + W_FILL 4,2,184,10,COLORI.RED + W_TEXT 86,3,COLORI.WHITE + COLORP.RED,"Error" + W_ADRTEXT 0,18,COLORP.HIGHGRAY,0 +.XPOSTXT EQU $-7 ; +.ADRTXT EQU $-2 ; ⥪ + W_BUTTON 60,30,72,14 + W_TEXT 88,33,COLORP.HIGHGRAY,"Ok" + W_END + JP 0 +.ADRJUMP EQU $-2 + +; ⥪⮬ 訡 㪢 ᪠ +.TYPE2 + MAKEWINDOW WINSUBOBJ.STORE + W_MAIN 224,88,192,48 + W_FILL 4,2,184,10,COLORI.RED + W_TEXT 86,3,COLORI.WHITE + COLORP.RED,"Error" + W_ADRTEXT 0,18,COLORP.HIGHGRAY,0 +.XPOSTXT2 EQU $-7 ; +.ADRTXT2 EQU $-2 ; ⥪ + W_BUTTON 60,30,72,14 + W_TEXT 88,33,COLORP.HIGHGRAY,"Ok" + W_BORDER 120,15,16,12 + W_FILL 122,16,12,10,COLORI.WHITE + W_END + JP 0 +.ADRJUMP2 EQU $-2 + +; ⥪ 㤠 室 +.ErrorWins DW 0, 0 ; 00 + DW 0, 0 ; 01 + DW TXTERR.InvDrive, InputDrive ;InvDrive ; 02 + DW TXTERR.FileNFound, ErrorLp ;FileNFound ; 03 + DW TXTERR.InvPath, ErrorLp0 ;InvPath ; 04 + DW 0, 0 ; 05 + DW TXTERR.FileNFound, ErrorLp ;FileNFound ; 06 + DW TXTERR.FILEexists, ErrorLp ;FILEexists ; 07 + DW 0, 0 ; 08 + DW TXTERR.ROOToverflow, ErrorLp ;ROOToverflow ; 09 + DW TXTERR.NoDiskSpace, ErrorLp ;NoDiskSpace ; 0A + DW TXTERR.DIRnotEmpty, ErrorLp ;DIRnotEmpty ; 0B + DW 0, 0 ; 0C + DW TXTERR.InvMedia, InputDrive ;InvMedia ; 0D + DW 0, 0 ; 0E + DW TXTERR.DIRexists, ErrorLp ;DIRexists ; 0F + DW TXTERR.InvName, ErrorLp ;InvName ; 10 + DW TXTERR.InvEXEfile, ErrorLp ;InvEXEfile ; 11 + DW TXTERR.InvEXEver, ErrorLp ;InvEXEver ; 12 + DW 0, 0 ; 13 + DW TXTERR.NotReady, InputDrive ;NotReady ; 14 + DW 0, 0 ; 15 + DW 0, 0 ; 16 + DW 0, 0 ; 17 + DW TXTERR.WriteProtect, ErrorLp ;WriteProtect ; 18 ; [ ] 26/06/2024 + DW 0, 0 ; 19 + DW 0, 0 ; 1A + DW 0, 0 ; 1B + DW TXTERR.NotReady, InputDrive ;NotReady ; 1C + DW 0, 0 ; 1D + DW TXTERR.NoMemory, ErrorLp ;NoMemory ; 1E + DW 0, 0 ; 1F + DW 0, 0 ; 20 + DW 0, 0 ; 21 + DW 0, 0 ; 22 + DW TXTERR.ToManyFilesDir,ErrorLp ;ToManyFilesDir ; 23 ; always last in the table: -.error: DW UnknownError ; if no ERROR in this table then will show this message +.UNKerror: DW TXTERR.UnknownError, ErrorLp ;UnknownError ; if no ERROR in this table then will show this message +; ७ 訡 FN +.PlugNotFound DW TXTERR.PlugNotFound, ErrorLp ;-------------------------------------------------------------- -WriteProtect: - MAKEWINDOW WINSUBOBJ.STORE - W_MAIN 224,88,192,48 - W_FILL 4,2,184,10,COLORI.RED - W_TEXT 86,3,COLORI.WHITE + COLORP.RED,"Error" - W_TEXT 37,18,COLORP.HIGHGRAY,"Drive is write protected" - W_BUTTON 60,30,72,14 - W_TEXT 88,33,COLORP.HIGHGRAY,"Ok" - W_END - JP ErrorLp +SETERRTEXT MACRO X,TEXT + DW X ; X + DB TEXT,0 ; ப 0 + ENDM -InvDrive - MAKEWINDOW WINSUBOBJ.STORE - W_MAIN 224,88,192,48 - W_FILL 4,2,184,10,COLORI.RED - W_TEXT 86,3,COLORI.WHITE + COLORP.RED,"Error" - W_TEXT 24,18,COLORP.HIGHGRAY,"Invalid drive letter:" - W_BUTTON 60,30,72,14 - W_TEXT 88,33,COLORP.HIGHGRAY,"Ok" - W_BORDER 120,15,16,12 - W_FILL 122,16,12,10,COLORI.WHITE - W_END - JP InputDrive +TXTERR +.PlugNotFound SETERRTEXT 56,"Plugin not found" +.InvDrive SETERRTEXT 24 | 0x8000,"Invalid drive letter:" +.FileNFound SETERRTEXT 60,"File not found" +.InvPath SETERRTEXT 70,"Invalid path" +.FILEexists SETERRTEXT 72,"File exists" +.ROOToverflow SETERRTEXT 64,"ROOT overflow" +.NoDiskSpace SETERRTEXT 62,"No disk space" +.DIRnotEmpty SETERRTEXT 40,"Directory is not empty" +.InvMedia SETERRTEXT 46 | 0x8000,"Invalid media:" +.DIRexists SETERRTEXT 56,"Directory exists" +.InvName SETERRTEXT 66,"Invalid name" +.InvEXEfile SETERRTEXT 60,"Invalid EXE file" +.InvEXEver SETERRTEXT 40,"Unsupport EXE version" +.NotReady SETERRTEXT 36 | 0x8000,"Drive not ready:" +.WriteProtect SETERRTEXT 37,"Drive is write protected" +.NoMemory SETERRTEXT 52,"No memory space" +.ToManyFilesDir SETERRTEXT 30,"Too many directory entries" +.UnknownError SETERRTEXT 60,"Unknown Error" -InvMedia - MAKEWINDOW WINSUBOBJ.STORE - W_MAIN 224,88,192,48 - W_FILL 4,2,184,10,COLORI.RED - W_TEXT 86,3,COLORI.WHITE + COLORP.RED,"Error" - W_TEXT 46,18,COLORP.HIGHGRAY,"Invalid media:" - W_BUTTON 60,30,72,14 - W_TEXT 88,33,COLORP.HIGHGRAY,"Ok" - W_BORDER 120,15,16,12 - W_FILL 122,16,12,10,COLORI.WHITE - W_END - JR InputDrive - -NotReady - MAKEWINDOW WINSUBOBJ.STORE - W_MAIN 224,88,192,48 - W_FILL 4,2,184,10,COLORI.RED - W_TEXT 86,3,COLORI.WHITE + COLORP.RED,"Error" - W_TEXT 36,18,COLORP.HIGHGRAY,"Drive not ready:" - W_BUTTON 60,30,72,14 - W_TEXT 88,33,COLORP.HIGHGRAY,"Ok" - W_BORDER 120,15,16,12 - W_FILL 122,16,12,10,COLORI.WHITE - W_END InputDrive PUSH IY SPDSS DSSF.CURDISK POP IY - ADD A,"A" + ADD A,'A' LD (CurDrv),A LD IX,DriveStr LD HL,ErrorTab1 @@ -125,7 +164,7 @@ InputDrive PUSH IY CALL SetClock LD A,(CurDrv) RES 5,A - SUB "A" + SUB 'A' PUSH IY SPDSS DSSF.CHDISK POP IY @@ -139,7 +178,7 @@ InputDrive PUSH IY LD A,0x01 RET -ErrorTab1 DEFW 0x011C,0x0164,0x0076,0x0084,0x01,0x0000,InputLine.InpLnExtN,0x0000 +ErrorTab1 DEFW 284,356,118,132,%0000000000000001,%0000000000000000,InputLine.InpLnExtN,0 DEFW 0x8000 DriveStr DEFB 0x01,0x00,0x00,0x00 @@ -150,15 +189,6 @@ DriveStr DEFB 0x01,0x00,0x00,0x00 CurDrv DUPL 0x02,0x00 ;-------------------------------------------------------------- -InvPath - MAKEWINDOW WINSUBOBJ.STORE - W_MAIN 224,88,192,48 - W_FILL 4,2,184,10,COLORI.RED - W_TEXT 86,3,COLORI.WHITE + COLORP.RED,"Error" - W_TEXT 70,18,COLORP.HIGHGRAY,"Invalid path" - W_BUTTON 60,30,72,14 - W_TEXT 88,33,COLORP.HIGHGRAY,"Ok" - W_END ErrorLp0 LD IX,ErrorTab2 CALL TestCoords SPDSS DSSF.SCANKEY @@ -186,141 +216,10 @@ ErrorExt0 LD A,0x01 RET -ErrorTab2 DEFW 0x011C,0x0164,0x0076,0x0084,0x21,0x0000,ErrorExt0,0x0000 +ErrorTab2 DEFW 284,356,118,132,%0000000000100001,%0000000000000000,ErrorExt0,0 DEFW 0x8000 ;-------------------------------------------------------------- -FileNFound - MAKEWINDOW WINSUBOBJ.STORE - W_MAIN 224,88,192,48 - W_FILL 4,2,184,10,COLORI.RED - W_TEXT 86,3,COLORI.WHITE + COLORP.RED,"Error" - W_TEXT 60,18,COLORP.HIGHGRAY,"File not found" - W_BUTTON 60,30,72,14 - W_TEXT 88,33,COLORP.HIGHGRAY,"Ok" - W_END - JP ErrorLp - -ROOToverflow - MAKEWINDOW WINSUBOBJ.STORE - W_MAIN 224,88,192,48 - W_FILL 4,2,184,10,COLORI.RED - W_TEXT 86,3,COLORI.WHITE + COLORP.RED,"Error" - W_TEXT 64,18,COLORP.HIGHGRAY,"ROOT overflow" - W_BUTTON 60,30,72,14 - W_TEXT 88,33,COLORP.HIGHGRAY,"Ok" - W_END - JP ErrorLp - -NoDiskSpace - MAKEWINDOW WINSUBOBJ.STORE - W_MAIN 224,88,192,48 - W_FILL 4,2,184,10,COLORI.RED - W_TEXT 86,3,COLORI.WHITE + COLORP.RED,"Error" - W_TEXT 62,18,COLORP.HIGHGRAY,"No disk space" - W_BUTTON 60,30,72,14 - W_TEXT 88,33,COLORP.HIGHGRAY,"Ok" - W_END - JP ErrorLp - -DIRnotEmpty - MAKEWINDOW WINSUBOBJ.STORE - W_MAIN 224,88,192,48 - W_FILL 4,2,184,10,COLORI.RED - W_TEXT 86,3,COLORI.WHITE + COLORP.RED,"Error" - W_TEXT 40,18,COLORP.HIGHGRAY,"Directory is not empty" - W_BUTTON 60,30,72,14 - W_TEXT 88,33,COLORP.HIGHGRAY,"Ok" - W_END - JP ErrorLp - -FILEexists - MAKEWINDOW WINSUBOBJ.STORE - W_MAIN 224,88,192,48 - W_FILL 4,2,184,10,COLORI.RED - W_TEXT 86,3,COLORI.WHITE + COLORP.RED,"Error" - W_TEXT 72,18,COLORP.HIGHGRAY,"File exists" - W_BUTTON 60,30,72,14 - W_TEXT 88,33,COLORP.HIGHGRAY,"Ok" - W_END - JP ErrorLp - -DIRexists - MAKEWINDOW WINSUBOBJ.STORE - W_MAIN 224,88,192,48 - W_FILL 4,2,184,10,COLORI.RED - W_TEXT 86,3,COLORI.WHITE + COLORP.RED,"Error" - W_TEXT 56,18,COLORP.HIGHGRAY,"Directory exists" - W_BUTTON 60,30,72,14 - W_TEXT 88,33,COLORP.HIGHGRAY,"Ok" - W_END - JP ErrorLp - -InvName - MAKEWINDOW WINSUBOBJ.STORE - W_MAIN 224,88,192,48 - W_FILL 4,2,184,10,COLORI.RED - W_TEXT 86,3,COLORI.WHITE + COLORP.RED,"Error" - W_TEXT 66,18,COLORP.HIGHGRAY,"Invalid name" - W_BUTTON 60,30,72,14 - W_TEXT 88,33,COLORP.HIGHGRAY,"Ok" - W_END - JP ErrorLp - -InvEXEfile - MAKEWINDOW WINSUBOBJ.STORE - W_MAIN 224,88,192,48 - W_FILL 4,2,184,10,COLORI.RED - W_TEXT 86,3,COLORI.WHITE + COLORP.RED,"Error" - W_TEXT 60,18,COLORP.HIGHGRAY,"Invalid EXE file" - W_BUTTON 60,30,72,14 - W_TEXT 88,33,COLORP.HIGHGRAY,"Ok" - W_END - JP ErrorLp - -InvEXEver - MAKEWINDOW WINSUBOBJ.STORE - W_MAIN 224,88,192,48 - W_FILL 4,2,184,10,COLORI.RED - W_TEXT 86,3,COLORI.WHITE + COLORP.RED,"Error" - W_TEXT 40,18,COLORP.HIGHGRAY,"Unsupport EXE version" - W_BUTTON 60,30,72,14 - W_TEXT 88,33,COLORP.HIGHGRAY,"Ok" - W_END - JP ErrorLp - -NoMemory - MAKEWINDOW WINSUBOBJ.STORE - W_MAIN 224,88,192,48 - W_FILL 4,2,184,10,COLORI.RED - W_TEXT 86,3,COLORI.WHITE + COLORP.RED,"Error" - W_TEXT 52,18,COLORP.HIGHGRAY,"No memory space" - W_BUTTON 60,30,72,14 - W_TEXT 88,33,COLORP.HIGHGRAY,"Ok" - W_END - JP ErrorLp - -ToManyFilesInDir: - MAKEWINDOW WINSUBOBJ.STORE - W_MAIN 224,88,192,48 - W_FILL 4,2,184,10,COLORI.RED - W_TEXT 86,3,COLORI.WHITE + COLORP.RED,"Error" - W_TEXT 30,18,COLORP.HIGHGRAY,"Too many directory entries" - W_BUTTON 60,30,72,14 - W_TEXT 88,33,COLORP.HIGHGRAY,"Ok" - W_END - JP ErrorLp - -UnknownError: ;[x] 30/07/23 -bug 뫥 । ⠡ 訡 - MAKEWINDOW WINSUBOBJ.STORE - W_MAIN 224,88,192,48 - W_FILL 4,2,184,10,COLORI.RED - W_TEXT 86,3,COLORI.WHITE + COLORP.RED,"Error" - W_TEXT 60,18,COLORP.HIGHGRAY,"Unknown Error" - W_BUTTON 60,30,72,14 - W_TEXT 88,33,COLORP.HIGHGRAY,"Ok" - W_END - ;JP ErrorLp ErrorLp LD IX,ErrorTab3 CALL TestCoords @@ -342,5 +241,5 @@ ErrorExt SUB A RET -ErrorTab3 DEFW 0x011C,0x0164,0x0076,0x0084,0x21,0x0000,ErrorExt,0x0000 +ErrorTab3 DEFW 284,356,118,132,%0000000000100001,%0000000000000000,ErrorExt,0 DEFW 0x8000 diff --git a/rez2_fnfunct.a80 b/rez2_fnfunct.a80 index 21bb57a..dabc970 100644 --- a/rez2_fnfunct.a80 +++ b/rez2_fnfunct.a80 @@ -1,16 +1,16 @@ -; LAST UPDATE: 16.05.2025 savelij +; LAST UPDATE: 25.07.2025 savelij ;[]==========================================================[] -CopyFilesR LD A,(IY + PANEL.EFL) - OR (IY + PANEL.EFH) +CopyFilesR LD A,(IY + PANEL.FILES_ALL) + OR (IY + PANEL.FILES_ALL + 1) RET Z BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) RET NZ SETPORT WINSP.Y_PORT,0xC0 - LD A,(IY + PANEL.MFL) - OR (IY + PANEL.MFH) - JR NZ,CopyMark + LD A,(IY + PANEL.FILES_MARK) + OR (IY + PANEL.FILES_MARK + 1) + JP NZ,CopyMark ; ஢ 䠩/ ஬ GETPORT WINSP.CPU3 PUSH AF @@ -21,10 +21,10 @@ CopyFilesR LD A,(IY + PANEL.EFL) .L1 SETPORT WINSP.CPU3,,0 LD IX,WorkBuffer - LD L,(IY + PANEL.FFL) - LD H,(IY + PANEL.FFH) - LD E,(IY + PANEL.CFL) - LD D,(IY + PANEL.CFH) + LD L,(IY + PANEL.FIRST_FILE) + LD H,(IY + PANEL.FIRST_FILE + 1) + LD E,(IY + PANEL.CURR_FILE) + LD D,(IY + PANEL.CURR_FILE + 1) ADD HL,DE ADD HL,HL ; *2 ADD HL,HL ; *4 @@ -38,7 +38,7 @@ CopyFilesR LD A,(IY + PANEL.EFL) LD (AdrCopyFile),HL LD DE,WorkBuffer LD BC,FileHDR.SIZE - LDIR + LDIR POP AF SETPORT WINSP.CPU3,,0 BIT DIR.B_Dir,(IX + FileHDR.Attr) @@ -48,29 +48,41 @@ CopyFilesR LD A,(IY + PANEL.EFL) RET NZ ENDIF LD HL,0 - LD (ECopyFiles),HL + LD (CopyFiles),HL LD L,(IX + FileHDR.SizeBytes) LD H,(IX + FileHDR.SizeBytes + 1) - LD (ECopyBytes),HL + LD (CopyBytes),HL LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) - LD (ECopyBytes + 2),DE - CALL ConvLenToBank + LD (CopyBytes + 2),DE + CALL ConvBytes2Pages JP CopyNxt IF MARK_DIR ; ஢ ᥬ ᮤন COPY_DIR PUSH IX PUSH IY - CALL RESIDENT.GetDirSize ; ஬塞 ࠧ - LD HL,FileHDR.SizeBytes + PUSH IX + LD HL,(AdrCopyFile) ; ⥫ 塞 + CALL RESIDENT.GetDirSize ; ⠥ 砥 ࠧ + EXX + POP HL ; ⥫ + LD (CopyBytes),DE + LD (CopyBytes + 2),BC + PUSH DE + LD DE,FileHDR.SizeBytes + ADD HL,DE ; 㪠⥫ ⢮ ஢ + POP DE CALL SET_DWORD ; ᫨ ࠧ ⥫ LD HL,0 - LD (ECopyFiles),HL + LD (CopyFiles),HL EX DE,HL LD D,B LD E,C - CALL ConvLenToBank + CALL ConvBytes2Pages ; ⢮ ࠭ ஢ + +; LD HL,(AdrCopyFile) ; ⥫ 㥬 +; CALL RESIDENT.MkdirsDst ; ᮧ ਥ POP IY POP IX @@ -78,18 +90,18 @@ COPY_DIR PUSH IX ENDIF ; ஢ 祭 䠩 -CopyMark LD L,(IY + PANEL.MFL) - LD H,(IY + PANEL.MFH) - LD (ECopyFiles),HL - LD L,(IY + PANEL.MBL1) - LD H,(IY + PANEL.MBH1) - LD (ECopyBytes),HL - LD L,(IY + PANEL.MBL2) - LD H,(IY + PANEL.MBH2) - LD (ECopyBytes + 2),HL +CopyMark LD L,(IY + PANEL.FILES_MARK) + LD H,(IY + PANEL.FILES_MARK + 1) + LD (CopyFiles),HL + LD L,(IY + PANEL.BYTES_MARK) + LD H,(IY + PANEL.BYTES_MARK + 1) + LD (CopyBytes),HL + LD L,(IY + PANEL.BYTES_MARK + 2) + LD H,(IY + PANEL.BYTES_MARK + 3) + LD (CopyBytes + 2),HL ; [ ] fat32 - LD A,(IY + PANEL.MBL3) - LD (ECopyBytes + 4),A + LD A,(IY + PANEL.BYTES_MARK_H) + LD (CopyBytes + 4),A GETPORT WINSP.CPU3 PUSH AF BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) @@ -120,7 +132,7 @@ CopyLp0 BIT FileHDR.B_MARK,(IX + FileHDR.Flag) LD H,(IX + FileHDR.SizeBytes + 1) LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) - CALL ConvLenToBank + CALL ConvBytes2Pages LD C,L LD B,H POP HL @@ -138,15 +150,16 @@ CopyNx2 ADD IX,BC JR NZ,CopyLp0 POP AF SETPORT WINSP.CPU3,,0 +; DEHL - ⢮ ࠭ ஢ CopyNxt LD IX,ProcessAll ADD HL,HL EX DE,HL ADC HL,HL EX DE,HL - LD (IX + PROC.MAXL1),L - LD (IX + PROC.MAXH1),H - LD (IX + PROC.MAXL2),E - LD (IX + PROC.MAXH2),D + LD (IX + PROC.MAX_PAGES),L + LD (IX + PROC.MAX_PAGES + 1),H + LD (IX + PROC.MAX_PAGES + 2),E + LD (IX + PROC.MAX_PAGES + 3),D CALL InitProcess CALL ResInvert LD HL,SetInvert @@ -168,7 +181,7 @@ CopyNxt LD IX,ProcessAll LD HL,LeftPanel JR NZ,.L1 LD HL,RightPanel -.L1 LD DE,PANEL.CURRPATH +.L1 LD DE,PANEL.CURR_PATH ADD HL,DE LD DE,CurPath SUB A @@ -210,15 +223,15 @@ CopyNxt LD IX,ProcessAll W_END SUB A LD (OverWriteFlg),A - LD HL,LeftPanel BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) + LD HL,LeftPanel JR Z,.L4 LD HL,RightPanel -.L4 LD BC,PANEL.CURRPATH +.L4 LD BC,PANEL.CURR_PATH ADD HL,BC - LD (CopyFrom),HL + LD (CopySrc),HL LD HL,CurPath - LD (CopyTo),HL + LD (CopyDst),HL CALL SetClock PUSH IY GETPORT WINSP.CPU3 @@ -235,32 +248,32 @@ CopyNextFile CALL PrnFromTo LD H,(IX + FileHDR.SizeBytes + 1) LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) - LD (ReadLen),HL - LD (ReadLen + 2),DE - LD (WriteLen),HL - LD (WriteLen + 2),DE - CALL ConvLenToBank - LD (.FileBnL),HL - LD (.FileBnH),DE + LD (ReadBytes),HL + LD (ReadBytes + 2),DE + LD (WriteBytes),HL + LD (WriteBytes + 2),DE + CALL ConvBytes2Pages + LD (.PagesLow),HL + LD (.PagesHigh),DE LD IX,ProcessOne ADD HL,HL EX DE,HL ADC HL,HL EX DE,HL - LD (IX + PROC.MAXL1),L - LD (IX + PROC.MAXH1),H - LD (IX + PROC.MAXL2),E - LD (IX + PROC.MAXH2),D + LD (IX + PROC.MAX_PAGES),L + LD (IX + PROC.MAX_PAGES + 1),H + LD (IX + PROC.MAX_PAGES + 2),E + LD (IX + PROC.MAX_PAGES + 3),D CALL InitProcess CALL PrnProcess LD HL,(FreeBanks) LD DE,0x0000 -.FileBnH EQU $-2 +.PagesHigh EQU $-2 LD A,D OR E JR NZ,.CopyLp1 LD DE,0x0000 -.FileBnL EQU $-2 +.PagesLow EQU $-2 OR A SBC HL,DE JR NC,.L1 @@ -268,10 +281,10 @@ CopyNextFile CALL PrnFromTo .CopyLp1 EX DE,HL .L1 LD B,E SPDSS DSSF.GETMEM - LD (MemIndef),A + LD (MemID),A LD HL,PagesList SPBIOS BIOSF.GETMEMBLKPAGES - LD HL,(CopyFrom) ;뢠 䠩 筨 + LD HL,(CopySrc) ; 뢠 䠩 筨 SPDSS DSSF.CHDIR JP C,CopyError1 LD HL,(AdrCopyFile) @@ -282,8 +295,8 @@ CopyNextFile CALL PrnFromTo POP HL SPDSS DSSF.OPEN,,1 JP C,CopyError1 - LD (FHandle1),A - LD HL,(CopyTo) ;뢠 䠩 ਥ + LD (FHandleSrc),A + LD HL,(CopyDst) ; 뢠 䠩 ਥ SPDSS DSSF.CHDIR JP C,CopyError2 LD IX,(AdrCopyFile) @@ -295,20 +308,20 @@ CopyNextFile CALL PrnFromTo POP HL LD A,(OverWriteFlg) OR A - LD C,DSSF.CREAT_N ;0x0B + LD C,DSSF.CREAT_N JR Z,.L2 - LD C,DSSF.CREATE ;0x0A + LD C,DSSF.CREATE .L2 LD A,(IX + FileHDR.Attr) SPDSS JR NC,CopyLp2 CP 0x07 JP NZ,CopyError2 CALL OverWrite -CopyLp2 LD (FHandle2),A - LD HL,(ReadLen) +CopyLp2 LD (FHandleDst),A + LD HL,(ReadBytes) LD A,H OR L - LD HL,(ReadLen+2) + LD HL,(ReadBytes + 2) OR H OR L JP Z,CloseFiles @@ -325,8 +338,8 @@ ReadLp1 INC HL OR A SBC HL,DE JP Z,CopyBreak - LD HL,(ReadLen) - LD DE,(ReadLen + 2) + LD HL,(ReadBytes) + LD DE,(ReadBytes + 2) LD BC,0x4000 OR A SBC HL,BC @@ -335,11 +348,11 @@ ReadLp1 INC HL SBC HL,BC EX DE,HL JR C,ReadEnd - LD (ReadLen),HL - LD (ReadLen + 2),DE + LD (ReadBytes),HL + LD (ReadBytes + 2),DE LD HL,0xC000 LD DE,0x4000 - LD A,(FHandle1) + LD A,(FHandleSrc) SPDSS DSSF.READ CALL NextProcess POP HL @@ -352,11 +365,11 @@ ReadLp1 INC HL ; !FIXIT ᤥ ⠪: ReadEnd: LD HL,0xC000 - LD DE,(ReadLen) + LD DE,(ReadBytes) LD A,D OR E JR Z,.L1 - LD A,(FHandle1) + LD A,(FHandleSrc) SPDSS DSSF.READ CALL NextProcess .L1 POP HL @@ -375,8 +388,8 @@ WriteL1 INC HL OR A SBC HL,DE JP Z,CopyBreak - LD HL,(WriteLen) - LD DE,(WriteLen + 2) + LD HL,(WriteBytes) + LD DE,(WriteBytes + 2) LD BC,0x4000 OR A SBC HL,BC @@ -385,11 +398,11 @@ WriteL1 INC HL SBC HL,BC EX DE,HL JR C,WriteEnd - LD (WriteLen),HL - LD (WriteLen + 2),DE + LD (WriteBytes),HL + LD (WriteBytes + 2),DE LD HL,0xC000 LD DE,0x4000 - LD A,(FHandle2) + LD A,(FHandleDst) SPDSS DSSF.WRITE JP C,CopyError3 CALL NextProcess @@ -399,10 +412,10 @@ WriteL1 INC HL JR NZ,WriteL1 POP AF SETPORT WINSP.CPU3,,0 - LD HL,(ReadLen) + LD HL,(ReadBytes) LD A,H OR L - LD HL,(ReadLen + 2) + LD HL,(ReadBytes + 2) OR H OR L JR Z,CloseFiles @@ -410,46 +423,46 @@ WriteL1 INC HL ; !FIXIT ᤥ ⠪: WriteEnd: LD HL,0xC000 - LD DE,(WriteLen) + LD DE,(WriteBytes) LD A,D OR E JR Z,.L1 - LD A,(FHandle2) + LD A,(FHandleDst) SPDSS DSSF.WRITE JP C,CopyError3 CALL NextProcess .L1 POP HL POP AF SETPORT WINSP.CPU3,,0 -CloseFiles LD A,(FHandle1) +CloseFiles LD A,(FHandleSrc) SPDSS DSSF.GET_D_T - LD A,(FHandle2) + LD A,(FHandleDst) SPDSS DSSF.PUT_D_T - LD A,(FHandle2) + LD A,(FHandleDst) SPDSS DSSF.CLOSE -CloseFile1 LD A,(FHandle1) +CloseFile1 LD A,(FHandleSrc) SPDSS DSSF.CLOSE - LD A,(MemIndef) + LD A,(MemID) SPDSS DSSF.FREEMEM LD IX,(AdrCopyFile) RES FileHDR.B_MARK,(IX + FileHDR.Flag) - LD HL,(ECopyBytes) + LD HL,(CopyBytes) LD E,(IX + FileHDR.SizeBytes) LD D,(IX + FileHDR.SizeBytes + 1) OR A SBC HL,DE - LD (ECopyBytes),HL - LD HL,(ECopyBytes+2) + LD (CopyBytes),HL + LD HL,(CopyBytes+2) LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) SBC HL,DE - LD (ECopyBytes+2),HL - LD HL,(ECopyFiles) + LD (CopyBytes+2),HL + LD HL,(CopyFiles) LD A,H OR L JR Z,CopyEnd DEC HL - LD (ECopyFiles),HL + LD (CopyFiles),HL LD A,H OR L JR Z,CopyEnd @@ -465,18 +478,18 @@ CopyEnd POP AF SETPORT WINSP.CPU3,,0 POP IY WINDOWCLOSE - LD HL,(ECopyFiles) - LD (IY + PANEL.MFL),L - LD (IY + PANEL.MFH),H - LD HL,(ECopyBytes) - LD (IY + PANEL.MBL1),L - LD (IY + PANEL.MBH1),H - LD HL,(ECopyBytes+2) - LD (IY + PANEL.MBL2),L - LD (IY + PANEL.MBH2),H + LD HL,(CopyFiles) + LD (IY + PANEL.FILES_MARK),L + LD (IY + PANEL.FILES_MARK + 1),H + LD HL,(CopyBytes) + LD (IY + PANEL.BYTES_MARK),L + LD (IY + PANEL.BYTES_MARK + 1),H + LD HL,(CopyBytes + 2) + LD (IY + PANEL.BYTES_MARK + 2),L + LD (IY + PANEL.BYTES_MARK + 3),H ; [ ] fat32 - LD A,(ECopyBytes+4) - LD (IY + PANEL.MBL3),A + LD A,(CopyBytes + 4) + LD (IY + PANEL.BYTES_MARK_H),A PUSH IY BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD IY,RightPanel @@ -484,7 +497,7 @@ CopyEnd POP AF LD IY,LeftPanel .L1 PUSH IY POP HL - LD DE,PANEL.CURRPATH + LD DE,PANEL.CURR_PATH ADD HL,DE PUSH IY SPDSS DSSF.CHDIR @@ -496,7 +509,7 @@ CopyEnd POP AF POP IY PUSH IY POP HL - LD DE,PANEL.CURRPATH + LD DE,PANEL.CURR_PATH ADD HL,DE PUSH IY SPDSS DSSF.CHDIR @@ -512,16 +525,16 @@ CopyError3: ; PUSH AF LD A,D SETPORT WINSP.CPU3,,0 - LD A,(FHandle2) + LD A,(FHandleDst) SPDSS DSSF.CLOSE CALL CopyErrorFileDelete POP AF CopyError2 PUSH AF - LD A,(FHandle1) + LD A,(FHandleSrc) SPDSS DSSF.CLOSE POP AF CopyError1 PUSH AF - LD A,(MemIndef) + LD A,(MemID) SPDSS DSSF.FREEMEM POP AF CALL DOSError @@ -530,11 +543,11 @@ CopyError1 PUSH AF CopyBreak POP HL POP AF SETPORT WINSP.CPU3,,0 - LD A,(FHandle2) + LD A,(FHandleDst) SPDSS DSSF.CLOSE - LD A,(FHandle1) + LD A,(FHandleSrc) SPDSS DSSF.CLOSE - LD A,(MemIndef) + LD A,(MemID) SPDSS DSSF.FREEMEM CALL CopyErrorFileDelete JP CopyEnd @@ -569,7 +582,7 @@ OverWrite CALL SetMouse W_BUTTON 208,38,56,14 W_TEXT 220,41,COLORP.HIGHGRAY,"Cancel" W_END - LD HL,(CopyTo) + LD HL,(CopyDst) LD DE,WorkBuffer SUB A .L1 LDI @@ -641,23 +654,23 @@ OverSkip CALL SetClock LD H,(IX + FileHDR.SizeBytes + 1) LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) - CALL ConvLenToBank + CALL ConvBytes2Pages ADD HL,HL EX DE,HL ADC HL,HL EX DE,HL LD IX,ProcessAll - LD C,(IX + PROC.CURL1) - LD B,(IX + PROC.CURH1) + LD C,(IX + PROC.CURR_PAGE) + LD B,(IX + PROC.CURR_PAGE + 1) ADD HL,BC - LD (IX + PROC.CURL1),L - LD (IX + PROC.CURH1),H - LD C,(IX + PROC.CURL2) - LD B,(IX + PROC.CURH2) + LD (IX + PROC.CURR_PAGE),L + LD (IX + PROC.CURR_PAGE + 1),H + LD C,(IX + PROC.CURR_PAGE + 2) + LD B,(IX + PROC.CURR_PAGE + 3) EX DE,HL ADC HL,BC - LD (IX + PROC.CURL2),L - LD (IX + PROC.CURH2),H + LD (IX + PROC.CURR_PAGE + 2),L + LD (IX + PROC.CURR_PAGE + 3),H CALL PrnProcess LD HL,CloseFile1 EX (SP),HL @@ -666,31 +679,34 @@ OverSkip CALL SetClock OverExit INC SP INC SP LD IX,(AdrCopyFile) - BIT 0,(IX + 0x00) + BIT FileHDR.B_MARK,(IX + FileHDR.Flag) JP Z,CloseFile1 - LD A,(FHandle1) + LD A,(FHandleSrc) SPDSS DSSF.CLOSE - LD A,(MemIndef) + LD A,(MemID) SPDSS DSSF.FREEMEM POP IY JP CopyEnd ;-------------------------------------------------------------- -AdrCopyFile DW 0x0000 ; ⥫ ⥪饣 䠩 -CopyFrom DW 0x0000 ; 㤠 -CopyTo DW 0x0000 ; 㤠 -ECopyFiles DW 0x0000 ; - 㥬 䠩 -ECopyBytes DB 5 DUP 0 ; - 㥬 ⮢ +AdrCopyFile DW 0x0000 ; ⥫ ⥪饣 䠩/ +CopySrc DW 0x0000 ; 㤠 +CopyDst DW 0x0000 ; 㤠 +CopyFiles DW 0x0000 ; ⢮ 㥬 䠩 +CopyBytes DB 5 DUP 0 ; ⢮ 㥬 ⮢ OverWriteFlg DB 0x00 ; १ 䠩 -FreeBanks DW 0x0000 ; - ᢮ -ReadLen DD 0 ; ⠥ 䠩 -WriteLen DD 0 ; 뢠 䠩 -FHandle1 DB 0x00 ; 筨 -FHandle2 DB 0x00 ; ਥ -MemIndef DB 0x00 ; 䨪. ஢ +FreeBanks DW 0x0000 ; ⢮ ᢮ +ReadBytes DD 0 ; ⠥ 䠩 +WriteBytes DD 0 ; 뢠 䠩 +FHandleSrc DB 0x00 ; 筨 +FHandleDst DB 0x00 ; ਥ +MemID DB 0x00 ; 䨪. ஢ ;-------------------------------------------------------------- +; 室: ; DEHL - ⢮ +; 室: +; HL - ⢮ ࠭ ; 1028975 FB36F ; 231 E7 1 ; 59232 E760 4 @@ -700,7 +716,8 @@ MemIndef DB 0x00 ; ; 12652 316C 1 ; 14119 3727 1 ; 12546 3102 1 -ConvLenToBank LD A,H +ConvBytes2Pages: + LD A,H LD H,L LD L,0x00 SLA A @@ -722,7 +739,7 @@ ConvLenToBank LD A,H INC DE RET -PrnFromTo LD HL,(CopyFrom) +PrnFromTo LD HL,(CopySrc) LD DE,WorkBuffer SUB A .L1 LDI @@ -737,7 +754,7 @@ PrnFromTo LD HL,(CopyFrom) .L2 LD HL,(AdrCopyFile) INC HL CALL MakeDOSname - LD HL,(CopyTo) + LD HL,(CopyDst) LD DE,WorkBuffer+0x100 SUB A .L3 LDI @@ -769,34 +786,34 @@ PrnFromTo LD HL,(CopyFrom) JP PrnRangPathL NextProcess LD IX,ProcessAll - LD L,(IX + PROC.CURL1) - LD H,(IX + PROC.CURH1) + LD L,(IX + PROC.CURR_PAGE) + LD H,(IX + PROC.CURR_PAGE + 1) INC HL - LD (IX + PROC.CURL1),L - LD (IX + PROC.CURH1),H + LD (IX + PROC.CURR_PAGE),L + LD (IX + PROC.CURR_PAGE + 1),H LD A,H OR L JR NZ,.L1 - LD L,(IX + PROC.CURL2) - LD H,(IX + PROC.CURH2) + LD L,(IX + PROC.CURR_PAGE + 2) + LD H,(IX + PROC.CURR_PAGE + 3) INC HL - LD (IX + PROC.CURL2),L - LD (IX + PROC.CURH2),H + LD (IX + PROC.CURR_PAGE + 2),L + LD (IX + PROC.CURR_PAGE + 3),H .L1 CALL PrnProcess LD IX,ProcessOne - LD L,(IX + PROC.CURL1) - LD H,(IX + PROC.CURH1) + LD L,(IX + PROC.CURR_PAGE) + LD H,(IX + PROC.CURR_PAGE + 1) INC HL - LD (IX + PROC.CURL1),L - LD (IX + PROC.CURH1),H + LD (IX + PROC.CURR_PAGE),L + LD (IX + PROC.CURR_PAGE + 1),H LD A,H OR L JR NZ,.L2 - LD L,(IX + PROC.CURL2) - LD H,(IX + PROC.CURH2) + LD L,(IX + PROC.CURR_PAGE + 2) + LD H,(IX + PROC.CURR_PAGE + 3) INC HL - LD (IX + PROC.CURL2),L - LD (IX + PROC.CURH2),H + LD (IX + PROC.CURR_PAGE + 2),L + LD (IX + PROC.CURR_PAGE + 3),H .L2 JP PrnProcess ProcessAll DW 178 ; X @@ -808,7 +825,7 @@ ProcessAll DW 178 ; X DW 0 DW 0 ; 饥 DW 0 - DB COLORP.BLUE + COLORI.WHITE; 0x4F + DB COLORP.BLUE + COLORI.WHITE ProcessOne DW 178 ; X DW 120 ; Y @@ -828,8 +845,8 @@ PathLen DB 0x00 CurPath DB 0x81 DUP 0 ;[]==========================================================[] -ReNameR LD A,(IY + PANEL.EFL) - OR (IY + PANEL.EFH) +ReNameR LD A,(IY + PANEL.FILES_ALL) + OR (IY + PANEL.FILES_ALL + 1) RET Z SETPORT WINSP.Y_PORT,0xC0 GETPORT WINSP.CPU3 @@ -840,10 +857,10 @@ ReNameR LD A,(IY + PANEL.EFL) LD A,(RAMPAGES.RIGHTPANEL) .L1 SETPORT WINSP.CPU3,,0 - LD L,(IY + PANEL.FFL) - LD H,(IY + PANEL.FFH) - LD E,(IY + PANEL.CFL) - LD D,(IY + PANEL.CFH) + LD L,(IY + PANEL.FIRST_FILE) + LD H,(IY + PANEL.FIRST_FILE + 1) + LD E,(IY + PANEL.CURR_FILE) + LD D,(IY + PANEL.CURR_FILE + 1) ADD HL,DE BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JR Z,ReNameNr @@ -957,7 +974,7 @@ RNfile EQU $ - STRLEN(" ") - 2 JR Z,ReName0 PUSH IY POP HL - LD DE,PANEL.CURRPATH + LD DE,PANEL.CURR_PATH ADD HL,DE LD DE,WorkBuffer PUSH DE @@ -1014,7 +1031,7 @@ ReName0 LD HL,CurName CALL PrnFileInfo PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE CALL InitScrollBar LD A,(IY + PANEL.VIEWFLAG) @@ -1023,8 +1040,8 @@ ReName0 LD HL,CurName CALL Z,PrnHScrBar POP AF CALL NZ,PrnVScrBar -ReName1 LD HL,LeftPanel + PANEL.CURRPATH - LD DE,RightPanel + PANEL.CURRPATH +ReName1 LD HL,LeftPanel + PANEL.CURR_PATH + LD DE,RightPanel + PANEL.CURR_PATH ReName2 LD A,(DE) CP (HL) RET NZ @@ -1048,7 +1065,7 @@ ReName2 LD A,(DE) CALL PrnFileInfo PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE CALL InitScrollBar LD A,(IY + PANEL.VIEWFLAG) @@ -1095,10 +1112,10 @@ ReNameDIR LD HL,Name SETPORT WINSP.CPU3,,0 EX AF,AF' JR Z,ReNameTree - LD L,(IY + PANEL.FFL) - LD H,(IY + PANEL.FFH) - LD E,(IY + PANEL.CFL) - LD D,(IY + PANEL.CFH) + LD L,(IY + PANEL.FIRST_FILE) + LD H,(IY + PANEL.FIRST_FILE + 1) + LD E,(IY + PANEL.CURR_FILE) + LD D,(IY + PANEL.CURR_FILE + 1) ADD HL,DE ADD HL,HL ; *2 ADD HL,HL ; *4 @@ -1116,7 +1133,7 @@ ReNameTree BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) LD HL,LeftPanel JR NZ,.L1 LD HL,RightPanel -.L1 LD DE,PANEL.CURRPATH +.L1 LD DE,PANEL.CURR_PATH ADD HL,DE INC HL INC HL @@ -1189,8 +1206,8 @@ ReNameEx LD HL,Name SPDSS DSSF.CREATE,,0 POP IY JR C,ReNameC - LD L,(IY + PANEL.EFL) - LD H,(IY + PANEL.EFH) + LD L,(IY + PANEL.FILES_ALL) + LD H,(IY + PANEL.FILES_ALL + 1) ADD HL,HL ADD HL,HL ADD HL,HL @@ -1214,7 +1231,7 @@ ReNameT POP AF CALL PrnFileInfo PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE CALL InitScrollBar LD A,(IY + PANEL.VIEWFLAG) @@ -1232,7 +1249,7 @@ ReNameT POP AF CALL PrnFileInfo PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE CALL PrnVScrBar POP IY @@ -1245,7 +1262,7 @@ ReNameExt1 INC SP CALL SetInvert PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE CALL PrnVScrBar IF TREE_REZID @@ -1266,7 +1283,7 @@ ReNameExt1 INC SP LD IY,LeftPanel .L1 PUSH IY POP HL - LD BC,PANEL.CURRPATH + LD BC,PANEL.CURR_PATH ADD HL,BC INC HL INC HL @@ -1286,7 +1303,7 @@ ReNameExit CALL ReadDIR CALL PrnFileInfo PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE CALL InitScrollBar LD A,(IY + PANEL.VIEWFLAG) @@ -1295,8 +1312,8 @@ ReNameExit CALL ReadDIR CALL Z,PrnHScrBar POP AF CALL NZ,PrnVScrBar - LD HL,LeftPanel + PANEL.CURRPATH - LD DE,RightPanel + PANEL.CURRPATH + LD HL,LeftPanel + PANEL.CURR_PATH + LD DE,RightPanel + PANEL.CURR_PATH RNameE1 LD A,(DE) CP (HL) RET NZ @@ -1320,7 +1337,7 @@ RNameE1 LD A,(DE) CALL PrnFileInfo PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE CALL InitScrollBar LD A,(IY + PANEL.VIEWFLAG) @@ -1381,7 +1398,7 @@ MkDIRlp LD A,(HL) JR Z,MkDIR0 PUSH IY POP HL - LD DE,PANEL.CURRPATH + LD DE,PANEL.CURR_PATH ADD HL,DE PUSH IY SPDSS DSSF.CHDIR @@ -1423,7 +1440,7 @@ MkDIR0 LD HL,NewDIR BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JR NZ,.L2 LD IY,RightPanel -.L2 LD A,(IY + PANEL.EFH) +.L2 LD A,(IY + PANEL.FILES_ALL + 1) BIT 2,A JP NZ,MkDIRn0 GETPORT WINSP.CPU3 @@ -1440,7 +1457,7 @@ MkDIR0 LD HL,NewDIR LD HL,LeftPanel JR NZ,.L4 LD HL,RightPanel -.L4 LD DE,PANEL.CURRPATH +.L4 LD DE,PANEL.CURR_PATH ADD HL,DE INC HL INC HL @@ -1457,10 +1474,10 @@ MkDIR0 LD HL,NewDIR JR Z,.L5 DEC HL JR FnTree2 -FnTree1 LD L,(IY + PANEL.FFL) - LD H,(IY + PANEL.FFH) - LD E,(IY + PANEL.CFL) - LD D,(IY + PANEL.CFH) +FnTree1 LD L,(IY + PANEL.FIRST_FILE) + LD H,(IY + PANEL.FIRST_FILE + 1) + LD E,(IY + PANEL.CURR_FILE) + LD D,(IY + PANEL.CURR_FILE + 1) ADD HL,DE ADD HL,HL ADD HL,HL @@ -1519,8 +1536,8 @@ MkDIRend PUSH HL PUSH DE LD C,L LD B,H - LD L,(IY + PANEL.EFL) - LD H,(IY + PANEL.EFH) + LD L,(IY + PANEL.FILES_ALL) + LD H,(IY + PANEL.FILES_ALL + 1) ADD HL,HL ADD HL,HL ADD HL,HL @@ -1570,11 +1587,11 @@ MkDIRend PUSH HL DJNZ .L4 EX AF,AF' LD (DE),A - LD L,(IY + PANEL.EFL) - LD H,(IY + PANEL.EFH) + LD L,(IY + PANEL.FILES_ALL) + LD H,(IY + PANEL.FILES_ALL + 1) INC HL - LD (IY + PANEL.EFL),L - LD (IY + PANEL.EFH),H + LD (IY + PANEL.FILES_ALL),L + LD (IY + PANEL.FILES_ALL + 1),H LD HL,WorkBuffer PUSH IY SPDSS DSSF.CURDIR @@ -1596,8 +1613,8 @@ MkDIRend PUSH HL SPDSS DSSF.CREATE,,0 POP IY JR C,MkDIR2 - LD L,(IY + PANEL.EFL) - LD H,(IY + PANEL.EFH) + LD L,(IY + PANEL.FILES_ALL) + LD H,(IY + PANEL.FILES_ALL + 1) ADD HL,HL ADD HL,HL ADD HL,HL @@ -1621,7 +1638,7 @@ MkDIRn1 CALL PrintDIR CALL PrnFileInfo PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE CALL InitScrollBar LD A,(IY + PANEL.VIEWFLAG) @@ -1637,8 +1654,8 @@ MkDIRn1 CALL PrintDIR LD IY,LeftPanel .L1 BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JR NZ,MkDIRn2 - LD HL,LeftPanel + PANEL.CURRPATH - LD DE,RightPanel + PANEL.CURRPATH + LD HL,LeftPanel + PANEL.CURR_PATH + LD DE,RightPanel + PANEL.CURR_PATH MkDIRrf LD A,(DE) CP (HL) JR NZ,MkDIRex @@ -1655,7 +1672,7 @@ MkDIRn2 CALL PrintDIR CALL PrnFileInfo PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE CALL InitScrollBar LD A,(IY + PANEL.VIEWFLAG) @@ -1674,12 +1691,12 @@ MDIRLen DB 0x00 NewDIR DB 0x0D DUP 0x00 ;[]==========================================================[] -DeleteFilesR LD A,(IY + PANEL.EFL) - OR (IY + PANEL.EFH) +DeleteFilesR LD A,(IY + PANEL.FILES_ALL) + OR (IY + PANEL.FILES_ALL + 1) RET Z SETPORT WINSP.Y_PORT,0xC0 - LD A,(IY + PANEL.MFL) - OR (IY + PANEL.MFH) + LD A,(IY + PANEL.FILES_MARK) + OR (IY + PANEL.FILES_MARK + 1) JR NZ,DeleteMark GETPORT WINSP.CPU3 PUSH AF @@ -1689,10 +1706,10 @@ DeleteFilesR LD A,(IY + PANEL.EFL) LD A,(RAMPAGES.RIGHTPANEL) .L1 SETPORT WINSP.CPU3,,0 - LD L,(IY + PANEL.FFL) - LD H,(IY + PANEL.FFH) - LD E,(IY + PANEL.CFL) - LD D,(IY + PANEL.CFH) + LD L,(IY + PANEL.FIRST_FILE) + LD H,(IY + PANEL.FIRST_FILE + 1) + LD E,(IY + PANEL.CURR_FILE) + LD D,(IY + PANEL.CURR_FILE + 1) ADD HL,DE BIT VIEWFLAG.B_TREE,(IY + PANEL.VIEWFLAG) JR Z,DelFile @@ -1780,7 +1797,7 @@ DeleteMain W_END PUSH IY POP HL - LD DE,PANEL.CURRPATH + LD DE,PANEL.CURR_PATH ADD HL,DE LD DE,WorkBuffer SUB A @@ -1852,36 +1869,36 @@ MakeDELname LD HL,(AdrDelFile) RET ;-------------------------------------------------------------- -DelSkip LD C,(IY + PANEL.MFL) - LD B,(IY + PANEL.MFH) +DelSkip LD C,(IY + PANEL.FILES_MARK) + LD B,(IY + PANEL.FILES_MARK + 1) LD A,B OR C JP Z,DelExit LD IX,(AdrDelFile) RES 0,(IX + 0x00) - LD L,(IY + PANEL.MBL1) - LD H,(IY + PANEL.MBH1) + LD L,(IY + PANEL.BYTES_MARK) + LD H,(IY + PANEL.BYTES_MARK + 1) LD E,(IX + FileHDR.SizeBytes) LD D,(IX + FileHDR.SizeBytes + 1) OR A SBC HL,DE - LD (IY + PANEL.MBL1),L - LD (IY + PANEL.MBH1),H - LD L,(IY + PANEL.MBL2) - LD H,(IY + PANEL.MBH2) + LD (IY + PANEL.BYTES_MARK),L + LD (IY + PANEL.BYTES_MARK + 1),H + LD L,(IY + PANEL.BYTES_MARK + 2) + LD H,(IY + PANEL.BYTES_MARK + 3) ; [ ] FAT32 - LD A,(IY + PANEL.MBL3) + LD A,(IY + PANEL.BYTES_MARK_H) LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) SBC HL,DE ; [ ] fat32 SBC A,0 - LD (IY + PANEL.MBL3),A - LD (IY + PANEL.MBL2),L - LD (IY + PANEL.MBH2),H + LD (IY + PANEL.BYTES_MARK_H),A + LD (IY + PANEL.BYTES_MARK + 2),L + LD (IY + PANEL.BYTES_MARK + 3),H DEC BC - LD (IY + PANEL.MFL),C - LD (IY + PANEL.MFH),B + LD (IY + PANEL.FILES_MARK),C + LD (IY + PANEL.FILES_MARK + 1),B LD A,B OR C JP Z,DelExit @@ -1899,7 +1916,7 @@ DelDelete CALL SetClock JR Z,DelDel0 PUSH IY POP HL - LD DE,PANEL.CURRPATH + LD DE,PANEL.CURR_PATH ADD HL,DE LD DE,WorkBuffer PUSH DE @@ -1962,21 +1979,21 @@ DelAll BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) W_END PUSH IY POP HL - LD DE,PANEL.CURRPATH + LD DE,PANEL.CURR_PATH ADD HL,DE LD (DelFrom),HL LD IX,ProcessDel - LD L,(IY + PANEL.MFL) - LD H,(IY + PANEL.MFH) + LD L,(IY + PANEL.FILES_MARK) + LD H,(IY + PANEL.FILES_MARK + 1) LD A,H OR L JR NZ,.L1 INC HL -.L1 LD (IX + PROC.MAXL1),L - LD (IX + PROC.MAXH1),H +.L1 LD (IX + PROC.MAX_PAGES),L + LD (IX + PROC.MAX_PAGES + 1),H SUB A - LD (IX + PROC.MAXL2),A - LD (IX + PROC.MAXH2),A + LD (IX + PROC.MAX_PAGES + 2),A + LD (IX + PROC.MAX_PAGES + 3),A CALL InitProcess DeleteAllLp LD HL,0x0000 DelFrom EQU $-2 @@ -2026,42 +2043,42 @@ DelFrom EQU $-2 JP DelAllExit DelA1 LD IX,ProcessDel - LD L,(IX + PROC.CURL1) - LD H,(IX + PROC.CURH1) + LD L,(IX + PROC.CURR_PAGE) + LD H,(IX + PROC.CURR_PAGE + 1) INC HL - LD (IX + PROC.CURL1),L - LD (IX + PROC.CURH1),H + LD (IX + PROC.CURR_PAGE),L + LD (IX + PROC.CURR_PAGE + 1),H CALL PrnProcess - LD C,(IY + PANEL.MFL) - LD B,(IY + PANEL.MFH) + LD C,(IY + PANEL.FILES_MARK) + LD B,(IY + PANEL.FILES_MARK + 1) LD A,B OR C JP Z,DelAllExit LD IX,(AdrDelFile) RES FileHDR.B_MARK,(IX + FileHDR.Flag) - LD L,(IY + PANEL.MBL1) - LD H,(IY + PANEL.MBH1) + LD L,(IY + PANEL.BYTES_MARK) + LD H,(IY + PANEL.BYTES_MARK + 1) LD E,(IX + FileHDR.SizeBytes) LD D,(IX + FileHDR.SizeBytes + 1) OR A SBC HL,DE - LD (IY + PANEL.MBL1),L - LD (IY + PANEL.MBH1),H - LD L,(IY + PANEL.MBL2) - LD H,(IY + PANEL.MBH2) + LD (IY + PANEL.BYTES_MARK),L + LD (IY + PANEL.BYTES_MARK + 1),H + LD L,(IY + PANEL.BYTES_MARK + 2) + LD H,(IY + PANEL.BYTES_MARK + 3) ; [ ] FAT32 - LD A,(IY + PANEL.MBL3) + LD A,(IY + PANEL.BYTES_MARK_H) LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) SBC HL,DE ; [ ] fat32 SBC A,0 - LD (IY + PANEL.MBL3),A - LD (IY + PANEL.MBL2),L - LD (IY + PANEL.MBH2),H + LD (IY + PANEL.BYTES_MARK_H),A + LD (IY + PANEL.BYTES_MARK + 2),L + LD (IY + PANEL.BYTES_MARK + 3),H DEC BC - LD (IY + PANEL.MFL),C - LD (IY + PANEL.MFH),B + LD (IY + PANEL.FILES_MARK),C + LD (IY + PANEL.FILES_MARK + 1),B LD A,B OR C JP Z,DelAllExit @@ -2136,7 +2153,7 @@ DelTreeDIR1 LD A,(DeleteFlag) LD HL,LeftPanel JR NZ,.L3 LD HL,RightPanel -.L3 LD DE,PANEL.CURRPATH +.L3 LD DE,PANEL.CURR_PATH ADD HL,DE INC HL INC HL @@ -2185,10 +2202,10 @@ DlTree4 LD A,(HL) POP HL JR DelTree2 -DelTree1 LD L,(IY + PANEL.FFL) - LD H,(IY + PANEL.FFH) - LD E,(IY + PANEL.CFL) - LD D,(IY + PANEL.CFH) +DelTree1 LD L,(IY + PANEL.FIRST_FILE) + LD H,(IY + PANEL.FIRST_FILE + 1) + LD E,(IY + PANEL.CURR_FILE) + LD D,(IY + PANEL.CURR_FILE + 1) ADD HL,DE ADD HL,HL ADD HL,HL @@ -2211,8 +2228,8 @@ DelTree2 LD E,(HL) PUSH HL LD C,L LD B,H - LD L,(IY + PANEL.EFL) - LD H,(IY + PANEL.EFH) + LD L,(IY + PANEL.FILES_ALL) + LD H,(IY + PANEL.FILES_ALL + 1) ADD HL,HL ADD HL,HL ADD HL,HL @@ -2264,30 +2281,30 @@ DelTr1 SBC HL,BC JR C,DelTree3 JR NZ,DelTr1 .L1 SET 7,(HL) -DelTree3 LD L,(IY + PANEL.EFL) - LD H,(IY + PANEL.EFH) +DelTree3 LD L,(IY + PANEL.FILES_ALL) + LD H,(IY + PANEL.FILES_ALL + 1) DEC HL - LD (IY + PANEL.EFL),L - LD (IY + PANEL.EFH),H - LD L,(IY + PANEL.FFL) - LD H,(IY + PANEL.FFH) - LD E,(IY + PANEL.CFL) - LD D,(IY + PANEL.CFH) + LD (IY + PANEL.FILES_ALL),L + LD (IY + PANEL.FILES_ALL + 1),H + LD L,(IY + PANEL.FIRST_FILE) + LD H,(IY + PANEL.FIRST_FILE + 1) + LD E,(IY + PANEL.CURR_FILE) + LD D,(IY + PANEL.CURR_FILE + 1) LD A,H OR L JR Z,DelTree4 DEC HL - LD (IY + PANEL.FFL),L - LD (IY + PANEL.FFH),H + LD (IY + PANEL.FIRST_FILE),L + LD (IY + PANEL.FIRST_FILE + 1),H ADD HL,DE - LD C,(IY + PANEL.EFL) - LD B,(IY + PANEL.EFH) + LD C,(IY + PANEL.FILES_ALL) + LD B,(IY + PANEL.FILES_ALL + 1) INC HL SBC HL,BC JR NC,DelTree4 INC DE -DelTree4 LD (IY + PANEL.CFL),E - LD (IY + PANEL.CFH),D +DelTree4 LD (IY + PANEL.CURR_FILE),E + LD (IY + PANEL.CURR_FILE + 1),D LD HL,WorkBuffer PUSH IY SPDSS DSSF.CURDIR @@ -2309,8 +2326,8 @@ DelTree4 LD (IY + PANEL.CFL),E SPDSS DSSF.CREATE,,0 POP IY JR C,DelDIR2 - LD L,(IY + PANEL.EFL) - LD H,(IY + PANEL.EFH) + LD L,(IY + PANEL.FILES_ALL) + LD H,(IY + PANEL.FILES_ALL + 1) ADD HL,HL ADD HL,HL ADD HL,HL @@ -2333,7 +2350,7 @@ DelDIRn POP AF CALL PrnFileInfo PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE CALL InitScrollBar LD A,(IY + PANEL.VIEWFLAG) @@ -2351,7 +2368,7 @@ DelDIRn POP AF CALL PrnFileInfo PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE CALL PrnVScrBar POP IY @@ -2364,7 +2381,7 @@ DeleteExt1 INC SP CALL SetInvert PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE CALL InitScrollBar CALL PrnVScrBar diff --git a/rez2_fnmisc.a80 b/rez2_fnmisc.a80 index de97883..d54270d 100644 --- a/rez2_fnmisc.a80 +++ b/rez2_fnmisc.a80 @@ -1,9 +1,9 @@ -; LAST UPDATE: 25.06.2025 savelij +; LAST UPDATE: 25.07.2025 savelij ;[]==========================================================[] -FileInfoR LD A,(IY+PANEL.EFL) - OR (IY+PANEL.EFH) +FileInfoR LD A,(IY+PANEL.FILES_ALL) + OR (IY+PANEL.FILES_ALL + 1) RET Z BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) RET NZ @@ -16,10 +16,10 @@ FileInfoR LD A,(IY+PANEL.EFL) LD A,(RAMPAGES.RIGHTPANEL) .L1 SETPORT WINSP.CPU3,,0 - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) - LD E,(IY+PANEL.CFL) - LD D,(IY+PANEL.CFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) + LD E,(IY+PANEL.CURR_FILE) + LD D,(IY+PANEL.CURR_FILE + 1) ADD HL,DE ADD HL,HL ADD HL,HL @@ -131,7 +131,7 @@ FName EQU $ - STRLEN(" ") - 1 FAttrib EQU $ - STRLEN(" ") - 1 W_TEXT 10,44,COLORP.HIGHGRAY,"Len: " FLen EQU $ - STRLEN(" ") - 1 - W_TEXT 10,56,COLORP.HIGHGRAY,"Data: " + W_TEXT 10,56,COLORP.HIGHGRAY,"Date: " FData EQU $ - STRLEN(" ") - 1 FTime EQU $ - STRLEN(" ") - 1 W_TEXT 10,68,COLORP.HIGHGRAY,"First cluster: " @@ -162,8 +162,8 @@ FileInfoExt: FAtributs: DEFB "--ad-shr" ;[]==========================================================[] -PrintFileR LD A,(IY+PANEL.EFL) - OR (IY+PANEL.EFH) +PrintFileR LD A,(IY+PANEL.FILES_ALL) + OR (IY+PANEL.FILES_ALL + 1) RET Z BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) RET NZ @@ -176,10 +176,10 @@ PrintFileR LD A,(IY+PANEL.EFL) LD A,(RAMPAGES.RIGHTPANEL) .L1 SETPORT WINSP.CPU3,,0 - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) - LD E,(IY+PANEL.CFL) - LD D,(IY+PANEL.CFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) + LD E,(IY+PANEL.CURR_FILE) + LD D,(IY+PANEL.CURR_FILE + 1) ADD HL,DE ADD HL,HL ADD HL,HL @@ -236,7 +236,7 @@ PrintFileR LD A,(IY+PANEL.EFL) W_END PUSH IY POP HL - LD DE,PANEL.CURRPATH + LD DE,PANEL.CURR_PATH ADD HL,DE LD DE,WorkBuffer SUB A @@ -277,10 +277,10 @@ PrintFileR LD A,(IY+PANEL.EFL) OR L JR NZ,InitPrn INC E -InitPrn LD (IX+PROC.MAXL1),L - LD (IX+PROC.MAXH1),H - LD (IX+PROC.MAXL2),E - LD (IX+PROC.MAXH2),0x00 +InitPrn LD (IX + PROC.MAX_PAGES),L + LD (IX + PROC.MAX_PAGES + 1),H + LD (IX + PROC.MAX_PAGES + 2),E + LD (IX + PROC.MAX_PAGES + 3),0x00 CALL InitProcess LD HL,PrnFileName SPDSS DSSF.OPEN,,1 @@ -410,19 +410,19 @@ NxtPrnProc LD A,E PUSH DE PUSH BC LD IX,ProcessFPrn - LD L,(IX+PROC.CURL1) - LD H,(IX+PROC.CURH1) + LD L,(IX + PROC.CURR_PAGE) + LD H,(IX + PROC.CURR_PAGE + 1) INC HL - LD (IX+PROC.CURL1),L - LD (IX+PROC.CURH1),H + LD (IX + PROC.CURR_PAGE),L + LD (IX + PROC.CURR_PAGE + 1),H LD A,H OR L JR NZ,.L1 - LD L,(IX+PROC.CURL2) - LD H,(IX+PROC.CURH2) + LD L,(IX + PROC.CURR_PAGE + 2) + LD H,(IX + PROC.CURR_PAGE + 3) INC HL - LD (IX+PROC.CURL2),L - LD (IX+PROC.CURH2),H + LD (IX + PROC.CURR_PAGE + 2),L + LD (IX + PROC.CURR_PAGE + 3),H .L1 CALL PrnProcess POP BC POP DE diff --git a/rez2_fnsearch.a80 b/rez2_fnsearch.a80 index 0caf914..323efa9 100644 --- a/rez2_fnsearch.a80 +++ b/rez2_fnsearch.a80 @@ -1,9 +1,9 @@ -; LAST UPDATE: 27.03.2025 savelij +; LAST UPDATE: 24.07.2025 savelij ;[]==========================================================[] -QSearchR LD A,(IY+PANEL.EFL) - OR (IY+PANEL.EFH) +QSearchR LD A,(IY+PANEL.FILES_ALL) + OR (IY+PANEL.FILES_ALL + 1) RET Z SETPORT WINSP.Y_PORT,0xC0 LD HL,SearchN @@ -13,8 +13,8 @@ QSearchR LD A,(IY+PANEL.EFL) INC HL DJNZ .L1 LD (SrchLen),A - LD L,(IY+PANEL.XL) - LD H,(IY+PANEL.XH) + LD L,(IY+PANEL.X) + LD H,(IY+PANEL.X + 1) LD DE,0x000A ADD HL,DE LD (.SrchX1),HL @@ -144,10 +144,10 @@ FoundSFile PUSH HL CALL PrintInpLn POP HL EX DE,HL - LD L,(IY+PANEL.CFL) - LD H,(IY+PANEL.CFH) - LD C,(IY+PANEL.FFL) - LD B,(IY+PANEL.FFH) + LD L,(IY+PANEL.CURR_FILE) + LD H,(IY+PANEL.CURR_FILE + 1) + LD C,(IY+PANEL.FIRST_FILE) + LD B,(IY+PANEL.FIRST_FILE + 1) ADD HL,BC SBC HL,DE EX DE,HL @@ -155,8 +155,8 @@ FoundSFile PUSH HL PUSH HL CALL ResInvert POP HL - LD C,(IY+PANEL.FPL) - LD B,(IY+PANEL.FPH) + LD C,(IY+PANEL.FILES_PAGE) + LD B,(IY+PANEL.FILES_PAGE + 1) LD DE,0x0000 EX DE,HL OR A @@ -169,12 +169,12 @@ FoundSFile PUSH HL SBC HL,BC JR NC,.L1 ADD HL,BC - LD (IY+PANEL.CFL),L - LD (IY+PANEL.CFH),H - LD C,(IY+PANEL.FFL) - LD B,(IY+PANEL.FFH) - LD (IY+PANEL.FFL),E - LD (IY+PANEL.FFH),D + LD (IY+PANEL.CURR_FILE),L + LD (IY+PANEL.CURR_FILE + 1),H + LD C,(IY+PANEL.FIRST_FILE) + LD B,(IY+PANEL.FIRST_FILE + 1) + LD (IY+PANEL.FIRST_FILE),E + LD (IY+PANEL.FIRST_FILE + 1),D EX DE,HL OR A SBC HL,BC @@ -183,7 +183,7 @@ FoundSFile PUSH HL CALL PrnFileInfo PUSH IY POP IX - LD DE,PANEL.BARXL + LD DE,PANEL.BAR_X ADD IX,DE LD A,(IY+PANEL.VIEWFLAG) AND VIEWFLAG.MASK diff --git a/rez3_fnmark.a80 b/rez3_fnmark.a80 index 809f9c0..294df1e 100644 --- a/rez3_fnmark.a80 +++ b/rez3_fnmark.a80 @@ -1,9 +1,9 @@ -; LAST UPDATE: 02.06.2025 savelij +; LAST UPDATE: 25.07.2025 savelij ;[]==========================================================[] -MarkFileR LD A,(IY+PANEL.EFL) - OR (IY+PANEL.EFH) +MarkFileR LD A,(IY+PANEL.FILES_ALL) + OR (IY+PANEL.FILES_ALL + 1) RET Z BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) RET NZ @@ -15,10 +15,10 @@ MarkFileR LD A,(IY+PANEL.EFL) LD A,(RAMPAGES.RIGHTPANEL) .L1 SETPORT WINSP.CPU3,,0 - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) - LD E,(IY+PANEL.CFL) - LD D,(IY+PANEL.CFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) + LD E,(IY+PANEL.CURR_FILE) + LD D,(IY+PANEL.CURR_FILE + 1) ADD HL,DE ADD HL,HL ; *2 ADD HL,HL ; *4 @@ -64,10 +64,10 @@ UnSelectFile: LD IXL,0x00 .L2 SETPORT WINSP.CPU3,,0 SETPORT WINSP.Y_PORT,0xC0 - LD L,(IY+PANEL.FFL) - LD H,(IY+PANEL.FFH) - LD E,(IY+PANEL.CFL) - LD D,(IY+PANEL.CFH) + LD L,(IY+PANEL.FIRST_FILE) + LD H,(IY+PANEL.FIRST_FILE + 1) + LD E,(IY+PANEL.CURR_FILE) + LD D,(IY+PANEL.CURR_FILE + 1) ADD HL,DE ADD HL,HL ; *2 ADD HL,HL ; *4 @@ -85,25 +85,29 @@ UnSelectFile: LD IXL,0x00 POP HL BIT DIR.B_Dir,C ; ? IF MARK_DIR - CALL NZ,COUNTING_DIR + CALL NZ,COUNTING_DIR ; ७ ࠧ ELSE - JR NZ,.MrFile1 + JR NZ,.MrFile1 ; ४ਨ ஢ 㬥, ⮫쪮 䠩 ENDIF ; 䠩 LD B,(HL) ; ஥ ﭨ ⪨ 䠩 LD A,IXL LD (HL),A ; ﭨ ⪨ 䠩 + LD A,C LD DE,WorkBuffer PUSH BC LD BC,FileHDR.SIZE LDIR + BIT DIR.B_Dir,A ; 䠩 + JR Z,.L8 IF MARK_DIR +; 㥬 ࠧ ࠧ LD HL,COUNTING_DIR.FILES_SIZE LD DE,WorkBuffer + FileHDR.SizeBytes LD BC,DWORD LDIR ENDIF - POP BC +.L8 POP BC .MrFile1 POP AF SETPORT WINSP.CPU3,,0 IF MARK_DIR = 0 @@ -116,8 +120,8 @@ UnSelectFile: LD IXL,0x00 BIT VIEWFLAG.B_FULL,(IY+PANEL.VIEWFLAG) JR NZ,.MarkFull ; ⪮ 䠩 - LD L,(IY+PANEL.CFL) - LD H,(IY+PANEL.CFH) + LD L,(IY+PANEL.CURR_FILE) + LD H,(IY+PANEL.CURR_FILE + 1) LD E,L LD D,H ADD HL,HL @@ -149,8 +153,8 @@ UnSelectFile: LD IXL,0x00 JR .MarkExit2 ; 䠩 -.MarkFull LD L,(IY+PANEL.CFL) - LD H,(IY+PANEL.CFH) +.MarkFull LD L,(IY+PANEL.CURR_FILE) + LD H,(IY+PANEL.CURR_FILE + 1) ADD HL,HL ADD HL,HL ADD HL,HL @@ -173,57 +177,57 @@ UnSelectFile: LD IXL,0x00 JR Z,.MarkExit2 ; ⠭ 롮 䠩 .MarkExit1 LD IX,WorkBuffer - LD L,(IY + PANEL.MFL) - LD H,(IY + PANEL.MFH) + LD L,(IY + PANEL.FILES_MARK) + LD H,(IY + PANEL.FILES_MARK + 1) INC HL - LD (IY + PANEL.MFL),L - LD (IY + PANEL.MFH),H ; ⢠ 祭 䠩 + LD (IY + PANEL.FILES_MARK),L + LD (IY + PANEL.FILES_MARK + 1),H ; ⢠ 祭 䠩 LD L,(IX + FileHDR.SizeBytes) LD H,(IX + FileHDR.SizeBytes + 1) - LD E,(IY + PANEL.MBL1) - LD D,(IY + PANEL.MBH1) + LD E,(IY + PANEL.BYTES_MARK) + LD D,(IY + PANEL.BYTES_MARK + 1) XOR A ; [ ] fat32 ADD HL,DE - LD (IY + PANEL.MBL1),L - LD (IY + PANEL.MBH1),H ; ࠧ 祭 䠩 15-0 + LD (IY + PANEL.BYTES_MARK),L + LD (IY + PANEL.BYTES_MARK + 1),H ; ࠧ 祭 䠩 15-0 LD L,(IX + FileHDR.SizeBytes + 2) LD H,(IX + FileHDR.SizeBytes + 3) ; [ ] fat32 - LD E,(IY + PANEL.MBL2) - LD D,(IY + PANEL.MBH2) + LD E,(IY + PANEL.BYTES_MARK + 2) + LD D,(IY + PANEL.BYTES_MARK + 3) ADC HL,DE ; [ ] fat32 - ADC A,(IY + PANEL.MBL3) - LD (IY + PANEL.MBL3),A ; ࠧ 祭 䠩 32-39 - LD (IY + PANEL.MBL2),L - LD (IY + PANEL.MBH2),H ; ࠧ 祭 䠩 31-15 + ADC A,(IY + PANEL.BYTES_MARK_H) + LD (IY + PANEL.BYTES_MARK_H),A ; ࠧ 祭 䠩 32-39 + LD (IY + PANEL.BYTES_MARK + 2),L + LD (IY + PANEL.BYTES_MARK + 3),H ; ࠧ 祭 䠩 31-15 RET ; ⨥ 롮 䠩 .MarkExit2 LD IX,WorkBuffer - LD L,(IY + PANEL.MFL) - LD H,(IY + PANEL.MFH) + LD L,(IY + PANEL.FILES_MARK) + LD H,(IY + PANEL.FILES_MARK + 1) DEC HL - LD (IY + PANEL.MFL),L - LD (IY + PANEL.MFH),H - LD L,(IY + PANEL.MBL1) - LD H,(IY + PANEL.MBH1) + LD (IY + PANEL.FILES_MARK),L + LD (IY + PANEL.FILES_MARK + 1),H + LD L,(IY + PANEL.BYTES_MARK) + LD H,(IY + PANEL.BYTES_MARK + 1) LD E,(IX + FileHDR.SizeBytes) LD D,(IX + FileHDR.SizeBytes + 1) XOR A SBC HL,DE - LD (IY + PANEL.MBL1),L - LD (IY + PANEL.MBH1),H - LD L,(IY + PANEL.MBL2) - LD H,(IY + PANEL.MBH2) + LD (IY + PANEL.BYTES_MARK),L + LD (IY + PANEL.BYTES_MARK + 1),H + LD L,(IY + PANEL.BYTES_MARK + 2) + LD H,(IY + PANEL.BYTES_MARK + 3) LD E,(IX + FileHDR.SizeBytes + 2) LD D,(IX + FileHDR.SizeBytes + 3) SBC HL,DE ; [ ] fat32 - ADC A,(IY + PANEL.MBL3) - LD (IY + PANEL.MBL3),A - LD (IY + PANEL.MBL2),L - LD (IY + PANEL.MBH2),H + ADC A,(IY + PANEL.BYTES_MARK_H) + LD (IY + PANEL.BYTES_MARK_H),A + LD (IY + PANEL.BYTES_MARK + 2),L + LD (IY + PANEL.BYTES_MARK + 3),H RET ;[]==========================================================[] @@ -238,8 +242,8 @@ MarkGroupRN: LD HL,SetInvert PUSH HL LD A,0x01 SelectGroup: LD (SelMode),A - LD A,(IY+PANEL.EFL) - OR (IY+PANEL.EFH) + LD A,(IY+PANEL.FILES_ALL) + OR (IY+PANEL.FILES_ALL + 1) RET Z BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) RET NZ @@ -301,13 +305,13 @@ MarkGNext LD DE,SelMask EX AF,AF' ; [ ] fat32 EXX - LD L,(IY+PANEL.MBL1) - LD H,(IY+PANEL.MBH1) - LD E,(IY+PANEL.MBL2) - LD D,(IY+PANEL.MBH2) - LD A,(IY+PANEL.MBL3) ; [ ] FAT32 - LD C,(IY+PANEL.MFL) - LD B,(IY+PANEL.MFH) + LD L,(IY+PANEL.BYTES_MARK) + LD H,(IY+PANEL.BYTES_MARK + 1) + LD E,(IY+PANEL.BYTES_MARK + 2) + LD D,(IY+PANEL.BYTES_MARK + 3) + LD A,(IY+PANEL.BYTES_MARK_H) ; [ ] FAT32 + LD C,(IY+PANEL.FILES_MARK) + LD B,(IY+PANEL.FILES_MARK + 1) EXX EX AF,AF' ; [ ] fat32 PUSH IY @@ -360,13 +364,13 @@ Select8: LD DE,FileHDR.SIZE EX AF,AF' POP IY EXX - LD (IY+PANEL.MBL1),L - LD (IY+PANEL.MBH1),H - LD (IY+PANEL.MBL2),E - LD (IY+PANEL.MBH2),D - LD (IY+PANEL.MBL3),A ; [ ] FAT32 - LD (IY+PANEL.MFL),C - LD (IY+PANEL.MFH),B + LD (IY+PANEL.BYTES_MARK),L + LD (IY+PANEL.BYTES_MARK + 1),H + LD (IY+PANEL.BYTES_MARK + 2),E + LD (IY+PANEL.BYTES_MARK + 3),D + LD (IY+PANEL.BYTES_MARK_H),A ; [ ] FAT32 + LD (IY+PANEL.FILES_MARK),C + LD (IY+PANEL.FILES_MARK + 1),B EXX POP AF SETPORT WINSP.CPU3,,0 @@ -463,8 +467,8 @@ SMask21 LD (DE),A SelectAllR: CALL ResInvert SelectAllRN: LD HL,SetInvert PUSH HL - LD A,(IY+PANEL.EFL) - OR (IY+PANEL.EFH) + LD A,(IY+PANEL.FILES_ALL) + OR (IY+PANEL.FILES_ALL + 1) RET Z BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) RET NZ @@ -515,22 +519,22 @@ SelectAllRN: LD HL,SetInvert POP AF SETPORT WINSP.CPU3,,0 EXX - LD E,(IY+PANEL.MFL) - LD D,(IY+PANEL.MFH) + LD E,(IY+PANEL.FILES_MARK) + LD D,(IY+PANEL.FILES_MARK + 1) OR A SBC HL,DE RET Z ADD HL,DE - LD (IY+PANEL.MFL),L - LD (IY+PANEL.MFH),H + LD (IY+PANEL.FILES_MARK),L + LD (IY+PANEL.FILES_MARK + 1),H EXX - LD (IY+PANEL.MBL1),L - LD (IY+PANEL.MBH1),H - LD (IY+PANEL.MBL2),E - LD (IY+PANEL.MBH2),D + LD (IY+PANEL.BYTES_MARK),L + LD (IY+PANEL.BYTES_MARK + 1),H + LD (IY+PANEL.BYTES_MARK + 2),E + LD (IY+PANEL.BYTES_MARK + 3),D ; [ ] FAT32 EX AF,AF' - LD (IY+PANEL.MBL3),A + LD (IY+PANEL.BYTES_MARK_H),A CALL PrintDIR JP PrnFileInfo @@ -538,19 +542,19 @@ SelectAllRN: LD HL,SetInvert UnSelectAllR: CALL ResInvert UnSelectAllRN: LD HL,SetInvert PUSH HL - LD A,(IY+PANEL.EFL) - OR (IY+PANEL.EFH) + LD A,(IY+PANEL.FILES_ALL) + OR (IY+PANEL.FILES_ALL + 1) RET Z BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) RET NZ - LD A,(IY+PANEL.MFL) - OR (IY+PANEL.MFH) + LD A,(IY+PANEL.FILES_MARK) + OR (IY+PANEL.FILES_MARK + 1) RET Z PUSH IY POP HL - LD BC,PANEL.MFL + LD BC,PANEL.FILES_MARK ADD HL,BC - LD B,PANEL.FILEMASK - PANEL.MFL + LD B,PANEL.FILE_MASK - PANEL.FILES_MARK .L2 LD (HL),0 INC HL DJNZ .L2 @@ -580,8 +584,8 @@ UnSelA1: RES 0,(HL) InvertSelectR: CALL ResInvert InvertSelectRN: LD HL,SetInvert PUSH HL - LD A,(IY+PANEL.EFL) - OR (IY+PANEL.EFH) + LD A,(IY+PANEL.FILES_ALL) + OR (IY+PANEL.FILES_ALL + 1) RET Z BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG) RET NZ @@ -599,13 +603,13 @@ InvertSelectRN: LD HL,SetInvert LD B,0x00 EX AF,AF' ; [ ] fat32 EXX - LD L,(IY + PANEL.MBL1) - LD H,(IY + PANEL.MBH1) - LD E,(IY + PANEL.MBL2) - LD D,(IY + PANEL.MBH2) - LD A,(IY + PANEL.MBL3) ; [ ] FAT32 - LD C,(IY + PANEL.MFL) - LD B,(IY + PANEL.MFH) + LD L,(IY + PANEL.BYTES_MARK) + LD H,(IY + PANEL.BYTES_MARK + 1) + LD E,(IY + PANEL.BYTES_MARK + 2) + LD D,(IY + PANEL.BYTES_MARK + 3) + LD A,(IY + PANEL.BYTES_MARK_H) ; [ ] FAT32 + LD C,(IY + PANEL.FILES_MARK) + LD B,(IY + PANEL.FILES_MARK + 1) EXX EX AF,AF' ; [ ] fat32 .loop: BIT DIR.B_Dir,(IX + FileHDR.Attr) ;!HARDCODE Dir @@ -624,13 +628,13 @@ InvertSelectRN: LD HL,SetInvert SETPORT WINSP.CPU3,,0 EX AF,AF' ; [ ] fat32 EXX - LD (IY + PANEL.MBL1),L - LD (IY + PANEL.MBH1),H - LD (IY + PANEL.MBL2),E - LD (IY + PANEL.MBH2),D - LD (IY + PANEL.MBL3),A ; [ ] FAT32 - LD (IY + PANEL.MFL),C - LD (IY + PANEL.MFH),B + LD (IY + PANEL.BYTES_MARK),L + LD (IY + PANEL.BYTES_MARK + 1),H + LD (IY + PANEL.BYTES_MARK + 2),E + LD (IY + PANEL.BYTES_MARK + 3),D + LD (IY + PANEL.BYTES_MARK_H),A ; [ ] FAT32 + LD (IY + PANEL.FILES_MARK),C + LD (IY + PANEL.FILES_MARK + 1),B EXX LD A,B OR A @@ -677,13 +681,25 @@ SUB_SIZE: EX AF,AF' ; [ ] fat32 IF MARK_DIR ; ࠧ ⬥祭 ४ਨ -COUNTING_DIR PUSH IX +; HL - ⥫ ࠭ +COUNTING_DIR + +.OLDPATH EQU WorkBuffer + 0x300 ; ࠭ ⥪騩 +.CURRPATH EQU WorkBuffer + 0x200 ; ६ ⥪騩 + + PUSH IX PUSH IY PUSH HL PUSH BC GETPORT WINSP.CPU3 PUSH AF PUSH HL + BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) + LD A,(RAMPAGES.LEFTPANEL) + JR Z,.L1 + LD A,(RAMPAGES.RIGHTPANEL) +.L1 ; 砥 ४ਥ ⥪饩 + SETPORT WINSP.CPU3,,0 XOR A LD H,A LD L,A @@ -694,7 +710,7 @@ COUNTING_DIR PUSH IX LD (.CURR_DIRNAME),HL ; ࠭ ⥪饣 SPDSS DSSF.CURDISK - LD HL,WorkBuffer + 0x300 ; ࠭ + LD HL,.OLDPATH ; ࠭ ADD A,'A' LD (HL),A INC HL @@ -702,7 +718,7 @@ COUNTING_DIR PUSH IX INC HL SPDSS DSSF.CURDIR POP DE - JR C,.END_COUNT + JP C,.END_COUNT ; 室 ४ LD HL,FileHDR.Name ADD HL,DE @@ -751,7 +767,7 @@ COUNTING_DIR PUSH IX ; ⥪饣 .END_COUNT POP AF SETPORT WINSP.CPU3,,0 - LD HL,WorkBuffer + 0x300 ; ࠭ + LD HL,.OLDPATH ; ࠭ SPDSS DSSF.CHDIR POP BC POP HL @@ -782,7 +798,7 @@ COUNTING_DIR PUSH IX .SP1 PUSH IX SPDSS DSSF.CHDIR SPDSS DSSF.CURDISK - LD HL,WorkBuffer + 0x200 + LD HL,.CURRPATH ADD A,'A' LD (HL),A INC HL @@ -846,7 +862,7 @@ COUNTING_DIR PUSH IX DIR.M_ReadOnly + \ DIR.M_Dir .FFF1 LD HL,.FILES_MASK - LD DE,WorkBuffer + 0x300 + LD DE,.OLDPATH PUSH DE PUSH IX SPDSS DSSF.F_FIRST,0 @@ -855,7 +871,7 @@ COUNTING_DIR PUSH IX RET ; ᫥饣 ⥫ -.F_NEXT LD DE,WorkBuffer + 0x300 +.F_NEXT LD DE,.OLDPATH PUSH DE PUSH IX SPDSS DSSF.F_NEXT @@ -869,7 +885,208 @@ COUNTING_DIR PUSH IX .DIR_NAME DZ " " .CURR_DIRNAME DW 0 +; ࠧ ४ਨ +; 室: +; HL - ⥫ ࠭ +; 室: +; BCDE' - ࠧ GetDirSizeR CALL COUNTING_DIR LD HL,COUNTING_DIR.FILES_SIZE - JP GET_DWORD + CALL GET_DWORD + EXX + RET + +; ᮧ ਥ +; HL - ⥫ ࠭ ஢ +MkdirsDstR + +.OLDPATH EQU WorkBuffer + 0x300 ; ࠭ ⥪騩 +.CURRPATHSRC EQU WorkBuffer + 0x200 ; ६ ⥪騩 筨 +.CURRPATHDST EQU WorkBuffer + 0x100 ; ६ ⥪騩 ਥ +.FINDBUF EQU WorkBuffer + + PUSH IX + PUSH IY + GETPORT WINSP.CPU3 + PUSH AF + LD (.OLDSP),SP + PUSH HL + BIT PANELFLAG.B_SIDE,(IY + PANEL.PANELFLAG) + LD DE,RightPanel ; 㤠 ஢ + LD A,(RAMPAGES.LEFTPANEL) ; ࠭ + JR Z,.L1 + LD DE,LeftPanel ; 㤠 ஢ + LD A,(RAMPAGES.RIGHTPANEL) ; ࠭ +.L1 ; 砥 ४ਥ ⥪饩 + SETPORT WINSP.CPU3,,0 + LD HL,PANEL.CURR_PATH + ADD HL,DE ; 㤠 ਥ + LD DE,.CURRPATHDST ; ਥ + CALL .COPYNAME2PATH + LD (.ENDPATHDST),DE ; 墮 ਥ +; ࠭ ⥪饣 + SPDSS DSSF.CURDISK + LD HL,.OLDPATH ; ࠭ + ADD A,'A' + LD (HL),A + INC HL + LD (HL),':' + INC HL + SPDSS DSSF.CURDIR + POP DE ; ⥫ ࠭ ஢ +; JP C,ERROR ;COUNTING_DIR.END_COUNT +; ஢ ४ਨ ஢ + LD HL,FileHDR.Name + ADD HL,DE + LD DE,COUNTING_DIR.DIR_NAME + LD BC,FileHDR.Name_Size + LDIR ; ࠫ ஢ + EX DE,HL + CALL .CUTOFFSPACES ; 祭 ஡ +; ७ ⥪饣 筨 + LD HL,.OLDPATH + LD DE,.CURRPATHSRC + CALL .COPYNAME2PATH ; ᪮஢ 筨 + LD (.ENDPATHSRC),DE ; 墮 筨 +; ஢ 筨 + LD HL,(.ENDPATHSRC) + LD DE,COUNTING_DIR.DIR_NAME + CALL .ADDNAME2PATH + LD (.ENDPATHSRC),DE ; 墮 筨 +; ஢ ਥ + LD HL,(.ENDPATHDST) + LD DE,COUNTING_DIR.DIR_NAME + CALL .ADDNAME2PATH + LD (.ENDPATHDST),DE + +; ᮧ ਥ + LD HL,.CURRPATHDST + SPDSS DSSF.MKDIR ; ᮧ ਥ + JR NC,.L3 + CP ERR_DSS.DIR_EXISTS ; ᫨ 㦥 ਬ 訡 +; JP C,ERROR +.L3 + +; TODO 横᪨ ४਩ ᮧ ਥ + LD HL,.CURRPATHSRC + SPDSS DSSF.CHDIR ; 室 筨 + CALL .FINDFIRSTSRCDIR ; ࢮ ⥫ + JP C,.ENDCOPY ; ४਩ , 室 +; ४਩ +.L2 CALL .FINDNEXTSRCDIR ; ᫥饣 ⥫ + JP C,.ENDFINDNEXT ; 祭? + LD HL,.FINDBUF + FFIRST.Name + LD A,(HL) + CP '.' ; ⥫ "." ".." ਬ + JR Z,.L2 + LD DE,.TMPNAMEDIR + PUSH DE + CALL .COPYNAME2PATH + LD HL,(.ENDPATHDST) + POP DE + CALL .ADDNAME2PATH + LD HL,.CURRPATHDST + SPDSS DSSF.MKDIR ; ᮧ ਥ +; JP C,ERROR + LD HL,.CURRPATHSRC + SPDSS DSSF.CHDIR ; 頥 筨 +; JP C,ERROR + JR .L2 ; 饬 ᫥騩 + +; 襭 室 + JP COUNTING_DIR.END_COUNT;RestoreDIR + +; LD A,(RAMPAGES.FLX) +; SETPORT WINSP.CPU3,,0 + +.ENDFINDNEXT + JR $ + +; ࢮ ⥪饩 ४ਨ +.FINDFIRSTSRCDIR + LD HL,COUNTING_DIR.FILES_MASK + LD DE,.FINDBUF + SPDSS DSSF.F_FIRST,1,DIR.M_Dir + RET + +.FINDNEXTSRCDIR + LD DE,.FINDBUF + SPDSS DSSF.F_NEXT + RET + +; ப +; HL - 㤠 (墮 ⥪饣 ) +; DE - 㤠 +.ADDNAME2PATH CALL .CHECK_BSLASH + LD (HL),'\\' + INC HL + EX DE,HL +; ஢ +.COPYNAME2PATH XOR A +.CNP2 CP (HL) + JR Z,.CNP1 + LDI + JR .CNP2 + +.CNP1 LD (DE),A + RET + +.NAME2DIRNAME + +; ஢ઠ BACKSLASH +.CHECK_BSLASH DEC HL + LD A,(HL) + CP '\\' + RET Z + INC HL + RET + +; 祭 ஡ +.CUTOFFSPACES LD A,' ' +.COS2 DEC HL + CP (HL) + JR Z,.COS2 + INC HL + LD (HL),0 + RET + +; 祭 ப +.DELNAME2PATH LD A,'\\' +.COB1 DEC HL + CP (HL) + JR NZ,.COB1 + LD (HL),0 + RET + +; 室 ஢ ४਩ +.ENDCOPY LD SP,0 +.OLDSP EQU $-2 + LD HL,.OLDPATH + SPDSS DSSF.CHDIR + POP AF + SETPORT WINSP.CPU3,,0 + POP IY + POP IX + RET + +.ENDPATHSRC DW 0 ; 墮 筨 +.ENDPATHDST DW 0 ; 墮 ਥ +.TMPNAMEDIR DB 8 DUP 0 ENDIF + +; C:/DEV/ +; /CAMEL401 +; /DEMON +; /MASM80 +; /OASM028 +; /SOLID +; /DOC +; /EXAMPLES +; /INCLUDE +; /SRC +; /CLIB +; /BUILD +; /SPFORTH +; /F83 +; /F99 +; /TASM diff --git a/rez3_fnnext.a80 b/rez3_fnnext.a80 index 3c4c0d0..b2f9470 100644 --- a/rez3_fnnext.a80 +++ b/rez3_fnnext.a80 @@ -1,43 +1,28 @@ -; LAST UPDATE: 11.03.2025 savelij +; LAST UPDATE: 18.07.2025 savelij ;[]==========================================================[] -InitExtention: ;[ ] 07/10/23 - ; LD (InitExt.path),HL - ; EX HL,DE - ; - LD HL,.ExtName1 +InitExtention: LD HL,INIFILES.ExtName1 LD DE,fn_ext CALL InitExt - LD HL,.ExtName2 + LD HL,INIFILES.ExtName2 LD DE,fnview_ext CALL InitExt - LD HL,.ExtName3 + LD HL,INIFILES.ExtName3 LD DE,fnedit_ext - CALL InitExt - RET - -.ExtName1: DZ FILENAME.FN_EXT -.ExtName2: DZ FILENAME.FNVIEW_EXT -.ExtName3: DZ FILENAME.FNEDIT_EXT -.PathEnd: DW 0 ; not used - ;[]----------------------------------------------------------[] InitExt: LD (.EXTdata),DE -;[ ] 07/10/23 -; .path+1: LD DE,0 -; CALL CopyString -; LD HL,FlexDIRECTORY SPDSS DSSF.OPEN,,1 RET C - LD (ExtHandle),A + LD (.ExtHandle),A LD HL,WorkBuffer LD DE,WorkBuffer_Size SPDSS DSSF.READ RET C OR A RET P - LD A,(ExtHandle) + LD A,0 +.ExtHandle EQU $-1 PUSH DE SPDSS DSSF.CLOSE POP BC @@ -51,8 +36,6 @@ InitExt: LD (.EXTdata),DE JR NC,.loop RET -ExtHandle: DEFB 0x00 - InitExtLine: LD (.InExtSv),DE SUB A LD (DE),A @@ -217,3 +200,8 @@ InitExtLine: LD (.InExtSv),DE LD (HL),D POP HL JR .L5 + +INIFILES +.ExtName1: DZ FILENAME.FN_EXT +.ExtName2: DZ FILENAME.FNVIEW_EXT +.ExtName3: DZ FILENAME.FNEDIT_EXT