PonyProg :  PonyProg Phorum PonyProg
PonyProg open discussion 
PonyProg ported to Qt
Posted by: Eduard-X ()
Date: March 29, 2017 09:41PM

Hi together!

I test now the ported to Qt4/Qt5 version of PonyProg. The Make configurator is CMake. I can only test the Source Code under Linux.
Someone has any interest to compile the source code under Windows or OSX? I need to fix the CMakeLists.txt file for other systems.
After one-two weeks of testing i can publish the source code or send it to main developer of PonyProg, Claudio Lanconelli.

Many thanks for your support!

Best regards from Hanover,
Linux developer Eduard

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: sonix ()
Date: March 30, 2017 07:06PM

Hello Eduard,

it sounds good smiling smiley
I can try to compile it under Windows. Could you please post here the source code or send me a download link?

Thanks in advance.
Sonix

Eduard-X Wrote:
-------------------------------------------------------
> Hi together!
>
> I test now the ported to Qt4/Qt5 version of
> PonyProg. The Make configurator is CMake. I can
> only test the Source Code under Linux.
> Someone has any interest to compile the source
> code under Windows or OSX? I need to fix the
> CMakeLists.txt file for other systems.
> After one-two weeks of testing i can publish the
> source code or send it to main developer of
> PonyProg, Claudio Lanconelli.
>
> Many thanks for your support!
>
> Best regards from Hanover,
> Linux developer Eduard

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: Eduard-X ()
Date: March 30, 2017 07:53PM

Hi!
Claudio will actualize the source code on sourceforge.net.
Please be patient. smiling smiley I need help to create the packages for Win, MacOS.
Packages for Linux distributions is not a big problem for me.
Many thanks for your help!

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: Eduard-X ()
Date: April 11, 2017 06:54AM

Hello together!
The PonyProg is ready for testing. smiling smiley
First time we test it with Claudio, after this the source code should be actualized.
Best regards from Hanover

p.s. screenshot is here https://www.mikrocontroller.net/topic/423924#4970474

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: Eduard-X ()
Date: June 01, 2017 07:17PM

Hi! It's the current development branch:
https://github.com/lancos/ponyprog/tree/wip/eduard/patches
you can compile the source code under Windows with help of Qt Creator, or under Linux it's posible with CMake and Make, creating of packages too.
Now i'm trying to switch to qmake pro file, integrate into this creating of install packages (deb, rpm), but i don't have the experience. Can anybody help?
You can send the patches to my email address, you can find it in the aboutmdlg.cpp smiling smiley
Best regards,
Eduard

Attachments: fuse-neu.png (109.4 KB)  
Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: Eduard-X ()
Date: June 19, 2017 06:04PM

Hi!
The fuse/lock dialog was complete overworked. Now is the help system integrated in this popup window. The current source code is in my branch. This branch will be merged to master.
Regards to all those interested.



Edited 1 time(s). Last edit at 06/19/2017 08:30PM by Eduard-X.

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: sonix ()
Date: June 20, 2017 08:08PM

Hello Eduard,

I try to compile PonyProg 3.00 under win7 64-bit and I found that in downloaded GitHub zip file is the folder "qhexedit2" empty, therefore first attempt to compile failed due to missing files in this folder. If I download only the code for "qhexedit2" it is ok. Attached is screen where I downloaded the zip files from.

But even the content of "qhexedit2" is fixed there are another 43 issues occurred during build process. Most of them are detected in file e2app.cpp starting with error below:

D:\PonyProg300\SrcPony\e2app.cpp:525: error: 'DWORD' was not declared in this scope
DWORD t0;
^

Maybe incorrect configuration of QT Creator or include path to QT. I will try to solve it.

*edit: DWORD and LPCSTR issue fixed by adding:
#ifdef __MINGW32__
#include <windows.h>
#endif

on top of the e2app.cpp and e2cmdw.cpp
*end edit

Could you fix empty "qhexedit2" folder, please?
Thanks

Yours sincerely
sonix

Eduard-X Wrote:
-------------------------------------------------------
> Hi! It's the current development branch:
> https://github.com/lancos/ponyprog/tree/wip/eduard
> /patches
> you can compile the source code under Windows with
> help of Qt Creator, or under Linux it's posible
> with CMake and Make, creating of packages too.
> Now i'm trying to switch to qmake pro file,
> integrate into this creating of install packages
> (deb, rpm), but i don't have the experience. Can
> anybody help?
> You can send the patches to my email address, you
> can find it in the aboutmdlg.cpp smiling smiley
> Best regards,
> Eduard



Edited 1 time(s). Last edit at 06/20/2017 08:24PM by sonix.

Attachments: PonyProg300_download_project.jpg (294.6 KB)  
Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: Eduard-X ()
Date: June 20, 2017 08:32PM

Hello!
You can try to convert DWORD to quint32, i'll fix this tomorrow in my branch.
The other issue you can download the source code of qhexedit2 from here https://github.com/lancos/qhexedit2 and copy files from archive into qhexedit2 subfolder, or git clone in subfolder. Or other way: from project folder run "git submodule init" and after it "git submodule update" in case of git installation on your windows computer.
Best regards,
Eduard
p.s. DWORD is converted to quint32 now in active branch. smiling smiley
p.p.s. the windows part is qmake based, the linux is cmake based at this time



Edited 2 time(s). Last edit at 06/21/2017 09:14AM by Eduard-X.

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: sonix ()
Date: June 21, 2017 09:36PM

Hello Eduard,

thanks for "DWORD" fix.

Now are present these compilation errors:
1.
D:\PonyProg300\SrcPony\e2app.cpp:570: error: 'GetTickCount' was not declared in this scope
t0 = GetTickCount();
^

I have fixed it with adding:
#ifdef __MINGW32__
#include <windows.h>
#endif
-------------------------------------
2.
D:\PonyProg300\SrcPony\e2cmdw.cpp:2869: error: 'LPCWSTR' was not declared in this scope
ShellExecute(NULL, L"open", (LPCWSTR)str.utf16(), NULL, NULL, SW_SHOWNORMAL);
^
Fixed as error 1
-------------------------------------
3.
D:\PonyProg300\SrcPony\e2cmdw.cpp:2869: error: 'SW_SHOWNORMAL' was not declared in this scope
ShellExecute(NULL, L"open", (LPCWSTR)str.utf16(), NULL, NULL, SW_SHOWNORMAL);
^
Fixed as error 1
-------------------------------------
4.
D:\PonyProg300\SrcPony\e2cmdw.cpp:2869: error: 'ShellExecute' was not declared in this scope
ShellExecute(NULL, L"open", (LPCWSTR)str.utf16(), NULL, NULL, SW_SHOWNORMAL);
^
Fixed as error 1
-------------------------------------
5.
D:\PonyProg300\SrcPony\portint.cpp:201: error: 'inb' was not declared in this scope
return inb(nport);
^
I have no idea how to fix it
-------------------------------------
6.
D:\PonyProg300\SrcPony\portint.cpp:241: error: 'outb' was not declared in this scope
outb(val, nport);
^
I have no idea how to fix it
-------------------------------------
7.
D:\PonyProg300\SrcPony\portint.cpp:282: error: 'outb' was not declared in this scope
outb(cpwreg, write_port);
^
I have no idea how to fix it
-------------------------------------
8.
D:\PonyProg300\SrcPony\portint.cpp:385: error: 'inb' was not declared in this scope
lcr_copy = inb(GetFirstPort() + lcrOfst);
^
I have no idea how to fix it
-------------------------------------
9.
D:\PonyProg300\SrcPony\portint.cpp:386: error: 'outb' was not declared in this scope
outb(0, GetFirstPort() + lcrOfst);
^
I have no idea how to fix it
-------------------------------------
10.
D:\Projekty a programy\_Moje_QT_projekty\PonyProg300\SrcPony\portint.cpp:420: error: 'outb' was not declared in this scope
outb(lcr_copy & ~BREAK_MASK, GetFirstPort() + lcrOfst);
^
I have no idea how to fix it
-------------------------------------

Could you correct it, please?

Thanks

p.s.:I am running win7 x64 / qt 4.8.6 / qt creator 4.3.0

Yours sincerely
sonix

Eduard-X Wrote:
-------------------------------------------------------
> Hello!
> You can try to convert DWORD to quint32, i'll fix
> this tomorrow in my branch.
> The other issue you can download the source code
> of qhexedit2 from here
> https://github.com/lancos/qhexedit2 and copy files
> from archive into qhexedit2 subfolder, or git
> clone in subfolder. Or other way: from project
> folder run "git submodule init" and after it "git
> submodule update" in case of git installation on
> your windows computer.
> Best regards,
> Eduard
> p.s. DWORD is converted to quint32 now in active
> branch. smiling smiley
> p.p.s. the windows part is qmake based, the linux
> is cmake based at this time

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: Eduard-X ()
Date: June 22, 2017 06:25AM

Hello Sonix!
Yes of course, i'll update the source code after my work, from home. Today.
Sorry for troubles with windows part.
Best regards from Hanover,
Eduard

p.s. possible, i found the solution for this trouble:
please change lines
#ifdef WIN32
to
#ifdef __MINGW32__
or to
#ifdef Q_OS_WIN32

update: i have pushed the patch with Q_OS_WIN32



Edited 2 time(s). Last edit at 06/22/2017 04:16PM by Eduard-X.

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: sonix ()
Date: June 22, 2017 09:24PM

Hello Eduard,

thanks for update, unfortunately the number of errors increased from 12 to 43. I think it would be better to revert the state to previous one.

Yours sincerely
sonix

Eduard-X Wrote:
-------------------------------------------------------
> Hello Sonix!
> Yes of course, i'll update the source code after
> my work, from home. Today.
> Sorry for troubles with windows part.
> Best regards from Hanover,
> Eduard
>
> p.s. possible, i found the solution for this
> trouble:
> please change lines
> #ifdef WIN32
> to
> #ifdef __MINGW32__
> or to
> #ifdef Q_OS_WIN32
>
> update: i have pushed the patch with Q_OS_WIN32

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: Eduard-X ()
Date: June 23, 2017 08:15AM

Hi Sonix!
Thank you for your testing. Today i'll push the new source code with followed:
#if defined(WIN32) || defined(__MINGW32__) || defined(Q_OS_WIN32)
The problem is the different compiler systems, VS, MinGW and other. But for me is the puzzle, why the compiler don't accept the Q_OS_WIN32, though it will be compiled with Qt, is the part of #include <QtGlobal>, this is included in mostly Qt header files.
http://doc.qt.io/qt-4.8/qtglobal.html
All right, please wait for update.
Best regards,
Eduard

update: source code has been pushed. if you have troubles during the compilation, please upload the output text as file. smiling smiley



Edited 2 time(s). Last edit at 06/23/2017 04:46PM by Eduard-X.

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: sonix ()
Date: June 23, 2017 07:20PM

Hi Eduard,

neither the last update does not solved it. It is the same as yesterday. I have attached two compile output logs. One from today's commit and one from 20.6.2017 where only "inb" and "outb" errors occurred.

Maybe it is better to focus on these errors. I do not know.

Yours sincerely
sonix


Eduard-X Wrote:
-------------------------------------------------------
> Hi Sonix!
> Thank you for your testing. Today i'll push the
> new source code with followed:
> #if defined(WIN32) || defined(__MINGW32__) ||
> defined(Q_OS_WIN32)
> The problem is the different compiler systems, VS,
> MinGW and other. But for me is the puzzle, why the
> compiler don't accept the Q_OS_WIN32, though it
> will be compiled with Qt, is the part of #include
> , this is included in mostly Qt header files.
> http://doc.qt.io/qt-4.8/qtglobal.html
> All right, please wait for update.
> Best regards,
> Eduard
>
> update: source code has been pushed. if you have
> troubles during the compilation, please upload the
> output text as file. smiling smiley



Edited 1 time(s). Last edit at 06/23/2017 08:37PM by sonix.

Attachments: CompileOutputLogs.zip (4 KB)  
Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: Eduard-X ()
Date: June 23, 2017 08:46PM

Hello!
I think, the main trouble is followed:
from 'quint32* {aka unsigned int*}' to 'PDWORD {aka long unsigned int*}'
I'll try to solve this today, i don't have the windows development system.
I'm in last 15 years the linux developer only.
The source code is pushed now.
Regards from Hanover



Edited 1 time(s). Last edit at 06/23/2017 08:48PM by Eduard-X.

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: sonix ()
Date: June 23, 2017 10:52PM

Hi Eduard,

after changes in files below I got finally only few errors. I have attached compile output log. Could you look at it, please?

Thanks in advance.

chunks.cpp (in qhexedit2/src)
change from #include <limits.h> to #include <climits> //fix for LLONG_MAX error

portint.cpp
change from quint32 Length = sizeof(Count); to DWORD Length = sizeof(Count); //fix for quint32 error

portint.h
quint32 old_mask; to DWORD old_mask; //fix for quint32 error

errors:
qtmain_win.cpp:-1: error: undefined reference to `_Unwind_Resume'

:-1: error: c:/Qt/4.8.6/lib/libqtmain.a(qtmain_win.o): bad reloc address 0x3d in section `.text$_ZN7QVectorIPcE7reallocEii[__ZN7QVectorIPcE7reallocEii]'


Yours sincerely
sonix

Eduard-X Wrote:
-------------------------------------------------------
> Hello!
> I think, the main trouble is followed:
> from 'quint32* {aka unsigned int*}' to 'PDWORD
> {aka long unsigned int*}'
> I'll try to solve this today, i don't have the
> windows development system.
> I'm in last 15 years the linux developer only.
> The source code is pushed now.
> Regards from Hanover

Attachments: CompileOutputLog_commit_d8633ca_from_20170623.zip (4.4 KB)  
Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: Eduard-X ()
Date: June 24, 2017 01:38PM

Hi Sonix!
The source code is pushed in current branch. QHexedit is fixed too, but now is it not in master branch.
For the last error message, symbols _Unwind_Resume are not found in object file libqtmain.a(qtmain_win.o). I don't have any idea, but i'll try to find the way to solve it.
Regards,
Eduard

p.s. possible here:
In my case it was attempting to link code compiled with GCC 4.9 upwards with a library compiled with GCC 4.8 or below. The solution is to recompile the library with the same compiler you're building with.

https://stackoverflow.com/questions/10419801/undefined-reference-to-unwind-resume-and-gxx-personality-v0



Edited 1 time(s). Last edit at 06/24/2017 01:42PM by Eduard-X.

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: sonix ()
Date: June 27, 2017 08:39PM

Hi Eduard,

I have installed Qt 5.8.0 with MinGW 5.3.0. Added include paths in .pro file (because of change in include folder structure compared to Qt 4.8.6) and modified some include paths in ui source headers and the result was more then 2000 errors (see attached zip with CompileOutputLog_Qt580_mingw530_32.txt). So compilation with Qt 5.8.0 and MinGW 5.3.0 is very strange.

Then I installed MinGW 4.8.2 (before I used tdm-gcc 4.8.1-3) which is recommended for use in Qt 4.8.6 and compiled again with older Qt. The compilation result is only 1 error with "windres" (CompileOutputLog_Qt486_mingw482_32.txt also attached). I see there are paths in arguments not in quotes and spaces caused wrong line parsing. I will try to fix it tomorrow.

Yours sincerely
sonix

Attachments: CompileOutputLog.zip (23.3 KB)  
Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: Eduard-X ()
Date: June 28, 2017 06:57AM

Hello Sonix!
Thank you for your trying. I think, all "undefined reference" error messages are because of wrong *.so files, for example i have right header files but linker has found the *.so files from Qt4 or no path for Qt5 object files. Possible, it's depended from environment variables, or in the order of their.
Best regards from Hanover
Eduard



Edited 1 time(s). Last edit at 06/28/2017 11:26AM by Eduard-X.

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: sonix ()
Date: June 28, 2017 07:53PM

Hi Eduard,

I have progress smiling smiley

After moving the ponyprog folder to the path without white spaces it has compiled release (compile log is attached) and debug without errors (only warnings). But when I run the ponyprog.exe I got error "procedure entry point __gxx_personality_v0 has not been found in dynamically linked library libstdc++-6.dll"

Have you any idea how to go ahead?

Thanks in advance.

Yours sincerely
sonix

Attachments: CompileOutputLog_Qt486_mingw482_32_success_release.zip (2.9 KB)  
Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: Eduard-X ()
Date: June 28, 2017 08:41PM

Hi!
I found the solution for this problem:
https://stackoverflow.com/questions/18668003/the-procedure-entry-point-gxx-personality-v0-could-not-be-located
Best regards
Eduard

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: sonix ()
Date: June 29, 2017 08:09PM

Hi Eduard,

I have fixed it successfully. The problem was the order of paths in system variable "path". Because of I use another compiler it has used dll's from it's bin folder (in my case from tdm-gcc-32/bin). Therefore I think the compilation is done.

I can run the PonyProg 3.00 smiling smiley but it seems like an incorrect timings are there. See below my first basic tests on windows7 x64.

1. calibration: OK
2. probe test with SI-ProgAPI: OK
3. probe test with SI-ProgI/O: FAIL
4. read data from MicroWire16 eeprom 9356: OK
5. write data to MicroWire16 eeprom 9356: FAIL (message about successful write was shown but data window changed new values to the old one's and data was not really written to eeprom)
6. read and write data to I2C Bus 8bit EEPROM 2416: FAIL (Device not responding)
7. read all AVR Micro ATtiny13: OK
8. write all AVR Micro ATtiny13: FAIL (message about successful write was shown but data window changed new values to the old one's and data was not really written to flash nor eeprom)

All this tests are OK if I use PonyProg 2.08d with the same HW.

Have you tested it under Debian Linux or another linux distribution?

Till Sunday I will try to compile it on Debian 8.5 and do the same basic tests.

Thank you so far for your help.

Yours sincerely
sonix

Eduard-X Wrote:
-------------------------------------------------------
> Hi!
> I found the solution for this problem:
> https://stackoverflow.com/questions/18668003/the-p
> rocedure-entry-point-gxx-personality-v0-could-not-
> be-located
> Best regards
> Eduard



Edited 1 time(s). Last edit at 06/30/2017 08:24PM by sonix.

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: sonix ()
Date: June 30, 2017 12:42PM

Hi Eduard,

today I have compiled PonyProg2000 2.08d (with Code:Blocks IDE 16.01) and 3.00 (with QT Creator 3.2.1 / Qt 4.8.6 / GNU GCC x86 32bit) in Debian Linux 8.5.

Here are some results of basic tests:
1. calibration: OK
2. probe test with SI-ProgAPI: OK
3. probe test with SI-ProgI/O: OK
4. read data from MicroWire16 eeprom 9356: OK
5. write data to MicroWire16 eeprom 9356: FAIL (message about successful write was shown but data window changed new values to the old one's and data was not really written to eeprom)
6. read and write data to I2C Bus 8bit EEPROM 2416: FAIL (Device not responding)
7. read all AVR Micro ATtiny13: OK
8. write all AVR Micro ATtiny13: FAIL (message about successful write was shown but data window changed new values to the old one's and data was not really written to flash nor eeprom)

All this tests are OK if I use PonyProg 2.08d with the same HW compiled on the same Debian Linux 8.5.

I will try to compile also PonyProg master from Lancos to see if the result is the same as yours.

Yours sincerely
sonix



Edited 1 time(s). Last edit at 06/30/2017 08:23PM by sonix.

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: sonix ()
Date: June 30, 2017 08:40PM

Hi Eduard,

I did few measurements on clock and data signals and here is result:

1. probe test with SI-ProgI/O fails because there is no clock signal generated by PonyProg
2. read and write data to I2C Bus 8bit EEPROM 2416 fails because there is also no clock signal generated by PonyProg


Write data to MicroWire16 eeprom 9356 and AVR Micro ATtiny13 fails because I suppose data buffer bug. Every data changed in buffer is not really send to a device but "old" buffer content is send. If I fill the buffer (Menu Utility/Fill buffer..) with any value, data is written to device correctly. Clear buffer command from menu Utility/Clear buffer is not functional at all.

I will continue with compilation of Lancos source code and then try to debug the mentioned issues.

Yours sincerely
sonix

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: Eduard-X ()
Date: June 30, 2017 09:00PM

Hello Sonix!
Many thanks for this information! I try to find the bug(s) after porting. I think, Claudio is now not so busy, possible he will find the points quicker. smiling smiley
Best regards
Eduard

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: sonix ()
Date: July 02, 2017 05:32PM

Hi Eduard,

I have found two solutions. One is for probe test with SI-ProgI/O. The library inpout32.dll must be in PonyProg folder present. The second solution is connected with read data to I2C Bus 8bit EEPROM 2416. There is problem in file e2profil.cpp in conversion from string "0xa0" to long type in line 423 rval = sp.toLong(&ok, 16). If base is 16 the the string should contain only hex characters but if not the resulting number in rval was 352 instead of 160. Therefore I have changed this line to rval = sp.toLong(&ok, 0) and read data is functional smiling smiley But write data crashes the application sad smiley

This is from Qt creator help "If base is 0, the C language convention is used: If the string begins with "0x", base 16 is used"

p.s.I have successfully compiled also Lancos source code from Qt PonyProg 3.00

Yours sincerely
sonix

Eduard-X Wrote:
-------------------------------------------------------
> Hello Sonix!
> Many thanks for this information! I try to find
> the bug(s) after porting. I think, Claudio is now
> not so busy, possible he will find the points
> quicker. smiling smiley
> Best regards
> Eduard

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: Eduard-X ()
Date: July 02, 2017 09:09PM

Hi Sonix!
The solution for E2Profile bug is pushed in my current branch now. Thank you!
Two things are implemented in Fuse Dialog:
1. SPIEN is checked and read only
2. RSTDISBL change with warning
Tomorrow i have to check the Fuse/Lock data fields in fusemdlg.cpp
Best regards

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: Eduard-X ()
Date: July 03, 2017 07:50PM

Hi!
Now is it possible to define the common description structure for more then one chip, for example (file fusemdlg.cpp):

{ AT90S2313, AT90S4414, AT90S8515, AT90S4434, AT90S8535 },
{
// fuse
{ 0, "FSTRT", "Short start-up time enabled" },
{ 5, "SPIEN", "Serial program downloading (SPI) enabled" }
},
{
// fuse mask description
},
{
// lock
{ 1, "Lock1", "" },
{ 2, "Lock2", "" }
},
{
// lock mask description
{ "Lock=11", "Mode 1: No memory lock features enabled" },
{ "Lock=10", "Mode 2: Further programming disabled" },
{ "Lock=00", "Mode 3: Further programming and verification disabled" }
}

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: Eduard-X ()
Date: July 04, 2017 08:12PM

Hi!
Please check the PIC fuse/lock descriptions.
Best regards,
Eduard

Options: ReplyQuote
Re: PonyProg ported to Qt
Posted by: Eduard-X ()
Date: October 05, 2017 09:28PM

Hi!
Claudio has released the version 3.0.0
best regards

https://github.com/lancos/ponyprog



Edited 1 time(s). Last edit at 10/06/2017 03:35PM by Eduard-X.

Options: ReplyQuote