/programs/media/zsea/Docs/RAW/RAW.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/media/zsea/Docs/RAW/RAW_format.doc |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/media/zsea/Docs/RAW/RAW_format.html |
---|
0,0 → 1,163 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> |
<HTML> |
<HEAD> |
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1251"> |
<TITLE></TITLE> |
<META NAME="GENERATOR" CONTENT="OpenOffice.org 3.2 (Win32)"> |
<META NAME="CREATED" CONTENT="20080921;16173700"> |
<META NAME="CHANGED" CONTENT="20081002;1473200"> |
<META NAME="Ïîëå 1" CONTENT=""> |
<META NAME="Ïîëå 2" CONTENT=""> |
<META NAME="Ïîëå 3" CONTENT=""> |
<META NAME="Ïîëå 4" CONTENT=""> |
</HEAD> |
<BODY LANG="ru-RU" LINK="#000080" VLINK="#800000" DIR="LTR"> |
<P><FONT SIZE=4><B>Ñïåöèôèêàöèÿ RAW (íàø âíóòðåííèé ñòàíäàðò).</B></FONT></P> |
<P><BR><BR> |
</P> |
<P>Ôîðìàò:</P> |
<TABLE WIDTH=100% CELLPADDING=4 CELLSPACING=0> |
<COL WIDTH=45*> |
<COL WIDTH=36*> |
<COL WIDTH=175*> |
<TR VALIGN=TOP> |
<TD WIDTH=18% HEIGHT=8 STYLE="; border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P>Ñìåùåíèå, áàéò</TD> |
<TD WIDTH=14% STYLE="; border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P>Äëèííà, áàéò</TD> |
<TD WIDTH=68% STYLE="; border: 1px solid #000000; padding: 0.1cm"> |
<P>Îïèñàíèå</TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=18% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>0</TD> |
<TD WIDTH=14% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>4</TD> |
<TD WIDTH=68% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P>Çàãîëîâîê '<B>RAW</B>' è <B>ïðîáåë</B></TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=18% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>4</TD> |
<TD WIDTH=14% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>4</TD> |
<TD WIDTH=68% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P>Ðàçìåð ïî <B>X</B> (ïî ãîðèçîíòàëè), â ïèêñåëàõ</TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=18% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>8</TD> |
<TD WIDTH=14% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>4</TD> |
<TD WIDTH=68% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P>Ðàçìåð ïî <B>Y</B> (ïî âåðòèêàëè), â ïèêñåëàõ</TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=18% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>12</TD> |
<TD WIDTH=14% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>4</TD> |
<TD WIDTH=68% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<DL> |
<DT>Îáùàÿ ãëóáèíà ïèêñåëà = Ãëóáèíà êàíàëà * Êîëè÷åñòâî êàíàëîâ<DT> |
Âîçìîæíûå çíà÷åíèÿ: <B>1, 4, 8, 16, 24, 32, 48, 64</B></DL> |
</TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=18% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>16</TD> |
<TD WIDTH=14% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>2</TD> |
<TD WIDTH=68% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<DL> |
<DT>Ãëóáèíà êàíàëà<DT> |
Äëÿ Grayscale: <B>1, 4, 8, 16</B><DT> |
Äëÿ R, G, B è T (<FONT COLOR="#000000"><FONT SIZE=2>Transparency |
— Ïðîçðà÷íîñòü):</FONT></FONT><FONT COLOR="#000000"><FONT SIZE=2><B> |
5, 8, 16</B></FONT></FONT></DL> |
</TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=18% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>18</TD> |
<TD WIDTH=14% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>2</TD> |
<TD WIDTH=68% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<DL> |
<DT>Êîëè÷åñòâî êàíàëîâ:<DT> |
Äëÿ Grayscale: <B>1, 2</B> (çíà÷åíèå 2 ïðè íàëè÷èè T è ãëóáèíå íå |
ìåíåå 8)<DT> |
Äëÿ R, G, B: <B>1</B>, (ïðè îáùåé ãëóáèíå ìåíüøå 16 áèò), <B>3</B><DT> |
Äëÿ R, G, B è T (<FONT COLOR="#000000"><FONT SIZE=2>Transparency |
— Ïðîçðà÷íîñòü): </FONT></FONT><FONT COLOR="#000000"><FONT SIZE=2><B>4</B></FONT></FONT></DL> |
</TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=18% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>20</TD> |
<TD WIDTH=14% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>4</TD> |
<TD WIDTH=68% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P>Óêàçàòåëü íà ïàëèòðó (ñìåùåíèå îò íà÷àëà ôàéëà), åñëè ïàëèòðû |
íåò òî çíà÷åíèå <B>0</B></TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=18% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>24</TD> |
<TD WIDTH=14% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>4</TD> |
<TD WIDTH=68% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P>Ðàçìåð îáëàñòè ïàëèòðû, ìàêñèìàëüíîå çíà÷åíèå <B>256*4=1024</B> |
áàéò.</TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=18% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>28</TD> |
<TD WIDTH=14% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>4</TD> |
<TD WIDTH=68% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P>Óêàçàòåëü íà äàííûå ïèêñåëåé äëÿ R, G, B. Âîçìîæíî çíà÷åíèå <B>0</B>, |
â ýòîì ñëó÷àå âûâîäèìàÿ îáëàñòü çàïîëíÿåòñÿ öâåòîì èç ïàëèòðû.</TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=18% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>32</TD> |
<TD WIDTH=14% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>4</TD> |
<TD WIDTH=68% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P>Ðàçìåð îáëàñòè äàííûõ äëÿ ïèêñåëåé.</TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=18% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>36</TD> |
<TD WIDTH=14% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>4</TD> |
<TD WIDTH=68% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P>Óêàçàòåëü íà T (<FONT COLOR="#000000"><FONT SIZE=2>Transparency |
— Ïðîçðà÷íîñòü)</FONT></FONT></TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=18% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>40</TD> |
<TD WIDTH=14% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>4</TD> |
<TD WIDTH=68% STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P>Ðàçìåð îáëàñòè äàííûõ äëÿ T.</TD> |
</TR> |
<TR> |
<TD COLSPAN=3 WIDTH=100% VALIGN=TOP STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P ALIGN=CENTER>Îáëàñòü äàííûõ ïàëèòðû</TD> |
</TR> |
<TR> |
<TD COLSPAN=3 WIDTH=100% VALIGN=TOP STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P ALIGN=CENTER>Îáëàñòü äàííûõ R, G, B.</TD> |
</TR> |
<TR> |
<TD COLSPAN=3 WIDTH=100% VALIGN=TOP STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P ALIGN=CENTER>Îáëàñòü äàííûõ T (<FONT COLOR="#000000"><FONT SIZE=2>Transparency |
— Ïðîçðà÷íîñòü)</FONT></FONT></TD> |
</TR> |
</TABLE> |
<P><BR> |
</BODY> |
</HTML> |
/programs/media/zsea/Docs/RAW/RAW_format.odt |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/media/zsea/Docs/RAW/RAW_format.pdf |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/media/zsea/Docs/RAW |
---|
Property changes: |
Added: tsvn:logminsize |
+5 |
\ No newline at end of property |
/programs/media/zsea/Docs/RAW1/RAW1.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/media/zsea/Docs/RAW1/raw1.doc |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/media/zsea/Docs/RAW1/raw1.html |
---|
0,0 → 1,209 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> |
<HTML> |
<HEAD> |
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1251"> |
<TITLE></TITLE> |
<META NAME="GENERATOR" CONTENT="OpenOffice.org 3.2 (Win32)"> |
<META NAME="CREATED" CONTENT="20090304;23535200"> |
<META NAME="CHANGED" CONTENT="20090630;22142000"> |
<META NAME="Ïîëå 1" CONTENT=""> |
<META NAME="Ïîëå 2" CONTENT=""> |
<META NAME="Ïîëå 3" CONTENT=""> |
<META NAME="Ïîëå 4" CONTENT=""> |
</HEAD> |
<BODY LANG="ru-RU" TEXT="#000000" LINK="#000080" VLINK="#800000" DIR="LTR"> |
<DL> |
<DT><FONT SIZE=3><B>Ñïåöèôèêàöèÿ RAW</B></FONT><DT> |
<BR> |
<DT>Ïðè çàãðóçêå gif-ôàéëà ôóíêöèÿ START âîçâðàùàåò óêàçàòåëü íà |
ñëåäóþùóþ ñòðóêòóðó:<DT> |
<BR> |
</DL> |
<TABLE WIDTH=643 CELLPADDING=4 CELLSPACING=0> |
<COL WIDTH=101> |
<COL WIDTH=82> |
<COL WIDTH=434> |
<TR VALIGN=TOP> |
<TD WIDTH=101 STYLE="; border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P>Ñìåùåíèå, áàéò |
</TD> |
<TD WIDTH=82 STYLE="; border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0.1cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P>Äëèííà, áàéò</TD> |
<TD WIDTH=434 STYLE="; border: 1px solid #000000; padding: 0.1cm"> |
<P>Îïèñàíèå</TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=101 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>0</TD> |
<TD WIDTH=82 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>4</TD> |
<TD WIDTH=434 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P>Çàãîëîâîê '<B>RAW1</B>'</TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=101 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>4</TD> |
<TD WIDTH=82 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>4</TD> |
<TD WIDTH=434 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P>n = ÷èñëî èçîáðàæåíèé</TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=101 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>8</TD> |
<TD WIDTH=82 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>4</TD> |
<TD WIDTH=434 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P>øèðèíà ëîãè÷åñêîãî ýêðàíà (íà êîòîðîì áóäóò ïîêàçûâàòüñÿ âñå |
èçîáðàæåíèÿ), â ïèêñåëàõ</TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=101 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>12</TD> |
<TD WIDTH=82 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>4</TD> |
<TD WIDTH=434 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P>âûñîòà ëîãè÷åñêîãî ýêðàíà (íà êîòîðîì áóäóò ïîêàçûâàòüñÿ âñå |
èçîáðàæåíèÿ), â ïèêñåëàõ</TD> |
</TR> |
<TR> |
<TD COLSPAN=3 WIDTH=633 VALIGN=TOP STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P ALIGN=CENTER><B>Repeat 0</B> ; repeat n — ïîâòîðÿþùèåñÿ |
áëîêè, 1 â ñëó÷àå ñòàòè÷íîãî GIF, íóìåðàöèÿ <B>N</B> íà÷èíàåòñÿ ñ |
<B>0</B></TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=101 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>16+N*16</TD> |
<TD WIDTH=82 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>4</TD> |
<TD WIDTH=434 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P>óêàçàòåëü íà î÷åðåäíîå èçîáðàæåíèå - ñ çàãîëîâêîì '<B>RAW</B> |
'<SUP><FONT SIZE=3><B>**3</B></FONT></SUP></TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=101 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>20+N*16</TD> |
<TD WIDTH=82 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>4</TD> |
<TD WIDTH=434 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P>x-êîîðäèíàòà èçîáðàæåíèÿ íà ëîãè÷åñêîì ýêðàíå, â ïèêñåëàõ</TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=101 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>24+N*16</TD> |
<TD WIDTH=82 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>4</TD> |
<TD WIDTH=434 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P>y-êîîðäèíàòà èçîáðàæåíèÿ íà ëîãè÷åñêîì íà ýêðàíå, â ïèêñåëàõ</TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=101 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>28+N*16</TD> |
<TD WIDTH=82 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>2</TD> |
<TD WIDTH=434 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P> çàäåðæêà, èçìåðÿåòñÿ â <B>0.01</B> ñåêóíäû<SUP><FONT SIZE=3><B>**2</B></FONT></SUP></TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=101 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>30+N*16</TD> |
<TD WIDTH=82 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER><FONT FACE="Arial"><FONT SIZE=2>1</FONT></FONT></TD> |
<TD WIDTH=434 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<DL> |
<DT><FONT FACE="Arial"><FONT SIZE=2><Packed Fields></FONT></FONT><DT> |
<BR> |
<DT><FONT FACE="Arial"><FONT SIZE=2><B>0 bit</B></FONT></FONT><FONT FACE="Arial"><FONT SIZE=2> |
- Ïðîçðà÷íîñòü</FONT></FONT><DT> |
<FONT FACE="Arial"><FONT SIZE=2>0 - íåò ïðîçðà÷íîãî |
öâåòà, 1 - åñòü ïðîçðà÷íûé öâåò</FONT></FONT><DT> |
<BR> |
<DT><FONT FACE="Arial"><FONT SIZE=2><B>1 bit</B></FONT></FONT><FONT FACE="Arial"><FONT SIZE=2> |
— Ôëàã ïîëüçîâàòåëÿ</FONT></FONT><DT> |
<FONT FACE="Arial"><FONT SIZE=2>Çíà÷åíèÿ:</FONT></FONT></DL> |
<OL> |
<P> |
<FONT FACE="Arial"><FONT SIZE=2>0 - Íå îæèäàòü ââîä îò |
ïîëüçîâàòåëÿ äëÿ ïðîäîëæåíèÿ.</FONT></FONT></OL> |
<DL> |
<DT><FONT COLOR="#000000"> </FONT><FONT COLOR="#000000"><FONT FACE="Arial"><FONT SIZE=2><SPAN LANG="ru-RU">1 |
- Îæèäàòü ââîä îò ïîëüçîâàòåëÿ.</SPAN></FONT></FONT></FONT><DT> |
<BR> |
<DT><FONT FACE="Arial"><FONT SIZE=2><B>2,3,4 bit</B></FONT></FONT><FONT FACE="Arial"><FONT SIZE=2> |
— Ìåòîä ðàçìåùåíèÿ</FONT></FONT><DT> |
<FONT FACE="Arial"><FONT SIZE=2>Çíà÷åíèÿ:</FONT></FONT><DT> |
<FONT FACE="Arial"><FONT SIZE=2>0 - Íèêàêîå ðàçìåùåíèå íå |
îïðåäåëåíî. Äåêîäåð íå îáÿçàí ïðåäïðèíèìàòü ëþáîå äåéñòâèå.</FONT></FONT><DT> |
<FONT FACE="Arial"><FONT SIZE=2>1 - Íå ðàñïîëàãàòü. Ãðàôèêó |
íóæíî îñòàâèòü íà ìåñòå</FONT></FONT><DT> |
<FONT FACE="Arial"><FONT SIZE=2>2 - Âîññòàíîâèòü ê öâåò ôîíà. |
Îáëàñòü, èñïîëüçóåìàÿ ãðàôèêîé, äîëæíà áûòü âîññòàíîâëåíà ê öâåòó |
ôîíà.</FONT></FONT><DT> |
<FONT FACE="Arial"><FONT SIZE=2>3 - Âîññòàíîâèòü ê ïðåäûäóùåìó. |
Äåêîäåð îáÿçàí âîññòàíàâëèâàòü îáëàñòü, çàïèñàííóþ ïîâåðõ |
ãðàôè÷åñêèì ñèìâîëîì ñ òåì, ÷òî áûëî òàì äî ïðåäîñòàâëåíèÿ |
ãðàôè÷åñêîãî ñèìâîëà.</FONT></FONT><DT> |
<FONT FACE="Arial"><FONT SIZE=2>4-7 -Çàðåçåðâèðîâàíî.</FONT></FONT><DT> |
<BR> |
<DT><FONT COLOR="#000000"><FONT FACE="Arial"><FONT SIZE=2><B>5,6,7 |
bit</B></FONT></FONT></FONT><FONT COLOR="#000000"><FONT FACE="Arial"><FONT SIZE=2> |
- Çàðåçåðâèðîâàíî</FONT></FONT></FONT><DT> |
<BR> |
</DL> |
</TD> |
</TR> |
<TR VALIGN=TOP> |
<TD WIDTH=101 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>31+N*16</TD> |
<TD WIDTH=82 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: none; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0cm"> |
<P ALIGN=CENTER>1</TD> |
<TD WIDTH=434 STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P>èíäåêñ ïðîçðà÷íîãî öâåòà<SUP><FONT SIZE=3><B>**1</B></FONT></SUP> |
(èãíîðèðóåòñÿ, åñëè ïðåäûäóùåå ïîëå íóëåâîå)</TD> |
</TR> |
<TR> |
<TD COLSPAN=3 WIDTH=633 VALIGN=TOP STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P ALIGN=CENTER><B>end repeat 0</B></TD> |
</TR> |
<TR> |
<TD COLSPAN=3 WIDTH=633 VALIGN=TOP STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P ALIGN=CENTER><B>Repeat 1</B></TD> |
</TR> |
<TR> |
<TD COLSPAN=3 WIDTH=633 VALIGN=TOP STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P ALIGN=CENTER><B>Repeat 2</B></TD> |
</TR> |
<TR> |
<TD COLSPAN=3 WIDTH=633 VALIGN=TOP STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P ALIGN=CENTER><B>Repeat 3</B></TD> |
</TR> |
<TR> |
<TD COLSPAN=3 WIDTH=633 VALIGN=TOP STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P ALIGN=CENTER><B>...</B></TD> |
</TR> |
<TR> |
<TD COLSPAN=3 WIDTH=633 VALIGN=TOP STYLE="; border-top: none; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding-top: 0cm; padding-bottom: 0.1cm; padding-left: 0.1cm; padding-right: 0.1cm"> |
<P ALIGN=CENTER><B>Repeat Nmax</B></TD> |
</TR> |
</TABLE> |
<DL> |
<DT><BR> |
<DT>Ïðèìå÷àíèÿ:</DL> |
<OL> |
<LI> |
**1 èíäåêñ ïðîçðà÷íîãî öâåòà - ïèêñåëè ñ òàêèì öâåòîì íóæíî íå |
çàêðàøèâàòü, à îñòàâëÿòü ïðîçðà÷íûìè. Åñëè ñëåäóþùèé ýêðàí |
íà÷èíàåòñÿ íå ñî ñìåùåíèÿ 0, à ïðîçðà÷íîãî öâåòà íåò, òî |
íåçàòðàãèâàåìàÿ îáëàñòü âëþáîì ñëó÷àå îòñàåòñÿ íåçàòðàãèâàåìîé.<LI> |
**2 çàäåðæêà - çàäåðæêà äëÿ êàäîãî êàäðà èíäèâèäóàëüíà<LI> |
**3 óêàçàòåëè íà RAW — àáñîëþòíûå àäðåñà, êàæäûé RAW |
íåçàâèñèìàÿ îò çàãîëîâêà îáëàñòü, ïðè ñìåíå ôàéëà èõ âñå íàäî |
îñâîáîæäàòü.</OL> |
<DL> |
<DT><BR> |
<DT><BR> |
<DT><BR> |
</DL> |
</BODY> |
</HTML> |
/programs/media/zsea/Docs/RAW1/raw1.odt |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/media/zsea/Docs/RAW1/raw1.pdf |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/media/zsea/Docs/RAW1 |
---|
Property changes: |
Added: tsvn:logminsize |
+5 |
\ No newline at end of property |
/programs/media/zsea/Docs/call_new.txt |
---|
0,0 → 1,68 |
The block is passed to the plugin: |
;--------------------------------------------------------------------- |
; not change this section!!! |
; start section |
;--------------------------------------------------------------------- |
align 4 |
image_file dd 0 ;+0 |
raw_pointer dd 0 ;+4 |
return_code dd 0 ;+8 |
img_size dd 0 ;+12 |
deflate_unpack dd 0 ;+16 |
raw_pointer_2 dd 0 ;+20 |
;--------------------------------------------------------------------- |
; end section |
;--------------------------------------------------------------------- |
Calling plugins: |
;--------------------------------------------------------------------- |
convert: |
xor eax,eax |
cmp [error_fs],eax |
jnz .error |
mov [return_code],eax |
; mov eax,image_file |
push image_file |
call [plugin] |
cmp [return_code],dword 0 |
je @f |
cmp [return_code],dword 2 |
je @f |
;------------------------------- |
xor eax,eax |
mov [return_code],eax |
; mov eax,image_file |
push image_file |
call [plugin_1] |
cmp [return_code],dword 0 |
je @f |
cmp [return_code],dword 2 |
je @f |
;------------------------------- |
xor eax,eax |
mov [return_code],eax |
; mov eax,image_file |
push image_file |
call [plugin_2] |
cmp [return_code],dword 0 |
je @f |
cmp [return_code],dword 2 |
je @f |
;------------------------------- |
xor eax,eax |
mov [return_code],eax |
; mov eax,image_file |
push image_file |
call [plugin_3] |
;------------------------------- |
@@: |
mov ecx,[image_file] |
mcall 68,13 |
cmp [return_code],dword 0 |
je .all_ok |
xor eax,eax |
;------------------------------- |
/programs/media/zsea/Docs/call_old.txt |
---|
0,0 → 1,66 |
The block is passed to the plugin: |
;--------------------------------------------------------------------- |
; not change this section!!! |
; start section |
;--------------------------------------------------------------------- |
align 4 |
image_file dd 0 ;+0 |
raw_pointer dd 0 ;+4 |
return_code dd 0 ;+8 |
img_size dd 0 ;+12 |
deflate_unpack dd 0 ;+16 |
raw_pointer_2 dd 0 ;+20 |
;--------------------------------------------------------------------- |
; end section |
;--------------------------------------------------------------------- |
Calling plugins: |
;--------------------------------------------------------------------- |
convert: |
xor eax,eax |
cmp [error_fs],eax |
jnz .error |
mov [return_code],eax |
mov eax,image_file |
call [plugin] |
cmp [return_code],dword 0 |
je @f |
cmp [return_code],dword 2 |
je @f |
;------------------------------- |
xor eax,eax |
mov [return_code],eax |
mov eax,image_file |
call [plugin_1] |
cmp [return_code],dword 0 |
je @f |
cmp [return_code],dword 2 |
je @f |
;------------------------------- |
xor eax,eax |
mov [return_code],eax |
mov eax,image_file |
call [plugin_2] |
cmp [return_code],dword 0 |
je @f |
cmp [return_code],dword 2 |
je @f |
;------------------------------- |
xor eax,eax |
mov [return_code],eax |
mov eax,image_file |
call [plugin_3] |
;------------------------------- |
@@: |
mov ecx,[image_file] |
mcall 68, 13, |
cmp [return_code],dword 0 |
je .all_ok |
xor eax,eax |
;------------------------------- |
/programs/media/zsea/Docs/resouce.txt |
---|
0,0 → 1,10 |
Use variable "status": |
1 1h 1 open file |
2 2h 10 file info |
4 4h 100 window about |
8 8h 1000 window background |
16 10h 10000 window set sort mode |
32 20h 100000 window error |
64 40h 1000000 window option |
128 80h 10000000 |
/programs/media/zsea/Docs/zSea_keys.txt |
---|
0,0 → 1,63 |
¯à ¢«ïî騥 á®ç¥â ¨ï ª« ¢¨è ¢ zSea v1.00 Beta (¨«¨ ⥪ãé ï ¢¥àá¨ï). |
£« ¢®¬ ®ª¥: |
PageUp - «¨áâ ¨¥ 㪠§ ⥫ï ä ©« ®¤ã ¯®§¨æ¨î ª ç «ã ᯨ᪠. |
PageDown - «¨áâ ¨¥ 㪠§ ⥫ï ä ©« ®¤ã ¯®§¨æ¨î ª ª®æã ᯨ᪠. |
Home - ¯¥à¥¬¥é¥¨¥ 㪠§ ⥫ï ä ©« ¢ ç «® ᯨ᪠. |
End - ¯¥à¥¬¥é¥¨¥ 㪠§ ⥫ï ä ©« ¢ ª®¥æ ᯨ᪠. |
"0" ( £«. ª« ¢.) ¨ "*" ( ¤®¯. ª« ¢.) - ¢â®¬ áèâ ¡¨à®¢ ¨¥ ¯®¤ à §¬¥à íªà . |
"+" - 㢥«¨ç¨âì ¬ áèâ ¡ |
"-" - 㬥ìè¨âì ¬ áèâ ¡ |
"|" ( £«. ª« ¢.) ¨ "/" ( ¤®¯. ª« ¢.) - ¬ áèâ ¡ 100% |
W - ¢â®à¨ç®¥ ®ª® "áâ ®¢ª ª à⨪¨ à ¡®ç¥£® á⮫ " |
I - ¢â®à¨ç®¥ ®ª® "¢¥¤¥¨ï ® ¯à®á¬ âਢ ¥¬®¬ ä ©«¥" |
S - ¢â®à¨ç®¥ ®ª® "ë¡®à ०¨¬ á®àâ¨à®¢ª¨" |
O - ¢â®à¨ç®¥ ®ª® "¯æ¨¨ ¯à¨«®¦¥¨ï" |
â५ª¨ ªãàá®à ( £«. ¨ ¤®¯ ª« ¢.) - ᤢ¨£ ª à⨪¨, ¥á«¨ ® ¡®«ìè¥ ®¡« á⨠®â®¡à ¦¥¨ï. |
Enter ( £«. ¨ ¤®¯ ª« ¢.) - ®¡« áâì ®â®¡à ¦¥¨ï ¢¥áì íªà ¨ ¢®§¢à â ¢ ®¡ëçë© à¥¦¨¬. |
PrintScreen - § ¯ã᪠SlideShow, ®áâ ®¢ ¯® Esc ¨«¨ Space (஡¥«). |
Alt+F1 - ªâ¨¢ æ¨ï ¬¥î. |
¬¥î: |
â५ª¨ ªãàá®à ¢¢¥àå ¨ ¢¨§ ¯¥à¥¬¥é¥¨¥ ¯® ¯ãªâ ¬. |
Esc - § ªàëâì ®ª®. |
Enter - ªàëâì ®ª® á ¯®¤â¢¥à¦¤¥¨¥¬ ¯ãªâ . |
â५ª¨ ªãàá®à ¢«¥¢® ¨ ¢¯à ¢® ¯¥à¥¬¥é¥¨¥ ¢ á®á¥¤¥¥ ¬¥î. |
® ¢â®à¨çëå ®ª å: |
Esc - § ªàëâì ®ª®. |
Enter - ªàëâì ®ª® á ¯®¤â¢¥à¦¤¥¨¥¬. |
â५ª¨ ªãàá®à ¢¢¥àå ¨ ¢¨§ ¯¥à¥¬¥é¥¨¥ ¯® ¯ãªâ ¬. |
"+" ¨ "-" ¨§¬¥¥¨¥ ç¨á«®¢ëå ¤ ëå. |
Space (஡¥«) - ªâ¨¢¨à®¢ âì ¨«¨ ®âª«îç¨âì ¯ãªâ, ¥á«¨ íâ® checkbox. |
®ª å ¥ ¨á¯®«ì§ãîé¨å ª« ¢¨è¨ - ¢á¥ ª« ¢¨è¨ ¯à¨¢®¤ïâ ª § ªàëâ¨î. |
OpenDialog - ¨ «®£ ®âªàëâ¨ï ä ©« (®â¤¥«ì ï ¯à®£à ¬¬ ): |
1) ¥à¥¬¥é¥¨¥ ªãàá®à ¯® ¯ ¥«¨: |
) áâ५ª¨ ¢¢¥àå ¨ ¢¨§ (¢ ⮬ ç¨á«¥ à ᯮ«®¦¥ë¥ ¢ ¤®¯®«¨â¥«ì®© ç á⨠ª« ¢¨ âãàë) - ¯¥à¥¬¥é¥¨¥ ªãàá®à ®¤ã ¯®§¨æ¨î ¢¢¥àå ¨«¨ ¢¨§. |
¡) PageUp - ¯®áâà ¨ç®¥ «¨áâ ¨¥ ¢¢¥àå. |
¢) PageDown - ¯®áâà ¨ç®¥ «¨áâ ¨¥ ¢¨§. |
£) Home - ¢ ç «® ª â «®£ á ä ©« ¬¨. |
¤) End - ¢ ª®¥æ ª â «®£ á ä ©« ¬¨. |
2) Enter - ¤¥©á⢨ï á ä ©«®¬ ¯®§¨æ¨¨ ª®â®à®£® 室¨âáï ªãàá®à ¢ë¤¥«¥¨ï: |
) ¢å®¤ ¢ ¯ ¯ªã. |
¡) § ¯ã᪠¯à®£à ¬¬ë. |
3) ¡®â á ¬¥î: |
Alt+F1 - ¢ë§®¢ ¬¥î ¢ë¡®à ¤¨áª . |
Alt+F2 - ¢ë§®¢ ¬¥î á®àâ¨à®¢ª¨. |
Alt+F3 - ¢ë§®¢ ¬¥î 䨫ìâà 樨. |
¬¥î: |
â५ª¨ ªãàá®à ¢¢¥àå ¨ ¢¨§ ¯¥à¥¬¥é¥¨¥ ¯® ¯ãªâ ¬. |
Esc - § ªàëâì ®ª®. |
Enter - ªàëâì ®ª® á ¯®¤â¢¥à¦¤¥¨¥¬ ¯ãªâ . |
â५ª¨ ªãàá®à ¢«¥¢® ¨ ¢¯à ¢® ¯¥à¥¬¥é¥¨¥ ¢ á®á¥¤¥¥ ¬¥î. |
4) Ctrl+R - ®¡®¢¨âì ᮤ¥à¦¨¬®£® ¤¨à¥ªâ®à¨¨. |
5) Backspace (áâ५ª ¢«¥¢® à冷¬ á Insert) - ¢ë室 ¨§ ¤¨à¥ªâ®à¨¨. |
6) Insert - ¢ë¤¥«¥¨¥ ªà áë¬ æ¢¥â®¬ ä ©« ª®â®à®¬ 室¨âáï ªãàá®à ¨ ¯¥à¥¬¥é¥¨¥ ªãàá®à 1 ¯®§¨æ¨î ¢¨§. |
7) Ctrl+A ¨ Ctrl+(NumPad(+) Up) - ¢ë¤¥«¥¨¥ ¢á¥å ä ©«®¢ ¨ ¤¨à¥ªâ®à¨© ¢ ªâ¨¢®© ¯ ¥«¨, § ¨áª«î票¥¬ ¤¨à¥ªâ®à¨¨ '..' |
8) Ctrl+(NumPad(-) Up) - áïâì ¢ë¤¥«¥¨¥ ¢á¥å ä ©«®¢ ¨ ¤¨à¥ªâ®à¨© ¢ ªâ¨¢®© ¯ ¥«¨, § ¨áª«î票¥¬ ¤¨à¥ªâ®à¨¨ '..' |
9) Ctrl+(NumPad(*) Up) - ¨¢¥àâ¨à®¢ âì ¢ë¤¥«¥¨¥ ¢á¥å ä ©«®¢ ¨ ¤¨à¥ªâ®à¨© ¢ ªâ¨¢®© ¯ ¥«¨, § ¨áª«î票¥¬ ¤¨à¥ªâ®à¨¨ '..' |
10) Esc - § ¢¥à襨¥ à ¡®âë ¯à®£à ¬¬ë, ¡¥§ ®âªàëâ¨ï ä ©« . |
/programs/media/zsea/Docs |
---|
Property changes: |
Added: tsvn:logminsize |
+5 |
\ No newline at end of property |
/programs/media/zsea/animat.inc |
---|
0,0 → 1,345 |
;--------------------------------------------------------------------- |
RAW1_processing: |
; mov ebx,[raw_pointer] |
; mov eax,[ebx+16] |
; mov [raw_pointer],eax |
; jmp convert.all_ok |
xor eax,eax |
mov [Repeat_N],eax |
inc eax |
mov [RAW1_flag],al |
mov ebx,[raw_pointer] |
mov [RAW1_pointer],ebx |
mov eax,[ebx+4] |
mov [Total_Repeat_N],eax |
cmp eax,1 |
jne @f |
xor eax,eax |
mov [RAW1_flag],al |
@@: |
; mov [test1],eax |
mov eax,[ebx+8] |
mov [img_width],eax |
mov [img_width_2],eax |
; mov [test1],eax |
mov ecx,[ebx+12] |
mov [img_high],ecx |
mov [img_high_2],ecx |
; mov [test2],ecx |
imul ecx,eax |
; mov eax,ecx |
; shl ecx,1 |
; add ecx,eax |
shl ecx,2 |
add ecx,256*4 |
add ecx,44 |
push ecx |
mcall 68,12 |
mov [raw_pointer],eax |
mov ebx,[RAW1_pointer] |
mov ecx,[ebx+8] |
mov [eax+4],ecx ; x |
mov ecx,[ebx+12] |
mov [eax+8],ecx ; y |
mov [eax+12],dword 32 ;8 |
mov [eax+20],dword 44 |
mov [eax+24],dword 1024 |
mov [eax+28],dword 44+1024 |
; mov [eax+32], |
; mov [img_palette],eax |
add eax,44+1024 |
mov [soi],eax |
pop ecx |
cmp [Total_Repeat_N],1 |
je @f |
sub ecx,44+1024 |
mov [RAW1_size],ecx |
mov edi,[soi] |
mov eax,-1 |
shr ecx,2 |
cld |
rep stosd |
mov ecx,[RAW1_size] |
mcall 68,12 |
mov [previous_frame_pointer],eax |
@@: |
mov [img_resolution_2],8 |
mov [img_resolution],32 |
call copy_next_frame |
; inc [Repeat_N] |
; call copy_next_frame |
; inc [Repeat_N] |
; call copy_next_frame |
; mov [Repeat_N],0 |
jmp convert.img_resolution_ok |
;--------------------------------------------------------------------- |
copy_next_frame: |
mov eax,[RAW1_pointer] |
mov ebx,[eax+8] |
mov [RAW1_size_x],ebx |
mov eax,[Repeat_N] |
shl eax,4 |
; eax = (start of current Repeat_N) - 16 |
add eax,[RAW1_pointer] |
mov esi,[eax+16] |
; esi = pointer to current RAW |
; mov ebx,[RAW1_pointer] |
mov edi,[RAW1_size_x] ;[ebx+8] |
mov ebx,[eax+24] |
shl ebx,2 |
imul edi,ebx |
mov ebx,[eax+20] |
shl ebx,2 |
add edi,ebx |
; add edi,[raw_pointer] |
; add edi,44 |
add edi,[soi] |
; edi = pointer to start for current frame |
mov ebx,[eax+28] |
test bx,bx |
jnz @f |
; inc ebx |
mov bx,10 |
@@: |
mov [Frame_delay],bx |
shr ebx,16 |
mov [Transp_index],bh |
mov al,bl |
shr al,2 |
and al,111b |
mov [Disposal_Method],al |
; cmp al,2 |
; jne @f |
; call save_previous_frame |
;@@: |
cmp al,3 |
jne @f |
call save_previous_frame |
@@: |
and bl,1b |
mov [Transp_flag],bl |
mov ebx,[esi+4] ; X size og current frame |
mov ecx,[esi+8] ; Y size og current frame |
mov eax,[esi+20] |
add eax,esi |
mov [img_palette],eax |
pusha |
mov ebx,[raw_pointer] |
mov edi,[ebx+20] |
add edi,ebx |
mov esi,eax |
mov ecx,256 |
xor eax,eax |
cld |
rep movsd |
popa |
mov eax,[esi+28] |
add esi,eax |
.y: |
push edi |
push ebx |
.x: |
cld |
lodsb |
cmp [Transp_flag],0 |
je @f |
cmp [Transp_index],al |
jne @f |
; cmp [Disposal_Method],2 |
; jne .not_disposal_backgr |
; mov [edi],dword -1 ; 0xff |
; inc edi |
;.not_disposal_backgr: |
add edi,4 |
jmp .no_store |
@@: |
push ebx edi |
mov ebx,[raw_pointer] |
mov edi,[ebx+20] |
add edi,ebx |
and eax,0xff |
shl eax,2 |
add edi,eax |
mov eax,[edi] |
pop edi ebx |
stosd |
.no_store: |
dec ebx |
jnz .x |
pop ebx |
pop edi |
mov eax,[RAW1_size_x] |
shl eax,2 |
add edi,eax |
dec ecx |
jnz .y |
inc [Repeat_N] |
mov eax,[Repeat_N] |
; mov [test2],eax |
cmp [Total_Repeat_N],eax |
ja @f |
xor eax,eax |
mov [Repeat_N],eax |
@@: |
mcall 26,9 |
movzx ebx,word [Frame_delay] |
add eax,ebx |
mov [Animation_timer],eax |
ret |
;--------------------------------------------------------------------- |
animation_handler: |
mcall 23,1 |
; pusha |
; mcall 26,9 |
; cmp [Animation_timer],eax |
; ja @f |
; call .draw_image |
;@@: |
; popa |
cmp [open_file_flag],1 |
je kopen_1 |
cmp [sort_directory_flag],byte 1 |
je red_sort_directory |
cmp [redraw_flag],byte 1 |
je redraw_window |
cmp eax,1 ; ïåðåðèñîâàòü îêíî ? |
je red ; åñëè äà - íà ìåòêó red |
cmp eax,2 ; íàæàòà êëàâèøà ? |
je key ; åñëè äà - íà key |
cmp eax,3 ; íàæàòà êíîïêà ? |
je button ; åñëè äà - íà button |
cmp eax,6 |
je mouse |
mcall 26,9 |
cmp [Animation_timer],eax |
ja animation_handler ;@f |
.1: |
call .draw_image |
; mov eax,[scaling_mode] |
; jmp zoom_plus.2 |
jmp still |
;@@: |
; mcall 23,1 |
; jmp still.1 |
;--------------------------------------------------------------------- |
.draw_image: |
; mov eax,[Repeat_N] |
; test eax,eax |
; jz .first_frame |
mov al,[Disposal_Method] |
cmp al,2 |
jne @f |
call restore_background |
jmp .first_frame |
@@: |
cmp al,3 |
jne @f |
call restore_previous_frame |
@@: |
.first_frame: |
call copy_next_frame |
mov [no_fill],1 |
call drawimage |
mov [no_fill],0 |
ret |
;--------------------------------------------------------------------- |
restore_background: |
; cmp [Transp_flag],0 |
; je @f |
; pusha |
; mov edi,[soi] |
; mov eax,[fill_color] ; -1 |
; mov ecx,[RAW1_size] |
; shr ecx,2 |
; cld |
; rep stosd |
; popa |
; ret |
;@@: |
pusha |
mov eax,[Repeat_N] |
test eax,eax |
jz @f |
dec eax |
@@: |
shl eax,4 |
; eax = (start of current Repeat_N) - 16 |
add eax,[RAW1_pointer] |
mov esi,[eax+16] |
; esi = pointer to current RAW |
mov edi,[RAW1_size_x] ;[ebx+8] |
mov ebx,[eax+24] |
shl ebx,2 |
imul edi,ebx |
mov ebx,[eax+20] |
shl ebx,2 |
add edi,ebx |
add edi,[soi] |
; edi = pointer to start for current frame |
mov ebx,[esi+4] ; X size og current frame |
mov ecx,[esi+8] ; Y size og current frame |
.y: |
push edi |
push ebx |
mov eax,[fill_color] |
.x: |
cld |
stosd |
dec ebx |
jnz .x |
pop ebx |
pop edi |
mov eax,[RAW1_size_x] |
shl eax,2 |
add edi,eax |
dec ecx |
jnz .y |
popa |
ret |
;--------------------------------------------------------------------- |
restore_previous_frame: |
pusha |
mov esi,[previous_frame_pointer] |
mov edi,[soi] |
mov ecx,[RAW1_size] |
shr ecx,2 |
cld |
rep movsd |
popa |
ret |
;--------------------------------------------------------------------- |
save_previous_frame: |
pusha |
mov esi,[soi] |
mov edi,[previous_frame_pointer] |
mov ecx,[RAW1_size] |
shr ecx,2 |
cld |
rep movsd |
popa |
ret |
;--------------------------------------------------------------------- |
/programs/media/zsea/build.bat |
---|
0,0 → 1,5 |
@echo lang fix en >lang.inc |
@fasm -m 16384 zSea.asm zSea |
@erase lang.inc |
@kpack zSea |
@pause |
/programs/media/zsea/build.sh |
---|
0,0 → 1,9 |
#!/bin/bash |
# This script does for linux the same as build.bat for DOS |
echo "lang fix en" |
echo "lang fix en" > lang.inc |
fasm -m 65536 zSea.asm zSea |
@kpack zSea |
rm -f lang.inc |
read |
exit 0 |
/programs/media/zsea/clr_bcgr.inc |
---|
0,0 → 1,17 |
;--------------------------------------------------------------------- |
clear_thread: |
call get_memory_for_tread_stack |
mov [clear_thread_stack],eax |
mcall 51, 1, clear_thread_start ;, clear_thread_stack |
ret |
;--------------------------------------------------------------------- |
clear_thread_start: |
mcall 5,100 |
@@: |
mcall 23,10 |
cmp eax,5 |
je @f |
mcall 15,3 |
mcall 68,13,[clear_thread_stack] |
mcall -1 |
;--------------------------------------------------------------------- |
/programs/media/zsea/config.inc |
---|
0,0 → 1,0 |
__CPU_type fix p5 |
/programs/media/zsea/convert.inc |
---|
0,0 → 1,258 |
;--------------------------------------------------------------------- |
convert_plugin_invoke: |
mov eax,[plugin_0_name] |
call prepare_convert |
push eax |
call [Convert_plugin_0.Start] |
call check_convert |
;------------------------------- |
mov eax,[plugin_1_name] |
call prepare_convert |
push eax |
call [Convert_plugin_1.Start] |
call check_convert |
;------------------------------- |
mov eax,[plugin_2_name] |
call prepare_convert |
push eax |
call [Convert_plugin_2.Start] |
call check_convert |
;------------------------------- |
mov eax,[plugin_3_name] |
call prepare_convert |
push eax |
call [Convert_plugin_3.Start] |
call check_convert |
;------------------------------- |
mov eax,[plugin_4_name] |
call prepare_convert |
push eax |
call [Convert_plugin_4.Start] |
call check_convert |
;------------------------------- |
mov eax,[plugin_5_name] |
call prepare_convert |
push eax |
call [Convert_plugin_5.Start] |
call check_convert |
;------------------------------- |
mov eax,[plugin_6_name] |
call prepare_convert |
push eax |
call [Convert_plugin_6.Start] |
call check_convert |
;------------------------------- |
mov eax,[plugin_7_name] |
call prepare_convert |
push eax |
call [Convert_plugin_7.Start] |
call check_convert |
;------------------------------- |
mov eax,[plugin_8_name] |
call prepare_convert |
push eax |
call [Convert_plugin_8.Start] |
mov eax,[return_code] |
call check_convert |
;------------------------------- |
mov eax,[plugin_9_name] |
call prepare_convert |
push eax |
call [Convert_plugin_9.Start] |
;------------------------------- |
.end: |
mov ecx,[image_file] |
mcall 68, 13, |
ret |
;--------------------------------------------------------------------- |
prepare_convert: |
cmp eax,dword 'NoKe' |
je .1 ;@f |
xor eax,eax |
mov [return_code],eax |
mov eax,image_file |
ret |
.1: |
add esp,4 |
jmp convert_plugin_invoke.end |
;--------------------------------------------------------------------- |
check_convert: |
mov eax,[return_code] |
test eax,eax |
jz prepare_convert.1 |
cmp eax,dword 2 |
je prepare_convert.1 |
ret |
;--------------------------------------------------------------------- |
convert: |
xor eax,eax |
cmp [error_fs],eax |
jnz .error |
call convert_plugin_invoke |
cmp [return_code],dword 0 |
je .all_ok |
xor eax,eax |
;------------------------------- |
.error_1: |
mov [img_size],eax |
mov [img_width],eax |
mov [img_width_2],eax |
mov [img_high],eax |
mov [img_high_2],eax |
mov [img_resolution],eax |
mov [img_resolution_2],eax |
mov [img_palette],eax |
mov [soi],eax |
mov [file_name],eax |
mov [Total_Repeat_N],eax |
mov [RAW1_pointer],eax |
mov [RAW1_flag],al |
mov [scaling_mode],dword 100 |
call error_window |
ret |
;------------------------------- |
.error: |
xor eax,eax |
mov [return_code],eax |
jmp .error_1 |
;------------------------------- |
.all_ok: |
mov ebx,[raw_pointer] |
cmp [ebx],dword 'RAW1' |
je RAW1_processing |
xor eax,eax |
mov [RAW1_flag],al |
mov [RAW1_pointer],eax |
inc eax |
mov [Total_Repeat_N],eax |
mov eax,[ebx+4] |
mov [img_width],eax |
mov [img_width_2],eax |
mov eax,[ebx+8] |
mov [img_high],eax |
mov [img_high_2],eax |
mov eax,[ebx+12] |
mov [img_resolution_2],eax |
; mov eax,[ebx+20] |
; add eax,ebx |
; mov [img_palette],eax |
; mov eax,[ebx+28] |
; add eax,ebx |
; mov [soi],eax |
;------------------------------- |
; xor eax,eax |
; mov [raw_pointer_2],eax |
mov eax,image_file |
; call [plugin_convert] |
call [convert_Start] |
mov ebx,[raw_pointer] |
mov eax,[ebx+12] |
; cmp [ebx+18],word 2 |
; jne @f |
; shr eax,1 |
;@@: |
cmp eax,15 |
jne @f |
inc eax |
@@: |
mov [img_resolution],eax |
mov eax,[ebx+20] |
add eax,ebx |
mov [img_palette],eax |
mov eax,[ebx+28] |
add eax,ebx |
mov [soi],eax |
; mov eax,[raw_pointer_2] |
; test eax,eax |
; jz @f |
; mov [soi],eax |
;@@: |
;------------------------------- |
; mov eax,[img_resolution] |
; cmp eax,32 |
; ja @f |
; cmp [ebx+18],word 2 |
; je @f |
; cmp [ebx+18],word 1 |
; jne .img_resolution_ok |
;.grayscale_16: |
; cmp eax,16 |
; jne .img_resolution_ok |
; shr eax,1 |
; mov [img_resolution],eax |
; jmp .img_resolution_ok |
;@@: |
; shr eax,1 |
; cmp eax,16 |
; jne @f |
; shr eax,1 |
;@@: |
; mov [img_resolution],eax |
.img_resolution_ok: |
xor eax,eax |
mov [scroll_bar_data_vertical.position],eax |
mov [scroll_bar_data_horizontal.position],eax |
call get_window_param |
test [window_status],1b |
jnz .end |
cmp [scaling_mode],dword 100 |
jne .end |
mov ebx,[img_high] |
mov eax,[img_width] |
test ebx, ebx |
jns @f |
neg ebx |
@@: |
add eax,9 |
cmp eax,770 |
jae @f |
mov eax,770 |
@@: |
add ebx,54 |
cmp ebx,150 |
jae @f |
mov ebx,150 |
@@: |
mov [wnd_width],eax |
mov [wnd_height],ebx |
mcall 14 |
mov ebx,eax |
and eax,0xffff |
shr ebx,16 |
inc eax |
inc ebx |
cmp eax,[wnd_height] |
jae @f |
xor eax,eax |
mov ax,[scroll_bar_data_vertical.size_x] |
add [wnd_width],eax |
@@: |
cmp ebx,[wnd_width] |
jae @f |
xor eax,eax |
mov ax,[scroll_bar_data_horizontal.size_y] |
add [wnd_height],eax |
@@: |
mov eax,[wnd_width] |
mov ebx,[wnd_height] |
test [bWasDraw],1 |
jz @f |
mov esi,ebx |
mov edx,eax |
mcall 67,-1,-1 |
@@: |
.end: |
ret |
;--------------------------------------------------------------------- |
/programs/media/zsea/dat_area.inc |
---|
0,0 → 1,102 |
string: |
; rb string+257-$ |
rb 4096 |
;string_1: |
; rb 4096 |
;---------------------- |
path: |
rb 4096 |
;---------------------- |
;plugin_pach_1: |
; rb 4096 |
;---------------------- |
plugin_pach: |
rb 4096 |
;---------------------- |
library_path: |
rb 4096 |
;---------------------- |
Filter: |
rb 4096 |
;---------------------- |
Help_path: |
rb 1024 ;4096 |
;---------------------- |
Editor_path: |
rb 1024 ;4096 |
;---------------------- |
OpenDialog_path: |
rb 1024 ;4096 |
;---------------------- |
key_help_name: |
rb 128 |
;---------------------- |
plugin_0_name: |
rb 128 |
plugin_1_name: |
rb 128 |
plugin_2_name: |
rb 128 |
plugin_3_name: |
rb 128 |
plugin_4_name: |
rb 128 |
plugin_5_name: |
rb 128 |
plugin_6_name: |
rb 128 |
plugin_7_name: |
rb 128 |
plugin_8_name: |
rb 128 |
plugin_9_name: |
rb 128 |
;---------------------- |
file_name: |
rb 1024 |
;---------------------- |
temp_area: |
rb 4096 |
;---------------------- |
procinfo: |
process_info: |
rb 1024 |
;---------------------- |
procinfo_threads: |
rb 1024 |
;---------------------- |
; clear bacground thread |
; rb 512 |
;clear_thread_stack: |
;---------------------- |
; window option |
; rb 1024 ;4096 |
;thread_stack_7: |
;---------------------- |
; window error message |
; rb 1024 ;4096 |
;thread_stack_6: |
;---------------------- |
; window set sort mode |
; rb 1024 ;4096 |
;thread_stack_5: |
;---------------------- |
; window background |
; rb 1024 ;4096 |
;thread_stack_4: |
;---------------------- |
; window about |
; rb 1024 ;4096 |
;thread_stack_3: |
;---------------------- |
; file info |
; rb 1024 ;4096 |
;thread_stack_2: |
;---------------------- |
; file open |
; rb 1024 ;4096 |
;thread_stack: |
;---------------------- |
rb 4096 |
stacktop: |
;---------------------- |
/programs/media/zsea/data.inc |
---|
0,0 → 1,1710 |
;--------------------------------------------------------------------- |
; DATA AREA |
;--------------------------------------------------------------------- |
lsz labelt1,\ |
en, 'File',\ |
ru, ' ©«',\ |
de, 'Datei' |
db 0 |
;--------------------------------------------------------------------- |
lsz labelt2,\ |
en, 'File info',\ |
ru, 'ä®à¬ æ¨ï ® ä ©«¥',\ |
de, 'Dateiinfo' |
db 0 |
lsz fitext,\ |
en, 'File name ',\ |
en, 'File size ',\ |
en, 'X size ',\ |
en, 'Y size ',\ |
en, 'Resolution ',\ |
en, 'Frames total ',\ |
\ |
ru, '¬ï ä ©« ',\ |
ru, ' §¬¥à ä ©« ',\ |
ru, '¨à¨ ',\ |
ru, 'ëá®â ',\ |
ru, '¨â ¯¨ªá¥« ',\ |
ru, 'ᥣ® ª ¤à®¢ ',\ |
\ |
de, 'Datei Namen ',\ |
de, 'Fateigroesse ',\ |
de, 'X groesse ',\ |
de, 'Y groesse ',\ |
de, 'Die Tiefe ',\ |
de, 'Zahl Frames ' |
db 0 |
;--------------------------------------------------------------------- |
Authors_text: |
.1: db 'zSea version: 1.00 RC3 Date: 12/06/2011',0 |
.2: db 'Authors:',0 |
.3: db 'Marat Zakiyanov aka Mario(Mario79)',0 |
.4: db 'zSea program, modules: cnv_bmp.obj,',0 |
.5: db 'cnv_png.obj, convert.obj, rotate.obj ',0 |
.6: db 'scaling.obj, box_lib.obj, OpenDialog',0 |
.7: db 'proc_lib.obj',0 |
.8: db 'Evgeny Grechnikov aka Diamond',0 |
.9: db 'modules: cnv_jpeg.obj, cnv_gif.obj,',0 |
.10: db 'archiver.obj, sort.obj ',0 |
.11: db 'Alexey Teplov aka <Lrz>',0 |
.12: db 'modules: box_lib.obj, load_lib.mac',0 |
.13: db 'Mihail Semenyako aka Mike.dld',0 |
.14: db 'modules: libini.obj, libio.obj',0 |
;--------------------------------------------------------------------- |
status dd 0 ;bit0=1 if file thread is created |
;process dd 0 |
bWasDraw db 0 |
vflag: db 'x' |
bgrmode: dd 1 |
wnd_width dd 210 |
wnd_height dd 53 |
;--------------------------------- |
lsz labelt3,\ |
en, 'About program',\ |
ru, ' ¯à®£à ¬¬¥',\ |
de, 'Uber das programm' |
db 0 |
;--------------------------------- |
lsz labelt4,\ |
en, 'Set wallpaper',\ |
ru, 'áâ ®¢ª ä® ',\ |
de, 'Installation hintergrund' |
db 0 |
;--------------------------------- |
lsz labelt5,\ |
en, 'Select sorting mode',\ |
ru, '®àâ¨à®¢ª ¤¨à¥ªâ®à¨¨',\ |
de, 'Regimes der Sortierung' |
db 0 |
;--------------------------------- |
lsz bgrdtext,\ |
en, 'Set as background:',\ |
ru, '¨¯ ®¡®¥¢:',\ |
de, 'Als hintergrund' |
db 0 |
;--------------------------------- |
lsz sorttext,\ |
en, 'Directory sorting mode:',\ |
ru, '¥¦¨¬ á®àâ¨à®¢ª¨ ¤¨à¥ªâ®à¨¨:',\ |
de, 'Regime der Sortierung des Verzeichnisses:' |
db 0 |
;--------------------------------- |
lsz errortext,\ |
en, 'File system error:',\ |
ru, '訡ª ä ©«®¢®© á¨á⥬ë:',\ |
de, 'Fehler files systemes:' |
db 0 |
;--------------------------------- |
lsz optiontext,\ |
en, 'Options:',\ |
ru, ' áâனª¨:',\ |
de, 'Optionen:' |
db 0 |
;--------------------------------- |
;lsz tiled,\ |
; en, 'Tiled',\ |
; ru, ' ¬®áâ¨âì',\ |
; de, 'Gekachelt' |
;lsz stretch,\ |
; en, 'Stretch',\ |
; ru, ' áâïãâì',\ |
; de, 'Gestreckt' |
;--------------------------------- |
lsz ok_btn,\ |
en, 'Ok',\ |
ru, 'Ok',\ |
de, 'Ok' |
db 0 |
;--------------------------------- |
lsz slide_show_delay_title,\ |
en, 'Slide show delay:',\ |
ru, ' ¤¥à¦ª á« ©¤è®ã:',\ |
de, 'Verzug der schau:' |
db 0 |
;--------------------------------- |
lsz arrows_offset_title,\ |
en, 'Arrows offset:',\ |
ru, '¬¥é¥¨¥ áâ५ª ¬¨:',\ |
de, 'Bewegung von den zeigern:' |
db 0 |
;--------------------------------- |
slide_show_delay_text: |
db '+ -',0 |
;--------------------------------------------------------------------- |
zoom_auto_factor: |
dd 0 |
zoom_auto_text: |
db 'auto',0 |
zoom_factors: |
dd zoom_factors.100 |
.1: dd 0 |
.min: |
dd 1 |
dd 2 |
dd 3 |
dd 4 |
dd 5 |
dd 7 |
dd 10 |
dd 17 |
dd 25 |
dd 37 |
dd 50 |
dd 62 |
dd 75 |
dd 87 |
.100: |
dd 100 |
dd 125 |
dd 150 |
dd 175 |
dd 200 |
dd 225 |
dd 250 |
dd 275 |
dd 300 |
dd 350 |
dd 400 |
dd 450 |
dd 500 |
dd 600 |
dd 700 |
dd 800 |
dd 900 |
dd 1000 |
dd 1100 |
dd 1200 |
dd 1300 |
dd 1400 |
dd 1500 |
dd 1750 |
dd 2000 |
dd 2250 |
dd 2500 |
dd 2750 |
dd 3000 |
dd 3500 |
dd 4000 |
dd 4500 |
.max: |
dd 5000 |
zoom_factors_old dd 0 |
;--------------------------------------------------------------------- |
; not change this section!!! |
; start section |
;--------------------------------------------------------------------- |
align 4 |
image_file dd 0 ;+0 |
raw_pointer dd 0 ;+4 |
return_code dd 0 ;+8 |
img_size dd 0 ;+12 |
deflate_unpack dd 0 ;+16 |
raw_pointer_2 dd 0 ;+20 |
;--------------------------------------------------------------------- |
; end section |
;--------------------------------------------------------------------- |
test1 dd 0 ;+24 |
test2 dd 0 ;+28 |
test3 dd 0 ;+32 |
test4 dd 0 ;+36 |
test5 dd 0 ;+40 |
test6 dd 0 ;+44 |
test7 dd 0 ;+48 |
;--------------------------------------------------------------------- |
align 4 |
soi dd 0 |
img_width dd 0 |
img_width_2 dd 0 |
img_high dd 0 |
img_high_2 dd 0 |
img_resolution dd 0 |
img_resolution_2 dd 0 |
img_palette dd 0 |
background_color dd 0xffffff |
RAW1_pointer dd 0 |
RAW1_size_x dd 0 |
RAW1_size dd 0 |
Repeat_N dd 0 |
Total_Repeat_N dd 1 |
previous_frame_pointer dd 0 |
Animation_timer dd 0 |
Frame_delay dw 0 |
Transp_flag db 0 |
Transp_index db 0 |
Disposal_Method db 0 |
RAW1_flag db 0 |
no_fill db 0 |
redraw_wallpaper_flag db 0 |
calc_next_value_plus db 0 |
calc_next_value_minus db 0 |
;--------------------------------------------------------------------- |
align 4 |
;plugin dd 0 |
;plugin_1 dd 0 |
;plugin_2 dd 0 |
;plugin_3 dd 0 |
;plugin_validate dd 0 |
;plugin_validate_1 dd 0 |
;plugin_validate_2 dd 0 |
;plugin_validate_3 dd 0 |
;plugin_format dd 0 |
;plugin_format_1 dd 0 |
;plugin_format_2 dd 0 |
;plugin_format_3 dd 0 |
;plugin_convert dd 0 |
;plugin_convert_background dd 0 |
;plugin_sort dd 0 |
;plugin_rotate dd 0 |
;plugin_scaling dd 0 |
slide_show_delay dd 500 ; cost of 0,01 sec. |
slide_show_delay_old dd 0 |
sort_type dd 2 |
sort_type_old dd 0 |
;--------------------------------------------------------------------- |
expansion_length dd 0 |
expansion_start dd 0 |
timer dd 0 |
;--------------------------------------------------------------------- |
mouse_scroll_data: |
.vertical dw 0 |
.horizontal dw 0 |
mouse_position: |
.y dw 0 |
.x dw 0 |
mouse_position_old: |
.y dw 0 |
.x dw 0 |
mouse_keys dd 0 |
mouse_keys_old dd 0 |
arrows_offset dd 10 |
arrows_offset_old dd 10 |
option_pointer dd 0 |
plus_pointer dd 0 |
minus_pointer dd 0 |
space_pointer dd 0 |
;--------------------------------------------------------------------- |
pos: dd 6 |
work_area_LR_old dd 0 |
work_area_TB_old dd 0 |
scaling_mode dd 100 |
scaling_mode_old dd 100 |
window_start_x_old dd 0 |
window_start_y_old dd 0 |
window_high_old dd 0 |
window_width_old dd 0 |
window_start_x dd 0 |
window_start_y dd 0 |
window_high dd 0 |
window_width dd 0 |
;skin_high dd 0 |
window_status dd 0 |
draw_SB db 0 |
draw_SB1 db 0 |
correct_w db 0 |
correct_h db 0 |
wa_width dw 0 |
wa_high dw 0 |
wa_width_1 dw 0 |
wa_width_2 dw 0 |
wa_high_1 dw 0 |
wa_high_2 dw 0 |
image_start_coordinates dd 0 |
image_draw_size: |
.y: dw 0 |
.x: dw 0 |
vertical_position_coorect dd 0 |
horizontal_position_coorect dd 0 |
fill_color dd 0xffffff |
fill_color_old dd 0xffffff |
position_coorect db 0 |
open_file_flag db 0 |
sort_directory_flag db 0 |
redraw_flag db 0 |
press_Enter_flag db 0 |
capture_image_area_flag db 0 |
correct_scrollbar_100_flag db 0 |
;--------------------------------------------------------------------- |
;test_area: |
;dd test_area.end - test_area |
;db 'BMP',0 |
;.end: |
;db 0,0,0,0,0,0,0,0,0,0,0,0,0 |
;--------------------------------------------------------------------- |
aApplicationsPaths db 'ApplicationsPaths',0 |
aOther db 'Other',0 |
aHelp db 'Help',0 |
aEditor db 'Editor',0 |
aOpenDialog db 'OpenDialog',0 |
akey_help db 'HelpFile',0 |
aConvertPlugins db 'ConvertPlugins',0 |
ConvertPlugins_no_key db 'NoKey',0 |
aCP0 db 'CP0',0 |
aCP1 db 'CP1',0 |
aCP2 db 'CP2',0 |
aCP3 db 'CP3',0 |
aCP4 db 'CP4',0 |
aCP5 db 'CP5',0 |
aCP6 db 'CP6',0 |
aCP7 db 'CP7',0 |
aCP8 db 'CP8',0 |
aCP9 db 'CP9',0 |
;--------------------------------------------------------------------- |
plugin_BMP_name db 'cnv_bmp.obj',0 |
plugin_PNG_name db 'cnv_png.obj',0 |
plugin_JPEG_name db 'cnv_jpeg.obj',0 |
plugin_GIF_name db 'cnv_gif.obj',0 |
;plugin_convert_name db 'convert.obj',0 |
;plugin_sort_name db 'sort.obj',0 |
;plugin_rotate_name db 'rotate.obj',0 |
;plugin_scaling_name db 'scaling.obj',0 |
;plugin_UNPACK_name db 'archiver.obj',0 |
;boxlib_name db 'box_lib.obj',0 |
;Libini_name db 'libini.obj',0 |
plugins_directory db 'plugins/',0 |
ini_file_name db 'zsea.ini',0 |
button_name db 'buttons.png',0 |
;buttons_passive_name db '1.png',0 |
;buttons_active_name db '2.png',0 |
;buttons_click_name db '3.png',0 |
buttons_directory db 'buttons/',0 |
;UNPACK_function_name db 'deflate_unpack',0 |
;UNPACK_function_name_end: |
;UNPACK_function_name db 'deflate_unpack2',0 |
;UNPACK_function_name_end: |
system_dir_Boxlib db '/sys/lib/box_lib.obj',0 |
system_dir_Libini db '/sys/lib/libini.obj',0 |
system_dir_Sort db '/sys/lib/sort.obj',0 |
system_dir_UNPACK db '/sys/lib/archiver.obj',0 |
system_dir_Convert db '/sys/lib/convert.obj',0 |
system_dir_Rotate db '/sys/lib/rotate.obj',0 |
system_dir_Scaling db '/sys/lib/scaling.obj',0 |
system_dir_ProcLib db '/sys/lib/proc_lib.obj',0 |
err_message_found_lib1 db 'box_lib.obj - Not found!',0 |
err_message_found_lib2 db 'libini.obj - Not found!',0 |
err_message_found_lib3 db 'sort.obj - Not found!',0 |
err_message_found_lib4 db 'archiver.obj - Not found!',0 |
err_message_found_lib5 db 'convert.obj - Not found!',0 |
err_message_found_lib6 db 'rotate.obj - Not found!',0 |
err_message_found_lib7 db 'scaling.obj - Not found!',0 |
err_message_found_lib8 db 'proc_lib.obj - Not found!',0 |
err_message_import1 db 'box_lib.obj - Wrong import!',0 |
err_message_import2 db 'libini.obj - Wrong import!',0 |
err_message_import3 db 'sort.obj - Wrong import!',0 |
err_message_import4 db 'archiver.obj - Wrong import!',0 |
err_message_import5 db 'convert.obj - Wrong import!',0 |
err_message_import6 db 'rotate.obj - Wrong import!',0 |
err_message_import7 db 'scaling.obj - Wrong import!',0 |
err_message_import8 db 'proc_lib.obj - Wrong import!',0 |
head_f_i: |
head_f_l db 'Errors of PLugins:',0 |
;--------------------------------------------------------------------- |
l_libs_start: |
library01 l_libs system_dir_Boxlib+9, path, library_path, system_dir_Boxlib, \ |
err_message_found_lib1, head_f_l, Box_lib_import, err_message_import1, head_f_i, plugins_directory |
library02 l_libs system_dir_Libini+9, path, library_path, system_dir_Libini, \ |
err_message_found_lib2, head_f_l, Libini_import, err_message_import2, head_f_i, plugins_directory |
library03 l_libs system_dir_Sort+9, path, library_path, system_dir_Sort, \ |
err_message_found_lib3, head_f_l, Sort_import, err_message_import3, head_f_i, plugins_directory |
library04 l_libs system_dir_UNPACK+9, path, library_path, system_dir_UNPACK, \ |
err_message_found_lib4, head_f_l, UNPACK_import, err_message_import4, head_f_i, plugins_directory |
library05 l_libs system_dir_Convert+9, path, library_path, system_dir_Convert, \ |
err_message_found_lib5, head_f_l, Convert_import, err_message_import5, head_f_i, plugins_directory |
library06 l_libs system_dir_Rotate+9, path, library_path, system_dir_Rotate, \ |
err_message_found_lib6, head_f_l, Rotate_import, err_message_import6, head_f_i, plugins_directory |
library07 l_libs system_dir_Scaling+9, path, library_path, system_dir_Scaling, \ |
err_message_found_lib7, head_f_l, Scaling_import, err_message_import7, head_f_i, plugins_directory |
library08 l_libs system_dir_ProcLib+9, path, library_path, system_dir_ProcLib, \ |
err_message_found_lib8, head_f_l, ProcLib_import, err_message_import8, head_f_i, plugins_directory |
end_l_libs: |
;--------------------------------------------------------------------- |
align 4 |
cnv_plugin_name_pointer dd plugin_0_name |
cnv_plugin_import_pointer dd Convert_plugin_0 |
system_path db '/sys/lib/' |
.1: rb 128 |
err_message_found_lib db 'Not found - ' |
.1: rb 128 |
err_message_import db 'Wrong import - ' |
.1: rb 128 |
;--------------------------------------------------------------------- |
Convert_plugin_0: |
.Start dd aCP_Start |
.Version dd aCP_Version |
.Check dd aCP_Check |
.Assoc dd aCP_Assoc |
dd 0 |
dd 0 |
Convert_plugin_1: |
.Start dd aCP_Start |
.Version dd aCP_Version |
.Check dd aCP_Check |
.Assoc dd aCP_Assoc |
dd 0 |
dd 0 |
Convert_plugin_2: |
.Start dd aCP_Start |
.Version dd aCP_Version |
.Check dd aCP_Check |
.Assoc dd aCP_Assoc |
dd 0 |
dd 0 |
Convert_plugin_3: |
.Start dd aCP_Start |
.Version dd aCP_Version |
.Check dd aCP_Check |
.Assoc dd aCP_Assoc |
dd 0 |
dd 0 |
Convert_plugin_4: |
.Start dd aCP_Start |
.Version dd aCP_Version |
.Check dd aCP_Check |
.Assoc dd aCP_Assoc |
dd 0 |
dd 0 |
Convert_plugin_5: |
.Start dd aCP_Start |
.Version dd aCP_Version |
.Check dd aCP_Check |
.Assoc dd aCP_Assoc |
dd 0 |
dd 0 |
Convert_plugin_6: |
.Start dd aCP_Start |
.Version dd aCP_Version |
.Check dd aCP_Check |
.Assoc dd aCP_Assoc |
dd 0 |
dd 0 |
Convert_plugin_7: |
.Start dd aCP_Start |
.Version dd aCP_Version |
.Check dd aCP_Check |
.Assoc dd aCP_Assoc |
dd 0 |
dd 0 |
Convert_plugin_8: |
.Start dd aCP_Start |
.Version dd aCP_Version |
.Check dd aCP_Check |
.Assoc dd aCP_Assoc |
dd 0 |
dd 0 |
Convert_plugin_9: |
.Start dd aCP_Start |
.Version dd aCP_Version |
.Check dd aCP_Check |
.Assoc dd aCP_Assoc |
dd 0 |
dd 0 |
aCP_Start db 'START',0 |
aCP_Version db 'version',0 |
aCP_Check db 'Check_Header',0 |
aCP_Assoc db 'Associations',0 |
;--------------------------------------------------------------------- |
file_mount: db 'File N: Amount: Zoom:',0 |
.end: |
current_key_code db 0 |
old_key_code db 0 |
;--------------------------------------------------------------------- |
; Tokens |
;--------------------------------------------------------------------- |
aSortMode db 'SortMode',0 |
aSlideShowDelay db 'SlideShowDelay',0 |
aArrowsOffset db 'ArrowsOffset',0 |
aShowFileName db 'ShowFileName',0 |
aFilteringFlag db 'FilteringFlag',0 |
;--------------------------------------------------------------------- |
;Sections |
;--------------------------------------------------------------------- |
aVariables db 'Variables',0 |
;aVar db 'Var',0 |
;aTemp db 'Temp',0 |
;--------------------------------------------------------------------- |
align 4 |
ProcLib_import: |
OpenDialog_Init dd aOpenDialog_Init |
OpenDialog_Start dd aOpenDialog_Start |
;OpenDialog__Version dd aOpenDialog_Version |
dd 0 |
dd 0 |
aOpenDialog_Init db 'OpenDialog_init',0 |
aOpenDialog_Start db 'OpenDialog_start',0 |
;aOpenDialog_Version db 'Version_OpenDialog',0 |
;--------------------------------------------------------------------- |
align 4 |
Scaling_import: |
Scaling_Start dd aScaling_Start |
Scaling_Version dd aScaling_Version |
dd 0 |
dd 0 |
aScaling_Start db 'START',0 |
aScaling_Version db 'version',0 |
;--------------------------------------------------------------------- |
align 4 |
Rotate_import: |
rotate_Start dd aRotate_Start |
rotate_Version dd aRotate_Version |
dd 0 |
dd 0 |
aRotate_Start db 'START',0 |
aRotate_Version db 'version',0 |
;--------------------------------------------------------------------- |
align 4 |
Convert_import: |
convert_Start dd aConvert_Start |
convert_Version dd aConvert_Version |
convert_Conv_24b dd aConvert_Conv_24b |
dd 0 |
dd 0 |
aConvert_Start db 'START',0 |
aConvert_Version db 'version',0 |
aConvert_Conv_24b db 'Convert24b',0 |
;--------------------------------------------------------------------- |
align 4 |
UNPACK_import: |
;unpack_Version dd aUnpack_Version |
;unpack_PluginLoad dd aUnpack_PluginLoad |
;unpack_OpenFilePlugin dd aUnpack_OpenFilePlugin |
;unpack_ClosePlugin dd aUnpack_ClosePlugin |
;unpack_ReadFolder dd aUnpack_ReadFolder |
;unpack_SetFolder dd aUnpack_SetFolder |
;unpack_GetFiles dd aUnpack_GetFiles |
;unpack_GetOpenPluginInfo dd aUnpack_GetOpenPluginInfo |
;unpack_Getattr dd aUnpack_Getattr |
;unpack_Open dd aUnpack_Open |
;unpack_Read dd aUnpack_Read |
;unpack_Setpos dd aUnpack_Setpos |
;unpack_Close dd aUnpack_Close |
;unpack_DeflateUnpack dd aUnpack_DeflateUnpack |
unpack_DeflateUnpack2 dd aUnpack_DeflateUnpack2 |
dd 0 |
dd 0 |
;aUnpack_Version db 'version',0 |
;aUnpack_PluginLoad db 'plugin_load',0 |
;aUnpack_OpenFilePlugin db 'OpenFilePlugin',0 |
;aUnpack_ClosePlugin db 'ClosePlugin',0 |
;aUnpack_ReadFolder db 'ReadFolder',0 |
;aUnpack_SetFolder db 'SetFolder',0 |
;aUnpack_GetFiles db 'GetFiles',0 |
;aUnpack_GetOpenPluginInfo db 'GetOpenPluginInfo',0 |
;aUnpack_Getattr db 'getattr',0 |
;aUnpack_Open db 'open',0 |
;aUnpack_Read db 'read',0 |
;aUnpack_Setpos db 'setpos',0 |
;aUnpack_Close db 'close',0 |
;aUnpack_DeflateUnpack db 'deflate_unpack',0 |
aUnpack_DeflateUnpack2 db 'deflate_unpack2',0 |
;--------------------------------------------------------------------- |
align 4 |
Sort_import: |
sort_init dd aSort_init |
sort_version dd aSort_version |
sort_dir dd aSort_SortDir |
sort_strcmpi dd aSort_strcmpi |
dd 0 |
dd 0 |
aSort_init db 'START',0 |
aSort_version db 'version',0 |
aSort_SortDir db 'SortDir',0 |
aSort_strcmpi db 'strcmpi',0 |
;--------------------------------------------------------------------- |
align 4 |
Libini_import: |
lib_init dd aLib_init |
version_lib_ini dd aVersion_lib_ini |
ini_enum_sections dd aIni_enum_sections |
ini_enum_keys dd aIni_enum_keys |
ini_get_str dd aIni_get_str |
ini_get_int dd aIni_get_int |
ini_get_color dd aIni_get_color |
ini_set_str dd aIni_set_str |
ini_set_int dd aIni_set_int |
ini_set_color dd aIni_set_color |
dd 0 |
dd 0 |
aLib_init db 'lib_init',0 |
aVersion_lib_ini db 'version',0 |
aIni_enum_sections db 'ini_enum_sections',0 |
aIni_enum_keys db 'ini_enum_keys',0 |
aIni_get_str db 'ini_get_str',0 |
aIni_get_int db 'ini_get_int',0 |
aIni_get_color db 'ini_get_color',0 |
aIni_set_str db 'ini_set_str',0 |
aIni_set_int db 'ini_set_int',0 |
aIni_set_color db 'ini_set_color',0 |
;--------------------------------------------------------------------- |
align 4 |
Box_lib_import: |
;init_lib dd a_init |
;version_lib dd a_version |
edit_box_draw dd aEdit_box_draw |
edit_box_key dd aEdit_box_key |
edit_box_mouse dd aEdit_box_mouse |
;version_ed dd aVersion_ed |
check_box_draw dd aCheck_box_draw |
check_box_mouse dd aCheck_box_mouse |
;version_ch dd aVersion_ch |
option_box_draw dd aOption_box_draw |
option_box_mouse dd aOption_box_mouse |
;version_op dd aVersion_op |
scrollbar_ver_draw dd aScrollbar_ver_draw |
scrollbar_ver_mouse dd aScrollbar_ver_mouse |
scrollbar_hor_draw dd aScrollbar_hor_draw |
scrollbar_hor_mouse dd aScrollbar_hor_mouse |
;version_scrollbar dd aVersion_scrollbar |
dinamic_button_draw dd aDbutton_draw |
dinamic_button_mouse dd aDbutton_mouse |
;version_dbutton dd aVersion_dbutton |
menu_bar_draw dd aMenu_bar_draw |
menu_bar_mouse dd aMenu_bar_mouse |
menu_bar_activate dd aMenu_bar_activate |
;version_menu_bar dd aVersion_menu_bar |
;FileBrowser_draw dd aFileBrowser_draw |
;FileBrowser_mouse dd aFileBrowser_mouse |
;FileBrowser_key dd aFileBrowser_key |
;Version_FileBrowser dd aVersion_FileBrowser |
dd 0 |
dd 0 |
;a_init db 'lib_init',0 |
;a_version db 'version',0 |
aEdit_box_draw db 'edit_box',0 |
aEdit_box_key db 'edit_box_key',0 |
aEdit_box_mouse db 'edit_box_mouse',0 |
;aVersion_ed db 'version_ed',0 |
aCheck_box_draw db 'check_box_draw',0 |
aCheck_box_mouse db 'check_box_mouse',0 |
;aVersion_ch db 'version_ch',0 |
aOption_box_draw db 'option_box_draw',0 |
aOption_box_mouse db 'option_box_mouse',0 |
;aVersion_op db 'version_op',0 |
aScrollbar_ver_draw db 'scrollbar_v_draw',0 |
aScrollbar_ver_mouse db 'scrollbar_v_mouse',0 |
aScrollbar_hor_draw db 'scrollbar_h_draw',0 |
aScrollbar_hor_mouse db 'scrollbar_h_mouse',0 |
;aVersion_scrollbar db 'version_scrollbar',0 |
aDbutton_draw db 'dbutton_draw',0 |
aDbutton_mouse db 'dbutton_mouse',0 |
;aVersion_dbutton db 'version_dbutton',0 |
aMenu_bar_draw db 'menu_bar_draw',0 |
aMenu_bar_mouse db 'menu_bar_mouse',0 |
aMenu_bar_activate db 'menu_bar_activate',0 |
;aVersion_menu_bar db 'version_menu_bar',0 |
;aFileBrowser_draw db 'FileBrowser_draw',0 |
;aFileBrowser_mouse db 'FileBrowser_mouse',0 |
;aFileBrowser_key db 'FileBrowser_key',0 |
;aVersion_FileBrowser db 'version_FileBrowser',0 |
;--------------------------------------------------------------------- |
align 4 |
load_directory_pointer dd 0 |
file_name_length dd 0 |
load_file_number dd 0 |
error_fs dd 0 |
error_pointer dd 0 |
;error_locate dd 0 |
error_window_x: dd 100 shl 16 + 300 |
error_window_y: dd 100 shl 16 + 100 |
PID dd 0 |
PID1 dd 0 |
PID2 dd 0 |
PID3 dd 0 |
PID4 dd 0 |
PID5 dd 0 |
PID6 dd 0 |
PID7 dd 0 |
active_process dd 0 |
timer_counter dd 0 |
draw_scrollbar_counter dd 0 |
;--------------------------------------------------------------------- |
align 4 |
error_fs_text_pointers: |
dd error_fs_text_0 |
dd error_fs_text_1 |
dd error_fs_text_2 |
dd error_fs_text_3 |
dd error_fs_text_4 |
dd error_fs_text_5 |
dd error_fs_text_6 |
dd error_fs_text_7 |
dd error_fs_text_8 |
dd error_fs_text_9 |
dd error_fs_text_10 |
dd error_fs_text_11 |
error_fs_text_0: db 'Success full',0 |
error_fs_text_1: db 'Base and/or partition of a hard disk is not defined',0 |
error_fs_text_2: db 'Function is not supported for the given file system',0 |
error_fs_text_3: db 'Unknown file system',0 |
error_fs_text_4: db 'Reserved, is never returned in the current implementation',0 |
error_fs_text_5: db 'File not found',0 |
error_fs_text_6: db 'End of file, EOF',0 |
error_fs_text_7: db 'Pointer lies outside of application memory',0 |
error_fs_text_8: db 'Disk is full',0 |
error_fs_text_9: db 'FAT table is destroyed',0 |
error_fs_text_10: db 'Access denied',0 |
error_fs_text_11: db 'Device error',0 |
;--------------------------------------------------------------------- |
error_type: |
db 'File system error',0 |
;--------------------------------------------------------------------- |
error_not_supported_file: |
db 'Unsupported file or corrupt data',0 |
;--------------------------------------------------------------------- |
error_not_enough_memory: |
db 'Not_enough_memory',0 |
;--------------------------------------------------------------------- |
error_unknown: |
db 'Unknown error',0 |
;--------------------------------------------------------------------- |
extended_key db 0 |
no_draw_window db 0 |
shift_flag db 0 |
ctrl_flag db 0 |
alt_flag db 0 |
;--------------------------------------------------------------------- |
; for EDITBOX |
align 4 |
name_editboxes: |
edit1 edit_box 200,10,30,0xffffff,0xbbddff,0,0,0,255,string,mouse_dd,ed_focus+ed_always_focus,0 |
name_editboxes_end: |
;mouse_flag: dd 0x0 |
mouse_dd rd 1 |
;--------------------------------------------------------------------- |
align 4 |
; option_boxes_bcgr: |
op1 option_box option_group1,60,40,6,12,0xFFFFFF,0,0xffffff,op_text.1,op_text.e1-op_text.1 |
op2 option_box option_group1,60,55,6,12,0xFFFFFF,0,0xffffff,op_text.2,op_text.e2-op_text.2 |
option_boxes_bcgr_end: |
op_text: |
.1 db 'Tiled' |
.e1: |
.2 db 'Stretch' |
.e2: |
option_group1 dd op1 |
option_boxes_bcgr: dd op1, op2,0 |
;--------------------------------------------------------------------- |
align 4 |
;option_boxes_sort: |
sort0 option_box option_group2,60,40,6,12,0xFFFFFF,0,0xffffff,op_text_1.1,op_text_1.e1-op_text_1.1 |
sort2 option_box option_group2,60,55,6,12,0xFFFFFF,0,0xffffff,op_text_1.2,op_text_1.e2-op_text_1.2 |
sort4 option_box option_group2,60,70,6,12,0xFFFFFF,0,0xffffff,op_text_1.3,op_text_1.e3-op_text_1.3 |
sort6 option_box option_group2,60,85,6,12,0xFFFFFF,0,0xffffff,op_text_1.4,op_text_1.e4-op_text_1.4 |
option_boxes_sort_end: |
op_text_1: |
.1 db 'Name' |
.e1: |
.2 db 'Type' |
.e2: |
.3 db 'Date' |
.e3: |
.4 db 'Size' |
.e4: |
option_group2 dd sort2 |
option_group2_old dd 0 |
option_boxes_sort dd sort0, sort2, sort4, sort6,0 |
;--------------------------------------------------------------------- |
check1 check_box 120,50,6,12,0xFFFFFF,0,0xffffff,check_text1,14,0 ;ch_flag_en |
check_text1 db 'Show file name' |
show_file_name_old dd 0 |
;--------------------------------------------------------------------- |
check2 check_box 120,70,6,12,0xFFFFFF,0,0xffffff,check_text2,14,0 ;ch_flag_en |
check_text2 db 'Bilinear filtering' |
filtering_flag dd 0 |
filtering_flag_old dd 0 |
;--------------------------------------------------------------------- |
align 4 |
scroll_bar_data_vertical: |
.x: |
.size_x dw 15 ;+0 |
.start_x dw 500 ;+2 |
.y: |
.size_y dw 300 ;+4 |
.start_y dw 30 ;+6 |
.btn_high dd 15 ;+8 |
.type dd 1 ;+12 |
.max_area dd 10 ;+16 |
.cur_area dd 2 ;+20 |
.position dd 0 ;+24 |
.bckg_col dd 0xeeeeee ;+28 |
.frnt_col dd 0x8aeaa0 ;0xbbddff ;+32 |
.line_col dd 0 ;+36 |
.redraw dd 0 ;+40 |
.delta dw 0 ;+44 |
.delta2 dw 0 ;+46 |
.run_x: |
.r_size_x dw 0 ;+48 |
.r_start_x dw 0 ;+50 |
.run_y: |
.r_size_y dw 0 ;+52 |
.r_start_y dw 0 ;+54 |
.m_pos dd 0 ;+56 |
.m_pos_2 dd 0 ;+60 |
.m_keys dd 0 ;+64 |
.run_size dd 0 ;+68 |
.position2 dd 0 ;+72 |
.work_size dd 0 ;+76 |
.all_redraw dd 0 ;+80 |
.ar_offset dd 10 ;+84 |
;--------------------------------------------------------------------- |
align 4 |
scroll_bar_data_horizontal: |
.x: |
.size_x dw 300 ;0 ;+0 |
.start_x dw 10 ;0 ;+2 |
.y: |
.size_y dw 15 ;0 ;+4 |
.start_y dw 300 ;0 ;+6 |
.btn_high dd 15 ;+8 |
.type dd 1 ;+12 |
.max_area dd 10 ;+16 |
.cur_area dd 2 ;+20 |
.position dd 0 ;+24 |
.bckg_col dd 0xeeeeee ;+28 |
.frnt_col dd 0x8aeaa0 ;0xbbddff ;+32 |
.line_col dd 0 ;+36 |
.redraw dd 0 ;+40 |
.delta dw 0 ;+44 |
.delta2 dw 0 ;+46 |
.run_x: |
.r_size_x dw 0 ;+48 |
.r_start_x dw 0 ;+50 |
.run_y: |
.r_size_y dw 0 ;+52 |
.r_start_y dw 0 ;+54 |
.m_pos dd 0 ;+56 |
.m_pos_2 dd 0 ;+60 |
.m_keys dd 0 ;+64 |
.run_size dd 0 ;+68 |
.position2 dd 0 ;+72 |
.work_size dd 0 ;+76 |
.all_redraw dd 0 ;+80 |
.ar_offset dd 10 ;+84 |
;--------------------------------------------------------------------- |
align 4 |
menu_data_1: |
.type: dd 0 ;+0 |
.x: |
.size_x dw 35 ;+4 |
.start_x dw 5 ;+6 |
.y: |
.size_y dw 15 ;+8 |
.start_y dw 3 ;+10 |
.text_pointer: dd menu_text_area_1 ;0 ;+12 |
.pos_pointer: dd menu_text_area_1.1 ;0 ;+16 |
.text_end dd menu_text_area_1.end ;0 ;+20 |
.ret_key dd 0 ;+24 |
.mouse_keys dd 0 ;+28 |
.x1: |
.size_x1 dw 70 ;+32 |
.start_x1 dw 5 ;+34 |
.y1: |
.size_y1 dw 100 ;+36 |
.start_y1 dw 18 ;+38 |
.bckg_col dd 0xe5e5e5 ;+40 |
.frnt_col dd 0xff ;+44 |
.menu_col dd 0xeef0ff ;0xffffff ;+48 |
.select dd 0 ;+52 |
.out_select dd 0 ;+56 |
.buf_adress dd 0 ;+60 |
.procinfo dd 0 ;+64 |
.click dd 0 ;+68 |
.cursor dd 0 ;+72 |
.cursor_old dd 0 ;+76 |
.interval dd 16 ;+80 |
.cursor_max dd 0 ;+84 |
.extended_key dd 0 ;+88 |
.menu_sel_col dd 0x00cc00 ;+92 |
.bckg_text_col dd 0 ; +96 |
.frnt_text_col dd 0xffffff ;+100 |
.mouse_keys_old dd 0 ;+104 |
.font_height dd 8 ;+108 |
.cursor_out dd 0 ;+112 |
.get_mouse_flag dd 0 ;+116 |
;--------------------------------------------------------------------- |
menu_text_area_1: |
db 'File',0 |
.1: |
db 'Open',0 |
db 'Properties',0 |
db 'Exit',0 |
.end: |
db 0 |
;--------------------------------------------------------------------- |
align 4 |
menu_data_2: |
.type: dd 0 ;+0 |
.x: |
.size_x dw 35 ;+4 |
.start_x dw 40 ;+6 |
.y: |
.size_y dw 15 ;+8 |
.start_y dw 3 ;+10 |
.text_pointer: dd menu_text_area_2 ;0 ;+12 |
.pos_pointer: dd menu_text_area_2.1 ;0 ;+16 |
.text_end dd menu_text_area_2.end ;0 ;+20 |
.ret_key dd 0 ;+24 |
.mouse_keys dd 0 ;+28 |
.x1: |
.size_x1 dw 90 ;+32 |
.start_x1 dw 40 ;+34 |
.y1: |
.size_y1 dw 100 ;+36 |
.start_y1 dw 18 ;+38 |
.bckg_col dd 0xe5e5e5 ;+40 |
.frnt_col dd 0xff ;+44 |
.menu_col dd 0xeef0ff ;0xffffff ;+48 |
.select dd 0 ;+52 |
.out_select dd 0 ;+56 |
.buf_adress dd 0 ;+60 |
.procinfo dd 0 ;+64 |
.click dd 0 ;+68 |
.cursor dd 0 ;+72 |
.cursor_old dd 0 ;+76 |
.interval dd 16 ;+80 |
.cursor_max dd 0 ;+84 |
.extended_key dd 0 ;+88 |
.menu_sel_col dd 0x00cc00 ;+92 |
.bckg_text_col dd 0 ; +96 |
.frnt_text_col dd 0xffffff ;+100 |
.mouse_keys_old dd 0 ;+104 |
.font_height dd 8 ;+108 |
.cursor_out dd 0 ;+112 |
.get_mouse_flag dd 0 ;+116 |
;--------------------------------------------------------------------- |
menu_text_area_2: |
db 'Edit',0 |
.1: |
db 'Rotate Clock.',0 |
db 'Rotate CClock.',0 |
db 'Invert L to R',0 |
db 'Invert U to D',0 |
.end: |
db 0 |
;--------------------------------------------------------------------- |
align 4 |
menu_data_3: |
.type: dd 0 ;+0 |
.x: |
.size_x dw 35 ;+4 |
.start_x dw 75 ;+6 |
.y: |
.size_y dw 15 ;+8 |
.start_y dw 3 ;+10 |
.text_pointer: dd menu_text_area_3 ;0 ;+12 |
.pos_pointer: dd menu_text_area_3.1 ;0 ;+16 |
.text_end dd menu_text_area_3.end ;0 ;+20 |
.ret_key dd 0 ;+24 |
.mouse_keys dd 0 ;+28 |
.x1: |
.size_x1 dw 90 ;+32 |
.start_x1 dw 75 ;+34 |
.y1: |
.size_y1 dw 100 ;+36 |
.start_y1 dw 18 ;+38 |
.bckg_col dd 0xe5e5e5 ;+40 |
.frnt_col dd 0xff ;+44 |
.menu_col dd 0xeef0ff ;0xffffff ;+48 |
.select dd 0 ;+52 |
.out_select dd 0 ;+56 |
.buf_adress dd 0 ;+60 |
.procinfo dd 0 ;+64 |
.click dd 0 ;+68 |
.cursor dd 0 ;+72 |
.cursor_old dd 0 ;+76 |
.interval dd 16 ;+80 |
.cursor_max dd 0 ;+84 |
.extended_key dd 0 ;+88 |
.menu_sel_col dd 0x00cc00 ;+92 |
.bckg_text_col dd 0 ; +96 |
.frnt_text_col dd 0xffffff ;+100 |
.mouse_keys_old dd 0 ;+104 |
.font_height dd 8 ;+108 |
.cursor_out dd 0 ;+112 |
.get_mouse_flag dd 0 ;+116 |
;--------------------------------------------------------------------- |
menu_text_area_3: |
db 'View',0 |
.1: |
db 'Sort Directory',0 |
db 'Full Screen',0 |
db 'Reload',0 |
.end: |
db 0 |
;--------------------------------------------------------------------- |
align 4 |
menu_data_4: |
.type: dd 0 ;+0 |
.x: |
.size_x dw 35 ;+4 |
.start_x dw 110 ;+6 |
.y: |
.size_y dw 15 ;+8 |
.start_y dw 3 ;+10 |
.text_pointer: dd menu_text_area_4 ;0 ;+12 |
.pos_pointer: dd menu_text_area_4.1 ;0 ;+16 |
.text_end dd menu_text_area_4.end ;0 ;+20 |
.ret_key dd 0 ;+24 |
.mouse_keys dd 0 ;+28 |
.x1: |
.size_x1 dw 40 ;+32 |
.start_x1 dw 110 ;+34 |
.y1: |
.size_y1 dw 100 ;+36 |
.start_y1 dw 18 ;+38 |
.bckg_col dd 0xe5e5e5 ;+40 |
.frnt_col dd 0xff ;+44 |
.menu_col dd 0xeef0ff ;0xffffff ;+48 |
.select dd 0 ;+52 |
.out_select dd 0 ;+56 |
.buf_adress dd 0 ;+60 |
.procinfo dd 0 ;+64 |
.click dd 0 ;+68 |
.cursor dd 0 ;+72 |
.cursor_old dd 0 ;+76 |
.interval dd 16 ;+80 |
.cursor_max dd 0 ;+84 |
.extended_key dd 0 ;+88 |
.menu_sel_col dd 0x00cc00 ;+92 |
.bckg_text_col dd 0 ; +96 |
.frnt_text_col dd 0xffffff ;+100 |
.mouse_keys_old dd 0 ;+104 |
.font_height dd 8 ;+108 |
.cursor_out dd 0 ;+112 |
.get_mouse_flag dd 0 ;+116 |
;--------------------------------------------------------------------- |
menu_text_area_4: |
db 'Zoom',0 |
.1: |
db 'Normal',0 |
db 'More',0 |
db 'Less',0 |
db 'Auto',0 |
.end: |
db 0 |
;--------------------------------------------------------------------- |
align 4 |
menu_data_5: |
.type: dd 0 ;+0 |
.x: |
.size_x dw 40 ;+4 |
.start_x dw 145 ;+6 |
.y: |
.size_y dw 15 ;+8 |
.start_y dw 3 ;+10 |
.text_pointer: dd menu_text_area_5 ;0 ;+12 |
.pos_pointer: dd menu_text_area_5.1 ;0 ;+16 |
.text_end dd menu_text_area_5.end ;0 ;+20 |
.ret_key dd 0 ;+24 |
.mouse_keys dd 0 ;+28 |
.x1: |
.size_x1 dw 80 ;+32 |
.start_x1 dw 145 ;+34 |
.y1: |
.size_y1 dw 100 ;+36 |
.start_y1 dw 18 ;+38 |
.bckg_col dd 0xe5e5e5 ;+40 |
.frnt_col dd 0xff ;+44 |
.menu_col dd 0xeef0ff ;0xffffff ;+48 |
.select dd 0 ;+52 |
.out_select dd 0 ;+56 |
.buf_adress dd 0 ;+60 |
.procinfo dd 0 ;+64 |
.click dd 0 ;+68 |
.cursor dd 0 ;+72 |
.cursor_old dd 0 ;+76 |
.interval dd 16 ;+80 |
.cursor_max dd 0 ;+84 |
.extended_key dd 0 ;+88 |
.menu_sel_col dd 0x00cc00 ;+92 |
.bckg_text_col dd 0 ; +96 |
.frnt_text_col dd 0xffffff ;+100 |
.mouse_keys_old dd 0 ;+104 |
.font_height dd 8 ;+108 |
.cursor_out dd 0 ;+112 |
.get_mouse_flag dd 0 ;+116 |
;--------------------------------------------------------------------- |
menu_text_area_5: |
db 'Tools',0 |
.1: |
db 'Image Editor',0 |
db 'Wallpaper',0 |
db 'Slide Show',0 |
db 'Options',0 |
.end: |
db 0 |
;--------------------------------------------------------------------- |
align 4 |
menu_data_6: |
.type: dd 0 ;+0 |
.x: |
.size_x dw 35 ;+4 |
.start_x dw 185 ;+6 |
.y: |
.size_y dw 15 ;+8 |
.start_y dw 3 ;+10 |
.text_pointer: dd menu_text_area_6 ;0 ;+12 |
.pos_pointer: dd menu_text_area_6.1 ;0 ;+16 |
.text_end dd menu_text_area_6.end ;0 ;+20 |
.ret_key dd 0 ;+24 |
.mouse_keys dd 0 ;+28 |
.x1: |
.size_x1 dw 50 ;+32 |
.start_x1 dw 185 ;+34 |
.y1: |
.size_y1 dw 100 ;+36 |
.start_y1 dw 18 ;+38 |
.bckg_col dd 0xe5e5e5 ;+40 |
.frnt_col dd 0xff ;+44 |
.menu_col dd 0xeef0ff ;0xffffff ;+48 |
.select dd 0 ;+52 |
.out_select dd 0 ;+56 |
.buf_adress dd 0 ;+60 |
.procinfo dd 0 ;+64 |
.click dd 0 ;+68 |
.cursor dd 0 ;+72 |
.cursor_old dd 0 ;+76 |
.interval dd 16 ;+80 |
.cursor_max dd 0 ;+84 |
.extended_key dd 0 ;+88 |
.menu_sel_col dd 0x00cc00 ;+92 |
.bckg_text_col dd 0 ; +96 |
.frnt_text_col dd 0xffffff ;+100 |
.mouse_keys_old dd 0 ;+104 |
.font_height dd 8 ;+108 |
.cursor_out dd 0 ;+112 |
.get_mouse_flag dd 0 ;+116 |
;--------------------------------------------------------------------- |
menu_text_area_6: |
db 'Help',0 |
.1: |
db 'Help',0 |
db 'About',0 |
.end: |
db 0 |
;--------------------------------------------------------------------- |
align 4 |
dinamic_button_data_1: ; open file |
.type dd 0 ;+0 |
.x: |
.size_x dw 20 ;+4 |
.start_x dw 230 ;+6 |
.y: |
.size_y dw 20 ;+8 |
.start_y dw 3 ;+10 |
.mouse_pos dd 0 ;+12 |
.mouse_keys dd 0 ;+16 |
.mouse_keys_old dd 0 ;+20 |
.active_raw dd 0 ;+24 |
.passive_raw dd 0 ;+28 |
.click_raw dd 0 ;+32 |
.resolution_raw dd 0 ;+36 |
.palette_raw dd 0 ;+40 |
.offset_raw dd 0 ;+44 |
.select dd 0 ;+48 |
.click dd 0 ;+52 |
;--------------------------------------------------------------------- |
align 4 |
dinamic_button_data_2: ; reload file |
.type dd 0 ;+0 |
.x: |
.size_x dw 20 ;+4 |
.start_x dw 255 ;+6 |
.y: |
.size_y dw 20 ;+8 |
.start_y dw 3 ;+10 |
.mouse_pos dd 0 ;+12 |
.mouse_keys dd 0 ;+16 |
.mouse_keys_old dd 0 ;+20 |
.active_raw dd 0 ;+24 |
.passive_raw dd 0 ;+28 |
.click_raw dd 0 ;+32 |
.resolution_raw dd 0 ;+36 |
.palette_raw dd 0 ;+40 |
.offset_raw dd 0 ;+44 |
.select dd 0 ;+48 |
.click dd 0 ;+52 |
;--------------------------------------------------------------------- |
align 4 |
dinamic_button_data_3: ; left limit |
.type dd 0 ;+0 |
.x: |
.size_x dw 20 ;+4 |
.start_x dw 285 ;+6 |
.y: |
.size_y dw 20 ;+8 |
.start_y dw 3 ;+10 |
.mouse_pos dd 0 ;+12 |
.mouse_keys dd 0 ;+16 |
.mouse_keys_old dd 0 ;+20 |
.active_raw dd 0 ;+24 |
.passive_raw dd 0 ;+28 |
.click_raw dd 0 ;+32 |
.resolution_raw dd 0 ;+36 |
.palette_raw dd 0 ;+40 |
.offset_raw dd 0 ;+44 |
.select dd 0 ;+48 |
.click dd 0 ;+52 |
;--------------------------------------------------------------------- |
align 4 |
dinamic_button_data_4: ; left arrow |
.type dd 0 ;+0 |
.x: |
.size_x dw 20 ;+4 |
.start_x dw 310 ;+6 |
.y: |
.size_y dw 20 ;+8 |
.start_y dw 3 ;+10 |
.mouse_pos dd 0 ;+12 |
.mouse_keys dd 0 ;+16 |
.mouse_keys_old dd 0 ;+20 |
.active_raw dd 0 ;+24 |
.passive_raw dd 0 ;+28 |
.click_raw dd 0 ;+32 |
.resolution_raw dd 0 ;+36 |
.palette_raw dd 0 ;+40 |
.offset_raw dd 0 ;+44 |
.select dd 0 ;+48 |
.click dd 0 ;+52 |
;--------------------------------------------------------------------- |
align 4 |
dinamic_button_data_5: ; slide show |
.type dd 0 ;+0 |
.x: |
.size_x dw 20 ;+4 |
.start_x dw 335 ;+6 |
.y: |
.size_y dw 20 ;+8 |
.start_y dw 3 ;+10 |
.mouse_pos dd 0 ;+12 |
.mouse_keys dd 0 ;+16 |
.mouse_keys_old dd 0 ;+20 |
.active_raw dd 0 ;+24 |
.passive_raw dd 0 ;+28 |
.click_raw dd 0 ;+32 |
.resolution_raw dd 0 ;+36 |
.palette_raw dd 0 ;+40 |
.offset_raw dd 0 ;+44 |
.select dd 0 ;+48 |
.click dd 0 ;+52 |
;--------------------------------------------------------------------- |
align 4 |
dinamic_button_data_6: ; right arrow |
.type dd 0 ;+0 |
.x: |
.size_x dw 20 ;+4 |
.start_x dw 360 ;+6 |
.y: |
.size_y dw 20 ;+8 |
.start_y dw 3 ;+10 |
.mouse_pos dd 0 ;+12 |
.mouse_keys dd 0 ;+16 |
.mouse_keys_old dd 0 ;+20 |
.active_raw dd 0 ;+24 |
.passive_raw dd 0 ;+28 |
.click_raw dd 0 ;+32 |
.resolution_raw dd 0 ;+36 |
.palette_raw dd 0 ;+40 |
.offset_raw dd 0 ;+44 |
.select dd 0 ;+48 |
.click dd 0 ;+52 |
;--------------------------------------------------------------------- |
align 4 |
dinamic_button_data_7: ; right limit |
.type dd 0 ;+0 |
.x: |
.size_x dw 20 ;+4 |
.start_x dw 385 ;+6 |
.y: |
.size_y dw 20 ;+8 |
.start_y dw 3 ;+10 |
.mouse_pos dd 0 ;+12 |
.mouse_keys dd 0 ;+16 |
.mouse_keys_old dd 0 ;+20 |
.active_raw dd 0 ;+24 |
.passive_raw dd 0 ;+28 |
.click_raw dd 0 ;+32 |
.resolution_raw dd 0 ;+36 |
.palette_raw dd 0 ;+40 |
.offset_raw dd 0 ;+44 |
.select dd 0 ;+48 |
.click dd 0 ;+52 |
;--------------------------------------------------------------------- |
align 4 |
dinamic_button_data_8: ; zoom + |
.type dd 0 ;+0 |
.x: |
.size_x dw 20 ;+4 |
.start_x dw 415 ;+6 |
.y: |
.size_y dw 20 ;+8 |
.start_y dw 3 ;+10 |
.mouse_pos dd 0 ;+12 |
.mouse_keys dd 0 ;+16 |
.mouse_keys_old dd 0 ;+20 |
.active_raw dd 0 ;+24 |
.passive_raw dd 0 ;+28 |
.click_raw dd 0 ;+32 |
.resolution_raw dd 0 ;+36 |
.palette_raw dd 0 ;+40 |
.offset_raw dd 0 ;+44 |
.select dd 0 ;+48 |
.click dd 0 ;+52 |
;--------------------------------------------------------------------- |
align 4 |
dinamic_button_data_9: ; zoom - |
.type dd 0 ;+0 |
.x: |
.size_x dw 20 ;+4 |
.start_x dw 440 ;+6 |
.y: |
.size_y dw 20 ;+8 |
.start_y dw 3 ;+10 |
.mouse_pos dd 0 ;+12 |
.mouse_keys dd 0 ;+16 |
.mouse_keys_old dd 0 ;+20 |
.active_raw dd 0 ;+24 |
.passive_raw dd 0 ;+28 |
.click_raw dd 0 ;+32 |
.resolution_raw dd 0 ;+36 |
.palette_raw dd 0 ;+40 |
.offset_raw dd 0 ;+44 |
.select dd 0 ;+48 |
.click dd 0 ;+52 |
;--------------------------------------------------------------------- |
align 4 |
dinamic_button_data_10: ; zoom 100% |
.type dd 0 ;+0 |
.x: |
.size_x dw 20 ;+4 |
.start_x dw 465 ;+6 |
.y: |
.size_y dw 20 ;+8 |
.start_y dw 3 ;+10 |
.mouse_pos dd 0 ;+12 |
.mouse_keys dd 0 ;+16 |
.mouse_keys_old dd 0 ;+20 |
.active_raw dd 0 ;+24 |
.passive_raw dd 0 ;+28 |
.click_raw dd 0 ;+32 |
.resolution_raw dd 0 ;+36 |
.palette_raw dd 0 ;+40 |
.offset_raw dd 0 ;+44 |
.select dd 0 ;+48 |
.click dd 0 ;+52 |
;--------------------------------------------------------------------- |
align 4 |
dinamic_button_data_11: ; rotate clockwise |
.type dd 0 ;+0 |
.x: |
.size_x dw 20 ;+4 |
.start_x dw 495 ;+6 |
.y: |
.size_y dw 20 ;+8 |
.start_y dw 3 ;+10 |
.mouse_pos dd 0 ;+12 |
.mouse_keys dd 0 ;+16 |
.mouse_keys_old dd 0 ;+20 |
.active_raw dd 0 ;+24 |
.passive_raw dd 0 ;+28 |
.click_raw dd 0 ;+32 |
.resolution_raw dd 0 ;+36 |
.palette_raw dd 0 ;+40 |
.offset_raw dd 0 ;+44 |
.select dd 0 ;+48 |
.click dd 0 ;+52 |
;--------------------------------------------------------------------- |
align 4 |
dinamic_button_data_12: ; rotate counter-clockwise |
.type dd 0 ;+0 |
.x: |
.size_x dw 20 ;+4 |
.start_x dw 520 ;+6 |
.y: |
.size_y dw 20 ;+8 |
.start_y dw 3 ;+10 |
.mouse_pos dd 0 ;+12 |
.mouse_keys dd 0 ;+16 |
.mouse_keys_old dd 0 ;+20 |
.active_raw dd 0 ;+24 |
.passive_raw dd 0 ;+28 |
.click_raw dd 0 ;+32 |
.resolution_raw dd 0 ;+36 |
.palette_raw dd 0 ;+40 |
.offset_raw dd 0 ;+44 |
.select dd 0 ;+48 |
.click dd 0 ;+52 |
;--------------------------------------------------------------------- |
align 4 |
dinamic_button_data_13: ; file information |
.type dd 0 ;+0 |
.x: |
.size_x dw 20 ;+4 |
.start_x dw 550 ;+6 |
.y: |
.size_y dw 20 ;+8 |
.start_y dw 3 ;+10 |
.mouse_pos dd 0 ;+12 |
.mouse_keys dd 0 ;+16 |
.mouse_keys_old dd 0 ;+20 |
.active_raw dd 0 ;+24 |
.passive_raw dd 0 ;+28 |
.click_raw dd 0 ;+32 |
.resolution_raw dd 0 ;+36 |
.palette_raw dd 0 ;+40 |
.offset_raw dd 0 ;+44 |
.select dd 0 ;+48 |
.click dd 0 ;+52 |
;--------------------------------------------------------------------- |
align 4 |
dinamic_button_data_14: ; wallpaper |
.type dd 0 ;+0 |
.x: |
.size_x dw 20 ;+4 |
.start_x dw 575 ;+6 |
.y: |
.size_y dw 20 ;+8 |
.start_y dw 3 ;+10 |
.mouse_pos dd 0 ;+12 |
.mouse_keys dd 0 ;+16 |
.mouse_keys_old dd 0 ;+20 |
.active_raw dd 0 ;+24 |
.passive_raw dd 0 ;+28 |
.click_raw dd 0 ;+32 |
.resolution_raw dd 0 ;+36 |
.palette_raw dd 0 ;+40 |
.offset_raw dd 0 ;+44 |
.select dd 0 ;+48 |
.click dd 0 ;+52 |
;--------------------------------------------------------------------- |
align 4 |
dinamic_button_data_15: ; settings |
.type dd 0 ;+0 |
.x: |
.size_x dw 20 ;+4 |
.start_x dw 600 ;+6 |
.y: |
.size_y dw 20 ;+8 |
.start_y dw 3 ;+10 |
.mouse_pos dd 0 ;+12 |
.mouse_keys dd 0 ;+16 |
.mouse_keys_old dd 0 ;+20 |
.active_raw dd 0 ;+24 |
.passive_raw dd 0 ;+28 |
.click_raw dd 0 ;+32 |
.resolution_raw dd 0 ;+36 |
.palette_raw dd 0 ;+40 |
.offset_raw dd 0 ;+44 |
.select dd 0 ;+48 |
.click dd 0 ;+52 |
;--------------------------------------------------------------------- |
align 4 |
dirinfo: |
.subfunction dd 1 |
.start dd 0 |
.flags dd 0 |
.size dd 0 |
.return dd procinfo |
db 0 |
.name: dd plugin_pach |
;--------------------------------------------------------------------- |
align 4 |
fileinfo: |
.subfunction dd 5 |
.Offset dd 0 |
.Offset_1 dd 0 |
.size dd 0 |
.return dd process_info |
db 0 |
.name: dd string |
;--------------------------------------------------------------------- |
align 4 |
start_appl: |
.subfunction dd 7 |
.flags dd 0 |
.parameter dd library_path |
.reserved1 dd 0 |
.reserved2 dd 0 |
db 0 |
.name: dd Help_path |
;--------------------------------------------------------------------- |
align 4 |
dir_header: |
.version dd 0 ;+0 |
.curn_blocks dd 0 ;+4 |
.totl_blocks dd 0 ;+8 |
.other rb 20 |
;--------------------------------------------------------------------- |
OpenDialog_data: |
.type dd 0 |
.procinfo dd procinfo ;+4 |
.com_area_name dd communication_area_name ;+8 |
.com_area dd 0 ;+12 |
.opendir_pach dd plugin_pach ;+16 |
.dir_default_pach dd communication_area_default_pach ;+20 |
.start_path dd library_path ;+24 |
.draw_window dd draw_window ;+28 |
.status dd 0 ;+32 |
.openfile_pach dd string ;+36 |
.filename_area dd 0 ;+40 |
.filter_area dd Filter |
.x: |
.x_size dw 420 ;+48 ; Window X size |
.x_start dw 10 ;+50 ; Window X position |
.y: |
.y_size dw 320 ;+52 ; Window y size |
.y_start dw 10 ;+54 ; Window Y position |
communication_area_name: |
db 'FFFFFFFF_open_dialog',0 |
open_dialog_name: |
db 'opendial',0 |
communication_area_default_pach: |
db '/rd/1',0 |
;communication_area dd 0 |
;--------------------------------------------------------------------- |
; clear bacground thread |
clear_thread_stack: |
dd 0 |
;---------------------- |
; window option |
thread_stack_7: |
dd 0 |
;---------------------- |
; window error message |
thread_stack_6: |
dd 0 |
;---------------------- |
; window set sort mode |
thread_stack_5: |
dd 0 |
;---------------------- |
; window background |
thread_stack_4: |
dd 0 |
;---------------------- |
; window about |
thread_stack_3: |
dd 0 |
;---------------------- |
; file info |
thread_stack_2: |
dd 0 |
;---------------------- |
; file open |
thread_stack: |
dd 0 |
;--------------------------------------------------------------------- |
;size_before_open_dir: |
; dd 0 |
;size_before_open_file: |
; dd 0 |
;size_after_open_file: |
; dd 0 |
;size_after_convert: |
; dd 0 |
;size_after_convert_2: |
; dd 0 |
;size_before_draw_image: |
; dd 0 |
;size_after_draw_image: |
; dd 0 |
;size_before_scaling: |
; dd 0 |
;size_after_scaling: |
; dd 0 |
/programs/media/zsea/dll.inc |
---|
0,0 → 1,144 |
;----------------------------------------------------------------------------- |
proc dll.Load, import_table:dword |
mov esi,[import_table] |
.next_lib: |
mov edx,[esi] |
or edx,edx |
jz .exit |
push esi |
mov esi,[esi+4] |
mov edi,s_libdir.fname |
@@: |
lodsb |
stosb |
or al,al |
jnz @b |
mcall 68,19,s_libdir |
or eax,eax |
jz .fail |
stdcall dll.Link,eax,edx |
stdcall dll.Init,[eax+4] |
pop esi |
add esi,8 |
jmp .next_lib |
.exit: |
xor eax,eax |
ret |
.fail: |
add esp,4 |
xor eax,eax |
inc eax |
ret |
endp |
;----------------------------------------------------------------------------- |
proc dll.Link, exp:dword,imp:dword |
push eax |
mov esi,[imp] |
test esi,esi |
jz .done |
.next: |
lodsd |
test eax,eax |
jz .done |
stdcall dll.GetProcAddress,[exp],eax |
or eax,eax |
jz @f |
mov [esi-4],eax |
jmp .next |
@@: |
mov dword[esp],0 |
.done: |
pop eax |
ret |
endp |
;----------------------------------------------------------------------------- |
proc dll.Init, dllentry:dword |
pushad |
mov eax,mem.Alloc ;libini_alloc |
mov ebx,mem.Free ;libini_free |
mov ecx,mem.ReAlloc ;libini_realloc |
mov edx,dll.Load |
stdcall [dllentry] |
popad |
ret |
endp |
;----------------------------------------------------------------------------- |
proc dll.GetProcAddress, exp:dword,sz_name:dword |
mov edx,[exp] |
xor eax,eax |
.next: |
or edx,edx |
jz .end |
cmp dword[edx],0 |
jz .end |
stdcall strcmp,[edx],[sz_name] |
test eax,eax |
jz .ok |
add edx,8 |
jmp .next |
.ok: |
mov eax,[edx+4] |
.end: |
ret |
endp |
;----------------------------------------------------------------------------- |
proc strcmp, str1:dword,str2:dword |
push esi edi |
mov esi,[str1] |
mov edi,[str2] |
xor eax,eax |
@@: |
lodsb |
scasb |
jne .fail |
or al,al |
jnz @b |
jmp .ok |
.fail: |
or eax,-1 |
.ok: |
pop edi esi |
ret |
endp |
;----------------------------------------------------------------------------- |
s_libdir: |
db '/sys/lib/' |
.fname rb 32 |
;----------------------------------------------------------------------------- |
proc mem.Alloc,size |
push ebx ecx |
mov ecx,[size] |
mcall 68,12 |
pop ecx ebx |
ret |
endp |
;----------------------------------------------------------------------------- |
proc mem.ReAlloc,mptr,size |
push ebx ecx edx |
mov ecx,[size] |
or ecx,ecx |
jz @f |
@@: |
mov edx,[mptr] |
or edx,edx |
jz @f |
@@: |
mcall 68,20 |
or eax,eax |
jz @f |
@@: |
pop edx ecx ebx |
ret |
endp |
;----------------------------------------------------------------------------- |
proc mem.Free,mptr |
push ebx ecx |
mov ecx,[mptr] |
or ecx,ecx |
jz @f |
@@: |
mcall 68,13 |
pop ecx ebx |
ret |
endp |
;----------------------------------------------------------------------------- |
/programs/media/zsea/draw_img.inc |
---|
0,0 → 1,469 |
;;**************************************************************************** |
;**************************************************************************** |
; Draw output part of the image and SCROLLBAR's |
;**************************************************************************** |
;**************************************************************************** |
drawimage: |
call get_window_param |
;mov edx,5*65536+50 |
mov edx,0*65536+28 |
mov esi,[img_resolution] ;24 |
cmp esi,32 |
ja .exit_error ;.exit |
mov edi,[img_palette] |
;**************************************************************************** |
; Calculation of sizes of an output part of the image |
;**************************************************************************** |
xor eax,eax |
mov [draw_SB],al |
mov [draw_SB1],al |
mov eax,[window_width] |
; sub eax,9 |
mov [wa_width],ax |
mov [wa_width_1],ax |
mov [wa_width_2],ax |
mov ebx,[img_width] |
test ebx,ebx |
jz .exit_error ;.exit |
cmp ax,bx |
jae @f |
sub ax,[scroll_bar_data_vertical.size_x] |
mov [draw_SB],1 |
jmp .size_y |
@@: |
mov ax,bx |
.size_y: |
mov ebx,[img_high] |
test ebx,ebx |
jz .exit_error ;.exit |
shl eax,16 |
add eax,[window_high] |
cmp ax,50-22 |
jbe @f |
sub ax,50-22 |
@@: |
mov [wa_high],ax |
mov [wa_high_1],ax |
mov [wa_high_2],ax |
cmp ax,bx |
jae @f |
sub ax,[scroll_bar_data_horizontal.size_y] |
mov [draw_SB1],1 |
jmp .continue |
@@: |
mov ax,bx |
.continue: |
mov ecx,eax |
;**************************************************************************** |
; |
;**************************************************************************** |
cmp [draw_SB1],1 |
je @f |
cmp [draw_SB],0 |
je @f |
ror ecx,16 |
add cx,[scroll_bar_data_vertical.size_x] |
rol ecx,16 |
@@: |
cmp [draw_SB],1 |
je @f |
cmp [draw_SB1],0 |
je @f |
add cx,[scroll_bar_data_horizontal.size_y] |
@@: |
; call check_8bit_less |
;.continue_1: |
;**************************************************************************** |
; Prepare of data for SCROLLBAR's |
;**************************************************************************** |
call correct_cur_area |
mov eax,[img_width] |
push edx |
imul eax,[scaling_mode] |
mov ebx,100 |
xor edx,edx |
div ebx |
mov [scroll_bar_data_horizontal.max_area],eax |
pop edx |
mov ebx,[img_high] |
push eax edx |
mov eax,ebx |
imul eax,[scaling_mode] |
mov ebx,100 |
xor edx,edx |
div ebx |
mov ebx,eax |
pop edx eax |
mov [scroll_bar_data_vertical.max_area],ebx |
; cmp [scaling_mode],100 |
; jne .continue_1 |
call correct_width |
call correct_cur_area |
cmp [correct_w],0 |
je @f |
call correct_high |
call correct_cur_area |
jmp .continue_1 |
@@: |
call correct_high |
call correct_cur_area |
cmp [correct_h],0 |
je @f |
call correct_width |
call correct_cur_area |
@@: |
; call check_8bit_less |
.continue_1: |
; mov eax,[window_high] |
; sub eax,55 |
; ror eax,16 |
; mov ax,dx |
; rol eax,16 |
mov eax,edx |
shl eax,16 |
mov ax,cx |
mov [scroll_bar_data_vertical.y],eax |
; mov eax,[window_width] |
; sub eax,10 |
; ror eax,16 |
; ror edx,16 |
; mov ax,dx |
; rol edx,16 |
; rol eax,16 |
mov eax,edx |
mov ebx,ecx |
shr ebx,16 |
mov ax,bx |
mov [scroll_bar_data_horizontal.x],eax |
; mov eax,edx |
; mov ebx,ecx |
; shr ebx,16 |
; shr eax,16 |
; add ax,bx |
mov eax,[window_width] |
sub ax,[scroll_bar_data_vertical.size_x] |
; sub ax,4 |
mov [scroll_bar_data_vertical.start_x],ax |
; mov eax,edx |
; add ax,cx |
mov eax,[window_high] |
sub ax,[scroll_bar_data_horizontal.size_y] |
; sub ax,4 |
mov [scroll_bar_data_horizontal.start_y],ax |
;**************************************************************************** |
; Check necessity prepare of data |
;**************************************************************************** |
mov eax,[scroll_bar_data_horizontal.max_area] |
mov ebx,[scroll_bar_data_vertical.max_area] |
cmp ebx,[scroll_bar_data_vertical.cur_area] |
ja @f |
cmp eax,[scroll_bar_data_horizontal.cur_area] |
ja @f |
mov ebp,0 |
mov ebx,[soi] |
jmp .end |
@@: |
;**************************************************************************** |
; Calculate offset of next row data relative to previous row data |
;**************************************************************************** |
mov ebp,eax |
mov ebx,ecx |
shr ebx,16 |
sub ebp,ebx |
imul ebp,esi |
mov eax,ebp |
shr ebp,3 |
;**************************************************************************** |
; Vertical SCROLLBAR |
; At a case of resizing of the window |
; Check the position of a runner has crossed a limit |
;**************************************************************************** |
mov eax,[scroll_bar_data_vertical.max_area] |
sub eax,[scroll_bar_data_vertical.cur_area] |
cmp eax,[scroll_bar_data_vertical.position] |
jae @f |
mov [scroll_bar_data_vertical.position],eax |
@@: |
;**************************************************************************** |
; Horizontal SCROLLBAR |
; At a case of resizing of the window |
; Check the position of a runner has crossed a limit |
;**************************************************************************** |
mov eax,[scroll_bar_data_horizontal.max_area] |
sub eax,[scroll_bar_data_horizontal.cur_area] |
cmp eax,[scroll_bar_data_horizontal.position] |
jae @f |
mov [scroll_bar_data_horizontal.position],eax |
@@: |
;**************************************************************************** |
; Calculate offset from a beginning of a image |
;**************************************************************************** |
mov ebx,[scroll_bar_data_horizontal.max_area] |
imul ebx,esi |
mov eax,ebx |
shr ebx,3 |
imul ebx,[scroll_bar_data_vertical.position] |
mov eax,[scroll_bar_data_horizontal.position] |
imul eax,esi |
shr eax,3 |
add ebx,eax |
add ebx,[soi] |
.end: |
cmp [soi],0 |
je .exit_error ;.exit |
;**************************************************************************** |
; Draw image |
;**************************************************************************** |
cmp [img_resolution_2],15 |
jne @f |
mov esi,15 |
@@: |
mov [image_start_coordinates],edx |
mov [image_draw_size],ecx |
cmp [scaling_mode],dword 100 |
je .100 |
cmp [scaling_mode],dword 0 |
jne @f |
call scaling.1 |
ret |
@@: |
mov [correct_scrollbar_100_flag],0 |
call zoom_all |
ret |
.100: |
mov al,[correct_scrollbar_100_flag] |
test al,al |
jnz @r |
;****************************** |
mov eax,wa_width_1 |
mov eax,[eax] |
push eax |
mov eax,wa_high_1 |
mov eax,[eax] |
push eax |
;****************************** |
rol ecx,16 |
mov eax,[scroll_bar_data_vertical.max_area] |
cmp eax,[scroll_bar_data_vertical.cur_area] |
mov ax,[wa_width_1] |
jbe @f |
sub ax,[scroll_bar_data_vertical.size_x] |
mov [wa_width_1],ax |
@@: |
sub ax,cx |
mov [wa_width_2],cx |
ror ecx,16 |
shr ax,1 |
shl eax,16 |
add edx,eax |
shr eax,16 |
test eax,eax |
jz @f |
call scaling.fill_for_L_R |
@@: |
mov eax,[scroll_bar_data_horizontal.max_area] |
cmp eax,[scroll_bar_data_horizontal.cur_area] |
mov ax,[wa_high_1] |
jbe @f |
sub ax,[scroll_bar_data_horizontal.size_y] |
mov [wa_high_1],ax |
@@: |
sub ax,cx |
mov [wa_high_2],cx |
shr ax,1 |
add edx,eax |
test eax,eax |
jz @f |
call scaling.fill_for_U_D |
@@: |
;****************************** |
mcall 65, ;[soi] |
;****************************** |
pop eax |
mov ebx,wa_high_1 |
mov [ebx],eax |
pop eax |
mov ebx,wa_width_1 |
mov [ebx],eax |
;****************************** |
.exit: |
call draw_file_name_to_work_area |
ret |
.exit_error: |
xor eax,eax |
mov [scroll_bar_data_vertical.cur_area],eax |
mov [scroll_bar_data_horizontal.cur_area],eax |
ret |
;**************************************************************************** |
draw_file_name_to_work_area: |
mov eax,[check1+32] |
test eax,10b |
jz @f |
mov ebx,[file_name_length] |
mov eax,ebx |
lea ebx,[ebx*5] |
add ebx,eax |
add ebx,13 shl 16 |
mcall 13,,<59,11>,0xe5e5e5 |
mcall 4,<16,60>,0x80000000,file_name,,0xe5e5e5 |
@@: |
ret |
;**************************************************************************** |
;check_8bit_less: |
; cmp esi,8 |
; jae .no_8bit_less |
; mov eax,ecx |
; ror eax,16 |
;; mov ebx,eax |
; xor ecx,ecx |
; |
; inc ecx |
; shr ax,1 |
; |
; cmp esi,4 |
; je @f |
; |
; inc ecx |
; shr ax,1 |
; |
; cmp esi,2 |
; je @f |
; |
; inc ecx |
; shr ax,1 |
;@@: |
;; test ebx,ecx |
;; jz @f |
;; inc eax |
;;@@: |
; shl ax,cl |
; rol eax,16 |
; mov ecx,eax |
;.no_8bit_less: |
; ret |
;**************************************************************************** |
correct_width: |
mov [correct_w],0 |
mov ebx,[scroll_bar_data_vertical.max_area] |
cmp ebx,[scroll_bar_data_vertical.cur_area] |
jbe @f |
mov eax,ecx |
shr eax,16 |
push eax |
mov ax,[scroll_bar_data_vertical.size_x] |
sub [wa_width],ax |
pop eax |
cmp [wa_width],ax |
jae @f |
ror ecx,16 |
mov cx,[wa_width] |
rol ecx,16 |
mov [correct_w],1 |
@@: |
ret |
;**************************************************************************** |
correct_high: |
mov [correct_h],0 |
mov eax,[scroll_bar_data_horizontal.max_area] |
cmp eax,[scroll_bar_data_horizontal.cur_area] |
jbe @f |
push eax |
mov ax,[scroll_bar_data_horizontal.size_y] |
sub [wa_high],ax |
pop eax |
cmp [wa_high],cx |
jae @f |
mov cx,[wa_high] |
mov [correct_h],1 |
@@: |
ret |
;**************************************************************************** |
correct_cur_area: |
mov eax,ecx |
xor ebx,ebx |
mov bx,ax |
mov [scroll_bar_data_vertical.cur_area],ebx |
shr eax,16 |
mov [scroll_bar_data_horizontal.cur_area],eax |
ret |
;**************************************************************************** |
; Check draw vertical scrollbar |
;**************************************************************************** |
draw_scrollbars: |
xor eax,eax |
mov [draw_scrollbar_counter],eax |
mov eax,[scroll_bar_data_vertical.max_area] |
cmp eax,[scroll_bar_data_vertical.cur_area] |
jbe @f |
cmp [scroll_bar_data_vertical.cur_area],0 |
je @f |
push dword scroll_bar_data_vertical |
call [scrollbar_ver_draw] |
; draw_scroll_bar_vertical scroll_bar_data_vertical |
inc [draw_scrollbar_counter] |
@@: |
;**************************************************************************** |
; Check draw horizontal scrollbar |
;**************************************************************************** |
mov eax,[scroll_bar_data_horizontal.max_area] |
cmp eax,[scroll_bar_data_horizontal.cur_area] |
jbe @f |
cmp [scroll_bar_data_horizontal.cur_area],0 |
je @f |
push dword scroll_bar_data_horizontal |
call [scrollbar_hor_draw] |
; draw_scroll_bar_horizontal scroll_bar_data_horizontal |
inc [draw_scrollbar_counter] |
@@: |
; nodrawimage: |
cmp [draw_scrollbar_counter],2 |
jne @f |
mov ebx,[scroll_bar_data_vertical.x] |
mov ecx,[scroll_bar_data_horizontal.y] |
mcall 13, , ,0xffffff |
@@: |
ret |
;**************************************************************************** |
;debug_1: |
; pushad |
; mov eax,ecx |
; shr eax,16 |
; mov ebx,ecx |
; shl ebx,16 |
; shr ebx,16 |
; mov eax,[image_file] |
; mov ebx,edi |
; mov [temp_eax],eax |
; mov [temp_ebx],ebx |
; mcall 13,<90,500>,<2,20>,0 |
; mcall 47,0xa0000,[temp_eax],<100, 5>,0xffffff |
; mcall 47,0xa0000,[temp_ebx],<300, 5>,0xffffff |
; popad |
; ret |
;temp_eax dd 0 |
;temp_ebx dd 0 |
;**************************************************************************** |
/programs/media/zsea/draw_win.inc |
---|
0,0 → 1,248 |
; ********************************************* |
; ******* WINDOW DEFINITIONS AND DRAW ******** |
; ********************************************* |
draw_window: |
or [bWasDraw],1 |
mcall 12,1 |
; DRAW WINDOW |
xor eax,eax ; function 0 : define and draw window |
; mov ebx,350 ; [x start] *65536 + [x size] |
; mov ecx,400 ; [y start] *65536 + [y size] |
mov ebx,0*65536+0 |
mov ecx,0*65536+0 |
add ebx,[wnd_width] |
add ecx,[wnd_height] |
cmp cx,55 |
ja @f |
mov cx,55 |
@@: |
mov edx,0x63ffffff ; color of work area RRGGBB,8->color gl |
; pusha |
xor esi,esi |
mcall |
; popa |
; imul ecx,[load_file_number],304 |
; add ecx,32+40 |
; add ecx,[load_directory_pointer] |
mov ecx,Authors_text.1 ; communication_area_name |
; mov ecx,[communication_area] |
; add ecx,4 |
; mov ecx,string |
mcall 71,1, ;labelt ; plugin_pach ;file_name ;plugin_pach ;plugin_pach |
call get_window_param |
call draw_other |
push dword menu_data_1 |
call [menu_bar_draw] |
push dword menu_data_2 |
call [menu_bar_draw] |
push dword menu_data_3 |
call [menu_bar_draw] |
push dword menu_data_4 |
call [menu_bar_draw] |
push dword menu_data_5 |
call [menu_bar_draw] |
push dword menu_data_6 |
call [menu_bar_draw] |
; draw_menu_bar menu_data_1 |
; draw_menu_bar menu_data_2 |
; draw_menu_bar menu_data_3 |
; draw_menu_bar menu_data_4 |
; draw_menu_bar menu_data_5 |
; draw_menu_bar menu_data_6 |
push dword dinamic_button_data_1 |
call [dinamic_button_draw] |
push dword dinamic_button_data_2 |
call [dinamic_button_draw] |
push dword dinamic_button_data_3 |
call [dinamic_button_draw] |
push dword dinamic_button_data_4 |
call [dinamic_button_draw] |
push dword dinamic_button_data_5 |
call [dinamic_button_draw] |
push dword dinamic_button_data_6 |
call [dinamic_button_draw] |
push dword dinamic_button_data_7 |
call [dinamic_button_draw] |
push dword dinamic_button_data_8 |
call [dinamic_button_draw] |
push dword dinamic_button_data_9 |
call [dinamic_button_draw] |
push dword dinamic_button_data_10 |
call [dinamic_button_draw] |
push dword dinamic_button_data_11 |
call [dinamic_button_draw] |
push dword dinamic_button_data_12 |
call [dinamic_button_draw] |
push dword dinamic_button_data_13 |
call [dinamic_button_draw] |
push dword dinamic_button_data_14 |
call [dinamic_button_draw] |
push dword dinamic_button_data_15 |
call [dinamic_button_draw] |
; draw_dinamic_button dinamic_button_data_1 ; open file |
; draw_dinamic_button dinamic_button_data_2 ; reload file |
; draw_dinamic_button dinamic_button_data_3 ; left limit |
; draw_dinamic_button dinamic_button_data_4 ; left arrow |
; draw_dinamic_button dinamic_button_data_5 ; slide show |
; draw_dinamic_button dinamic_button_data_6 ; right arrow |
; draw_dinamic_button dinamic_button_data_7 ; right limit |
; draw_dinamic_button dinamic_button_data_8 ; zoom + |
; draw_dinamic_button dinamic_button_data_9 ; zoom - |
; draw_dinamic_button dinamic_button_data_10 ; zoom 100% |
; draw_dinamic_button dinamic_button_data_11 ; rotate clockwise |
; draw_dinamic_button dinamic_button_data_12 ; rotate counter-clockwise |
; draw_dinamic_button dinamic_button_data_13 ; file information |
; draw_dinamic_button dinamic_button_data_14 ; wallpaper |
; draw_dinamic_button dinamic_button_data_15 ; settings |
mcall 13,<225,2>,<3,22>,0 |
mcall ,<280,2> |
mcall ,<410,2> |
mcall ,<490,2> |
mcall ,<545,2> |
mcall ,<625,2> |
mcall ,<720,2> |
; WINDOW LABEL |
; mov esi, file_mount - file_mount_end |
mcall 4,<630,3>,0x80000000, file_mount ;, file_mount - file_mount.end |
; cmp [soi],0 |
; je @f |
mcall 13,<677,40>,<13,11>,0xe5e5e5 |
mov ecx,[load_directory_pointer] |
mov ecx,[ecx+4] |
mcall 47,0x80060000, ,<679, 15>,0 |
mcall 8,[dinamic_button_data_5.x],[dinamic_button_data_5.y],0x40000002 |
;@@: |
mcall 12,2 |
ret |
;--------------------------------------------------------------------- |
set_draw_scrollbar_all: |
xor eax,eax |
inc eax |
mov [scroll_bar_data_vertical.all_redraw],eax |
mov [scroll_bar_data_horizontal.all_redraw],eax |
ret |
;--------------------------------------------------------------------- |
set_nodraw_scrollbar_all: |
xor eax,eax |
mov [scroll_bar_data_vertical.all_redraw],eax |
mov [scroll_bar_data_horizontal.all_redraw],eax |
ret |
;--------------------------------------------------------------------- |
draw_other: |
call drawimage |
@@: |
mov ebx,0 ;5 |
shl ebx,16 |
add ebx,[window_width] |
; sub ebx,9 |
; push ebx |
xor ecx,ecx |
; mov ecx,[skin_high] |
shl ecx,16 |
add ecx,50-22 |
; sub ecx,[skin_high] |
mov edx,0xffffff |
cmp [no_draw_window],0 |
jne @f |
mcall 13 ; fill top area |
@@: |
mov eax,[soi] |
test eax,eax |
jnz @f |
mov ecx,[window_high] |
sub ecx,28 ;50+4 |
add ecx,(50-22) shl 16 |
mcall 13 |
@@: |
call draw_number_of_file |
call draw_zoom_factors |
cmp [scaling_mode],dword 0 |
jne @f |
; pop ebx |
ret |
@@: |
; mov ecx,[scroll_bar_data_vertical.cur_area] |
; mov ebx,[scroll_bar_data_horizontal.cur_area] |
; push ecx |
; add ebx,5 |
; mov ax,bx |
; shl ebx,16 |
; add ebx,[window_width] |
; sub ebx,4 |
; sub bx,ax |
; cmp bx,0 |
; jbe @f |
; add ecx,50 shl 16 |
; mcall 13, , ,0xffffff |
; |
;@@: |
; pop ecx |
; pop ebx |
; add ecx,50 |
; mov ax,cx |
; shl ecx,16 |
; add ecx,[window_high] |
; sub cx,ax |
; sub ecx,4 |
; cmp cx,0 |
; jbe @f |
; mcall 13, , ,0xffffff |
;@@: |
call set_draw_scrollbar_all |
call draw_scrollbars |
call set_nodraw_scrollbar_all |
ret |
;--------------------------------------------------------------------- |
draw_number_of_file: |
mcall 13,<630,42>,<13,11>,0xe5e5e5 |
xor ecx,ecx |
mov eax,[load_directory_pointer] |
cmp [eax+4],dword 0 |
je @f |
mov ecx,[load_file_number] |
inc ecx |
@@: |
mcall 47,0x80060000, ,<632, 15>,0 |
ret |
;--------------------------------------------------------------------- |
draw_zoom_factors: |
mcall 13,<725,30>,<13,11>,0xe5e5e5 |
mov ecx,[zoom_factors] |
mov ecx,[ecx] |
mov [scaling_mode],ecx |
test ecx,ecx |
jnz @f |
mcall 4,<727,14>,0x80000000, zoom_auto_text |
ret |
@@: |
mcall 47,0x80060000, ,<727, 15>,0 |
ret |
;--------------------------------------------------------------------- |
/programs/media/zsea/full_win.inc |
---|
0,0 → 1,446 |
;--------------------------------------------------------------------- |
full_screen: |
xor eax,eax |
mov [Repeat_N],eax |
xor eax,eax |
mov [press_Enter_flag],al |
mov eax,[zoom_factors] |
mov [zoom_factors_old],eax |
mov eax,[scaling_mode] |
mov [scaling_mode_old],eax |
call get_window_param_1 |
mov eax,[window_start_x] |
mov [window_start_x_old],eax |
mov eax,[window_start_y] |
mov [window_start_y_old],eax |
mov eax,[window_high] |
mov [window_high_old],eax |
mov eax,[window_width] |
mov [window_width_old],eax |
;---------------------------------------- |
; get current work area |
mcall 48,5 |
mov [work_area_LR_old],eax |
mov [work_area_TB_old],ebx |
;---------------------------------------- |
mov eax,[soi] |
test eax,eax |
jz still |
mov eax,scaling_mode |
xor ebx,ebx |
mov [eax],ebx ;dword 0 |
mov [zoom_factors],dword zoom_factors.1 |
mcall 14 |
xor ebx,ebx |
xor ecx,ecx |
mov edx,eax |
shr edx,16 |
xor esi,esi |
mov si,ax |
inc ax |
mov [wa_high_1],ax |
mov [wa_high_2],ax |
shr eax,16 |
inc ax |
mov [wa_width_1],ax |
mov [wa_width_2],ax |
mcall 67 |
;---------------------------------------- |
; set max work area |
mov ecx,edx |
mov dx,si |
mcall 48,6 |
;---------------------------------------- |
mov eax,[fill_color] |
mov [fill_color_old],eax |
xor eax,eax |
mov [fill_color],eax |
jmp .still |
;---------------------------------------- |
.red: |
call .draw_window |
.still: |
cmp [RAW1_flag],1 |
je .animation_handler |
mcall 10 |
cmp eax,1 ; ïåðåðèñîâàòü îêíî ? |
je .red ; åñëè äà - íà ìåòêó red |
cmp eax,2 ; íàæàòà êëàâèøà ? |
je .key ; åñëè äà - íà key |
cmp eax,3 ; íàæàòà êíîïêà ? |
je .button ; åñëè äà - íà button |
jmp .still ; åñëè äðóãîå ñîáûòèå - â íà÷àëî öèêëà |
;---------------------------------------- |
.animation_handler: |
mcall 23,1 |
; pusha |
; mcall 26,9 |
; cmp [Animation_timer],eax |
; ja @f |
; call animation_handler.draw_image |
;@@: |
; popa |
cmp eax,1 ; ïåðåðèñîâàòü îêíî ? |
je .red ; åñëè äà - íà ìåòêó red |
cmp eax,2 ; íàæàòà êëàâèøà ? |
je .key ; åñëè äà - íà key |
cmp eax,3 ; íàæàòà êíîïêà ? |
je .button ; åñëè äà - íà button |
mcall 26,9 |
cmp [Animation_timer],eax |
ja .animation_handler |
mov al,[Disposal_Method] |
cmp al,2 |
jne @f |
call restore_background |
jmp .first_frame |
@@: |
cmp al,3 |
jne @f |
call restore_previous_frame |
@@: |
.first_frame: |
call copy_next_frame |
mov [no_fill],1 |
call .draw_image |
mov [no_fill],0 |
; call animation_handler.draw_image |
jmp .still |
;---------------------------------------- |
.key: |
mcall 2 |
cmp [extended_key],1 |
je .extended_key |
test al, al |
jnz .still |
cmp ah, 0xE0 |
jne @f |
mov [extended_key],1 |
jmp .still |
@@: |
cmp ah,1 ; Esc |
je .restore_main_window |
cmp ah,156 ; Enter |
je .restore_main_window_1 |
jmp .still |
;---------------------------------------- |
.extended_key: |
mov [extended_key],0 |
mov [current_key_code],ah |
cmp ah,73 |
je move_to_left_1 |
cmp ah,81 |
je move_to_right_1 |
cmp ah,71 |
je left_limit_1 |
cmp ah,79 |
je right_limit_1 |
cmp ah,156 ; Enter |
je .restore_main_window_1 |
cmp ah,183 ; Print Screen - Slides Show |
je slide_show_1.3 |
jmp .still |
;---------------------------------------- |
.button: |
mcall 17 |
cmp ah,1 ; button id=1 ? |
; je START.exit |
; jmp .still ;red_1 |
jne .still |
.exit: |
call restore_work_area |
jmp START.exit |
;--------------------------------------------------------------------- |
.restore_main_window_1: |
cmp [press_Enter_flag],1 |
je .restore_main_window |
inc [press_Enter_flag] |
jmp .still |
;--------------------------------------------------------------------- |
.restore_main_window: |
call restore_work_area |
mov eax,[zoom_factors_old] |
mov [zoom_factors],eax |
mov eax,[scaling_mode_old] |
mov [scaling_mode],eax |
mov ebx,[window_start_x_old] |
mov ecx,[window_start_y_old] |
mov edx,[window_width_old] |
mov esi,[window_high_old] |
mcall 67 |
; call get_window_param |
mov eax,[fill_color_old] |
mov [fill_color],eax |
xor eax,eax |
mov [Repeat_N],eax |
; mcall 15,3 |
mov [redraw_wallpaper_flag],1 |
jmp still ;red_1 |
;--------------------------------------------------------------------- |
.draw_window: |
mcall 12,1 |
mcall 0,<0,800>,<0,600>,0x41000000,0,0 |
; call get_window_param_1 |
; mcall 8,0,0,1,0 |
call .draw_image |
mcall 12,2 |
ret |
;--------------------------------------------------------------------- |
.draw_image: |
mcall 14 |
inc ax |
mov [wa_high_1],ax |
mov [wa_high_2],ax |
shr eax,16 |
inc ax |
mov [wa_width_1],ax |
mov [wa_width_2],ax |
mov [image_start_coordinates],0 |
mov [background_color],0 |
call scaling.1 |
mov [background_color],0xffffff |
ret |
;--------------------------------------------------------------------- |
get_window_param_1: |
mcall 9, procinfo, -1 |
mov eax,[ebx+34] |
mov [window_start_x],eax |
mov eax,[ebx+38] |
mov [window_start_y],eax |
mov eax,[ebx+46] |
mov [window_high],eax |
mov eax,[ebx+42] |
mov [window_width],eax |
mov eax,[ebx+70] |
mov [window_status],eax |
ret |
;---------------------------------------- |
restore_work_area: |
; restore old work area |
mov ecx,[work_area_LR_old] |
mov edx,[work_area_TB_old] |
mcall 48,6 |
ret |
;--------------------------------------------------------------------- |
move_to_left_1: |
xor eax,eax |
cmp [load_file_number],eax |
je full_screen.still |
dec [load_file_number] |
jmp right_limit_1.2 |
;---------------------------------------- |
move_to_right_1: |
mov eax,[load_directory_pointer] |
mov eax,[eax+4] |
test eax,eax |
jz @f |
dec eax |
@@: |
cmp [load_file_number],eax |
je full_screen.still |
inc [load_file_number] |
jmp right_limit_1.2 |
;---------------------------------------- |
left_limit_1: |
xor eax,eax |
jmp right_limit_1.1 |
;---------------------------------------- |
right_limit_1: |
mov eax,[load_directory_pointer] |
mov eax,[eax+4] |
test eax,eax |
jz @f |
dec eax |
@@: |
.1: |
cmp [load_file_number],eax |
je full_screen.still |
mov [load_file_number],eax |
.2: |
imul ebx,[load_file_number],304 |
add ebx,32+40 |
add ebx,[load_directory_pointer] |
mov esi,string |
mov edi,plugin_pach |
call copy_file_path |
mov esi,plugin_pach |
mov edi,string |
mov ecx,4096/4 |
cld |
rep movsd |
; jmp kopen |
mov [open_file_flag],0 |
mov ecx,-1 |
call getappinfo |
call load_image |
test eax,eax |
jnz kopen_1.err |
call convert |
call load_directory.copy_dir_path |
; call get_window_param |
; test [window_status],1b |
; jz @f ;draw_still |
; mov [no_draw_window],1 |
;*** call draw_other |
; mov [no_draw_window],0 |
; jmp .3 |
; |
;@@: |
; call .draw_window |
call full_screen.draw_image |
.3: |
mov al,[old_key_code] |
mov ah,[current_key_code] |
mov [old_key_code],ah |
cmp al,ah |
jne full_screen.still ;key.extended_key ;still |
.still: |
mcall 2 |
cmp [extended_key],1 |
je .extended_key |
test al, al |
jnz full_screen.still |
cmp ah, 0xE0 |
jne @f |
mov [extended_key],1 |
jmp .still |
@@: |
jmp full_screen.still |
.extended_key: |
mov [extended_key],0 |
mov [current_key_code],ah |
jmp .3 |
.4: |
mov ah,[current_key_code] |
mov [old_key_code],ah |
jmp full_screen.extended_key ;key.extended_key |
;--------------------------------------------------------------------- |
slide_show_1: |
mov eax,[load_directory_pointer] |
cmp [eax+4],dword 1 |
jbe full_screen.still |
mcall 26,9 |
cmp [timer],eax |
jbe .1 |
jmp .still |
.red: |
call full_screen.draw_window |
.still: |
mcall 23,10 |
cmp eax,1 |
je .red |
cmp eax,2 |
je .key |
cmp eax,3 |
je .button |
; mcall 68,1 |
jmp slide_show_1 |
;------------------------------------------- |
.key: |
mcall 2 |
cmp [extended_key],1 |
je .extended_key |
test al, al |
jnz .still |
cmp ah, 0xE0 |
jne @f |
mov [extended_key],1 |
jmp .still |
@@: |
cmp ah,1 ; Esc |
je full_screen.still |
cmp ah,185 ; Space |
je full_screen.still |
jmp .still |
.extended_key: |
mov [extended_key],0 |
mov [current_key_code],ah |
jmp .still |
;------------------------------------------- |
.button: ; button |
mov eax,17 ; get id |
mcall |
cmp ah,1 ; button id=1 ? |
je full_screen.exit ;START.exit |
.noclose: |
cmp ah,2 |
je full_screen.still |
jmp slide_show_1 |
;------------------------------------------- |
.1: |
; mcall 26,9 |
; add eax,[slide_show_delay] ;500 |
; mov [timer],eax |
mov eax,[load_directory_pointer] |
mov eax,[eax+4] |
test eax,eax |
jz @f |
dec eax |
@@: |
cmp [load_file_number],eax |
je full_screen.still |
inc [load_file_number] |
imul ebx,[load_file_number],304 |
add ebx,32+40 |
add ebx,[load_directory_pointer] |
mov esi,string |
mov edi,plugin_pach |
call copy_file_path |
mov esi,plugin_pach |
mov edi,string |
mov ecx,4096/4 |
cld |
rep movsd |
mov [open_file_flag],0 |
mov ecx,-1 |
call getappinfo |
call load_image |
test eax,eax |
jnz kopen_1.err |
call convert |
; call get_window_param |
; test [window_status],1b |
; jz @f ;draw_still |
; mov [no_draw_window],1 |
; call draw_other |
; mov [no_draw_window],0 |
; jmp slide_show_1 ;.3 |
;@@: |
; call draw_window |
call load_directory.copy_dir_path |
call full_screen.draw_image |
; jmp slide_show_1 |
.3: |
mcall 26,9 |
add eax,[slide_show_delay] ;500 |
mov [timer],eax |
jmp slide_show_1 |
;--------------------------------------------------------------------- |
/programs/media/zsea/key.inc |
---|
0,0 → 1,427 |
;--------------------------------------------------------------------- |
key: ; key |
mcall 2 |
cmp [extended_key],1 |
je .extended_key |
test al, al |
jnz still |
cmp ah, 0xE0 |
jne @f |
mov [extended_key],1 |
jmp still |
@@: |
cmp ah,151 ; i - file information |
je kinfo |
cmp ah,152 ; o - application options |
je check_key_O ;k_option |
cmp ah,159 ; s - sort mode |
je k_sort_directory |
cmp ah,145 ; w - wallpaper |
je k_background |
cmp ah,183 ; * - scaling to window |
je scaling |
cmp ah,139 ; 0 - scaling to window |
je scaling |
cmp ah,202 ; "-" - zoom minus |
je zoom_minus |
cmp ah,140 ; "-" - zoom minus |
je zoom_minus |
cmp ah,206 ; "+" - zoom plus |
je zoom_plus |
cmp ah,141 ; "+" - zoom plus |
je zoom_plus |
cmp ah,171 ; "\" - zoom 100% |
je no_scaling |
cmp ah,72 ; up arrow |
je key_up_arrow |
cmp ah,80 ; down arrow |
je key_down_arrow |
cmp ah,75 ; left arrow |
je key_left_arrow |
cmp ah,77 ; right arrow |
je key_right_arrow |
cmp ah,28 ; Enter |
je full_screen |
cmp ah,187 ; F1 |
je select_menu ;key_alt_down |
cmp ah,42 |
je key_shift_up |
cmp ah,54 |
je key_shift_up |
cmp ah,170 |
je key_shift_down |
cmp ah,182 |
je key_shift_down |
cmp ah,29 |
je key_ctrl_up |
cmp ah,157 |
je key_ctrl_down |
cmp ah,56 |
je key_alt_up |
cmp ah,184 |
je key_alt_down |
jmp still |
.extended_key: |
mov [extended_key],0 |
mov [current_key_code],ah |
; push eax |
; mcall 26,9 |
; mov [timer_counter],eax |
; pop eax |
; mov al,ah |
; cmp al,130 ; 1 |
; je kfile |
; cmp al,131 ; 2 |
; je kopen |
; cmp al,132 ; 3 |
; je kinfo |
; cmp al,133 ; 4 |
; je kbgrd |
cmp ah,73 |
je move_to_left |
cmp ah,81 |
je move_to_right |
cmp ah,71 |
je left_limit |
cmp ah,79 |
je right_limit |
cmp ah,181 ; / - zoom 100% |
je no_scaling |
cmp ah,72 ; up arrow |
je key_up_arrow |
cmp ah,80 ; down arrow |
je key_down_arrow |
cmp ah,75 ; left arrow |
je key_left_arrow |
cmp ah,77 ; right arrow |
je key_right_arrow |
cmp ah,28 ; Enter |
je full_screen |
cmp ah,183 ; Print Screen - Slides Show |
je slide_show.3 |
cmp ah,29 |
je key_ctrl_up |
cmp ah,157 |
je key_ctrl_down |
cmp ah,56 |
je key_alt_up |
cmp ah,184 |
je key_alt_down |
jmp still |
;--------------------------------------------------------------------- |
key_shift_up: |
mov [shift_flag],1 |
jmp still |
;--------------------------------------------------------------------- |
key_shift_down: |
mov [shift_flag],0 |
jmp still |
;--------------------------------------------------------------------- |
key_ctrl_up: |
mov [ctrl_flag],1 |
jmp still |
;--------------------------------------------------------------------- |
key_ctrl_down: |
mov [ctrl_flag],0 |
jmp still |
;--------------------------------------------------------------------- |
key_alt_up: |
mov [alt_flag],1 |
jmp still |
;--------------------------------------------------------------------- |
key_alt_down: |
mov [alt_flag],0 |
jmp still |
;--------------------------------------------------------------------- |
check_key_O: |
cmp [ctrl_flag],0 |
jne kfile |
jmp k_option |
;--------------------------------------------------------------------- |
move_to_left: |
xor eax,eax |
cmp [load_file_number],eax |
je still |
dec [load_file_number] |
jmp right_limit.2 |
;---------------------------------------- |
move_to_right: |
mov eax,[load_directory_pointer] |
mov eax,[eax+4] |
test eax,eax |
jz @f |
dec eax |
@@: |
cmp [load_file_number],eax |
je still |
inc [load_file_number] |
jmp right_limit.2 |
;---------------------------------------- |
left_limit: |
xor eax,eax |
jmp right_limit.1 |
;---------------------------------------- |
right_limit: |
mov eax,[load_directory_pointer] |
mov eax,[eax+4] |
test eax,eax |
jz @f |
dec eax |
@@: |
.1: |
cmp [load_file_number],eax |
je still |
mov [load_file_number],eax |
.2: |
imul ebx,[load_file_number],304 |
add ebx,32+40 |
add ebx,[load_directory_pointer] |
mov esi,string |
mov edi,plugin_pach |
call copy_file_path |
mov esi,plugin_pach |
mov edi,string |
mov ecx,4096/4 |
cld |
rep movsd |
; jmp kopen |
mov [open_file_flag],0 |
mov ecx,-1 |
call getappinfo |
call load_image |
test eax,eax |
jnz kopen_1.err |
call convert |
call load_directory.copy_dir_path |
call get_window_param |
test [window_status],1b |
jz @f ;draw_still |
mov [no_draw_window],1 |
call draw_other |
mov [no_draw_window],0 |
jmp .3 |
@@: |
call draw_window |
.3: |
mov al,[old_key_code] |
mov ah,[current_key_code] |
mov [old_key_code],ah |
cmp al,ah |
jne still ;key.extended_key ;still |
.still: |
mcall 2 |
cmp [extended_key],1 |
je .extended_key |
test al, al |
jnz still |
cmp ah, 0xE0 |
jne @f |
mov [extended_key],1 |
jmp .still |
@@: |
jmp still |
.extended_key: |
mov [extended_key],0 |
mov [current_key_code],ah |
jmp .3 |
.4: |
mov ah,[current_key_code] |
mov [old_key_code],ah |
jmp key.extended_key |
;--------------------------------------------------------------------- |
slide_show: |
mov eax,[load_directory_pointer] |
cmp [eax+4],dword 1 |
jbe still |
mcall 26,9 |
cmp [timer],eax |
jbe .1 |
jmp .still |
.red: |
call draw_window |
.still: |
mcall 23,10 |
cmp eax,1 ; ïåðåðèñîâàòü îêíî ? |
je .red |
cmp eax,2 ; íàæàòà êëàâèøà ? |
je .key ; åñëè äà - íà key |
cmp eax,3 ; íàæàòà êíîïêà ? |
je .button ; åñëè äà - íà button |
; mcall 68,1 |
jmp slide_show |
;------------------------------------------- |
.key: |
mcall 2 |
cmp [extended_key],1 |
je .extended_key |
test al, al |
jnz .still |
cmp ah, 0xE0 |
jne @f |
mov [extended_key],1 |
jmp .still |
@@: |
cmp ah,1 ; Esc |
je still |
cmp ah,185 ; Space |
je still |
jmp .still |
.extended_key: |
mov [extended_key],0 |
mov [current_key_code],ah |
jmp .still |
;------------------------------------------- |
.button: ; button |
mov eax,17 ; get id |
mcall |
cmp ah,1 ; button id=1 ? |
je START.exit |
.noclose: |
cmp ah,2 |
je still |
jmp slide_show |
;------------------------------------------- |
.1: |
; mcall 26,9 |
; add eax,[slide_show_delay] ;500 |
; mov [timer],eax |
mov eax,[load_directory_pointer] |
mov eax,[eax+4] |
test eax,eax |
jz @f |
dec eax |
@@: |
cmp [load_file_number],eax |
je still |
inc [load_file_number] |
imul ebx,[load_file_number],304 |
add ebx,32+40 |
add ebx,[load_directory_pointer] |
mov esi,string |
mov edi,plugin_pach |
call copy_file_path |
mov esi,plugin_pach |
mov edi,string |
mov ecx,4096/4 |
cld |
rep movsd |
mov [open_file_flag],0 |
mov ecx,-1 |
call getappinfo |
call load_image |
test eax,eax |
jnz kopen_1.err |
call convert |
call load_directory.copy_dir_path |
call get_window_param |
test [window_status],1b |
jz @f ;draw_still |
mov [no_draw_window],1 |
call draw_other |
mov [no_draw_window],0 |
jmp .3 ;slide_show |
@@: |
call draw_window |
; jmp slide_show |
.3: |
mcall 26,9 |
add eax,[slide_show_delay] ;500 |
mov [timer],eax |
jmp slide_show |
;--------------------------------------------------------------------- |
key_up_arrow: |
mov eax,[scroll_bar_data_vertical.ar_offset] |
mov ebx,scroll_bar_data_vertical.position |
cmp [ebx],eax |
jbe @f |
sub [ebx],eax |
jmp .1 |
@@: |
xor eax,eax |
cmp [ebx],eax |
je still |
mov [ebx],eax |
.1: |
call drawimage |
call draw_scrollbars |
jmp still |
;--------------------------------------------------------------------- |
key_down_arrow: |
mov ecx,[scroll_bar_data_vertical.ar_offset] |
mov ebx,scroll_bar_data_vertical.position |
mov eax,[scroll_bar_data_vertical.max_area] |
sub eax,[scroll_bar_data_vertical.cur_area] |
cmp [ebx],eax |
je still |
push eax |
sub eax,ecx |
cmp [ebx],eax |
pop eax |
jae @f |
add [ebx],ecx |
jmp key_up_arrow.1 |
@@: |
mov [ebx],eax |
jmp key_up_arrow.1 |
;--------------------------------------------------------------------- |
key_left_arrow: |
mov eax,[scroll_bar_data_horizontal.ar_offset] |
mov ebx,scroll_bar_data_horizontal.position |
cmp [ebx],eax |
jbe @f |
sub [ebx],eax |
jmp key_up_arrow.1 |
@@: |
xor eax,eax |
cmp [ebx],eax |
je still |
mov [ebx],eax |
jmp key_up_arrow.1 |
;--------------------------------------------------------------------- |
key_right_arrow: |
mov ecx,[scroll_bar_data_horizontal.ar_offset] |
mov ebx,scroll_bar_data_horizontal.position |
mov eax,[scroll_bar_data_horizontal.max_area] |
sub eax,[scroll_bar_data_horizontal.cur_area] |
cmp [ebx],eax |
je still |
push eax |
sub eax,ecx |
cmp [ebx],eax |
pop eax |
jae @f |
add [ebx],ecx |
jmp key_up_arrow.1 |
@@: |
mov [ebx],eax |
; xor eax,eax |
; mov ax,[scroll_bar_data_horizontal.size_x] |
; sub eax,[scroll_bar_data_horizontal.btn_high] |
; sub eax,[scroll_bar_data_horizontal.btn_high] |
; sub eax,[scroll_bar_data_horizontal.run_size] |
; mov [scroll_bar_data_horizontal.position2],eax |
jmp key_up_arrow.1 |
;--------------------------------------------------------------------- |
/programs/media/zsea/libini.inc |
---|
0,0 → 1,115 |
;--------------------------------------------------------------------- |
Get_ini: |
stdcall dll.Init,[lib_init] |
mov ebx,ini_file_name |
mov esi,path |
mov edi,plugin_pach |
call copy_file_path |
invoke ini_get_int,plugin_pach,aVariables,aSortMode,2 |
cmp eax,0 |
jb .error_aSortMode |
cmp eax,13 |
jb @f |
.error_aSortMode: |
mov eax,2 |
@@: |
mov [sort_type],eax |
invoke ini_get_int,plugin_pach,aVariables,aArrowsOffset,10 |
cmp eax,1 |
jb .error_aArrowsOffset |
cmp eax,100 |
jb @f |
.error_aArrowsOffset: |
mov eax,10 |
@@: |
mov [arrows_offset],eax |
invoke ini_get_int,plugin_pach,aVariables,aSlideShowDelay,300 |
cmp eax,1 |
jb .error_aSlideShowDelay |
cmp eax,99990 |
jb @f |
.error_aSlideShowDelay: |
mov eax,300 |
@@: |
mov [slide_show_delay],eax |
invoke ini_get_int,plugin_pach,aVariables,aShowFileName,0 |
cmp eax,0 |
jb .error_aShowFileName |
cmp eax,1 |
jb @f |
.error_aShowFileName: |
mov eax,1 |
@@: |
shl eax,1 |
mov [check1+32],eax |
invoke ini_get_int,plugin_pach,aVariables,aFilteringFlag,0 |
cmp eax,0 |
jb .error_aFilteringFlag |
cmp eax,1 |
jb @f |
.error_aFilteringFlag: |
mov eax,1 |
@@: |
mov [filtering_flag],eax |
shl eax,1 |
mov [check2+32],eax |
; get convert plugins names |
invoke ini_get_str,plugin_pach,aConvertPlugins,aCP0,plugin_0_name,127,ConvertPlugins_no_key |
invoke ini_get_str,plugin_pach,aConvertPlugins,aCP1,plugin_1_name,127,ConvertPlugins_no_key |
invoke ini_get_str,plugin_pach,aConvertPlugins,aCP2,plugin_2_name,127,ConvertPlugins_no_key |
invoke ini_get_str,plugin_pach,aConvertPlugins,aCP3,plugin_3_name,127,ConvertPlugins_no_key |
invoke ini_get_str,plugin_pach,aConvertPlugins,aCP4,plugin_4_name,127,ConvertPlugins_no_key |
invoke ini_get_str,plugin_pach,aConvertPlugins,aCP5,plugin_5_name,127,ConvertPlugins_no_key |
invoke ini_get_str,plugin_pach,aConvertPlugins,aCP6,plugin_6_name,127,ConvertPlugins_no_key |
invoke ini_get_str,plugin_pach,aConvertPlugins,aCP7,plugin_7_name,127,ConvertPlugins_no_key |
invoke ini_get_str,plugin_pach,aConvertPlugins,aCP8,plugin_8_name,127,ConvertPlugins_no_key |
invoke ini_get_str,plugin_pach,aConvertPlugins,aCP9,plugin_9_name,127,ConvertPlugins_no_key |
invoke ini_get_str,plugin_pach,aApplicationsPaths,aHelp,Help_path,1023,ConvertPlugins_no_key |
invoke ini_get_str,plugin_pach,aApplicationsPaths,aEditor,Editor_path,1023,ConvertPlugins_no_key |
invoke ini_get_str,plugin_pach,aApplicationsPaths,aOpenDialog,OpenDialog_path,1023,ConvertPlugins_no_key |
invoke ini_get_str,plugin_pach,aOther,akey_help,key_help_name,127,ConvertPlugins_no_key |
ret |
;--------------------------------------------------------------------- |
Set_ini: |
mov ebx,ini_file_name |
mov esi,path |
mov edi,plugin_pach |
call copy_file_path |
invoke ini_set_int,plugin_pach,aVariables,aSortMode,[sort_type] |
invoke ini_set_int,plugin_pach,aVariables,aArrowsOffset,[arrows_offset] |
invoke ini_set_int,plugin_pach,aVariables,aSlideShowDelay,[slide_show_delay] |
mov eax,[check1+32] |
shr eax,1 |
mov [check1+32],eax |
invoke ini_set_int,plugin_pach,aVariables,aShowFileName,[check1+32] |
invoke ini_set_int,plugin_pach,aVariables,aFilteringFlag,[filtering_flag] |
ret |
;--------------------------------------------------------------------- |
;libini_alloc: |
; push ecx |
; mov ecx, [esp+8] |
; mcall 68,12 |
; pop ecx |
; ret 4 |
;--------------------------------------------------------------------- |
;libini_free: |
; push ecx |
; mov ecx, [esp+8] |
; mcall 68,13 |
; pop ecx |
; ret 4 |
;--------------------------------------------------------------------- |
;libini_realloc: |
; push ecx edx |
; mov edx, [esp+8+4] |
; mov ecx, [esp+8+8] |
; mcall 68,20 |
; pop edx ecx |
; ret 8 |
;--------------------------------------------------------------------- |
/programs/media/zsea/load.inc |
---|
0,0 → 1,886 |
;--------------------------------------------------------------------- |
load_plugins: |
load_libraries l_libs_start,end_l_libs |
test eax,eax |
jnz START.exit_1 |
;--------------------------------------------------------------------- |
; Get ini values |
call Get_ini |
; jmp last_plugin |
;--------------------------------------------------------------------- |
; mov [cnv_plugin_name_pointer],plugin_0_name |
load_convert_plugins: |
mov ecx,10 |
.1: |
push ecx |
mov esi,[cnv_plugin_name_pointer] |
cmp [esi],dword 'NoKe' |
je clear_current_load_convert_plugins_area ;last_plugin |
mov edi,system_path.1 |
mov ecx,128/4 |
cld |
rep movsd |
mov esi,[cnv_plugin_name_pointer] |
mov edi,err_message_found_lib.1 |
mov ecx,128/4 |
rep movsd |
mov esi,[cnv_plugin_name_pointer] |
mov edi,err_message_import.1 |
mov ecx,128/4 |
rep movsd |
load_library system_path.1, path, library_path, system_path, \ |
err_message_found_lib, head_f_l, \ |
[cnv_plugin_import_pointer], err_message_import, head_f_i, plugins_directory |
test eax,eax |
jnz START.exit_1 |
load_convert_plugins_next: |
add [cnv_plugin_import_pointer],dword 24 |
add [cnv_plugin_name_pointer],128 |
pop ecx |
dec ecx |
jnz load_convert_plugins.1 |
; jmp load_convert_plugins |
last_plugin: |
; initialize sort |
push dword 1 |
call dword [sort_init] |
; unpack deflate |
mov eax,[unpack_DeflateUnpack2] |
mov [deflate_unpack],eax |
ret |
;----------------------------------------- |
clear_current_load_convert_plugins_area: |
xor eax,eax |
mov edi,[cnv_plugin_import_pointer] |
cld |
push ecx |
mov ecx,24/4 |
rep stosd |
pop ecx |
jmp load_convert_plugins_next |
;--------------------------------------------------------------------- |
copy_path_my: |
xor eax,eax |
@@: |
cld |
lodsb |
stosb |
test eax,eax |
jnz @b |
mov esi,edi |
@@: |
std |
lodsb |
cmp al,'/' |
jnz @b |
mov edi,esi |
add edi,2 |
mov esi,ebx |
@@: |
cld |
lodsb |
stosb |
test eax,eax |
jnz @b |
mov esi,ecx |
dec edi |
@@: |
cld |
lodsb |
stosb |
test eax,eax |
jnz @b |
ret |
;--------------------------------------------------------------------- |
load_image: |
call delete_RAW1 |
mov [fileinfo+0],dword 5 |
mov [fileinfo+12],dword 0 |
mov [fileinfo+16],dword process_info |
cmp [soi],0 |
je @f |
mov ecx,[raw_pointer] |
mcall 68, 13, |
mov [soi],0 |
@@: |
; cmp [raw_pointer_2],dword 0 |
; je @f |
; mov ecx,[raw_pointer_2] ;[soi] |
; mcall 68, 13, |
; mov [raw_pointer_2],0 |
;@@: |
.1: |
mcall 70, fileinfo |
test eax,eax |
jnz .end |
mov [fileinfo+0],dword 0 |
mov ecx,[process_info+32] |
; for Diamond emulator, and broken files - size = 0 |
; test ecx,ecx |
; jnz @f |
cmp ecx,32 |
jae @f |
mov eax,6 |
jmp .end |
@@: |
mov [fileinfo+12],ecx |
mov [img_size],ecx |
mcall 68, 12 |
mov [fileinfo+16],eax |
mov [image_file],eax |
mcall 70, fileinfo |
.end: |
mov [error_fs],eax |
ret |
;--------------------------------------------------------------------- |
delete_RAW1: |
cmp [RAW1_pointer],0 |
jne @f |
ret |
@@: |
mcall 68, 13,[previous_frame_pointer] |
xor eax,eax |
mov [Repeat_N],eax |
@@: |
mov edx,[Repeat_N] |
shl edx,4 |
add edx,[RAW1_pointer] |
mov ecx,[edx+16] |
call .1 |
inc [Repeat_N] |
mov eax,[Repeat_N] |
cmp [Total_Repeat_N],eax |
ja @r |
mov ecx,[RAW1_pointer] |
call .1 |
xor eax,eax |
mov [RAW1_pointer],eax |
ret |
.1: |
mcall 68, 13, |
ret |
;--------------------------------------------------------------------- |
load_buttons: |
mov esi,path |
mov edi,plugin_pach |
mov ebx,buttons_directory |
mov ecx,button_name ;buttons_passive_name |
call copy_path_my |
mov [fileinfo.name], dword plugin_pach |
xor eax,eax |
mov [raw_pointer_2],eax |
call load_image |
mov eax,[error_fs] |
test eax,eax |
jnz START.exit_1 |
call convert_plugin_invoke |
mov eax,[return_code] |
test eax,eax |
jnz START.exit_1 |
mov ebx,[raw_pointer] |
mov eax,[ebx+4] |
mov [dinamic_button_data_1.size_x],ax |
mov [dinamic_button_data_1.size_y],ax |
mov [dinamic_button_data_2.size_x],ax |
mov [dinamic_button_data_2.size_y],ax |
mov [dinamic_button_data_3.size_x],ax |
mov [dinamic_button_data_3.size_y],ax |
mov [dinamic_button_data_4.size_x],ax |
mov [dinamic_button_data_4.size_y],ax |
mov [dinamic_button_data_5.size_x],ax |
mov [dinamic_button_data_5.size_y],ax |
mov [dinamic_button_data_6.size_x],ax |
mov [dinamic_button_data_6.size_y],ax |
mov [dinamic_button_data_7.size_x],ax |
mov [dinamic_button_data_7.size_y],ax |
mov [dinamic_button_data_8.size_x],ax |
mov [dinamic_button_data_8.size_y],ax |
mov [dinamic_button_data_9.size_x],ax |
mov [dinamic_button_data_9.size_y],ax |
mov [dinamic_button_data_10.size_x],ax |
mov [dinamic_button_data_10.size_y],ax |
mov [dinamic_button_data_11.size_x],ax |
mov [dinamic_button_data_11.size_y],ax |
mov [dinamic_button_data_12.size_x],ax |
mov [dinamic_button_data_12.size_y],ax |
mov [dinamic_button_data_13.size_x],ax |
mov [dinamic_button_data_13.size_y],ax |
mov [dinamic_button_data_14.size_x],ax |
mov [dinamic_button_data_14.size_y],ax |
mov [dinamic_button_data_15.size_x],ax |
mov [dinamic_button_data_15.size_y],ax |
mov eax,[ebx+12] |
mov [dinamic_button_data_1.resolution_raw],eax |
mov [dinamic_button_data_2.resolution_raw],eax |
mov [dinamic_button_data_3.resolution_raw],eax |
mov [dinamic_button_data_4.resolution_raw],eax |
mov [dinamic_button_data_5.resolution_raw],eax |
mov [dinamic_button_data_6.resolution_raw],eax |
mov [dinamic_button_data_7.resolution_raw],eax |
mov [dinamic_button_data_8.resolution_raw],eax |
mov [dinamic_button_data_9.resolution_raw],eax |
mov [dinamic_button_data_10.resolution_raw],eax |
mov [dinamic_button_data_11.resolution_raw],eax |
mov [dinamic_button_data_12.resolution_raw],eax |
mov [dinamic_button_data_13.resolution_raw],eax |
mov [dinamic_button_data_14.resolution_raw],eax |
mov [dinamic_button_data_15.resolution_raw],eax |
mov eax,[ebx+20] |
add eax,ebx |
mov [dinamic_button_data_1.palette_raw],eax |
mov [dinamic_button_data_2.palette_raw],eax |
mov [dinamic_button_data_3.palette_raw],eax |
mov [dinamic_button_data_4.palette_raw],eax |
mov [dinamic_button_data_5.palette_raw],eax |
mov [dinamic_button_data_6.palette_raw],eax |
mov [dinamic_button_data_7.palette_raw],eax |
mov [dinamic_button_data_8.palette_raw],eax |
mov [dinamic_button_data_9.palette_raw],eax |
mov [dinamic_button_data_10.palette_raw],eax |
mov [dinamic_button_data_11.palette_raw],eax |
mov [dinamic_button_data_12.palette_raw],eax |
mov [dinamic_button_data_13.palette_raw],eax |
mov [dinamic_button_data_14.palette_raw],eax |
mov [dinamic_button_data_15.palette_raw],eax |
mov eax,[ebx+28] |
add eax,ebx |
push eax |
mov [dinamic_button_data_1.passive_raw],eax |
mov ecx,[ebx+4] |
imul ecx,[ebx+4] |
imul ecx,[ebx+12] |
shr ecx,3 |
add eax,ecx |
mov [dinamic_button_data_2.passive_raw],eax |
add eax,ecx |
mov [dinamic_button_data_3.passive_raw],eax |
add eax,ecx |
mov [dinamic_button_data_4.passive_raw],eax |
add eax,ecx |
mov [dinamic_button_data_5.passive_raw],eax |
add eax,ecx |
mov [dinamic_button_data_6.passive_raw],eax |
add eax,ecx |
mov [dinamic_button_data_7.passive_raw],eax |
add eax,ecx |
mov [dinamic_button_data_8.passive_raw],eax |
add eax,ecx |
mov [dinamic_button_data_9.passive_raw],eax |
add eax,ecx |
mov [dinamic_button_data_10.passive_raw],eax |
add eax,ecx |
mov [dinamic_button_data_11.passive_raw],eax |
add eax,ecx |
mov [dinamic_button_data_12.passive_raw],eax |
add eax,ecx |
mov [dinamic_button_data_13.passive_raw],eax |
add eax,ecx |
mov [dinamic_button_data_14.passive_raw],eax |
add eax,ecx |
mov [dinamic_button_data_15.passive_raw],eax |
;------------------------------------ |
movzx ebx,word [dinamic_button_data_1.size_x] |
movzx eax,word [dinamic_button_data_1.size_y] |
imul eax,ebx |
imul eax,15 |
mov ebx,[dinamic_button_data_1.resolution_raw] |
shr ebx,3 |
imul ebx,eax |
pop eax |
add eax,ebx |
push eax |
mov [dinamic_button_data_1.active_raw],eax |
add eax,ecx |
mov [dinamic_button_data_2.active_raw],eax |
add eax,ecx |
mov [dinamic_button_data_3.active_raw],eax |
add eax,ecx |
mov [dinamic_button_data_4.active_raw],eax |
add eax,ecx |
mov [dinamic_button_data_5.active_raw],eax |
add eax,ecx |
mov [dinamic_button_data_6.active_raw],eax |
add eax,ecx |
mov [dinamic_button_data_7.active_raw],eax |
add eax,ecx |
mov [dinamic_button_data_8.active_raw],eax |
add eax,ecx |
mov [dinamic_button_data_9.active_raw],eax |
add eax,ecx |
mov [dinamic_button_data_10.active_raw],eax |
add eax,ecx |
mov [dinamic_button_data_11.active_raw],eax |
add eax,ecx |
mov [dinamic_button_data_12.active_raw],eax |
add eax,ecx |
mov [dinamic_button_data_13.active_raw],eax |
add eax,ecx |
mov [dinamic_button_data_14.active_raw],eax |
add eax,ecx |
mov [dinamic_button_data_15.active_raw],eax |
;------------------------------------ |
pop eax |
add eax,ebx |
mov [dinamic_button_data_1.click_raw],eax |
add eax,ecx |
mov [dinamic_button_data_2.click_raw],eax |
add eax,ecx |
mov [dinamic_button_data_3.click_raw],eax |
add eax,ecx |
mov [dinamic_button_data_4.click_raw],eax |
add eax,ecx |
mov [dinamic_button_data_5.click_raw],eax |
add eax,ecx |
mov [dinamic_button_data_6.click_raw],eax |
add eax,ecx |
mov [dinamic_button_data_7.click_raw],eax |
add eax,ecx |
mov [dinamic_button_data_8.click_raw],eax |
add eax,ecx |
mov [dinamic_button_data_9.click_raw],eax |
add eax,ecx |
mov [dinamic_button_data_10.click_raw],eax |
add eax,ecx |
mov [dinamic_button_data_11.click_raw],eax |
add eax,ecx |
mov [dinamic_button_data_12.click_raw],eax |
add eax,ecx |
mov [dinamic_button_data_13.click_raw],eax |
add eax,ecx |
mov [dinamic_button_data_14.click_raw],eax |
add eax,ecx |
mov [dinamic_button_data_15.click_raw],eax |
;------------------------------------ |
mov [fileinfo.name], dword string |
xor eax,eax |
mov [img_size],eax |
ret |
;--------------------------------------------------------------------- |
load_directory: |
cmp [load_directory_pointer],dir_header ;dword 0 |
je @f |
mcall 68, 13, [load_directory_pointer] |
@@: |
call .copy_dir_path |
mov [dirinfo.size],dword 0 |
mov [dirinfo.return],dir_header ;procinfo |
mcall 70, dirinfo |
test eax,eax |
jnz .end_err |
mov ecx,[dir_header.totl_blocks] ;[procinfo+8] |
mov [dirinfo.size],ecx |
imul ecx,304 |
add ecx,32 |
mcall 68, 12 |
mov [dirinfo.return],eax |
mov [load_directory_pointer],eax |
mcall 70, dirinfo |
test eax,eax |
jnz .end_err |
call delete_unsupported_BDFE |
.sort: |
call sort_directory |
; add [load_directory_pointer],2*304+32+40 |
mov ebp,[load_directory_pointer] |
mov ebp,[ebp+4] |
; check ebp = 0 |
test ebp,ebp |
jz .end_1 ;.start |
dec ebp |
jz .end_1 |
.start: |
mov esi,file_name |
mov ecx,[file_name_length] |
imul edi,ebp,304 |
add edi,32+40 |
add edi,[load_directory_pointer] |
@@: |
cld |
lodsb |
call char_todown |
xchg ah,al |
xchg edi,esi |
cld |
lodsb |
call char_todown |
; xchg ah,al |
xchg edi,esi |
dec ecx |
jz .end |
cmp ah,al |
je @r |
dec ebp |
jnz .start |
.end_1: |
xor eax,eax |
mov [load_file_number],eax |
ret |
.end: |
mov [load_file_number],ebp |
xor eax,eax |
.end_err: |
ret |
;------------------------------------------- |
.copy_dir_path: |
mov esi,string ;path |
mov edi,plugin_pach |
mov ebx,file_name |
call copy_dir_path |
mov [file_name_length],ebx |
ret |
;--------------------------------------------------------------------- |
sort_directory: |
; pusha |
push dword [sort_type] ;2 ; ðåæèì ñîðòèðîâêè |
mov eax,[load_directory_pointer] |
push dword [eax+4] ;[dirdata+4] ; ÷èñëî ôàéëîâ |
; ìîæíî ïèñàòü push ebx, åñëè |
; äåëî ïðîèñõîäèò íåïîñðåäñòâåííî ïîñëå int 0x40 |
add eax,32 |
push eax ;dirdata+32 ; äàííûå ôàéëîâ |
; call [plugin_sort] |
call [sort_dir] |
; popa |
ret |
;--------------------------------------------------------------------- |
delete_unsupported_BDFE: |
mov [fileinfo.subfunction],dword 0 |
mov [fileinfo.size],dword 32 |
mov [fileinfo.name], dword plugin_pach |
mov eax,process_info |
mov [fileinfo.return],eax |
mov [image_file],eax |
mov ebx,[load_directory_pointer] |
add ebx,4 |
xor ecx,ecx |
dec ecx |
mov eax,[load_directory_pointer] |
add eax,32+40 |
sub eax,304 |
.start: |
inc ecx |
add eax,304 |
.1: |
cmp [ebx],ecx |
je .end |
cmp [eax],byte '.' |
jne @f |
cmp [eax+1],byte 0 |
je .delete |
@@: |
cmp [eax],word '..' |
jne @f |
cmp [eax+2],byte 0 |
je .delete |
@@: |
test [eax-40],byte 0x10 |
jnz .delete |
push eax ebx |
mov esi,eax |
call search_expansion |
test eax,eax |
pop ebx eax |
jnz .delete |
; mov edi,[test_area+4] |
; cmp [esi],edi |
; je .start |
mov edi,plugin_0_name |
cmp [edi],dword 'NoKe' |
je .delete |
push eax ebx ecx esi |
mov edi,[Convert_plugin_0.Assoc] |
test edi,edi |
jnz @f |
pop esi ecx ebx eax |
jmp .delete |
@@: |
call compare_expansion |
test eax,eax |
pop esi ecx ebx eax |
jz .start |
mov edi,plugin_1_name |
cmp [edi],dword 'NoKe' |
je .delete |
push eax ebx ecx esi |
mov edi,[Convert_plugin_1.Assoc] |
test edi,edi |
jnz @f |
pop esi ecx ebx eax |
jmp .delete |
@@: |
call compare_expansion |
test eax,eax |
pop esi ecx ebx eax |
jz .start |
mov edi,plugin_2_name |
cmp [edi],dword 'NoKe' |
je .delete |
push eax ebx ecx esi |
mov edi,[Convert_plugin_2.Assoc] |
test edi,edi |
jnz @f |
pop esi ecx ebx eax |
jmp .delete |
@@: |
call compare_expansion |
test eax,eax |
pop esi ecx ebx eax |
jz .start |
mov edi,plugin_3_name |
cmp [edi],dword 'NoKe' |
je .delete |
push eax ebx ecx esi |
mov edi,[Convert_plugin_3.Assoc] |
test edi,edi |
jnz @f |
pop esi ecx ebx eax |
jmp .delete |
@@: |
call compare_expansion |
test eax,eax |
pop esi ecx ebx eax |
jz .start |
mov edi,plugin_4_name |
cmp [edi],dword 'NoKe' |
je .delete |
push eax ebx ecx esi |
mov edi,[Convert_plugin_4.Assoc] |
test edi,edi |
jnz @f |
pop esi ecx ebx eax |
jmp .delete |
@@: |
call compare_expansion |
test eax,eax |
pop esi ecx ebx eax |
jz .start |
mov edi,plugin_5_name |
cmp [edi],dword 'NoKe' |
je .delete |
push eax ebx ecx esi |
mov edi,[Convert_plugin_5.Assoc] |
test edi,edi |
jnz @f |
pop esi ecx ebx eax |
jmp .delete |
@@: |
call compare_expansion |
test eax,eax |
pop esi ecx ebx eax |
jz .start |
mov edi,plugin_6_name |
cmp [edi],dword 'NoKe' |
je .delete |
push eax ebx ecx esi |
mov edi,[Convert_plugin_6.Assoc] |
test edi,edi |
jnz @f |
pop esi ecx ebx eax |
jmp .delete |
@@: |
call compare_expansion |
test eax,eax |
pop esi ecx ebx eax |
jz .start |
mov edi,plugin_7_name |
cmp [edi],dword 'NoKe' |
je .delete |
push eax ebx ecx esi |
mov edi,[Convert_plugin_7.Assoc] |
test edi,edi |
jnz @f |
pop esi ecx ebx eax |
jmp .delete |
@@: |
call compare_expansion |
test eax,eax |
pop esi ecx ebx eax |
jz .start |
mov edi,plugin_8_name |
cmp [edi],dword 'NoKe' |
je .delete |
push eax ebx ecx esi |
mov edi,[Convert_plugin_8.Assoc] |
test edi,edi |
jnz @f |
pop esi ecx ebx eax |
jmp .delete |
@@: |
call compare_expansion |
test eax,eax |
pop esi ecx ebx eax |
jz .start |
mov edi,plugin_9_name |
cmp [edi],dword 'NoKe' |
je .delete |
push eax ebx ecx esi |
mov edi,[Convert_plugin_9.Assoc] |
test edi,edi |
jnz @f |
pop esi ecx ebx eax |
jmp .delete |
@@: |
call compare_expansion |
test eax,eax |
pop esi ecx ebx eax |
jz .start |
;------------------------------------------- |
.delete: |
dec dword [ebx] |
mov esi,[ebx] |
sub esi,ecx |
push ecx |
mov ecx,esi |
imul ecx,304/4 |
mov edi,eax |
sub edi,40 |
mov esi,edi |
add esi,304 |
cld |
rep movsd |
pop ecx |
jmp .1 |
.end: |
mov [fileinfo.name], dword string |
ret |
;--------------------------------------------------------------------- |
image_editor: |
mov [start_appl.parameter],dword string |
mov [start_appl.name],dword Editor_path |
mcall 70, start_appl |
jmp still |
;--------------------------------------------------------------------- |
open_help: |
mov ebx,key_help_name |
mov esi,path |
mov edi,library_path |
call copy_file_path |
mov [start_appl.parameter],dword library_path |
mov [start_appl.name],dword Help_path |
mcall 70, start_appl |
jmp still |
;--------------------------------------------------------------------- |
char_todown: |
; convert character to uppercase, using cp866 encoding |
; in: al=symbol |
; out: al=converted symbol |
cmp al, 'A' |
jb .ret |
cmp al, 'Z' |
jbe .az |
cmp al, '' |
jb .ret |
cmp al, '' |
jb .rus1 |
cmp al, '' |
ja .ret |
; 0x90-0x9F -> 0xE0-0xEF |
add al, 'à'-'' |
.ret: |
ret |
.rus1: |
; 0x80-0x8F -> 0xA0-0xAF |
.az: |
add al, 0x20 |
ret |
;--------------------------------------------------------------------- |
copy_dir_path: |
xor eax,eax |
cmp [esi],al |
jne @f |
mov [edi],al |
mov [ebx],al |
xor ebx,ebx |
inc ebx |
ret |
@@: |
cld |
lodsb |
stosb |
test eax,eax |
jnz @b |
mov esi,edi |
dec esi |
@@: |
std |
lodsb |
cmp al,'/' |
jnz @b |
push esi |
add esi,2 |
mov edi,ebx ;file_name |
xor ebx,ebx |
@@: |
cld |
lodsb |
stosb |
inc ebx |
test eax,eax |
jnz @b |
pop esi |
mov [esi+1], byte 0 |
cld |
ret |
;--------------------------------------------------------------------- |
copy_file_path: |
xor eax,eax |
@@: |
cld |
lodsb |
stosb |
test eax,eax |
jnz @b |
mov esi,edi |
dec esi |
@@: |
std |
lodsb |
cmp al,'/' |
jnz @b |
mov edi,esi |
add edi,2 |
mov esi,ebx |
@@: |
cld |
lodsb |
stosb |
test eax,eax |
jnz @b |
ret |
;--------------------------------------------------------------------- |
search_expansion: |
mov edi,esi |
xor eax,eax |
@@: |
cld |
lodsb |
test eax,eax |
jnz @b |
mov ebx,esi |
dec esi |
@@: |
std |
lodsb |
cmp esi,edi |
jb .end_err |
cmp al,'.' |
jne @b |
add esi,2 |
sub ebx,esi |
dec ebx |
mov [expansion_length],ebx |
cld |
xor eax,eax |
ret |
.end_err: |
cld |
xor eax,eax |
inc eax |
ret |
;--------------------------------------------------------------------- |
compare_expansion: |
mov ebx,[edi] |
add ebx,edi |
add edi,3 |
.start: |
cmp ebx,edi |
jb .end_err |
mov ecx,[expansion_length] |
inc edi |
push esi edi |
@@: |
cld |
lodsb |
xchg esi,edi |
shl eax,8 |
lodsb |
xchg esi,edi |
call char_todown |
xchg al,ah |
call char_todown |
cmp al,ah |
jne @f |
dec ecx |
jnz @b |
jmp .end |
@@: |
pop edi esi |
jmp .start |
; jnz .start |
.end: |
pop edi esi |
xor eax,eax |
ret |
.end_err: |
xor eax,eax |
inc eax |
ret |
;--------------------------------------------------------------------- |
/programs/media/zsea/menu_key.inc |
---|
0,0 → 1,171 |
select_menu: |
call check_alt |
.1: |
xor eax,eax |
mov [menu_data_1.ret_key],eax |
push dword menu_data_1 |
call [menu_bar_activate] |
call clear_control_key_flag |
mov eax,[menu_data_1.ret_key] |
mov [menu_data_1.ret_key],dword 0 |
cmp eax,1 |
je .6 |
cmp eax,2 |
je .2 |
cmp [menu_data_1.click],dword 1 |
jne still |
cmp [menu_data_1.cursor_out],dword 0 |
jne analyse_out_menu_1 |
jmp still |
;--------------------------------------------------------------------- |
.2: |
xor eax,eax |
mov [menu_data_2.ret_key],eax |
push dword menu_data_2 |
call [menu_bar_activate] |
call clear_control_key_flag |
mov eax,[menu_data_2.ret_key] |
mov [menu_data_2.ret_key],dword 0 |
cmp eax,1 |
je .1 |
cmp eax,2 |
je .3 |
cmp [menu_data_2.click],dword 1 |
jne still |
cmp [menu_data_2.cursor_out],dword 0 |
jne analyse_out_menu_2 |
jmp still |
;--------------------------------------------------------------------- |
.3: |
xor eax,eax |
mov [menu_data_3.ret_key],eax |
push dword menu_data_3 |
call [menu_bar_activate] |
call clear_control_key_flag |
mov eax,[menu_data_3.ret_key] |
mov [menu_data_3.ret_key],dword 0 |
cmp eax,1 |
je .2 |
cmp eax,2 |
je .4 |
cmp [menu_data_3.click],dword 1 |
jne still |
cmp [menu_data_3.cursor_out],dword 0 |
jne analyse_out_menu_3 |
jmp still |
;--------------------------------------------------------------------- |
.4: |
xor eax,eax |
mov [menu_data_4.ret_key],eax |
push dword menu_data_4 |
call [menu_bar_activate] |
call clear_control_key_flag |
mov eax,[menu_data_4.ret_key] |
mov [menu_data_4.ret_key],dword 0 |
cmp eax,1 |
je .3 |
cmp eax,2 |
je .5 |
cmp [menu_data_4.click],dword 1 |
jne still |
cmp [menu_data_4.cursor_out],dword 0 |
jne analyse_out_menu_4 |
jmp still |
;--------------------------------------------------------------------- |
.5: |
xor eax,eax |
mov [menu_data_5.ret_key],eax |
push dword menu_data_5 |
call [menu_bar_activate] |
call clear_control_key_flag |
mov eax,[menu_data_5.ret_key] |
mov [menu_data_5.ret_key],dword 0 |
cmp eax,1 |
je .4 |
cmp eax,2 |
je .6 |
cmp [menu_data_5.click],dword 1 |
jne still |
cmp [menu_data_5.cursor_out],dword 0 |
jne analyse_out_menu_5 |
jmp still |
;--------------------------------------------------------------------- |
.6: |
xor eax,eax |
mov [menu_data_6.ret_key],eax |
push dword menu_data_6 |
call [menu_bar_activate] |
call clear_control_key_flag |
mov eax,[menu_data_6.ret_key] |
mov [menu_data_6.ret_key],dword 0 |
cmp eax,1 |
je .5 |
cmp eax,2 |
je .1 |
cmp [menu_data_6.click],dword 1 |
jne still |
cmp [menu_data_6.cursor_out],dword 0 |
jne analyse_out_menu_6 |
jmp still |
;--------------------------------------------------------------------- |
clear_control_key_flag: |
push eax |
xor eax,eax |
mov [shift_flag],al |
mov [ctrl_flag],al |
mov [alt_flag],al |
pop eax |
ret |
;--------------------------------------------------------------------- |
check_alt: |
xor eax,eax |
mov al,[alt_flag] |
test eax,eax |
jz @f |
xor ebx,ebx |
ret |
@@: |
add esp,4 |
jmp still |
;--------------------------------------------------------------------- |
/programs/media/zsea/mouse.inc |
---|
0,0 → 1,596 |
;--------------------------------------------------------------------- |
mouse: |
mcall 18,7 |
cmp [active_process],eax |
jne still |
mcall 37,7 |
mov [mouse_scroll_data],eax |
mov eax,[mouse_position] |
mov [mouse_position_old],eax |
mcall 37,1 |
mov [mouse_position],eax |
mov eax,[mouse_keys] |
mov [mouse_keys_old],eax |
mcall 37,2 |
mov [mouse_keys],eax |
cmp [soi],dword 0 |
je .menu_bar |
cmp [scaling_mode],dword 0 |
je .menu_bar |
cmp [capture_image_area_flag],1 |
je capture_image_area |
;----------------------------------------------------- |
cmp [scroll_bar_data_vertical.delta2],0 |
jne .vertical |
.horizontal: |
mov eax,[scroll_bar_data_horizontal.max_area] |
cmp eax,[scroll_bar_data_horizontal.cur_area] |
jbe .vertical |
push dword scroll_bar_data_horizontal |
call [scrollbar_hor_mouse] |
; mouse_scroll_bar_horizontal scroll_bar_data_horizontal |
cmp [scroll_bar_data_horizontal.redraw],0 |
je @f |
mov [scroll_bar_data_horizontal.redraw],0 |
jmp .draw |
@@: |
cmp [scroll_bar_data_horizontal.delta2],0 |
jne still |
;----------------------------------------------------- |
.vertical: |
mov eax,[scroll_bar_data_vertical.max_area] |
cmp eax,[scroll_bar_data_vertical.cur_area] |
jbe .menu_bar |
push dword scroll_bar_data_vertical |
call [scrollbar_ver_mouse] |
; mouse_scroll_bar_vertical scroll_bar_data_vertical |
cmp [scroll_bar_data_vertical.redraw],0 |
je .menu_bar ;still |
mov [scroll_bar_data_vertical.redraw],0 |
.draw: |
call drawimage |
jmp still |
;--------------------------------------------------- |
.clear_mouse_keys_old: |
xor eax,eax |
mov [mouse_keys],eax |
mov [mouse_keys_old],eax |
ret |
;--------------------------------------------------- |
.menu_bar: |
cmp [scroll_bar_data_vertical.delta2],0 |
jne still |
cmp [scroll_bar_data_horizontal.delta2],0 |
jne still |
; xor eax,eax |
; mov [menu_data_1.get_mouse_flag],eax |
; mov [menu_data_2.get_mouse_flag],eax |
; mov [menu_data_3.get_mouse_flag],eax |
; mov [menu_data_4.get_mouse_flag],eax |
; mov [menu_data_5.get_mouse_flag],eax |
; mov [menu_data_6.get_mouse_flag],eax |
.menu_bar_1: |
call .set_mouse_flag |
@@: |
push dword menu_data_1 |
call [menu_bar_mouse] |
; mouse_menubar menu_data_1 |
cmp [menu_data_1.click],dword 1 |
jne .menu_bar_2 |
call .clear_mouse_keys_old |
cmp [menu_data_1.cursor_out],dword 0 |
jne analyse_out_menu_1 |
jmp .menu_bar_1 |
;-------------------------------------------- |
.menu_bar_2: |
; Edit |
push dword menu_data_2 |
call [menu_bar_mouse] |
; mouse_menubar menu_data_2 |
cmp [menu_data_2.click],dword 1 |
jne .menu_bar_3 |
call .clear_mouse_keys_old |
cmp [menu_data_2.cursor_out],dword 0 |
jne analyse_out_menu_2 |
jmp .menu_bar_1 |
;-------------------------------------------- |
.menu_bar_3: |
; View |
push dword menu_data_3 |
call [menu_bar_mouse] |
; mouse_menubar menu_data_3 |
cmp [menu_data_3.click],dword 1 |
jne .menu_bar_4 |
call .clear_mouse_keys_old |
cmp [menu_data_3.cursor_out],dword 0 |
jne analyse_out_menu_3 ;still |
jmp .menu_bar_1 |
;-------------------------------------------- |
.menu_bar_4: |
; Zoom |
push dword menu_data_4 |
call [menu_bar_mouse] |
; mouse_menubar menu_data_4 |
cmp [menu_data_4.click],dword 1 |
jne .menu_bar_5 |
call .clear_mouse_keys_old |
cmp [menu_data_4.cursor_out],dword 0 |
jne analyse_out_menu_4 |
jmp .menu_bar_1 |
;-------------------------------------------- |
.menu_bar_5: |
; Tools |
push dword menu_data_5 |
call [menu_bar_mouse] |
; mouse_menubar menu_data_5 |
cmp [menu_data_5.click],dword 1 |
jne .menu_bar_6 |
call .clear_mouse_keys_old |
cmp [menu_data_5.cursor_out],dword 0 |
jne analyse_out_menu_5 |
jmp .menu_bar_1 |
;-------------------------------------------- |
.menu_bar_6: |
; Help |
push dword menu_data_6 |
call [menu_bar_mouse] |
; mouse_menubar menu_data_6 |
cmp [menu_data_6.click],dword 1 |
jne .mouse_dinamic_button |
call .clear_mouse_keys_old |
cmp [menu_data_6.cursor_out],dword 0 |
jne analyse_out_menu_6 |
jmp .menu_bar_1 |
;--------------------------------------------------- |
.mouse_dinamic_button: |
; open file |
push dword dinamic_button_data_1 |
call [dinamic_button_mouse] |
; mouse_dinamic_button dinamic_button_data_1 |
mov eax,dinamic_button_data_1.click |
cmp [eax],dword 1 |
jne @f |
mov [eax],dword 0 |
jmp kfile |
;------------------------------------------------- |
@@: |
; reload file |
push dword dinamic_button_data_2 |
call [dinamic_button_mouse] |
; mouse_dinamic_button dinamic_button_data_2 |
mov eax,dinamic_button_data_2.click |
cmp [eax],dword 1 |
jne @f |
mov [eax],dword 0 |
jmp kopen |
;------------------------------------------------- |
@@: |
; left limit |
push dword dinamic_button_data_3 |
call [dinamic_button_mouse] |
; mouse_dinamic_button dinamic_button_data_3 |
mov eax,dinamic_button_data_3.click |
cmp [eax],dword 1 |
jne @f |
mov [eax],dword 0 |
jmp left_limit |
;------------------------------------------------- |
@@: |
; left arrow |
push dword dinamic_button_data_4 |
call [dinamic_button_mouse] |
; mouse_dinamic_button dinamic_button_data_4 |
mov eax,dinamic_button_data_4.click |
cmp [eax],dword 1 |
jne @f |
mov [eax],dword 0 |
jmp move_to_left |
;------------------------------------------------- |
@@: |
; slide show |
push dword dinamic_button_data_5 |
call [dinamic_button_mouse] |
; mouse_dinamic_button dinamic_button_data_5 |
mov eax,dinamic_button_data_5.click |
cmp [eax],dword 1 |
jne @f |
mov [eax],dword 0 |
jmp slide_show.3 |
;------------------------------------------------- |
@@: |
; right arrow |
push dword dinamic_button_data_6 |
call [dinamic_button_mouse] |
; mouse_dinamic_button dinamic_button_data_6 |
mov eax,dinamic_button_data_6.click |
cmp [eax],dword 1 |
jne @f |
mov [eax],dword 0 |
jmp move_to_right |
;------------------------------------------------- |
@@: |
; right limit |
push dword dinamic_button_data_7 |
call [dinamic_button_mouse] |
; mouse_dinamic_button dinamic_button_data_7 |
mov eax,dinamic_button_data_7.click |
cmp [eax],dword 1 |
jne @f |
mov [eax],dword 0 |
jmp right_limit |
;------------------------------------------------- |
@@: |
; zoom + |
push dword dinamic_button_data_8 |
call [dinamic_button_mouse] |
; mouse_dinamic_button dinamic_button_data_8 |
mov eax,dinamic_button_data_8.click |
cmp [eax],dword 1 |
jne @f |
mov [eax],dword 0 |
jmp zoom_plus ;still |
;------------------------------------------------- |
@@: |
; zoom - |
push dword dinamic_button_data_9 |
call [dinamic_button_mouse] |
; mouse_dinamic_button dinamic_button_data_9 |
mov eax,dinamic_button_data_9.click |
cmp [eax],dword 1 |
jne @f |
mov [eax],dword 0 |
jmp zoom_minus ;still |
;------------------------------------------------- |
@@: |
; zoom 100% |
push dword dinamic_button_data_10 |
call [dinamic_button_mouse] |
; mouse_dinamic_button dinamic_button_data_10 |
mov eax,dinamic_button_data_10.click |
cmp [eax],dword 1 |
jne @f |
mov [eax],dword 0 |
jmp no_scaling ;still |
;------------------------------------------------- |
@@: |
; rotate clockwise |
push dword dinamic_button_data_11 |
call [dinamic_button_mouse] |
; mouse_dinamic_button dinamic_button_data_11 |
mov eax,dinamic_button_data_11.click |
cmp [eax],dword 1 |
jne @f |
mov [eax],dword 0 |
jmp rotate_clockwise |
;------------------------------------------------- |
@@: |
; rotate counter-clockwise |
push dword dinamic_button_data_12 |
call [dinamic_button_mouse] |
; mouse_dinamic_button dinamic_button_data_12 |
mov eax,dinamic_button_data_12.click |
cmp [eax],dword 1 |
jne @f |
mov [eax],dword 0 |
jmp rotate_counter_clockwise |
;------------------------------------------------- |
@@: |
; file information |
push dword dinamic_button_data_13 |
call [dinamic_button_mouse] |
; mouse_dinamic_button dinamic_button_data_13 |
mov eax,dinamic_button_data_13.click |
cmp [eax],dword 1 |
jne @f |
mov [eax],dword 0 |
jmp kinfo |
;------------------------------------------------- |
@@: |
; wallpaper |
push dword dinamic_button_data_14 |
call [dinamic_button_mouse] |
; mouse_dinamic_button dinamic_button_data_14 |
mov eax,dinamic_button_data_14.click |
cmp [eax],dword 1 |
jne @f |
mov [eax],dword 0 |
jmp k_background |
;------------------------------------------------- |
@@: |
; settings |
push dword dinamic_button_data_15 |
call [dinamic_button_mouse] |
; mouse_dinamic_button dinamic_button_data_15 |
mov eax,dinamic_button_data_15.click |
cmp [eax],dword 1 |
jne @f |
mov [eax],dword 0 |
jmp k_option ;still |
;------------------------------------------------- |
@@: |
jmp check_scroll_event |
; jmp still |
;--------------------------------------------------------------------- |
.set_mouse_flag: |
xor eax,eax |
inc eax |
mov [menu_data_1.get_mouse_flag],eax |
mov [menu_data_2.get_mouse_flag],eax |
mov [menu_data_3.get_mouse_flag],eax |
mov [menu_data_4.get_mouse_flag],eax |
mov [menu_data_5.get_mouse_flag],eax |
mov [menu_data_6.get_mouse_flag],eax |
ret |
;--------------------------------------------------------------------- |
analyse_out_menu_1: |
; File |
mov eax,[menu_data_1.cursor_out] |
cmp eax,dword 1 |
je kfile |
cmp eax,dword 2 |
je kinfo |
cmp eax,dword 3 |
je START.exit |
jmp still |
;--------------------------------------------------------------------- |
analyse_out_menu_2: |
; Edit |
mov eax,[menu_data_2.cursor_out] |
cmp eax,dword 1 |
je rotate_clockwise |
cmp eax,dword 2 |
je rotate_counter_clockwise |
cmp eax,dword 3 |
je invert_left_to_right |
cmp eax,dword 4 |
je invert_up_to_down |
jmp still |
;--------------------------------------------------------------------- |
analyse_out_menu_3: |
; View |
mov eax,[menu_data_3.cursor_out] |
cmp eax,dword 1 |
je k_sort_directory |
cmp eax,dword 2 |
je full_screen |
cmp eax,dword 3 |
je kopen |
jmp still |
;--------------------------------------------------------------------- |
analyse_out_menu_4: |
; Zoom |
mov eax,[menu_data_4.cursor_out] |
cmp eax,dword 1 |
je no_scaling |
cmp eax,dword 2 |
je zoom_plus |
cmp eax,dword 3 |
je zoom_minus |
cmp eax,dword 4 |
je scaling |
jmp still |
;--------------------------------------------------------------------- |
analyse_out_menu_5: |
; Tools |
mov eax,[menu_data_5.cursor_out] |
cmp eax,dword 1 |
je image_editor |
cmp eax,dword 2 |
je k_background |
cmp eax,dword 3 |
je slide_show.3 |
cmp eax,dword 4 |
je k_option |
jmp still |
;--------------------------------------------------------------------- |
analyse_out_menu_6: |
; Help |
cmp [menu_data_6.cursor_out],dword 1 |
je open_help |
cmp [menu_data_6.cursor_out],dword 2 |
je kabout |
jmp still |
;--------------------------------------------------------------------- |
check_scroll_event: |
; jmp capture_image_area |
mov eax,[mouse_scroll_data] |
test eax,eax |
jz capture_image_area ;still |
test ax,0x8000 |
jnz .decr |
shr eax,16 |
test ax,0x8000 |
jnz .decr_1 |
pusha |
mov eax,[scaling_mode] |
test eax,eax |
jnz .continue_1 |
call calculation_next_value_minus |
mov [calc_next_value_minus],1 |
.continue_1: |
popa |
mov eax,zoom_factors |
cmp [eax],dword zoom_factors.min |
jbe still |
xor ecx,ecx |
mov cx,[mouse_scroll_data.vertical] |
test ecx,ecx |
jnz @f |
mov cx,[mouse_scroll_data.horizontal] |
test ecx,ecx |
jz still |
@@: |
;---------------------------------------- |
cmp [calc_next_value_minus],1 |
jne @f |
mov [calc_next_value_minus],0 |
dec ecx |
jz zoom_plus.1 |
@@: |
mov ebx,4 |
@@: |
cmp [eax],dword zoom_factors.min |
jbe @f |
sub [eax],ebx |
dec ecx |
jnz @r |
jmp zoom_plus.1 |
@@: |
mov [eax],dword zoom_factors.min |
jmp zoom_plus.1 |
;---------------------------------------- |
.decr: |
xor ebx,ebx |
mov bx,[mouse_scroll_data.vertical] |
jmp @f |
.decr_1: |
xor ebx,ebx |
mov bx,[mouse_scroll_data.horizontal] |
@@: |
pusha |
mov eax,[scaling_mode] |
test eax,eax |
jnz .continue_2 |
call calculation_next_value_plus |
mov [calc_next_value_plus],1 |
.continue_2: |
popa |
mov eax,zoom_factors |
cmp [eax],dword zoom_factors.max |
jae still |
mov ecx,0xffff |
sub ecx,ebx |
inc ecx |
;--------------------------------------- |
cmp [calc_next_value_plus],1 |
jne @f |
mov [calc_next_value_plus],0 |
dec ecx |
jz zoom_plus.1 |
@@: |
mov ebx,4 |
@@: |
cmp [eax],dword zoom_factors.max |
jae @f |
add [eax],ebx |
dec ecx |
jnz @r |
jmp zoom_plus.1 |
@@: |
mov [eax],dword zoom_factors.max |
jmp zoom_plus.1 |
;--------------------------------------------------------------------- |
capture_image_area: |
cmp [scroll_bar_data_vertical.delta2],0 |
jne .no_capture |
cmp [scroll_bar_data_horizontal.delta2],0 |
jne .no_capture |
xor eax,eax |
mov [draw_scrollbar_counter],eax |
mov eax,[scroll_bar_data_vertical.max_area] |
cmp eax,[scroll_bar_data_vertical.cur_area] |
jbe @f |
inc [draw_scrollbar_counter] |
@@: |
mov eax,[scroll_bar_data_horizontal.max_area] |
cmp eax,[scroll_bar_data_horizontal.cur_area] |
jbe @f |
inc [draw_scrollbar_counter] |
@@: |
cmp [draw_scrollbar_counter],0 |
je still |
mov eax,[mouse_position] |
xor ebx,ebx |
mov bx,ax ; EBX mouse y |
shr eax,16 ; EAX mouse x |
mov ecx,[image_start_coordinates] |
xor edx,edx |
mov dx,cx ; EDX start y |
shr ecx,16 ; ECX start x |
cmp ax,cx |
jb still ; min x |
cmp bx,dx |
jb still ; min y |
add cx,[wa_width_2] |
cmp ax,cx |
ja still ; max x |
add dx,[wa_high_2] |
cmp bx,dx |
ja still ; max y |
mov ecx,[mouse_keys] |
test ecx,1b ; left button |
jz .no_capture ;still |
mov ecx,[mouse_keys_old] |
test ecx,1b ; left button old |
jz .no_capture ;still |
mov [capture_image_area_flag],1 |
mov ecx,[mouse_position_old] |
xor edx,edx |
mov dx,cx ; EDX mouse y old |
shr ecx,16 ; ECX mouse x old |
cmp eax,ecx |
je .y |
ja @f |
sub ecx,eax |
add [scroll_bar_data_horizontal.position],ecx |
jmp .y |
@@: |
sub eax,ecx |
cmp eax,[scroll_bar_data_horizontal.position] |
jb @f |
xor eax,eax |
mov [scroll_bar_data_horizontal.position],eax |
jmp .y |
@@: |
sub [scroll_bar_data_horizontal.position],eax |
.y: |
cmp ebx,edx |
je .draw |
ja @f |
sub edx,ebx |
add [scroll_bar_data_vertical.position],edx |
jmp .draw |
@@: |
sub ebx,edx |
cmp ebx,[scroll_bar_data_vertical.position] |
jb @f |
xor eax,eax |
mov [scroll_bar_data_vertical.position],eax |
jmp .draw |
@@: |
sub [scroll_bar_data_vertical.position],ebx |
.draw: |
call drawimage |
call draw_scrollbars |
jmp still |
.no_capture: |
mov [capture_image_area_flag],0 |
.end: |
jmp still |
;--------------------------------------------------------------------- |
/programs/media/zsea/plugins/bmp/build.bat |
---|
0,0 → 1,3 |
@fasm -m 16384 cnv_bmp.asm cnv_bmp.obj |
@kpack cnv_bmp.obj |
@pause |
/programs/media/zsea/plugins/bmp/build.sh |
---|
0,0 → 1,10 |
#!/bin/bash |
# This script does for Linux the same as build.bat for DOS, |
# it compiles the current KolibriOS applications |
fasm -m 16384 cnv_bmp.asm cnv_bmp.obj |
kpack cnv_bmp.obj |
exit 0 |
/programs/media/zsea/plugins/bmp/cnv_bmp.asm |
---|
0,0 → 1,660 |
;***************************************************************************** |
; BMP to RAW convert plugin - for zSea image viewer |
; Copyright (c) 2008-2011, Marat Zakiyanov aka Mario79, aka Mario |
; All rights reserved. |
; |
; Redistribution and use in source and binary forms, with or without |
; modification, are permitted provided that the following conditions are met: |
; * Redistributions of source code must retain the above copyright |
; notice, this list of conditions and the following disclaimer. |
; * Redistributions in binary form must reproduce the above copyright |
; notice, this list of conditions and the following disclaimer in the |
; documentation and/or other materials provided with the distribution. |
; * Neither the name of the <organization> nor the |
; names of its contributors may be used to endorse or promote products |
; derived from this software without specific prior written permission. |
; |
; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY |
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY |
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
;***************************************************************************** |
format MS COFF |
public EXPORTS |
section '.flat' code readable align 16 |
;include 'macros.inc' |
include '../../../../macros.inc' |
;--------------------------------------------------------------------- |
START: |
pushad |
mov eax,dword [esp+36] |
call .check_header |
je @f |
.no_bmp_file: |
xor eax,eax |
mov [raw_area],eax |
inc eax ; data corrupt eax = 1 |
jmp .ret |
.check_header: |
mov [pointer],eax |
mov eax,[eax] |
mov [image_file],eax |
cmp [eax],word 'BM' |
ret |
;--------------------------------------------------------------------- |
@@: |
mov [MinusHeight],byte 0 |
mov edx,[eax+22] |
test edx,0x80000000 |
jz @f |
neg edx |
mov [eax+22],edx |
mov [MinusHeight],byte 1 |
@@: |
xor edx,edx |
mov dx,[eax+28] ; color resolution 1,4,8,16,24,32 bits |
; mov [ebx+16],edx ; store resolution BMP |
mov [resolution],edx |
mov ecx,[eax+30] |
mov [compression],ecx |
;--------------------------------------------------------------------- |
mov ecx,[eax+18] ; width BMP |
imul ecx,edx ;[resolution] |
mov edi,ecx |
shr ecx,3 |
test edi,7 |
jz @f |
inc ecx |
@@: |
imul ecx,[eax+22] ; size of pixels data area |
;--------------------------------------------------------------------- |
cmp edx,16 |
jae .get_memory ; no palette |
mov eax,4 |
xchg cl,dl |
shl eax,cl |
xchg cl,dl |
add ecx,eax ; palette size |
;--------------------------------------------------------------------- |
.get_memory: |
add ecx,44 ; header |
mcall 68,12 |
cmp eax,0 |
jne @f |
xor eax,eax |
mov [raw_area],eax |
mov eax,2 ; not enough memory |
jmp .ret |
@@: |
mov [raw_area],eax |
;--------------------------------------------------------------------- |
mov edi,eax |
xor eax,eax |
shr ecx,2 |
cld |
rep stosd ; clear memory |
;--------------------------------------------------------------------- |
; Create RAW header |
;--------------------------------------------------------------------- |
mov eax,[raw_area] |
mov [eax],dword 'RAW ' |
mov ebx,[image_file] |
;--------------------------------------------------------------------- |
mov ecx,[ebx+18] ; width BMP |
mov [eax+4],ecx ; width RAW |
;--------------------------------------------------------------------- |
mov ecx,[ebx+22] ; high BMP |
mov [eax+8],ecx ; high RAW |
;--------------------------------------------------------------------- |
mov ecx,[resolution] ; color resolution BMP |
mov [eax+12],ecx ; color resolution RAW |
;--------------------------------------------------------------------- |
mov ecx,[resolution] |
cmp ecx,16 |
jb .1 |
push eax |
mov eax,ecx |
mov ecx,3 |
xor edx,edx |
div ecx |
cmp eax,8 |
jbe @f |
mov eax,8 |
@@: |
mov ecx,eax |
pop eax |
.1: |
mov [eax+16],cx ; channel color resolution RAW |
;--------------------------------------------------------------------- |
mov ecx,[resolution] |
cmp ecx,16 |
jae @f |
mov [eax+18],word 1 ; channels amount RAW |
jmp .2 |
@@: |
mov [eax+18],word 3 ; channels amount RAW |
.2: |
;--------------------------------------------------------------------- |
xor edx,edx |
cmp ecx,16 |
jae @f |
add edx,44 |
@@: |
mov [eax+20],edx ; palette pointer (offset from file start) |
;--------------------------------------------------------------------- |
mov ecx,[resolution] |
cmp ecx,16 |
jae @f |
mov ecx,[resolution] |
push eax |
mov eax,1 |
shl eax,cl |
mov ecx,eax |
pop eax |
shl ecx,2 |
jmp .3 |
@@: |
xor ecx,ecx |
.3: |
mov [eax+24],ecx ; palette area size |
;--------------------------------------------------------------------- |
add ecx,dword 44 |
mov [eax+28],ecx ; pixels pointer (offset from file start) |
;--------------------------------------------------------------------- |
mov ecx,[ebx+18] ; width BMP |
imul ecx,[resolution] |
mov edi,ecx |
shr ecx,3 |
test edi,7 |
jz @f |
inc ecx |
@@: |
imul ecx,[ebx+22] ; high BMP |
mov [eax+32],ecx ; pixels area size |
;--------------------------------------------------------------------- |
xor ecx,ecx ; Stub!!! |
mov [eax+36],ecx ; Transparency pointer (offset from file start) |
mov [eax+40],ecx ; Transparency area size |
;--------------------------------------------------------------------- |
; Finish create RAW header |
;--------------------------------------------------------------------- |
; mov ebx,[pointer] |
; mov [ebx+4],eax ; store [soi] pointer of image area |
; mov ecx,eax |
.convert: |
cmp [resolution],16 |
jae .no_palette |
; mov [ebx+24],eax |
; mov edi,eax |
mov edi,[raw_area] |
mov edi,[edi+20] ; palette pointer (offset from file start) |
add edi,[raw_area] |
mov esi,[image_file] |
add esi,54 |
mov ecx,[resolution] |
mov eax,1 |
shl eax,cl |
mov ecx,eax |
rep movsd |
; mov [ebx+4],edi ; store [soi] pointer of image area |
.no_palette: |
mov ecx,[raw_area] |
mov ecx,[ecx+28] ; pixels pointer (offset from file start) |
add ecx,[raw_area] |
;--------------------------------------------------------------------- |
mov eax,[image_file] |
mov ebp,[eax+18] ; width BMP |
; mov [ebx+8],ebp ; store width |
imul ebp,[resolution] |
mov edi,ebp |
shr ebp,3 ; ebp = size of output scanline |
test edi,7 |
jz @f |
inc ebp |
@@: |
mov eax,[eax+22] ; high BMP |
; mov [ebx+12],eax ; store high |
dec eax |
mul ebp |
add eax,ecx |
mov edi,ecx |
mov bl,[MinusHeight] |
test bl,bl |
jnz @f |
mov edi,eax ; edi points to last scanline |
@@: |
mov esi,[image_file] |
add esi,[esi+10] ; start of pixels data |
mov ebx,[image_file] |
mov edx,[ebx+22] ; high BMP |
add ebx,54 |
lea eax,[ebp*2] |
mov [delta],eax |
test edx,edx |
jz .ret |
jns @f |
neg edx |
and [delta], 0 |
mov edi,ecx |
@@: |
;--------------------------------------------------------------------- |
cmp [compression],3 |
je .BI_BITFIELDS ; @f |
cmp [compression],2 |
je RLE4 |
cmp [compression],1 |
je RLE8 |
cmp [compression],0 |
je @f |
jmp .no_bmp_file |
;--------------------------------------------------------------------- |
@@: |
cmp [resolution],16 |
jne .continue |
mov ebx,[raw_area] |
mov [ebx+12],dword 15 |
jmp .continue |
;--------------------------------------------------------------------- |
.BI_BITFIELDS: |
cmp [resolution],32 |
je .32 |
cmp [resolution],16 |
jne .continue |
mov ebx,[raw_area] |
mov eax,[image_file] |
cmp [eax+54],dword 0x7C00 |
jne @f |
mov [ebx+12],dword 15 |
jmp .continue |
;--------------------------------------------------------------------- |
@@: |
cmp [eax+54],dword 0xF800 |
jne @f |
mov [ebx+12],dword 16 |
jmp .continue |
;--------------------------------------------------------------------- |
@@: |
cmp [eax+54],dword 0xF00 |
jne .no_bmp_file ; @f |
mov [ebx+12],dword 15 |
@@: |
mov ebx,ebp |
neg ebx |
and ebx,3 |
mov [aligner],ebx |
shr ebp,1 |
mov cl,[MinusHeight] |
test cl,cl |
jnz .start_16_1 |
align 4 |
.start_16: |
mov ecx,ebp |
call .process_16b_x4r4g4b4 |
sub edi,[delta] |
add esi,[aligner] |
dec edx |
jnz .start_16 |
jmp .ret_ok |
;--------------------------------------------------------------------- |
.process_16b_x4r4g4b4: |
cld |
@@: |
lodsw |
xor ebx,ebx |
mov bx,ax |
xor eax,eax |
ror ebx,8 |
and bl,0xf |
mov al,bl |
shl eax,6 |
rol ebx,4 |
and bx,0xf |
shl bl,1 |
add ax,bx |
shl eax,5 |
rol ebx,4 |
and bx,0xf |
shl bl,1 |
add ax,bx |
stosw |
dec ecx |
jnz @r |
ret |
;--------------------------------------------------------------------- |
.start_16_1: ;negative value of Height |
mov ecx,ebp |
call .process_16b_x4r4g4b4 |
add esi,[aligner] |
dec edx |
jnz .start_16_1 |
jmp .ret_ok |
;--------------------------------------------------------------------- |
.32: |
mov eax,[image_file] |
cmp [eax+54],dword 0xFF000000 |
jne .no_bmp_file |
shr ebp,2 |
mov al,[MinusHeight] |
test al,al |
jnz .start_32_1 |
align 4 |
.start_32: |
mov ecx,ebp |
@@: |
cld |
lodsd |
shr eax,8 |
stosd |
dec ecx |
jnz @r |
sub edi,[delta] |
dec edx |
jnz .start_32 |
jmp .ret_ok |
;--------------------------------------------------------------------- |
.start_32_1: ;negative value of Height |
mov ecx,ebp |
imul ecx,edx |
@@: |
cld |
lodsd |
shr eax,8 |
stosd |
dec ecx |
jnz @r |
jmp .ret_ok |
;--------------------------------------------------------------------- |
.continue: |
mov eax,ebp |
neg eax |
and eax,3 |
mov cl,[MinusHeight] |
test cl,cl |
jz .start_24 |
cld |
align 4 |
@@: ;negative value of Height |
mov ecx,ebp |
rep movsb |
add esi,eax |
dec edx |
jnz @r |
jmp .ret_ok |
;--------------------------------------------------------------------- |
align 4 |
.start_24: |
@@: |
mov ecx,ebp |
rep movsb |
sub edi,[delta] |
add esi,eax |
dec edx |
jnz .start_24 ; @r |
.ret_ok: |
mov eax,0 ; convert OK |
.ret: |
mov ebx,[pointer] |
mov [ebx+8],eax ; store return code |
mov eax,[raw_area] |
mov [ebx+4],eax ; store RAW pointer |
popad |
ret 4 |
;--------------------------------------------------------------------- |
RLE4: |
cmp [resolution],4 |
jne START.no_bmp_file |
xor ebx,ebx |
xor edx,edx |
align 4 |
.start: |
cld |
lodsb |
cmp al,0 |
jnz .Encoded_Mode |
cld |
lodsb |
cmp al,0 |
jz .end_line |
cmp al,1 |
jz START.ret_ok ; .end_bitmap |
cmp al,2 |
jz .Delta |
.Absolute_Mode: |
xor ecx,ecx |
mov cl,al |
add ebx,ecx |
cmp dl,0 |
je @f |
mov dh,[esi] |
shr dh,4 |
mov dl,[edi-1] |
and dl,11110000b |
add dl,dh |
mov [edi-1],dl |
dec ecx |
xor edx,edx |
mov dh,1 |
@@: |
test cl,1b |
jz @f |
inc ecx |
inc edx |
@@: |
shr ecx,1 |
cmp dh,1 |
je .1 |
mov eax,ecx |
cld |
rep movsb |
test eax,1b |
jz @f |
inc esi |
@@: |
jmp .start |
;--------------------------------------------------------------------- |
.1: |
mov dh,cl |
@@: |
cld |
lodsb |
mov ah,[esi] |
shl al,4 |
shr ah,4 |
add al,ah |
cld |
stosb |
dec ecx |
jnz @r |
test dh,1b |
jz @f |
inc esi |
@@: |
xor dh,dh |
jmp .start |
;--------------------------------------------------------------------- |
.Encoded_Mode: |
xor ecx,ecx |
mov cl,al |
add ebx,ecx |
cld |
lodsb |
cmp dl,0 |
je @f |
rol al,4 |
mov dh,al |
and dh,00001111b |
mov dl,[edi-1] |
and dl,11110000b |
add dl,dh |
mov [edi-1],dl |
dec ecx |
xor edx,edx |
@@: |
test cl,1b |
jz @f |
inc ecx |
inc edx |
@@: |
shr ecx,1 |
cld |
rep stosb |
cmp dl,0 |
je @f |
mov al,[edi-1] |
and al,11110000b |
mov [edi-1],al |
@@: |
jmp .start |
;--------------------------------------------------------------------- |
.Delta: |
xor eax,eax |
cld |
lodsb |
add ebx,eax |
cmp dl,0 |
je @f |
dec eax |
xor edx,edx |
@@: |
test al,1b |
jz @f |
inc eax |
inc edx |
@@: |
shr eax,1 |
add edi,eax |
cld |
lodsb |
imul eax,ebp |
sub edi,eax |
jmp .start |
;--------------------------------------------------------------------- |
.end_line: |
mov eax,ebp |
test ebx,1b |
jz @f |
inc ebx |
@@: |
shr ebx,1 |
sub eax,ebx |
add edi,eax |
sub edi,[delta] |
xor ebx,ebx |
xor edx,edx |
jmp .start |
;--------------------------------------------------------------------- |
RLE8: |
cmp [resolution],8 |
jne START.no_bmp_file |
xor ebx,ebx |
align 4 |
.start: |
cld |
lodsb |
cmp al,0 |
jnz .Encoded_Mode |
cld |
lodsb |
cmp al,0 |
jz .end_line |
cmp al,1 |
jz START.ret_ok ; .end_bitmap |
cmp al,2 |
jz .Delta |
.Absolute_Mode: |
xor ecx,ecx |
mov cl,al |
add ebx,ecx |
mov eax,ecx |
cld |
rep movsb |
test eax,1b |
jz @f |
inc esi |
@@: |
jmp .start |
;--------------------------------------------------------------------- |
.Encoded_Mode: |
xor ecx,ecx |
mov cl,al |
add ebx,ecx |
cld |
lodsb |
rep stosb |
jmp .start |
;--------------------------------------------------------------------- |
.Delta: |
xor eax,eax |
cld |
lodsb |
add edi,eax |
add ebx,eax |
cld |
lodsb |
imul eax,ebp |
sub edi,eax |
jmp .start |
;--------------------------------------------------------------------- |
.end_line: |
mov eax,ebp |
sub eax,ebx |
add edi,eax |
xor ebx,ebx |
sub edi,[delta] |
jmp .start |
;--------------------------------------------------------------------- |
Check_Header: |
pushad |
mov eax,dword [esp+36] |
call START.check_header |
jne START.no_bmp_file |
popad |
ret 4 |
;--------------------------------------------------------------------- |
Associations: |
dd Associations.end - Associations |
db 'BMP',0 |
.end: |
db 0 |
;--------------------------------------------------------------------- |
align 16 |
EXPORTS: |
dd szStart, START |
dd szVersion, 0x00010002 |
dd szCheck, Check_Header |
dd szAssoc, Associations |
dd 0 |
pointer dd 0 |
image_file dd 0 |
delta dd 0 |
aligner dd 0 |
resolution dd 0 |
compression dd 0 |
raw_area dd 0 |
MinusHeight db 0 |
szStart db 'START',0 |
szVersion db 'version',0 |
szCheck db 'Check_Header',0 |
szAssoc db 'Associations',0 |
;--------------------------------------------------------------------- |
/programs/media/zsea/plugins/bmp |
---|
Property changes: |
Added: tsvn:logminsize |
+5 |
\ No newline at end of property |
/programs/media/zsea/plugins/convert/build.bat |
---|
0,0 → 1,3 |
@fasm -m 16384 convert.asm convert.obj |
@kpack convert.obj |
@pause |
/programs/media/zsea/plugins/convert/build.sh |
---|
0,0 → 1,10 |
#!/bin/bash |
# This script does for Linux the same as build.bat for DOS, |
# it compiles the current KolibriOS applications |
fasm -m 16384 convert.asm convert.obj |
kpack convert.obj |
exit 0 |
/programs/media/zsea/plugins/convert/convert.asm |
---|
0,0 → 1,496 |
;***************************************************************************** |
; RAW to RAW convert plugin - for zSea image viewer |
; Copyright (c) 2008-2011, Marat Zakiyanov aka Mario79, aka Mario |
; All rights reserved. |
; |
; Redistribution and use in source and binary forms, with or without |
; modification, are permitted provided that the following conditions are met: |
; * Redistributions of source code must retain the above copyright |
; notice, this list of conditions and the following disclaimer. |
; * Redistributions in binary form must reproduce the above copyright |
; notice, this list of conditions and the following disclaimer in the |
; documentation and/or other materials provided with the distribution. |
; * Neither the name of the <organization> nor the |
; names of its contributors may be used to endorse or promote products |
; derived from this software without specific prior written permission. |
; |
; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY |
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY |
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
;***************************************************************************** |
; Convert: |
; 16b in 8b |
; 1b,2b,3b in 8b |
format MS COFF |
public EXPORTS |
section '.flat' code readable align 16 |
;include 'macros.inc' |
include '../../../../macros.inc' |
;--------------------------------------------------------------------- |
START: |
pushad |
mov [pointer],eax |
mov eax,[eax+4] |
mov [image_file],eax |
mov esi,[eax+28] |
add esi,eax |
mov edi,esi |
mov ecx,[eax+32] |
; xor ebx,ebx |
; mov [raw_area],ebx |
; mov ebx,[pointer] |
; movzx eax,word [eax+18] |
; mov [ebx+24],eax |
; jmp .ret_ok |
cmp [eax+16],word 16 |
je .16b |
cmp [eax+12],dword 1 |
je .1b |
cmp [eax+12],dword 2 |
je .2b |
cmp [eax+12],dword 4 |
je .4b |
;--------------------------------------------------------------------- |
.ret_ok: |
; mov ebx,[pointer] |
; mov eax,[raw_area] |
; mov [ebx+20],eax ; store RAW pointer |
; mov [ebx+24],ecx |
mov ebx,[image_file] |
cmp [ebx+18],word 2 |
jne @f |
mov eax,[ebx+12] |
shr eax,1 |
mov [ebx+12],eax |
@@: |
popad |
ret |
;--------------------------------------------------------------------- |
.less_8b: |
mov edx,[image_file] |
mov ecx,[area_size] |
add ecx,[edx+28] |
mcall 68,20 |
mov [image_file],eax |
mov ecx,[area_size] |
mov eax,ecx |
shr ecx,2 |
test eax,3 |
jz @f |
inc ecx |
@@: |
mov esi,[raw_area] |
mov edi,[image_file] |
add edi,[edi+28] |
cld |
rep movsd |
mov ecx,[raw_area] |
mcall 68,13 |
mov eax,[image_file] |
mov ebx,[pointer] |
mov [ebx+4],eax |
popad |
ret |
;--------------------------------------------------------------------- |
.16b: |
cmp [eax+18],word 3 |
je @f ;.convert_16_in_8 |
cmp [eax+18],word 4 |
jne .16b_1 |
@@: |
xor ebx,ebx |
mov bx,[eax+18] |
xchg eax,ecx |
xor edx,edx |
div ebx |
xchg ecx,eax |
shr ecx,1 |
mov [eax+16],word 8 |
mov ebx,[eax+12] |
shr ebx,1 |
mov [eax+12],ebx |
mov ebx,eax |
; jmp .ret_ok |
.convert_16_in_8: ; converting 16 bit sample to 8 bit |
cld |
lodsw |
mov al,ah |
stosb |
lodsw |
mov al,ah |
stosb |
lodsw |
mov al,ah |
stosb |
cmp [ebx+18],word 4 |
jne @f |
lodsw |
mov al,ah |
stosb |
@@: |
dec ecx |
jnz .convert_16_in_8 |
jmp .16b_end |
;--------------------------------------------------------------------- |
.16b_1: |
cmp [eax+18],word 1 |
je @f ;.convert_16_in_8_1 |
cmp [eax+18],word 2 |
jne .16b_end |
@@: |
shr ecx,1 |
mov [eax+16],word 8 |
mov ebx,[eax+12] |
shr ebx,1 |
mov [eax+12],ebx |
.convert_16_in_8_1: |
cld |
lodsw |
; shr ax,8 |
; mov al,ah |
stosb |
dec ecx |
jnz .convert_16_in_8_1 |
;--------------------------------------------------------------------- |
.16b_end: |
xor eax,eax |
mov [raw_area],eax |
jmp .ret_ok |
;--------------------------------------------------------------------- |
.4b: |
call .get_memory |
mov edx,ebx |
inc ebx |
shr ebx,1 |
.4b_1: |
push ebx edi |
@@: |
cld |
lodsb |
shl eax,8 |
mov al,ah |
and ah,0xf |
shr al,4 |
stosw |
dec ebx |
jnz @b |
pop edi ebx |
add edi,edx |
dec ecx |
jnz .4b_1 |
jmp .less_8b ;.ret_ok |
;--------------------------------------------------------------------- |
.2b: |
call .get_memory |
; jmp .ret_ok |
; shr ecx,1 |
mov edx,ebx |
mov eax,ebx |
shr ebx,2 |
test eax,3 |
jz @f |
inc ebx |
@@: |
mov ebp,ebx |
.2b_1: |
push ebp edi |
@@: |
cld |
lodsb |
mov bl,al |
and al,11b |
shl ax,8 |
mov al,bl |
shr al,2 |
and al,11b |
shl eax,8 |
mov al,bl |
shr al,4 |
and al,11b |
shl eax,8 |
mov al,bl |
shr al,6 |
and al,11b |
stosd |
dec ebp |
jnz @b |
pop edi ebp |
add edi,edx |
dec ecx |
jnz .2b_1 |
jmp .less_8b ;.ret_ok |
;--------------------------------------------------------------------- |
.1b: |
call .get_memory |
mov edx,ebx |
mov eax,ebx |
shr ebx,3 |
test eax,7 |
jz @f |
inc ebx |
@@: |
mov ebp,ebx |
.1b_1: |
push ebp edi |
@@: |
cld |
lodsb |
mov bl,al |
shr al,4 |
and al,1b |
shl ax,8 |
mov al,bl |
shr al,5 |
and al,1b |
shl eax,8 |
mov al,bl |
shr al,6 |
and al,1b |
shl eax,8 |
mov al,bl |
shr al,7 |
; and al,1b |
; shl eax,8 |
stosd |
mov al,bl |
and al,1b |
shl ax,8 |
mov al,bl |
shr al,1 |
and al,1b |
shl eax,8 |
mov al,bl |
shr al,2 |
and al,1b |
shl eax,8 |
mov al,bl |
shr al,3 |
and al,1b |
stosd |
dec ebp |
jnz @b |
pop edi ebp |
add edi,edx |
dec ecx |
jnz .1b_1 |
jmp .less_8b ;.ret_ok |
;--------------------------------------------------------------------- |
.get_memory: |
mov ebx,dword 8 |
mov [eax+16],bx |
mov [eax+12],ebx |
; mov esi,[eax+28] |
; add esi,eax |
; push ecx |
mov ecx,[eax+4] |
imul ecx,[eax+8] |
push eax |
mov [area_size],ecx |
mcall 68,12 |
; pop ecx |
mov [raw_area],eax |
mov edi,eax |
pop eax |
mov ebx,[eax+4] |
mov ecx,[eax+8] |
ret |
;--------------------------------------------------------------------- |
Convert24b: |
pushad |
mov [pointer],eax |
mov eax,[eax+4] |
mov [image_file],eax |
mov esi,[eax+28] |
add esi,eax |
mov ebp,[eax+20] |
add ebp,eax |
mov ecx,[eax+4] |
imul ecx,[eax+8] |
push eax ecx |
lea ecx,[ecx*3] |
mcall 68,12 |
mov [raw_area],eax |
mov edi,eax |
pop ecx eax |
cmp [eax+12],dword 32 |
je .32b |
cmp [eax+12],dword 16 |
je .16b |
cmp [eax+12],dword 15 |
je .15b |
cmp [eax+12],dword 8 |
je .8b |
.ret_ok: |
mov ebx,[pointer] |
mov eax,[raw_area] |
mov [ebx+20],eax ; store RAW pointer |
popad |
ret |
;--------------------------------------------------------------------- |
.32b: |
cld |
lodsd |
stosw |
shr eax,16 |
stosb |
dec ecx |
jnz .32b |
jmp .ret_ok |
;--------------------------------------------------------------------- |
.16b: |
cld |
lodsw |
xor ebx,ebx |
ror ax,11 |
mov bl,al |
and bl,11111b |
shl bl,3 |
shl ebx,8 |
rol ax,6 |
mov bl,al |
and bl,111111b |
shl bl,2 |
shl ebx,8 |
rol ax,5 |
mov bl,al |
and bl,11111b |
shl bl,3 |
mov eax,ebx |
cld |
stosw |
shr eax,16 |
stosb |
dec ecx |
jnz .16b |
jmp .ret_ok |
;--------------------------------------------------------------------- |
.15b: |
cld |
lodsw |
xor ebx,ebx |
ror ax,10 |
mov bl,al |
and bl,11111b |
shl bl,3 |
shl ebx,8 |
rol ax,5 |
mov bl,al |
and bl,11111b |
shl bl,3 |
shl ebx,8 |
rol ax,5 |
mov bl,al |
and bl,11111b |
shl bl,3 |
mov eax,ebx |
cld |
stosw |
shr eax,16 |
stosb |
dec ecx |
jnz .15b |
jmp .ret_ok |
;--------------------------------------------------------------------- |
.8b: |
xor eax,eax |
cld |
lodsb |
shl eax,2 |
mov eax,[eax+ebp] |
cld |
stosw |
shr eax,16 |
stosb |
dec ecx |
jnz .8b |
jmp .ret_ok |
;--------------------------------------------------------------------- |
align 16 |
EXPORTS: |
dd szStart, START |
dd szVersion, 0x00010001 |
dd szConv_24b, Convert24b |
dd 0 |
szStart db 'START',0 |
szVersion db 'version',0 |
szConv_24b db 'Convert24b',0 |
pointer dd 0 |
image_file dd 0 |
;delta dd 0 |
;resolution dd 0 |
;compression dd 0 |
raw_area dd 0 |
area_size dd 0 |
/programs/media/zsea/plugins/convert |
---|
Property changes: |
Added: tsvn:logminsize |
+5 |
\ No newline at end of property |
/programs/media/zsea/plugins/gif/build.bat |
---|
0,0 → 1,3 |
@fasm -m 16384 cnv_gif.asm cnv_gif.obj |
@kpack cnv_gif.obj |
@pause |
/programs/media/zsea/plugins/gif/build.sh |
---|
0,0 → 1,10 |
#!/bin/bash |
# This script does for Linux the same as build.bat for DOS, |
# it compiles the current KolibriOS applications |
fasm -m 16384 cnv_gif.asm cnv_gif.obj |
kpack cnv_gif.obj |
exit 0 |
/programs/media/zsea/plugins/gif/cnv_gif.asm |
---|
0,0 → 1,534 |
;***************************************************************************** |
; GIF to RAW1 convert plugin - for zSea image viewer |
; Copyright (c) 2009, Evgeny Grechnikov aka Diamond |
; All rights reserved. |
; |
; Redistribution and use in source and binary forms, with or without |
; modification, are permitted provided that the following conditions are met: |
; * Redistributions of source code must retain the above copyright |
; notice, this list of conditions and the following disclaimer. |
; * Redistributions in binary form must reproduce the above copyright |
; notice, this list of conditions and the following disclaimer in the |
; documentation and/or other materials provided with the distribution. |
; * Neither the name of the <organization> nor the |
; names of its contributors may be used to endorse or promote products |
; derived from this software without specific prior written permission. |
; |
; THIS SOFTWARE IS PROVIDED BY Evgeny Grechnikov ''AS IS'' AND ANY |
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY |
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
;***************************************************************************** |
; Based on gif_lite.inc (c) Ivuskin Andrey aka Willow and Diamond 2004-2007 |
;***************************************************************************** |
; Some small changes (c) 2011 Marat Zakiyanov aka Mario79, aka Mario |
;***************************************************************************** |
format MS COFF |
public EXPORTS |
section '.flat' code readable align 16 |
START: |
pushad |
mov eax,dword [esp+36] |
mov esi, [eax] ; esi -> GIF data |
mov ebp, [eax+12] ; ebp = file size |
xor ebx, ebx ; ebx -> list of images, not allocated yet |
call check_header_1 |
jz ReadGIF |
ReadGIF.end: |
; general exit from the function |
xor eax, eax |
cmp ebx, eax |
jz .bad |
cmp dword [ebx+4], eax |
jnz ReadGIF.ret |
mov ecx, ebx |
push 68 |
pop eax |
push 13 |
pop ebx |
int 40h |
xor ebx, ebx |
.bad: |
inc eax ; bad image |
ReadGIF.ret: |
mov ecx, [esp+28] |
mov [ecx+4], ebx ; save RAW data ptr |
mov [ecx+8], eax ; save result |
popad |
ret 4 |
ReadGIF.animated.ret: |
mov ebx, [ReadGIF.gifList] |
jmp ReadGIF.ret |
_null fix 0x1000 |
ReadGIF: |
; allocate one page for list of images |
mov ecx, 0x1000 |
push 68 |
pop eax |
push 12 |
pop ebx |
int 40h |
xchg eax, ebx |
test ebx, ebx |
jnz @f |
mov al, 2 ; no memory |
jmp .ret |
@@: |
mov dword[ebx],'RAW1' |
xor eax,eax |
mov [.globalColor],eax |
mov [.globalColorSize],eax |
mov [.curImageIndex],eax |
sub ebp,0xd |
jb .end |
movzx eax,word[esi+6] |
mov [ebx+8],eax |
movzx eax,word[esi+8] |
mov [ebx+12],eax |
mov cl,[esi+0xa] |
add esi,0xd |
test cl,cl |
jns .nextblock |
mov [.globalColor],esi |
push ebx |
call .Gif_skipmap |
mov [.globalColorSize],ebx |
pop ebx |
jb .end |
.nextblock: |
dec ebp |
js .end |
cmp byte[esi],0x21 |
jne .noextblock |
inc esi |
cmp byte[esi],0xf9 ; Graphic Control Ext |
jne .no_gc |
sub ebp,7 |
jc .end |
mov ecx,[ebx+4] |
shl ecx,4 |
add ecx,ebx |
mov eax,[esi+3] |
mov [ecx+16+12],ax |
; test byte[esi+2],1 |
; setnz byte[ecx+16+14] |
mov al,[esi+2] |
mov [ecx+16+14], al |
mov al,[esi+5] |
mov [ecx+16+15],al |
add esi,7 |
jmp .nextblock |
.no_gc: |
inc esi |
xor eax,eax |
.block_skip: |
dec ebp |
js .end |
lodsb |
add esi,eax |
sub ebp,eax |
jc .end2 |
test eax,eax |
jnz .block_skip |
jmp .nextblock |
.noextblock: |
cmp byte[esi],0x2c ; image beginning |
jne .end |
inc esi |
sub ebp,11 |
jc .end2 |
movzx ecx,word[esi+4] ; ecx = width |
jecxz .end2 |
mov [.width],ecx |
movzx eax,word[esi+6] ; eax = height |
test eax,eax |
jz .end2 |
push eax ecx |
imul ecx,eax |
cmp ecx,4000000h |
jb @f |
pop ecx eax |
.end2: |
jmp .end |
@@: |
push ebx |
push ecx |
add ecx,44+256*4 |
push 68 |
pop eax |
push 12 |
pop ebx |
int 0x40 |
pop ecx |
pop ebx |
test eax,eax |
jnz @f |
pop ecx ecx |
jmp .end2 |
@@: |
xchg eax,edi |
inc dword[ebx+4] |
mov [edi+32],ecx ; size of pixels area |
mov byte[edi+20],44 ; pointer to palette |
mov byte[edi+24+1],4 ; size of palette=256*4 |
mov dword[edi+28],44+256*4 ; pointer to RAW data |
pop ecx eax |
mov dword[edi], 'RAW ' ; signature |
mov dword[edi+4],ecx ; width |
mov dword[edi+8],eax ; height |
mov byte[edi+12],8 ; total pixel size |
mov byte[edi+16],8 ; 8 bits per component |
mov byte[edi+18],1 ; number of components |
mov eax,[ebx+4] |
shl eax,4 |
add eax,ebx |
mov [eax],edi |
movzx ecx,word[esi] |
mov [eax+4],ecx |
movzx ecx,word[esi+2] |
mov [eax+8],ecx |
mov eax,[edi+32] |
mov [.img_end],eax |
inc eax |
mov [.row_end],eax |
and [.pass],0 |
test byte[esi+8],40h |
jz @f |
mov ecx,[edi+4] |
mov [.row_end],ecx |
@@: |
mov cl,[esi+8] |
add esi,9 |
add edi,44 |
push edi |
test cl,cl |
js .uselocal |
push esi |
mov esi,[.globalColor] |
mov ecx,[.globalColorSize] |
call .swap_palette |
pop esi |
jmp .setPal |
.uselocal: |
push ebx |
call .Gif_skipmap |
jnc @f |
pop ebx |
pop edi |
jmp .end |
@@: |
sub esi,ebx |
mov ecx,ebx |
pop ebx |
call .swap_palette |
.setPal: |
movzx ecx,byte[esi] |
inc ecx |
mov [.codesize],ecx |
dec ecx |
inc esi |
mov edi,.gif_workarea |
xor eax,eax |
lodsb ; eax - block_count |
add eax,esi |
mov [.block_ofs],eax |
mov [.bit_count],8 |
mov eax,1 |
shl eax,cl |
mov [.CC],eax |
mov ecx,eax |
inc eax |
mov [.EOI],eax |
mov eax, _null shl 16 |
.filltable: |
stosd |
inc eax |
loop .filltable |
pop edi |
add edi,256*4 |
mov [.img_start],edi |
add [.img_end],edi |
add [.row_end],edi |
mov [.ebx],ebx |
.reinit: |
mov edx,[.EOI] |
inc edx |
push [.codesize] |
pop [.compsize] |
call .Gif_get_sym |
cmp eax,[.CC] |
je .reinit |
call .Gif_output |
.cycle: |
movzx ebx,ax |
call .Gif_get_sym |
cmp eax,edx |
jae .notintable |
cmp eax,[.CC] |
je .reinit |
cmp eax,[.EOI] |
je .unpend |
call .Gif_output |
.add: |
mov dword [.gif_workarea+edx*4],ebx |
cmp edx,0xFFF |
jae .cycle |
inc edx |
bsr ebx,edx |
cmp ebx,[.compsize] |
jne .noinc |
inc [.compsize] |
.noinc: |
jmp .cycle |
.notintable: |
push eax |
mov eax,ebx |
call .Gif_output |
push ebx |
movzx eax,bx |
call .Gif_output |
pop ebx eax |
jmp .add |
.unpend: |
mov ebx,[.ebx] |
add ebp,esi |
mov esi,[.block_ofs] |
sub ebp,esi |
jc .end2 |
xor eax,eax |
@@: |
dec ebp |
js .end2 |
lodsb |
test eax,eax |
jz @f |
sub ebp,eax |
jc .end2 |
add esi,eax |
jmp @b |
@@: |
test ebp,ebp |
jz .end2 |
cmp byte[esi],0x3b |
jz .end2 |
; next image |
mov ecx,[ebx+4] |
cmp cl,0xFF |
jnz .noresize |
mov edx,ebx |
inc ecx |
inc ecx |
shl ecx,4 |
push 68 |
pop eax |
push 20 |
pop ebx |
int 40h |
test eax,eax |
jnz @f |
mov ebx,edx |
jmp .end2 |
@@: |
xchg ebx,eax |
.noresize: |
jmp .nextblock |
.Gif_skipmap: |
; in: ecx - image descriptor, esi - pointer to colormap |
; out: edi - pointer to area after colormap |
and ecx,111b ; color map size |
mov ebx,3*2 |
shl ebx,cl |
add esi,ebx |
sub ebp,ebx |
ret |
.Gif_get_sym: |
mov ecx,[.compsize] |
push ecx |
xor eax,eax |
.shift: |
ror byte[esi],1 |
rcr eax,1 |
dec [.bit_count] |
jnz .loop1 |
inc esi |
cmp esi,[.block_ofs] |
jb .noblock |
push eax |
xor eax,eax |
dec ebp |
js .dataend |
lodsb |
test eax,eax |
jnz .nextbl |
mov eax,[.EOI] |
sub esi,2 |
add esp,8 |
jmp .exx |
.nextbl: |
add eax,esi |
mov [.block_ofs],eax |
pop eax |
.noblock: |
mov [.bit_count],8 |
.loop1: |
loop .shift |
pop ecx |
rol eax,cl |
.exx: |
xor ecx,ecx |
ret |
.dataend: |
pop eax eax |
mov ebx, [.ebx] |
jmp .end2 |
.Gif_output: |
push esi eax edx |
mov edx,.gif_workarea |
.next: |
push word[edx+eax*4] |
mov ax,word[edx+eax*4+2] |
inc ecx |
cmp ax,_null |
jnz .next |
shl ebx,16 |
mov bx,[esp] |
.loop2: |
pop ax |
stosb |
cmp edi,[.row_end] |
jb .norowend |
mov eax,[.width] |
push eax |
sub edi,eax |
add eax,eax |
cmp [.pass],3 |
jz @f |
add eax,eax |
cmp [.pass],2 |
jz @f |
add eax,eax |
@@: |
add edi,eax |
pop eax |
cmp edi,[.img_end] |
jb .nextrow |
mov edi,[.img_start] |
inc [.pass] |
add edi,eax |
cmp [.pass],3 |
jz @f |
add edi,eax |
cmp [.pass],2 |
jz @f |
add edi,eax |
add edi,eax |
@@: |
.nextrow: |
add eax,edi |
mov [.row_end],eax |
xor eax,eax |
.norowend: |
loop .loop2 |
pop edx eax esi |
ret |
.swap_palette: |
xor eax,eax |
@@: |
lodsb |
mov ah,al |
lodsb |
shl eax,8 |
lodsb |
stosd |
sub ecx,3 |
jnz @b |
ret |
;--------------------------------------------------------------------- |
check_header_1: |
and dword [eax+8], 0 |
cmp dword [eax+12], 6 |
jb .err |
push eax |
mov eax, [eax] |
cmp dword [eax], 'GIF8' |
jnz .errpop |
cmp byte [eax+5], 'a' |
jnz .errpop |
cmp byte [eax+4], '7' |
jz @f |
cmp byte [eax+4], '9' |
jnz .errpop |
@@: |
pop eax |
ret |
.errpop: |
pop eax |
.err: |
inc dword [eax+8] |
ret |
;--------------------------------------------------------------------- |
check_header: |
pushad |
mov eax,dword [esp+36] |
call check_header_1 |
popad |
ret 4 |
;--------------------------------------------------------------------- |
Associations: |
dd Associations.end - Associations |
db 'GIF',0 |
.end: |
db 0 |
;--------------------------------------------------------------------- |
align 4 |
EXPORTS: |
dd szStart, START |
dd szVersion, 0x00010002 |
dd szCheck, check_header |
dd szAssoc, Associations |
dd 0 |
szStart db 'START',0 |
szVersion db 'version',0 |
szCheck db 'Check_Header',0 |
szAssoc db 'Associations',0 |
section '.data' data readable writable align 16 |
ReadGIF.globalColor rd 1 |
ReadGIF.globalColorSize rd 1 |
ReadGIF.cur_info rd 1 ; image table pointer |
ReadGIF.codesize rd 1 |
ReadGIF.compsize rd 1 |
ReadGIF.bit_count rd 1 |
ReadGIF.CC rd 1 |
ReadGIF.EOI rd 1 |
ReadGIF.block_ofs rd 1 |
ReadGIF.row_end rd 1 |
ReadGIF.img_end rd 1 |
ReadGIF.img_start rd 1 |
ReadGIF.pass rd 1 |
ReadGIF.width rd 1 |
ReadGIF.ebx rd 1 |
ReadGIF.gifList rd 1 |
ReadGIF.curImageIndex rd 1 |
ReadGIF.gif_workarea rb 16*1024 |
/programs/media/zsea/plugins/gif |
---|
Property changes: |
Added: tsvn:logminsize |
+5 |
\ No newline at end of property |
/programs/media/zsea/plugins/jpeg/build.bat |
---|
0,0 → 1,3 |
@fasm -m 16384 cnv_jpeg.asm cnv_jpeg.obj |
@kpack cnv_jpeg.obj |
@pause |
/programs/media/zsea/plugins/jpeg/build.sh |
---|
0,0 → 1,10 |
#!/bin/bash |
# This script does for Linux the same as build.bat for DOS, |
# it compiles the current KolibriOS applications |
fasm -m 16384 cnv_jpeg.asm cnv_jpeg.obj |
kpack cnv_jpeg.obj |
exit 0 |
/programs/media/zsea/plugins/jpeg/cnv_jpeg.asm |
---|
0,0 → 1,2378 |
;***************************************************************************** |
; JPEG to RAW convert plugin - for zSea image viewer |
; Copyright (c) 2008, 2009, Evgeny Grechnikov aka Diamond |
; All rights reserved. |
; |
; Redistribution and use in source and binary forms, with or without |
; modification, are permitted provided that the following conditions are met: |
; * Redistributions of source code must retain the above copyright |
; notice, this list of conditions and the following disclaimer. |
; * Redistributions in binary form must reproduce the above copyright |
; notice, this list of conditions and the following disclaimer in the |
; documentation and/or other materials provided with the distribution. |
; * Neither the name of the <organization> nor the |
; names of its contributors may be used to endorse or promote products |
; derived from this software without specific prior written permission. |
; |
; THIS SOFTWARE IS PROVIDED BY Evgeny Grechnikov ''AS IS'' AND ANY |
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY |
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
;***************************************************************************** |
; Some small changes (c) 2011 Marat Zakiyanov aka Mario79, aka Mario |
;***************************************************************************** |
format MS COFF |
public EXPORTS |
section '.flat' code readable align 16 |
START: |
pushad |
finit |
mov eax,dword [esp+36] |
mov esi, [eax] ; esi -> JPEG data |
mov ebp, [eax+12] ; ebp = file size |
mov [_esp], esp |
; initialize constant tables, if not yet |
cmp [color_table_1+4], 0 |
jnz @f |
call initialize_color_table |
@@: |
xor ebx, ebx ; ebx -> RAW data, not allocated yet |
mov [dct_buffer], ebx |
mov [_ebx], ebx |
; check for SOI [Start-Of-Image] marker |
call get_marker |
jc .end |
cmp al, 0xD8 ; SOI? |
jz .soi_ok |
.end: |
; general exit from the function |
; for progressive mode: convert loaded DCT coefficients to image |
call handle_progressive |
; convert full-color images to RGB |
call convert_to_rgb |
xor eax, eax |
test ebx, ebx |
jnz @f |
inc eax ; ebx=0 => bad image |
@@: |
.ret: |
mov ecx, [esp+28] |
mov [ecx+4], ebx ; save RAW data ptr |
mov [ecx+8], eax ; save result |
popad |
ret 4 |
.soi_ok: |
mov [restart_interval], ebx |
mov [adobe_ycck], 0 |
; loop until start of frame (real data), parse markers |
.markers_loop: |
call get_marker |
jc .end |
; markers RSTn do not have parameters |
; N.B. They can not exist in this part of JPEG, but let's be liberal :) |
cmp al, 0xD0 |
jb @f |
cmp al, 0xD8 |
jb .markers_loop |
@@: |
cmp al, 0xD9 ; EOI? [invalid here] |
jz .end |
; ok, this is marker segment |
; first word is length of the segment |
cmp ebp, 2 |
jb .end |
xor edx, edx |
mov dl, [esi+1] |
mov dh, [esi] ; edx = marker length, al = marker value |
sub ebp, edx |
jb .end |
cmp al, 0xDB ; DQT? |
jz .dqt |
cmp al, 0xC4 ; DHT? |
jz .dht |
cmp al, 0xCC ; DAC? [ignored - no arithmetic coding] |
jz .next_marker |
cmp al, 0xDD ; DRI? |
jz .dri |
cmp al, 0xDA ; SOS? |
jz .sos |
cmp al, 0xC0 |
jb @f |
cmp al, 0xD0 |
jb .sofn |
@@: |
cmp al, 0xEE ; APP14? |
jz .app14 |
; unrecognized marker; let's skip it and hope for the best |
.next_marker: |
add esi, edx |
jmp .markers_loop |
.app14: |
; check for special Adobe marker |
cmp dx, 14 |
jb .next_marker |
cmp byte [esi+2], 'A' |
jnz .next_marker |
cmp dword [esi+3], 'dobe' |
jnz .next_marker |
cmp byte [esi+13], 2 |
setz [adobe_ycck] |
jmp .next_marker |
.dqt: |
; DQT marker found |
; length: 2 bytes for length field + 65 bytes per table |
sub edx, 2 |
jc .end |
lodsw |
.dqt_loop: |
test edx, edx |
jz .markers_loop |
sub edx, 1+64 |
jc .end |
lodsb |
; 8-bit DCT-based process shall not use a 16-bit precision quantization table. |
test al, 0xF0 |
jnz .end |
and eax, 3 |
mov [eax+quant_tables_defined], 1 |
shl eax, 8 |
lea edi, [eax+quant_tables] |
xor ecx, ecx |
@@: |
xor eax, eax |
lodsb |
push eax |
fild dword [esp] |
pop eax |
movzx eax, byte [zigzag+ecx] |
add eax, eax |
push eax |
and eax, 7*4 |
fmul dword [idct_pre_table+eax] |
pop eax |
push eax |
shr eax, 3 |
and eax, 7*4 |
fmul dword [idct_pre_table+eax] |
pop eax |
fstp dword [edi+eax] |
inc ecx |
cmp ecx, 64 |
jb @b |
jmp .dqt_loop |
.dri: |
; DRI marker found |
cmp edx, 4 ; length must be 4 |
jnz .end2 |
movzx eax, word [esi+2] |
xchg al, ah |
mov [restart_interval], eax |
jmp .next_marker |
.dht: |
; DHT marker found |
sub edx, 2 |
jc .end2 |
lodsw |
.dht_loop: |
test edx, edx |
jz .markers_loop |
sub edx, 17 |
jc .end2 |
; next Huffman table; find place for it |
lodsb |
mov edi, eax |
and eax, 0x10 |
and edi, 3 |
shr eax, 2 |
or edi, eax |
mov [dc_huffman_defined+edi], 1 |
; shl edi, 11 |
imul edi, max_hufftable_size |
add edi, dc_huffman ; edi -> destination table |
; get table size |
xor eax, eax |
push 16 |
pop ecx |
@@: |
add al, [esi] |
adc ah, 0 |
inc esi |
loop @b |
cmp ax, 0x100 |
ja .end2 |
sub edx, eax |
jc .end2 |
; construct Huffman tree |
push ebx edx |
; lea eax, [edi+256*8] |
; push eax |
; push 16 |
; mov edx, esi |
; @@: |
; cmp byte [edx-1], 0 |
; jnz @f |
; dec edx |
; dec dword [esp] |
; jmp @b |
; @@: |
; sub edx, [esp] |
; lea eax, [edi+8] |
; push 2 |
; pop ecx |
; .lenloop: |
; mov bl, byte [edx] |
; test bl, bl |
; jz .len1done |
; push eax |
; xor eax, eax |
; .len1loop: |
; dec ecx |
; js .dhterr |
; cmp edi, [esp+8] |
; jae .dhterr |
; lodsb |
; stosd |
; dec bl |
; jnz .len1loop |
; pop eax |
; .len1done: |
; jecxz .len2done |
; push ecx |
; .len2loop: |
; cmp eax, [esp+8] |
; jb @f |
; or eax, -1 |
; @@: |
; cmp edi, [esp+8] |
; jae .dhterr |
; stosd |
; add eax, 8 |
; jnb @f |
; or eax, -1 |
; @@: |
; loop .len2loop |
; pop ecx |
; .len2done: |
; add ecx, ecx |
; inc edx |
; dec dword [esp] |
; jnz .lenloop |
; pop eax |
; pop eax |
; sub eax, edi |
; shr eax, 2 |
; cmp eax, ecx |
; ja @f |
; mov ecx, eax |
; @@: |
; or eax, -1 |
; rep stosd |
; pop edx ebx |
; jmp .dht_loop |
; .dhterr: |
; ;pop eax eax eax edx ebx |
; add esp, 5*4 |
lea eax, [edi+256*2] |
push eax |
lea edx, [esi-16] |
mov ah, 1 |
mov ecx, 128 |
.dht_l1: |
movzx ebx, byte [edx] |
inc edx |
test ebx, ebx |
jz .dht_l3 |
.dht_l2: |
cmp edi, [esp] |
jae .dhterr1 |
lodsb |
xchg al, ah |
push ecx |
rep stosw |
pop ecx |
xchg al, ah |
dec ebx |
jnz .dht_l2 |
.dht_l3: |
inc ah |
shr ecx, 1 |
jnz .dht_l1 |
push edi |
mov edi, [esp+4] |
push edi |
mov eax, 0x00090100 |
mov cl, 8 |
.dht_l4: |
movzx ebx, byte [edx] |
inc edx |
test ebx, ebx |
jz .dht_l6 |
.dht_l5: |
cmp edi, [esp] |
jb @f |
mov edi, [esp+4] |
rol eax, 16 |
cmp edi, [esp+8] |
jae .dhterr2 |
stosw |
inc ah |
mov [esp+4], edi |
pop edi |
push edi |
rol eax, 16 |
add dword [esp], 16*2 |
@@: |
lodsb |
xchg al, ah |
push ecx |
rep stosw |
pop ecx |
xchg al, ah |
dec ebx |
jnz .dht_l5 |
.dht_l6: |
inc ah |
shr ecx, 1 |
jnz .dht_l4 |
push edi |
movzx ebx, byte [edx] |
add ebx, ebx |
add bl, [edx+1] |
adc bh, 0 |
add ebx, ebx |
add bl, [edx+2] |
adc bh, 0 |
add ebx, ebx |
add bl, [edx+3] |
adc bh, 0 |
add ebx, 15 |
shr ebx, 4 |
mov cl, 8 |
lea ebx, [edi+ebx*2] |
sub ebx, [esp+12] |
add ebx, 31 |
shr ebx, 5 |
mov edi, ebx |
shl edi, 5 |
add edi, [esp+12] |
xor ebx, 9 |
shl ebx, 16 |
xor eax, ebx |
push edi |
.dht_l7: |
movzx ebx, byte [edx] |
inc edx |
test ebx, ebx |
jz .dht_l10 |
.dht_l8: |
cmp edi, [esp] |
jb .dht_l9 |
mov edi, [esp+4] |
cmp edi, [esp+8] |
jb @f |
mov edi, [esp+12] |
cmp edi, [esp+16] |
jae .dhterr3 |
mov al, 9 |
stosb |
rol eax, 8 |
stosb |
inc eax |
ror eax, 8 |
mov [esp+12], edi |
mov edi, [esp+8] |
add dword [esp+8], 16*2 |
@@: |
mov al, 9 |
stosb |
rol eax, 16 |
stosb |
inc eax |
ror eax, 16 |
mov [esp+4], edi |
pop edi |
push edi |
add dword [esp], 16*2 |
.dht_l9: |
lodsb |
xchg al, ah |
push ecx |
rep stosw |
pop ecx |
xchg al, ah |
dec ebx |
jnz .dht_l8 |
.dht_l10: |
inc ah |
shr ecx, 1 |
jnz .dht_l7 |
push -1 |
pop eax |
pop ecx |
sub ecx, edi |
rep stosb |
pop edi |
pop ecx |
sub ecx, edi |
rep stosb |
pop edi |
pop ecx |
sub ecx, edi |
rep stosb |
pop edx ebx |
jmp .dht_loop |
.dhterr3: |
pop eax eax |
.dhterr2: |
pop eax eax |
.dhterr1: |
pop eax |
pop edx ebx |
.end2: |
jmp .end |
.sofn: |
; SOFn marker found |
test ebx, ebx |
jnz .end2 ; only one frame is allowed |
; only SOF0 [baseline sequential], SOF1 [extended sequential], SOF2 [progressive] |
; nobody supports other compression methods |
cmp al, 0xC2 |
ja .end2 |
setz [progressive] |
; Length must be at least 8 |
sub edx, 8 |
jb .end2 |
; Sample precision in JFIF must be 8 bits |
cmp byte [esi+2], 8 |
jnz .end2 |
; Color space in JFIF is either YCbCr (color images, 3 components) |
; or Y (grey images, 1 component) |
movzx eax, byte [esi+7] |
cmp al, 1 |
jz @f |
cmp al, 3 |
jz @f |
; Adobe products sometimes use YCCK color space with 4 components |
cmp al, 4 |
jnz .end2 |
cmp [adobe_ycck], 0 |
jz .end2 |
@@: |
mov edi, eax ; edi = number of components |
lea eax, [eax*3] |
sub edx, eax |
jnz .end2 |
; get width and height |
; width must be nonzero |
; height must be nonzero - nobody supports DNL markers |
mov ah, [esi+3] |
mov al, [esi+4] ; eax = height |
test eax, eax |
jz .end2 |
xor ecx, ecx |
mov ch, [esi+5] |
mov cl, [esi+6] ; ecx = width |
jecxz .end3 |
push eax ecx |
imul ecx, eax |
cmp ecx, 4000000h |
jb @f |
pop ecx eax |
.end3: |
jmp .end2 |
@@: |
imul ecx, edi |
push ecx |
add ecx, 44+1 |
; for grayscale images, allocate additional memory for palette |
cmp edi, 1 |
jnz @f |
add ecx, 256*4-1 |
@@: |
push 68 |
pop eax |
push 12 |
pop ebx |
int 0x40 |
mov ebx, eax |
test eax, eax |
jnz @f |
pop ecx |
mov al, 2 |
jmp .ret |
@@: |
; OS zeroes all allocated memory |
; push edx edi |
; mov edi, eax |
; mov edx, ecx |
; shr ecx, 2 |
; xor eax, eax |
; rep stosd |
; mov ecx, edx |
; and ecx, 3 |
; rep stosb |
; mov ecx, edx |
; pop edi edx |
mov [_ebx], ebx |
pop dword [ebx+32] ; size of pixels area |
push 44 |
pop eax |
mov dword [ebx+28], eax ; pointer to RGB data |
; create grayscale palette if needed |
cmp edi, 1 |
jnz .no_create_palette |
mov dword [ebx+20], eax |
mov ecx, 256*4 |
mov dword [ebx+24], ecx |
add dword [ebx+28], ecx |
push edi |
shr ecx, 2 |
xor eax, eax |
lea edi, [ebx+44] |
@@: |
stosd |
add eax, 0x010101 |
loop @b |
pop edi |
.no_create_palette: |
; other image characteristics |
pop ecx eax |
mov dword [ebx], 'RAW ' ; signature |
mov dword [ebx+4], ecx ; width |
mov dword [ebx+8], eax ; height |
mov eax, edi |
shl eax, 3 |
mov dword [ebx+12], eax ; total pixel size |
mov byte [ebx+16], 8 ; 8 bits per component |
mov word [ebx+18], di ; number of components |
mov [delta_x], eax |
mov [pixel_size], edi |
;mov eax, edi |
imul eax, ecx |
mov [delta_y], eax |
shr eax, 3 |
mov [line_size], eax |
; and dword [ebx+36], 0 ; transparency data pointer = NULL |
; and dword [ebx+40], 0 ; transparency data size |
add esi, 8 |
mov ecx, edi |
mov edi, components |
xor eax, eax |
xor edx, edx |
.sof_parse_comp: |
movsb ; db ComponentIdentifier |
lodsb |
mov ah, al |
and al, 0xF |
jz .end3 |
shr ah, 4 |
jz .end3 |
stosd ; db V, db H, db ?, db ? (will be filled later) |
cmp dl, al |
ja @f |
mov dl, al |
@@: |
cmp dh, ah |
ja @f |
mov dh, ah |
@@: |
movsb ; db QuantizationTableID |
loop .sof_parse_comp |
mov word [max_v], dx |
movzx eax, dh |
movzx edx, dl |
push eax edx |
shl eax, 3 |
shl edx, 3 |
mov [block_width], eax |
mov [block_height], edx |
pop edx eax |
push eax edx |
imul eax, [delta_x] |
mov [block_delta_x], eax |
imul edx, [delta_y] |
mov [block_delta_y], edx |
mov eax, [ebx+4] |
add eax, [block_width] |
dec eax |
xor edx, edx |
div [block_width] |
mov [x_num_blocks], eax |
mov eax, [ebx+8] |
add eax, [block_height] |
dec eax |
xor edx, edx |
div [block_height] |
mov [y_num_blocks], eax |
mov cl, [ebx+18] |
pop edx |
mov edi, components |
@@: |
mov eax, edx |
div byte [edi+1] ; VMax / V_i = VFactor_i |
mov byte [edi+3], al ; db VFactor |
pop eax |
push eax |
div byte [edi+2] ; HMax / H_i = HFactor_i |
mov byte [edi+4], al ; db HFactor |
add edi, 6 |
loop @b |
pop eax |
cmp [progressive], 0 |
jz .sof_noprogressive |
mov eax, [x_num_blocks] |
mul [block_width] |
mul [y_num_blocks] |
mul [block_height] |
add eax, eax |
mov [dct_buffer_size], eax |
mul [pixel_size] |
xchg eax, ecx |
push ebx |
push 68 |
pop eax |
push 12 |
pop ebx |
int 0x40 |
pop ebx |
test eax, eax |
jnz @f |
mov ecx, ebx |
push 68 |
pop eax |
push 13 |
pop ebx |
int 0x40 |
xor ebx, ebx |
jmp .end |
@@: |
mov [dct_buffer], eax |
.sof_noprogressive: |
jmp .markers_loop |
.sos: |
; SOS marker found |
; frame must be already opened |
test ebx, ebx |
jz .end3 |
cmp edx, 6 |
jb .end3 |
; parse marker |
movzx eax, byte [esi+2] ; number of components in this scan |
test eax, eax |
jz .end3 ; must be nonzero |
cmp al, [ebx+18] |
ja .end3 ; must be <= total number of components |
; mov [ns], eax |
cmp al, 1 |
setz [not_interleaved] |
lea ecx, [6+eax+eax] |
cmp edx, ecx |
jnz .end3 |
mov ecx, eax |
mov edi, cur_components |
add esi, 3 |
.sos_find_comp: |
lodsb ; got ComponentID, look for component info |
push ecx esi |
mov cl, [ebx+18] |
mov esi, components |
and dword [edi+48], 0 |
and dword [edi+52], 0 |
@@: |
cmp [esi], al |
jz @f |
inc dword [edi+52] |
add esi, 6 |
loop @b |
@@: |
mov eax, [esi+1] |
mov dl, [esi+5] |
pop esi ecx |
jnz .end3 ; bad ComponentID |
cmp [not_interleaved], 0 |
jz @f |
mov ax, 0x0101 |
@@: |
stosd ; db V, db H, db VFactor, db HFactor |
xor eax, eax |
mov al, byte [edi-1] ; get HFactor |
mul byte [ebx+18] ; number of components |
stosd ; HIncrement_i = HFactor_i * sizeof(pixel) |
mov al, byte [edi-4-2] ; get VFactor |
mul byte [ebx+18] ; number of components |
imul eax, [ebx+4] ; image width |
stosd ; VIncrement_i = VFactor_i * sizeof(row) |
xchg eax, edx |
and eax, 3 |
cmp [quant_tables_defined+eax], 0 |
jz .end3 |
shl eax, 8 |
add eax, quant_tables |
stosd ; dd QuantizationTable |
lodsb |
movzx eax, al |
mov edx, eax |
shr eax, 4 |
and edx, 3 |
and eax, 3 |
cmp [dc_huffman_defined+eax], 0 |
jnz .dc_table_ok |
cmp [progressive], 0 |
jz .end3 |
xor eax, eax |
jmp .dc_table_done |
.dc_table_ok: |
; shl eax, 11 |
imul eax, max_hufftable_size |
add eax, dc_huffman |
.dc_table_done: |
cmp [ac_huffman_defined+edx], 0 |
jnz .ac_table_ok |
cmp [progressive], 0 |
jz .end3 |
xor edx, edx |
jmp .ac_table_done |
.ac_table_ok: |
; shl edx, 11 |
imul edx, max_hufftable_size |
add edx, ac_huffman |
.ac_table_done: |
stosd ; dd DCTable |
xchg eax, edx |
stosd ; dd ACTable |
push ecx |
mov eax, [ebx+4] |
movzx ecx, byte [edi-21] ; get HFactor |
cdq ; edx:eax = width (width<0x10000, so as dword it is unsigned) |
div ecx |
stosd ; dd width / HFactor_i |
stosd |
xchg eax, ecx |
inc eax |
sub eax, edx |
stosd ; dd HFactor_i+1 - (width % HFactor_i) |
mov eax, [ebx+8] |
movzx ecx, byte [edi-34] ; get VFactor |
cdq |
div ecx |
stosd ; dd height / VFactor_i |
stosd |
xchg eax, ecx |
inc eax |
sub eax, edx |
stosd ; dd VFactor_i+1 - (height % VFactor_i) |
pop ecx |
scasd ; dd DCPrediction |
cmp dword [edi], 0 |
setnp al |
ror al, 1 |
mov byte [edi-1], al |
scasd ; dd ComponentOffset |
dec ecx |
jnz .sos_find_comp |
mov [cur_components_end], edi |
mov edi, ScanStart |
movsb |
cmp byte [esi], 63 |
ja .end3 |
movsb |
lodsb |
push eax |
and al, 0xF |
stosb |
pop eax |
shr al, 4 |
stosb |
; now unpack data |
call init_limits |
and [decoded_MCUs], 0 |
mov [cur_rst_marker], 7 |
and [huffman_bits], 0 |
cmp [progressive], 0 |
jz .sos_noprogressive |
; progressive mode - only decode DCT coefficients |
; initialize pointers to coefficients data |
; zero number of EOBs for AC coefficients |
; redefine HIncrement and VIncrement |
mov edi, cur_components |
.coeff_init: |
mov eax, [dct_buffer_size] |
mul dword [edi+52] |
add eax, [dct_buffer] |
mov [edi+12], eax |
and dword [edi+52], 0 |
cmp [ScanStart], 0 |
jz .scan_dc |
cmp dword [edi+20], 0 |
jz .end3 |
jmp @f |
.scan_dc: |
cmp dword [edi+16], 0 |
jz .end3 |
@@: |
movzx eax, byte [edi+1] |
shl eax, 7 |
mov [edi+4], eax |
mov eax, [edi+28] |
mov cl, [edi+3] |
cmp cl, [edi+32] |
sbb eax, -7-1 |
shr eax, 3 |
shl eax, 7 |
mov [edi+8], eax |
add edi, 56 |
cmp edi, [cur_components_end] |
jb .coeff_init |
; unpack coefficients |
; N.B. Speed optimization has sense here. |
push ebx |
.coeff_decode_loop: |
mov edx, cur_components |
.coeff_components_loop: |
mov edi, [edx+12] |
movzx ecx, byte [edx] |
push dword [edx+40] |
push edi |
.coeff_y_loop: |
push ecx |
movzx eax, byte [edx+1] |
push dword [edx+28] |
push edi |
.coeff_x_loop: |
cmp dword [edx+40], 0 |
jl @f |
cmp dword [edx+28], 0 |
jge .realdata |
@@: |
cmp [not_interleaved], 0 |
jnz .norealdata |
push eax edi |
mov edi, dct_coeff |
call decode_progressive_coeff |
pop edi eax |
jmp .norealdata |
.realdata: |
push eax |
call decode_progressive_coeff |
add edi, 64*2 |
pop eax |
.norealdata: |
sub dword [edx+28], 8 |
sub eax, 1 |
jnz .coeff_x_loop |
pop edi |
pop dword [edx+28] |
add edi, [edx+8] |
pop ecx |
sub dword [edx+40], 8 |
sub ecx, 1 |
jnz .coeff_y_loop |
movzx eax, byte [edx+1] |
shl eax, 3 |
pop edi |
add edi, [edx+4] |
pop dword [edx+40] |
sub [edx+28], eax |
mov [edx+12], edi |
add edx, 56 |
cmp edx, [cur_components_end] |
jnz .coeff_components_loop |
call next_MCU |
jc .norst |
sub [cur_x], 1 |
jnz .coeff_decode_loop |
call next_line |
mov edx, cur_components |
@@: |
mov eax, [max_x] |
imul eax, [edx+4] |
sub [edx+12], eax |
movzx eax, byte [edx] |
imul eax, [edx+8] |
add [edx+12], eax |
add edx, 56 |
cmp edx, [cur_components_end] |
jnz @b |
sub [cur_y], 1 |
jnz .coeff_decode_loop |
pop ebx |
jmp .markers_loop |
.norst: |
pop ebx |
jmp .end4 |
.sos_noprogressive: |
; normal mode - unpack JPEG image |
mov edi, [ebx+28] |
add edi, ebx |
mov [cur_out_ptr], edi |
; N.B. Speed optimization has sense here. |
.decode_loop: |
call decode_MCU |
call next_MCU |
jc .end4 |
sub [cur_x], 1 |
jnz .decode_loop |
call next_line |
sub [cur_y], 1 |
jnz .decode_loop |
jmp .markers_loop |
.end4: |
jmp .end3 |
;--------------------------------------------------------------------- |
get_marker: |
; in: esi -> data |
; out: CF=0, al=marker value - ok |
; CF=1 - no marker |
sub ebp, 1 |
jc .ret |
lodsb |
if 1 |
cmp al, 0xFF |
jae @f |
; Some stupid men, which do not read specifications and manuals, |
; sometimes create markers with length field two less than true |
; value (in JPEG length of marker = length of data INCLUDING |
; length field itself). To open such files, allow 2 bytes |
; before next marker. |
cmp ebp, 2 |
jb .ret |
lodsb |
lodsb |
end if |
cmp al, 0xFF |
jb .ret |
@@: |
sub ebp, 1 |
jc .ret |
lodsb |
cmp al, 0xFF |
jz @b |
clc |
.ret: |
ret |
;--------------------------------------------------------------------- |
align 16 |
decode_MCU: |
mov edx, cur_components |
.components_loop: |
; decode each component |
push [cur_out_ptr] |
movzx ecx, byte [edx] |
push dword [edx+40] |
; we have H_i * V_i blocks of packed data, decode them |
.y_loop_1: |
push [cur_out_ptr] |
push ecx |
movzx eax, byte [edx+1] |
push dword [edx+28] |
.x_loop_1: |
push eax |
call decode_data_unit |
cmp dword [edx+40], 0 |
jl .nocopyloop |
cmp dword [edx+28], 0 |
jl .nocopyloop |
; now we have decoded block 8*8 in decoded_data |
; H_i * V_i packed blocks 8*8 make up one block (8*HMax) * (8*VMax) |
; so each pixel in packed block corresponds to HFact * VFact pixels |
movzx ecx, byte [edx+2] |
push esi ebp |
mov edi, [cur_out_ptr] |
add edi, [edx+52] |
.y_loop_2: |
push ecx edi |
cmp ecx, [edx+44] |
mov ecx, [edx+40] |
sbb ecx, 8-1 |
sbb eax, eax |
and ecx, eax |
add ecx, 8 |
jz .skip_x_loop_2 |
movzx eax, byte [edx+3] |
.x_loop_2: |
push eax ecx edi |
cmp eax, [edx+32] |
mov eax, [edx+28] |
sbb eax, 8-1 |
sbb ebp, ebp |
and eax, ebp |
mov ebp, .copyiter_all |
mov esi, decoded_data |
sub ebp, eax |
sub ebp, eax |
sub ebp, eax |
mov eax, [edx+4] |
sub eax, 1 |
.copyloop: |
push esi edi |
jmp ebp |
.copyiter_all: |
movsb |
repeat 7 |
add edi, eax |
movsb |
end repeat |
nop |
nop |
pop edi esi |
add edi, [edx+8] |
add esi, 8 |
sub ecx, 1 |
jnz .copyloop |
pop edi ecx eax |
add edi, [pixel_size] |
sub eax, 1 |
jnz .x_loop_2 |
.skip_x_loop_2: |
pop edi ecx |
add edi, [line_size] |
sub ecx, 1 |
jnz .y_loop_2 |
pop ebp esi |
.nocopyloop: |
mov eax, [delta_x] |
add [cur_out_ptr], eax |
pop eax |
sub dword [edx+28], 8 |
sub eax, 1 |
jnz .x_loop_1 |
pop dword [edx+28] |
pop ecx |
pop eax |
sub dword [edx+40], 8 |
add eax, [delta_y] |
mov [cur_out_ptr], eax |
sub ecx, 1 |
jnz .y_loop_1 |
movzx eax, byte [edx+1] |
pop dword [edx+40] |
shl eax, 3 |
pop [cur_out_ptr] |
sub dword [edx+28], eax |
add edx, 56 |
cmp edx, [cur_components_end] |
jb .components_loop |
mov eax, [cur_block_dx] |
add [cur_out_ptr], eax |
ret |
align 16 |
next_MCU: |
add [decoded_MCUs], 1 |
mov eax, [restart_interval] |
test eax, eax |
jz .no_restart |
cmp [decoded_MCUs], eax |
jb .no_restart |
and [decoded_MCUs], 0 |
and [huffman_bits], 0 |
cmp [cur_x], 1 |
jnz @f |
cmp [cur_y], 1 |
jz .no_restart |
@@: |
; restart marker must be present |
sub ebp, 2 |
js .error |
cmp byte [esi], 0xFF |
jnz .error |
mov al, [cur_rst_marker] |
inc eax |
and al, 7 |
mov [cur_rst_marker], al |
add al, 0xD0 |
cmp [esi+1], al |
jnz .error |
add esi, 2 |
; handle restart marker - zero all DC predictions |
mov edx, cur_components |
@@: |
and word [edx+48], 0 |
add edx, 56 |
cmp edx, [cur_components_end] |
jb @b |
.no_restart: |
clc |
ret |
.error: |
stc |
ret |
next_line: |
mov eax, [max_x] |
mov [cur_x], eax |
mul [cur_block_dx] |
sub eax, [cur_block_dy] |
sub [cur_out_ptr], eax |
mov edx, cur_components |
@@: |
mov eax, [edx+24] |
mov [edx+28], eax |
movzx eax, byte [edx] |
shl eax, 3 |
sub [edx+40], eax |
add edx, 56 |
cmp edx, [cur_components_end] |
jb @b |
ret |
init_limits: |
push [x_num_blocks] |
pop [max_x] |
push [y_num_blocks] |
pop [max_y] |
push [block_delta_x] |
pop [cur_block_dx] |
push [block_delta_y] |
pop [cur_block_dy] |
cmp [not_interleaved], 0 |
jz @f |
mov eax, dword [cur_components+28] |
movzx ecx, byte [cur_components+3] |
cmp cl, [cur_components+32] |
sbb eax, -7-1 |
shr eax, 3 |
mov [max_x], eax |
mov eax, dword [cur_components+40] |
movzx edx, byte [cur_components+2] |
cmp dl, [cur_components+44] |
sbb eax, -7-1 |
shr eax, 3 |
mov [max_y], eax |
imul ecx, [delta_x] |
mov [cur_block_dx], ecx |
imul edx, [delta_y] |
mov [cur_block_dy], edx |
@@: |
push [max_x] |
pop [cur_x] |
push [max_y] |
pop [cur_y] |
ret |
;macro get_bit |
;{ |
;local .l1,.l2,.marker |
; add cl, cl |
; jnz .l1 |
; sub ebp, 1 |
; js decode_data_unit.eof |
; mov cl, [esi] |
; cmp cl, 0xFF |
; jnz .l2 |
;.marker: |
; add esi, 1 |
; sub ebp, 1 |
; js decode_data_unit.eof |
; cmp byte [esi], 0xFF |
; jz .marker |
; cmp byte [esi], 0 |
; jnz decode_data_unit.eof |
;.l2: |
; sub esi, -1 |
; adc cl, cl |
;.l1: |
;} |
macro get_bit |
{ |
local .l1,.l2,.marker |
sub cl, 1 |
jns .l1 |
sub ebp, 1 |
js .eof |
mov ch, [esi] |
cmp ch, 0xFF |
jnz .l2 |
.marker: |
add esi, 1 |
sub ebp, 1 |
js .eof |
cmp byte [esi], 0xFF |
jz .marker |
cmp byte [esi], 0 |
jnz .eof |
.l2: |
add esi, 1 |
mov cl, 7 |
.l1: |
add ch, ch |
} |
macro get_bits restore_edx |
{ |
local .l1,.l2,.l3,.marker2 |
movzx eax, ch |
mov dl, cl |
shl eax, 24 |
neg cl |
push ebx |
add cl, 24 |
.l1: |
cmp bl, dl |
jbe .l2 |
sub bl, dl |
sub ebp, 1 |
js .eof |
mov ch, [esi] |
cmp ch, 0xFF |
jnz .l3 |
.marker2: |
add esi, 1 |
sub ebp, 1 |
js .eof |
cmp byte [esi], 0xFF |
jz .marker2 |
cmp byte [esi], 0 |
jnz .eof |
.l3: |
movzx edx, ch |
add esi, 1 |
shl edx, cl |
sub cl, 8 |
or eax, edx |
mov dl, 8 |
jmp .l1 |
.l2: |
mov cl, bl |
sub dl, bl |
shl ch, cl |
pop ebx |
cmp eax, 80000000h |
rcr eax, 1 |
mov cl, 31 |
sub cl, bl |
sar eax, cl |
mov cl, dl |
if restore_edx eq true |
pop edx |
end if |
add eax, 80000000h |
adc eax, 80000000h |
} |
; macro get_huffman_code |
; { |
; local .l1 |
; xor ebx, ebx |
; .l1: |
; get_bit |
; adc ebx, ebx |
; mov eax, [eax+4*ebx] |
; xor ebx, ebx |
; cmp eax, -1 |
; jz .eof |
; cmp eax, 0x1000 |
; jae .l1 |
; mov ebx, eax |
; } |
macro get_huffman_code |
{ |
local .l1,.l2,.l3,.l4,.l5,.l6,.nomarker1,.marker1,.nomarker2,.marker2,.nomarker3,.marker3,.done |
; 1. (First level in Huffman table) Does the current Huffman code fit in 8 bits |
; and have we got enough bits? |
movzx ebx, ch |
cmp byte [eax+ebx*2], cl |
jbe .l1 |
; 2a. No; load next byte |
sub ebp, 1 |
js .eof |
mov ch, [esi] |
movzx edx, ch |
cmp ch, 0xFF |
jnz .nomarker1 |
.marker1: |
add esi, 1 |
sub ebp, 1 |
js .eof |
cmp byte [esi], 0xFF |
jz .marker1 |
cmp byte [esi], 0 |
jnz .eof |
.nomarker1: |
shr edx, cl |
add esi, 1 |
or ebx, edx |
; 3a. (First level in Huffman table, >=8 bits known) Does the current Huffman code fit in 8 bits? |
cmp byte [eax+ebx*2], 8 |
jbe .l2 |
jl .eof |
; 4aa. No; go to next level |
movzx ebx, byte [eax+ebx*2+1] |
mov dl, ch |
shl ebx, 5 |
ror edx, cl |
lea ebx, [eax+ebx+0x200] |
shr edx, 24 |
push edx |
shr edx, 4 |
; 5aa. (Second level in Huffman table) Does the current Huffman code fit in 12 bits |
; and have we got enough bits? |
cmp byte [ebx+edx*2], cl |
jbe .l3 |
; 6aaa. No; have we got 12 bits? |
cmp cl, 4 |
jae .l4 |
; 7aaaa. No; load next byte |
pop edx |
sub ebp, 1 |
js .eof |
mov ch, [esi] |
cmp ch, 0xFF |
jnz .nomarker2 |
.marker2: |
add esi, 1 |
sub ebp, 1 |
js .eof |
cmp byte [esi], 0xFF |
jz .marker2 |
cmp byte [esi], 0 |
jnz .eof |
.nomarker2: |
push ecx |
shr ch, cl |
add esi, 1 |
or dl, ch |
pop ecx |
push edx |
shr edx, 4 |
; 8aaaa. (Second level in Huffman table) Does the current Huffman code fit in 12 bits? |
cmp byte [ebx+edx*2], 4 |
jbe .l5 |
jl .eof |
; 9aaaaa. No; go to next level |
movzx ebx, byte [ebx+edx*2+1] |
pop edx |
shl ebx, 5 |
and edx, 0xF |
lea ebx, [eax+ebx+0x200] |
; 10aaaaa. Get current code length and value |
sub cl, [ebx+edx*2] |
movzx eax, byte [ebx+edx*2+1] |
neg cl |
shl ch, cl |
neg cl |
add cl, 8 |
jmp .done |
.l5: |
; 9aaaab. Yes; get current code length and value |
sub cl, [ebx+edx*2] |
movzx eax, byte [ebx+edx*2+1] |
neg cl |
pop edx |
shl ch, cl |
neg cl |
add cl, 8 |
jmp .done |
.l4: |
; 7aaab. Yes; go to next level |
movzx ebx, byte [ebx+edx*2+1] |
pop edx |
shl ebx, 5 |
and edx, 0xF |
lea ebx, [eax+ebx+0x200] |
; 8aaab. (Third level in Huffman table) Have we got enough bits? |
cmp [ebx+edx*2], cl |
jbe .l6 |
; 9aaaba. No; load next byte |
sub ebp, 1 |
js .eof |
mov ch, [esi] |
cmp ch, 0xFF |
jnz .nomarker3 |
.marker3: |
add esi, 1 |
sub ebp, 1 |
js .eof |
cmp byte [esi], 0xFF |
jz .marker3 |
cmp byte [esi], 0 |
jnz .eof |
.nomarker3: |
push ecx |
shr ch, cl |
add esi, 1 |
or dl, ch |
pop ecx |
; 10aaaba. Get current code length and value |
sub cl, [ebx+edx*2] |
movzx eax, byte [ebx+edx*2+1] |
neg cl |
shl ch, cl |
neg cl |
add cl, 8 |
jmp .done |
.l3: |
; 6aab. Yes; get current code length and value |
pop eax |
.l6: |
; 9aaabb. Yes; get current code length and value |
sub cl, [ebx+edx*2] |
movzx eax, byte [ebx+edx*2+1] |
xor cl, 7 |
shl ch, cl |
xor cl, 7 |
add ch, ch |
jmp .done |
.l2: |
; 3ab. Yes; get current code length and value |
sub cl, [eax+ebx*2] |
movzx eax, byte [eax+ebx*2+1] |
neg cl |
shl ch, cl |
neg cl |
add cl, 8 |
jmp .done |
.l1: |
; 3b. Yes; get current code length and value |
mov dl, [eax+ebx*2] |
movzx eax, byte [eax+ebx*2+1] |
xchg cl, dl |
sub dl, cl |
shl ch, cl |
mov cl, dl |
.done: |
mov ebx, eax |
} |
; Decode DCT coefficients for one 8*8 block in progressive mode |
; from input stream, given by pointer esi and length ebp |
; N.B. Speed optimization has sense here. |
align 16 |
decode_progressive_coeff: |
mov ecx, [huffman_bits] |
cmp [ScanStart], 0 |
jnz .ac |
; DC coefficient |
cmp [ApproxPosHigh], 0 |
jz .dc_first |
; DC coefficient, subsequent passes |
xor eax, eax |
get_bit |
adc eax, eax |
mov [huffman_bits], ecx |
mov cl, [ApproxPosLow] |
shl eax, cl |
or [edi], ax |
ret |
.dc_first: |
; DC coefficient, first pass |
mov eax, [edx+16] |
push edx |
get_huffman_code |
get_bits true |
add eax, [edx+48] |
mov [edx+48], ax |
mov [huffman_bits], ecx |
mov cl, [ApproxPosLow] |
shl eax, cl |
mov [edi], ax |
ret |
.ac: |
; AC coefficients |
movzx eax, [ScanStart] |
cmp al, [ScanEnd] |
ja .ret |
cmp dword [edx+52], 0 |
jnz .was_eob |
.acloop: |
push edx |
push eax |
mov eax, [edx+20] |
get_huffman_code |
pop eax |
test ebx, 15 |
jz .band |
push eax ebx |
and ebx, 15 |
get_bits false |
pop ebx |
xchg eax, [esp] |
shr ebx, 4 |
.zeroloop1: |
push eax ebx |
movzx eax, byte [zigzag+eax] |
xor ebx, ebx |
cmp word [edi+eax], bx |
jz .zeroloop2 |
get_bit |
jnc @f |
push ecx |
mov cl, [ApproxPosLow] |
xor ebx, ebx |
cmp byte [edi+eax+1], 80h |
adc ebx, 0 |
add ebx, ebx |
sub ebx, 1 |
shl ebx, cl |
pop ecx |
add [edi+eax], bx |
@@: |
pop ebx eax |
@@: |
add eax, 1 |
cmp al, [ScanEnd] |
ja decode_data_unit.eof |
jmp .zeroloop1 |
.zeroloop2: |
pop ebx eax |
sub ebx, 1 |
jns @b |
.nozero1: |
pop ebx |
test ebx, ebx |
jz @f |
push eax |
movzx eax, byte [zigzag+eax] |
push ecx |
mov cl, [ApproxPosLow] |
shl ebx, cl |
pop ecx |
mov [edi+eax], bx |
pop eax |
@@: |
add eax, 1 |
pop edx |
cmp al, [ScanEnd] |
jbe .acloop |
mov [huffman_bits], ecx |
.ret: |
ret |
.eof: |
jmp decode_data_unit.eof |
.band: |
shr ebx, 4 |
cmp ebx, 15 |
jnz .eob |
push 0 |
jmp .zeroloop1 |
.eob: |
pop edx |
push eax |
mov eax, 1 |
test ebx, ebx |
jz .eob0 |
@@: |
get_bit |
adc eax, eax |
sub ebx, 1 |
jnz @b |
.eob0: |
mov [edx+52], eax |
pop eax |
.was_eob: |
sub dword [edx+52], 1 |
cmp al, [ScanEnd] |
ja .ret2 |
.zeroloop3: |
push eax |
movzx eax, byte [zigzag+eax] |
xor ebx, ebx |
cmp word [edi+eax], bx |
jz @f |
get_bit |
jnc @f |
push ecx |
mov cl, [ApproxPosLow] |
xor ebx, ebx |
cmp byte [edi+eax+1], 80h |
adc ebx, 0 |
add ebx, ebx |
sub ebx, 1 |
shl ebx, cl |
pop ecx |
add [edi+eax], bx |
@@: |
pop eax |
add eax, 1 |
cmp al, [ScanEnd] |
jbe .zeroloop3 |
.ret2: |
mov [huffman_bits], ecx |
ret |
handle_progressive: |
cmp [dct_buffer], 0 |
jnz @f |
ret |
@@: |
; information for all components |
mov esi, components |
xor ebp, ebp |
movzx ecx, byte [ebx+18] |
.next_component: |
mov edi, cur_components |
lodsb ; ComponentID |
lodsd |
mov ax, 0x0101 |
stosd ; db V, db H, db VFactor, db HFactor |
xor eax, eax |
mov al, byte [edi-1] ; get HFactor |
mul byte [ebx+18] ; number of components |
stosd ; HIncrement_i = HFactor_i * sizeof(pixel) |
mov al, byte [edi-4-2] ; get VFactor |
mul byte [ebx+18] ; number of components |
mul dword [ebx+4] ; image width |
stosd ; VIncrement_i = VFactor_i * sizeof(row) |
lodsb |
and eax, 3 |
cmp [quant_tables_defined+eax], 0 |
jz .error |
shl eax, 8 |
add eax, quant_tables |
stosd ; dd QuantizationTable |
stosd ; dd DCTable - ignored |
mov eax, ebp |
mul [dct_buffer_size] |
add eax, [dct_buffer] |
stosd ; instead of dd ACTable - pointer to current DCT coefficients |
push ecx |
mov eax, [ebx+4] |
movzx ecx, byte [edi-21] ; get HFactor |
; cdq ; edx = 0 as a result of previous mul |
div ecx |
stosd ; dd width / HFactor_i |
stosd |
xchg eax, ecx |
inc eax |
sub eax, edx |
stosd ; dd HFactor_i+1 - (width % HFactor_i) |
mov eax, [ebx+8] |
movzx ecx, byte [edi-34] ; get VFactor |
cdq |
div ecx |
stosd ; dd height / VFactor_i |
stosd |
xchg eax, ecx |
inc eax |
sub eax, edx |
stosd ; dd VFactor_i+1 - (height % VFactor_i) |
pop ecx |
xor eax, eax |
test ebp, ebp |
setnp al |
ror eax, 1 |
stosd ; dd DCPrediction |
mov eax, ebp |
stosd ; dd ComponentOffset |
inc ebp |
push ecx |
mov [cur_components_end], edi |
lea edx, [edi-56] |
; do IDCT and unpack |
mov edi, [ebx+28] |
add edi, ebx |
mov [cur_out_ptr], edi |
mov [not_interleaved], 1 |
call init_limits |
.decode_loop: |
call decode_MCU |
sub [cur_x], 1 |
jnz .decode_loop |
call next_line |
sub [cur_y], 1 |
jnz .decode_loop |
pop ecx |
dec ecx |
jnz .next_component |
; image unpacked, return |
.error: |
push ebx |
push 68 |
pop eax |
push 13 |
pop ebx |
mov ecx, [dct_buffer] |
int 0x40 |
pop ebx |
ret |
; Support for YCbCr -> RGB conversion |
; R = Y + 1.402 * (Cr - 128) |
; G = Y - 0.34414 * (Cb - 128) - 0.71414 * (Cr - 128) |
; B = Y + 1.772 * (Cb - 128) |
; When converting YCbCr -> RGB, we need to do some multiplications; |
; to be faster, we precalculate the table for all 256 possible values |
; Also we approximate fractions with N/65536, this gives sufficient precision |
initialize_color_table: |
; 1.402 = 1 + 26345/65536, -0.71414 = -46802/65536 |
; -0.34414 = -22554/65536, 1.772 = 1 + 50594/65536 |
mov edi, color_table_1 |
mov ecx, 128 |
; 1. Cb -> 1.772*Cb |
xor eax, eax |
mov dx, 8000h |
.l1: |
push ecx |
@@: |
stosd |
add dx, 50594 |
adc eax, 1 |
loop @b |
neg dx |
adc eax, -1 |
neg eax |
pop ecx |
jnz .l1 |
; 2. Cb -> -0.34414*Cb |
mov ax, dx |
.l2: |
push ecx |
@@: |
stosd |
sub eax, 22554 |
loop @b |
neg eax |
pop ecx |
cmp ax, dx |
jnz .l2 |
xor eax, eax |
; 3. Cr -> -0.71414*Cr |
.l3: |
push ecx |
@@: |
stosd |
sub eax, 46802 |
loop @b |
neg eax |
pop ecx |
jnz .l3 |
; 4. Cr -> 1.402*Cr |
.l4: |
push ecx |
@@: |
stosd |
add dx, 26345 |
adc eax, 1 |
loop @b |
neg dx |
adc eax, -1 |
neg eax |
pop ecx |
jnz .l4 |
ret |
; this function is called in the end of image loading |
convert_to_rgb: |
; some checks |
test ebx, ebx ; image exists? |
jz .ret |
cmp byte [ebx+18], 3 ; full-color image? |
jz .ycc2rgb |
cmp byte [ebx+18], 4 |
jz .ycck2rgb |
.ret: |
ret |
.ycc2rgb: |
; conversion is needed |
mov esi, [ebx+4] |
imul esi, [ebx+8] |
lea edi, [ebx+44] |
push ebx |
; N.B. Speed optimization has sense here. |
align 16 |
.loop: |
; mov ebx, [edi] |
; mov edx, ebx |
; mov ecx, ebx |
; movzx ebx, bl ; ebx = Y |
; shr edx, 16 |
; mov eax, ebx |
; movzx edx, dl ; edx = Cr |
; movzx ecx, ch ; ecx = Cb |
movzx ebx, byte [edi] |
movzx ecx, byte [edi+1] |
mov eax, ebx |
movzx edx, byte [edi+2] |
; B = Y + color_table_1[Cb] |
add eax, [color_table_1+ecx*4] |
mov ebp, [color_table_2+ecx*4] |
cmp eax, 80000000h |
sbb ecx, ecx |
and eax, ecx |
add ebp, [color_table_3+edx*4] |
cmp eax, 0x100 |
sbb ecx, ecx |
not ecx |
sar ebp, 16 |
or eax, ecx |
mov [edi], al |
; G = Y + color_table_2[Cb] + color_table_3[Cr] |
lea eax, [ebx+ebp] |
cmp eax, 80000000h |
sbb ecx, ecx |
and eax, ecx |
cmp eax, 0x100 |
sbb ecx, ecx |
not ecx |
or eax, ecx |
mov [edi+1], al |
; R = Y + color_table_4[Cr] |
mov eax, ebx |
add eax, [color_table_4+edx*4] |
cmp eax, 80000000h |
sbb ecx, ecx |
and eax, ecx |
cmp eax, 0x100 |
sbb ecx, ecx |
not ecx |
or eax, ecx |
mov [edi+2], al |
add edi, 3 |
sub esi, 1 |
jnz .loop |
pop ebx |
ret |
.ycck2rgb: |
; conversion is needed |
mov esi, [ebx+4] |
imul esi, [ebx+8] |
push ebx |
push esi |
lea edi, [ebx+44] |
mov esi, edi |
; N.B. Speed optimization has sense here. |
align 16 |
.kloop: |
; mov ebx, [esi] |
; mov edx, ebx |
; mov ecx, ebx |
; movzx ebx, bl ; ebx = Y |
; shr edx, 16 |
; mov eax, ebx |
; movzx edx, dl ; edx = Cr |
; movzx ecx, ch ; ecx = Cb |
movzx ebx, byte [esi] |
movzx ecx, byte [esi+1] |
mov eax, ebx |
movzx edx, byte [esi+2] |
; B = Y + color_table_1[Cb] |
add eax, [color_table_1+ecx*4] |
mov ebp, [color_table_2+ecx*4] |
cmp eax, 80000000h |
sbb ecx, ecx |
and eax, ecx |
add ebp, [color_table_3+edx*4] |
cmp eax, 0x100 |
sbb ecx, ecx |
not ecx |
sar ebp, 16 |
or eax, ecx |
xor al, 0xFF |
mul byte [esi+3] |
add al, ah |
adc ah, 0 |
add al, 80h |
adc ah, 0 |
mov byte [edi], ah |
; G = Y + color_table_2[Cb] + color_table_3[Cr] |
lea eax, [ebx+ebp] |
cmp eax, 80000000h |
sbb ecx, ecx |
and eax, ecx |
cmp eax, 0x100 |
sbb ecx, ecx |
not ecx |
or eax, ecx |
xor al, 0xFF |
mul byte [esi+3] |
add al, ah |
adc ah, 0 |
add al, 80h |
adc ah, 0 |
mov byte [edi+1], ah |
; R = Y + color_table_4[Cr] |
mov eax, ebx |
add eax, [color_table_4+edx*4] |
cmp eax, 80000000h |
sbb ecx, ecx |
and eax, ecx |
cmp eax, 0x100 |
sbb ecx, ecx |
not ecx |
or eax, ecx |
xor al, 0xFF |
mul byte [esi+3] |
add al, ah |
adc ah, 0 |
add al, 80h |
adc ah, 0 |
mov byte [edi+2], ah |
add esi, 4 |
add edi, 3 |
sub dword [esp], 1 |
jnz .kloop |
pop eax |
pop ebx |
; now correct values in RAW header |
mov byte [ebx+12], 24 |
mov byte [ebx+18], 3 |
mov ecx, [ebx+32] |
shr ecx, 2 |
lea ecx, [ecx*3] |
mov [ebx+22], ecx |
; release some memory - must succeed because we decrease size |
add ecx, 44+1 |
mov edx, ebx |
push 68 |
pop eax |
push 20 |
pop ebx |
int 0x40 |
mov ebx, eax |
ret |
; Decodes one data unit, that is, 8*8 block, |
; from input stream, given by pointer esi and length ebp |
; N.B. Speed optimization has sense here. |
align 16 |
decode_data_unit: |
; edx -> component data |
cmp [progressive], 0 |
jz @f |
mov edi, [edx+20] |
add dword [edx+20], 64*2 |
jmp .coeff_decoded |
@@: |
mov edi, dct_coeff |
mov ecx, 64*2/4 |
xor eax, eax |
rep stosd |
mov edi, zigzag+1 |
mov ecx, [huffman_bits] |
; read DC coefficient |
mov eax, [edx+16] |
push edx |
get_huffman_code |
get_bits true |
add eax, [edx+48] |
mov [dct_coeff], ax |
mov [edx+48], ax |
; read AC coefficients |
@@: |
mov eax, [edx+20] |
push edx |
get_huffman_code |
shr eax, 4 |
and ebx, 15 |
jz .band |
add edi, eax |
cmp edi, zigzag+64 |
jae .eof |
get_bits true |
movzx ebx, byte [edi] |
mov [dct_coeff+ebx], ax |
add edi, 1 |
cmp edi, zigzag+64 |
jb @b |
jmp .do_idct |
.band: |
pop edx |
cmp al, 15 |
jnz .do_idct |
add edi, 16 |
cmp edi, zigzag+64 |
jb @b |
; jmp .eof |
.do_idct: |
mov edi, dct_coeff |
mov [huffman_bits], ecx |
; coefficients loaded, now IDCT |
.coeff_decoded: |
mov eax, [edx+12] |
mov ebx, idct_tmp_area |
.idct_loop1: |
mov cx, word [edi+1*16] |
repeat 6 |
or cx, word [edi+(%+1)*16] |
end repeat |
jnz .real_transform |
fild word [edi] |
fmul dword [eax] |
fstp dword [ebx] |
mov ecx, [ebx] |
repeat 7 |
mov [ebx+%*32], ecx |
end repeat |
jmp .idct_next1 |
.real_transform: |
; S0,...,S7 - transformed values, s0,...,s7 - sought-for values |
; S0,...,S7 are dequantized; |
; dequantization table elements were multiplied to [idct_pre_table], |
; so S0,S1,... later denote S0/2\sqrt{2},S1*\cos{\pi/16}/2,... |
; sqrt2 = \sqrt{2}, cos = 2\cos{\pi/8}, |
; cos_sum = -2(\cos{\pi/8}+\cos{3\pi/8}), cos_diff = 2(\cos{\pi/8}-\cos{3\pi/8}) |
; Now formulas: |
; s0 = ((S0+S4)+(S2+S6)) + ((S1+S7)+(S3+S5)) |
; s7 = ((S0+S4)+(S2+S6)) - ((S1+S7)+(S3+S5)) |
; val0 = ((cos-1)S1-(cos+cos_sum+1)S3+(cos+cos_sum-1)S5-(cos+1)S7) |
; s1 = ((S0-S4)+((sqrt2-1)S2-(sqrt2+1)S6)) + val0 |
; s6 = ((S0-S4)+((sqrt2-1)S2-(sqrt2+1)S6)) - val0 |
; val1 = (S1+S7-S3-S5)sqrt2 - val0 |
; s2 = ((S0-S4)-((sqrt2-1)S2-(sqrt2+1)S6)) + val1 |
; s5 = ((S0-S4)-((sqrt2-1)S2-(sqrt2+1)S6)) - val1 |
; val2 = (S1-S7)cos_diff - (S1-S3+S5-S7)cos + val1 |
; s3 = ((S0+S4)-(S2+S6)) - val2 |
; s4 = ((S0+S4)-(S2+S6)) + val2 |
fild word [edi+3*16] |
fmul dword [eax+3*32] |
fild word [edi+5*16] |
fmul dword [eax+5*32] ; st0=S5,st1=S3 |
fadd st1,st0 |
fadd st0,st0 |
fsub st0,st1 ; st0=S5-S3,st1=S5+S3 |
fild word [edi+1*16] |
fmul dword [eax+1*32] |
fild word [edi+7*16] |
fmul dword [eax+7*32] ; st0=S7,st1=S1 |
fsub st1,st0 |
fadd st0,st0 |
fadd st0,st1 ; st0=S1+S7,st1=S1-S7,st2=S5-S3,st3=S5+S3 |
fadd st3,st0 |
fadd st0,st0 |
fsub st0,st3 ; st0=S1-S3-S5+S7,st1=S1-S7,st2=S5-S3,st3=S1+S3+S5+S7 |
fmul [idct_sqrt2] |
fld st2 |
fadd st0,st2 |
fmul [idct_cos] ; st0=(S1-S3+S5-S7)cos,st1=(S1-S3-S5+S7)sqrt2, |
; st2=S1-S7,st3=S5-S3,st4=S1+S3+S5+S7 |
fxch st2 |
fmul [idct_cos_diff] |
fsub st0,st2 ; st0=(S1-S7)cos_diff - (S1-S3+S5-S7)cos |
fxch st3 |
fmul [idct_cos_sum] |
fadd st0,st2 ; st0=(S5-S3)cos_sum+(S1-S3+S5-S7)cos |
fsub st0,st4 ; st0=val0 |
fsub st1,st0 ; st0=val0,st1=val1,st2=(S1-S3+S5-S7)cos, |
; st3=(S1-S7)cos_diff-(S1-S3+S5-S7)cos,st4=S1+S3+S5+S7 |
fxch st2 |
fstp st0 |
fadd st2,st0 ; st0=val1,st1=val0,st2=val2,st3=S1+S3+S5+S7 |
fild word [edi+0*16] |
fmul dword [eax+0*32] |
fild word [edi+4*16] |
fmul dword [eax+4*32] ; st0=S4,st1=S0 |
fsub st1,st0 |
fadd st0,st0 |
fadd st0,st1 ; st0=S0+S4,st1=S0-S4 |
fild word [edi+6*16] |
fmul dword [eax+6*32] |
fild word [edi+2*16] |
fmul dword [eax+2*32] ; st0=S2,st1=S6 |
fadd st1,st0 |
fadd st0,st0 |
fsub st0,st1 ; st0=S2-S6,st1=S2+S6 |
fmul [idct_sqrt2] |
fsub st0,st1 |
fsub st3,st0 |
fadd st0,st0 |
fadd st0,st3 ; st0=(S0-S4)+((S2-S6)sqrt2-(S2+S6)) |
; st3=(S0-S4)-((S2-S6)sqrt2-(S2+S6)) |
fxch st1 |
fsub st2,st0 |
fadd st0,st0 |
fadd st0,st2 ; st0=(S0+S4)+(S2+S6),st1=(S0-S4)+((S2-S6)sqrt2-(S2+S6)), |
; st2=(S0+S4)-(S2+S6),st3=(S0-S4)-((S2-S6)sqrt2-(S2+S6)) |
; st4=val1,st5=val0,st6=val2,st7=S1+S3+S5+S7 |
fsubr st7,st0 |
fadd st0,st0 |
fsub st0,st7 |
fstp dword [ebx+0*32] |
fsubr st4,st0 |
fadd st0,st0 |
fsub st0,st4 |
fstp dword [ebx+1*32] |
fadd st4,st0 |
fadd st0,st0 |
fsub st0,st4 |
fstp dword [ebx+3*32] |
fsubr st1,st0 |
fadd st0,st0 |
fsub st0,st1 |
fstp dword [ebx+2*32] |
fstp dword [ebx+5*32] |
fstp dword [ebx+6*32] |
fstp dword [ebx+4*32] |
fstp dword [ebx+7*32] |
.idct_next1: |
add ebx, 4 |
add edi, 2 |
add eax, 4 |
cmp ebx, idct_tmp_area+8*4 |
jb .idct_loop1 |
sub ebx, 8*4 |
.idct_loop2: |
fld dword [ebx+3*4] |
fld dword [ebx+5*4] |
fadd st1,st0 |
fadd st0,st0 |
fsub st0,st1 ; st0=S5-S3,st1=S5+S3 |
fld dword [ebx+1*4] |
fld dword [ebx+7*4] |
fsub st1,st0 |
fadd st0,st0 |
fadd st0,st1 ; st0=S1+S7,st1=S1-S7,st2=S5-S3,st3=S5+S3 |
fadd st3,st0 |
fadd st0,st0 |
fsub st0,st3 ; st0=S1-S3-S5+S7,st1=S1-S7,st2=S5-S3,st3=S1+S3+S5+S7 |
fmul [idct_sqrt2] |
fld st2 |
fadd st0,st2 |
fmul [idct_cos] ; st0=(S1-S3+S5-S7)cos,st1=(S1-S3-S5+S7)sqrt2, |
; st2=S1-S7,st3=S5-S3,st4=S1+S3+S5+S7 |
fxch st2 |
fmul [idct_cos_diff] |
fsub st0,st2 ; st0=(S1-S7)cos_diff - (S1-S3+S5-S7)cos |
fxch st3 |
fmul [idct_cos_sum] |
fadd st0,st2 ; st0=(S5-S3)cos_sum+(S1-S3+S5-S7)cos |
fsub st0,st4 ; st0=val0 |
fsub st1,st0 ; st0=val0,st1=val1,st2=(S1-S3+S5-S7)cos, |
; st3=(S1-S7)cos_diff-(S1-S3+S5-S7)cos,st4=S1+S3+S5+S7 |
fxch st2 |
fstp st0 |
fadd st2,st0 ; st0=val1,st1=val0,st2=val2,st3=S1+S3+S5+S7 |
fld dword [ebx+0*4] |
fld dword [ebx+4*4] |
fsub st1,st0 |
fadd st0,st0 |
fadd st0,st1 ; st0=S0+S4,st1=S0-S4 |
fld dword [ebx+6*4] |
fld dword [ebx+2*4] |
fadd st1,st0 |
fadd st0,st0 |
fsub st0,st1 ; st0=S2-S6,st1=S2+S6 |
fmul [idct_sqrt2] |
fsub st0,st1 |
fsub st3,st0 |
fadd st0,st0 |
fadd st0,st3 ; st0=(S0-S4)+((S2-S6)sqrt2-(S2+S6)) |
; st3=(S0-S4)-((S2-S6)sqrt2-(S2+S6)) |
fxch st1 |
fsub st2,st0 |
fadd st0,st0 |
fadd st0,st2 ; st0=(S0+S4)+(S2+S6),st1=(S0-S4)+((S2-S6)sqrt2-(S2+S6)), |
; st2=(S0+S4)-(S2+S6),st3=(S0-S4)-((S2-S6)sqrt2-(S2+S6)) |
; st4=val1,st5=val0,st6=val2,st7=S1+S3+S5+S7 |
fsubr st7,st0 |
fadd st0,st0 |
fsub st0,st7 |
fistp dword [ebx+0*4] |
fsubr st4,st0 |
fadd st0,st0 |
fsub st0,st4 |
fistp dword [ebx+1*4] |
fadd st4,st0 |
fadd st0,st0 |
fsub st0,st4 |
fistp dword [ebx+3*4] |
fsubr st1,st0 |
fadd st0,st0 |
fsub st0,st1 |
fistp dword [ebx+2*4] |
fistp dword [ebx+5*4] |
fistp dword [ebx+6*4] |
fistp dword [ebx+4*4] |
fistp dword [ebx+7*4] |
add ebx, 32 |
cmp ebx, idct_tmp_area+32*8 |
jb .idct_loop2 |
mov ecx, idct_tmp_area |
mov edi, decoded_data - 1 |
.idct_loop3: |
mov eax, [ecx] |
add ecx, 4 |
add eax, 80h |
cmp eax, 80000000h |
sbb ebx, ebx |
add edi, 1 |
and eax, ebx |
cmp eax, 100h |
sbb ebx, ebx |
not ebx |
or eax, ebx |
sub al, [edx+51] |
cmp ecx, idct_tmp_area+64*4 |
mov [edi], al |
jb .idct_loop3 |
; done |
mov ebx, [_ebx] |
ret |
.eof: |
; EOF or incorrect data during scanning |
mov esp, [_esp] |
mov ebx, [_ebx] |
jmp START.end |
;--------------------------------------------------------------------- |
check_header: |
pushad |
mov eax,dword [esp+36] |
push eax |
and dword [eax+8], 0 |
mov esi, [eax] |
mov ebp, [eax+12] |
call get_marker |
jc .err |
cmp al, 0xD8 |
jnz .err |
pop eax |
popad |
ret 4 |
.err: |
pop eax |
inc dword [eax+8] |
popad |
ret 4 |
;--------------------------------------------------------------------- |
zigzag: |
; (x,y) -> 2*(x+y*8) |
repeat 8 |
.cur = % |
if .cur and 1 |
repeat % |
db 2*((%-1) + (.cur-%)*8) |
end repeat |
else |
repeat % |
db 2*((.cur-%) + (%-1)*8) |
end repeat |
end if |
end repeat |
repeat 7 |
.cur = % |
if .cur and 1 |
repeat 8-% |
db 2*((%+.cur-1) + (8-%)*8) |
end repeat |
else |
repeat 8-% |
db 2*((8-%) + (%+.cur-1)*8) |
end repeat |
end if |
end repeat |
align 4 |
idct_pre_table: |
; c_0 = 1/(2\sqrt{2}), c_i = cos(i*\pi/16)/2 |
dd 0.35355339, 0.49039264, 0.461939766, 0.41573481 |
dd 0.35355339, 0.27778512, 0.19134172, 0.09754516 |
idct_sqrt2 dd 1.41421356 ; \sqrt{2} |
idct_cos dd 1.847759065 ; 2\cos{\pi/8} |
idct_cos_sum dd -2.61312593 ; -2(\cos{\pi/8} + \cos{3\pi/8}) |
idct_cos_diff dd 1.08239220 ; 2(\cos{\pi/8} - \cos{3\pi/8}) |
;--------------------------------------------------------------------- |
Associations: |
dd Associations.end - Associations |
db 'JPEG',0 |
db 'JPG',0 |
db 'JPE',0 |
.end: |
db 0 |
;--------------------------------------------------------------------- |
align 4 |
EXPORTS: |
dd szStart, START |
dd szVersion, 0x00010002 |
dd szCheck, check_header |
dd szAssoc, Associations |
dd 0 |
szStart db 'START',0 |
szVersion db 'version',0 |
szCheck db 'Check_Header',0 |
szAssoc db 'Associations',0 |
section '.data' data readable writable align 16 |
; up to 4 quantization tables |
quant_tables rd 4*64 |
quant_tables_defined rb 4 |
; Huffman tables |
dc_huffman_defined rb 4 |
ac_huffman_defined rb 4 |
; up to 4 DC Huffman tables |
;dc_huffman rd 4*256*2 |
; up to 4 AC Huffman tables |
;ac_huffman rd 4*256*2 |
max_hufftable_size = (256 + (9+128)*16)*2 |
dc_huffman rb 4*max_hufftable_size |
ac_huffman rb 4*max_hufftable_size |
; restart interval |
restart_interval dd ? |
decoded_MCUs dd ? |
; base esp,ebx values |
_esp dd ? |
_ebx dd ? |
; components information, up to 4 components |
; db ComponentIdentifier, db V, db H, db VFactor, db HFactor, db QuantizationTable |
components rb 4*6 |
max_v db ? |
max_h db ? |
cur_rst_marker db ? |
db ? |
huffman_bits dd ? |
block_width dd ? |
block_height dd ? |
block_delta_x dd ? |
block_delta_y dd ? |
cur_block_dx dd ? |
cur_block_dy dd ? |
x_num_blocks dd ? |
y_num_blocks dd ? |
delta_x dd ? |
delta_y dd ? |
pixel_size dd ? |
line_size dd ? |
cur_x dd ? |
cur_y dd ? |
max_x dd ? |
max_y dd ? |
cur_out_ptr dd ? |
dct_buffer dd ? |
dct_buffer_size dd ? |
;ns dd ? |
; +0: db V, db H, db VFactor, db HFactor, dd HIncrement, dd VIncrement, |
; +12: dd QuantizationTable, dd DCTable, dd ACTable, |
; +24: dd width/HFactor, dd width/HFactor-8k, dd HFactor+1-(width%HFactor), |
; +36: dd height/VFactor, dd height/VFactor-8m, dd VFactor+1-(height%VFactor), |
; +48: dw DCPrediction, db ?, db (0 for Y, 80h for Cb,Cr), dd ComponentOffset |
cur_components rb 4*56 |
cur_components_end dd ? |
; progressive JPEG? |
progressive db ? |
; one component in the scan? |
not_interleaved db ? |
; Adobe YCCK file? |
adobe_ycck db ? |
rb 1 |
; parameters for progressive scan |
ScanStart db ? |
ScanEnd db ? |
ApproxPosLow db ? |
ApproxPosHigh db ? |
; Fourier coefficients |
dct_coeff rw 64 |
; Temporary space for IDCT |
idct_tmp_area rd 64 |
; decoded block 8*8 |
decoded_data rb 8*8 |
; data for YCbCr -> RGB translation |
color_table_1 rd 256 |
color_table_2 rd 256 |
color_table_3 rd 256 |
color_table_4 rd 256 |
/programs/media/zsea/plugins/jpeg |
---|
Property changes: |
Added: tsvn:logminsize |
+5 |
\ No newline at end of property |
/programs/media/zsea/plugins/png/build.bat |
---|
0,0 → 1,3 |
@fasm -m 16384 cnv_png.asm cnv_png.obj |
@kpack cnv_png.obj |
@pause |
/programs/media/zsea/plugins/png/build.sh |
---|
0,0 → 1,10 |
#!/bin/bash |
# This script does for Linux the same as build.bat for DOS, |
# it compiles the current KolibriOS applications |
fasm -m 16384 cnv_png.asm cnv_png.obj |
kpack cnv_png.obj |
exit 0 |
/programs/media/zsea/plugins/png/cnv_png.asm |
---|
0,0 → 1,896 |
;***************************************************************************** |
; PNG to RAW convert plugin - for zSea image viewer |
; Copyright (c) 2008-2011, Marat Zakiyanov aka Mario79, aka Mario |
; All rights reserved. |
; |
; Redistribution and use in source and binary forms, with or without |
; modification, are permitted provided that the following conditions are met: |
; * Redistributions of source code must retain the above copyright |
; notice, this list of conditions and the following disclaimer. |
; * Redistributions in binary form must reproduce the above copyright |
; notice, this list of conditions and the following disclaimer in the |
; documentation and/or other materials provided with the distribution. |
; * Neither the name of the <organization> nor the |
; names of its contributors may be used to endorse or promote products |
; derived from this software without specific prior written permission. |
; |
; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY |
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY |
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
;***************************************************************************** |
format MS COFF |
public EXPORTS |
section '.flat' code readable align 16 |
;include 'macros.inc' |
include '../../../../macros.inc' |
;--------------------------------------------------------------------- |
START: |
pushad |
mov eax,dword [esp+36] |
call check_header_1 |
je header_OK |
;--------------------------------------------------------------------- |
no_png_file: |
xor eax,eax |
mov [raw_area],eax |
inc eax ; data corrupt eax = 1 |
jmp header_OK.ret |
;--------------------------------------------------------------------- |
check_header_1: |
mov [pointer],eax |
mov ebx,[eax] |
mov [image_file],ebx |
cmp [ebx],dword 0x474E5089 ; check main label p.1 |
jne @f ;no_png_file |
cmp [ebx+4],dword 0x0A1A0A0D ; check main label p.2 |
ret |
@@: |
add esp,4 |
jmp no_png_file |
;--------------------------------------------------------------------- |
header_OK: |
mov ebx,[eax+12] ; file size |
mov [file_size],ebx |
;--------------------------------------------------------------------- |
mov ebx,[eax+16] |
mov [deflate_unpack],ebx |
;--------------------------------------------------------------------- |
mov ebx,[pointer] |
;--------------------------------------------------------------------- |
xor eax,eax |
; mov [IDAT.pointer],eax |
; mov [IDAT.size],eax |
mov [deflate_start_offset],eax |
mov eax,[image_file] |
mov [next_Chunk],eax |
call search_IHDR |
call search_IDAT |
; call search_IEND |
;--------------------------------------------------------------------- |
mov eax,[IHDR.pointer] |
mov ecx,[eax] ; get width PNG |
call convert_NBO_to_PC |
mov [IHDR_data.Width],ecx ; store width PNG |
mov [Image_Width],ecx |
mov ecx,[eax+4] ; get height PNG |
call convert_NBO_to_PC |
mov [IHDR_data.Height],ecx ; store height PNG |
mov [Image_Height],ecx |
mov ecx,[eax+9] ; Color type |
; Compression method |
; Filter method |
; Interlace method |
mov [IHDR_data.Color_type],ecx |
xor ecx,ecx |
mov cl,[eax+8] ; Bit depth |
mov [IHDR_data.Bit_depth],cl |
;--------------------------------------------------------------------- |
mov al,[eax+9] ; check Color type |
cmp al,byte 0 ; Each pixel is a grayscale sample. |
je .resolution |
cmp al,byte 2 ; Each pixel is an R,G,B triple. |
je .Bit_depth_2 |
cmp al,byte 3 ; Each pixel is a palette index |
; a PLTE chunk must appear. |
jne .no_PLTE |
call search_PLTE |
jmp .resolution |
.no_PLTE: |
cmp al,byte 4 ; Each pixel is a grayscale sample, |
; followed by an alpha sample. |
je .Bit_depth_4 |
cmp al,byte 6 ; Each pixel is an R,G,B triple, |
; followed by an alpha sample. |
jne no_png_file |
;--------------------------------------------------------------------- |
.Bit_depth_6: |
shl ecx,1 |
.Bit_depth_4: |
shl ecx,1 |
jmp .resolution |
.Bit_depth_2: |
lea ecx,[ecx*3] |
.resolution: |
;--------------------------------------------------------------------- |
cmp [IHDR_data.Compression_method], byte 0 ; check Compression method |
jne no_png_file |
cmp [IHDR_data.Filter_method], byte 0 ; check Filtering method |
jne no_png_file |
cmp [IHDR_data.Interlace_method], byte 0 ; No Interlaced |
je @f |
cmp [IHDR_data.Interlace_method], byte 1 ; Interlaced |
jne no_png_file |
@@: |
;--------------------------------------------------------------------- |
mov [resolution],ecx |
imul ecx,[IHDR_data.Width] |
mov edi,ecx |
shr ecx,3 |
test edi,7 |
jz @f |
inc ecx |
@@: |
imul ecx,[IHDR_data.Height] |
cmp [IHDR_data.Color_type],byte 3 |
jne @f |
mov eax,[PLTE.size] |
mov ebx,3 |
xor edx,edx |
div ebx |
shl eax,2 |
add ecx,eax ; PLTE table area |
jmp .RAW_header |
;-------------------------------------- |
@@: |
cmp [IHDR_data.Color_type],byte 0 |
je @f |
cmp [IHDR_data.Color_type],byte 4 |
jne .RAW_header |
@@: |
push ecx |
mov eax,1 |
movzx ecx,byte [IHDR_data.Bit_depth] |
cmp ecx,16 |
jne @f |
shr ecx,1 |
@@: |
shl eax,cl |
shl eax,2 |
pop ecx |
add ecx,eax |
; mov ebx,[pointer] |
; mov [ebx+20],eax |
;-------------------------------------- |
.RAW_header: |
add ecx,44 ; RAW header |
; mov ebx,[pointer] |
; mov [ebx+24],ecx |
; shl ecx,1 |
mcall 68, 12 |
cmp eax,0 |
jne @f |
xor eax,eax |
mov [raw_area],eax ; store pointer of image area |
mov eax,2 ; not enough memory |
jmp .ret |
@@: |
mov [raw_area],eax |
; mov ebx,[pointer] |
; mov [ebx+28],eax |
;--------------------------------------------------------------------- |
mov edi,eax |
xor eax,eax |
shr ecx,2 |
cld |
rep stosd ; clear memory |
;--------------------------------------------------------------------- |
; Create RAW header |
;--------------------------------------------------------------------- |
mov eax,[raw_area] |
mov [eax],dword 'RAW ' |
;--------------------------------------------------------------------- |
mov ecx,[IHDR_data.Width] ; width BMP |
mov [eax+4],ecx ; width RAW |
;--------------------------------------------------------------------- |
mov ecx,[IHDR_data.Height] ; high BMP |
mov [eax+8],ecx ;high RAW |
;--------------------------------------------------------------------- |
mov ecx,[resolution] ; color resolution BMP |
mov [eax+12],ecx ;color resolution RAW |
;--------------------------------------------------------------------- |
xor ecx,ecx |
mov cl,[IHDR_data.Bit_depth] |
mov [eax+16],cx ;channel color resolution RAW |
;--------------------------------------------------------------------- |
mov ecx,[IHDR_data.Color_type] |
xor ebx,ebx |
inc ebx |
cmp cl,byte 0 ; Each pixel is a grayscale sample. |
je .1 |
cmp cl,byte 2 ; Each pixel is an R,G,B triple. |
je .Bit_depth_2_1 |
cmp cl,byte 3 ; Each pixel is a palette index |
; a PLTE chunk must appear. |
je .1 |
cmp cl,byte 4 ; Each pixel is a grayscale sample, |
; followed by an alpha sample. |
je .Bit_depth_4_1 |
cmp cl,byte 6 |
jne no_png_file |
.Bit_depth_6_1: |
shl ebx,1 |
.Bit_depth_4_1: |
shl ebx,1 |
jmp .1 |
.Bit_depth_2_1: |
lea ebx,[ebx*3] |
.1: |
mov [eax+18],bx ; channels amount RAW |
;--------------------------------------------------------------------- |
xor edx,edx |
cmp cl,byte 3 ; Each pixel is a palette index |
; a PLTE chunk must appear. |
je @f |
cmp cl,0 |
je @f |
cmp cl,4 |
jne .no_PLTE_1 |
@@: |
add edx,44 |
mov [eax+20],edx ; palette pointer (offset from file start) |
;--------------------------------------------------------------------- |
cmp cl,0 |
je @f |
cmp cl,4 |
jne .PLTE |
@@: |
mov ecx,256*4 |
jmp .PLTE_1 |
.PLTE: |
push eax |
mov eax,[PLTE.size] |
xor edx,edx |
mov ebx,3 |
div ebx |
shl eax,2 |
mov ecx,eax |
pop eax |
.PLTE_1: |
mov [eax+24],ecx ; palette area size |
jmp @f |
.no_PLTE_1: |
xor ecx,ecx |
@@: |
;--------------------------------------------------------------------- |
add ecx,dword 44 |
mov [eax+28],ecx ; pixels pointer (offset from file start) |
; mov ebx,[pointer] |
; mov [ebx+44],ecx |
;--------------------------------------------------------------------- |
mov ecx, [IHDR_data.Width] ; width BMP |
imul ecx,[resolution] |
mov edi,ecx |
shr ecx,3 |
test edi,7 |
jz @f |
inc ecx |
@@: |
imul ecx,[IHDR_data.Height] ; high BMP |
mov [eax+32],ecx ; pixels area size |
;--------------------------------------------------------------------- |
xor ecx,ecx ; Stub!!! |
mov [eax+36],ecx ;Transparency pointer (offset from file start) |
mov [eax+40],ecx ;Transparency area size |
;--------------------------------------------------------------------- |
; Finish create RAW header |
;--------------------------------------------------------------------- |
mov eax,[raw_area] |
mov edi,[eax+20] ; palette pointer (offset from file start) |
add edi,eax |
mov esi,[PLTE.pointer] |
mov eax,[PLTE.size] |
xor edx,edx |
mov ebx,3 |
div ebx |
mov ecx,eax |
mov eax,[IHDR_data.Color_type] |
cmp al,byte 0 |
je .grayscale_palette |
cmp al,byte 4 |
je .grayscale_palette |
cmp al,byte 3 ; Each pixel is a palette index |
; a PLTE chunk must appear. |
jne .no_palette |
@@: |
cld |
lodsd |
dec esi |
and eax,0xffffff |
mov bl,al |
shr eax,8 |
xchg ah,bl |
shl eax,8 |
mov al,bl |
cld |
stosd |
dec ecx |
jnz @r |
jmp .no_palette |
;------------------------------- |
.grayscale_palette: |
; cmp [IHDR_data.Bit_depth], dword 1 |
; jne @f |
; xor eax,eax |
; cld |
; stosd |
; dec eax |
; and eax,0xffffff |
; cld |
; stosd |
; jmp .no_palette |
@@: |
mov eax,1 |
mov ecx,[resolution] |
cmp ecx,8 |
jbe @f |
mov ecx,8 |
@@: |
shl eax,cl |
mov ecx,eax |
mov eax,256 |
; mov ebx,[resolution] |
xor edx,edx |
div ecx ;ebx |
mov edx,eax |
cmp edx,0 |
jne @f |
inc edx |
@@: |
xor eax,eax |
; mov eax,0xffffff |
; mov ecx,256 |
@@: |
cld |
stosd |
; inc ah |
add ah,dl |
; inc al |
add al,dl |
shl eax,8 |
mov al,ah |
; dec ah |
; dec al |
; shl eax,8 |
; mov al,ah |
and eax,0xffffff |
dec ecx |
jnz @r |
sub edi,4 |
xor eax,eax |
dec eax |
and eax,0xffffff |
cld |
stosd |
;------------------------------- |
.no_palette: |
;--------------------------------------------------------------------- |
mov ebx,[IDAT.pointer] |
mov al,[ebx] |
mov [IDAT_CMF],al ; Compression Method and flags |
mov ah,al |
and al,1111b |
mov [IDAT_ÑÌ],al ; Compression method |
shr ah,4 |
mov [IDAT_CINFO],ah ; Compression info |
mov al,[ebx+1] |
mov [IDAT_FLG],al ; FLaGs |
mov ah,al |
and al,11111b |
mov [IDAT_FCHECK],al |
mov al,ah |
and al,100000b |
shr al,5 |
mov [IDAT_FDICT],al ; Preset dictionary |
shr ah,6 |
mov [IDAT_FLEVEL],ah ; Compression level |
mov al,[IDAT_ÑÌ] |
; test al,1000b ; Compression method = 8 ? |
cmp al,8 |
jnz no_png_file |
add [IDAT.pointer],2 |
sub [IDAT.size],2 |
; xor eax,eax |
; mov ah,[IDAT_FLG] |
; mov al,[IDAT_CMF] |
; imul eax,31 |
; shr eax,16 |
; cmp [IDAT_FCHECK],al |
; jne no_png_file |
; |
; cmp [IDAT_FDICT],1 |
; jne .no_IDAT_FDICT |
; mov ecx,[ebx+2] |
; jmp .IDAT_DICT |
;.no_IDAT_FDICT: |
; mov eax,[IDAT.pointer] |
; add eax,[IDAT.size] |
; mov ecx,[eax] |
;.IDAT_DICT: |
; call convert_NBO_to_PC |
; mov [IDAT_DICT],ecx |
; jmp .ret_ok |
; jmp no_png_file |
; mov ecx,[file_size] |
; mcall 68, 12 |
; mov [IDAT_raw_area],eax ; store pointer of image area |
;--------------------------------------------------------------------- |
.start_Deflate_unpack: |
push eax ; âûäåëÿåì â ñòåêå ïåðåìåííóþ äëÿ *pUnpackedLength |
; ïîñêîëüêó çíà÷åíèå íåâàæíî, êîðî÷å è áûñòðåå âñåãî |
; ñäåëàòü ýòî îäíîáàéòîâûì push <ðåãèñòð> |
push esp ; à âîò è ñàì óêàçàòåëü pUnpackedLength |
push esi ; êàêîé-íèáóäü ïàðàìåòð |
push deflate_callback |
call [deflate_unpack] |
pop ecx ; âûòàëêèâàåì UnpackedLength |
; êàê è â ïåðâîì ñëó÷àå, eax = óêàçàòåëü íà ðàñïàêîâàííûå äàííûå, ecx = ðàçìåð |
mov [unpacked_data],eax |
mov esi,eax |
;--------------------------------------------------------------------- |
mov eax,[raw_area] |
mov edi,[eax+28] ; pixels pointer (offset from file start) |
add edi,eax |
; mov ecx,edx |
sub ecx,[IHDR_data.Height] |
mov [first_line],byte 1 |
cmp [IHDR_data.Color_type],byte 0 |
je .PLTE_and_grayscale |
cmp [IHDR_data.Color_type],byte 3 |
je .PLTE_and_grayscale |
cmp [IHDR_data.Color_type],byte 4 |
je .PLTE_and_grayscale |
;--------------------------------------------------------------------- |
; Processing filtering RGB; type 2 and 6, sample 8b |
;--------------------------------------------------------------------- |
mov eax,ecx |
; sub eax,[IHDR_data.Height] |
xor edx,edx |
mov ebx,3 |
cmp [IHDR_data.Color_type],byte 6 |
jne @f |
inc ebx |
@@: |
cmp [IHDR_data.Bit_depth],byte 16 |
jne @f |
shl ebx,1 |
@@: |
div ebx |
mov ecx,eax |
cmp [IHDR_data.Bit_depth],byte 16 |
je .filter_Bit_depth_16 |
; jmp .ret_ok |
;--------------------------------------------------------------------- |
cmp [IHDR_data.Interlace_method], byte 0 ; Interlaced |
je @f |
call filtering_RGB_Interlaced |
jmp .converting_MSB_to_LSB |
@@: |
;--------------------------------------------------------------------- |
push edi |
call filtering_RGB |
pop edi |
;--------------------------------------------------------------------- |
; converting MSB to LSB |
; 24b = 1B x 3 sample |
; 32b = 1B x 4 sample |
.converting_MSB_to_LSB: |
call .calculate_all_pixels |
mov ebx,3 |
cmp [IHDR_data.Color_type],byte 6 |
jne @f |
inc ebx |
@@: |
sub edi,ebx |
@@: |
add edi,ebx |
mov al,[edi] |
mov ah,[edi+2] |
mov [edi+2],al |
mov [edi],ah |
dec ecx |
jnz @r |
jmp .ret_ok |
;--------------------------------------------------------------------- |
.calculate_all_pixels: |
mov ecx,[Image_Height] |
imul ecx,[Image_Width] |
ret |
;--------------------------------------------------------------------- |
; Processing filtering RGB; type 2 and 6, sample 16b |
;--------------------------------------------------------------------- |
.filter_Bit_depth_16: |
cmp [IHDR_data.Interlace_method], byte 0 ; Interlaced |
je @f |
call filtering_RGB_16_Interlaced |
jmp .converting_MSB_to_LSB_16 |
@@: |
;--------------------------------------------------------------------- |
push edi |
call filtering_RGB_16 |
pop edi |
;--------------------------------------------------------------------- |
; converting MSB to LSB 48 or 64b |
; 48b = 2B x 3 sample |
; 64b = 2B x 4 sample |
.converting_MSB_to_LSB_16: |
call .calculate_all_pixels |
mov ebx,3 |
cmp [IHDR_data.Color_type],byte 6 |
jne @f |
inc ebx |
@@: |
shl ebx,1 |
sub edi,ebx |
@@: |
add edi,ebx |
mov ax,[edi] |
xchg al,ah |
shl eax,16 |
mov ax,[edi+4] |
xchg al,ah |
mov [edi],ax |
shr eax,16 |
mov [edi+4],ax |
mov ax,[edi+2] |
xchg al,ah |
mov [edi+2],ax |
; mov ax,[edi+6] |
; xchg al,ah |
; mov [edi+6],al |
dec ecx |
jnz @r |
jmp .ret_ok |
;--------------------------------------------------------------------- |
; Processing filtering Grayscale and RGB; type 2, 3 and 4, sample 8b |
;--------------------------------------------------------------------- |
.PLTE_and_grayscale: |
cmp [IHDR_data.Color_type],byte 4 |
jne @f |
shr ecx,1 |
@@: |
cmp [IHDR_data.Bit_depth],byte 16 |
jne @f |
shr ecx,1 |
jmp .filter_grayscale_Bit_depth_16_1 |
@@: |
;--------------------------------------------------------------------- |
cmp [IHDR_data.Interlace_method], byte 0 ; Interlaced |
je @f |
call filtering_grayscale_Interlaced |
jmp .continue_1 |
@@: |
;--------------------------------------------------------------------- |
push edi |
call filtering_grayscale |
pop edi |
;--------------------------------------------------------------------- |
.continue_1: |
cmp [IHDR_data.Color_type],byte 4 |
jne .ret_ok |
;------------------------------- |
; 8b or less |
mov esi,edi |
call .calculate_all_pixels |
.convert_transp_to_notransp: |
cld |
lodsw |
stosb |
dec ecx |
jnz .convert_transp_to_notransp |
jmp .ret_ok |
;--------------------------------------------------------------------- |
; Processing filtering Grayscale and RGB; type 2, 3 and 4, sample 16b |
;--------------------------------------------------------------------- |
.filter_grayscale_Bit_depth_16_1: |
cmp [IHDR_data.Interlace_method], byte 0 ; Interlaced |
je @f |
call filtering_grayscale_16_Interlaced |
jmp .continue_2 |
@@: |
;--------------------------------------------------------------------- |
push edi |
call filtering_grayscale_16 |
pop edi |
;--------------------------------------------------------------------- |
.continue_2: |
cmp [IHDR_data.Color_type],byte 4 |
jne .ret_ok |
;------------------------------- |
; 16b |
mov esi,edi |
call .calculate_all_pixels |
.convert_transp_to_notransp_1: |
cld |
lodsd |
stosw |
dec ecx |
jnz .convert_transp_to_notransp_1 |
;--------------------------------------------------------------------- |
.ret_ok: |
mov ecx,[unpacked_data] |
mcall 68, 13, |
xor eax,eax |
;--------------------------------------------------------------------- |
.ret: |
mov ebx,[pointer] |
mov [ebx+8],eax ; store return code |
mov eax,[raw_area] |
mov [ebx+4],eax ; store RAW pointer |
popad |
ret 4 |
;--------------------------------------------------------------------- |
include 'filter.inc' |
include 'proced.inc' |
include 'fl_call.inc' |
include 'interlac.inc' |
;--------------------------------------------------------------------- |
Check_Header: |
pushad |
mov eax,dword [esp+36] |
call check_header_1 |
jne no_png_file |
popad |
ret 4 |
;--------------------------------------------------------------------- |
Associations: |
dd Associations.end - Associations |
db 'PNG',0 |
.end: |
db 0 |
;--------------------------------------------------------------------- |
align 4 |
EXPORTS: |
dd szStart, START |
dd szVersion, 0x00010002 |
dd szCheck, Check_Header |
dd szAssoc, Associations |
dd 0 |
szStart db 'START',0 |
szVersion db 'version',0 |
szCheck db 'Check_Header',0 |
szAssoc db 'Associations',0 |
;***************************************************************************** |
; Chunks names |
;***************************************************************************** |
; Critical chunks |
IHDR_name: db 'IHDR' ; Image header |
PLTE_name: db 'PLTE' ; Palette |
IDAT_name: db 'IDAT' ; Image data |
IEND_name: db 'IEND' ; Image trailer |
; Ancillary chunks |
;tRNS_name: db 'tRNS' ; Transparency |
;; Color space information |
;gAMA_name: db 'gAMA' ; Image gamma |
;cHRM_name: db 'cHRM' ; Primary chromaticities |
;sRGB_name: db 'sRGB' ; Standard RGB color space |
;iCCP_name: db 'iCCP' ; Embedded ICC profile |
;; Textual information |
;tEXt_name: db 'tEXt' ; Textual data |
;zTXt_name: db 'zTXt' ; Compressed textual data |
;iTXt_name: db 'iTXt' ; International textual data |
;; Miscellaneous information |
;bKGD_name: db 'bKGD' ; Background color |
;pHYs_name: db 'pHYs' ; Physical pixel dimensions |
;sBIT_name: db 'sBIT' ; Significant bits |
;sPLT_name: db 'sPLT' ; Suggested palette |
;hIST_name: db 'hIST' ; Palette histogram |
;tIME_name: db 'tIME' ; Imagelast-modification time |
;***************************************************************************** |
calculate_Interlaced_counters: |
.1: dd calculate_Interlaced_1 |
.2: dd calculate_Interlaced_2 |
.3: dd calculate_Interlaced_3 |
.4: dd calculate_Interlaced_4 |
.5: dd calculate_Interlaced_5 |
.6: dd calculate_Interlaced_6 |
.7: dd calculate_Interlaced_7 |
deflate_start_offset dd 0 |
pointer dd 0 |
image_file dd 0 |
file_size dd 0 |
raw_area dd 0 |
resolution dd 0 |
Chunk_pointer dd 0 |
next_Chunk dd 0 |
deflate_unpack dd 0 |
unpacked_data dd 0 |
;IDAT_raw_area dd 0 |
;IDAT_raw_counter dd 0 |
Interlaced_area dd 0 |
Starting_Row: dd 0 |
Starting_Col: dd 0 |
Row_Increment: dd 0 |
Col_Increment: dd 0 |
Interlaced_step dd 0 |
counter_IDAT_Chunk dd 0 |
;CRC32 dd 0 |
;CRC32table: rd 256 |
;Adler32 dd 0 |
Image_Width dd 0 |
Image_Height dd 0 |
IHDR_data: |
.Width dd 0 ;+0 |
.Height dd 0 ;+4 |
.Bit_depth: db 0 ;+8 |
.Color_type: db 0 ;+9 |
.Compression_method: db 0 ;+10 |
.Filter_method: db 0 ;+11 |
.Interlace_method: db 0 ;+12 |
IDAT_CMF db 0 ; Compression Method and flags |
IDAT_ÑÌ db 0 ; Compression method |
IDAT_CINFO db 0 ; Compression info |
IDAT_FLG db 0 ; FLaGs |
IDAT_FCHECK db 0 ; |
IDAT_FDICT db 0 ; Preset dictionary |
IDAT_FLEVEL db 0 ; Compression level |
; "deflate" method (CM = 8) sets these flags: |
; 0 - compressor used fastest algorithm |
; 1 - compressor used fast algorithm |
; 2 - compressor used default algorithm |
; 3 - compressor used maximum compression, slowest algorithm |
IDAT_DICT dd 0 ; dictionary identifier = Adler-32 checksum |
BFINAL db 0 ; set 1 only if this is the last block of the data set |
BTYPE db 0 ; specifies how the data are compressed: |
; 00 - no compression |
; 01 - compressed with fixed Huffman codes |
; 10 - compressed with dynamic Huffman codes |
; 11 - reserved (error) |
line_filter_type dd 0 ; 0 None |
; 1 Sub |
; 2 Up |
; 3 Averag |
; 4 Paeth |
first_line db 0 |
first_pixel db 0 |
previous_pixel_value: |
rb 8 |
Paeth_filter: |
.a: dw 0 |
.b: dw 0 |
.c: dw 0 |
.p dd 0 |
.pa dd 0 |
.pb dd 0 |
.pc dd 0 |
;***************************************************************************** |
; Chunks pointer |
;***************************************************************************** |
IHDR: |
.pointer dd 0 |
.size dd 0 |
PLTE: |
.pointer dd 0 |
.size dd 0 |
IDAT: |
.pointer dd 0 |
.size dd 0 |
IEND: |
.pointer dd 0 |
.size dd 0 |
;tRNS: |
;.pointer dd 0 |
;.size dd 0 |
;gAMA: |
;.pointer dd 0 |
;.size dd 0 |
;cHRM: |
;.pointer dd 0 |
;.size dd 0 |
;sRGB: |
;.pointer dd 0 |
;.size dd 0 |
;iCCP: |
;.pointer dd 0 |
;.size dd 0 |
;tEXt: |
;.pointer dd 0 |
;.size dd 0 |
;zTXt: |
;.pointer dd 0 |
;.size dd 0 |
;iTXt: |
;.pointer dd 0 |
;.size dd 0 |
;bKGD: |
;.pointer dd 0 |
;.size dd 0 |
;pHYs: |
;.pointer dd 0 |
;.size dd 0 |
;sBIT: |
;.pointer dd 0 |
;.size dd 0 |
;sPLT: |
;.pointer dd 0 |
;.size dd 0 |
;hIST: |
;.pointer dd 0 |
;.size dd 0 |
;tIME: |
;.pointer dd 0 |
;.size dd 0 |
/programs/media/zsea/plugins/png/filter.inc |
---|
0,0 → 1,472 |
;***************************************************************************** |
; PNG to RAW convert plugin - for zSea image viewer |
; Copyright (c) 2008, 2009, Marat Zakiyanov aka Mario79, aka Mario |
; All rights reserved. |
; |
; Redistribution and use in source and binary forms, with or without |
; modification, are permitted provided that the following conditions are met: |
; * Redistributions of source code must retain the above copyright |
; notice, this list of conditions and the following disclaimer. |
; * Redistributions in binary form must reproduce the above copyright |
; notice, this list of conditions and the following disclaimer in the |
; documentation and/or other materials provided with the distribution. |
; * Neither the name of the <organization> nor the |
; names of its contributors may be used to endorse or promote products |
; derived from this software without specific prior written permission. |
; |
; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY |
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY |
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
;--------------------------------------------------------------------- |
filtering: |
push eax ecx edx |
mov ebp,[line_filter_type] |
cmp ebp,0 |
je .end |
cmp ebp,1 |
je .Sub |
cmp ebp,2 |
je .Up |
cmp ebp,3 |
je .Averag |
cmp ebp,4 |
je .Paeth |
jmp .end |
;--------------------------------------------------------------------- |
.Sub: |
cmp [IHDR_data.Bit_depth],byte 16 |
jne @f |
mov eax,ebx |
shr eax,16 |
add bl,al |
add bh,ah |
jmp .end |
@@: |
add bl,bh |
jmp .end |
;--------------------------------------------------------------------- |
.Up: |
cmp [first_line],byte 0 |
jne .end |
mov eax,[IHDR_data.Width] |
cmp [IHDR_data.Color_type],byte 0 |
je .Up_Color_type_0_and_3 |
cmp [IHDR_data.Color_type],byte 3 |
je .Up_Color_type_0_and_3 |
cmp [IHDR_data.Color_type],byte 4 |
je @f |
lea eax,[eax*3] |
@@: |
cmp [IHDR_data.Color_type],byte 4 |
je .Up_Alpfa |
cmp [IHDR_data.Color_type],byte 6 |
jne @f |
.Up_Alpfa: |
add eax,[IHDR_data.Width] |
@@: |
.Up_8: |
cmp [IHDR_data.Bit_depth],byte 16 |
je .Up_16 |
mov ebp,edi |
sub ebp,eax |
mov bh,[ebp] |
add bl,bh |
jmp .end |
.Up_Color_type_0_and_3: |
cmp [IHDR_data.Bit_depth],byte 16 |
je .Up_16 |
call .Bit_depth_less_8 |
jmp .Up_8 |
.Bit_depth_less_8: |
; imul eax,[resolution] |
cmp [resolution],8 |
jne @f |
ret |
@@: |
cmp [resolution],4 |
jne @f |
shl eax,2 |
jmp .continue_Bit_depth_less_8 |
@@: |
cmp [resolution],2 |
jne .continue_Bit_depth_less_8 |
shl eax,1 |
.continue_Bit_depth_less_8: |
push ebx |
mov ebx,eax |
shr eax,3 |
test ebx,7 |
jz @f |
inc eax |
@@: |
pop ebx |
ret |
.Up_16: |
shl eax,1 |
mov ebp,edi |
sub ebp,eax |
mov ax,[ebp] |
add bl,al |
add bh,ah |
jmp .end |
;--------------------------------------------------------------------- |
.Averag: |
cmp [first_line],byte 0 |
je @f |
xor eax,eax |
cmp [IHDR_data.Bit_depth],byte 16 |
je .Averag_2 |
jmp .Averag_1 |
@@: |
mov eax,[IHDR_data.Width] |
cmp [IHDR_data.Color_type],byte 0 |
je .Averag_Color_type_0_and_3 ;@f |
cmp [IHDR_data.Color_type],byte 3 |
je .Averag_Color_type_0_and_3 ;@f |
cmp [IHDR_data.Color_type],byte 4 |
je @f |
lea eax,[eax*3] |
@@: |
cmp [IHDR_data.Color_type],byte 4 |
je .Averag_Alpfa |
cmp [IHDR_data.Color_type],byte 6 |
jne @f |
.Averag_Alpfa: |
add eax,[IHDR_data.Width] |
@@: |
.Averag_8: |
cmp [IHDR_data.Bit_depth],byte 16 |
je .Averag_16 |
mov ebp,edi |
sub ebp,eax |
xor eax,eax |
mov al,[ebp] |
.Averag_1: |
movzx ebp,bh |
add eax,ebp |
shr eax,1 |
add bl,al |
jmp .end |
.Averag_Color_type_0_and_3: |
cmp [IHDR_data.Bit_depth],byte 16 |
je .Averag_16 |
call .Bit_depth_less_8 |
jmp .Averag_8 |
.Averag_16: |
shl eax,1 |
mov ebp,edi |
sub ebp,eax |
xor eax,eax |
mov ax,[ebp] |
.Averag_2: |
mov ebp,ebx |
shr ebp,16 |
mov ecx,ebp |
and ecx,0xff |
mov edx,eax |
and edx,0xff |
add ecx,edx |
shr ecx,1 |
add bl,cl |
shr ebp,8 |
shr eax,8 |
add eax,ebp |
shr eax,1 |
add bh,al |
jmp .end |
;--------------------------------------------------------------------- |
.Paeth: |
cmp [first_line],byte 0 |
je @f |
xor eax,eax |
cmp [IHDR_data.Bit_depth],byte 16 |
je .Paeth_16_1 |
jmp .Paeth_1 |
@@: |
mov eax,[IHDR_data.Width] |
cmp [IHDR_data.Color_type],byte 0 |
je .Paeth_Color_type_0_and_3 ;@f |
cmp [IHDR_data.Color_type],byte 3 |
je .Paeth_Color_type_0_and_3 ;@f |
cmp [IHDR_data.Color_type],byte 4 |
je @f |
lea eax,[eax*3] |
@@: |
cmp [IHDR_data.Color_type],byte 4 |
je .Paeth_Alpfa |
cmp [IHDR_data.Color_type],byte 6 |
jne @f |
.Paeth_Alpfa: |
add eax,[IHDR_data.Width] |
@@: |
cmp [IHDR_data.Bit_depth],byte 16 |
je .Paeth_16 |
.Paeth_8: |
mov ebp,edi |
sub ebp,eax |
xor eax,eax |
mov al,[ebp] |
.Paeth_1: |
mov [Paeth_filter.b],al |
cmp [first_line],byte 0 |
jne @f |
cmp [first_pixel],0 |
jne @f |
mov ah,[ebp-1] |
cmp [IHDR_data.Color_type],byte 0 |
je @f |
cmp [IHDR_data.Color_type],byte 3 |
je @f |
mov ah,[ebp-2] |
cmp [IHDR_data.Color_type],byte 4 |
je @f |
mov ah,[ebp-3] |
cmp [IHDR_data.Color_type],byte 2 |
je @f |
mov ah,[ebp-4] |
@@: |
mov [Paeth_filter.c],ah |
mov [Paeth_filter.a],bh |
xor eax,eax |
mov al,[Paeth_filter.a] |
mov ebp,eax |
mov al,[Paeth_filter.b] |
add ebp,eax |
mov al,[Paeth_filter.c] |
sub ebp,eax |
mov [Paeth_filter.p],ebp |
;---------------------------------------- |
mov al,[Paeth_filter.a] |
sub ebp,eax |
test ebp,0x80000000 |
jz @f |
neg ebp |
@@: |
mov [Paeth_filter.pa],ebp |
mov ebp,[Paeth_filter.p] |
mov al,[Paeth_filter.b] |
sub ebp,eax |
test ebp,0x80000000 |
jz @f |
neg ebp |
@@: |
mov [Paeth_filter.pb],ebp |
mov ebp,[Paeth_filter.p] |
mov al,[Paeth_filter.c] |
sub ebp,eax |
test ebp,0x80000000 |
jz @f |
neg ebp |
@@: |
mov [Paeth_filter.pc],ebp |
mov eax,[Paeth_filter.pa] |
mov ebp,[Paeth_filter.pb] |
cmp eax,ebp |
ja .no_return_a |
cmp eax,[Paeth_filter.pc] |
ja .no_return_a |
add bl,[Paeth_filter.a] |
jmp .end |
.no_return_a: |
cmp ebp,[Paeth_filter.pc] |
ja .no_return_b |
add bl,[Paeth_filter.b] |
jmp .end |
.no_return_b: |
add bl,[Paeth_filter.c] |
.end: |
pop edx ecx eax |
ret |
;---------------------------------------- |
.Paeth_Color_type_0_and_3: |
cmp [IHDR_data.Bit_depth],byte 16 |
je .Paeth_16 |
call .Bit_depth_less_8 |
jmp .Paeth_8 |
;---------------------------------------- |
.Paeth_16: |
shl eax,1 |
mov ebp,edi |
sub ebp,eax |
xor eax,eax |
mov ax,[ebp] |
.Paeth_16_1: |
mov [Paeth_filter.b],ax |
xor eax,eax |
cmp [first_line],byte 0 |
jne @f |
cmp [first_pixel],0 |
jne @f |
mov ax,[ebp-2] |
cmp [IHDR_data.Color_type],byte 0 |
je @f |
mov ax,[ebp-4] |
cmp [IHDR_data.Color_type],byte 4 |
je @f |
mov ax,[ebp-6] |
cmp [IHDR_data.Color_type],byte 2 |
je @f |
mov ax,[ebp-8] |
@@: |
mov [Paeth_filter.c],ax |
mov eax,ebx |
shr eax,16 |
mov [Paeth_filter.a],ax |
;---------------------------------------- |
xor eax,eax |
mov ax,[Paeth_filter.a] |
shr ax,8 |
mov bp,ax |
mov ax,[Paeth_filter.b] |
shr ax,8 |
add bp,ax |
mov ax,[Paeth_filter.c] |
shr ax,8 |
sub bp,ax |
shl ebp,16 |
xor eax,eax |
mov al,[Paeth_filter.a] |
mov bp,ax |
mov al,[Paeth_filter.b] |
add bp,ax |
mov al,[Paeth_filter.c] |
sub bp,ax |
mov [Paeth_filter.p],ebp |
;---------------------------------------- |
xor eax,eax |
mov ax,[Paeth_filter.a] |
mov ecx,ebp |
mov dx,ax |
shr ecx,16 |
shr dx,8 |
sub cx,dx |
test cx,0x8000 |
jz @f |
neg cx |
@@: |
shl ecx,16 |
and ebp,0xffff |
and eax,0xff |
sub bp,ax |
test bp,0x8000 |
jz @f |
neg bp |
@@: |
add ebp,ecx |
mov [Paeth_filter.pa],ebp |
;---------------------------------------- |
xor eax,eax |
mov ebp,[Paeth_filter.p] |
mov ax,[Paeth_filter.b] |
mov ecx,ebp |
mov dx,ax |
shr ecx,16 |
shr dx,8 |
sub cx,dx |
test cx,0x8000 |
jz @f |
neg cx |
@@: |
shl ecx,16 |
and ebp,0xffff |
and eax,0xff |
sub bp,ax |
test bp,0x8000 |
jz @f |
neg bp |
@@: |
add ebp,ecx |
mov [Paeth_filter.pb],ebp |
;---------------------------------------- |
xor eax,eax |
mov ebp,[Paeth_filter.p] |
mov ax,[Paeth_filter.c] |
mov ecx,ebp |
mov dx,ax |
shr ecx,16 |
shr dx,8 |
sub cx,dx |
test cx,0x8000 |
jz @f |
neg cx |
@@: |
shl ecx,16 |
and ebp,0xffff |
and eax,0xff |
sub bp,ax |
test bp,0x8000 |
jz @f |
neg bp |
@@: |
add ebp,ecx |
mov [Paeth_filter.pc],ebp |
;---------------------------------------- |
mov eax,[Paeth_filter.pa] |
mov ebp,[Paeth_filter.pb] |
mov ecx,[Paeth_filter.pc] |
shr eax,16 |
shr ebp,16 |
shr ecx,16 |
cmp ax,bp |
ja .no_return_a_1 |
cmp ax,cx |
ja .no_return_a_1 |
mov ax,[Paeth_filter.a] |
add bh,ah |
jmp .end_1 |
.no_return_a_1: |
cmp bp,cx |
ja .no_return_b_1 |
mov ax,[Paeth_filter.b] |
add bh,ah |
jmp .end_1 |
.no_return_b_1: |
mov ax,[Paeth_filter.c] |
add bh,ah |
.end_1: |
;---------------------------------------- |
mov eax,[Paeth_filter.pa] |
mov ebp,[Paeth_filter.pb] |
mov ecx,[Paeth_filter.pc] |
cmp ax,bp |
ja .no_return_a_2 |
cmp ax,cx |
ja .no_return_a_2 |
add bl,[Paeth_filter.a] |
jmp .end_2 |
.no_return_a_2: |
cmp bp,cx |
ja .no_return_b_2 |
add bl,[Paeth_filter.b] |
jmp .end_2 |
.no_return_b_2: |
add bl,[Paeth_filter.c] |
.end_2: |
pop edx ecx eax |
ret |
;--------------------------------------------------------------------- |
/programs/media/zsea/plugins/png/fl_call.inc |
---|
0,0 → 1,225 |
;***************************************************************************** |
; PNG to RAW convert plugin - for zSea image viewer |
; Copyright (c) 2008, 2009, Marat Zakiyanov aka Mario79, aka Mario |
; All rights reserved. |
; |
; Redistribution and use in source and binary forms, with or without |
; modification, are permitted provided that the following conditions are met: |
; * Redistributions of source code must retain the above copyright |
; notice, this list of conditions and the following disclaimer. |
; * Redistributions in binary form must reproduce the above copyright |
; notice, this list of conditions and the following disclaimer in the |
; documentation and/or other materials provided with the distribution. |
; * Neither the name of the <organization> nor the |
; names of its contributors may be used to endorse or promote products |
; derived from this software without specific prior written permission. |
; |
; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY |
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY |
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
;--------------------------------------------------------------------- |
filtering_RGB: |
mov ecx,[IHDR_data.Height] |
test ecx,ecx |
jz .filter_end |
.filter: |
mov edx,[IHDR_data.Width] |
test edx,edx |
jz .filter_end |
xor eax,eax |
mov [previous_pixel_value],eax |
mov [first_pixel],byte 1 |
mov al,[esi] |
mov [line_filter_type],eax |
inc esi |
.filter_x: |
mov bh,[previous_pixel_value] |
call filtering_sample_8 |
mov [previous_pixel_value],bl |
mov bh,[previous_pixel_value+1] |
call filtering_sample_8 |
mov [previous_pixel_value+1],bl |
mov bh,[previous_pixel_value+2] |
call filtering_sample_8 |
mov [previous_pixel_value+2],bl |
cmp [IHDR_data.Color_type],byte 6 |
jne @f |
mov bh,[previous_pixel_value+3] |
call filtering_sample_8 |
mov [previous_pixel_value+3],bl |
@@: |
mov [first_pixel],byte 0 |
dec edx |
jnz .filter_x |
mov [first_line],byte 0 |
dec ecx |
jnz .filter |
.filter_end: |
ret |
;------------------------------- |
filtering_sample_8: |
cld |
lodsb |
mov bl,al |
call filtering |
mov al,bl |
cld |
stosb |
ret |
;--------------------------------------------------------------------- |
filtering_RGB_16: |
mov ecx,[IHDR_data.Height] |
test ecx,ecx |
jz .filter_end_16 |
.filter_16: |
mov edx,[IHDR_data.Width] |
test edx,edx |
jz .filter_end_16 |
xor eax,eax |
mov [previous_pixel_value],eax |
mov [previous_pixel_value+4],eax |
mov [first_pixel],byte 1 |
mov al,[esi] |
mov [line_filter_type],eax |
inc esi |
.filter_x_16: |
mov bx,[previous_pixel_value] |
call filtering_sample_16 |
mov [previous_pixel_value],bx |
mov bx,[previous_pixel_value+2] |
call filtering_sample_16 |
mov [previous_pixel_value+2],bx |
mov bx,[previous_pixel_value+4] |
call filtering_sample_16 |
mov [previous_pixel_value+4],bx |
cmp [IHDR_data.Color_type],byte 6 |
jne @f |
mov bx,[previous_pixel_value+6] |
call filtering_sample_16 |
mov [previous_pixel_value+6],bx |
@@: |
mov [first_pixel],byte 0 |
dec edx |
jnz .filter_x_16 |
mov [first_line],byte 0 |
dec ecx |
jnz .filter_16 |
.filter_end_16: |
ret |
;------------------------------- |
filtering_sample_16: |
shl ebx,16 |
cld |
lodsw |
mov bx,ax |
call filtering |
mov ax,bx |
cld |
stosw |
ret |
;--------------------------------------------------------------------- |
filtering_grayscale: |
mov ecx,[IHDR_data.Height] |
test ecx,ecx |
jz .filter_end_grayscale |
mov edx,[IHDR_data.Width] |
test edx,edx |
jz .filter_end_grayscale |
cmp [IHDR_data.Color_type],byte 4 |
je @f |
imul edx,[resolution] |
mov eax,edx |
shr edx,3 |
test eax,7 |
jz @f |
inc edx |
@@: |
.filter_grayscale: |
push edx |
xor eax,eax |
mov [previous_pixel_value],eax |
mov [first_pixel],byte 1 |
mov al,[esi] |
mov [line_filter_type],eax |
inc esi |
.filter_x_grayscale: |
mov bh,[previous_pixel_value] |
call filtering_sample_8 |
mov [previous_pixel_value],bl |
cmp [IHDR_data.Color_type],byte 4 |
jne @f |
mov bh,[previous_pixel_value+1] |
call filtering_sample_8 |
mov [previous_pixel_value+1],bl |
@@: |
mov [first_pixel],byte 0 |
dec edx |
jnz .filter_x_grayscale |
pop edx |
mov [first_line],byte 0 |
dec ecx |
jnz .filter_grayscale |
.filter_end_grayscale: |
ret |
;--------------------------------------------------------------------- |
filtering_grayscale_16: |
mov ecx,[IHDR_data.Height] |
test ecx,ecx |
jz .filter_end_grayscale_16 |
.filter_grayscale_Bit_depth_16: |
mov edx,[IHDR_data.Width] |
test edx,edx |
jz .filter_end_grayscale_16 |
xor eax,eax |
mov [previous_pixel_value],eax |
mov [first_pixel],byte 1 |
mov al,[esi] |
mov [line_filter_type],eax |
inc esi |
.filter_x_grayscale_16: |
mov bx,[previous_pixel_value] |
call filtering_sample_16 |
mov [previous_pixel_value],bx |
cmp [IHDR_data.Color_type],byte 4 |
jne @f |
mov bx,[previous_pixel_value+2] |
call filtering_sample_16 |
mov [previous_pixel_value+2],bx |
@@: |
mov [first_pixel],byte 0 |
dec edx |
jnz .filter_x_grayscale_16 |
mov [first_line],byte 0 |
dec ecx |
jnz .filter_grayscale_Bit_depth_16 |
.filter_end_grayscale_16: |
ret |
;--------------------------------------------------------------------- |
/programs/media/zsea/plugins/png/interlac.inc |
---|
0,0 → 1,1089 |
;***************************************************************************** |
; PNG to RAW convert plugin - for zSea image viewer |
; Copyright (c) 2008, 2009, Marat Zakiyanov aka Mario79, aka Mario |
; All rights reserved. |
; |
; Redistribution and use in source and binary forms, with or without |
; modification, are permitted provided that the following conditions are met: |
; * Redistributions of source code must retain the above copyright |
; notice, this list of conditions and the following disclaimer. |
; * Redistributions in binary form must reproduce the above copyright |
; notice, this list of conditions and the following disclaimer in the |
; documentation and/or other materials provided with the distribution. |
; * Neither the name of the <organization> nor the |
; names of its contributors may be used to endorse or promote products |
; derived from this software without specific prior written permission. |
; |
; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY |
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY |
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
;--------------------------------------------------------------------- |
filtering_RGB_Interlaced: |
mov edx,dword filtering_RGB |
mov ebp,dword move_Interlaced_RGB |
jmp filtering_All |
;--------------------------------------------------------------------- |
filtering_RGB_16_Interlaced: |
mov edx,dword filtering_RGB_16 |
mov ebp,dword move_Interlaced_RGB |
jmp filtering_All |
;--------------------------------------------------------------------- |
filtering_grayscale_Interlaced: |
mov edx,dword filtering_grayscale |
mov ebp,dword move_Interlaced_grayscale |
jmp filtering_All |
;--------------------------------------------------------------------- |
filtering_grayscale_16_Interlaced: |
mov edx,dword filtering_grayscale_16 |
mov ebp,dword move_Interlaced_grayscale |
jmp filtering_All |
;--------------------------------------------------------------------- |
pass dd 0 |
filtering_All: |
push edi |
mov ecx,[resolution] |
imul ecx,[IHDR_data.Width] |
mov eax,ecx |
shr ecx,3 |
test eax,7 |
jz @f |
inc ecx |
@@: |
mov eax,[IHDR_data.Height] |
shr eax,1 |
inc eax |
imul ecx,eax |
mcall 68, 12 |
mov [Interlaced_area],eax |
; jmp .3 |
mov eax,dword calculate_Interlaced_counters |
mov ecx,7 |
@@: |
mov [pass],ecx |
mov [Interlaced_step],eax |
push ecx |
push eax edx edi ebp eax |
call dword [eax] ;calculate_Interlaced_1 |
; cmp [pass],1 |
; jbe .2 |
call edx |
;.2: |
pop eax ebp edi |
push ebp |
; cmp [pass],1 |
; jbe .1 |
call ebp |
;.1: |
pop ebp edx eax |
add eax,4 |
pop ecx |
dec ecx |
jnz @r |
;.3: |
mov ecx,[Interlaced_area] |
mcall 68, 13 |
pop edi |
ret |
;--------------------------------------------------------------------- |
move_Interlaced_RGB: |
push edi esi |
mov esi,[Interlaced_area] |
mov ecx,[IHDR_data.Height] |
test ecx,ecx |
jz .end |
mov edx,[IHDR_data.Width] |
test edx,edx |
jz .end |
mov ebx,[Image_Width] |
imul ebx,[resolution] |
shr ebx,3 |
mov eax,[Starting_Col] |
imul eax,[resolution] |
shr eax,3 |
add edi,eax |
mov eax,[Starting_Row] |
imul eax,ebx |
add edi,eax |
imul ebx,[Row_Increment] |
mov ebp,[resolution] |
imul ebp,[Col_Increment] |
shr ebp,3 |
.filter: |
mov edx,[IHDR_data.Width] |
push edi |
.filter_x: |
cmp [IHDR_data.Bit_depth],byte 8 |
jne @f |
call .Interlaced_RGB_8 |
jmp .1 |
@@: |
call .Interlaced_RGB_16 |
.1: |
dec edx |
jnz .filter_x |
pop edi |
add edi,ebx |
dec ecx |
jnz .filter |
.end: |
pop esi edi |
ret |
;------------------------------------------- |
.Interlaced_RGB_8: |
cld |
lodsw |
mov [edi],ax |
lodsb |
mov [edi+2],al |
cmp [IHDR_data.Color_type],byte 6 |
jne @f |
lodsb |
mov [edi+3],al |
@@: |
add edi,ebp |
ret |
;------------------------------------------- |
.Interlaced_RGB_16: |
cld |
lodsd |
mov [edi],eax |
lodsw |
mov [edi+4],ax |
cmp [IHDR_data.Color_type],byte 6 |
jne @f |
lodsw |
mov [edi+6],al |
@@: |
add edi,ebp |
ret |
;--------------------------------------------------------------------- |
move_Interlaced_grayscale: |
; cmp [eax],dword calculate_Interlaced_1 |
; jne @f |
; ret |
;@@: |
; cmp [eax],dword calculate_Interlaced_2 |
; jne @f |
; ret |
;@@: |
; cmp [eax],dword calculate_Interlaced_3 |
; jne @f |
; ret |
;@@: |
; cmp [eax],dword calculate_Interlaced_4 |
; jne @f |
; ret |
;@@: |
; cmp [eax],dword calculate_Interlaced_5 |
; jne @f |
; ret |
;@@: |
; cmp [eax],dword calculate_Interlaced_6 |
; jne @f |
; ret |
;@@: |
; cmp [eax],dword calculate_Interlaced_7 |
; jne @f |
; ret |
;@@: |
push edi esi |
mov esi,[Interlaced_area] |
mov ecx,[IHDR_data.Height] |
test ecx,ecx |
jz .end |
mov edx,[IHDR_data.Width] |
test edx,edx |
jz .end |
mov ebx,[Image_Width] |
imul ebx,[resolution] |
mov eax,ebx |
shr ebx,3 |
test eax,7 |
jz @f |
inc ebx |
@@: |
; ebx = Width in bytes, need correct for resolution less 4b |
mov eax,[Starting_Col] |
imul eax,[resolution] |
; mov ebp,eax |
shr eax,3 |
; test ebp,7 |
; jz @f |
; inc eax |
;@@: |
; eax = Starting Colummn in bytes |
add edi,eax |
mov eax,[Starting_Row] |
imul eax,ebx |
; eax = Starting Row in bytes, no need correct! |
add edi,eax |
imul ebx,[Row_Increment] |
; ebx = Row Increment in bytes, no need correct! |
mov eax,[IHDR_data.Width] |
imul eax,[resolution] |
mov ebp,eax |
shr eax,3 |
test ebp,7 |
jz @f |
inc eax |
@@: |
; eax = Width in bytes for Interlaced, |
; need correct for resolution less 4b |
mov ebp,[resolution] |
imul ebp,[Col_Increment] |
; mov eax,ebp |
shr ebp,3 |
; test eax,7 |
; jz @f |
; inc ebp |
;@@: |
; ebp = Column Increment in bytes |
.filter_grayscale: |
mov edx,[IHDR_data.Width] |
cmp [resolution],8 |
jae .filter_grayscale_1 |
.resolution_4: |
cmp [resolution],4 |
jne .resolution_2 |
test edx,1 |
jnz @f |
inc edx |
@@: |
shr edx,1 |
jmp .filter_grayscale_1 |
.resolution_2: |
cmp [resolution],2 |
jne .resolution_1 |
test edx,3 |
jnz @f |
add edx,4 |
@@: |
shr edx,2 |
jmp .filter_grayscale_1 |
.resolution_1: |
push eax |
mov eax,edx |
shr edx,3 |
test eax,7 |
jz @f |
inc edx |
@@: |
pop eax |
.filter_grayscale_1: |
push eax edi esi |
.filter_x_grayscale: |
cmp [IHDR_data.Bit_depth],byte 16 |
jne @f |
call .Interlaced_grayscale_16 |
jmp .1 |
@@: |
cmp [IHDR_data.Bit_depth],byte 8 |
jne @f |
call .Interlaced_grayscale_8 |
jmp .1 |
@@: |
cmp [IHDR_data.Bit_depth],byte 4 |
jne @f |
call .Interlaced_grayscale_4 |
jmp .1 |
@@: |
cmp [IHDR_data.Bit_depth],byte 2 |
jne @f |
call .Interlaced_grayscale_2 |
jmp .1 |
@@: |
call .Interlaced_grayscale_1 |
jmp .1 |
.1: |
dec edx |
jnz .filter_x_grayscale |
pop esi edi eax |
add esi,eax |
add edi,ebx |
dec ecx |
jnz .filter_grayscale |
.end: |
pop esi edi |
ret |
;----------------------------------- |
.Interlaced_grayscale_1: |
mov eax,[Interlaced_step] |
cmp eax,calculate_Interlaced_counters.1 |
je .step_1 |
cmp eax,calculate_Interlaced_counters.2 |
je .step_2 |
cmp eax,calculate_Interlaced_counters.3 |
je .step_3 |
cmp eax,calculate_Interlaced_counters.4 |
je .step_4 |
cmp eax,calculate_Interlaced_counters.5 |
je .step_5 |
cmp eax,calculate_Interlaced_counters.6 |
je .step_6 |
cld |
movsb |
ret |
;-------------------- |
.step_6: |
push ebx |
cld |
lodsb |
mov ah,al |
call @f |
shl ah,4 |
mov al,ah |
call @f |
pop ebx |
ret |
;-------------------- |
@@: |
shr al,1 |
and al,64 |
mov bl,ah |
shr bl,2 |
and bl,16 |
add al,bl |
mov bl,ah |
shr bl,3 |
and bl,4 |
add al,bl |
mov bl,ah |
shr bl,4 |
and bl,1 |
add al,bl |
add al,[edi] |
stosb |
ret |
;-------------------- |
.step_5: |
push ebx |
cld |
lodsb |
mov ah,al |
call @f |
shl ah,4 |
mov al,ah |
call @f |
pop ebx |
ret |
;-------------------- |
@@: |
and al,128 |
mov bl,ah |
shr bl,1 |
and bl,32 |
add al,bl |
mov bl,ah |
shr bl,2 |
and bl,8 |
add al,bl |
mov bl,ah |
shr bl,3 |
and bl,2 |
add al,bl |
add al,[edi] |
stosb |
ret |
;-------------------- |
.step_4: |
push ebx |
cld |
lodsb |
mov ah,al |
shr al,2 |
and al,32 |
mov bl,ah |
shr bl,5 |
call @f |
mov al,ah |
and al,32 |
mov bl,ah |
shr bl,3 |
call @f |
mov al,ah |
shl al,2 |
and al,32 |
mov bl,ah |
shr bl,1 |
call @f |
mov al,ah |
shl al,4 |
and al,32 |
mov bl,ah |
shl bl,1 |
call @f |
pop ebx |
ret |
;-------------------- |
@@: |
and bl,2 |
add al,bl |
add al,[edi] |
stosb |
ret |
;-------------------- |
.step_3: |
push ebx |
cld |
lodsb |
mov ah,al |
and al,128 |
mov bl,ah |
shr bl,3 |
call @f |
mov al,ah |
shl al,2 |
and al,128 |
mov bl,ah |
shr bl,1 |
call @f |
mov al,ah |
shl al,4 |
and al,128 |
mov bl,ah |
shl bl,1 |
call @f |
mov al,ah |
shl al,6 |
and al,128 |
mov bl,ah |
shl bl,3 |
call @f |
pop ebx |
ret |
;-------------------- |
@@: |
and bl,8 |
add al,bl |
add al,[edi] |
stosb |
ret |
;-------------------- |
.step_2: |
cld |
lodsb |
mov ah,al |
shr al,4 |
and al,8 |
add al,[edi] |
stosb |
mov al,ah |
shr al,3 |
and al,8 |
add al,[edi] |
stosb |
mov al,ah |
shr al,2 |
and al,8 |
add al,[edi] |
stosb |
mov al,ah |
shr al,1 |
and al,8 |
add al,[edi] |
stosb |
mov al,ah |
and al,8 |
add al,[edi] |
stosb |
mov al,ah |
shl al,1 |
and al,8 |
add al,[edi] |
stosb |
mov al,ah |
shl al,2 |
and al,8 |
add al,[edi] |
stosb |
mov al,ah |
shl al,3 |
and al,8 |
add al,[edi] |
stosb |
ret |
;-------------------- |
.step_1: |
cld |
lodsb |
mov ah,al |
and al,128 |
stosb |
mov al,ah |
shl al,1 |
and al,128 |
stosb |
mov al,ah |
shl al,2 |
and al,128 |
stosb |
mov al,ah |
shl al,3 |
and al,128 |
stosb |
mov al,ah |
shl al,4 |
and al,128 |
stosb |
mov al,ah |
shl al,5 |
and al,128 |
stosb |
mov al,ah |
shl al,6 |
and al,128 |
stosb |
mov al,ah |
shl al,7 |
and al,128 |
stosb |
ret |
;----------------------------------- |
.Interlaced_grayscale_2: |
mov eax,[Interlaced_step] |
cmp eax,calculate_Interlaced_counters.1 |
je .step_1_1 |
cmp eax,calculate_Interlaced_counters.2 |
je .step_2_1 |
cmp eax,calculate_Interlaced_counters.3 |
je .step_3_1 |
cmp eax,calculate_Interlaced_counters.4 |
je .step_4_1 |
cmp eax,calculate_Interlaced_counters.5 |
je .step_5_1 |
cmp eax,calculate_Interlaced_counters.6 |
je .step_6_1 |
cld |
movsb |
ret |
.step_6_1: |
push ebx |
cld |
lodsb |
mov ah,al |
shr al,2 |
and al,48 |
mov bl,ah |
shr bl,4 |
and bl,3 |
add al,bl |
add al,[edi] |
stosb |
mov al,ah |
shl al,2 |
and al,48 |
mov bl,ah |
and bl,3 |
add al,bl |
add al,[edi] |
stosb |
pop ebx |
ret |
.step_5_1: |
push ebx |
cld |
lodsb |
mov ah,al |
and al,192 |
mov bl,ah |
shr bl,2 |
and bl,12 |
add al,bl |
add al,[edi] |
stosb |
mov al,ah |
shl al,4 |
and al,192 |
mov bl,ah |
shl bl,2 |
and bl,12 |
add al,bl |
add al,[edi] |
stosb |
pop ebx |
ret |
.step_4_1: |
cld |
lodsb |
mov ah,al |
shr al,4 |
and al,12 |
add al,[edi] |
stosb |
mov al,ah |
shr al,2 |
and al,12 |
add al,[edi] |
stosb |
mov al,ah |
and al,12 |
add al,[edi] |
stosb |
mov al,ah |
shl al,2 |
and al,12 |
add al,[edi] |
stosb |
ret |
.step_3_1: |
cld |
lodsb |
mov ah,al |
and al,192 |
stosb |
mov al,ah |
shl al,2 |
and al,192 |
stosb |
mov al,ah |
shl al,4 |
and al,192 |
stosb |
mov al,ah |
shl al,6 |
and al,192 |
stosb |
ret |
.step_2_1: |
cld |
lodsb |
mov ah,al |
and al,192 |
stosb |
inc edi |
mov al,ah |
shl al,2 |
and al,192 |
stosb |
inc edi |
mov al,ah |
shl al,4 |
and al,192 |
stosb |
inc edi |
mov al,ah |
shl al,6 |
and al,192 |
stosb |
inc edi |
ret |
.step_1_1: |
cld |
lodsb |
mov ah,al |
and al,192 |
stosb |
inc edi |
mov al,ah |
shl al,2 |
and al,192 |
stosb |
inc edi |
mov al,ah |
shl al,4 |
and al,192 |
stosb |
inc edi |
mov al,ah |
shl al,6 |
and al,192 |
stosb |
inc edi |
ret |
;----------------------------------- |
.Interlaced_grayscale_4: |
mov al,[esi] |
mov ah,[edi] |
test ebp,ebp |
jnz @f |
call .even_2 |
jmp .2 |
@@: |
test [Starting_Col],byte 1 |
jz @f |
call .even_1 |
jmp .2 |
@@: |
call .odd_1 |
.2: |
add al,ah |
mov [edi],al |
add edi,ebp |
mov al,[esi] |
mov ah,[edi] |
test ebp,ebp |
jnz @f |
call .odd_1 |
jmp .3 |
@@: |
test [Starting_Col],byte 1 |
jz @f |
call .even_2 |
jmp .3 |
@@: |
call .odd_2 |
.3: |
add al,ah |
mov [edi],al |
add edi,ebp |
inc esi |
test ebp,ebp |
jnz @f |
inc edi |
@@: |
ret |
;--------------------- |
.even_1: |
shr al,4 |
and ah,11110000b |
ret |
;--------------------- |
.even_2: |
and al,1111b |
and ah,11110000b |
ret |
;--------------------- |
.odd_1: |
and al,11110000b |
and ah,1111b |
ret |
;--------------------- |
.odd_2: |
shl al,4 |
and ah,1111b |
ret |
;----------------------------------- |
.Interlaced_grayscale_8: |
cld |
lodsb |
mov [edi],al |
cmp [IHDR_data.Color_type],byte 4 |
jne @f |
cld |
lodsb |
mov [edi+1],al |
@@: |
add edi,ebp |
ret |
;----------------------------------- |
.Interlaced_grayscale_16: |
cld |
lodsw |
mov [edi],ax |
cmp [IHDR_data.Color_type],byte 4 |
jne @f |
cld |
lodsw |
mov [edi+2],ax |
@@: |
add edi,ebp |
ret |
;--------------------------------------------------------------------- |
calculatte_Interlaced_data_1: |
mov [first_line],byte 1 |
mov edi,[Interlaced_area] |
mov eax,[Image_Width] |
mov ebx,dword Starting_Row |
ret |
;--------------------------------------------------------------------- |
calculate_Interlaced_1: |
call calculatte_Interlaced_data_1 |
mov [ebx+0],dword 0 ;Starting_Row |
mov [ebx+4],dword 0 ;Starting_Col |
mov [ebx+8],dword 8 ;Row_Increment |
mov [ebx+12],dword 8 ;Col_Increment |
mov ebx,eax |
shr eax,3 |
test ebx,7 |
jz @f |
inc eax |
@@: |
mov [IHDR_data.Width],eax |
mov eax,[Image_Height] |
mov ebx,eax |
shr eax,3 |
test ebx,7 |
jz @f |
inc eax |
@@: |
mov [IHDR_data.Height],eax |
ret |
;--------------------------------------------------------------------- |
calculate_Interlaced_2: |
call calculatte_Interlaced_data_1 |
mov [ebx+0],dword 0 ;Starting_Row |
mov [ebx+4],dword 4 ;Starting_Col |
mov [ebx+8],dword 8 ;Row_Increment |
mov [ebx+12],dword 8 ;Col_Increment |
cmp eax,4 |
ja @f |
mov eax,4 |
@@: |
sub eax,4 |
mov ebx,eax |
shr eax,3 |
test ebx,7 |
jz @f |
inc eax |
@@: |
mov [IHDR_data.Width],eax |
mov eax,[Image_Height] |
mov ebx,eax |
shr eax,3 |
test ebx,7 |
jz @f |
inc eax |
@@: |
mov [IHDR_data.Height],eax |
ret |
;--------------------------------------------------------------------- |
calculate_Interlaced_3: |
call calculatte_Interlaced_data_1 |
mov [ebx+0],dword 4 ;Starting_Row |
mov [ebx+4],dword 0 ;Starting_Col |
mov [ebx+8],dword 8 ;Row_Increment |
mov [ebx+12],dword 4 ;Col_Increment |
mov ebx,eax |
shr eax,2 |
test ebx,3 |
jz @f |
inc eax |
@@: |
mov [IHDR_data.Width],eax |
mov eax,[Image_Height] |
cmp eax,4 |
ja @f |
mov eax,4 |
@@: |
sub eax,4 |
mov ebx,eax |
shr eax,3 |
test ebx,7 |
jz @f |
inc eax |
@@: |
mov [IHDR_data.Height],eax |
ret |
;--------------------------------------------------------------------- |
calculate_Interlaced_4: |
call calculatte_Interlaced_data_1 |
mov [ebx+0],dword 0 ;Starting_Row |
mov [ebx+4],dword 2 ;Starting_Col |
mov [ebx+8],dword 4 ;Row_Increment |
mov [ebx+12],dword 4 ;Col_Increment |
cmp eax,2 |
ja @f |
mov eax,2 |
@@: |
sub eax,2 |
mov ebx,eax |
shr eax,2 |
test ebx,3 |
jz @f |
inc eax |
@@: |
mov [IHDR_data.Width],eax |
mov eax,[Image_Height] |
mov ebx,eax |
shr eax,2 |
test ebx,3 |
jz @f |
inc eax |
@@: |
mov [IHDR_data.Height],eax |
ret |
;--------------------------------------------------------------------- |
calculate_Interlaced_5: |
call calculatte_Interlaced_data_1 |
mov [ebx+0],dword 2 ;Starting_Row |
mov [ebx+4],dword 0 ;Starting_Col |
mov [ebx+8],dword 4 ;Row_Increment |
mov [ebx+12],dword 2 ;Col_Increment |
mov ebx,eax |
shr eax,1 |
test ebx,1 |
jz @f |
inc eax |
@@: |
mov [IHDR_data.Width],eax |
mov eax,[Image_Height] |
cmp eax,2 |
ja @f |
mov eax,2 |
@@: |
sub eax,2 |
mov ebx,eax |
shr eax,2 |
test ebx,3 |
jz @f |
inc eax |
@@: |
mov [IHDR_data.Height],eax |
ret |
;--------------------------------------------------------------------- |
calculate_Interlaced_6: |
call calculatte_Interlaced_data_1 |
mov [ebx+0],dword 0 ;Starting_Row |
mov [ebx+4],dword 1 ;Starting_Col |
mov [ebx+8],dword 2 ;Row_Increment |
mov [ebx+12],dword 2 ;Col_Increment |
cmp eax,1 |
ja @f |
mov eax,1 |
@@: |
dec eax |
mov ebx,eax |
shr eax,1 |
test ebx,1 |
jz @f |
inc eax |
@@: |
mov [IHDR_data.Width],eax |
mov eax,[Image_Height] |
mov ebx,eax |
shr eax,1 |
test ebx,1 |
jz @f |
inc eax |
@@: |
mov [IHDR_data.Height],eax |
ret |
;--------------------------------------------------------------------- |
calculate_Interlaced_7: |
call calculatte_Interlaced_data_1 |
mov [ebx+0],dword 1 ;Starting_Row |
mov [ebx+4],dword 0 ;Starting_Col |
mov [ebx+8],dword 2 ;Row_Increment |
mov [ebx+12],dword 1 ;Col_Increment |
mov [IHDR_data.Width],eax |
; mov ebx,[raw_area] |
; mov [ebx+4],eax |
mov eax,[Image_Height] |
cmp eax,1 |
ja @f |
mov eax,1 |
@@: |
dec eax |
mov ebx,eax |
shr eax,1 |
test ebx,1 |
jz @f |
inc eax |
@@: |
mov [IHDR_data.Height],eax |
; mov ebx,[raw_area] |
; mov eax,[Image_Height] |
; mov [ebx+8],eax |
ret |
;--------------------------------------------------------------------- |
/programs/media/zsea/plugins/png/proced.inc |
---|
0,0 → 1,159 |
;***************************************************************************** |
; PNG to RAW convert plugin - for zSea image viewer |
; Copyright (c) 2008, 2009, Marat Zakiyanov aka Mario79, aka Mario |
; All rights reserved. |
; |
; Redistribution and use in source and binary forms, with or without |
; modification, are permitted provided that the following conditions are met: |
; * Redistributions of source code must retain the above copyright |
; notice, this list of conditions and the following disclaimer. |
; * Redistributions in binary form must reproduce the above copyright |
; notice, this list of conditions and the following disclaimer in the |
; documentation and/or other materials provided with the distribution. |
; * Neither the name of the <organization> nor the |
; names of its contributors may be used to endorse or promote products |
; derived from this software without specific prior written permission. |
; |
; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY |
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY |
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
;--------------------------------------------------------------------- |
deflate_callback: |
cmp [deflate_start_offset],1 |
je @f |
mov [deflate_start_offset],1 |
jmp .1 |
@@: |
mov eax,[IDAT.pointer] |
add eax,[IDAT.size] |
mov ebx,[image_file] |
add ebx,[file_size] |
sub ebx,32 |
cmp ebx,eax |
jbe @f |
mov [next_Chunk],eax |
call search_IDAT |
jmp .1 |
@@: |
xor eax,eax |
mov [IDAT.size],eax |
mov [IDAT.pointer],eax |
.1: |
mov ecx, [esp+8] |
mov eax,[IDAT.size] |
mov [ecx], eax ;length |
mov eax,[IDAT.pointer] ; buffer |
ret 8 |
;--------------------------------------------------------------------- |
search_IHDR: |
mov [Chunk_pointer],IHDR_name |
call get_Chunk_data_pointer |
mov eax,[Chunk_pointer] |
cmp eax,0 |
je .no_png_file |
mov [IHDR.pointer],eax |
mov ecx,[eax-8] |
call convert_NBO_to_PC |
mov [IHDR.size],ecx |
ret |
.no_png_file: |
add esp,4 |
jmp no_png_file |
;--------------------------------------------------------------------- |
search_PLTE: |
push eax ecx |
mov [Chunk_pointer],PLTE_name |
call get_Chunk_data_pointer |
mov eax,[Chunk_pointer] |
cmp eax,0 |
je .no_png_file |
mov [PLTE.pointer],eax |
mov ecx,[eax-8] |
call convert_NBO_to_PC |
mov [PLTE.size],ecx |
pop ecx eax |
ret |
.no_png_file: |
add esp,12 |
jmp no_png_file |
;--------------------------------------------------------------------- |
search_IDAT: |
mov [Chunk_pointer],IDAT_name |
call get_Chunk_data_pointer |
mov eax,[Chunk_pointer] |
cmp eax,0 |
je .no_IDAT_next |
mov [IDAT.pointer],eax |
mov ecx,[eax-8] |
call convert_NBO_to_PC |
mov [IDAT.size],ecx |
xor eax,eax |
ret |
.no_IDAT_next: |
; add esp,4 |
; jmp no_png_file |
mov eax,1 |
ret |
;--------------------------------------------------------------------- |
search_IEND: |
mov [Chunk_pointer],IEND_name |
call get_Chunk_data_pointer |
mov eax,[Chunk_pointer] |
cmp eax,0 |
je .no_png_file |
mov [IEND.pointer],eax |
mov ecx,[eax-8] |
call convert_NBO_to_PC |
mov [IEND.size],ecx |
ret |
.no_png_file: |
add esp,4 |
jmp no_png_file |
;--------------------------------------------------------------------- |
convert_NBO_to_PC: ;network byte order value to PC value |
push eax |
mov al,ch |
mov ah,cl |
shl eax,16 |
shr ecx,16 |
mov al,ch |
mov ah,cl |
mov ecx,eax |
pop eax |
ret |
;--------------------------------------------------------------------- |
get_Chunk_data_pointer: |
pushad |
mov ebp,4 |
; mov edi,[image_file] |
mov edi,[next_Chunk] |
mov edx,[image_file] ;edi |
add edx,[file_size] |
dec edi |
.search_Chunk: |
cmp edx,edi |
jbe .end |
mov esi,[Chunk_pointer] |
mov ecx,ebp |
inc edi |
mov ebx,edi |
cld |
rep cmpsb |
mov edi,ebx |
jne .search_Chunk |
add edi,ebp |
mov [Chunk_pointer],edi |
popad |
ret |
.end: |
mov [Chunk_pointer],0 |
popad |
ret |
;--------------------------------------------------------------------- |
/programs/media/zsea/plugins/png |
---|
Property changes: |
Added: tsvn:logminsize |
+5 |
\ No newline at end of property |
/programs/media/zsea/plugins/rotate/build.bat |
---|
0,0 → 1,3 |
@fasm -m 16384 rotate.asm rotate.obj |
@kpack rotate.obj |
@pause |
/programs/media/zsea/plugins/rotate/build.sh |
---|
0,0 → 1,10 |
#!/bin/bash |
# This script does for Linux the same as build.bat for DOS, |
# it compiles the current KolibriOS applications |
fasm -m 16384 rotate.asm rotate.obj |
kpack rotate.obj |
exit 0 |
/programs/media/zsea/plugins/rotate/rotate.asm |
---|
0,0 → 1,301 |
;***************************************************************************** |
; Rotate RAW image plugin - for zSea image viewer |
; Copyright (c) 2009 - 2011, Marat Zakiyanov aka Mario79, aka Mario |
; All rights reserved. |
; |
; Redistribution and use in source and binary forms, with or without |
; modification, are permitted provided that the following conditions are met: |
; * Redistributions of source code must retain the above copyright |
; notice, this list of conditions and the following disclaimer. |
; * Redistributions in binary form must reproduce the above copyright |
; notice, this list of conditions and the following disclaimer in the |
; documentation and/or other materials provided with the distribution. |
; * Neither the name of the <organization> nor the |
; names of its contributors may be used to endorse or promote products |
; derived from this software without specific prior written permission. |
; |
; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY |
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY |
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
;***************************************************************************** |
; Rotate 32b, 24b, 16b, 8b |
format MS COFF |
public EXPORTS |
section '.flat' code readable align 16 |
;include 'macros.inc' |
include '../../../../macros.inc' |
;--------------------------------------------------------------------- |
START: |
pushad |
mov [pointer],eax |
; ebx - direction |
; 1 - clockwise, 2 - counter clockwise |
; 3 - Left&Right, 4 - Up&Down |
mov [direction],ebx |
mov eax,[eax+4] |
mov [image_file],eax |
mov esi,[eax+28] |
add esi,eax |
; mov ecx,[eax+32] |
; xor ebx,ebx |
; mov [raw_area],ebx |
mov ebx,[eax+12] |
cmp ebx,32 |
jne @f |
mov ebp,dword START.32 |
jmp .1 |
@@: |
cmp ebx,24 |
jne @f |
mov ebp,dword START.24 |
jmp .1 |
@@: |
cmp ebx,16 |
jne @f |
mov ebp,dword START.16 |
jmp .1 |
@@: |
cmp ebx,15 |
jne @f |
inc ebx |
mov ebp,dword START.16 |
jmp .1 |
@@: |
cmp ebx,8 |
jne @f |
mov ebp,dword START.8 |
@@: |
.1: |
shr ebx,3 |
mov [bytes_to_pixel],ebx |
mov ebx,[eax+4] |
imul ebx,[bytes_to_pixel] |
mov [size_x],ebx |
mov ebx,[eax+8] |
imul ebx,[bytes_to_pixel] |
mov [size_y],ebx |
call .get_memory |
cmp [direction],1 |
jne @f |
call .clockwise |
jmp .end |
@@: |
cmp [direction],2 |
jne @f |
call .counter_clockwise |
jmp .end |
@@: |
cmp [direction],3 |
jne @f |
call .Left_Right |
jmp .end |
@@: |
cmp [direction],4 |
jne .exit |
call .Up_Down |
.end: |
xchg esi,edi |
mov ecx,[image_file] |
mov eax,[ecx+4] |
imul eax,[bytes_to_pixel] |
imul eax,[ecx+8] |
mov ecx,eax |
cld |
rep movsb |
mov ecx,[raw_area] |
mcall 68,13 |
;--------------------------------------------------------------------- |
.ret_ok: |
cmp [direction],1 |
jne @f |
call .XY_data_exchange |
jmp .exit |
@@: |
cmp [direction],2 |
jne .exit |
call .XY_data_exchange |
.exit: |
popad |
ret |
;--------------------------------------------------------------------- |
.XY_data_exchange: |
mov ecx,[image_file] |
mov eax,[ecx+4] |
mov ebx,[ecx+8] |
mov [ecx+8],eax |
mov [ecx+4],ebx |
ret |
;--------------------------------------------------------------------- |
.clockwise: |
push edi esi |
add edi,[size_y] |
sub edi,[bytes_to_pixel] |
.y: |
push edi |
push ebx |
.x: |
call ebp |
add edi,[size_y] |
dec ebx |
jnz .x |
pop ebx |
pop edi |
sub edi,[bytes_to_pixel] |
dec ecx |
jnz .y |
pop esi edi |
ret |
;--------------------------------------------------------------------- |
.counter_clockwise: |
push edi esi |
mov eax,[eax+4] |
dec eax |
imul eax,[size_y] |
add edi,eax |
.y1: |
push edi |
push ebx |
.x1: |
call ebp |
sub edi,[size_y] |
dec ebx |
jnz .x1 |
pop ebx |
pop edi |
add edi,[bytes_to_pixel] |
dec ecx |
jnz .y1 |
pop esi edi |
ret |
;--------------------------------------------------------------------- |
.Left_Right: |
push edi esi |
add edi,[size_x] |
.y2: |
push edi |
push ebx |
.x2: |
sub edi,[bytes_to_pixel] |
call ebp |
dec ebx |
jnz .x2 |
pop ebx |
pop edi |
add edi,[size_x] |
dec ecx |
jnz .y2 |
pop esi edi |
ret |
;--------------------------------------------------------------------- |
.Up_Down: |
push edi esi |
mov eax,[eax+8] |
dec eax |
imul eax,[size_x] |
add edi,eax |
.y3: |
push edi |
push ebx |
.x3: |
call ebp |
add edi,[bytes_to_pixel] |
dec ebx |
jnz .x3 |
pop ebx |
pop edi |
sub edi,[size_x] |
dec ecx |
jnz .y3 |
pop esi edi |
ret |
;--------------------------------------------------------------------- |
.32: |
cld |
lodsd |
mov [edi],eax |
ret |
;--------------------------------------------------------------------- |
.24: |
cld |
lodsw |
mov [edi],ax |
lodsb |
mov [edi+2],al |
ret |
;--------------------------------------------------------------------- |
.16: |
cld |
lodsw |
mov [edi],ax |
ret |
;--------------------------------------------------------------------- |
.8: |
cld |
lodsb |
mov [edi],al |
ret |
;--------------------------------------------------------------------- |
.get_memory: |
mov ecx,[eax+4] |
imul ecx,[eax+8] |
imul ecx,[bytes_to_pixel] |
push eax |
mcall 68,12 |
mov [raw_area],eax |
mov edi,eax |
pop eax |
mov ebx,[eax+4] |
mov ecx,[eax+8] |
ret |
;--------------------------------------------------------------------- |
align 16 |
EXPORTS: |
dd szStart, START |
dd szVersion, 0x00010001 |
dd 0 |
szStart db 'START',0 |
szVersion db 'version',0 |
pointer dd 0 |
image_file dd 0 |
direction dd 0 |
size_x dd 0 |
size_y dd 0 |
bytes_to_pixel dd 0 |
;delta dd 0 |
;resolution dd 0 |
;compression dd 0 |
raw_area dd 0 |
/programs/media/zsea/plugins/rotate |
---|
Property changes: |
Added: tsvn:logminsize |
+5 |
\ No newline at end of property |
/programs/media/zsea/plugins/scaling/b_filter.inc |
---|
0,0 → 1,1001 |
;--------------------------------------------------------------------- |
align 4 |
.check_filtering_24: |
cmp [filtering],0 |
je .24_1 |
mov ebx,[temp_y1] |
inc ebx |
cmp ebx,[y] |
jae .last_y_24 ;.24_1 |
mov ebx,[temp_x1] |
push eax |
mov eax,[x] |
dec eax |
lea eax,[eax*3] |
cmp ebx,eax |
pop eax |
jae .last_x_24 ;.24_1 |
; mov ebx,[esp+4] |
;; test ebx,ebx |
;; jz .24_1 |
; inc ebx |
; cmp bx,[new_size.y1] |
; jae .last_y ;.24_1 |
; mov ebx,[esp] |
;; test ebx,ebx |
;; jz .24_1 |
; inc ebx |
; cmp bx,[new_size.x1] |
; jae .last_x ;.24_1 |
;---------------------------- |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
mov eax,[ecx+3] |
call .mix_RGB |
;---------------------------- |
call .copy_RGB_to_RGB1 |
;---------------------------- |
add ecx,[size_x] |
mov eax,[ecx] |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
mov eax,[ecx+3] |
call .mix_RGB |
call .RGB_to_EAX |
call .clear_RGB |
mov edx,[next_pixel_y] |
call .mix_RGB |
;---------------------------- |
call .RGB_to_EAX1 |
;---------------------------- |
mov edx,128 ;100 |
sub edx,[next_pixel_y] |
call .mix_RGB |
call .RGB_to_EAX |
.24_1: |
ret |
;--------------------------------------------------------------------- |
align 4 |
.last_y_24: |
mov ebx,[temp_x1] |
push eax |
mov eax,[x] |
dec eax |
lea eax,[eax*3] |
cmp ebx,eax |
pop eax |
jae .last_x_y_24 ;.24_1 |
mov ebx,[esp+4] |
; test ebx,ebx |
; jz .24_1 |
inc ebx |
cmp bx,[new_size.x1] |
jae .last_x_y_24 ;.24_1 |
;---------------------------- |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
mov eax,[ecx+3] |
call .mix_RGB |
;---------------------------- |
call .copy_RGB_to_RGB1 |
;---------------------------- |
mov eax,[background_color] |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
mov eax,[background_color] |
call .mix_RGB |
call .RGB_to_EAX |
call .clear_RGB |
mov edx,[next_pixel_y] |
call .mix_RGB |
;---------------------------- |
call .RGB_to_EAX1 |
;---------------------------- |
mov edx,128 ;100 |
sub edx,[next_pixel_y] |
call .mix_RGB |
call .RGB_to_EAX |
;--------------------------------------- |
ret |
;--------------------------------------------------------------------- |
align 4 |
.last_x_24: |
mov ebx,[temp_y1] |
inc ebx |
cmp ebx,[y] |
jae .last_x_y_24 ;.24_1 |
mov ebx,[esp+8] |
; test ebx,ebx |
; jz .24_1 |
inc ebx |
cmp bx,[new_size.y1] |
jae .last_x_y_24 ;.24_1 |
;---------------------------- |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
mov eax,[background_color] |
call .mix_RGB |
;---------------------------- |
call .copy_RGB_to_RGB1 |
;---------------------------- |
add ecx,[size_x] |
mov eax,[ecx] |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
mov eax,[background_color] |
call .mix_RGB |
call .RGB_to_EAX |
call .clear_RGB |
mov edx,[next_pixel_y] |
call .mix_RGB |
;---------------------------- |
call .RGB_to_EAX1 |
;---------------------------- |
mov edx,128 ;100 |
sub edx,[next_pixel_y] |
call .mix_RGB |
call .RGB_to_EAX |
ret |
;--------------------------------------------------------------------- |
align 4 |
.last_x_y_24: |
;---------------------------- |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
mov eax,[background_color] |
call .mix_RGB |
;---------------------------- |
call .copy_RGB_to_RGB1 |
;---------------------------- |
mov eax,[background_color] |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
mov eax,[background_color] |
call .mix_RGB |
call .RGB_to_EAX |
call .clear_RGB |
mov edx,[next_pixel_y] |
call .mix_RGB |
;---------------------------- |
call .RGB_to_EAX1 |
;---------------------------- |
mov edx,128 ;100 |
sub edx,[next_pixel_y] |
call .mix_RGB |
call .RGB_to_EAX |
ret |
;--------------------------------------------------------------------- |
align 4 |
.copy_RGB_to_RGB1: |
mov eax,[B_sample] |
mov [B_sample_1],eax |
mov eax,[G_sample] |
mov [G_sample_1],eax |
mov eax,[R_sample] |
mov [R_sample_1],eax |
ret |
;--------------------------------------- |
align 4 |
.mix_RGB: |
xor ebx,ebx |
mov bl,al |
imul ebx,edx |
add [B_sample],ebx |
shr eax,8 |
xor ebx,ebx |
mov bl,al |
imul ebx,edx |
add [G_sample],ebx |
shr eax,8 |
xor ebx,ebx |
mov bl,al |
imul ebx,edx |
add [R_sample],ebx |
ret |
;--------------------------------------- |
align 4 |
.mix_RGB_16: |
xor ebx,ebx |
mov bl,al |
and bl,0x1F |
imul ebx,edx |
add [B_sample],ebx |
shr eax,5 |
xor ebx,ebx |
mov bl,al |
cmp [resolution],16 |
jne @f |
and bl,0x3F |
shr eax,6 |
jmp .mix_RGB_16_G_sample |
align 4 |
@@: |
and bl,0x1F |
shr eax,5 |
align 4 |
.mix_RGB_16_G_sample: |
imul ebx,edx |
add [G_sample],ebx |
xor ebx,ebx |
mov bl,al |
and bl,0x1F |
imul ebx,edx |
add [R_sample],ebx |
ret |
;--------------------------------------- |
align 4 |
.clear_RGB: |
xor ebx,ebx |
mov [B_sample],ebx |
mov [G_sample],ebx |
mov [R_sample],ebx |
ret |
;--------------------------------------- |
align 4 |
.RGB_to_EAX: |
mov eax,[R_sample] |
shr eax,7 |
and eax,0xff |
shl eax,8 |
mov ebx,[G_sample] |
shr ebx,7 |
mov al,bl |
shl eax,8 |
mov ebx,[B_sample] |
shr ebx,7 |
mov al,bl |
ret |
;--------------------------------------- |
align 4 |
.RGB_to_EAX_16: |
mov eax,[R_sample] |
shr eax,7 |
and eax,0x1F |
mov ebx,[G_sample] |
shr ebx,7 |
cmp [resolution],16 |
jne @f |
shl eax,6 |
and ebx,0x3F |
jmp .RGB_to_EAX_16_G_sample |
align 4 |
@@: |
shl eax,5 |
and ebx,0x1F |
align 4 |
.RGB_to_EAX_16_G_sample: |
add eax,ebx |
shl eax,5 |
mov ebx,[B_sample] |
shr ebx,7 |
and ebx,0x1F |
add eax,ebx |
ret |
;--------------------------------------- |
align 4 |
.RGB_to_EAX1: |
mov eax,[R_sample_1] |
shr eax,7 |
and eax,0xff |
shl eax,8 |
mov ebx,[G_sample_1] |
shr ebx,7 |
mov al,bl |
shl eax,8 |
mov ebx,[B_sample_1] |
shr ebx,7 |
mov al,bl |
ret |
;--------------------------------------- |
align 4 |
.RGB_to_EAX1_16: |
mov eax,[R_sample_1] |
shr eax,7 |
and eax,0x1F |
mov ebx,[G_sample_1] |
shr ebx,7 |
cmp [resolution],16 |
jne @f |
shl eax,6 |
and ebx,0x3F |
jmp .RGB_to_EAX1_16_G_sample |
align 4 |
@@: |
shl eax,5 |
and ebx,0x1F |
align 4 |
.RGB_to_EAX1_16_G_sample: |
add eax,ebx |
shl eax,5 |
mov ebx,[B_sample_1] |
shr ebx,7 |
and ebx,0x1F |
add eax,ebx |
ret |
;--------------------------------------------------------------------- |
align 4 |
.check_filtering_32: |
cmp [filtering],0 |
je .32_1 |
mov ebx,[temp_y1] |
inc ebx |
cmp ebx,[y] |
jae .last_y_32 ;.24_1 |
mov ebx,[temp_x1] |
push eax |
mov eax,[x] |
dec eax |
shl eax,2 |
cmp ebx,eax |
pop eax |
jae .last_x_32 ;.24_1 |
;---------------------------- |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
mov eax,[ecx+4] |
call .mix_RGB |
;---------------------------- |
call .copy_RGB_to_RGB1 |
;---------------------------- |
add ecx,[size_x] |
mov eax,[ecx] |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
mov eax,[ecx+4] |
call .mix_RGB |
call .RGB_to_EAX |
call .clear_RGB |
mov edx,[next_pixel_y] |
call .mix_RGB |
;---------------------------- |
call .RGB_to_EAX1 |
;---------------------------- |
mov edx,128 ;100 |
sub edx,[next_pixel_y] |
call .mix_RGB |
call .RGB_to_EAX |
.32_1: |
ret |
;--------------------------------------------------------------------- |
align 4 |
.last_y_32: |
mov ebx,[temp_x1] |
push eax |
mov eax,[x] |
dec eax |
shl eax,2 |
cmp ebx,eax |
pop eax |
jae .last_x_y_32 ;.32_1 |
mov ebx,[esp+4] |
; test ebx,ebx |
; jz .24_1 |
inc ebx |
cmp bx,[new_size.x1] |
jae .last_x_y_32 ;.32_1 |
;---------------------------- |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
mov eax,[ecx+4] |
call .mix_RGB |
;---------------------------- |
call .copy_RGB_to_RGB1 |
;---------------------------- |
mov eax,[background_color] |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
mov eax,[background_color] |
call .mix_RGB |
call .RGB_to_EAX |
call .clear_RGB |
mov edx,[next_pixel_y] |
call .mix_RGB |
;---------------------------- |
call .RGB_to_EAX1 |
;---------------------------- |
mov edx,128 ;100 |
sub edx,[next_pixel_y] |
call .mix_RGB |
call .RGB_to_EAX |
ret |
;--------------------------------------------------------------------- |
align 4 |
.last_x_32: |
mov ebx,[temp_y1] |
inc ebx |
cmp ebx,[y] |
jae .last_x_y_32 ;.32_1 |
mov ebx,[esp+8] |
; test ebx,ebx |
; jz .24_1 |
inc ebx |
cmp bx,[new_size.y1] |
jae .last_x_y_32 ;.32_1 |
;---------------------------- |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
mov eax,[background_color] |
call .mix_RGB |
;---------------------------- |
call .copy_RGB_to_RGB1 |
;---------------------------- |
add ecx,[size_x] |
mov eax,[ecx] |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
mov eax,[background_color] |
call .mix_RGB |
call .RGB_to_EAX |
call .clear_RGB |
mov edx,[next_pixel_y] |
call .mix_RGB |
;---------------------------- |
call .RGB_to_EAX1 |
;---------------------------- |
mov edx,128 ;100 |
sub edx,[next_pixel_y] |
call .mix_RGB |
call .RGB_to_EAX |
ret |
;--------------------------------------------------------------------- |
align 4 |
.last_x_y_32: |
;---------------------------- |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
mov eax,[background_color] |
call .mix_RGB |
;---------------------------- |
call .copy_RGB_to_RGB1 |
;---------------------------- |
mov eax,[background_color] |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
mov eax,[background_color] |
call .mix_RGB |
call .RGB_to_EAX |
call .clear_RGB |
mov edx,[next_pixel_y] |
call .mix_RGB |
;---------------------------- |
call .RGB_to_EAX1 |
;---------------------------- |
mov edx,128 ;100 |
sub edx,[next_pixel_y] |
call .mix_RGB |
call .RGB_to_EAX |
ret |
;--------------------------------------------------------------------- |
align 4 |
.check_filtering_16: |
cmp [filtering],0 |
je .16_1 |
mov ebx,[temp_y1] |
inc ebx |
cmp ebx,[y] |
jae .last_y_16 ;.24_1 |
mov ebx,[temp_x1] |
push eax |
mov eax,[x] |
dec eax |
shl eax,1 |
cmp ebx,eax |
pop eax |
jae .last_x_16 ;.24_1 |
;---------------------------- |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB_16 |
mov edx,[next_pixel_x] |
xor eax,eax |
mov ax,[ecx+2] |
call .mix_RGB_16 |
;---------------------------- |
call .copy_RGB_to_RGB1 |
;---------------------------- |
add ecx,[size_x] |
xor eax,eax |
mov ax,[ecx] |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB_16 |
mov edx,[next_pixel_x] |
xor eax,eax |
mov ax,[ecx+2] |
call .mix_RGB_16 |
call .RGB_to_EAX_16 |
call .clear_RGB |
mov edx,[next_pixel_y] |
call .mix_RGB_16 |
;---------------------------- |
call .RGB_to_EAX1_16 |
;---------------------------- |
mov edx,128 ;100 |
sub edx,[next_pixel_y] |
call .mix_RGB_16 |
call .RGB_to_EAX_16 |
.16_1: |
ret |
;--------------------------------------------------------------------- |
align 4 |
.last_y_16: |
mov ebx,[temp_x1] |
push eax |
mov eax,[x] |
dec eax |
shl eax,1 |
cmp ebx,eax |
pop eax |
jae .last_x_y_16 ;.16_1 |
mov ebx,[esp+4] |
; test ebx,ebx |
; jz .24_1 |
inc ebx |
cmp bx,[new_size.x1] |
jae .last_x_y_16 ;.16_1 |
;---------------------------- |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB_16 |
mov edx,[next_pixel_x] |
xor eax,eax |
mov ax,[ecx+2] |
call .mix_RGB_16 |
;---------------------------- |
call .copy_RGB_to_RGB1 |
;---------------------------- |
mov eax,[background_color] |
and eax,0xffff |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB_16 |
mov edx,[next_pixel_x] |
mov eax,[background_color] |
and eax,0xffff |
call .mix_RGB_16 |
call .RGB_to_EAX_16 |
call .clear_RGB |
mov edx,[next_pixel_y] |
call .mix_RGB_16 |
;---------------------------- |
call .RGB_to_EAX1_16 |
;---------------------------- |
mov edx,128 ;100 |
sub edx,[next_pixel_y] |
call .mix_RGB_16 |
call .RGB_to_EAX_16 |
ret |
;--------------------------------------------------------------------- |
align 4 |
.last_x_16: |
mov ebx,[temp_y1] |
inc ebx |
cmp ebx,[y] |
jae .last_x_y_16 ;.16_1 |
mov ebx,[esp+8] |
; test ebx,ebx |
; jz .24_1 |
inc ebx |
cmp bx,[new_size.y1] |
jae .last_x_y_16 ;.16_1 |
;---------------------------- |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB_16 |
mov edx,[next_pixel_x] |
mov eax,[background_color] |
and eax,0xffff |
call .mix_RGB_16 |
;---------------------------- |
call .copy_RGB_to_RGB1 |
;---------------------------- |
add ecx,[size_x] |
xor eax,eax |
mov ax,[ecx] |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB_16 |
mov edx,[next_pixel_x] |
mov eax,[background_color] |
and eax,0xffff |
call .mix_RGB_16 |
call .RGB_to_EAX_16 |
call .clear_RGB |
mov edx,[next_pixel_y] |
call .mix_RGB_16 |
;---------------------------- |
call .RGB_to_EAX1_16 |
;---------------------------- |
mov edx,128 ;100 |
sub edx,[next_pixel_y] |
call .mix_RGB_16 |
call .RGB_to_EAX_16 |
ret |
;--------------------------------------------------------------------- |
align 4 |
.last_x_y_16: |
;---------------------------- |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB_16 |
mov edx,[next_pixel_x] |
mov eax,[background_color] |
and eax,0xffff |
call .mix_RGB_16 |
;---------------------------- |
call .copy_RGB_to_RGB1 |
;---------------------------- |
mov eax,[background_color] |
and eax,0xffff |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB_16 |
mov edx,[next_pixel_x] |
mov eax,[background_color] |
and eax,0xffff |
call .mix_RGB_16 |
call .RGB_to_EAX_16 |
call .clear_RGB |
mov edx,[next_pixel_y] |
call .mix_RGB_16 |
;---------------------------- |
call .RGB_to_EAX1_16 |
;---------------------------- |
mov edx,128 ;100 |
sub edx,[next_pixel_y] |
call .mix_RGB_16 |
call .RGB_to_EAX_16 |
ret |
;--------------------------------------------------------------------- |
align 4 |
.get_palette: |
shl eax,2 |
add eax,[palette] |
mov eax,[eax] |
ret |
;--------------------------------------------------------------------- |
align 4 |
.check_filtering_8: |
xor eax,eax |
mov al,[ecx] |
call .get_palette |
mov ebx,[temp_y1] |
inc ebx |
cmp ebx,[y] |
jae .last_y_8 |
mov ebx,[temp_x1] |
push eax |
mov eax,[x] |
dec eax |
cmp ebx,eax |
pop eax |
jae .last_x_8 |
;---------------------------- |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
xor eax,eax |
mov al,[ecx+1] |
call .get_palette |
call .mix_RGB |
;---------------------------- |
call .copy_RGB_to_RGB1 |
;---------------------------- |
add ecx,[size_x] |
xor eax,eax |
mov al,[ecx] |
call .get_palette |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
xor eax,eax |
mov al,[ecx+1] |
call .get_palette |
call .mix_RGB |
call .RGB_to_EAX |
call .clear_RGB |
mov edx,[next_pixel_y] |
call .mix_RGB |
;---------------------------- |
call .RGB_to_EAX1 |
;---------------------------- |
mov edx,128 ;100 |
sub edx,[next_pixel_y] |
call .mix_RGB |
call .RGB_to_EAX |
.8_1: |
ret |
;--------------------------------------------------------------------- |
align 4 |
.last_y_8: |
mov ebx,[temp_x1] |
push eax |
mov eax,[x] |
dec eax |
cmp ebx,eax |
pop eax |
jae .last_x_y_8 ;.8_1 |
mov ebx,[esp+4] |
; test ebx,ebx |
; jz .24_1 |
inc ebx |
cmp bx,[new_size.x1] |
jae .last_x_y_8 ;.8_1 |
;---------------------------- |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
xor eax,eax |
mov al,[ecx+1] |
call .get_palette |
call .mix_RGB |
;---------------------------- |
call .copy_RGB_to_RGB1 |
;---------------------------- |
mov eax,[background_color] |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
mov eax,[background_color] |
call .mix_RGB |
call .RGB_to_EAX |
call .clear_RGB |
mov edx,[next_pixel_y] |
call .mix_RGB |
;---------------------------- |
call .RGB_to_EAX1 |
;---------------------------- |
mov edx,128 ;100 |
sub edx,[next_pixel_y] |
call .mix_RGB |
call .RGB_to_EAX |
;--------------------------------------- |
ret |
;--------------------------------------------------------------------- |
align 4 |
.last_x_8: |
mov ebx,[temp_y1] |
inc ebx |
cmp ebx,[y] |
jae .last_x_y_8 ;.8_1 |
mov ebx,[esp+8] |
; test ebx,ebx |
; jz .24_1 |
inc ebx |
cmp bx,[new_size.y1] |
jae .last_x_y_8 ;.8_1 |
;---------------------------- |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
mov eax,[background_color] |
call .mix_RGB |
;---------------------------- |
call .copy_RGB_to_RGB1 |
;---------------------------- |
add ecx,[size_x] |
xor eax,eax |
mov al,[ecx] |
call .get_palette |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
mov eax,[background_color] |
call .mix_RGB |
call .RGB_to_EAX |
call .clear_RGB |
mov edx,[next_pixel_y] |
call .mix_RGB |
;---------------------------- |
call .RGB_to_EAX1 |
;---------------------------- |
mov edx,128 ;100 |
sub edx,[next_pixel_y] |
call .mix_RGB |
call .RGB_to_EAX |
ret |
;--------------------------------------------------------------------- |
align 4 |
.last_x_y_8: |
;---------------------------- |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
mov eax,[background_color] |
call .mix_RGB |
;---------------------------- |
call .copy_RGB_to_RGB1 |
;---------------------------- |
mov eax,[background_color] |
call .clear_RGB |
mov edx,128 ;100 |
sub edx,[next_pixel_x] |
call .mix_RGB |
mov edx,[next_pixel_x] |
mov eax,[background_color] |
call .mix_RGB |
call .RGB_to_EAX |
call .clear_RGB |
mov edx,[next_pixel_y] |
call .mix_RGB |
;---------------------------- |
call .RGB_to_EAX1 |
;---------------------------- |
mov edx,128 ;100 |
sub edx,[next_pixel_y] |
call .mix_RGB |
call .RGB_to_EAX |
ret |
;--------------------------------------------------------------------- |
/programs/media/zsea/plugins/scaling/build.bat |
---|
0,0 → 1,3 |
@fasm -m 16384 scaling.asm scaling.obj |
@kpack scaling.obj |
@pause |
/programs/media/zsea/plugins/scaling/build.sh |
---|
0,0 → 1,10 |
#!/bin/bash |
# This script does for Linux the same as build.bat for DOS, |
# it compiles the current KolibriOS applications |
fasm -m 16384 scaling.asm scaling.obj |
kpack scaling.obj |
exit 0 |
/programs/media/zsea/plugins/scaling/macros.inc |
---|
0,0 → 1,269 |
; new application structure |
macro meos_app_start |
{ |
use32 |
org 0x0 |
db 'MENUET01' |
dd 0x01 |
dd __start |
dd __end |
dd __memory |
dd __stack |
if used __params & ~defined __params |
dd __params |
else |
dd 0x0 |
end if |
dd 0x0 |
} |
MEOS_APP_START fix meos_app_start |
macro code |
{ |
__start: |
} |
CODE fix code |
macro data |
{ |
__data: |
} |
DATA fix data |
macro udata |
{ |
if used __params & ~defined __params |
__params: |
db 0 |
__end: |
rb 255 |
else |
__end: |
end if |
__udata: |
} |
UDATA fix udata |
macro meos_app_end |
{ |
align 32 |
rb 2048 |
__stack: |
__memory: |
} |
MEOS_APP_END fix meos_app_end |
; macro for defining multiline text data |
struc mstr [sstring] |
{ |
forward |
local ssize |
virtual at 0 |
db sstring |
ssize = $ |
end virtual |
dd ssize |
db sstring |
common |
dd -1 |
} |
; strings |
macro sz name,[data] { ; from MFAR [mike.dld] |
common |
if used name |
label name |
end if |
forward |
if used name |
db data |
end if |
common |
if used name |
.size = $-name |
end if |
} |
macro lsz name,[lng,data] { ; from MFAR [mike.dld] |
common |
if used name |
label name |
end if |
forward |
if (used name)&(lang eq lng) |
db data |
end if |
common |
if used name |
.size = $-name |
end if |
} |
; easy system call macro |
macro mpack dest, hsrc, lsrc |
{ |
if (hsrc eqtype 0) & (lsrc eqtype 0) |
mov dest, (hsrc) shl 16 + lsrc |
else |
if (hsrc eqtype 0) & (~lsrc eqtype 0) |
mov dest, (hsrc) shl 16 |
add dest, lsrc |
else |
mov dest, hsrc |
shl dest, 16 |
add dest, lsrc |
end if |
end if |
} |
macro __mov reg,a,b { ; mike.dld |
if (~a eq)&(~b eq) |
mpack reg,a,b |
else if (~a eq)&(b eq) |
mov reg,a |
end if |
} |
macro mcall a,b,c,d,e,f { ; mike.dld |
__mov eax,a |
__mov ebx,b |
__mov ecx,c |
__mov edx,d |
__mov esi,e |
__mov edi,f |
int 0x40 |
} |
; optimize the code for size |
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp> |
macro add arg1,arg2 |
{ |
if (arg2 eqtype 0) |
if (arg2) = 1 |
inc arg1 |
else |
add arg1,arg2 |
end if |
else |
add arg1,arg2 |
end if |
} |
macro sub arg1,arg2 |
{ |
if (arg2 eqtype 0) |
if (arg2) = 1 |
dec arg1 |
else |
sub arg1,arg2 |
end if |
else |
sub arg1,arg2 |
end if |
} |
macro mov arg1,arg2 |
{ |
if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0')) |
if (arg2) = 0 |
xor arg1,arg1 |
else if (arg2) = 1 |
xor arg1,arg1 |
inc arg1 |
else if (arg2) = -1 |
or arg1,-1 |
else if (arg2) > -128 & (arg2) < 128 |
push arg2 |
pop arg1 |
else |
mov arg1,arg2 |
end if |
else |
mov arg1,arg2 |
end if |
} |
macro struct name |
{ |
virtual at 0 |
name name |
sizeof.#name = $ - name |
end virtual |
} |
; structures used in MeOS |
struc process_information |
{ |
.cpu_usage dd ? ; +0 |
.window_stack_position dw ? ; +4 |
.window_stack_value dw ? ; +6 |
.not_used1 dw ? ; +8 |
.process_name rb 12 ; +10 |
.memory_start dd ? ; +22 |
.used_memory dd ? ; +26 |
.PID dd ? ; +30 |
.x_start dd ? ; +34 |
.y_start dd ? ; +38 |
.x_size dd ? ; +42 |
.y_size dd ? ; +46 |
.slot_state dw ? ; +50 |
dw ? ; +52 - reserved |
.client_left dd ? ; +54 |
.client_top dd ? ; +58 |
.client_width dd ? ; +62 |
.client_height dd ? ; +66 |
.wnd_state db ? ; +70 |
rb (1024-71) |
} |
;struct process_information |
struc system_colors |
{ |
.frame dd ? |
.grab dd ? |
.grab_button dd ? |
.grab_button_text dd ? |
.grab_text dd ? |
.work dd ? |
.work_button dd ? |
.work_button_text dd ? |
.work_text dd ? |
.work_graph dd ? |
} |
;struct system_colors |
; constants |
; events |
EV_IDLE = 0 |
EV_TIMER = 0 |
EV_REDRAW = 1 |
EV_KEY = 2 |
EV_BUTTON = 3 |
EV_EXIT = 4 |
EV_BACKGROUND = 5 |
EV_MOUSE = 6 |
EV_IPC = 7 |
EV_STACK = 8 |
; event mask bits for function 40 |
EVM_REDRAW = 1b |
EVM_KEY = 10b |
EVM_BUTTON = 100b |
EVM_EXIT = 1000b |
EVM_BACKGROUND = 10000b |
EVM_MOUSE = 100000b |
EVM_IPC = 1000000b |
EVM_STACK = 10000000b |
/programs/media/zsea/plugins/scaling/scaling.asm |
---|
0,0 → 1,481 |
;***************************************************************************** |
; Scaling RAW image plugin - for zSea image viewer |
; Copyright (c) 2009 - 2011, Marat Zakiyanov aka Mario79, aka Mario |
; All rights reserved. |
; |
; Redistribution and use in source and binary forms, with or without |
; modification, are permitted provided that the following conditions are met: |
; * Redistributions of source code must retain the above copyright |
; notice, this list of conditions and the following disclaimer. |
; * Redistributions in binary form must reproduce the above copyright |
; notice, this list of conditions and the following disclaimer in the |
; documentation and/or other materials provided with the distribution. |
; * Neither the name of the <organization> nor the |
; names of its contributors may be used to endorse or promote products |
; derived from this software without specific prior written permission. |
; |
; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY |
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY |
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
;***************************************************************************** |
; Scaling 32b, 24b, 16b, 8b |
format MS COFF |
public EXPORTS |
section '.flat' code readable align 16 |
include 'macros.inc' |
include '../../../../macros.inc' |
;--------------------------------------------------------------------- |
START: |
pushad |
mov [pointer],eax |
test bx,bx |
jnz @f |
inc bx |
@@: |
ror ebx,16 |
test bx,bx |
jnz @f |
inc bx |
@@: |
rol ebx,16 |
mov [new_size],ebx |
mov [start_coordinates],ecx |
mov [scaling_mode],edx |
mov [filtering],esi |
mov [background_color],edi |
mov eax,[eax+4] |
mov [image_file],eax |
mov esi,[eax+28] |
add esi,eax |
mov ebx,[eax+20] |
add ebx,eax |
mov [palette],ebx |
mov ebx,[eax+12] |
mov [resolution],ebx |
cmp ebx,32 |
jne @f |
mov ebp,dword START.32 |
jmp .1 |
@@: |
cmp ebx,24 |
jne @f |
mov ebp,dword START.24 |
jmp .1 |
@@: |
cmp ebx,16 |
jne @f |
mov ebp,dword START.16 |
jmp .1 |
@@: |
cmp ebx,15 |
jne @f |
inc ebx |
mov ebp,dword START.16 |
jmp .1 |
@@: |
cmp ebx,8 |
jne @f |
mov ebp,dword START.8 |
@@: |
.1: |
shr ebx,3 |
mov [bytes_to_pixel],ebx |
mov ebx,[eax+8] |
mov [y],ebx |
mov ebx,[eax+4] |
mov [x],ebx |
imul ebx,[bytes_to_pixel] |
mov [size_x],ebx |
mov eax,100 |
shl eax,12 |
mov ebx,[scaling_mode] |
test ebx,ebx |
jnz @f |
inc ebx |
@@: |
xor edx,edx |
div ebx |
mov [scaling_delta],eax |
call .get_memory |
cmp [scaling_mode],0 |
jne @f |
call .scaling |
jmp .ret_ok |
@@: |
call .scaling_2 |
;--------------------------------------------------------------------- |
.ret_ok: |
mcall 68,13,[area_for_x] |
mov ebx,[pointer] |
mov eax,[raw_area] |
mov [ebx+20],eax ; store RAW pointer |
; movzx eax,word [new_size.x1] |
; mov [ebx+24],esi ;eax |
; movzx eax,word [new_size.y1] |
; mov [ebx+28],eax |
; mov eax,[size_x] |
; mov [ebx+32],eax |
; mov eax,[bytes_to_pixel] |
; mov [ebx+36],eax |
; mov eax,[x] |
; mov [ebx+40],eax |
; mov eax,[y] |
; mov [ebx+44],eax |
.exit: |
popad |
ret |
;--------------------------------------------------------------------- |
align 4 |
.scaling: |
xor ecx,ecx |
.y: |
xor ebx,ebx |
;------------------------- |
.x: |
call ebp |
inc ebx |
cmp bx,[new_size.x1] |
jb .x |
;------------------------- |
inc ecx |
cmp cx,[new_size.y1] |
jb .y |
ret |
;--------------------------------------------------------------------- |
align 4 |
.scaling_2: |
xor eax,eax |
mov ax,[start_coordinates.y] |
imul eax,[size_x] |
add esi,eax |
xor eax,eax |
mov ax,[start_coordinates.x] |
imul eax,[bytes_to_pixel] |
add esi,eax |
xor eax,eax |
dec eax |
mov [temp_y],eax |
xor ecx,ecx |
align 4 |
.y_2: |
xor ebx,ebx |
;------------------------- |
align 4 |
.x_2: |
call ebp |
inc ebx |
cmp bx,[new_size.x1] |
jb .x_2 |
;------------------------- |
inc ecx |
cmp cx,[new_size.y1] |
jb .y_2 |
ret |
;--------------------------------------------------------------------- |
align 4 |
.32: |
push ecx ebx |
call .calculate_pixel |
mov eax,[ecx] |
call .check_filtering_32 |
pop ebx ecx |
cld |
stosd |
ret |
;--------------------------------------------------------------------- |
align 4 |
.24: |
push ecx ebx |
call .calculate_pixel |
mov eax,[ecx] |
call .check_filtering_24 |
cld |
stosw |
shr eax,16 |
pop ebx ecx |
cld |
stosb |
ret |
;--------------------------------------------------------------------- |
align 4 |
.16: |
push ecx ebx |
call .calculate_pixel |
xor eax,eax |
mov ax,[ecx] |
call .check_filtering_16 |
pop ebx ecx |
cld |
stosw |
ret |
;--------------------------------------------------------------------- |
align 4 |
.8: |
push ecx ebx |
call .calculate_pixel |
cmp [filtering],0 |
jne @f |
mov al,[ecx] |
pop ebx ecx |
cld |
stosb |
ret |
@@: |
call .check_filtering_8 |
cld |
stosw |
shr eax,16 |
pop ebx ecx |
cld |
stosb |
ret |
;--------------------------------------------------------------------- |
align 4 |
.calculate_pixel: |
test ecx,ecx |
jz .offset_x |
;.offset_y: |
mov eax,ecx |
mov ecx,[temp_y] |
cmp eax,ecx |
jne .new_y |
mov eax,[temp_y_offset] |
mov ecx,eax |
jmp .offset_x |
;-------------------------------- |
align 4 |
.new_y: |
mov [temp_y],eax |
mov ebx,[scaling_mode] |
test ebx,ebx |
jz @f |
imul eax,[scaling_delta] |
;-------------------------------- |
push ebx |
mov ebx,eax |
shr eax,12 |
and ebx,0xFFF |
shl ebx,7 ;multiply 128 |
shr ebx,12 |
mov [next_pixel_y],ebx |
pop ebx |
;-------------------------------- |
jmp .ex_1 |
align 4 |
@@: |
;-------------------------------- |
imul eax,dword [y] |
mov bx,word [new_size.y1] |
;-------------------------------- |
align 4 |
.y_div: |
test ebx,ebx |
jnz @f |
inc ebx |
align 4 |
@@: |
xor edx,edx |
div ebx |
;-------------------------------- |
push eax |
mov eax,edx |
shl eax,7 ;multiply 128 |
xor edx,edx |
div ebx |
mov [next_pixel_y],eax |
pop eax |
;-------------------------------- |
align 4 |
.ex_1: |
mov [temp_y1],eax |
imul eax,[size_x] |
mov [temp_y_offset],eax |
mov ecx,eax |
align 4 |
.offset_x: |
test ebx,ebx |
jz .finish |
mov eax,[esp+4] ;ebx |
mov edx,[esp+8] |
test edx,edx |
jz .continue |
shl eax,3 |
add eax,[area_for_x] |
mov edx,[eax+4] |
mov [next_pixel_x],edx |
mov eax,[eax] |
jmp .ex_3 |
;-------------------------------- |
align 4 |
.continue: |
mov ebx,[scaling_mode] |
test ebx,ebx |
jz @f |
imul eax,[scaling_delta] |
;-------------------------------- |
mov ebx,eax |
shr eax,12 |
and ebx,0xFFF |
shl ebx,7 ;multiply 128 |
shr ebx,12 |
mov [next_pixel_x],ebx |
;-------------------------------- |
jmp .ex_2 |
;-------------------------------- |
align 4 |
@@: |
imul eax,dword [x] |
mov bx,word [new_size.x1] |
;-------------------------------- |
align 4 |
.x_div: |
test ebx,ebx |
jnz @f |
inc ebx |
align 4 |
@@: |
xor edx,edx |
div ebx |
;-------------------------------- |
push eax |
mov eax,edx |
shl eax,7 ;multiply 128 |
xor edx,edx |
div ebx |
mov [next_pixel_x],eax |
pop eax |
;-------------------------------- |
align 4 |
.ex_2: |
mov edx,[bytes_to_pixel] |
mov ebx,eax |
xor eax,eax |
align 4 |
@@: |
add eax,ebx |
dec edx |
jnz @r |
mov ebx,[esp+4] |
shl ebx,3 |
add ebx,[area_for_x] |
mov [ebx],eax |
mov edx,[next_pixel_x] |
mov [ebx+4],edx |
align 4 |
.ex_3: |
mov [temp_x1],eax |
add ecx,eax |
align 4 |
.finish: |
add ecx,esi |
ret |
;--------------------------------------------------------------------- |
align 4 |
.get_memory: |
xor ecx,ecx |
mov cx,[new_size.x1] |
shl ecx,3 |
mcall 68,12 |
mov [area_for_x],eax |
xor ecx,ecx |
mov ebx,[new_size] |
mov cx,bx |
shr ebx,16 |
imul ecx,ebx ;[eax+8] |
mov eax,[bytes_to_pixel] |
cmp eax,1 |
jne @f |
mov eax,3 |
@@: |
imul ecx,eax |
mcall 68,12 |
mov [raw_area],eax |
mov edi,eax |
ret |
;--------------------------------------------------------------------- |
include 'b_filter.inc' |
;--------------------------------------------------------------------- |
align 4 |
EXPORTS: |
dd szStart, START |
dd szVersion, 0x00010001 |
dd 0 |
szStart db 'START',0 |
szVersion db 'version',0 |
align 4 |
pointer dd 0 |
image_file dd 0 |
new_size: |
.y1: dw 0 |
.x1: dw 0 |
x: dd 0 |
y: dd 0 |
size_x dd 0 |
bytes_to_pixel dd 0 |
start_coordinates: |
.y dw 0 |
.x dw 0 |
scaling_mode dd 0 |
raw_area dd 0 |
scaling_delta dd 0 |
area_for_x dd 0 |
temp_y dd 0 |
temp_y_offset dd 0 |
resolution dd 0 |
filtering dd 0 |
next_pixel_y dd 0 |
next_pixel_x dd 0 |
temp_y1 dd 0 |
temp_x1 dd 0 |
B_sample dd 0 |
G_sample dd 0 |
R_sample dd 0 |
B_sample_1 dd 0 |
G_sample_1 dd 0 |
R_sample_1 dd 0 |
palette dd 0 |
background_color dd 0 |
/programs/media/zsea/plugins/scaling/scaling.obj |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/media/zsea/plugins/scaling |
---|
Property changes: |
Added: tsvn:logminsize |
+5 |
\ No newline at end of property |
/programs/media/zsea/plugins |
---|
Property changes: |
Added: tsvn:logminsize |
+5 |
\ No newline at end of property |
/programs/media/zsea/w_about.inc |
---|
0,0 → 1,128 |
;--------------------------------------------------------------------- |
kabout: |
test dword [status],4 |
jnz still |
or dword [status],4 |
call get_memory_for_tread_stack |
mov [thread_stack_3],eax |
mcall 51,1,thread3 ;,thread_stack_3 |
jmp still |
;--------------------------------------------------------------------- |
thread3: ; start of bgrd thread |
mcall 9, procinfo_threads, -1 |
mov eax,[ebx+30] |
mov [PID3],eax |
mcall 40, 0x7 |
.red: |
call .draw_window |
.still: |
mov eax,10 ; wait here for event |
mcall |
cmp eax,1 ; redraw request ? |
je .red |
cmp eax,2 ; key in buffer ? |
je .close ;.key |
cmp eax,3 ; button in buffer ? |
je .button |
jmp .still |
; .key: |
; mcall |
; cmp ah,27 |
; je .close |
; jmp .still |
.button: ; button |
mov eax,17 ; get id |
mcall |
cmp ah,1 ; button id=1 ? |
je .close |
cmp ah,2 |
jne .still ;noclose3 |
.close: |
; btr dword [status],3 |
; bts dword [status],2 |
xor dword [status],4 |
xor eax,eax |
mov [PID3],eax |
mcall 68,13,[thread_stack_3] |
mov eax,-1 ; close this program |
mcall |
; .noclose: |
; jmp still3 |
; ********************************************* |
; ******* WINDOW DEFINITIONS AND DRAW ******** |
; ********************************************* |
.draw_window: |
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,1 ; 1, start of draw |
mcall |
; DRAW WINDOW |
xor eax,eax ; function 0 : define and draw window |
mov ebx,100*65536+300 ; [x start] *65536 + [x size] |
mov ecx,100*65536+240 ; [y start] *65536 + [y size] |
mov edx,0x03eeeeee ; color of work area RRGGBB,8->color gl |
mcall |
mov ebx,120*65536+40 |
mov ecx,210*65536+20 |
mov edx,2 |
mov esi,0xdddddd |
mcall 8 |
pusha |
mcall 4,<20,30>,0x80000000,Authors_text.1 |
mcall ,<30,45>, ,Authors_text.2 |
mcall ,<30,60>, ,Authors_text.3 |
mcall ,<60,70>, ,Authors_text.4 |
mcall ,<60,80>, ,Authors_text.5 |
mcall ,<60,90>, ,Authors_text.6 |
mcall ,<60,100>, ,Authors_text.7 |
mcall ,<30,115>, ,Authors_text.8 |
mcall ,<60,125>, ,Authors_text.9 |
mcall ,<60,135>, ,Authors_text.10 |
mcall ,<30,150>, ,Authors_text.11 |
mcall ,<60,160>, ,Authors_text.12 |
mcall ,<30,175>, ,Authors_text.13 |
mcall ,<60,185>, ,Authors_text.14 |
popa |
add ebx,15 shl 16 |
shr ecx,16 |
mov bx,cx |
add ebx,6 |
mov ecx,0 |
mov edx, ok_btn |
mov esi, ok_btn.size ;2 |
mcall 4 |
; WINDOW LABEL |
mcall 71,1, labelt3 |
; mcall 47,0x80000,[PID3],<200, 5>,0xffffff |
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,2 ; 2, end of draw |
mcall |
ret |
;--------------------------------------------------------------------- |
/programs/media/zsea/w_error.inc |
---|
0,0 → 1,92 |
error_window: |
test dword [status],32 |
jnz still |
or dword [status],32 |
mcall 9, procinfo, -1 |
mov eax,[ebx+46] |
test eax,eax |
jnz @f |
mov eax,100 |
mov [error_window_y+2],ax |
mov [error_window_x+2],ax |
jmp .end |
@@: |
shr eax,1 |
add eax,[ebx+38] |
sub eax,50 |
mov [error_window_y+2],ax |
mov eax,[ebx+42] |
shr eax,1 |
add eax,[ebx+34] |
sub eax,150 |
mov [error_window_x+2],ax |
.end: |
call get_memory_for_tread_stack |
mov [thread_stack_6],eax |
mcall 51,1,thread6 ;,thread_stack_6 |
ret |
;--------------------------------------------------------------------- |
thread6: |
mcall 9, procinfo_threads, -1 |
mov eax,[ebx+30] |
mov [PID6],eax |
mcall 40, 0x7 |
mov [error_pointer],string |
.red: |
call .draw_error_window |
.still: |
mcall 10 |
cmp eax,1 |
je .red |
cmp eax,2 ; key in buffer ? |
je .key |
cmp eax,3 |
je .button |
jmp .still |
.key: ; key |
.button: |
xor dword [status],32 |
xor eax,eax |
mov [PID6],eax |
mcall 68,13,[thread_stack_6] |
mcall -1 |
jmp .still |
;--------------------------------------------------------------------- |
.draw_error_window: |
mcall 12, 1 |
mcall 0,[error_window_x] ,[error_window_y], 0x03ff0000 |
mcall 71,1, errortext |
mcall 4,<10,30>,0x80ffffff,[error_pointer] |
cmp [return_code],0 |
je .continue |
cmp [return_code],1 |
jne @f |
mcall 4,<10,50>,0x90ffffff,error_not_supported_file |
jmp .end |
@@: |
cmp [return_code],2 |
jne @f |
mcall 4,<10,50>,0x90ffffff,error_not_enough_memory |
jmp .end |
@@: |
mcall 4,<10,50>,0x90ffffff,error_unknown |
jmp .end |
.continue: |
mcall 4,<10,50>,0x90ffffff,error_type |
mcall 47,0x800a0000,[error_fs],<140,50>,0x10ffffff |
mov edx,[error_fs] |
cmp edx,0 |
jb .end |
cmp edx,11 |
ja .end |
shl edx,2 |
add edx,error_fs_text_pointers |
mov edx,[edx] |
mcall 4,<10,70>,0x90ffffff, |
; mcall 47,0x800a0000,[error_locate],<140,5>,0x10ffffff |
.end: |
; mcall 47,0x80000,[PID6],<200, 5>,0xffffff |
mcall 12, 2 |
ret |
;--------------------------------------------------------------------- |
/programs/media/zsea/win_bcgr.inc |
---|
0,0 → 1,143 |
;--------------------------------------------------------------------- |
k_background: |
test dword [status],8 |
jnz still |
or dword [status],8 |
call get_memory_for_tread_stack |
mov [thread_stack_4],eax |
mcall 51,1,thread4 ;, thread_stack_4 |
jmp still |
;--------------------------------------------------------------------- |
thread4: ; start of bgrd thread |
mcall 9, procinfo_threads, -1 |
mov eax,[ebx+30] |
mov [PID4],eax |
mcall 40, 0x27 |
.red: |
call .draw_window |
.still: |
mov eax,10 ; wait here for event |
mcall |
cmp eax,1 ; redraw request ? |
je .red |
cmp eax,2 ; key in buffer ? |
je .key |
cmp eax,3 ; button in buffer ? |
je .button |
cmp eax,6 ; mouse in buffer ? |
je .mouse |
jmp .still |
.mouse: |
push dword option_boxes_bcgr |
call [option_box_mouse] |
cmp [option_group1],op1 |
jne @f |
mov [bgrmode],dword 1 |
jmp .still |
@@: |
mov [bgrmode],dword 2 |
jmp .still |
.key: |
mcall |
cmp ah,27 |
je .close |
cmp ah,13 |
je .kok |
cmp ah,178 ;up |
jne .nofup |
cmp dword [bgrmode],1 |
je .fdn |
.fup: |
dec dword [bgrmode] |
jmp .flagcont |
.nofup: |
cmp ah,177 ;down |
jne .still |
cmp dword [bgrmode],2 |
je .fup |
.fdn: |
inc dword [bgrmode] |
.flagcont: |
cmp [bgrmode],dword 1 |
jne @f |
mov [option_group1],op1 |
call .draw_opt_boxes |
jmp .still |
@@: |
mov [option_group1],op2 |
call .draw_opt_boxes |
jmp .still |
.button: ; button |
mov eax,17 ; get id |
mcall |
cmp ah,1 ; button id=1 ? |
jne .noclose |
.close: |
xor dword [status],8 |
xor eax,eax |
mov [PID4],eax |
mcall 68,13,[thread_stack_4] |
mov eax,-1 ; close this program |
mcall |
.noclose: |
.kok: |
call background |
jmp .close |
; ********************************************* |
; ******* WINDOW DEFINITIONS AND DRAW ******** |
; ********************************************* |
.draw_window: |
mcall 12,1 |
; DRAW WINDOW |
xor eax,eax ; function 0 : define and draw window |
mov ebx,100*65536+200 ; [x start] *65536 + [x size] |
mov ecx,100*65536+100 ; [y start] *65536 + [y size] |
mov edx,0x03909090 ; color of work area RRGGBB,8->color gl |
mcall |
mov eax,8 |
mov ebx,70*65536+40 |
mov ecx,70*65536+20 |
mov edx,4 |
mov esi,0xdddddd |
mcall |
; WINDOW LABEL |
mcall 71,1, labelt4 |
mov eax,4 ; function 4 : write text to window |
mov ebx,46*65536+28 ; [x start] *65536 + [y start] |
mov ecx,0xffffff |
mov edx, bgrdtext |
mov esi, bgrdtext.size |
mcall |
add ebx,40*65536+48 |
mov edx, ok_btn |
mov esi, ok_btn.size ;2 |
mov ecx,0 |
mcall |
call .draw_opt_boxes |
; mcall 47,0x80000,[PID4],<200, 5>,0xffffff |
mcall 12,2 |
ret |
;--------------------------------------------------------------------- |
.draw_opt_boxes: |
push dword option_boxes_bcgr |
call [option_box_draw] |
ret |
/programs/media/zsea/win_file.inc |
---|
0,0 → 1,195 |
;--------------------------------------------------------------------- |
kfile: |
test dword [status],1 |
jnz still |
or dword [status],1 |
call load_directory.copy_dir_path |
; call get_filter_data |
cmp [OpenDialog_path],dword 'NoKe' |
je @f |
mov [OpenDialog_data.start_path],dword OpenDialog_path |
jmp .start_OpenDialog |
@@: |
mov ebx,open_dialog_name |
mov esi,path |
mov edi,library_path |
call copy_file_path |
.start_OpenDialog: |
;start_OpenDialog OpenDialog_data |
push dword OpenDialog_data |
call [OpenDialog_Start] |
call clear_control_key_flag |
cmp [OpenDialog_data.status],2 |
je thread1_start |
cmp [OpenDialog_data.status],1 |
jne @f |
xor dword [status],1 |
jmp kopen_1 |
@@: |
xor dword [status],1 |
jmp still |
thread1_start: |
call get_memory_for_tread_stack |
mov [thread_stack],eax |
mcall 51,1,thread1 ;, thread_stack |
jmp still |
;--------------------------------------------------------------------- |
get_filter_data: |
mov edi,Filter+4 |
xor eax,eax |
mov ecx,10 |
cld |
@@: |
mov esi,10 |
sub esi,ecx |
lea esi,[esi+esi*2] ; x 3 |
shl esi,3 ; x 8 |
add esi,dword Convert_plugin_0.Assoc |
mov esi,[esi] |
add esi,4 |
test esi,esi |
jz @f |
call .start |
dec ecx |
jnz @r |
@@: |
mov [edi],byte 0 |
mov eax,Filter |
sub edi,eax |
mov [eax],edi |
ret |
.start: |
@@: |
lodsb |
stosb |
test eax,eax |
jnz @r |
cmp [esi],ah |
jne @r |
ret |
;--------------------------------------------------------------------- |
thread1: ; start of thread1 |
mcall 9, procinfo_threads, -1 |
mov eax,[ebx+30] |
mov [PID1],eax |
mcall 40, 0x27 |
or ecx,-1 ; get information about me |
call getappinfo |
mov esi,string |
@@: |
cld |
lodsb |
test al,al |
jne @r |
sub esi,string |
mov eax,esi |
dec eax |
mov edi, edit1 |
mov [edi+48], eax ;ed_size |
mov [edi+52], eax ;ed_pos |
.red: |
call .draw_window |
.still: |
mcall 10 ; wait here for event |
cmp eax,1 ; redraw request ? |
je .red |
cmp eax,2 ; key in buffer ? |
je .key |
cmp eax,3 ; button in buffer ? |
je .button |
push dword name_editboxes |
call [edit_box_mouse] |
; mouse_edit_box name_editboxes |
; mouse_menubar menu_data_2 |
jmp .still |
.key: ; key |
mcall 2 |
cmp ah,13 |
je .close_with_open_file |
cmp ah,27 |
je .close |
push dword name_editboxes |
call [edit_box_key] |
; key_edit_box name_editboxes |
jmp .still |
.close_with_open_file: |
mov [open_file_flag],byte 1 |
jmp .close |
.button: ; button |
mov eax,17 ; get id |
mcall |
cmp ah,1 ; button id=1 ? |
jne .still |
.close: |
; bts dword [status],2 |
; btr dword [status],0 |
xor dword [status],1 |
xor eax,eax |
mov [PID1],eax |
mcall 68,13,[thread_stack] |
mov eax,-1 ; close this program |
mcall |
jmp .still |
; ********************************************* |
; ******* WINDOW DEFINITIONS AND DRAW ******** |
; ********************************************* |
.draw_window: |
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,1 ; 1, start of draw |
mcall |
; DRAW WINDOW |
xor eax,eax ; function 0 : define and draw window |
mov ebx,100*65536+300 ; [x start] *65536 + [x size] |
mov ecx,100*65536+80 ; [y start] *65536 + [y size] |
mov edx,0x03eeeeee ; color of work area RRGGBB,8->color gl |
mcall |
; WINDOW LABEL |
mcall 71,1, labelt1 |
push dword name_editboxes |
call [edit_box_draw] |
; draw_edit_box name_editboxes |
; mcall 47,0x80000,[PID1],<200, 5>,0xffffff |
; mcall 71,1, proverka |
; mcall 47,0x80001,0,<300, 5>,0xffffff |
; draw_menu_bar menu_data_2 |
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,2 ; 2, end of draw |
mcall |
ret |
;--------------------------------------------------------------------- |
/programs/media/zsea/win_info.inc |
---|
0,0 → 1,269 |
;--------------------------------------------------------------------- |
kinfo: |
test dword [status],2 |
jnz still |
or dword [status],2 |
call get_memory_for_tread_stack |
mov [thread_stack_2],eax |
mcall 51,1,thread2 ;, thread_stack_2 |
jmp still |
;--------------------------------------------------------------------- |
thread2: ; start of info thread |
mcall 9, procinfo_threads, -1 |
mov eax,[ebx+30] |
mov [PID2],eax |
mcall 40, 0x7 |
call load_directory.copy_dir_path |
.red: |
call .draw_window |
.still: |
mov eax,10 ; wait here for event |
mcall |
cmp eax,1 ; redraw request ? |
je .red |
cmp eax,2 ; key in buffer ? |
je .close |
cmp eax,3 ; button in buffer ? |
je .button |
jmp .still |
.button: ; button |
mov eax,17 ; get id |
mcall |
cmp ah,1 ; button id=1 ? |
jne .still ;.noclose |
.close: |
; btr dword [status],1 |
; bts dword [status],2 |
xor dword [status],2 |
xor eax,eax |
mov [PID2],eax |
mcall 68,13,[thread_stack_2] |
mov eax,-1 ; close this program |
mcall |
;.noclose: |
; jmp .still |
; ********************************************* |
; ******* WINDOW DEFINITIONS AND DRAW ******** |
; ********************************************* |
.draw_window: |
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,1 ; 1, start of draw |
mcall |
; DRAW WINDOW |
xor eax,eax ; function 0 : define and draw window |
mov ebx,100*65536+330 ; [x start] *65536 + [x size] |
mov ecx,100*65536+120 ;290 ; [y start] *65536 + [y size] |
mov edx,0x03eeeeee ; color of work area RRGGBB,8->color gl |
mcall |
; WINDOW LABEL |
mcall 71,1, labelt2 |
; mov ecx,0x80000000 ; font 1 & color ( 0xF0RRGGBB ) |
; mov ebx,120*65536+30 |
; mov edx,file_name ;string |
; mov esi,1 ;43 |
mcall 4,<120,30>,0x80000000,file_name |
mov edx,fitext |
mov esi,14 |
mov ebx,10*65536+30 |
mov ecx,0x10000000 |
@@: |
mcall |
add ebx,10 |
add edx,esi |
cmp ebx,10*65536+80 |
jbe @r |
mov eax,47 |
mov edx,120*65536+40 |
mov esi,ecx |
mov ecx, [img_size] |
mov ebx,0x800a0000 |
mcall |
add edx,10 |
mov ecx,[img_width_2] |
mcall |
add edx,10 |
mov ecx,[img_high_2] |
mcall |
add edx,10 |
mov ecx,[img_resolution_2] |
mcall |
add edx,10 |
mov ecx,[Total_Repeat_N] |
mcall |
; add edx,10 |
; mov ecx,[communication_area] |
; mov ecx,[ecx+4096] |
; mcall |
; add edx,10 |
; mov ecx,[communication_area] |
; mov ecx,[ecx+4096+4] |
; mcall |
; add edx,10+10 |
; mov ecx,[zoom_auto_factor] |
; mcall |
; add edx,10+10 |
; mov ecx,[scroll_bar_data_vertical.max_area] ;[img_resolution] |
; mcall |
; add edx,10 |
; mov ecx,[scroll_bar_data_vertical.cur_area] ;[return_code] |
; mcall |
; add edx,10 |
; mov ecx,[scroll_bar_data_vertical.position] |
; mcall |
; add edx,10 |
; xor ecx,ecx |
; mov cx,[scroll_bar_data_vertical.size_y] |
; mcall |
; add edx,10+10 |
; mcall 47,0x80000,[OpenDialog_Init] |
; add edx,10+10 |
; mcall 47,0x80000,[OpenDialog_Start] |
; add edx,10+10 |
; mcall 47,0x80000,[OpenDialog_data.com_area] |
; add edx,10+10 |
; mcall 47,0x80000,I_END |
; add edx,10+10 |
; mov ecx,[scroll_bar_data_horizontal.max_area] ;[img_resolution] |
; mcall |
; add edx,10 |
; mov ecx,[scroll_bar_data_horizontal.cur_area] ;[return_code] |
; mcall |
; add edx,10 |
; mov ecx,[scroll_bar_data_horizontal.position] |
; mcall |
; add edx,10 |
; xor ecx,ecx |
; mov cx,[scroll_bar_data_horizontal.size_x] |
; mcall |
; add edx,10 |
; mov ecx,[raw_pointer] ;[deflate_unpack] |
; mcall |
; add edx,10+10 |
; mov ebp,test1 ;raw_pointer_2 |
; mov ecx,[ebp] |
; mcall |
; add edx,10+10 |
; mov ebp,size_before_open_dir ;lib_init ;test1 ;raw_pointer_2 |
; mov ecx,[ebp] |
; mcall |
; add edx,10 |
; add ebp,4 |
; mov ecx,[ebp] |
; mcall |
; add edx,10 |
; add ebp,4 |
; mov ecx,[ebp] |
; mcall |
; add edx,10 |
; add ebp,4 |
; mov ecx,[ebp] |
; mcall |
; add edx,10 |
; add ebp,4 |
; mov ecx,[ebp] |
; mcall |
; add edx,10 |
; add ebp,4 |
; mov ecx,[ebp] |
; mcall |
; add edx,10 |
; add ebp,4 |
; mov ecx,[ebp] |
; mcall |
; add edx,10 |
; add ebp,4 |
; mov ecx,[ebp] |
; mcall |
; add edx,10 |
; add ebp,4 |
; mov ecx,[ebp] |
; mcall |
; add edx,10 |
; add ebp,4 |
; mov ecx,[ebp] |
; mcall |
; add edx,10 |
; add ebp,4 |
; mov ecx,[version_lib_ini] |
;; mov ecx,[ecx] |
; mcall |
; add edx,10 |
; movzx ecx,word [image_draw_size.x] |
; mcall |
; add edx,10 |
; movzx ecx,word [image_draw_size.y] |
; mcall |
; add edx,10+10 |
; movzx ecx,word [wa_width] |
; mcall |
; add edx,10 |
; movzx ecx,word [wa_high] |
; mcall |
; add edx,10 |
; movzx ecx,word [wa_width_1] |
; mcall |
; add edx,10 |
; movzx ecx,word [wa_width_2] |
; mcall |
; add edx,10 |
; movzx ecx,word [wa_high_1] |
; mcall |
; add edx,10 |
; movzx ecx,word [wa_high_2] |
; mcall |
; add edx,10+10 |
; mov ecx,[window_width] |
; mcall |
; add edx,10 |
; mov ecx,[window_high] |
; mcall |
; add edx,10 |
; xor ecx,ecx |
; mov cl,[Disposal_Method] |
; mcall |
; add edx,10 |
; mov ecx,[soi] |
; mcall |
; mcall 47,0x80000,[PID2],<200, 5>,0xffffff |
; mcall 47,0x800a0000,[error_locate],<140,5>,0x10ffffff |
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,2 ; 2, end of draw |
mcall |
ret |
;--------------------------------------------------------------------- |
/programs/media/zsea/win_opti.inc |
---|
0,0 → 1,386 |
;--------------------------------------------------------------------- |
k_option: |
test dword [status],64 |
jnz still |
or dword [status],64 |
call get_memory_for_tread_stack |
mov [thread_stack_7],eax |
mcall 51,1,thread7 ;,thread_stack_7 |
jmp still |
;--------------------------------------------------------------------- |
get_memory_for_tread_stack: |
mcall 68,12,4096 |
mov edx,eax |
add edx,4096 |
ret |
;--------------------------------------------------------------------- |
thread7: ; start of bgrd thread |
mcall 9, procinfo_threads, -1 |
mov eax,[ebx+30] |
mov [PID7],eax |
mcall 40, 0x27 |
mov eax,[slide_show_delay] |
mov [slide_show_delay_old],eax |
mov eax,[arrows_offset] |
mov [arrows_offset_old],eax |
mov eax,[check1+32] |
mov [show_file_name_old],eax |
mov eax,[check2+32] |
mov [filtering_flag_old],eax |
xor eax,eax |
mov [option_pointer],eax |
call .set_pointers |
.red: |
call .draw_window |
.still: |
mov eax,10 ; wait here for event |
mcall |
cmp eax,1 ; redraw request ? |
je .red |
cmp eax,2 ; key in buffer ? |
je .key |
cmp eax,3 ; button in buffer ? |
je .button |
cmp eax,6 ; mouse in buffer ? |
je .mouse |
jmp .still |
.mouse: |
mov ebx,[check1+32] |
and ebx,10b |
push dword check1 |
call [check_box_mouse] |
mov eax,[check1+32] |
and eax,10b |
cmp ebx,eax |
je @f ;.still |
mov [option_pointer],2 |
call .set_pointers |
call .draw_all_options_values |
jmp .still |
@@: |
mov ebx,[check2+32] |
and ebx,10b |
push dword check2 |
call [check_box_mouse] |
mov eax,[check2+32] |
and eax,10b |
cmp ebx,eax |
je .still |
mov [option_pointer],3 |
call .set_pointers |
call .draw_all_options_values |
jmp .still |
;--------------------------------------------------------------------- |
.key: |
mcall |
cmp ah,27 |
je .close |
cmp ah,13 |
je .kok |
cmp ah,32 |
je .select_space |
cmp ah,56 ;plus |
je .select_plus ;.plus_slide_show_delay |
cmp ah,43 ;plus |
je .select_plus ;.plus_slide_show_delay |
cmp ah,61 ;plus |
je .select_plus ;.plus_slide_show_delay |
cmp ah,54 ;minus |
je .select_minus ;.minus_slide_show_delay |
cmp ah,45 ;minus |
je .select_minus ;.minus_slide_show_delay |
cmp ah,95 ;minus |
je .select_minus ;.minus_slide_show_delay |
cmp ah,178 ;up arrow |
je .up_arrow |
cmp ah,177 ;down arrow |
je .down_arrow |
jmp .still |
;--------------------------------------------------------------------- |
.button: ; button |
mov eax,17 ; get id |
mcall |
cmp ah,5 |
je .minus_arrows_offset |
cmp ah,4 |
je .plus_arrows_offset |
cmp ah,3 |
je .minus_slide_show_delay |
cmp ah,2 |
je .plus_slide_show_delay |
cmp ah,1 ; button id=1 ? |
jne .noclose |
.close: |
mov eax,[slide_show_delay_old] |
mov [slide_show_delay],eax |
mov eax,[arrows_offset_old] |
mov [arrows_offset],eax |
mov eax,[show_file_name_old] |
mov [check1+32],eax |
mov eax,[filtering_flag_old] |
mov [check2+32],eax |
jmp .close_all |
.close_1: |
mov eax,[check2+32] |
test eax,10b |
jz @f |
mov [filtering_flag],1 |
jmp .redraw_flag |
@@: |
mov [filtering_flag],0 |
.redraw_flag: |
mov [redraw_flag],byte 1 |
.close_all: |
xor dword [status],64 |
xor eax,eax |
mov [PID7],eax |
mcall 68,13,[thread_stack_7] |
mov eax,-1 ; close this program |
mcall |
.noclose: |
.kok: |
jmp .close_1 |
;--------------------------------------------------------------------- |
.select_plus: |
jmp [plus_pointer] |
;--------------------------------------------------------------------- |
.select_minus: |
jmp [minus_pointer] |
;--------------------------------------------------------------------- |
.select_space: |
jmp [space_pointer] |
;--------------------------------------------------------------------- |
.plus_slide_show_delay: |
cmp [option_pointer],0 |
je @f |
mov [option_pointer],0 |
call .draw_all_options_values |
@@: |
cmp [slide_show_delay],99990 |
je .still |
add [slide_show_delay],10 |
call .draw_slide_show_delay |
jmp .still |
;--------------------------------------------------------------------- |
.minus_slide_show_delay: |
cmp [option_pointer],0 |
je @f |
mov [option_pointer],0 |
call .draw_all_options_values |
@@: |
cmp [slide_show_delay],0 |
je .still |
sub [slide_show_delay],10 |
call .draw_slide_show_delay |
jmp .still |
;--------------------------------------------------------------------- |
.plus_arrows_offset: |
cmp [option_pointer],1 |
je @f |
mov [option_pointer],1 |
call .draw_all_options_values |
@@: |
cmp [arrows_offset],100 |
je .still |
inc [arrows_offset] |
call .draw_arrows_offset |
call calculate_arrows_offset |
jmp .still |
;--------------------------------------------------------------------- |
.minus_arrows_offset: |
cmp [option_pointer],1 |
je @f |
mov [option_pointer],1 |
call .draw_all_options_values |
@@: |
cmp [arrows_offset],1 |
je .still |
dec [arrows_offset] |
call .draw_arrows_offset |
call calculate_arrows_offset |
jmp .still |
;--------------------------------------------------------------------- |
.space_check1: |
test [check1+32],dword 10b |
jnz @f |
or [check1+32],dword 10b |
jmp .space_check1_1 |
@@: |
xor [check1+32],dword 10b |
.space_check1_1: |
call .draw_all_options_values |
jmp .still |
;--------------------------------------------------------------------- |
.space_check2: |
test [check2+32],dword 10b |
jnz @f |
or [check2+32],dword 10b |
jmp .space_check2_1 |
@@: |
xor [check2+32],dword 10b |
.space_check2_1: |
call .draw_all_options_values |
jmp .still |
;--------------------------------------------------------------------- |
.down_arrow: |
cmp [option_pointer],3 |
je .still |
inc [option_pointer] |
.draw_all_points: |
call .set_pointers |
call .draw_all_options_values |
jmp .still |
;--------------------------------------------------------------------- |
.up_arrow: |
cmp [option_pointer],0 |
je .still |
dec [option_pointer] |
jmp .draw_all_points |
;--------------------------------------------------------------------- |
.set_pointers: |
cmp [option_pointer],0 |
jne @f |
mov [plus_pointer],thread7.plus_slide_show_delay |
mov [minus_pointer],thread7.minus_slide_show_delay |
mov [space_pointer],thread7.still |
ret |
@@: |
cmp [option_pointer],1 |
jne @f |
mov [plus_pointer],thread7.plus_arrows_offset |
mov [minus_pointer],thread7.minus_arrows_offset |
mov [space_pointer],thread7.still |
ret |
@@: |
cmp [option_pointer],2 |
jne @f |
mov [plus_pointer],thread7.still |
mov [minus_pointer],thread7.still |
mov [space_pointer],thread7.space_check1 |
ret |
@@: |
mov [plus_pointer],thread7.still |
mov [minus_pointer],thread7.still |
mov [space_pointer],thread7.space_check2 |
ret |
;--------------------------------------------------------------------- |
.draw_all_options_values: |
call .draw_slide_show_delay |
call .draw_arrows_offset |
call .draw_check1 |
call .draw_check2 |
ret |
;--------------------------------------------------------------------- |
; ********************************************* |
; ******* WINDOW DEFINITIONS AND DRAW ******** |
; ********************************************* |
.draw_window: |
mcall 12,1 |
; DRAW WINDOW |
xor eax,eax ; function 0 : define and draw window |
mov ebx,100*65536+300 ; [x start] *65536 + [x size] |
mov ecx,100*65536+120 ; [y start] *65536 + [y size] |
mov edx,0x03909090 ; color of work area RRGGBB,8->color gl |
mcall |
mcall 8,<15,10>,<50,11>,2,0xdddddd |
inc edx |
mcall ,<77,10> |
;--------------------------------- |
inc edx |
mcall ,<15,10>,<90,11> |
inc edx |
mcall ,<77,10> |
;--------------------------------- |
inc edx |
mcall ,<250,40>,<50,20> |
;--------------------------------- |
; mcall 13,<50,45>,<25,12>,0xffffff |
; mov ecx,[ch_flag_en] |
; mcall 47,0x800a0000,,<72,27>,0x10000000; 0x40000000,0xffffff |
; WINDOW LABEL |
mcall 71,1, optiontext |
; mov eax,4 ; function 4 : write text to window |
; mov ebx,46*65536+28 ; [x start] *65536 + [y start] |
; mov ecx,0xffffff |
; mov edx, sorttext |
; mov esi, sorttext.size |
; mcall |
; mov ebx,135*65536+57 |
; mov edx, ok_btn |
; mov esi, ok_btn.size ;2 |
mcall 4,<10,35>,0x80ffffff,slide_show_delay_title |
mcall ,<17,53>,0x90000000,slide_show_delay_text |
mcall ,<10,75>,0x80ffffff,arrows_offset_title |
mcall ,<17,93>,0x90000000,slide_show_delay_text |
mcall ,<265,57>, ,ok_btn |
call .draw_all_options_values |
; mcall 47,0x80000,[PID5],<200, 5>,0xffffff |
mcall 12,2 |
ret |
;--------------------------------------------------------------------- |
;.draw_opt_boxes: |
; draw_option_boxes option_boxes_sort,option_boxes_sort_end |
; ret |
;--------------------------------------------------------------------- |
.draw_slide_show_delay: |
mov edx,0xffffff |
cmp [option_pointer],0 |
jne @f |
mov edx,0xffff80 |
@@: |
mcall 13,<29,45>,<50,12>, |
mcall 47,0x800a0000,[slide_show_delay],<32,52>,0x10000000; 0x40000000,0xffffff |
ret |
;--------------------------------------------------------------------- |
.draw_arrows_offset: |
mov edx,0xffffff |
cmp [option_pointer],1 |
jne @f |
mov edx,0xffff80 |
@@: |
mcall 13,<29,45>,<90,12>, |
mcall 47,0x800a0000,[arrows_offset],<32,92>,0x10000000; 0x40000000,0xffffff |
ret |
;--------------------------------------------------------------------- |
.draw_check1: |
mov [check1+12],dword 0xffffff |
cmp [option_pointer],2 |
jne @f |
mov [check1+12],dword 0xffff80 |
@@: |
push dword check1 |
call [check_box_draw] |
ret |
;--------------------------------------------------------------------- |
.draw_check2: |
mov [check2+12],dword 0xffffff |
cmp [option_pointer],3 |
jne @f |
mov [check2+12],dword 0xffff80 |
@@: |
push dword check2 |
call [check_box_draw] |
ret |
;--------------------------------------------------------------------- |
/programs/media/zsea/win_sort.inc |
---|
0,0 → 1,206 |
;--------------------------------------------------------------------- |
k_sort_directory: |
test dword [status],16 |
jnz still |
or dword [status],16 |
call get_memory_for_tread_stack |
mov [thread_stack_5],eax |
mcall 51, 1, thread5 ;, thread_stack_5 |
jmp still |
;--------------------------------------------------------------------- |
thread5: ; start of bgrd thread |
mcall 9, procinfo_threads, -1 |
mov eax,[ebx+30] |
mov [PID5],eax |
mcall 40, 0x27 |
mov eax,[sort_type] |
cmp [sort_type],dword 0 |
jne @f |
mov [option_group2],sort0 |
jmp .thread5 |
@@: |
cmp [sort_type],dword 2 |
jne @f |
mov [option_group2],sort2 |
jmp .thread5 |
@@: |
cmp [sort_type],dword 4 |
jne @f |
mov [option_group2],sort4 |
jmp .thread5 |
@@: |
; cmp [sort_type],dword 6 |
; jne @f |
mov [option_group2],sort6 |
; jmp .thread5 |
;@@: |
.thread5: |
mov [sort_type_old],eax |
mov eax,[option_group2] |
mov [option_group2_old],eax |
.red: |
call .draw_window |
.still: |
mov eax,10 ; wait here for event |
mcall |
cmp eax,1 ; redraw request ? |
je .red |
cmp eax,2 ; key in buffer ? |
je .key |
cmp eax,3 ; button in buffer ? |
je .button |
cmp eax,6 ; mouse in buffer ? |
je .mouse |
jmp .still |
.mouse: |
push dword option_boxes_sort |
call [option_box_mouse] |
cmp [option_group2],sort0 |
jne @f |
mov [sort_type],dword 0 |
jmp .still |
@@: |
cmp [option_group2],sort2 |
jne @f |
mov [sort_type],dword 2 |
jmp .still |
@@: |
cmp [option_group2],sort4 |
jne @f |
mov [sort_type],dword 4 |
jmp .still |
@@: |
cmp [option_group2],sort6 |
jne @f |
mov [sort_type],dword 6 |
jmp .still |
.key: |
mcall |
cmp ah,27 |
je .close |
cmp ah,13 |
je .kok |
cmp ah,177 ;down |
je .fdn |
cmp ah,178 ;up |
jne .still |
cmp [sort_type],0 |
je .still |
sub [sort_type],2 |
jmp .flagcont |
.fdn: |
cmp [sort_type],6 |
je .still |
add [sort_type],2 |
.flagcont: |
cmp [sort_type],dword 0 |
jne @f |
mov [option_group2],sort0 |
call .draw_opt_boxes |
jmp .still |
@@: |
cmp [sort_type],dword 2 |
jne @f |
mov [option_group2],sort2 |
call .draw_opt_boxes |
jmp .still |
@@: |
cmp [sort_type],dword 4 |
jne @f |
mov [option_group2],sort4 |
call .draw_opt_boxes |
jmp .still |
@@: |
cmp [sort_type],dword 6 |
jne .still ;@f |
mov [option_group2],sort6 |
call .draw_opt_boxes |
jmp .still |
.button: ; button |
mov eax,17 ; get id |
mcall |
cmp ah,1 ; button id=1 ? |
jne .noclose |
.close: |
mov eax,[sort_type_old] |
mov [sort_type],eax |
mov eax,[option_group2_old] |
mov [option_group2],eax |
.close_1: |
xor dword [status],16 |
xor eax,eax |
mov [PID5],eax |
mcall 68,13,[thread_stack_5] |
mov eax,-1 ; close this program |
mcall |
.noclose: |
.kok: |
mov eax,[load_directory_pointer] |
cmp [eax+4],dword 0 |
je .close_1 |
call load_directory.copy_dir_path |
call load_directory.sort |
mov [sort_directory_flag],byte 1 |
jmp .close_1 |
; ********************************************* |
; ******* WINDOW DEFINITIONS AND DRAW ******** |
; ********************************************* |
.draw_window: |
mcall 12,1 |
; DRAW WINDOW |
xor eax,eax ; function 0 : define and draw window |
mov ebx,100*65536+300 ; [x start] *65536 + [x size] |
mov ecx,100*65536+110 ; [y start] *65536 + [y size] |
mov edx,0x03909090 ; color of work area RRGGBB,8->color gl |
mcall |
mov eax,8 |
mov ebx,120*65536+40 |
mov ecx,50*65536+20 |
mov edx,4 |
mov esi,0xdddddd |
mcall |
; WINDOW LABEL |
mcall 71,1, labelt5 |
mov eax,4 ; function 4 : write text to window |
mov ebx,46*65536+28 ; [x start] *65536 + [y start] |
mov ecx,0xffffff |
mov edx, sorttext |
mov esi, sorttext.size |
mcall |
mov ebx,135*65536+57 |
mov edx, ok_btn |
mov esi, ok_btn.size ;2 |
mov ecx,0 |
mcall |
call .draw_opt_boxes |
; mcall 47,0x80000,[PID5],<200, 5>,0xffffff |
mcall 12,2 |
ret |
;--------------------------------------------------------------------- |
.draw_opt_boxes: |
push dword option_boxes_sort |
call [option_box_draw] |
ret |
/programs/media/zsea/zSea.asm |
---|
0,0 → 1,448 |
;***************************************************************************** |
; zSea - advanced image viewer for KolibriOS |
; Copyright (c) 2008-2011, Marat Zakiyanov aka Mario79, aka Mario |
; All rights reserved. |
; |
; Redistribution and use in source and binary forms, with or without |
; modification, are permitted provided that the following conditions are met: |
; * Redistributions of source code must retain the above copyright |
; notice, this list of conditions and the following disclaimer. |
; * Redistributions in binary form must reproduce the above copyright |
; notice, this list of conditions and the following disclaimer in the |
; documentation and/or other materials provided with the distribution. |
; * Neither the name of the <organization> nor the |
; names of its contributors may be used to endorse or promote products |
; derived from this software without specific prior written permission. |
; |
; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY |
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY |
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
;***************************************************************************** |
; v.1.0 rñ3 12.06.2011 |
;****************************************************************************** |
use32 |
org 0x0 |
db 'MENUET01' ; 8 byte id |
dd 0x01 ; header version |
dd START ; start of code |
dd IM_END ; size of image |
dd I_END ; memory for app |
dd stacktop ; esp |
dd temp_area ; I_Param |
dd path ; APPLICATION PACH |
include 'lang.inc' |
;include 'macros.inc' |
;include 'editbox_ex.mac' |
;include 'proc32.inc' |
include '../../macros.inc' |
include '../../develop/libraries/box_lib/trunk/box_lib.mac' |
include '../../proc32.inc' |
;include 'load_lib.mac' |
include '../../develop/libraries/box_lib/load_lib.mac' |
@use_library ;use load lib macros |
;****************************************************************************** |
START: ; start of execution |
mcall 68, 11 |
mcall 66, 1,1 |
mcall 40, 0x27 |
mcall 9, procinfo, -1 |
mov eax,[ebx+30] |
mov [PID],eax |
xor ecx,ecx |
@@: |
inc ecx |
mcall 9, procinfo |
mov eax,[PID] |
cmp eax,[ebx+30] |
jne @r |
mov [active_process],ecx |
mcall 68,12,1024 |
mov [menu_data_1.procinfo],eax |
mov [menu_data_2.procinfo],eax |
mov [menu_data_3.procinfo],eax |
mov [menu_data_4.procinfo],eax |
mov [menu_data_5.procinfo],eax |
mov [menu_data_6.procinfo],eax |
mov [load_directory_pointer],dir_header |
call load_plugins |
call load_buttons |
; call init_data_OpenDialog |
;init_OpenDialog OpenDialog_data |
push dword OpenDialog_data |
call [OpenDialog_Init] |
call get_filter_data |
;----------------------------------------------------- |
; check for parameters |
cmp dword [temp_area],'BOOT' |
jne .no_boot |
.background: |
call load_image |
cmp [error_fs],0 |
jnz .exit |
call convert |
call background |
.exit: |
call Set_ini |
.exit_1: |
mov ebx,18 |
mov edx,PID1 |
mov esi,7 |
.kill_successors: |
mov ecx,[edx] |
add edx,4 |
test ecx,ecx |
jz @f |
mcall 18 |
@@: |
dec esi |
jnz .kill_successors |
mcall -1 |
;----------------------------------------------------- |
.no_boot: |
xor eax,eax |
cmp byte [temp_area],al |
jnz @f |
mov [file_name],eax |
jmp .no_param |
@@: |
mov edi,string ; clear string |
mov ecx,256/4 ; length of a string |
xor eax,eax ; symbol <0> |
rep stosd |
mov edi,temp_area ; look for <0> in temp_area |
cmp [edi],byte "\" |
jne .continue |
cmp [edi+1],byte "T" |
jne @f |
mov [bgrmode],dword 1 |
jmp .continue_1 |
@@: |
cmp [edi+1],byte "S" |
jne START.exit |
mov [bgrmode],dword 2 |
.continue_1: |
add edi,4 |
.continue: |
mov esi,edi |
mov ecx,257 ; strlen |
repne scasb |
lea ecx, [edi-temp_area] |
mov edi,string |
rep movsb ; copy string from temp_area to "string" (filename) |
cmp [temp_area],byte "\" |
je START.background |
call load_directory |
test eax,eax |
jnz @f |
call load_image |
test eax,eax |
jnz @f |
call convert |
jmp .no_param |
@@: |
mov [load_directory_pointer],dir_header |
mov [error_fs],eax |
call convert.error |
;----------------------------------------------------- |
.no_param: |
; or ecx,-1 ; get information about me |
; call getappinfo |
; mov edx,[process_info+30] ; òåïåðü â edx íàø èäåíòèôèêàòîð |
; mov ecx,eax |
; @@: |
; call getappinfo |
; cmp edx,[process_info+30] |
; je @f ; åñëè íàø PID ñîâïàë ñ PID ðàññìàòðèâàåìîãî ïðîöåññà, ìû íàøëè ñåáÿ |
; dec ecx ; èíà÷å ñìîòðèì ñëåäóþùèé ïðîöåññ |
; jne @b ; âîçâðàùàåìñÿ, åñëè íå âñå ïðîöåññû ðàññìîòðåíû |
; @@: |
; òåïåðü â ecx íîìåð ïðîöåññà |
; mov [process],ecx |
;--------------------------------------------------------------------- |
cmp [wnd_width],635 |
jae @f |
mov [wnd_width],635 |
@@: |
cmp [wnd_height],150 |
jae @f |
mov [wnd_height],150 |
@@: |
; call draw_window |
red: |
;draw_still: |
; pusha |
call get_window_param |
test [window_status],10b |
jnz red_1 ;still |
test [window_status],100b |
jnz red_1 |
test [window_status],1b |
jnz red_1 |
mov esi,-1 |
mov eax,procinfo |
mov eax,[eax+66] |
cmp eax,150 |
; cmp [window_high],150 |
jae @f |
mov esi,150 |
mcall 67,-1,ebx,ebx |
@@: |
mov edx,-1 |
mov eax,procinfo |
mov eax,[eax+62] |
cmp eax,635 |
; cmp [window_width],635 |
jae @f ;red_1 |
mov edx,635 |
mcall 67,-1,ebx, ,ebx |
@@: |
; mcall 67,-1,ebx |
; popa |
; xor esi,esi |
red_1: |
; xor eax,eax |
; mov [scroll_bar_data_vertical.position],eax |
; mov [scroll_bar_data_horizontal.position],eax |
call draw_window |
cmp [redraw_wallpaper_flag],0 |
je still |
mov [redraw_wallpaper_flag],0 |
call clear_thread |
; mcall 15,3 |
; jmp red_1 |
still: |
cmp [RAW1_flag],1 |
je animation_handler |
mcall 10 |
.1: |
cmp [open_file_flag],1 |
je kopen_1 |
cmp [sort_directory_flag],byte 1 |
je red_sort_directory |
cmp [redraw_flag],byte 1 |
je redraw_window |
cmp eax,1 ; ïåðåðèñîâàòü îêíî ? |
je red ; åñëè äà - íà ìåòêó red |
cmp eax,2 ; íàæàòà êëàâèøà ? |
je key ; åñëè äà - íà key |
cmp eax,3 ; íàæàòà êíîïêà ? |
je button ; åñëè äà - íà button |
cmp eax,6 |
je mouse |
; cmp [redraw_wallpaper_flag],1 |
; jne still |
; mov [redraw_wallpaper_flag],0 |
; mcall 15,3 |
jmp still ; åñëè äðóãîå ñîáûòèå - â íà÷àëî öèêëà |
red_sort_directory: |
mov [sort_directory_flag],byte 0 |
jmp red_1 |
redraw_window: |
mov [redraw_flag],byte 0 |
jmp red_1 |
;--------------------------------------------------------------------- |
; red: |
; test dword [status], 4 |
; jz draw_still |
; mov al,18 |
; mov ebx,3 |
; mov ecx,[process] |
; mcall 18,3,[active_process] |
; and byte [status], not 4 |
; jmp still |
;--------------------------------------------------------------------- |
button: ; button |
mov eax,17 ; get id |
mcall |
cmp ah,1 ; button id=1 ? |
je START.exit |
; jne .noclose |
; |
; mov eax,-1 ; close this program |
; mcall |
.noclose: |
cmp ah,2 |
je slide_show.3 ;still |
jmp slide_show |
;--------------------------------------------------------------------- |
kopen_1: |
mov [open_file_flag],0 |
call load_directory |
test eax,eax |
jz kopen |
.err: |
mov [load_directory_pointer],dir_header |
mov [error_fs],eax |
call convert.error |
jmp still ;red_1 |
kopen: |
cmp [string],byte 0 |
je still |
mov ecx,-1 |
call getappinfo |
call load_image |
test eax,eax |
jnz kopen_1.err |
call convert |
.1: |
call get_window_param |
test [window_status],1b |
jz red ;draw_still |
mov [no_draw_window],1 |
; push edx |
; mov edx,size_after_convert_2 |
; call write_memory_size |
; pop edx |
call draw_other |
mov [no_draw_window],0 |
; jmp draw_still |
jmp still |
;--------------------------------------------------------------------- |
getappinfo: |
mov eax,9 |
mov ebx,process_info |
mcall |
ret |
;--------------------------------------------------------------------- |
; ÓÑÒÀÍÎÂÈÒÜ ÔÎÍ |
background: |
cmp [soi],0 |
je .end |
mov ecx,[img_width] ; øèðèíà |
test ecx,ecx |
jz .end |
mov edx,[img_high] ; âûñîòà |
test edx,edx |
jz .end |
mcall 15,1 ; set size |
mov esi,ecx |
imul esi,edx |
lea esi,[esi*3] |
; mov ebx,5 |
mov ecx,[soi] |
xor edx,edx |
cmp [img_resolution],24 |
je @f |
mov eax,image_file |
; call [plugin_convert_background] |
call [convert_Conv_24b] |
mov ecx,[raw_pointer_2] |
mcall 15,5 ;15,5 set data |
mov ecx,[raw_pointer_2] |
mcall 68,13 |
jmp .set_mode |
@@: |
mcall 15,5 ; 15,5 set data |
.set_mode: |
; dec ebx ;tile/stretch |
mov ecx,[bgrmode] |
mcall 15,4 ; 15,4 set mode |
dec ebx ; 15,3 redraw background |
mcall |
.end: |
ret |
;--------------------------------------------------------------------- |
get_window_param: |
mcall 9, procinfo, -1 |
mov eax,[ebx+34] |
mov [window_start_x],eax |
mov eax,[ebx+38] |
mov [window_start_y],eax |
mov eax,[ebx+66] ;46] |
inc eax |
mov [window_high],eax |
mov eax,[ebx+62] ;42] |
inc eax |
mov [window_width],eax |
mov eax,[ebx+70] |
mov [window_status],eax |
; mcall 48,4 |
; mov [skin_high],eax |
ret |
;--------------------------------------------------------------------- |
;write_memory_size: |
; pusha |
; mcall 9, procinfo, -1 |
; mov eax,[ebx+26] |
; mov [edx],eax |
; popa |
; ret |
;--------------------------------------------------------------------- |
include 'draw_win.inc' |
include 'full_win.inc' |
include 'mouse.inc' |
include 'key.inc' |
include 'menu_key.inc' |
include 'clr_bcgr.inc' |
include 'w_error.inc' |
include 'load.inc' |
include 'animat.inc' |
include 'draw_img.inc' |
include 'convert.inc' |
include 'zoom.inc' |
include 'w_about.inc' |
include 'win_file.inc' |
include 'win_info.inc' |
include 'win_bcgr.inc' |
include 'win_sort.inc' |
include 'win_opti.inc' |
include 'libini.inc' |
include 'dll.inc' |
include 'data.inc' |
;--------------------------------------------------------------------- |
IM_END: |
include 'dat_area.inc' |
I_END: |
/programs/media/zsea/zSea.ini |
---|
0,0 → 1,35 |
[Associations] |
ImageEditor=/sys/media/animage |
TextViewer=/sys/tinypad |
[Path] |
Plugins=/plugins/ |
SysLibrary=/sys/lib/ |
ButtonPictures=/buttons/ |
[Files] |
PassiveButtonsPic=1.png |
AktiveButtonsPic=2.png |
ClickButtonsPic=3.png |
DisableAButtonsPic=4.png |
HelpText=zSea_keys.txt |
[Plugins] |
BoxLib=box_lib.obj |
Sort=sort.obj |
Convert=convert.obj |
Rotate=rotate.obj |
Scaling=scaling.obj |
Plugin1=cnv_bmp.obj |
Plugin2=cnv_png.obj |
Plugin3=cnv_jpeg.obj |
Plugin4=cnv_gif.obj |
[Var] |
SortMode=2 |
ArrowsOffset=10 |
SlideShowDelay=300 |
ShowFileName=1 |
FullScreen=1 |
Zoom=100 |
/programs/media/zsea/zoom.inc |
---|
0,0 → 1,725 |
;--------------------------------------------------------------------- |
invert_left_to_right: |
mov ebx,3 |
jmp rotate_counter_clockwise.1 |
;--------------------------------------------------------------------- |
invert_up_to_down: |
mov ebx,4 |
jmp rotate_counter_clockwise.1 |
;--------------------------------------------------------------------- |
rotate_clockwise: |
mov ebx,1 |
jmp rotate_counter_clockwise.1 |
;--------------------------------------------------------------------- |
rotate_counter_clockwise: |
mov ebx,2 |
.1: |
mov eax,[soi] |
test eax,eax |
jz still |
mov eax,[RAW1_pointer] |
test eax,eax |
jz @f |
cmp [Total_Repeat_N],1 |
ja still |
@@: |
push ebx |
call proc_position_correct |
mov eax,[vertical_position_coorect] |
mov ebx,[horizontal_position_coorect] |
mov [horizontal_position_coorect],eax |
mov [vertical_position_coorect],ebx |
pop ebx |
mov eax,image_file |
; call [plugin_rotate] |
call [rotate_Start] |
mov ebx,[raw_pointer] |
mov eax,[ebx+4] |
mov [img_width],eax |
mov eax,[ebx+8] |
mov [img_high],eax |
call convert.img_resolution_ok |
jmp kopen.1 |
;--------------------------------------------------------------------- |
calculate_arrows_offset: |
mov eax,[arrows_offset] |
imul eax,[scaling_mode] |
mov ebx,100 |
xor edx,edx |
div ebx |
mov [scroll_bar_data_vertical.ar_offset],eax |
mov [scroll_bar_data_horizontal.ar_offset],eax |
ret |
;--------------------------------------------------------------------- |
no_scaling: |
mov eax,scaling_mode |
cmp [eax],dword 100 |
je still |
.1: |
mov [eax],dword 100 |
mov [zoom_factors],dword zoom_factors.100 |
mov eax,[eax] |
jmp zoom_plus.2 |
; call calculate_arrows_offset |
; call draw_zoom_factors |
; jmp red |
;--------------------------------------------------------------------- |
scaling: |
mov eax,[soi] |
test eax,eax |
jz still |
mov eax,scaling_mode |
xor ebx,ebx |
cmp [eax],ebx ;dword 0 |
je still |
mov [eax],ebx ;dword 0 |
mov [zoom_factors],dword zoom_factors.1 |
call .1 |
call draw_zoom_factors |
jmp still |
;--------------------------- |
.compens_x: |
call .get_x_y |
xor ecx,ecx |
mov cx,[wa_high_1] |
imul eax,ecx |
xor edx,edx |
div ebx |
ret |
;--------------------------- |
.compens_y: |
call .get_x_y |
xchg eax,ebx |
xor ecx,ecx |
mov cx,[wa_width_1] |
imul eax,ecx |
xor edx,edx |
div ebx |
ret |
;--------------------------- |
.get_x_y: |
mov ebx,[raw_pointer] |
mov eax,[ebx+4] |
mov ebx,[ebx+8] |
ret |
;--------------------------- |
.fill_for_L_R: |
cmp [no_fill],1 |
je @f |
; xor eax,eax |
; mov [no_fill],al |
; ret |
;@@: |
pusha |
mov ebx,[image_start_coordinates] |
mov ecx,ebx |
shl ecx,16 |
mov bx,ax |
mov cx,[wa_high_1] |
mcall 13,,,[fill_color] ;0xffffff |
mov ax,bx |
ror ebx,16 |
add bx,ax |
add bx,[wa_width_2] |
mov ax,[wa_width_1] |
; add ax,5 |
sub ax,bx |
rol ebx,16 |
mov bx,ax |
mcall 13,,,[fill_color] ;0xffffff |
popa |
@@: |
ret |
;--------------------------- |
.fill_for_U_D: |
cmp [no_fill],1 |
je @f |
; xor eax,eax |
; mov [no_fill],al |
; ret |
;@@: |
pusha |
mov ebx,[image_start_coordinates] |
mov ecx,ebx |
shl ecx,16 |
mov cx,ax |
mov bx,[wa_width_1] |
mcall 13,,,[fill_color] ;0xffffff |
mov ax,cx |
ror ecx,16 |
add cx,ax |
add cx,[wa_high_2] |
mov ax,[wa_high_1] |
add ax,28 ;50 |
sub ax,cx |
rol ecx,16 |
mov cx,ax |
mcall 13,,,[fill_color] ;0xffffff |
popa |
@@: |
ret |
;--------------------------- |
.1: |
call .get_x_y |
cmp eax,ebx |
jb .y |
;--------------------------- |
.x: |
call .compens_y |
cmp ax,[wa_high_1] |
jbe @f |
call .compens_x |
mov [wa_width_2],ax |
jmp .4 |
@@: |
mov [wa_high_2],ax |
jmp .4 |
;--------------------------- |
.y: |
call .compens_x |
cmp ax,[wa_width_1] |
jbe @f |
call .compens_y |
mov [wa_high_2],ax |
jmp .4 |
@@: |
mov [wa_width_2],ax |
;--------------------------- |
.4: |
mov bx,[wa_width_2] |
shl ebx,16 |
mov bx,[wa_high_2] |
xor ecx,ecx |
.5: |
; mov eax,ebx |
; and eax,0xffff |
; mov [test1],eax |
; mov eax,ebx |
; shr eax,16 |
; mov [test2],eax |
; mov eax,ecx |
; and eax,0xffff |
; mov [test3],eax |
; mov eax,ecx |
; shr eax,16 |
; mov [test4],eax |
mov eax,image_file |
mov edx,[scaling_mode] |
movzx esi,byte [filtering_flag] |
mov edi,[background_color] |
; pusha |
; mcall 26,9 |
; mov [test1],eax |
; popa |
; call [plugin_scaling] |
call [Scaling_Start] |
; pusha |
; mcall 26,9 |
; mov ebx,[test1] |
; sub eax,ebx |
; cmp [test2],0 |
; je @f |
; add eax,[test2] |
; shr eax,1 |
; cmp eax,[test3] |
; jbe @f |
; mov [test3],eax |
;@@: |
; mov [test2],eax |
; popa |
mov ecx,ebx |
mov edx,[image_start_coordinates] |
mov eax,edx |
shl eax,16 |
mov ax,cx |
mov [scroll_bar_data_vertical.y],eax |
mov eax,edx |
mov ebx,ecx |
shr ebx,16 |
mov ax,bx |
mov [scroll_bar_data_horizontal.x],eax |
; call correct_cur_area |
; movzx eax,[wa_width_1] |
; mov [test1],eax |
; movzx eax,[wa_width_2] |
; mov [test2],eax |
; movzx eax,[wa_high_1] |
; mov [test3],eax |
; movzx eax,[wa_high_2] |
; mov [test4],eax |
xor eax,eax |
mov ax,[wa_width_1] |
sub ax,[wa_width_2] |
shr ax,1 |
test ax,ax |
jz @f |
shl eax,16 |
add edx,eax |
shr eax,16 |
call .fill_for_L_R |
@@: |
mov ax,[wa_high_1] |
sub ax,[wa_high_2] |
shr ax,1 |
test ax,ax |
jz @f |
add edx,eax |
call .fill_for_U_D |
@@: |
mov esi,[img_resolution] |
cmp [img_resolution_2],15 |
jne @f |
mov esi,15 |
@@: |
mov eax,[raw_pointer] |
mov edi,[eax+20] |
add edi,eax |
; mov edi,[img_palette] |
xor ebp,ebp |
mov ebx,[raw_pointer_2] |
mov eax,ecx |
test ax,ax |
jz .no_draw ;@f |
shr eax,16 |
test eax,eax |
jz .no_draw ;@f |
cmp [filtering_flag],0 |
je @f |
cmp esi,8 |
jne @f |
mov esi,24 |
@@: |
mcall 65 |
.no_draw: |
; mov eax,ecx |
; shr eax,16 |
; mov [test1],eax |
; |
; mov eax,ecx |
; and eax,0xffff |
; mov [test2],eax |
; |
; mov eax,edx |
; shr eax,16 |
; mov [test3],eax |
; |
; mov eax,edx |
; and eax,0xffff |
; mov [test4],eax |
push ebx |
call draw_file_name_to_work_area |
pop ebx |
mov ecx,ebx ;[raw_pointer_2] |
mcall 68,13 |
xor eax,eax |
mov ax,[wa_width_2] |
; imul eax,100 |
; ÅÀÕ = ÅÀÕ * 100 |
shl eax,2 ; óìíîæåíèå íà 4 |
lea eax,[eax+eax*4] ; óìíîæåíèå íà 5 |
lea eax,[eax+eax*4] ; óìíîæåíèå íà 5 |
mov ebx,[img_width] |
test ebx,ebx |
jnz @f |
inc ebx |
@@: |
xor edx,edx |
div ebx |
shl edx,1 |
cmp ebx,edx |
jb @f |
inc eax |
@@: |
mov [zoom_auto_factor],eax |
ret |
;--------------------------------------------------------------------- |
calculation_next_value_plus: |
mov ebx,[zoom_auto_factor] |
mov ecx,zoom_factors.min |
sub ecx,4 |
@@: |
add ecx,4 |
cmp ecx,dword zoom_factors.max |
jae .max |
mov eax,[ecx] |
cmp eax,ebx |
jb @r |
@@: |
mov eax,zoom_factors |
mov [eax],ecx |
; jmp zoom_plus.1 |
ret |
.max: |
mov ecx,dword zoom_factors.max |
jmp @r |
;--------------------------------------------------------------------- |
calculation_next_value_minus: |
mov ebx,[zoom_auto_factor] |
mov ecx,zoom_factors.max |
add ecx,4 |
@@: |
sub ecx,4 |
cmp ecx,dword zoom_factors.min |
jbe .min |
mov eax,[ecx] |
cmp eax,ebx |
ja @r |
@@: |
mov eax,zoom_factors |
mov [eax],ecx |
; jmp zoom_plus.1 |
ret |
.min: |
mov ecx,dword zoom_factors.min |
jmp @r |
;--------------------------------------------------------------------- |
proc_position_correct: |
mov [position_coorect],1 |
mov eax,[scroll_bar_data_vertical.max_area] |
xor ebx,ebx |
mov bx,[wa_high_1] |
shr ebx,1 |
shl eax,8 |
add ebx,[scroll_bar_data_vertical.position] |
test ebx,ebx |
jnz @f |
inc ebx |
@@: |
xor edx,edx |
div ebx |
mov [vertical_position_coorect],eax |
mov eax,[scroll_bar_data_horizontal.max_area] |
xor ebx,ebx |
mov bx,[wa_width_1] |
shr ebx,1 |
shl eax,8 |
add ebx,[scroll_bar_data_horizontal.position] |
test ebx,ebx |
jnz @f |
inc ebx |
@@: |
xor edx,edx |
div ebx |
mov [horizontal_position_coorect],eax |
ret |
;--------------------------------------------------------------------- |
zoom_plus: |
; cmp [scaling_mode],dword 0 |
mov eax,[scaling_mode] |
test eax,eax |
; jz no_scaling.1 |
; jz calculation_next_value_plus |
jnz @f |
call calculation_next_value_plus |
jmp .1 |
@@: |
; jne @f |
; mov [scaling_mode],dword 100 |
; mov [zoom_factors],dword zoom_factors.100 |
; call draw_zoom_factors |
; jmp red |
;@@: |
mov eax,zoom_factors |
cmp [eax],dword zoom_factors.max |
jae still |
add [eax],dword 4 |
.1: |
mov eax,[eax] |
mov eax,[eax] |
.2: |
mov [scaling_mode],eax |
mov [correct_scrollbar_100_flag],1 |
call calculate_arrows_offset |
call proc_position_correct |
call drawimage |
call set_draw_scrollbar_all |
call draw_scrollbars |
call set_nodraw_scrollbar_all |
call draw_zoom_factors |
jmp still |
zoom_all: |
;****************************** |
mov eax,wa_width_1 |
mov eax,[eax] |
push eax |
mov eax,wa_high_1 |
mov eax,[eax] |
push eax |
;****************************** |
cmp [position_coorect],0 |
je .correct_end |
mov [position_coorect],0 |
mov eax,[scroll_bar_data_vertical.max_area] |
; xor ebx,ebx |
; mov bx,[wa_high_1] |
; shr ebx,1 |
; add eax,ebx ;[scroll_bar_data_vertical.cur_area] |
shl eax,8 |
mov ebx,[vertical_position_coorect] |
test ebx,ebx |
jnz @f |
inc ebx |
@@: |
xor edx,edx |
div ebx |
; shr eax,8 |
xor ebx,ebx |
mov bx,[wa_high_1] |
shr ebx,1 |
cmp eax,ebx |
jae @f |
xor eax,eax |
jmp .position_vertical_correct |
@@: |
sub eax,ebx |
.position_vertical_correct: |
mov [scroll_bar_data_vertical.position],eax |
mov eax,[scroll_bar_data_horizontal.max_area] |
; xor ebx,ebx |
; mov bx,[wa_width_1] |
; shr ebx,1 |
; add eax,ebx ;[scroll_bar_data_horizontal.cur_area] |
shl eax,8 |
mov ebx,[horizontal_position_coorect] |
test ebx,ebx |
jnz @f |
inc ebx |
@@: |
xor edx,edx |
div ebx |
; shr eax,8 |
xor ebx,ebx |
mov bx,[wa_width_1] |
shr ebx,1 |
cmp eax,ebx |
jae @f |
xor eax,eax |
jmp .position_horizontal_correct |
@@: |
sub eax,ebx |
.position_horizontal_correct: |
mov [scroll_bar_data_horizontal.position],eax |
.correct_end: |
;**************************************************************************** |
; Vertical SCROLLBAR |
; At a case of resizing of the window |
; Check the position of a runner has crossed a limit |
;**************************************************************************** |
mov eax,[scroll_bar_data_vertical.max_area] |
xor ebx,ebx |
mov bx,[wa_high_1] |
cmp eax,ebx |
ja @f |
xor eax,eax |
jmp .p_5 |
@@: |
sub eax,ebx ;[scroll_bar_data_vertical.cur_area] |
cmp eax,[scroll_bar_data_vertical.position] |
jae @f |
.p_5: |
mov [scroll_bar_data_vertical.position],eax |
@@: |
;**************************************************************************** |
; Horizontal SCROLLBAR |
; At a case of resizing of the window |
; Check the position of a runner has crossed a limit |
;**************************************************************************** |
mov eax,[scroll_bar_data_horizontal.max_area] |
xor ebx,ebx |
mov bx,[wa_width_1] |
cmp eax,ebx |
ja @f |
xor eax,eax |
jmp .p_6 |
@@: |
sub eax,ebx ;[scroll_bar_data_horizontal.cur_area] |
cmp eax,[scroll_bar_data_horizontal.position] |
jae @f |
.p_6: |
mov [scroll_bar_data_horizontal.position],eax |
@@: |
;**************************************************************************** |
mov eax,[scroll_bar_data_horizontal.max_area] |
mov ebx,[scroll_bar_data_vertical.max_area] |
sub eax,[scroll_bar_data_horizontal.position] ;100 |
sub ebx,[scroll_bar_data_vertical.position] ;100 |
xor ecx,ecx |
mov cx,word [wa_width_1] |
cmp eax,ecx |
jbe @f |
xor eax,eax |
mov ax,[wa_width_1] |
@@: |
mov [wa_width_2],ax |
mov ecx,eax |
shl ecx,16 |
xchg eax,ebx |
xor edx,edx |
mov dx,word [wa_high_1] |
cmp eax,edx |
jbe @f |
xor eax,eax |
mov ax,[wa_high_1] |
@@: |
mov [wa_high_2],ax |
mov cx,ax |
call correct_cur_area |
mov ebx,ecx |
push eax |
mov eax,[scroll_bar_data_vertical.max_area] |
cmp eax,[scroll_bar_data_vertical.cur_area] |
jbe .horizontal ;@f |
mov ax,[wa_width_1] |
sub ax,[scroll_bar_data_vertical.size_x] |
mov [wa_width_1],ax |
cmp ax,[wa_width_2] |
jae .horizontal |
mov [wa_width_2],ax |
.horizontal: |
mov eax,[scroll_bar_data_horizontal.max_area] |
cmp eax,[scroll_bar_data_horizontal.cur_area] |
jbe .finish ;@f |
mov ax,[wa_high_1] |
sub ax,[scroll_bar_data_horizontal.size_y] |
mov [wa_high_1],ax |
cmp ax,[wa_high_2] |
jae .finish |
mov [wa_high_2],ax |
.finish: ;@@: |
pop eax |
mov cx,[wa_width_2] |
shl ecx,16 |
mov cx,[wa_high_2] |
call correct_cur_area |
mov ebx,ecx |
mov eax,[scroll_bar_data_horizontal.position] |
; imul eax,100 |
; ÅÀÕ = ÅÀÕ * 100 |
shl eax,2 ; óìíîæåíèå íà 4 |
lea eax,[eax+eax*4] ; óìíîæåíèå íà 5 |
lea eax,[eax+eax*4] ; óìíîæåíèå íà 5 |
push ebx |
mov ebx,[scaling_mode] |
xor edx,edx |
div ebx |
; shl edx,1 |
; cmp edx,ebx |
; jb @f |
; inc eax |
;@@: |
pop ebx |
mov ecx,eax |
shl ecx,16 |
mov eax,[scroll_bar_data_vertical.position] |
; imul eax,100 |
; ÅÀÕ = ÅÀÕ * 100 |
shl eax,2 ; óìíîæåíèå íà 4 |
lea eax,[eax+eax*4] ; óìíîæåíèå íà 5 |
lea eax,[eax+eax*4] ; óìíîæåíèå íà 5 |
push ebx |
mov ebx,[scaling_mode] |
xor edx,edx |
div ebx |
; shl edx,1 |
; cmp edx,ebx |
; jb @f |
; inc eax |
;@@: |
pop ebx |
mov cx,ax |
call scaling.5 |
;****************************** |
pop eax |
mov ebx,wa_high_1 |
mov [ebx],eax |
pop eax |
mov ebx,wa_width_1 |
mov [ebx],eax |
;****************************** |
ret |
;--------------------------------------------------------------------- |
zoom_minus: |
; cmp [scaling_mode],dword 0 |
mov eax,[scaling_mode] |
test eax,eax |
; jz no_scaling.1 |
; jz calculation_next_value_minus |
jnz @f |
call calculation_next_value_minus |
jmp zoom_plus.1 |
@@: |
; je no_scaling.1 |
; jne @f |
; mov [scaling_mode],dword 100 |
; mov [zoom_factors],dword zoom_factors.100 |
; call draw_zoom_factors |
; jmp red |
;@@: |
mov eax,zoom_factors |
cmp [eax],dword zoom_factors.min |
jbe still |
sub [eax],dword 4 |
jmp zoom_plus.1 |
;--------------------------------------------------------------------- |
/programs/media/zsea/zoom_values.txt |
---|
0,0 → 1,124 |
ACD See |
5 |
7 |
10 |
15 |
20 |
30 |
50 |
70 |
100 |
150 |
200 |
300 |
500 |
700 |
1000 |
2000 |
3000 |
5000 |
Fast Stone |
2 |
5 |
10 |
15 |
20 |
30 |
40 |
50 |
60 |
100 |
125 |
150 |
175 |
200 |
300 |
500 |
700 |
1000 |
2000 |
3000 |
5000 |
Photoshop |
0,2 |
0,3 |
0,4 |
0,5 |
0,7 |
1 |
1,5 |
2 |
3 |
4 |
5 |
6,25 |
8,33 |
12,5 |
16,67 |
25 |
33,33 |
50 |
66,67 |
100 |
200 |
300 |
400 |
500 |
600 |
700 |
800 |
1200 |
1600 |
zSea |
1 |
2 |
3 |
4 |
5 |
7 |
10 |
17 |
25 |
37 |
50 |
62 |
75 |
87 |
100 |
112 |
125 |
150 |
175 |
200 |
225 |
250 |
275 |
300 |
350 |
400 |
450 |
500 |
600 |
700 |
800 |
900 |
1000 |
1100 |
1250 1200 |
1300 |
1400 |
1500 |
1750 |
2000 |
2250 |
2500 |
2750 |
3000 |
3500 |
4000 |
4500 |
5000 |
/programs/media/zsea |
---|
Property changes: |
Added: tsvn:logminsize |
+5 |
\ No newline at end of property |