diff options
Diffstat (limited to 'packages')
133 files changed, 2543 insertions, 12146 deletions
diff --git a/packages/alsa/alsa-state.bb b/packages/alsa/alsa-state.bb index 7a95b55f34..1d31bd765e 100644 --- a/packages/alsa/alsa-state.bb +++ b/packages/alsa/alsa-state.bb @@ -15,7 +15,7 @@ SRC_URI = " \ file://asound.state \ file://alsa-state " -SRC_URI_append_fic-gta01 = " \ +SRC_URI_append_om-gta01 = " \ file://capturehandset.state \ file://captureheadset.state \ file://gsmbluetooth.state \ @@ -26,7 +26,7 @@ SRC_URI_append_fic-gta01 = " \ file://voip-handset.state \ file://voip-headset.state" -SRC_URI_append_fic-gta02 = "\ +SRC_URI_append_om-gta02 = "\ file://stereoout.state \ file://gsmhandset.state \ " diff --git a/packages/alsa/alsa-state/fic-gta01/.mtn2git_empty b/packages/alsa/alsa-state/om-gta01/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/alsa/alsa-state/fic-gta01/.mtn2git_empty +++ b/packages/alsa/alsa-state/om-gta01/.mtn2git_empty diff --git a/packages/alsa/alsa-state/fic-gta01/asound.state b/packages/alsa/alsa-state/om-gta01/asound.state index 26db3cf311..26db3cf311 100644 --- a/packages/alsa/alsa-state/fic-gta01/asound.state +++ b/packages/alsa/alsa-state/om-gta01/asound.state diff --git a/packages/alsa/alsa-state/fic-gta01/capturehandset.state b/packages/alsa/alsa-state/om-gta01/capturehandset.state index 54bf01e945..54bf01e945 100644 --- a/packages/alsa/alsa-state/fic-gta01/capturehandset.state +++ b/packages/alsa/alsa-state/om-gta01/capturehandset.state diff --git a/packages/alsa/alsa-state/fic-gta01/captureheadset.state b/packages/alsa/alsa-state/om-gta01/captureheadset.state index 2a174d80ab..2a174d80ab 100644 --- a/packages/alsa/alsa-state/fic-gta01/captureheadset.state +++ b/packages/alsa/alsa-state/om-gta01/captureheadset.state diff --git a/packages/alsa/alsa-state/fic-gta01/gsmbluetooth.state b/packages/alsa/alsa-state/om-gta01/gsmbluetooth.state index 8569474a0e..8569474a0e 100644 --- a/packages/alsa/alsa-state/fic-gta01/gsmbluetooth.state +++ b/packages/alsa/alsa-state/om-gta01/gsmbluetooth.state diff --git a/packages/alsa/alsa-state/fic-gta01/gsmhandset.state b/packages/alsa/alsa-state/om-gta01/gsmhandset.state index 999f71253c..999f71253c 100644 --- a/packages/alsa/alsa-state/fic-gta01/gsmhandset.state +++ b/packages/alsa/alsa-state/om-gta01/gsmhandset.state diff --git a/packages/alsa/alsa-state/fic-gta01/gsmheadset.state b/packages/alsa/alsa-state/om-gta01/gsmheadset.state index e81bfc8306..e81bfc8306 100644 --- a/packages/alsa/alsa-state/fic-gta01/gsmheadset.state +++ b/packages/alsa/alsa-state/om-gta01/gsmheadset.state diff --git a/packages/alsa/alsa-state/fic-gta01/gsmspeakerout.state b/packages/alsa/alsa-state/om-gta01/gsmspeakerout.state index 5e3ed93179..5e3ed93179 100644 --- a/packages/alsa/alsa-state/fic-gta01/gsmspeakerout.state +++ b/packages/alsa/alsa-state/om-gta01/gsmspeakerout.state diff --git a/packages/alsa/alsa-state/fic-gta01/stereoout.state b/packages/alsa/alsa-state/om-gta01/stereoout.state index 26db3cf311..26db3cf311 100644 --- a/packages/alsa/alsa-state/fic-gta01/stereoout.state +++ b/packages/alsa/alsa-state/om-gta01/stereoout.state diff --git a/packages/alsa/alsa-state/fic-gta01/voip-handset.state b/packages/alsa/alsa-state/om-gta01/voip-handset.state index 420a4eb79d..420a4eb79d 100644 --- a/packages/alsa/alsa-state/fic-gta01/voip-handset.state +++ b/packages/alsa/alsa-state/om-gta01/voip-handset.state diff --git a/packages/alsa/alsa-state/fic-gta01/voip-headset.state b/packages/alsa/alsa-state/om-gta01/voip-headset.state index df22f5b7d5..df22f5b7d5 100644 --- a/packages/alsa/alsa-state/fic-gta01/voip-headset.state +++ b/packages/alsa/alsa-state/om-gta01/voip-headset.state diff --git a/packages/alsa/alsa-state/fic-gta02/.mtn2git_empty b/packages/alsa/alsa-state/om-gta02/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/alsa/alsa-state/fic-gta02/.mtn2git_empty +++ b/packages/alsa/alsa-state/om-gta02/.mtn2git_empty diff --git a/packages/alsa/alsa-state/fic-gta02/asound.state b/packages/alsa/alsa-state/om-gta02/asound.state index 3b46fc7223..3b46fc7223 100644 --- a/packages/alsa/alsa-state/fic-gta02/asound.state +++ b/packages/alsa/alsa-state/om-gta02/asound.state diff --git a/packages/alsa/alsa-state/fic-gta02/gsmhandset.state b/packages/alsa/alsa-state/om-gta02/gsmhandset.state index 722ce88425..722ce88425 100644 --- a/packages/alsa/alsa-state/fic-gta02/gsmhandset.state +++ b/packages/alsa/alsa-state/om-gta02/gsmhandset.state diff --git a/packages/alsa/alsa-state/fic-gta02/stereoout.state b/packages/alsa/alsa-state/om-gta02/stereoout.state index 3b46fc7223..3b46fc7223 100644 --- a/packages/alsa/alsa-state/fic-gta02/stereoout.state +++ b/packages/alsa/alsa-state/om-gta02/stereoout.state diff --git a/packages/base-files/base-files/fic-gta01/.mtn2git_empty b/packages/base-files/base-files/om-gta01/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/base-files/base-files/fic-gta01/.mtn2git_empty +++ b/packages/base-files/base-files/om-gta01/.mtn2git_empty diff --git a/packages/base-files/base-files/fic-gta01/fstab b/packages/base-files/base-files/om-gta01/fstab index e5acb6a1eb..e5acb6a1eb 100644 --- a/packages/base-files/base-files/fic-gta01/fstab +++ b/packages/base-files/base-files/om-gta01/fstab diff --git a/packages/base-files/base-files/fic-gta02/.mtn2git_empty b/packages/base-files/base-files/om-gta02/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/base-files/base-files/fic-gta02/.mtn2git_empty +++ b/packages/base-files/base-files/om-gta02/.mtn2git_empty diff --git a/packages/base-files/base-files/fic-gta02/fstab b/packages/base-files/base-files/om-gta02/fstab index e5acb6a1eb..e5acb6a1eb 100644 --- a/packages/base-files/base-files/fic-gta02/fstab +++ b/packages/base-files/base-files/om-gta02/fstab diff --git a/packages/bluez/bluez-utils3.inc b/packages/bluez/bluez-utils3.inc index 3932d722ee..e9edfe1b95 100644 --- a/packages/bluez/bluez-utils3.inc +++ b/packages/bluez/bluez-utils3.inc @@ -40,7 +40,7 @@ EXTRA_OECONF = " \ # The config options are explained below: # --enable-obex enable OBEX support -# --enable-alsa enable ALSA support, not needed for nokia770, nokia800 and fic-gtao1 +# --enable-alsa enable ALSA support, not needed for nokia770, nokia800 and om-gtao1 # --enable-cups install CUPS backend support # --enable-bccmd install BCCMD interface utility # --enable-avctrl install Audio/Video control utility diff --git a/packages/bluez/bluez-utils_3.11.bb b/packages/bluez/bluez-utils_3.11.bb index 6cadfc1a53..25fda9dcff 100644 --- a/packages/bluez/bluez-utils_3.11.bb +++ b/packages/bluez/bluez-utils_3.11.bb @@ -29,7 +29,7 @@ EXTRA_OECONF = " \ # The config options are explained below: # --enable-obex enable OBEX support -# --enable-alsa enable ALSA support, not needed for nokia770, nokia800 and fic-gtao1 +# --enable-alsa enable ALSA support, not needed for nokia770, nokia800 and om-gtao1 # --enable-cups install CUPS backend support # --enable-bccmd install BCCMD interface utility # --enable-avctrl install Audio/Video control utility diff --git a/packages/bluez/bluez-utils_3.12.bb b/packages/bluez/bluez-utils_3.12.bb index 754097acce..98a79af901 100644 --- a/packages/bluez/bluez-utils_3.12.bb +++ b/packages/bluez/bluez-utils_3.12.bb @@ -27,7 +27,7 @@ EXTRA_OECONF = " \ # The config options are explained below: # --enable-obex enable OBEX support -# --enable-alsa enable ALSA support, not needed for nokia770, nokia800 and fic-gtao1 +# --enable-alsa enable ALSA support, not needed for nokia770, nokia800 and om-gtao1 # --enable-cups install CUPS backend support # --enable-bccmd install BCCMD interface utility # --enable-avctrl install Audio/Video control utility diff --git a/packages/bluez/bluez-utils_3.13.bb b/packages/bluez/bluez-utils_3.13.bb index 5ea1429641..0a2a062338 100644 --- a/packages/bluez/bluez-utils_3.13.bb +++ b/packages/bluez/bluez-utils_3.13.bb @@ -27,7 +27,7 @@ EXTRA_OECONF = " \ # The config options are explained below: # --enable-obex enable OBEX support -# --enable-alsa enable ALSA support, not needed for nokia770, nokia800 and fic-gtao1 +# --enable-alsa enable ALSA support, not needed for nokia770, nokia800 and om-gtao1 # --enable-cups install CUPS backend support # --enable-bccmd install BCCMD interface utility # --enable-avctrl install Audio/Video control utility diff --git a/packages/bluez/bluez-utils_3.14.bb b/packages/bluez/bluez-utils_3.14.bb index 237a1aff0d..5d0c3cf15b 100644 --- a/packages/bluez/bluez-utils_3.14.bb +++ b/packages/bluez/bluez-utils_3.14.bb @@ -28,7 +28,7 @@ EXTRA_OECONF = " \ # The config options are explained below: # --enable-obex enable OBEX support -# --enable-alsa enable ALSA support, not needed for nokia770, nokia800 and fic-gtao1 +# --enable-alsa enable ALSA support, not needed for nokia770, nokia800 and om-gtao1 # --enable-cups install CUPS backend support # --enable-bccmd install BCCMD interface utility # --enable-avctrl install Audio/Video control utility diff --git a/packages/bluez/bluez-utils_3.15.bb b/packages/bluez/bluez-utils_3.15.bb index b8dbfbca7c..a7d1dce192 100644 --- a/packages/bluez/bluez-utils_3.15.bb +++ b/packages/bluez/bluez-utils_3.15.bb @@ -29,7 +29,7 @@ EXTRA_OECONF = " \ # The config options are explained below: # --enable-obex enable OBEX support -# --enable-alsa enable ALSA support, not needed for nokia770, nokia800 and fic-gtao1 +# --enable-alsa enable ALSA support, not needed for nokia770, nokia800 and om-gtao1 # --enable-cups install CUPS backend support # --enable-bccmd install BCCMD interface utility # --enable-avctrl install Audio/Video control utility diff --git a/packages/bluez/bluez-utils_3.16.bb b/packages/bluez/bluez-utils_3.16.bb index b8dbfbca7c..a7d1dce192 100644 --- a/packages/bluez/bluez-utils_3.16.bb +++ b/packages/bluez/bluez-utils_3.16.bb @@ -29,7 +29,7 @@ EXTRA_OECONF = " \ # The config options are explained below: # --enable-obex enable OBEX support -# --enable-alsa enable ALSA support, not needed for nokia770, nokia800 and fic-gtao1 +# --enable-alsa enable ALSA support, not needed for nokia770, nokia800 and om-gtao1 # --enable-cups install CUPS backend support # --enable-bccmd install BCCMD interface utility # --enable-avctrl install Audio/Video control utility diff --git a/packages/bluez/bluez-utils_3.17.bb b/packages/bluez/bluez-utils_3.17.bb index b8dbfbca7c..a7d1dce192 100644 --- a/packages/bluez/bluez-utils_3.17.bb +++ b/packages/bluez/bluez-utils_3.17.bb @@ -29,7 +29,7 @@ EXTRA_OECONF = " \ # The config options are explained below: # --enable-obex enable OBEX support -# --enable-alsa enable ALSA support, not needed for nokia770, nokia800 and fic-gtao1 +# --enable-alsa enable ALSA support, not needed for nokia770, nokia800 and om-gtao1 # --enable-cups install CUPS backend support # --enable-bccmd install BCCMD interface utility # --enable-avctrl install Audio/Video control utility diff --git a/packages/efl1/evas-native_cvs.bb b/packages/efl1/evas-native_cvs.bb index 204abbb821..3ca8df9e41 100644 --- a/packages/efl1/evas-native_cvs.bb +++ b/packages/efl1/evas-native_cvs.bb @@ -1,7 +1,7 @@ require evas.inc inherit native DEPENDS = "freetype-native libpng-native jpeg-native eet-native" -PR = "r0" +PR = "r1" EXTRA_OECONF = "\ --x-includes=${STAGING_INCDIR}/X11 \ @@ -59,3 +59,58 @@ EXTRA_OECONF = "\ --disable-convert-32-rgb-rot-90 \ --disable-convert-32-rgb-rot-270" + +# evas needs a different oe_libinstall, so copy/paste autotools_stage_all +do_stage() { + rm -rf ${STAGE_TEMP} + mkdir -p ${STAGE_TEMP} + oe_runmake DESTDIR="${STAGE_TEMP}" install + autotools_stage_dir ${STAGE_TEMP}/${includedir} ${STAGING_INCDIR} + if [ "${BUILD_SYS}" = "${HOST_SYS}" ]; then + autotools_stage_dir ${STAGE_TEMP}/${bindir} ${STAGING_DIR_HOST}${layout_bindir} + autotools_stage_dir ${STAGE_TEMP}/${sbindir} ${STAGING_DIR_HOST}${layout_sbindir} + autotools_stage_dir ${STAGE_TEMP}/${base_bindir} ${STAGING_DIR_HOST}${layout_base_bindir} + autotools_stage_dir ${STAGE_TEMP}/${base_sbindir} ${STAGING_DIR_HOST}${layout_base_sbindir} + autotools_stage_dir ${STAGE_TEMP}/${libexecdir} ${STAGING_DIR_HOST}${layout_libexecdir} + fi + if [ -d ${STAGE_TEMP}/${libdir} ] + then + olddir=`pwd` + cd ${STAGE_TEMP}/${libdir} + las=$(find . -name \*.la -type f) + cd $olddir + echo "Found la files: $las" + if [ -n "$las" ]; then + # If there are .la files then libtool was used in the + # build, so install them with magic mangling. + for i in $las + do + dir=$(dirname $i) + echo "oe_libinstall -C ${STAGE_TEMP}/${libdir}/${dir} -so $(basename $i .la) ${STAGING_LIBDIR}/${dir}" + oe_libinstall -C ${STAGE_TEMP}/${libdir}/${dir} -so $(basename $i .la) ${STAGING_LIBDIR}/${dir} + done + else + # Otherwise libtool wasn't used, and lib/ can be copied + # directly. + echo "cp -fpPR ${STAGE_TEMP}/${libdir}/* ${STAGING_LIBDIR}" + cp -fpPR ${STAGE_TEMP}/${libdir}/* ${STAGING_LIBDIR} + fi + + fi + # Ok, this is nasty. pkgconfig.bbclass is usually used to install .pc files, + # however some packages rely on the presence of .pc files to enable/disable + # their configurataions in which case we better should not install everything + # unconditionally, but rather depend on the actual results of make install. + # The good news though: a) there are not many packages doing this and + # b) packaged staging will fix that anyways. :M: + if [ "${AUTOTOOLS_STAGE_PKGCONFIG}" = "1" ] + then + echo "cp -f ${STAGE_TEMP}/${libdir}/pkgconfig/*.pc ${STAGING_LIBDIR}/pkgconfig/" + cp -f ${STAGE_TEMP}/${libdir}/pkgconfig/*.pc ${STAGING_LIBDIR}/pkgconfig/ + fi + rm -rf ${STAGE_TEMP}/${mandir} || true + rm -rf ${STAGE_TEMP}/${infodir} || true + autotools_stage_dir ${STAGE_TEMP}/${datadir} ${STAGING_DATADIR} + rm -rf ${STAGE_TEMP} + +} diff --git a/packages/fbreader/fbreader_0.8.2a.bb b/packages/fbreader/fbreader_0.8.2a.bb index fa982040f9..52e8439a88 100644 --- a/packages/fbreader/fbreader_0.8.2a.bb +++ b/packages/fbreader/fbreader_0.8.2a.bb @@ -30,7 +30,7 @@ READER_GUI = "gpe" READER_STATUS = "release" # Set device specific overrides -READER_RESOLUTION_fic-gta01 = "480x640" +READER_RESOLUTION_om-gta01 = "480x640" READER_RESOLUTION_spitz = "640x480" READER_RESOLUTION_akita = "640x480" READER_RESOLUTION_htcuniversal = "640x480" diff --git a/packages/fbset/fbset-modes/fic-gta01/.mtn2git_empty b/packages/fbset/fbset-modes/om-gta01/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/fbset/fbset-modes/fic-gta01/.mtn2git_empty +++ b/packages/fbset/fbset-modes/om-gta01/.mtn2git_empty diff --git a/packages/fbset/fbset-modes/fic-gta01/fb.modes b/packages/fbset/fbset-modes/om-gta01/fb.modes index 446d23dd8e..446d23dd8e 100644 --- a/packages/fbset/fbset-modes/fic-gta01/fb.modes +++ b/packages/fbset/fbset-modes/om-gta01/fb.modes diff --git a/packages/gcc/gcc-4.2.1.inc b/packages/gcc/gcc-4.2.1.inc index 25b5937141..d48078384d 100644 --- a/packages/gcc/gcc-4.2.1.inc +++ b/packages/gcc/gcc-4.2.1.inc @@ -37,6 +37,7 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \ " SRC_URI_avr32 = " http://ewi546.ewi.utwente.nl/tmp/avr32-gcc-4.2.1-atmel.1.0.3.tar.gz \ + file://gcc-pr32889.patch;patch=1 \ file://100-uclibc-conf.patch;patch=1 \ file://103-uclibc-conf-noupstream.patch;patch=1 \ file://200-uclibc-locale.patch;patch=1 \ diff --git a/packages/gcc/gcc-4.2.1/gcc-pr32889.patch b/packages/gcc/gcc-4.2.1/gcc-pr32889.patch new file mode 100644 index 0000000000..3135f23907 --- /dev/null +++ b/packages/gcc/gcc-4.2.1/gcc-pr32889.patch @@ -0,0 +1,57 @@ +diff -urNp --exclude '*.swp' --exclude DEV-PHASE gcc-orig/gcc/reload.c gcc/gcc/reload.c +--- gcc-orig/gcc/reload.c 2008-02-18 09:59:15.000000000 -0800 ++++ gcc/gcc/reload.c 2008-02-18 10:05:47.000000000 -0800 +@@ -4574,7 +4574,7 @@ find_reloads_toplev (rtx x, int opnum, e + x = mem; + i = find_reloads_address (GET_MODE (x), &x, XEXP (x, 0), &XEXP (x, 0), + opnum, type, ind_levels, insn); +- if (x != mem) ++ if (!rtx_equal_p (x, mem)) + push_reg_equiv_alt_mem (regno, x); + if (address_reloaded) + *address_reloaded = i; +@@ -4789,7 +4789,7 @@ find_reloads_address (enum machine_mode + find_reloads_address (GET_MODE (tem), &tem, XEXP (tem, 0), + &XEXP (tem, 0), opnum, + ADDR_TYPE (type), ind_levels, insn); +- if (tem != orig) ++ if (!rtx_equal_p (tem, orig)) + push_reg_equiv_alt_mem (regno, tem); + } + /* We can avoid a reload if the register's equivalent memory +@@ -5589,7 +5589,7 @@ find_reloads_address_1 (enum machine_mod + RELOAD_OTHER, + ind_levels, insn); + +- if (tem != orig) ++ if (!rtx_equal_p (tem, orig)) + push_reg_equiv_alt_mem (regno, tem); + + /* Then reload the memory location into a base +@@ -5656,7 +5656,7 @@ find_reloads_address_1 (enum machine_mod + find_reloads_address (GET_MODE (tem), &tem, XEXP (tem, 0), + &XEXP (tem, 0), opnum, type, + ind_levels, insn); +- if (tem != orig) ++ if (!rtx_equal_p (tem, orig)) + push_reg_equiv_alt_mem (regno, tem); + /* Put this inside a new increment-expression. */ + x = gen_rtx_fmt_e (GET_CODE (x), GET_MODE (x), tem); +@@ -5848,7 +5848,7 @@ find_reloads_address_1 (enum machine_mod + find_reloads_address (GET_MODE (x), &x, XEXP (x, 0), + &XEXP (x, 0), opnum, ADDR_TYPE (type), + ind_levels, insn); +- if (x != tem) ++ if (!rtx_equal_p (x, tem)) + push_reg_equiv_alt_mem (regno, x); + } + } +@@ -6076,7 +6076,7 @@ find_reloads_subreg_address (rtx x, int + XEXP (tem, 0), &XEXP (tem, 0), + opnum, type, ind_levels, insn); + /* ??? Do we need to handle nonzero offsets somehow? */ +- if (!offset && tem != orig) ++ if (!offset && !rtx_equal_p (tem, orig)) + push_reg_equiv_alt_mem (regno, tem); + + /* For some processors an address may be valid in the diff --git a/packages/gcc/gcc-cross_4.2.1.bb b/packages/gcc/gcc-cross_4.2.1.bb index bb3b5ff9b1..d886d147b0 100644 --- a/packages/gcc/gcc-cross_4.2.1.bb +++ b/packages/gcc/gcc-cross_4.2.1.bb @@ -1,4 +1,4 @@ -PR = "r13" +PR = "r14" require gcc-${PV}.inc require gcc-cross4.inc diff --git a/packages/gcc/gcc_4.2.1.bb b/packages/gcc/gcc_4.2.1.bb index 6da15d22b2..09a7cbbbc0 100644 --- a/packages/gcc/gcc_4.2.1.bb +++ b/packages/gcc/gcc_4.2.1.bb @@ -1,4 +1,4 @@ -PR = "r9" +PR = "r10" require gcc-${PV}.inc require gcc-configure-target.inc diff --git a/packages/gpephone/gpe-applauncher/fic-gta01/.mtn2git_empty b/packages/gpephone/gpe-applauncher/om-gta01/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/gpephone/gpe-applauncher/fic-gta01/.mtn2git_empty +++ b/packages/gpephone/gpe-applauncher/om-gta01/.mtn2git_empty diff --git a/packages/gpephone/gpe-applauncher/fic-gta01/hotkeys.conf b/packages/gpephone/gpe-applauncher/om-gta01/hotkeys.conf index 34bd6a22b7..34bd6a22b7 100644 --- a/packages/gpephone/gpe-applauncher/fic-gta01/hotkeys.conf +++ b/packages/gpephone/gpe-applauncher/om-gta01/hotkeys.conf diff --git a/packages/gpephone/gpe-applauncher/fic-gta01/softkeys.conf b/packages/gpephone/gpe-applauncher/om-gta01/softkeys.conf index f9fde86d2d..f9fde86d2d 100644 --- a/packages/gpephone/gpe-applauncher/fic-gta01/softkeys.conf +++ b/packages/gpephone/gpe-applauncher/om-gta01/softkeys.conf diff --git a/packages/gpephone/gpe-applauncher_0.10.bb b/packages/gpephone/gpe-applauncher_0.10.bb index 94f26c5589..7167b42071 100644 --- a/packages/gpephone/gpe-applauncher_0.10.bb +++ b/packages/gpephone/gpe-applauncher_0.10.bb @@ -7,7 +7,7 @@ PR = "r1" SRC_URI_OVERRIDES_PACKAGE_ARCH = "0" PACKAGES += "gpe-applauncher-config" -PACKAGE_ARCH_gpe-applauncher-config_fic-gta01 = "${MACHINE_ARCH}" +PACKAGE_ARCH_gpe-applauncher-config_om-gta01 = "${MACHINE_ARCH}" DEPENDS = "gtk+ libgpewidget libgpephone libgpelaunch dbus-glib libsettings libxsettings-client" RDEPENDS_${PN} += "gpe-applauncher-config" diff --git a/packages/gpephone/gpe-applauncher_0.11.bb b/packages/gpephone/gpe-applauncher_0.11.bb index 204f7828f9..4934cdeaf2 100644 --- a/packages/gpephone/gpe-applauncher_0.11.bb +++ b/packages/gpephone/gpe-applauncher_0.11.bb @@ -7,7 +7,7 @@ PR = "r2" SRC_URI_OVERRIDES_PACKAGE_ARCH = "0" PACKAGES += "gpe-applauncher-config" -PACKAGE_ARCH_gpe-applauncher-config_fic-gta01 = "${MACHINE_ARCH}" +PACKAGE_ARCH_gpe-applauncher-config_om-gta01 = "${MACHINE_ARCH}" DEPENDS = "gtk+ libgpewidget libgpephone libgpelaunch dbus-glib libsettings libxsettings-client" RDEPENDS_${PN} += "gpe-applauncher-config" diff --git a/packages/gpephone/gpe-applauncher_svn.bb b/packages/gpephone/gpe-applauncher_svn.bb index 9360c6f6d3..3087088ab8 100644 --- a/packages/gpephone/gpe-applauncher_svn.bb +++ b/packages/gpephone/gpe-applauncher_svn.bb @@ -15,7 +15,7 @@ S = "${WORKDIR}/${PN}" PACKAGES += "gpe-applauncher-config" -PACKAGE_ARCH_gpe-applauncher-config_fic-gta01 = "${MACHINE_ARCH}" +PACKAGE_ARCH_gpe-applauncher-config_om-gta01 = "${MACHINE_ARCH}" DEPENDS = "gtk+ libgpewidget libgpephone libgpelaunch dbus-glib libsettings libxsettings-client" RDEPENDS_${PN} += "gpe-applauncher-config" diff --git a/packages/gpephone/phoneserver_1.0.bb b/packages/gpephone/phoneserver_1.0.bb index 1415951473..ebd8a3c7cb 100644 --- a/packages/gpephone/phoneserver_1.0.bb +++ b/packages/gpephone/phoneserver_1.0.bb @@ -12,5 +12,5 @@ GPE_TARBALL_SUFFIX= "bz2" inherit gpephone autotools SRC_URI_append_x86 = " file://changeport.patch;patch=1;pnum=0" -SRC_URI_append_fic-gta01 = " file://phoneserver-gta01.patch;patch=1" +SRC_URI_append_om-gta01 = " file://phoneserver-gta01.patch;patch=1" diff --git a/packages/gpsd/files/fic-gta01/.mtn2git_empty b/packages/gpsd/files/om-gta01/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/gpsd/files/fic-gta01/.mtn2git_empty +++ b/packages/gpsd/files/om-gta01/.mtn2git_empty diff --git a/packages/gpsd/files/fic-gta01/gps-hardware b/packages/gpsd/files/om-gta01/gps-hardware index 6490f52c27..6490f52c27 100644 --- a/packages/gpsd/files/fic-gta01/gps-hardware +++ b/packages/gpsd/files/om-gta01/gps-hardware diff --git a/packages/gpsd/files/fic-gta01/gpsd-default b/packages/gpsd/files/om-gta01/gpsd-default index abd35927e5..abd35927e5 100644 --- a/packages/gpsd/files/fic-gta01/gpsd-default +++ b/packages/gpsd/files/om-gta01/gpsd-default diff --git a/packages/gpsd/files/fic-gta01/restart_gllin.sh b/packages/gpsd/files/om-gta01/restart_gllin.sh index 50810c3583..50810c3583 100644 --- a/packages/gpsd/files/fic-gta01/restart_gllin.sh +++ b/packages/gpsd/files/om-gta01/restart_gllin.sh diff --git a/packages/gpsd/gpsd.inc b/packages/gpsd/gpsd.inc index f7952e0297..06be2fe2eb 100644 --- a/packages/gpsd/gpsd.inc +++ b/packages/gpsd/gpsd.inc @@ -15,7 +15,7 @@ SRC_URI = "http://download.berlios.de/gpsd/gpsd-${PV}.tar.gz \ file://gps-hardware \ file://gpsd" -SRC_URI_append_fic-gta01 = " \ +SRC_URI_append_om-gta01 = " \ file://restart_gllin.sh \ " @@ -52,7 +52,7 @@ do_install_append() { install -m 0644 ${WORKDIR}/gpsd-default ${D}/${sysconfdir}/default/gpsd.default } -do_install_append_fic-gta01() { +do_install_append_om-gta01() { install -d ${D}/${sysconfdir}/apm/resume.d install -m 755 ${WORKDIR}/restart_gllin.sh ${D}/${sysconfdir}/apm/resume.d } diff --git a/packages/gtkhtml/gtkhtml-3.8_3.18.0.bb b/packages/gtkhtml/gtkhtml-3.8_3.18.0.bb new file mode 100644 index 0000000000..e678bc3134 --- /dev/null +++ b/packages/gtkhtml/gtkhtml-3.8_3.18.0.bb @@ -0,0 +1,12 @@ +require gtkhtml.inc + +DEPENDS = "gtk+ gail libbonoboui libgnomeprintui libgnomeui" + +SRC_URI = "${GNOME_MIRROR}/gtkhtml/3.18/gtkhtml-${PV}.tar.bz2" +FILES_${PN} += "${datadir}/gtkhtml-3.8" + +do_stage() { + mv src/libgtkhtml.pc src/libgtkhtml-3.8.pc || true + gnome_stage_includes + oe_libinstall -C src -so libgtkhtml-3.8 ${STAGING_LIBDIR} +} diff --git a/packages/initscripts/initscripts-1.0/fic-gta01/.mtn2git_empty b/packages/initscripts/initscripts-1.0/om-gta01/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/initscripts/initscripts-1.0/fic-gta01/.mtn2git_empty +++ b/packages/initscripts/initscripts-1.0/om-gta01/.mtn2git_empty diff --git a/packages/initscripts/initscripts-1.0/fic-gta01/inittab b/packages/initscripts/initscripts-1.0/om-gta01/inittab index 8d313b2a58..8d313b2a58 100644 --- a/packages/initscripts/initscripts-1.0/fic-gta01/inittab +++ b/packages/initscripts/initscripts-1.0/om-gta01/inittab diff --git a/packages/linux/linux-openmoko-devel_git.bb b/packages/linux/linux-openmoko-devel_git.bb index b727478c76..6b563a012a 100644 --- a/packages/linux/linux-openmoko-devel_git.bb +++ b/packages/linux/linux-openmoko-devel_git.bb @@ -24,7 +24,7 @@ FILES_kernel-image = "" ALLOW_EMPTY = "1" COMPATIBLE_HOST = "arm.*-linux" -COMPATIBLE_MACHINE = 'fic-gta01|fic-gta02' +COMPATIBLE_MACHINE = 'om-gta01|om-gta02' CMDLINE = "unused -- bootloader passes ATAG list" diff --git a/packages/linux/linux-openmoko.inc b/packages/linux/linux-openmoko.inc index 4f1981c8b3..69d7845f04 100644 --- a/packages/linux/linux-openmoko.inc +++ b/packages/linux/linux-openmoko.inc @@ -1,9 +1,7 @@ # extra stuff we need for openmoko that is not in linux.inc do_deploy_append() { - mv ${DEPLOY_DIR_IMAGE}/modules-${PV}-${PR}-${MACHINE}.tgz ${DEPLOY_DIR_IMAGE}/modules-${PV}-${PR}-${MACHINE_CLASS}.tgz - mv ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${PR}-${MACHINE}.bin ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${PR}-${MACHINE_CLASS}.bin rm -f ${KERNEL_IMAGE_SYMLINK_NAME}.bin - ln -sf ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${PR}-${MACHINE_CLASS}.bin ${DEPLOY_DIR_IMAGE}/uImage-${MACHINE_CLASS}-latest.bin + ln -sf ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${PR}-${MACHINE_ARCH}.bin ${DEPLOY_DIR_IMAGE}/uImage-${MACHINE_ARCH}-latest.bin } RDEPENDS_kernel-image += "mtd-utils" diff --git a/packages/linux/linux-openmoko_2.6.22.5.bb b/packages/linux/linux-openmoko_2.6.22.5.bb index fe46c59a58..126221ad6d 100644 --- a/packages/linux/linux-openmoko_2.6.22.5.bb +++ b/packages/linux/linux-openmoko_2.6.22.5.bb @@ -39,7 +39,7 @@ S = "${WORKDIR}/linux-${VANILLA_VERSION}" ALLOW_EMPTY = "1" COMPATIBLE_HOST = "arm.*-linux" -COMPATIBLE_MACHINE = 'fic-gta01|fic-gta02' +COMPATIBLE_MACHINE = 'om-gta01|om-gta02' CMDLINE = "unused -- bootloader passes ATAG list" diff --git a/packages/linux/linux-openmoko_2.6.24.bb b/packages/linux/linux-openmoko_2.6.24.bb index 0a7b34ba30..f87e6b68d8 100644 --- a/packages/linux/linux-openmoko_2.6.24.bb +++ b/packages/linux/linux-openmoko_2.6.24.bb @@ -11,10 +11,10 @@ KERNEL_VERSION = "${KERNEL_RELEASE}" # re-enabled this when feature is fully implemented in OE #SRCREV_FORMAT = "patches-rconfig" SRCREV_FORMAT = "patches" -CONFIG_REV = "4165" - +CONFIG_REV_om-gta01 = "4251" +CONFIG_REV_om-gta02 = "4251" PV = "${VANILLA_VERSION}+svnr${SRCREV}-r${CONFIG_REV}" -PR = "r4" +PR = "r5" KERNEL_IMAGETYPE = "uImage" UBOOT_ENTRYPOINT = "30008000" @@ -35,7 +35,7 @@ S = "${WORKDIR}/linux-${VANILLA_VERSION}" ALLOW_EMPTY = "1" COMPATIBLE_HOST = "arm.*-linux" -COMPATIBLE_MACHINE = 'fic-gta01|fic-gta02' +COMPATIBLE_MACHINE = 'om-gta01|om-gta02' CMDLINE = "unused -- bootloader passes ATAG list" @@ -55,11 +55,14 @@ module_autoload_snd-mixer-oss = "snd-mixer-oss" # sd/mmc module_autoload_s3cmci = "s3cmci" +CONFIG_NAME_om-gta01 = "gta01" +CONFIG_NAME_om-gta02 = "gta02" + do_prepatch() { mv ${WORKDIR}/patches ${S}/patches && cd ${S} && quilt push -av mv patches patches.openmoko mv .pc .pc.old - mv ${WORKDIR}/config/defconfig-${KERNEL_RELEASE} ${WORKDIR}/defconfig + mv ${WORKDIR}/config/defconfig-${CONFIG_NAME} ${WORKDIR}/defconfig } addtask prepatch after do_unpack before do_patch diff --git a/packages/matchbox-keyboard/matchbox-keyboard-inputmethod_svn.bb b/packages/matchbox-keyboard/matchbox-keyboard-inputmethod_svn.bb index 4384b6db7d..03123d9b8b 100644 --- a/packages/matchbox-keyboard/matchbox-keyboard-inputmethod_svn.bb +++ b/packages/matchbox-keyboard/matchbox-keyboard-inputmethod_svn.bb @@ -16,8 +16,8 @@ SRC_URI = "svn://svn.o-hand.com/repos/matchbox/trunk;module=matchbox-keyboard;pr file://6-Add-layout-switch-key-to-all-layouts.patch;patch=1 \ file://80matchboxkeyboard" -SRC_URI_append_fic-gta01 = " file://fic-gta01-font-size.patch;patch=1" -SRC_URI_append_fic-gta02 = " file://fic-gta01-font-size.patch;patch=1" +SRC_URI_append_om-gta01 = " file://fic-gta01-font-size.patch;patch=1" +SRC_URI_append_om-gta02 = " file://fic-gta01-font-size.patch;patch=1" S = "${WORKDIR}/matchbox-keyboard" diff --git a/packages/netbase/netbase/fic-gta01/.mtn2git_empty b/packages/netbase/netbase/om-gta01/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/netbase/netbase/fic-gta01/.mtn2git_empty +++ b/packages/netbase/netbase/om-gta01/.mtn2git_empty diff --git a/packages/netbase/netbase/fic-gta01/interfaces b/packages/netbase/netbase/om-gta01/interfaces index 39f45af734..39f45af734 100644 --- a/packages/netbase/netbase/fic-gta01/interfaces +++ b/packages/netbase/netbase/om-gta01/interfaces diff --git a/packages/netbase/netbase/fic-gta02/.mtn2git_empty b/packages/netbase/netbase/om-gta02/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/netbase/netbase/fic-gta02/.mtn2git_empty +++ b/packages/netbase/netbase/om-gta02/.mtn2git_empty diff --git a/packages/netbase/netbase/fic-gta02/interfaces b/packages/netbase/netbase/om-gta02/interfaces index 39f45af734..39f45af734 100644 --- a/packages/netbase/netbase/fic-gta02/interfaces +++ b/packages/netbase/netbase/om-gta02/interfaces diff --git a/packages/openmoko2/neod_svn.bb b/packages/openmoko2/neod_svn.bb index e627e60bd2..9dbe35c790 100644 --- a/packages/openmoko2/neod_svn.bb +++ b/packages/openmoko2/neod_svn.bb @@ -10,8 +10,8 @@ inherit openmoko2 gconf SRC_URI += "file://htc.patch;patch=1;maxrev=3348 \ file://ipaq.patch;patch=1;maxrev=3348" -EXTRA_OECONF_fic-gta01 = "--with-platform=neo1973" -EXTRA_OECONF_fic-gta02 = "--with-platform=neo1973" +EXTRA_OECONF_om-gta01 = "--with-platform=neo1973" +EXTRA_OECONF_om-gta02 = "--with-platform=neo1973" EXTRA_OECONF_a780 = "--with-platform=ezx" EXTRA_OECONF_a1200 = "--with-platform=ezx" EXTRA_OECONF_e680 = "--with-platform=ezx" diff --git a/packages/openmoko2/openmoko-dialer2/fic-gta01/.mtn2git_empty b/packages/openmoko2/openmoko-dialer2/om-gta01/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/openmoko2/openmoko-dialer2/fic-gta01/.mtn2git_empty +++ b/packages/openmoko2/openmoko-dialer2/om-gta01/.mtn2git_empty diff --git a/packages/openmoko2/openmoko-dialer2/fic-gta01/kernel-2.6.24.patch b/packages/openmoko2/openmoko-dialer2/om-gta01/kernel-2.6.24.patch index c6f34f4131..c6f34f4131 100644 --- a/packages/openmoko2/openmoko-dialer2/fic-gta01/kernel-2.6.24.patch +++ b/packages/openmoko2/openmoko-dialer2/om-gta01/kernel-2.6.24.patch diff --git a/packages/openmoko2/openmoko-dialer2/fic-gta02/.mtn2git_empty b/packages/openmoko2/openmoko-dialer2/om-gta02/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/openmoko2/openmoko-dialer2/fic-gta02/.mtn2git_empty +++ b/packages/openmoko2/openmoko-dialer2/om-gta02/.mtn2git_empty diff --git a/packages/openmoko2/openmoko-dialer2/fic-gta02/kernel-2.6.24.patch b/packages/openmoko2/openmoko-dialer2/om-gta02/kernel-2.6.24.patch index 72c516f5d6..72c516f5d6 100644 --- a/packages/openmoko2/openmoko-dialer2/fic-gta02/kernel-2.6.24.patch +++ b/packages/openmoko2/openmoko-dialer2/om-gta02/kernel-2.6.24.patch diff --git a/packages/openmoko2/openmoko-dialer2_svn.bb b/packages/openmoko2/openmoko-dialer2_svn.bb index 4f15ac07dc..7ef548bc15 100644 --- a/packages/openmoko2/openmoko-dialer2_svn.bb +++ b/packages/openmoko2/openmoko-dialer2_svn.bb @@ -7,8 +7,8 @@ PE = "1" inherit openmoko2 -SRC_URI_append_fic-gta01 = " file://kernel-2.6.24.patch;patch=1" -SRC_URI_append_fic-gta02 = " file://kernel-2.6.24.patch;patch=1" +SRC_URI_append_om-gta01 = " file://kernel-2.6.24.patch;patch=1" +SRC_URI_append_om-gta02 = " file://kernel-2.6.24.patch;patch=1" EXTRA_OECONF = "--with-dbusbindir=${STAGING_BINDIR_NATIVE}" diff --git a/packages/opkg/opkg.inc b/packages/opkg/opkg.inc index 6459ca78d8..40b9fffa3c 100644 --- a/packages/opkg/opkg.inc +++ b/packages/opkg/opkg.inc @@ -6,7 +6,7 @@ DEPENDS = "curl gpgme" PV = "0.0+svnr${SRCREV}" SRC_URI = "svn://svn.openmoko.org/trunk/src/target/;module=opkg;proto=http \ - file://fix_endianness.patch;patch=1" + file://fix_endianness.patch;patch=1;maxrev=4246" S = "${WORKDIR}/opkg" inherit autotools pkgconfig diff --git a/packages/pointercal/files/fic-gta01/.mtn2git_empty b/packages/pointercal/files/om-gta01/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/pointercal/files/fic-gta01/.mtn2git_empty +++ b/packages/pointercal/files/om-gta01/.mtn2git_empty diff --git a/packages/pointercal/files/fic-gta01/pointercal b/packages/pointercal/files/om-gta01/pointercal index 198fd2a776..198fd2a776 100644 --- a/packages/pointercal/files/fic-gta01/pointercal +++ b/packages/pointercal/files/om-gta01/pointercal diff --git a/packages/pointercal/files/fic-gta02/.mtn2git_empty b/packages/pointercal/files/om-gta02/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/pointercal/files/fic-gta02/.mtn2git_empty +++ b/packages/pointercal/files/om-gta02/.mtn2git_empty diff --git a/packages/pointercal/files/fic-gta02/pointercal b/packages/pointercal/files/om-gta02/pointercal Binary files differindex 841ec7fab2..841ec7fab2 100644 --- a/packages/pointercal/files/fic-gta02/pointercal +++ b/packages/pointercal/files/om-gta02/pointercal diff --git a/packages/popt/popt-1.13/iconv.patch b/packages/popt/popt-1.13/iconv.patch index 83c70b0560..4faf4c4a1d 100644 --- a/packages/popt/popt-1.13/iconv.patch +++ b/packages/popt/popt-1.13/iconv.patch @@ -1,7 +1,7 @@ Index: popt-1.13/Makefile.am =================================================================== ---- popt-1.13.orig/Makefile.am 2008-03-25 21:51:12.000000000 +0100 -+++ popt-1.13/Makefile.am 2008-03-25 21:51:42.000000000 +0100 +--- popt-1.13.orig/Makefile.am 2007-11-14 20:42:27.000000000 +0000 ++++ popt-1.13/Makefile.am 2008-03-26 22:14:05.000000000 +0000 @@ -39,7 +39,7 @@ usrlib_LTLIBRARIES = libpopt.la @@ -11,3 +11,15 @@ Index: popt-1.13/Makefile.am if HAVE_LD_VERSION_SCRIPT libpopt_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libpopt.vers +Index: popt-1.13/configure.ac +=================================================================== +--- popt-1.13.orig/configure.ac 2007-11-14 20:42:27.000000000 +0000 ++++ popt-1.13/configure.ac 2008-03-26 22:20:16.000000000 +0000 +@@ -95,6 +95,7 @@ + AC_CHECK_FUNCS(getuid geteuid mtrace __secure_getenv setregid strerror iconv) + + AM_GNU_GETTEXT([external]) ++AM_ICONV_LINK + + popt_sysconfdir="${sysconfdir}" + eval "popt_sysconfdir=\"${popt_sysconfdir}\"" # expand contained ${prefix} diff --git a/packages/qte/qte-2.3.12/.mtn2git_empty b/packages/pump/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/qte/qte-2.3.12/.mtn2git_empty +++ b/packages/pump/.mtn2git_empty diff --git a/packages/scummvm/files/fic-gta01/.mtn2git_empty b/packages/pump/pump/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/scummvm/files/fic-gta01/.mtn2git_empty +++ b/packages/pump/pump/.mtn2git_empty diff --git a/packages/pump/pump/debian.patch b/packages/pump/pump/debian.patch new file mode 100644 index 0000000000..63001b88df --- /dev/null +++ b/packages/pump/pump/debian.patch @@ -0,0 +1,2141 @@ +--- pump-0.8.24.orig/dhcp.c ++++ pump-0.8.24/dhcp.c +@@ -31,9 +31,11 @@ + #include <netinet/in.h> + #include <netinet/ip.h> + #include <netinet/udp.h> ++#include <netpacket/packet.h> + #include <popt.h> + #include <resolv.h> + #include <signal.h> ++#include <stdint.h> + #include <stdio.h> + #include <stdlib.h> + #include <string.h> +@@ -82,9 +84,6 @@ + #define DHCP_OPTION_CLASS_IDENTIFIER 60 + #define DHCP_OPTION_CLIENT_IDENTIFIER 61 + +-#define BOOTP_CLIENT_PORT 68 +-#define BOOTP_SERVER_PORT 67 +- + #define BOOTP_OPCODE_REQUEST 1 + #define BOOTP_OPCODE_REPLY 2 + +@@ -126,6 +125,12 @@ + bp_int16 len; + }; + ++struct ippkt { ++ struct ip ip; ++ struct udphdr udp; ++ char payload[sizeof(struct bootpRequest)]; ++} __attribute__ ((packed)); ++ + static void parseReply(struct bootpRequest * breq, struct pumpNetIntf * intf); + static char * prepareRequest(struct bootpRequest * breq, + int sock, char * device, time_t startTime); +@@ -134,36 +139,24 @@ + static char * handleTransaction(int s, struct pumpOverrideInfo * override, + struct bootpRequest * breq, + struct bootpRequest * bresp, +- struct sockaddr_in * serverAddr, ++ struct sockaddr * serverAddr, ++ socklen_t serverAddrLen, + struct sockaddr_in * respondant, +- int useBootpPacket, ++ int useBootpPacket, int raw, + time_t startTime, int dhcpResponseType); + static int dhcpMessageType(struct bootpRequest * response); +-static int oldKernel(void); + static char * getInterfaceInfo(struct pumpNetIntf * intf, int s); + static char * perrorstr(char * msg); + static void addClientIdentifier(int flags, struct bootpRequest * req); + static void buildRequest(struct bootpRequest * req, int flags, int type, + char * reqHostname, char *class, int lease); + static void updateSecCount(struct bootpRequest * breq, time_t startTime); ++static void makeraw(struct ippkt *buf, const void *payload, size_t len); ++static uint32_t checksum(const void *, size_t, uint32_t); ++static uint32_t wrapsum(uint32_t); + + static const char vendCookie[] = { 99, 130, 83, 99, 255 }; + +-static int oldKernel(void) { +- struct utsname ubuf; +- int major1, major2; +- +- uname(&ubuf); +- if (!strcasecmp(ubuf.sysname, "linux")) { +- if (sscanf(ubuf.release, "%d.%d", &major1, &major2) != 2 || +- (major1 < 2) || (major1 == 2 && major2 == 0)) { +- return 1; +- } +- } +- +- return 0; +-} +- + static char * getInterfaceInfo(struct pumpNetIntf * intf, int s) { + struct ifreq req; + struct sockaddr_in * addrp; +@@ -177,6 +170,10 @@ + intf->broadcast = addrp->sin_addr; + intf->set = PUMP_INTFINFO_HAS_BROADCAST; + ++ if (ioctl(s, SIOCGIFINDEX, &req)) ++ return perrorstr("SIOCGIFINDEX"); ++ intf->ifindex = req.ifr_ifindex; ++ + return NULL; + } + +@@ -205,15 +202,18 @@ + } + + +-char * pumpDisableInterface(char * device) { ++char * pumpDisableInterface(struct pumpNetIntf * intf) { + struct ifreq req; + int s; + ++ if (intf->flags & PUMP_FLAG_NOSETUP) ++ return NULL; ++ + s = socket(AF_INET, SOCK_DGRAM, 0); + + memset(&req,0,sizeof(req)); + +- strcpy(req.ifr_name, device); ++ strcpy(req.ifr_name, intf->device); + if (ioctl(s, SIOCGIFFLAGS, &req)) { + close(s); + return perrorstr("SIOCGIFFLAGS"); +@@ -235,6 +235,12 @@ + struct ifreq req; + struct rtentry route; + int s; ++ char * rc; ++ ++ if (intf->flags & PUMP_FLAG_NOSETUP) ++ return NULL; ++ ++ if ((rc = pumpDisableInterface(intf))) return rc; + + s = socket(AF_INET, SOCK_DGRAM, 0); + +@@ -246,34 +252,46 @@ + strcpy(req.ifr_name, intf->device); + + addrp->sin_addr = intf->ip; +- if (ioctl(s, SIOCSIFADDR, &req)) +- return perrorstr("SIOCSIFADDR"); ++ if (ioctl(s, SIOCSIFADDR, &req)) { ++ rc = perrorstr("SIOCSIFADDR"); ++ goto out; ++ } + + addrp->sin_addr = intf->netmask; +- if (ioctl(s, SIOCSIFNETMASK, &req)) +- return perrorstr("SIOCSIFNETMASK"); ++ if (ioctl(s, SIOCSIFNETMASK, &req)) { ++ rc = perrorstr("SIOCSIFNETMASK"); ++ goto out; ++ } + + addrp->sin_addr = intf->broadcast; +- if (ioctl(s, SIOCSIFBRDADDR, &req)) +- return perrorstr("SIOCSIFBRDADDR"); ++ if (ioctl(s, SIOCSIFBRDADDR, &req)) { ++ rc = perrorstr("SIOCSIFBRDADDR"); ++ goto out; ++ } + + if (intf->set & PUMP_INTFINFO_HAS_MTU) { +- req.ifr_mtu = intf->mtu; +- if (ioctl(s, SIOCSIFMTU, &req)) +- return perrorstr("SIOCSIFMTU"); ++ req.ifr_mtu = intf->mtu; ++ if (ioctl(s, SIOCSIFMTU, &req)) { ++ rc = perrorstr("SIOCSIFMTU"); ++ goto out; ++ } + } + + /* Bring up the device, and specifically allow broadcasts through it. + Don't mess with flags we don't understand though. */ +- if (ioctl(s, SIOCGIFFLAGS, &req)) +- return perrorstr("SIOCGIFFLAGS"); ++ if (ioctl(s, SIOCGIFFLAGS, &req)) { ++ rc = perrorstr("SIOCGIFFLAGS"); ++ goto out; ++ } + + req.ifr_flags |= IFF_UP | IFF_RUNNING | IFF_BROADCAST; + +- if (ioctl(s, SIOCSIFFLAGS, &req)) +- return perrorstr("SIOCSIFFLAGS"); ++ if (ioctl(s, SIOCSIFFLAGS, &req)) { ++ rc = perrorstr("SIOCSIFFLAGS"); ++ goto out; ++ } + +- if (!strcmp(intf->device, "lo") || oldKernel()) { ++ if (!strcmp(intf->device, "lo")) { + /* add a route for this network */ + route.rt_dev = intf->device; + route.rt_flags = RTF_UP; +@@ -288,11 +306,14 @@ + + if (ioctl(s, SIOCADDRT, &route)) { + /* the route cannot already exist, as we've taken the device down */ +- return perrorstr("SIOCADDRT 1"); ++ rc = perrorstr("SIOCADDRT 1"); ++ goto out; + } + } + +- return NULL; ++out: ++ close(s); ++ return rc; + } + + int pumpSetupDefaultGateway(struct in_addr * gw) { +@@ -317,23 +338,30 @@ + route.rt_dev = NULL; + + if (ioctl(s, SIOCADDRT, &route)) { ++ close(s); + syslog(LOG_ERR, "failed to set default route: %s", strerror(errno)); + return -1; + } + ++ close(s); + return 0; + } + + char * pumpPrepareInterface(struct pumpNetIntf * intf, int s) { + struct sockaddr_in * addrp; + struct ifreq req; +- struct rtentry route; + + memset(&req,0,sizeof(req)); ++ strcpy(req.ifr_name, intf->device); + +- addrp = (struct sockaddr_in *) &req.ifr_addr; ++ if (ioctl(s, SIOCGIFINDEX, &req)) ++ return perrorstr("SIOCGIFINDEX"); ++ intf->ifindex = req.ifr_ifindex; + +- strcpy(req.ifr_name, intf->device); ++ if (intf->flags & PUMP_FLAG_NOSETUP) ++ return NULL; ++ ++ addrp = (struct sockaddr_in *) &req.ifr_addr; + addrp->sin_family = AF_INET; + addrp->sin_port = 0; + memset(&addrp->sin_addr, 0, sizeof(addrp->sin_addr)); +@@ -344,48 +372,19 @@ + if (ioctl(s, SIOCSIFADDR, &req)) + return perrorstr("SIOCSIFADDR"); + +- if (oldKernel()) { +- if (ioctl(s, SIOCSIFNETMASK, &req)) +- return perrorstr("SIOCSIFNETMASK"); +- +- /* the broadcast address is 255.255.255.255 */ +- memset(&addrp->sin_addr, 255, sizeof(addrp->sin_addr)); +- if (ioctl(s, SIOCSIFBRDADDR, &req)) +- return perrorstr("SIOCSIFBRDADDR"); +- } +- + if (ioctl(s, SIOCGIFFLAGS, &req)) + return perrorstr("SIOCGIFFLAGS"); + req.ifr_flags |= IFF_UP | IFF_BROADCAST | IFF_RUNNING; + if (ioctl(s, SIOCSIFFLAGS, &req)) + return perrorstr("SIOCSIFFLAGS"); + +- memset(&route, 0, sizeof(route)); +- memcpy(&route.rt_gateway, addrp, sizeof(*addrp)); +- +- addrp->sin_family = AF_INET; +- addrp->sin_port = 0; +- addrp->sin_addr.s_addr = INADDR_ANY; +- memcpy(&route.rt_dst, addrp, sizeof(*addrp)); +- memcpy(&route.rt_genmask, addrp, sizeof(*addrp)); +- +- route.rt_dev = intf->device; +- route.rt_flags = RTF_UP; +- route.rt_metric = 0; +- +- if (ioctl(s, SIOCADDRT, &route)) { +- if (errno != EEXIST) { +- close(s); +- return perrorstr("SIOCADDRT 3"); +- } +- } +- + return NULL; + } + + static int dhcpMessageType(struct bootpRequest * response) { + unsigned char * chptr; + unsigned char option, length; ++ + + chptr = response->vendor; + +@@ -516,9 +515,17 @@ + break; + + case BOOTP_OPTION_GATEWAY: +- memcpy(&intf->gateway, chptr, 4); ++ intf->numGateways = 0; ++ for (i = 0; i < length; i += 4) { ++ if (intf->numGateways < MAX_GATEWAYS) { ++ memcpy(&intf->gateways[intf->numGateways++], chptr + i, ++ 4); ++ syslog(LOG_DEBUG, "intf: gateways[%i]: %s", ++ i/4, inet_ntoa (intf->gateways[i/4])); ++ } ++ } + intf->set |= PUMP_NETINFO_HAS_GATEWAY; +- syslog (LOG_DEBUG, "intf: gateway: %s", inet_ntoa (intf->gateway)); ++ syslog (LOG_DEBUG, "intf: numGateways: %i", intf->numGateways); + break; + + case BOOTP_OPTION_HOSTNAME: +@@ -692,6 +699,9 @@ + struct in_addr address; + unsigned char *vndptr; + unsigned char option, length; ++ ++ if (!verbose) ++ return; + + memset(&address,0,sizeof(address)); + +@@ -744,12 +754,12 @@ + sprintf (vendor, "%3u %3u", option, length); + for (i = 0; i < length; i++) + { +- if (strlen (vendor) > 22) ++ if (strlen (vendor) > sizeof(vendor2) - 6) + { + syslog (LOG_DEBUG, "%s: vendor: %s", name, vendor); + strcpy (vendor, "++++++"); + } +- snprintf (vendor2, 27, "%s 0x%02x", vendor, *vndptr++); ++ snprintf (vendor2, sizeof(vendor2), "%s 0x%02x", vendor, *vndptr++); + strcpy (vendor, vendor2); + + } +@@ -763,11 +773,12 @@ + } + + static char * handleTransaction(int s, struct pumpOverrideInfo * override, +- struct bootpRequest * breq, ++ struct bootpRequest * breq, + struct bootpRequest * bresp, +- struct sockaddr_in * serverAddr, ++ struct sockaddr * serverAddr, ++ socklen_t serverAddrLen, + struct sockaddr_in * respondant, +- int useBootpPacket, ++ const int useBootpPacket, const int raw, + time_t startTime, int dhcpResponseType) { + struct timeval tv; + fd_set readfs; +@@ -786,6 +797,9 @@ + struct udphdr * udpHdr = NULL; + struct psuedohUdpHeader pHdr; + time_t start = pumpUptime(); ++ struct ippkt buf; ++ void * pkt; ++ size_t pktlen, breqlen; + + memset(&pHdr,0,sizeof(pHdr)); + debugbootpRequest("breq", breq); +@@ -802,17 +816,26 @@ + return strerror(errno); + } + +- while (!gotit && tries) { +- i = sizeof(*breq); +- if (useBootpPacket) +- i -= (DHCP_VENDOR_LENGTH - BOOTP_VENDOR_LENGTH); ++ pkt = breq; ++ breqlen = sizeof(*breq); ++ if (useBootpPacket) ++ breqlen -= (DHCP_VENDOR_LENGTH - BOOTP_VENDOR_LENGTH); ++ pktlen = breqlen; ++ if (raw) { ++ pkt = &buf; ++ pktlen += sizeof(struct ip) + sizeof(struct udphdr); ++ } + ++ while (!gotit && tries) { + if (resend) { + if (startTime != -1) + updateSecCount(breq, startTime); + +- if (sendto(s, breq, i, 0, (struct sockaddr *) serverAddr, +- sizeof(*serverAddr)) != i) { ++ if (raw) ++ makeraw(&buf, breq, breqlen); ++ ++ if (sendto(s, pkt, pktlen, 0, (struct sockaddr *) serverAddr, ++ serverAddrLen) != pktlen) { + close(sin); + return perrorstr("sendto"); + } +@@ -890,9 +913,9 @@ + continue; + */ + +- if (ntohs(udpHdr->source) != BOOTP_SERVER_PORT) ++ if (udpHdr->source != bootp_server_port) + continue; +- if (ntohs(udpHdr->dest) != BOOTP_CLIENT_PORT) ++ if (udpHdr->dest != bootp_client_port) + continue; + /* Go on with this packet; it looks sane */ + +@@ -1022,12 +1045,12 @@ + } + + if (setsockopt(s, SOL_SOCKET, SO_BINDTODEVICE, device, strlen(device)+1)) { +- syslog(LOG_ERR, "SO_BINDTODEVICE %s (%zd) failed: %s", device, strlen(device), strerror(errno)); ++ syslog(LOG_ERR, "SO_BINDTODEVICE %s (%zu) failed: %s", device, strlen(device), strerror(errno)); + } + + memset(&clientAddr.sin_addr, 0, sizeof(&clientAddr.sin_addr)); + clientAddr.sin_family = AF_INET; +- clientAddr.sin_port = htons(BOOTP_CLIENT_PORT); /* bootp client */ ++ clientAddr.sin_port = bootp_client_port; /* bootp client */ + + if (bind(s, (struct sockaddr *) &clientAddr, sizeof(clientAddr))) { + close(s); +@@ -1046,7 +1069,7 @@ + char hostname[1024]; + + if (!(intf->set & PUMP_INTFINFO_HAS_LEASE)) { +- pumpDisableInterface(intf->device); ++ pumpDisableInterface(intf); + syslog(LOG_INFO, "disabling interface %s", intf->device); + + return 0; +@@ -1057,7 +1080,7 @@ + if ((chptr = prepareRequest(&breq, s, intf->device, pumpUptime()))) { + close(s); + while (1) { +- pumpDisableInterface(intf->device); ++ pumpDisableInterface(intf); + return 0; + } + } +@@ -1072,6 +1095,7 @@ + strlen(intf->hostname) + 1, intf->hostname); + } else { + gethostname(hostname, sizeof(hostname)); ++ hostname[sizeof(hostname) - 1] = 0; + if (strcmp(hostname, "localhost") && + strcmp(hostname, "localhost.localdomain")) { + addVendorCode(&breq, BOOTP_OPTION_HOSTNAME, +@@ -1080,13 +1104,13 @@ + } + + serverAddr.sin_family = AF_INET; +- serverAddr.sin_port = htons(BOOTP_SERVER_PORT); /* bootp server */ ++ serverAddr.sin_port = bootp_server_port; /* bootp server */ + serverAddr.sin_addr = intf->bootServer; + +- handleTransaction(s, NULL, &breq, &bresp, &serverAddr, NULL, 0, +- -1, NORESPONSE); ++ handleTransaction(s, NULL, &breq, &bresp, (struct sockaddr *) &serverAddr, ++ sizeof(serverAddr), NULL, 0, 0, -1, NORESPONSE); + +- pumpDisableInterface(intf->device); ++ pumpDisableInterface(intf); + close(s); + + if (intf->set & PUMP_NETINFO_HAS_HOSTNAME) +@@ -1116,7 +1140,7 @@ + + if ((chptr = prepareRequest(&breq, s, intf->device, pumpUptime()))) { + close(s); +- while (1); /* problem */ ++ return 1; + } + + messageType = DHCP_TYPE_REQUEST; +@@ -1132,6 +1156,7 @@ + intf->hostname); + } else { + gethostname(hostname, sizeof(hostname)); ++ hostname[sizeof(hostname) - 1] = 0; + if (strcmp(hostname, "localhost") && + strcmp(hostname, "localhost.localdomain")) { + addVendorCode(&breq, BOOTP_OPTION_HOSTNAME, +@@ -1143,11 +1168,12 @@ + addVendorCode(&breq, DHCP_OPTION_LEASE, 4, &i); + + serverAddr.sin_family = AF_INET; +- serverAddr.sin_port = htons(BOOTP_SERVER_PORT); /* bootp server */ ++ serverAddr.sin_port = bootp_server_port; /* bootp server */ + serverAddr.sin_addr = intf->bootServer; + +- if (handleTransaction(s, NULL, &breq, &bresp, &serverAddr, NULL, 0, +- startTime, DHCP_TYPE_ACK)) { ++ if (handleTransaction(s, NULL, &breq, &bresp, ++ (struct sockaddr *) &serverAddr, sizeof(serverAddr), ++ NULL, 0, 0, startTime, DHCP_TYPE_ACK)) { + close(s); + return 1; + } +@@ -1232,6 +1258,7 @@ + if (!reqHostname) { + reqHostname = alloca(200); + gethostname(reqHostname, 200); ++ reqHostname[199] = 0; + if (!strcmp(reqHostname, "localhost") || + !strcmp(reqHostname, "localhost.localdomain")) + reqHostname = NULL; +@@ -1254,15 +1281,13 @@ + struct pumpOverrideInfo * override) { + int s; + struct sockaddr_in serverAddr; +- struct sockaddr_in clientAddr; +- struct sockaddr_in broadcastAddr; ++ struct sockaddr_ll broadcastAddr; + struct bootpRequest breq, bresp; + char * chptr; + time_t startTime = pumpUptime(); +- int true = 1; +- int ttl = 16; + char * saveDeviceName; + unsigned char messageType; ++ struct pumpOverrideInfo saveOverride; + + /* If device is the same as intf->device, don't let the memset() + blow away the device name */ +@@ -1270,25 +1295,25 @@ + strcpy(saveDeviceName, device); + device = saveDeviceName; + ++ memcpy(&saveOverride, override, sizeof(*override)); ++ override = &saveOverride; ++ + memset(intf, 0, sizeof(*intf)); + strcpy(intf->device, device); + intf->reqLease = reqLease; + intf->set |= PUMP_INTFINFO_HAS_REQLEASE; ++ memcpy(&intf->override, override, sizeof(*override)); + +- s = socket(AF_INET, SOCK_DGRAM, 0); ++ /* Save these for later */ ++ intf->flags = flags & PUMP_FLAG_WINCLIENTID; ++ if (override && (override->flags & OVERRIDE_FLAG_NOSETUP)) ++ intf->flags |= PUMP_FLAG_NOSETUP; ++ ++ s = socket(AF_PACKET, SOCK_DGRAM, ntohs(ETH_P_IP)); + if (s < 0) { + return perrorstr("socket"); + } + +- if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, &true, sizeof(true))) { +- close(s); +- return perrorstr("setsockopt"); +- } +- if (setsockopt(s, SOL_IP, IP_TTL, &ttl, sizeof(ttl))) { +- close(s); +- return perrorstr("setsockopt"); +- } +- + if (flags & PUMP_FLAG_NOCONFIG) { + if ((chptr = getInterfaceInfo(intf, s))) { + close(s); +@@ -1301,7 +1326,7 @@ + + if ((chptr = prepareRequest(&breq, s, intf->device, startTime))) { + close(s); +- pumpDisableInterface(intf->device); ++ pumpDisableInterface(intf); + return chptr; + } + +@@ -1318,19 +1343,10 @@ + addVendorCode(&breq, DHCP_OPTION_CLASS_IDENTIFIER, + strlen(class) + 1, class); + } +- memset(&clientAddr.sin_addr, 0, sizeof(&clientAddr.sin_addr)); +- clientAddr.sin_family = AF_INET; +- clientAddr.sin_port = htons(BOOTP_CLIENT_PORT); /* bootp client */ +- +- if (bind(s, (struct sockaddr *) &clientAddr, sizeof(clientAddr))) { +- pumpDisableInterface(intf->device); +- close(s); +- return perrorstr("bind"); +- } + + memset(&serverAddr,0,sizeof(serverAddr)); + serverAddr.sin_family = AF_INET; +- serverAddr.sin_port = htons(BOOTP_SERVER_PORT); /* bootp server */ ++ serverAddr.sin_port = bootp_server_port; /* bootp server */ + + #if 0 + /* seems like a good idea?? */ +@@ -1339,27 +1355,21 @@ + #endif + + memset(&broadcastAddr,0,sizeof(broadcastAddr)); +- broadcastAddr.sin_family = AF_INET; +- broadcastAddr.sin_port = htons(BOOTP_SERVER_PORT); +- +-#if 0 +- /* this too! */ +- if (intf->set & PUMP_INTFINFO_HAS_BROADCAST) +- broadcastAddr.sin_addr = intf->broadcast; +-#endif +- +- memset(&broadcastAddr.sin_addr, 0xff, +- sizeof(broadcastAddr.sin_addr)); /* all 1's broadcast */ ++ memset(&broadcastAddr.sll_addr, ~0, ETH_ALEN); ++ broadcastAddr.sll_halen = ETH_ALEN; ++ broadcastAddr.sll_ifindex = intf->ifindex; ++ broadcastAddr.sll_protocol = htons(ETH_P_IP); + + syslog (LOG_DEBUG, "PUMP: sending discover\n"); + + if (override && (override->flags & OVERRIDE_FLAG_NOBOOTP)) + syslog (LOG_DEBUG, "PUMP: Ignoring non-DHCP BOOTP responses\n"); + +- if ((chptr = handleTransaction(s, override, &breq, &bresp, &broadcastAddr, +- NULL, (override && (override->flags & OVERRIDE_FLAG_NOBOOTP))?0:1, startTime, DHCP_TYPE_OFFER))) { ++ if ((chptr = handleTransaction(s, override, &breq, &bresp, ++ (struct sockaddr *) &broadcastAddr, ++ sizeof(broadcastAddr), NULL, (override && (override->flags & OVERRIDE_FLAG_NOBOOTP))?0:1, 1, startTime, DHCP_TYPE_OFFER))) { + close(s); +- pumpDisableInterface(intf->device); ++ pumpDisableInterface(intf); + return chptr; + } + +@@ -1378,17 +1388,19 @@ + + /* Send another DHCP_DISCOVER with the proper option list */ + if ((chptr = handleTransaction(s, override, &breq, &bresp, +- &broadcastAddr, NULL, 0, ++ (struct sockaddr *) &broadcastAddr, ++ sizeof(broadcastAddr), ++ NULL, 0, 1, + startTime, DHCP_TYPE_OFFER))) { + close(s); +- pumpDisableInterface(intf->device); ++ pumpDisableInterface(intf); + return chptr; + } + + + if (dhcpMessageType(&bresp) != DHCP_TYPE_OFFER) { + close(s); +- pumpDisableInterface(intf->device); ++ pumpDisableInterface(intf); + return "dhcp offer expected"; + } + +@@ -1396,7 +1408,7 @@ + + if (getVendorCode(&bresp, DHCP_OPTION_SERVER, &serverAddr.sin_addr, sizeof(struct in_addr))) { + syslog (LOG_DEBUG, "DHCPOFFER didn't include server address"); +- intf->bootServer = broadcastAddr.sin_addr; ++ intf->bootServer.s_addr = INADDR_BROADCAST; + } + + initVendorCodes(&breq); +@@ -1409,10 +1421,12 @@ + /* why do we need to use the broadcast address here? better reread the + spec! */ + if ((chptr = handleTransaction(s, override, &breq, &bresp, +- &broadcastAddr, NULL, 0, ++ (struct sockaddr *) &broadcastAddr, ++ sizeof(broadcastAddr), ++ NULL, 0, 1, + startTime, DHCP_TYPE_ACK))) { + close(s); +- pumpDisableInterface(intf->device); ++ pumpDisableInterface(intf); + return chptr; + } + +@@ -1422,7 +1436,7 @@ + + if (getVendorCode(&bresp, DHCP_OPTION_SERVER, &intf->bootServer, sizeof(struct in_addr))) { + syslog (LOG_DEBUG, "DHCPACK didn't include server address"); +- intf->bootServer = broadcastAddr.sin_addr; ++ intf->bootServer.s_addr = INADDR_BROADCAST; + } + + intf->set |= PUMP_INTFINFO_HAS_BOOTSERVER; +@@ -1434,9 +1448,6 @@ + if (flags & PUMP_FLAG_FORCEHNLOOKUP) + intf->set &= ~(PUMP_NETINFO_HAS_DOMAIN | PUMP_NETINFO_HAS_HOSTNAME); + +- /* Save these for later */ +- intf->flags = flags & PUMP_FLAG_WINCLIENTID; +- + return NULL; + } + +@@ -1448,10 +1459,9 @@ + } + + void pumpInitOverride(struct pumpOverrideInfo * override) { +- strcpy(override->intf.device, "MASTER"); ++ strcpy(override->device, "MASTER"); + override->timeout = DEFAULT_TIMEOUT; + override->numRetries = DEFAULT_NUM_RETRIES; +- override->script = NULL; + } + + /* +@@ -1487,3 +1497,68 @@ + return (time_t)secs; + } + ++static void makeraw(struct ippkt *buf, const void *payload, size_t len) { ++ size_t total = sizeof(struct ip) + sizeof(struct udphdr) + len; ++ ++ buf->ip.ip_v = 4; ++ buf->ip.ip_hl = 5; ++ buf->ip.ip_tos = IPTOS_LOWDELAY; ++ buf->ip.ip_len = htons(total); ++ buf->ip.ip_id = 0; ++ buf->ip.ip_off = 0; ++ buf->ip.ip_ttl = 16; ++ buf->ip.ip_p = IPPROTO_UDP; ++ buf->ip.ip_sum = 0; ++ buf->ip.ip_src.s_addr = INADDR_ANY; ++ buf->ip.ip_dst.s_addr = INADDR_BROADCAST; ++ ++ buf->ip.ip_sum = wrapsum(checksum(&buf->ip, sizeof(buf->ip), 0)); ++ ++ buf->udp.source = bootp_client_port; ++ buf->udp.dest = bootp_server_port; ++ buf->udp.len = htons(sizeof(struct udphdr) + len); ++ buf->udp.check = 0; ++ ++ buf->udp.check = ++ wrapsum( ++ checksum( ++ &buf->udp, sizeof(buf->udp), ++ checksum( ++ payload, len, ++ checksum( ++ &buf->ip.ip_src, ++ 2 * sizeof(buf->ip.ip_src), ++ IPPROTO_UDP + ++ (uint32_t) ++ ntohs(buf->udp.len) ++ ) ++ ) ++ ) ++ ); ++ ++ memcpy(buf->payload, payload, len); ++} ++ ++uint32_t checksum(const void *buf, size_t len, uint32_t sum) { ++ const char *p = buf; ++ size_t i; ++ ++ for (i = 0; i < (len & ~1); i += 2) { ++ sum += ntohs(*(uint16_t *)(p + i)); ++ if (sum > 0xffff) ++ sum -= 0xffff; ++ } ++ ++ if (i < len) { ++ sum += p[i] << 8; ++ if (sum > 0xffff) ++ sum -= 0xffff; ++ } ++ ++ return sum; ++} ++ ++uint32_t wrapsum(uint32_t sum) { ++ sum = ~sum & 0xffff; ++ return htons(sum); ++} +--- pump-0.8.24.orig/config.c ++++ pump-0.8.24/config.c +@@ -101,8 +101,9 @@ + } + + *nextO = *override; +- strcpy(nextO->intf.device, rest); +- nextO->script = override->script ? strdup(override->script) : NULL; ++ strcpy(nextO->device, rest); ++ if (override->script[0]) ++ strcpy(nextO->script, override->script); + + (*lineNum)++; + if (readStanza(&next, overrideList, nextO, lineNum)) return 1; +@@ -155,6 +156,8 @@ + + override->numRetries = num; + } else if (!strcmp(start, "domainsearch")) { ++ size_t len; ++ + if (overrideList != override) { + parseError(*lineNum, "domainsearch directive may not occur " + "inside of device specification"); +@@ -169,12 +172,18 @@ + return 1; + } + ++ len = strlen(argv[0]); ++ if (len >= sizeof(override->searchPath)) { ++ parseError(*lineNum, "domainsearch directive is too long"); ++ return 1; ++ } ++ + /* + We don't free this as other configurations may have inherited + it. This could be the wrong decision, but leak would be tiny + so why worry? + */ +- override->searchPath = strdup(argv[0]); ++ memcpy(override->searchPath, argv[0], len + 1); + free(argv); + } else if (!strcmp(start, "nodns")) { + if (*rest) { +@@ -200,7 +209,25 @@ + return 1; + } + override->flags |= OVERRIDE_FLAG_NONISDOMAIN; ++ } else if (!strcmp(start, "nosetup")) { ++ if (*rest) { ++ parseError(*lineNum, "unexpected argument to nosetup directive"); ++ return 1; ++ } ++ override->flags |= ++ OVERRIDE_FLAG_NOSETUP | ++ OVERRIDE_FLAG_NODNS | ++ OVERRIDE_FLAG_NOGATEWAY | ++ OVERRIDE_FLAG_NONISDOMAIN; ++ } else if (!strcmp(start, "noresolvconf")) { ++ if (*rest) { ++ parseError(*lineNum, "unexpected argument to noresolvconf directive"); ++ return 1; ++ } ++ override->flags |= OVERRIDE_FLAG_NORESOLVCONF; + } else if (!strcmp(start, "script")) { ++ size_t len; ++ + if (overrideList != override) { + parseError(*lineNum, "script directive may not occur " + "inside of device specification"); +@@ -214,7 +241,14 @@ + "single argument"); + return 1; + } +- override->script = strdup(argv[0]); ++ ++ len = strlen(argv[0]); ++ if (len >= sizeof(override->script)) { ++ parseError(*lineNum, "script directive is too long"); ++ return 1; ++ } ++ ++ memcpy(override->script, argv[0], len + 1); + free(argv); + } else { + char * error; +@@ -245,7 +279,6 @@ + if ((fd = open(configFile, O_RDONLY)) < 0) { + *overrides = calloc(sizeof(**overrides), 2); + pumpInitOverride(*overrides); +- close(fd); + return 0; + } + +--- pump-0.8.24.orig/Makefile ++++ pump-0.8.24/Makefile +@@ -6,7 +6,7 @@ + USRLIBPATH = $(libdir) + INCPATH = $(includedir) + MAN8PATH = $(mandir)/man8 +-CFLAGS = -fPIC -I. -Wall -Werror -g $(RPM_OPT_FLAGS) -D__STANDALONE__ -DVERSION=\"$(VERSION)\" ++CFLAGS = $(DEB_CFLAGS) -I. -Wall -Werror -g $(RPM_OPT_FLAGS) -D__STANDALONE__ -DVERSION=\"$(VERSION)\" -D_GNU_SOURCE + CVSROOT = $(shell cat CVS/Root 2>/dev/null) + + ARCH := $(patsubst i%86,i386,$(shell uname -m)) +--- pump-0.8.24.orig/pump.8 ++++ pump-0.8.24/pump.8 +@@ -1,4 +1,5 @@ + .\" Copyright 1999 Red Hat Software, Inc. ++.\" August 2004: Updated by Thomas Hood <jdthood@yahoo.co.uk> + .\" + .\" This man page is free documentation; you can redistribute it and/or modify + .\" it under the terms of the GNU General Public License as published by +@@ -14,69 +15,120 @@ + .\" along with this man page; if not, write to the Free Software + .\" Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + .\" +-.TH PUMP 8 "December 07, 1999" "Linux" "Linux Administrator's Manual" ++.TH PUMP 8 "26 August 2004" "Linux" "Linux Administrator's Manual" + .SH NAME + pump \- configure network interface via BOOTP or DHCP protocol + .SH SYNOPSIS +-/sbin/pump [-krRsd?] [-c \fIARG\fP] [-h \fIhostname\fP] [-i \fIiface\fP] [-l \fIhours\fP] [--lookup-hostname] [--usage] ++.B pump ++.BR "" [ \-krRsd ] ++.BR "" [ \-c | \-\-config\-file ++.IR FILE ] ++.BR "" [ \-h | \-\-hostname ++.IR HOSTNAME ] ++.BR "" [ \-i | \-\-interface ++.IR IFACE ] ++.BR "" [ \-l | \-\-lease ++.IR HOURS ] ++.BR "" [ \-\-lookup\-hostname ] ++.BR "" [ \-\-no\-dns "] [" \-\-no\-gateway "] [" \-\-no\-setup "] [" \-\-no\-resolvconf ] ++.BR "" [ \-\-release "] [" \-\-renew "] [" \-\-script = ++.IR ISCRIPT ] ++.BR "" [ \-\-status ] ++.BR "" [ \-\-win\-client\-ident ] ++.P ++.B pump ++.BR "" [ \-? | \-\-help "] [" \-\-usage ] + .SH DESCRIPTION +-pump is a daemon that manages network interfaces that are +-controlled by either the DHCP or BOOTP protocol. +- +-While pump may be started manually, it is normally started +-automatically by the /sbin/ifup script for devices configured +-via BOOTP or DHCP. +- +-Once pump is managing an interface, you can run pump to query ++.B pump ++is a daemon that manages network interfaces that are controlled ++by either the DHCP or BOOTP protocol. ++ ++While ++.B pump ++may be started manually, it is normally started automatically by ++.BR ifup (8) ++for devices configured via BOOTP or DHCP. ++ ++If ++.B pump ++is managing an interface, you can run it again to query + the status of that interface. For example, + .br +-\f(CW/sbin/pump -i eth0 --status \fR ++ \f(CWpump \-i eth0 \-\-status\fR + .br + will print the current status of device eth0. +-.SH "COMMAND-LINE OPTIONS" ++.SH "COMMAND LINE OPTIONS" + .TS + lB lB lB + lfCW lfCW l. + switch long option description +-.TH +--c --config-file=ARG Configuration file to use instead of +- /etc/pump.conf +--h --hostname=hostname Hostname to request +--i --interface=iface Interface to configure (normally eth0) +--k --kill Kill daemon (and disable all interfaces) +--l --lease=hours Lease time to request (in hours) +- --lookup-hostname Always look up hostname and domain in DNS +--r --release Release interface +--R --renew Force immediate lease renewal +--s --status Display interface status +--d --no-dns Don't update resolv.conf +- --no-gateway Don't configurate a default route for this interface +- --win-client-id Specify a Windows-like client identifier +--? --help Show this help message +- --usage Display brief usage message ++\-? \-\-help Show this help message ++\-c \-\-config\-file=\fIFILE\fR Get configuration from \fIFILE\fR instead of /etc/pump.conf ++\-d \-\-no\-dns Don't update DNS resolver configuration ++\-h \-\-hostname=\fIHOSTNAME\fR Request \fIHOSTNAME\fR ++\-i \-\-interface=\fIIFACE\fR Manage \fIIFACE\fR rather than eth0 ++\-k \-\-kill Kill daemon (and disable all interfaces) ++\-l \-\-lease=\fIHOURS\fR Request least time of \fIHOURS\fR ++ \-\-lookup\-hostname Look up hostname in DNS ++\-R \-\-renew Renew lease immediately ++\-r \-\-release Release interface ++ \-\-no\-gateway Don't configurate a default route for this interface ++ \-\-no\-resolvconf Don't use the \fBresolvconf\fR program to update resolv.conf ++ \-\-no\-setup Don't set up anything ++ \-\-script=\fISCRIPT\fR Call \fISCRIPT\fR (or null string to disable) ++\-s \-\-status Display interface status ++ \-\-usage Display a brief usage message ++ \-\-win\-client\-ident Specify a Windows(tm)-like client identifier + .TE +-.SH LOGGING +-Pump logs a good deal of information to syslog, much of it at the DEBUG +-level. If you're having trouble, it's a good idea to turn up syslog's logging +-level. +- +-.SH CONFIG FILE +-Pump supports a simple configuration file which lets you tune its behavior. +-By default, it looks at \fI/etc/pump.conf\fR, though the \fB-c\fR option +-lets you override that. +- +-The configuration file is line oriented, and most line contains a +-directive followed by zero or more arguments. Arguments are handled +-similar to how shells handle command arguments, allowing the use of +-quotes and backslash escapes. Comments are allowed, and must begin with +-a # character, and spaces and tabs are ignored. +- +-Directives may be specified at two levels, global and specific. Global +-directives change pump's behavior for all of the devices which it manages, +-while specific directives change pump's behavior for a single device. ++.SH "OPTION NOTES" ++The ++.B \-\-lookup\-hostname ++option causes ++.B pump ++to ignore the host and domain names returned by the server ++and instead ++to look these up in DNS using the IP address of the interface. ++The name that is looked up is used in forming the ++.B search ++line in the resolv.conf file. ++Thus, if either the ++.B \-\-no\-dns ++or ++.B domainsearch ++option is used then ++.B \-\-lookup\-hostname ++has no effect. ++.P ++Note that ++.B pump ++itself never sets the computer's hostname. ++ ++.SH "CONFIGURATION FILE" ++You can tune the behavior of ++.B pump ++using a configuration file. ++By default ++.B pump ++reads \fI/etc/pump.conf\fR but you can change this using the ++\fB\-\-config\-file\fR option. ++ ++The configuration file is line-oriented. ++Most lines contain a directive followed by zero or more arguments. ++Arguments are handled similarly to how shells handle command arguments, ++allowing the use of quotes and backslash escapes. ++Comments are allowed, and must begin with a # character. ++Spaces and tabs are ignored. ++ ++Directives may be specified at two levels: global and specific. ++Global directives change ++.BR pump 's ++behavior for all of the devices that it manages ++whereas specific directives change ++.BR pump 's ++behavior for a single device. + Later directives always override earlier ones. + +-Here is an example /etc/pump.conf: ++Here is an example configuration file: + + .nf + .ta +3i +@@ -91,71 +143,108 @@ + .fi + + .pp +-This configuration file tells pump to use a specific DNS search path rather +-deriving one from the DHCP or BOOTP server response, to retry each request +-3 times (for a total of 4 tries), and not to change any DNS configuration ++This configuration file tells ++.B pump ++to use a specific DNS search path rather ++than deriving one from the DHCP or BOOTP server response, to retry each request ++3 times (for a total of 4 tries), and not to change the DNS configuration file + when it's configuring the eth1 device. + + Here is a complete list of directives: + + .TP +-\fBdevice\fR \fIdevice\fR +-Specify specific directives for the indicated device. This directive must ++\fBdevice\fR \fIDEVICE\fR ++Specify specific directives for \fIDEVICE\fR. This directive must + be followed by a {, and the list of specific directives must end with a } +-on its own line. These directives may not be nested. ++on its own line. ++These directives may not be nested. + + .TP +-\fBdomainsearch\fR \fIsearchpath\fR +-Rather then deriving the DNS search path (for /etc/resolv.conf), use the +-one which is given. As a machine only has a single DNS search path, this +-directive may only be used globally. ++\fBdomainsearch\fR \fISEARCHPATH\fR ++Use \fISEARCHPATH\fR as the DNS search path instead of the domain ++name returned by the server or the domain part of the fully ++qualified hostname. ++As a machine only has a single DNS search path, this directive may ++only be used globally. + + .TP + \fBnonisdomain\fR +-Don't set a new NIS domain. Normally \fBpump\fR sets the system's NIS domain +-if an NIS domain is specified by the dhcp server and the current NIS domain +-is empty or \fBlocaldomain\fR. ++Don't set the NIS domain. ++Normally \fBpump\fR sets the system's NIS domain ++if an NIS domain is specified by the DHCP server ++and the current NIS domain is empty or \fBlocaldomain\fR. + This directive may only be used within a \fBdevice\fR directive. + + .TP + \fBnodns\fR +-Don't create a new /etc/resolv.conf when this interface is configured. This +-directive may only be used within a \fBdevice\fR directive. ++Don't update /etc/resolv.conf when the interface is configured. ++This directive may only be used within a \fBdevice\fR directive. + + .TP + \fBnogateway\fR +-Ignore any default gateway suggested by the DHCP server for this device. This +-can be usefull on machines with multiple ethernet cards. ++Ignore any default gateway suggested by the DHCP server for this device. ++This can be useful on machines with multiple Ethernet cards. ++ ++.TP ++\fBnosetup\fR ++Don't set up anything on the local machine as a result of DHCP operations. ++This implies \fBnodns\fR, \fBnonisdomain\fR and \fBnogateway\fR. ++This option is useful, for example, ++if you want to perform setup in customised scripts. + + .TP +-\fBretries\fR \fIcount\fR +-Retry each phase of the DHCP process \fIcount\fR times. ++\fBnoresolvconf\fR ++Don't use the resolvconf program to update /etc/resolv.conf; ++instead, update /etc/resolv.conf directly. ++(This option is only relevant if ++.B \-\-nodns ++is not used.) + + .TP +-\fBtimeout\fR \fIcount\fR +-Don't let any one step of the DHCP process take more then \fIcount\fR seconds. ++\fBretries\fR \fICOUNT\fR ++Retry each phase of the DHCP process \fICOUNT\fR times. + + .TP +-\fBscript\fR \fIexecutable-filename\fR ++\fBtimeout\fR \fICOUNT\fR ++Don't let any one step of the DHCP process take more then \fICOUNT\fR seconds. ++ ++.TP ++\fBscript\fR \fIFILE\fR + + .TS + lB lB lB lB + lB lfCW lfCW lfCW. +-.TH + Condition arg1 arg2 arg3 + lease up eth0 1.2.3.4 + renewal renewal eth0 2.3.4.5 + release down eth0 + .TE + +-When events occur in negotiation with the server, calls the given +-executable or script. Scripts are called when a lease is granted, +-when a renewal is negotiated, and when the interface is brought +-down and the address released. The scripts are called with two +-or three arguments, depending on the condition, as documented in +-the table above. ++When events occur in negotiation with the server, call the executable \fIFILE\fR. ++Scripts are called when a lease is granted, when a renewal is negotiated, ++and when the interface is brought down and the address released. ++The script is called with two or three arguments, depending on the condition, ++as documented in the table above. ++ ++.SH LOGGING ++The program logs a good deal of information to syslog, ++much of it at the DEBUG level. ++If you're having trouble, it's a good idea to turn up syslog's logging level. + + .SH BUGS ++ ++At startup ++.B pump ++tries to detect whether another instance of itself is running. ++If the UNIX domain socket (normally \fI/var/run/pump.sock\fR) ++does not exist, ++.B pump ++tries to connect to tcp/127.0.0.1:68. ++If it is also unreacheable (possibly due to packet filtering), ++.B pump ++will issue a warning to stderr and assume that there is no ++instance of itself running. ++ + Probably limited to Ethernet, might work on PLIP, probably not + ARCnet and Token Ring. The configuration file should let you do more + things. +@@ -163,5 +252,5 @@ + Submit bug reports at the Bug Track link at + http://developer.redhat.com/ + .SH QUIBBLE +-A pump, like a boot[p], is something you wear on your foot. Some of us +-like the name (I know, hard to believe)! ++A pump, like a boot[p], is something you wear on your foot. ++Some of us like the name (I know, hard to believe)! +--- pump-0.8.24.orig/pump.c ++++ pump-0.8.24/pump.c +@@ -52,6 +52,12 @@ + #include "config.h" + #include "pump.h" + ++int verbose = 0; ++#if !UDEB ++int bootp_client_port; ++int bootp_server_port; ++#endif ++ + #define N_(foo) (foo) + + #define PROGNAME "pump" +@@ -69,6 +75,7 @@ + int flags; + int reqLease; /* in seconds */ + char reqHostname[200]; ++ struct pumpOverrideInfo override; + } start; + int result; /* 0 for success */ + struct { +@@ -90,8 +97,6 @@ + } u; + }; + +-static int openControlSocket(char * configFile, struct pumpOverrideInfo * override); +- + char * readSearchPath(void) { + int fd; + struct stat sb; +@@ -132,14 +137,15 @@ + return NULL; + } + +-static void createResolvConf(struct pumpNetIntf * intf, char * domain, +- int isSearchPath) { ++static void createResolvConf(struct pumpNetIntf * intf, struct pumpOverrideInfo * override, char * domain) { + FILE * f; + int i; + char * chptr; ++ int resolvconf; + + /* force a reread of /etc/resolv.conf if we need it again */ + res_close(); ++ endhostent(); + + if (!domain) { + domain = readSearchPath(); +@@ -148,63 +154,56 @@ + strcpy(chptr, domain); + free(domain); + domain = chptr; +- isSearchPath = 1; + } + } + +- f = fopen("/etc/resolv.conf", "w"); +- if (!f) { +- syslog(LOG_ERR, "cannot create /etc/resolv.conf: %s\n", +- strerror(errno)); +- return; ++ resolvconf = !(override->flags & OVERRIDE_FLAG_NORESOLVCONF); ++ if (resolvconf) { ++ struct stat buf; ++ ++ if (stat("/sbin/resolvconf", &buf) < 0) ++ resolvconf = 0; + } + +- if (domain && isSearchPath) { +- fprintf(f, "search %s\n", domain); +- } else if (domain && !strchr(domain, '.')) { +- fprintf(f, "search %s\n", domain); +- } else if (domain) { +- fprintf(f, "search"); +- chptr = domain; +- do { +- /* If there is a single . in the search path, write it out +- * only if the toplevel domain is com, edu, gov, mil, org, +- * net +- */ +- /* Don't do that! It breaks virtually all installations +- * in Europe. +- * Besides, what's wrong with some company assigning hostnames +- * in the ".internal" TLD? +- * What exactly was this supposed to accomplish? +- * Commented out --bero +- */ +-/* if (!strchr(strchr(chptr, '.') + 1, '.')) { +- char * tail = strchr(chptr, '.'); +- if (strcmp(tail, ".com") && strcmp(tail, ".edu") && +- strcmp(tail, ".gov") && strcmp(tail, ".mil") && +- strcmp(tail, ".net") && +- strcmp(tail, ".org") && strcmp(tail, ".int")) break; +- } */ +- +- fprintf(f, " %s", chptr); +- chptr = strchr(chptr, '.'); +- if (chptr) { +- chptr++; +- if (!strchr(chptr, '.')) +- chptr = NULL; +- } +- } while (chptr); ++ if (resolvconf) { ++ char *arg; + +- fprintf(f, "\n"); ++ f = NULL; ++ if (asprintf(&arg, "/sbin/resolvconf -a %s >/dev/null 2>&1", intf->device) >= 0) { ++ f = popen(arg, "w"); ++ free(arg); ++ } ++ if (!f) { ++ syslog(LOG_ERR, "error starting resolvconf: %s\n", strerror(errno)); ++ return; ++ } ++ } else { ++ f = fopen("/etc/resolv.conf", "w"); ++ if (!f) { ++ syslog(LOG_ERR, "error opening resolv.conf: %s\n", strerror(errno)); ++ return; ++ } + } + ++ ++ errno = 0; ++ ++ if (domain) ++ if(fprintf(f, "search %s\n", domain) < 0) ++ syslog(LOG_ERR, "failed to write resolver configuration data\n"); ++ + for (i = 0; i < intf->numDns; i++) +- fprintf(f, "nameserver %s\n", inet_ntoa(intf->dnsServers[i])); ++ if(fprintf(f, "nameserver %s\n", inet_ntoa(intf->dnsServers[i])) < 0) ++ syslog(LOG_ERR, "failed to write resolver configuration data\n"); + +- fclose(f); ++ if (resolvconf) { ++ if(pclose(f) != 0) /* errno not useful on pclose failure */ ++ syslog(LOG_ERR, "error running resolvconf\n"); ++ } else { ++ if(fclose(f) != 0) ++ syslog(LOG_ERR, "error closing resolv.conf: %s\n", strerror(errno)); ++ } + +- /* force a reread of /etc/resolv.conf */ +- endhostent(); + } + + void setupDomain(struct pumpNetIntf * intf, +@@ -248,8 +247,8 @@ + return; + } + +- if (override->searchPath) { +- createResolvConf(intf, override->searchPath, 1); ++ if (override->searchPath[0]) { ++ createResolvConf(intf, override, override->searchPath); + return; + } + +@@ -258,7 +257,7 @@ + if (intf->set & PUMP_NETINFO_HAS_HOSTNAME) { + hn = intf->hostname; + } else { +- createResolvConf(intf, NULL, 0); ++ createResolvConf(intf, override, NULL); + + he = gethostbyaddr((char *) &intf->ip, sizeof(intf->ip), + AF_INET); +@@ -278,11 +277,35 @@ + dn = intf->domain; + } + +- createResolvConf(intf, dn, 0); ++ createResolvConf(intf, override, dn); ++ } ++} ++ ++void unsetupDns(struct pumpNetIntf * intf, struct pumpOverrideInfo * override) { ++ struct stat buf; ++ char *arg; ++ ++ if (override->flags & OVERRIDE_FLAG_NODNS) ++ return; ++ if (override->flags & OVERRIDE_FLAG_NORESOLVCONF) ++ return; ++ if (stat("/sbin/resolvconf", &buf) < 0) ++ return; ++ if (asprintf(&arg, "/sbin/resolvconf -d %s", intf->device) < 0) { ++ syslog(LOG_ERR, "failed to release resolvconf: %s", strerror(errno)); ++ return; + } ++ ++ if (system(arg) != 0) ++ syslog(LOG_ERR, "resolvconf -d %s failed", intf->device); ++ free(arg); + } + + static void callIfupPost(struct pumpNetIntf* intf) { ++#ifdef debian ++ /* can/should we call a debian one? */ ++ return; ++#else + pid_t child; + char * argv[3]; + char arg[64]; +@@ -304,6 +327,7 @@ + } + + waitpid(child, NULL, 0); ++#endif + } + + static void callScript(char* script,int msg,struct pumpNetIntf* intf) { +@@ -312,13 +336,17 @@ + char ** nextArg; + char * class = NULL, * chptr; + +- if (!script) return; ++ if (!*script) return; + + argv[0] = script; + argv[2] = intf->device; + nextArg = argv + 3; + + switch (msg) { ++ default: ++#ifdef DEBUG ++ abort(); ++#endif + case PUMP_SCRIPT_NEWLEASE: + class = "up"; + chptr = inet_ntoa(intf->ip); +@@ -357,35 +385,58 @@ + waitpid(child, NULL, 0); + } + +-static void runDaemon(int sock, char * configFile, struct pumpOverrideInfo * overrides) { ++static void gotNewLease(struct pumpNetIntf *intf) { ++ struct pumpOverrideInfo *o = &intf->override; ++ ++ pumpSetupInterface(intf); ++ ++ syslog(LOG_INFO, "configured interface %s", intf->device); ++ ++ if (!(o->flags & OVERRIDE_FLAG_NOGATEWAY)) { ++ int i; ++ ++ for (i = intf->numGateways - 1; i >= 0; i--) ++ pumpSetupDefaultGateway(&intf->gateways[i]); ++ } ++ ++ setupDns(intf, o); ++ setupDomain(intf, o); ++ ++ callScript(o->script, PUMP_SCRIPT_NEWLEASE, intf); ++} ++ ++static void killLease(struct pumpNetIntf *intf) { ++ struct pumpOverrideInfo *o = &intf->override; ++ ++ unsetupDns(intf, o); ++ callScript(o->script, PUMP_SCRIPT_DOWN, intf); ++} ++ ++static void runDaemon(int sock, int sock_in) { + int conn; + struct sockaddr_un addr; + socklen_t addrLength = sizeof(struct sockaddr_un); + struct command cmd; + struct pumpNetIntf intf[20]; ++ const int maxIntf = sizeof(intf) / sizeof(intf[0]); + int numInterfaces = 0; + int i; + int closest; + struct timeval tv; + fd_set fds; +- struct pumpOverrideInfo emptyOverride, * o = NULL; +- +- if (!overrides) +- readPumpConfig(configFile, &overrides); +- +- if (!overrides) { +- overrides = &emptyOverride; +- overrides->intf.device[0] = '\0'; +- } + + while (1) { + FD_ZERO(&fds); + FD_SET(sock, &fds); ++ FD_SET(sock_in, &fds); + + tv.tv_sec = tv.tv_usec = 0; + closest = -1; + if (numInterfaces) { +- for (i = 0; i < numInterfaces; i++) ++ for (i = 0; i < numInterfaces; i++) { ++ if (!(intf[i].set & ++ (PUMP_INTFINFO_NEEDS_NEWLEASE | PUMP_INTFINFO_HAS_LEASE))) ++ continue; + /* if this interface has an expired lease due to + * renewal failures and it's time to try again to + * get a new lease, then try again +@@ -402,7 +453,7 @@ + intf[i].reqLease, + intf[i].set & PUMP_NETINFO_HAS_HOSTNAME + ? intf[i].hostname : NULL, +- intf + i, overrides)) { ++ intf + i, &intf[i].override)) { + + /* failed to get a new lease, so try + * again in 30 seconds +@@ -411,14 +462,12 @@ + + } else { + intf[i].set &= ~PUMP_INTFINFO_NEEDS_NEWLEASE; +- callScript(overrides->script, PUMP_SCRIPT_NEWLEASE, +- &intf[i]); ++ gotNewLease(intf + i); + } + } +- else if ((intf[i].set & PUMP_INTFINFO_HAS_LEASE) && +- (closest == -1 || +- (intf[closest].renewAt > intf[i].renewAt))) ++ if (closest == -1 || (intf[closest].renewAt > intf[i].renewAt)) + closest = i; ++ } + if (closest != -1) { + tv.tv_sec = intf[closest].renewAt - pumpUptime(); + if (tv.tv_sec <= 0) { +@@ -434,13 +483,6 @@ + */ + if ((intf[closest].renewAt = pumpUptime() + 30) > + intf[closest].leaseExpiration) { +- o = overrides; +- while (*o->intf.device && +- strcmp(o->intf.device,cmd.u.start.device)) +- o++; +- +- if (!*o->intf.device) o = overrides; +- + intf[closest].set &= ~PUMP_INTFINFO_HAS_LEASE; + intf[closest].set |= PUMP_INTFINFO_NEEDS_NEWLEASE; + +@@ -450,39 +492,23 @@ + intf[closest].reqLease, + intf[closest].set & PUMP_NETINFO_HAS_HOSTNAME + ? intf[closest].hostname : NULL, +- intf + closest, o)) { ++ intf + closest, &intf[closest].override)) { + +- /* failed to get a new lease, so try +- * again in 30 seconds +- */ +- intf[closest].renewAt = pumpUptime() + 30; +-#if 0 +- /* ifdef this out since we now try more than once to get +- * a new lease and don't, therefore, want to remove the interface +- */ +- +- if (numInterfaces == 1) { +- callScript(o->script, PUMP_SCRIPT_DOWN, +- &intf[closest]); +- syslog(LOG_INFO, +- "terminating as there are no " +- "more devices under management"); +- exit(0); +- } +- +- intf[i] = intf[numInterfaces - 1]; +- numInterfaces--; +-#endif ++ /* failed to get a new lease, so try ++ * again in 30 seconds ++ */ ++ intf[closest].renewAt = pumpUptime() + 30; ++ killLease(intf + closest); + } else { ++ killLease(intf + closest); + intf[closest].set &= + ~PUMP_INTFINFO_NEEDS_NEWLEASE; +- callScript(o->script, PUMP_SCRIPT_NEWLEASE, +- &intf[closest]); ++ gotNewLease(intf + closest); + } + } + } else { +- callScript(o->script, PUMP_SCRIPT_RENEWAL, +- &intf[closest]); ++ callScript(intf[closest].override.script, ++ PUMP_SCRIPT_RENEWAL, &intf[closest]); + callIfupPost(&intf[closest]); + } + +@@ -493,6 +519,48 @@ + + if (select(sock + 1, &fds, NULL, NULL, + closest != -1 ? &tv : NULL) > 0) { ++ if (!FD_ISSET(sock, &fds)) { ++ char c = 0; ++ struct sockaddr_in addr_in; ++ socklen_t len; ++ struct stat buf; ++ ++ if (!FD_ISSET(sock_in, &fds)) ++ continue; ++ ++ conn = accept(sock_in, (struct sockaddr *) &addr_in, &len); ++ ++ if (!stat(CONTROLSOCKET, &buf)) ++ goto out; ++ ++ close(sock); ++ ++ addr.sun_family = AF_UNIX; ++ strcpy(addr.sun_path, CONTROLSOCKET); ++ addrLength = sizeof(addr.sun_family) + strlen(addr.sun_path); ++ ++ if ((sock = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { ++ syslog(LOG_ERR, "failed to create socket: %s\n", ++ strerror(errno)); ++ exit(1); ++ } ++ ++ umask(077); ++ if (bind(sock, (struct sockaddr *) &addr, addrLength)) { ++ syslog(LOG_ERR, "bind to %s failed: %s\n", CONTROLSOCKET, ++ strerror(errno)); ++ exit(1); ++ } ++ umask(033); ++ ++ listen(sock, 5); ++ ++ write(conn, &c, 1); ++ ++out: ++ close(conn); ++ continue; ++ } + conn = accept(sock, (struct sockaddr *) &addr, &addrLength); + + if (read(conn, &cmd, sizeof(cmd)) != sizeof(cmd)) { +@@ -504,7 +572,7 @@ + case CMD_DIE: + for (i = 0; i < numInterfaces; i++) { + pumpDhcpRelease(intf + i); +- callScript(o->script, PUMP_SCRIPT_DOWN, &intf[i]); ++ killLease(intf + i); + } + + syslog(LOG_INFO, "terminating at root's request"); +@@ -515,35 +583,20 @@ + exit(0); + + case CMD_STARTIFACE: +- o = overrides; +- while (*o->intf.device && +- strcmp(o->intf.device, cmd.u.start.device)) { +- o++; ++ if (numInterfaces >= maxIntf) { ++ syslog(LOG_INFO, "too many interfaces"); ++ cmd.u.result = 1; ++ break; + } +- if (!*o->intf.device) o = overrides; + + if (pumpDhcpRun(cmd.u.start.device, + cmd.u.start.flags, cmd.u.start.reqLease, + cmd.u.start.reqHostname[0] ? + cmd.u.start.reqHostname : NULL, +- intf + numInterfaces, o)) { ++ intf + numInterfaces, &cmd.u.start.override)) { + cmd.u.result = 1; + } else { +- pumpSetupInterface(intf + numInterfaces); +- i = numInterfaces; +- +- syslog(LOG_INFO, "configured interface %s", intf[i].device); +- +- if ((intf[i].set & PUMP_NETINFO_HAS_GATEWAY) && +- !(o->flags & OVERRIDE_FLAG_NOGATEWAY)) +- pumpSetupDefaultGateway(&intf[i].gateway); +- +- setupDns(intf + i, o); +- setupDomain(intf + i, o); +- +- callScript(o->script, PUMP_SCRIPT_NEWLEASE, +- intf + numInterfaces); +- ++ gotNewLease(intf + numInterfaces); + cmd.u.result = 0; + numInterfaces++; + } +@@ -557,7 +610,8 @@ + else { + cmd.u.result = pumpDhcpRenew(intf + i); + if (!cmd.u.result) { +- callScript(o->script, PUMP_SCRIPT_RENEWAL, intf + i); ++ callScript(intf[i].override.script, ++ PUMP_SCRIPT_RENEWAL, intf + i); + callIfupPost(intf + i); + } + } +@@ -570,7 +624,7 @@ + cmd.u.result = RESULT_UNKNOWNIFACE; + else { + cmd.u.result = pumpDhcpRelease(intf + i); +- callScript(o->script, PUMP_SCRIPT_DOWN, intf + i); ++ killLease(intf + i); + if (numInterfaces == 1) { + int j; + cmd.type = CMD_RESULT; +@@ -633,12 +687,16 @@ + exit(0); + } + +-static int openControlSocket(char * configFile, struct pumpOverrideInfo * override) { ++static int openControlSocket(void) { + struct sockaddr_un addr; ++ struct sockaddr_in addr_in; + int sock; ++ int sock_in; + size_t addrLength; + pid_t child; + int status; ++ int error; ++ struct timeval timeout; + + if ((sock = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) + return -1; +@@ -650,13 +708,44 @@ + if (!connect(sock, (struct sockaddr *) &addr, addrLength)) + return sock; + +- if (errno != ENOENT && errno != ECONNREFUSED) { ++ error = errno; ++ if (error != ENOENT && error != ECONNREFUSED) { + fprintf(stderr, "failed to connect to %s: %s\n", CONTROLSOCKET, +- strerror(errno)); +- close(sock); +- return -1; ++ strerror(error)); ++ goto err; + } + ++ unlink(CONTROLSOCKET); ++ ++ if ((sock_in = socket(AF_INET, SOCK_STREAM, 0)) < 0) { ++ goto err; ++ } ++ ++ addr_in.sin_family = AF_INET; ++ addr_in.sin_addr.s_addr = htonl(INADDR_LOOPBACK); ++ addr_in.sin_port = bootp_client_port; ++ ++ timeout.tv_sec = 1; ++ timeout.tv_usec = 0; ++ setsockopt(sock_in, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)); ++ if (!connect(sock_in, (struct sockaddr *) &addr_in, sizeof(addr_in))) { ++ char c; ++ ++ read(sock_in, &c, 1); ++ close(sock_in); ++ goto again; ++ } ++ ++ error = errno; ++ close(sock_in); ++ if (error != ECONNREFUSED && error != ETIMEDOUT) { ++ fprintf(stderr, "failed to connect to localhost:bootpc: %s\n", ++ strerror(error)); ++ fprintf(stderr, "There might be another pump running!\n"); ++ } ++ ++ addr_in.sin_addr.s_addr = htonl(INADDR_ANY); ++ + if (!(child = fork())) { + close(sock); + +@@ -664,12 +753,28 @@ + close(1); + close(2); + +- if ((sock = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) { ++ openlog("pumpd", LOG_PID, LOG_DAEMON); ++ ++ if ((sock_in = socket(AF_INET, SOCK_STREAM, 0)) < 0) { ++ syslog(LOG_ERR, "failed to create IP socket: %s\n", ++ strerror(errno)); ++ exit(1); ++ } ++ ++ if (bind(sock_in, (struct sockaddr *) &addr_in, sizeof(addr_in))) { ++ syslog(LOG_ERR, "bind to bootpc/tcp failed: %s\n", ++ strerror(errno)); ++ exit(1); ++ } ++ ++ listen(sock_in, 5); ++ ++ if ((sock = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { + syslog(LOG_ERR, "failed to create socket: %s\n", strerror(errno)); + exit(1); + } + +- unlink(CONTROLSOCKET); ++ chdir("/"); + umask(077); + if (bind(sock, (struct sockaddr *) &addr, addrLength)) { + syslog(LOG_ERR, "bind to %s failed: %s\n", CONTROLSOCKET, +@@ -682,7 +787,8 @@ + + if (fork()) _exit(0); + +- openlog("pumpd", LOG_PID, LOG_DAEMON); ++ setsid(); ++ + { + time_t now,upt; + int updays,uphours,upmins,upsecs; +@@ -700,20 +806,25 @@ + } + } + +- runDaemon(sock, configFile, override); ++ runDaemon(sock, sock_in); + } + ++ close(sock_in); ++ + waitpid(child, &status, 0); + if (!WIFEXITED(status) || WEXITSTATUS(status)) + return -1; + ++again: + if (!connect(sock, (struct sockaddr *) &addr, addrLength)) + return sock; + +- fprintf(stderr, "failed to connect to %s: %s\n", CONTROLSOCKET, ++ fprintf(stderr, "failed to connect to localhost:bootpc: %s\n", + strerror(errno)); + +- return 0; ++err: ++ close(sock); ++ return -1; + } + + void printStatus(struct pumpNetIntf i, char * hostname, char * domain, +@@ -729,8 +840,13 @@ + printf("\tBoot server %s\n", inet_ntoa(i.bootServer)); + printf("\tNext server %s\n", inet_ntoa(i.nextServer)); + +- if (i.set & PUMP_NETINFO_HAS_GATEWAY) +- printf("\tGateway: %s\n", inet_ntoa(i.gateway)); ++ if (i.numGateways) { ++ printf("\tGateway: %s\n", inet_ntoa(i.gateways[0])); ++ printf("\tGateways:"); ++ for (j = 0; j < i.numGateways; j++) ++ printf(" %s", inet_ntoa(i.gateways[j])); ++ printf("\n"); ++ } + + if (i.set & PUMP_INTFINFO_HAS_BOOTFILE) + printf("\tBoot file: %s\n", bootFile); +@@ -802,7 +918,6 @@ + char * hostname = ""; + poptContext optCon; + int rc; +- int ret; + int test = 0; + int flags = 0; + int lease_hrs = 0; +@@ -811,8 +926,11 @@ + int winId = 0; + int release = 0, renew = 0, status = 0, lookupHostname = 0, nodns = 0; + int nogateway = 0, nobootp = 0; ++ int nosetup = 0; ++ int noresolvconf = 0; + struct command cmd, response; + char * configFile = "/etc/pump.conf"; ++ char * script = NULL; + struct pumpOverrideInfo * overrides; + int cont; + struct poptOption options[] = { +@@ -836,14 +954,22 @@ + N_("Release interface"), NULL }, + { "renew", 'R', POPT_ARG_NONE, &renew, 0, + N_("Force immediate lease renewal"), NULL }, ++ { "verbose", 'v', POPT_ARG_NONE, &verbose, 0, ++ N_("Log verbose debug info"), NULL }, + { "status", 's', POPT_ARG_NONE, &status, 0, + N_("Display interface status"), NULL }, + { "no-dns", 'd', POPT_ARG_NONE, &nodns, 0, + N_("Don't update resolv.conf"), NULL }, + { "no-gateway", '\0', POPT_ARG_NONE, &nogateway, 0, + N_("Don't set a gateway for this interface"), NULL }, ++ { "no-setup", '\0', POPT_ARG_NONE, &nosetup, 0, ++ N_("Don't set up anything"), NULL }, ++ { "no-resolvconf", '\0', POPT_ARG_NONE, &noresolvconf, 0, ++ N_("Don't set up resolvconf"), NULL }, + { "no-bootp", '\0', POPT_ARG_NONE, &nobootp, 0, + N_("Ignore non-DHCP BOOTP responses"), NULL }, ++ { "script", '\0', POPT_ARG_STRING, &script, 0, ++ N_("Script to use") }, + { "win-client-ident", '\0', POPT_ARG_NONE, &winId, 0, + N_("Set the client identifier to match Window's") }, + /*{ "test", 't', POPT_ARG_NONE, &test, 0, +@@ -852,6 +978,23 @@ + POPT_AUTOHELP + { NULL, '\0', 0, NULL, 0 } + }; ++#if !UDEB ++ struct servent *servent; ++ ++ servent = getservbyname("bootpc", "udp"); ++ if (!servent) { ++ perror("Cannot resolve bootpc/udp service"); ++ return 1; ++ } ++ bootp_client_port = servent->s_port; ++ ++ servent = getservbyname("bootps", "udp"); ++ if (!servent) { ++ perror("Cannot resolve bootps/udp service"); ++ return 1; ++ } ++ bootp_server_port = servent->s_port; ++#endif + + memset(&cmd, 0, sizeof(cmd)); + memset(&response, 0, sizeof(response)); +@@ -871,6 +1014,11 @@ + return 1; + } + ++ if (script && strlen(script) > sizeof(overrides->script)) { ++ fprintf(stderr, _("%s: --script argument is too long\n"), PROGNAME); ++ return 1; ++ } ++ + /* make sure the config file is parseable before going on any further */ + if (readPumpConfig(configFile, &overrides)) return 1; + +@@ -885,16 +1033,6 @@ + flags |= PUMP_FLAG_WINCLIENTID; + if (lookupHostname) + flags |= PUMP_FLAG_FORCEHNLOOKUP; +- if (nodns) +- overrides->flags |= OVERRIDE_FLAG_NODNS; +- if (nobootp) +- overrides->flags |= OVERRIDE_FLAG_NOBOOTP; +- if (nogateway) +- overrides->flags |= OVERRIDE_FLAG_NOGATEWAY; +- +- cont = openControlSocket(configFile, overrides); +- if (cont < 0) +- exit(1); + + if (killDaemon) { + cmd.type = CMD_DIE; +@@ -908,6 +1046,8 @@ + cmd.type = CMD_STOPIFACE; + strcpy(cmd.u.stop.device, device); + } else { ++ struct pumpOverrideInfo * o; ++ + cmd.type = CMD_STARTIFACE; + strcpy(cmd.u.start.device, device); + cmd.u.start.flags = flags; +@@ -916,19 +1056,47 @@ + else + cmd.u.start.reqLease = lease; + strcpy(cmd.u.start.reqHostname, hostname); ++ ++ o = overrides + 1; ++ while (*o->device && strcmp(o->device, device)) ++ o++; ++ if (!*o->device) ++ o = overrides; ++ ++ if (nodns) ++ o->flags |= OVERRIDE_FLAG_NODNS; ++ if (nobootp) ++ o->flags |= OVERRIDE_FLAG_NOBOOTP; ++ if (nogateway) ++ o->flags |= OVERRIDE_FLAG_NOGATEWAY; ++ if (nosetup) ++ o->flags |= ++ OVERRIDE_FLAG_NOSETUP | ++ OVERRIDE_FLAG_NODNS | ++ OVERRIDE_FLAG_NOGATEWAY | ++ OVERRIDE_FLAG_NONISDOMAIN; ++ if (noresolvconf) ++ o->flags |= OVERRIDE_FLAG_NORESOLVCONF; ++ if (script) ++ strcpy(o->script, script); ++ ++ memcpy(&cmd.u.start.override, o, sizeof(*o)); + } + +- ret = write(cont, &cmd, sizeof(cmd)); +- ret = read(cont, &response, sizeof(response)); ++ free(overrides); + +- if (response.type == CMD_RESULT && response.u.result && +- cmd.type == CMD_STARTIFACE) { +- cont = openControlSocket(configFile, overrides); +- if (cont < 0) +- exit(1); +- ret = write(cont, &cmd, sizeof(cmd)); +- ret = read(cont, &response, sizeof(response)); ++again: ++ cont = openControlSocket(); ++ if (cont < 0) ++ exit(1); ++ ++ if (write(cont, &cmd, sizeof(cmd)) < 0) { ++retry: ++ close(cont); ++ goto again; + } ++ if (read(cont, &response, sizeof(response)) <= 0) ++ goto retry; + + if (response.type == CMD_RESULT) { + if (response.u.result) { +--- pump-0.8.24.orig/pump.h ++++ pump-0.8.24/pump.h +@@ -6,6 +6,7 @@ + #include <arpa/inet.h> + #include <sys/time.h> + ++#define MAX_GATEWAYS 3 + #define MAX_DNS_SERVERS 3 + #define MAX_LOG_SERVERS 3 + #define MAX_LPR_SERVERS 3 +@@ -42,14 +43,32 @@ + #define PUMP_FLAG_NOCONFIG (1 << 1) + #define PUMP_FLAG_FORCEHNLOOKUP (1 << 2) + #define PUMP_FLAG_WINCLIENTID (1 << 3) ++#define PUMP_FLAG_NOSETUP (1 << 4) + + #define PUMP_SCRIPT_NEWLEASE 1 + #define PUMP_SCRIPT_RENEWAL 2 + #define PUMP_SCRIPT_DOWN 3 + ++#define OVERRIDE_FLAG_NODNS (1 << 0) ++#define OVERRIDE_FLAG_NONISDOMAIN (1 << 1) ++#define OVERRIDE_FLAG_NOGATEWAY (1 << 2) ++#define OVERRIDE_FLAG_NOBOOTP (1 << 3) ++#define OVERRIDE_FLAG_NOSETUP (1 << 4) ++#define OVERRIDE_FLAG_NORESOLVCONF (1 << 5) ++ ++struct pumpOverrideInfo { ++ char device[10]; ++ char searchPath[1024]; ++ int flags; ++ int numRetries; ++ int timeout; ++ char script[1024]; ++}; ++ + /* all of these in_addr things are in network byte order! */ + struct pumpNetIntf { + char device[10]; ++ int ifindex; + int set; + struct in_addr ip, netmask, broadcast, network; + struct in_addr bootServer, nextServer; +@@ -58,13 +77,14 @@ + int reqLease; /* in seconds */ + char * hostname, * domain; /* dynamically allocated */ + char * nisDomain; /* dynamically allocated */ +- struct in_addr gateway; ++ struct in_addr gateways[MAX_GATEWAYS]; + struct in_addr logServers[MAX_LOG_SERVERS]; + struct in_addr lprServers[MAX_LPR_SERVERS]; + struct in_addr ntpServers[MAX_NTP_SERVERS]; + struct in_addr xfntServers[MAX_XFS_SERVERS]; + struct in_addr xdmServers[MAX_XDM_SERVERS]; + struct in_addr dnsServers[MAX_DNS_SERVERS]; ++ int numGateways; + int numLog; + int numLpr; + int numNtp; +@@ -72,6 +92,7 @@ + int numXdm; + int numDns; + int flags; ++ struct pumpOverrideInfo override; + + /* these don't really belong here, but anaconda's about the only thing + * that uses pump and this stuff is needed for the loader on s390 */ +@@ -79,20 +100,6 @@ + struct in_addr ptpaddr; /* ptp address for ptp devs like ctc */ + }; + +-#define OVERRIDE_FLAG_NODNS (1 << 0) +-#define OVERRIDE_FLAG_NONISDOMAIN (1 << 1) +-#define OVERRIDE_FLAG_NOGATEWAY (1 << 2) +-#define OVERRIDE_FLAG_NOBOOTP (1 << 3) +- +-struct pumpOverrideInfo { +- struct pumpNetIntf intf; +- char * searchPath; +- int flags; +- int numRetries; +- int timeout; +- char * script; +-}; +- + void pumpInitOverride(struct pumpOverrideInfo * override); + char * pumpDhcpClassRun(char * device, int flags, int lease, + char * reqHostname, char * class, struct pumpNetIntf * intf, +@@ -103,7 +110,7 @@ + char * pumpSetupInterface(struct pumpNetIntf * intf); + /* setup an interface for sending a broadcast -- uses all 0's address */ + char * pumpPrepareInterface(struct pumpNetIntf * intf, int s); +-char * pumpDisableInterface(char * device); ++char * pumpDisableInterface(struct pumpNetIntf * intf); + int pumpDhcpRenew(struct pumpNetIntf * intf); + int pumpDhcpRelease(struct pumpNetIntf * intf); + int pumpSetupDefaultGateway(struct in_addr * gw); +@@ -113,5 +120,14 @@ + #define RESULT_FAILED 1 + #define RESULT_UNKNOWNIFACE 2 + ++extern int verbose; ++#if UDEB ++#define bootp_client_port htons(68) ++#define bootp_server_port htons(67) ++#else ++extern int bootp_client_port; ++extern int bootp_server_port; ++#endif ++ + + #endif diff --git a/packages/pump/pump_0.8.24.bb b/packages/pump/pump_0.8.24.bb new file mode 100644 index 0000000000..76fd27d32a --- /dev/null +++ b/packages/pump/pump_0.8.24.bb @@ -0,0 +1,19 @@ +DESCRIPTION = "BOOTP and DHCP client for automatic IP configuration" +SECTION = "console/network" +PRIORITY = "optional" +LICENSE = "GPL" +DEPENDS = "popt" + +S = "${WORKDIR}/pump-${PV}" + +SRC_URI = "http://ftp.de.debian.org/debian/pool/main/p/pump/pump_0.8.24.orig.tar.gz \ + file://debian.patch;patch=1" + +do_compile() { + oe_runmake pump +} + +do_install() { + install -d ${D}${base_sbindir} + install -m 0755 ${S}/pump ${D}${base_sbindir}/pump +} diff --git a/packages/qte/qte-2.3.12/bidimetrics.patch b/packages/qte/qte-2.3.12/bidimetrics.patch deleted file mode 100644 index ea4765c601..0000000000 --- a/packages/qte/qte-2.3.12/bidimetrics.patch +++ /dev/null @@ -1,2389 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - -Index: qt-2.3.10-snapshot-20060120/src/kernel/qgfxraster_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qgfxraster_qws.cpp 2006-01-20 20:50:26.577740040 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qgfxraster_qws.cpp 2006-01-20 21:09:56.399900040 +0100 -@@ -51,6 +51,11 @@ - #include <fcntl.h> - #include <errno.h> - -+//HAQ bidi patch -+#ifdef USE_BIDI -+#include "qbidi.h" -+#endif -+// end HAQ patch - - extern bool qws_sw_cursor; - -@@ -1408,6 +1413,53 @@ - setAlphaType(BigEndianMask); - } - -+#ifdef USE_BIDI -+ // HAQ do bidi -+ QString n; -+ qApplyBidi(s, n); -+ -+ for( loopc=0; loopc < int(n.length()); loopc++ ) { -+ QGlyph glyph = memorymanager->lockGlyph(myfont, n[loopc]); -+ int myw=glyph.metrics->width; -+ srcwidth = myw; -+ srcheight = glyph.metrics->height; -+ setAlphaSource(glyph.data,glyph.metrics->linestep); -+ int myx=x; -+ int myy=y; -+ myx+=glyph.metrics->bearingx; -+ myy-=glyph.metrics->bearingy; -+ -+ // HAQ hack to show arabic tashkeel (diacriticals) above -+ // the previous character (which in reversed arabic, as it is here, is the next character) -+ -+ QChar c = n[loopc]; -+ if (ISTASHKEEL(c.unicode())) { -+ //printf("glyph %d bearingx %d width %d advance %d\n", -+ // c.unicode(),glyph.metrics->bearingx, glyph.metrics->width, glyph.metrics->advance); -+ -+ if (loopc < int(n.length()-1)) // if there is a following character then place this glyph over it -+ { -+ QGlyph nextGlyph = memorymanager->lockGlyph(myfont, n[loopc+1]); -+ int nextCharWidth = nextGlyph.metrics->width; -+ myx += nextCharWidth/2 - glyph.metrics->width; -+ // pre-undo the advance in x so that the next glyph is placed over this one -+ x -= glyph.metrics->advance; -+ } -+ } -+ -+ if(glyph.metrics->width<1 || glyph.metrics->height<1 -+ || glyph.metrics->linestep==0) -+ { -+ // non-printing characters -+ } else { -+ blt(myx,myy,myw,glyph.metrics->height,0,0); -+ } -+ x+=glyph.metrics->advance; -+ // ... unlock glyph -+ } -+ -+#else -+ - for( loopc=0; loopc < int(s.length()); loopc++ ) { - QGlyph glyph = memorymanager->lockGlyph(myfont, s[loopc]); - int myw=glyph.metrics->width; -@@ -1428,6 +1480,9 @@ - x+=glyph.metrics->advance; - // ... unlock glyph - } -+ -+#endif -+ - #ifdef DEBUG_LOCKS - qDebug("unaccelerated drawText unlock"); - #endif -Index: qt-2.3.10-snapshot-20060120/src/kernel/qfont_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qfont_qws.cpp 2006-01-20 20:57:33.115896384 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qfont_qws.cpp 2006-01-20 21:09:56.400899888 +0100 -@@ -49,6 +49,12 @@ - #include "qfontmanager_qws.h" - #include "qmemorymanager_qws.h" - -+//HAQ -+#ifdef USE_BIDI -+#include "qbidi.h" -+#endif -+// end HAQ -+ - // QFont_Private accesses QFont protected functions - - class QFont_Private : public QFont -@@ -388,17 +394,46 @@ - - int QFontMetrics::width( QChar ch ) const - { -+#ifdef USE_BIDI -+ -+ int advance; -+ if (ISTASHKEEL(ch.unicode())) { -+ advance = 0; -+ } -+ else -+ advance = memorymanager->lockGlyphMetrics(((QFontMetrics*)this)->internal()->handle(),ch)->advance; -+ return advance; -+ -+#else -+ - return memorymanager->lockGlyphMetrics(((QFontMetrics*)this)->internal()->handle(),ch)->advance; -+ -+#endif - } - - int QFontMetrics::width( const QString &str, int len ) const - { -+#ifdef USE_BIDI -+ -+ QString n; -+ qApplyBidi(str, n); -+ if (len < 0) len = n.length(); -+ int ret=0; -+ for (int i=0; i<len; i++) -+ ret += width(n[i]); -+ return ret; -+ -+#else -+ - if ( len < 0 ) - len = str.length(); - int ret=0; - for (int i=0; i<len; i++) - ret += width(str[i]); - return ret; -+ -+#endif -+ - } - - QRect QFontMetrics::boundingRect( const QString &str, int len ) const -Index: qt-2.3.10-snapshot-20060120/src/kernel/qbidi.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qbidi.h 2006-01-20 21:09:56.400899888 +0100 -@@ -0,0 +1,6 @@ -+#include "stdio.h" -+#include <qstring.h> -+ -+#define ISTASHKEEL(x) ((x >= 0x64B && x<=0x658) || (x>=0x6d6 && x <= 0x6dc) || (x>=0x6df && x <= 0x6e4) || x==0x6e7 || x == 0x6e8 || (x>=0x6ea && x <= 0x6ed) || (x>=0xfe70 && x <= 0xfe7f)) -+ -+void qApplyBidi(const QString& s, QString& news); -Index: qt-2.3.10-snapshot-20060120/src/kernel/qbidi.cpp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qbidi.cpp 2006-01-20 21:09:56.401899736 +0100 -@@ -0,0 +1,45 @@ -+#include <malloc.h> -+#include "qbidi.h" -+ -+ -+#define BLOCKTYPE unsigned short* -+#define CHARTYPE unsigned short -+ -+extern "C" { -+ -+int doShape(BLOCKTYPE line, CHARTYPE* to, int from, int count); -+int doBidi(BLOCKTYPE line, int count, int applyShape, int reorderCombining, int removeMarks); -+ -+} -+ -+void qApplyBidi(const QString& s, QString& news) { -+ //convert to utf16 zero-terminated -+ //printf(": qs length is %d\n",s.length()); -+ int loopc; -+ int slength = sizeof(unsigned short) * (s.length()); -+ //printf(": slength is %d\n",slength); -+ unsigned short* sutf16 = (unsigned short*)malloc(slength); -+ for( loopc=0; loopc < int(s.length()); loopc++ ) { -+ sutf16[loopc] = s[loopc].unicode(); -+ //printf(": char %d is %x\n",loopc,sutf16[loopc]); -+ } -+ //printf(": mark 0\n"); -+ ///sutf16[s.length()] = 0; -+ -+ unsigned short* sutf16s = (unsigned short*)malloc(slength); -+ doShape(sutf16,sutf16s,0,s.length()); -+ //printf(": do bidi\n"); -+ doBidi(sutf16s, s.length(),0,0,0); -+ //sutf16s[s.length()] = 0; -+ -+ //printf(": back to QString\n"); -+ news = ""; -+ for( loopc=0; loopc < s.length(); loopc++ ) { -+ QChar newChar((short) sutf16s[loopc]); -+ news = news + newChar; -+ //printf(": add char %x\n",newChar.unicode()); -+ } -+ -+ free(sutf16); -+ free(sutf16s); -+} -Index: qt-2.3.10-snapshot-20060120/src/kernel/minibidi.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ qt-2.3.10-snapshot-20060120/src/kernel/minibidi.c 2006-01-20 21:09:56.403899432 +0100 -@@ -0,0 +1,2127 @@ -+/************************************************************************ -+ * $Id: minibidi.c,v 1.2 2005/04/08 18:01:45 lynch Exp $ -+ * -+ * ------------ -+ * Description: -+ * ------------ -+ * This is an implemention of Unicode's Bidirectional Algorithm -+ * (known as UAX #9). -+ * -+ * http://www.unicode.org/reports/tr9/ -+ * -+ * Author: Ahmad Khalifa -+ * -+ * ----------------- -+ * Revision Details: (Updated by Revision Control System) -+ * ----------------- -+ * $Date: 2005/04/08 18:01:45 $ -+ * $Author: lynch $ -+ * $Revision: 1.2 $ -+ * $Source: /home/arabeyes/cvs/projects/external/qt_e/minibidi.c,v $ -+ * -+ * (www.arabeyes.org - under MIT license) -+ * -+ ************************************************************************/ -+ -+#include <malloc.h> /* malloc() and free() definition */ -+ -+/* -+ * Datatype Extension Macros -+ */ -+#define BLOCKTYPE unsigned short* -+#define CHARTYPE unsigned short -+#define GETCHAR(from,i) from[i] -+ -+#define GetType(x) getType(x) -+/*=====TESTING mode===========*/ -+//#define GetType(x) getCAPRtl(x) -+ -+#define lenof(x) sizeof(x) / sizeof(x[0]) -+ -+/* character types */ -+enum -+{ -+ /* Strong Char Types */ -+ L, /* Left-to-Right char */ -+ LRE, /* Left-to-Right Embedding */ -+ LRO, /* Left-to-Right Override */ -+ R, /* Right-to-Left char */ -+ AL, /* Right-to-Left Arabic char */ -+ RLE, /* Right-to-Left Embedding */ -+ RLO, /* Right-to-Left Override */ -+ /* Weak Char Types */ -+ PDF, /* Pop Directional Format */ -+ EN, /* European Number */ -+ ES, /* European Number Separator */ -+ ET, /* European Number Terminator */ -+ AN, /* Arabic Number */ -+ CS, /* Common Number Separator */ -+ NSM, /* Non Spacing Mark */ -+ BN, /* Boundary Neutral */ -+ /* Neutral Char Types */ -+ B, /* Paragraph Separator */ -+ S, /* Segment Separator */ -+ WS, /* Whitespace */ -+ ON, /* Other Neutrals */ -+}; -+ -+/* Shaping Types */ -+enum -+{ -+ SL, /* Left-Joining, doesnt exist in U+0600 - U+06FF */ -+ SR, /* Right-Joining, ie has Isolated, Final */ -+ SD, /* Dual-Joining, ie has Isolated, Final, Initial, Medial */ -+ SU, /* Non-Joining */ -+ SC /* Join-Causing, like U+0640 (TATWEEL) */ -+}; -+ -+#define odd(x) (x%2) -+/* Returns the first odd/even value greater than x */ -+#define leastGreaterOdd(x) odd(x) ? (x+2) : (x+1) -+#define leastGreaterEven(x) odd(x) ? (x+1) : (x+2) -+ -+/* Shaping Helpers */ -+#define STYPE(xh) ((xh >= SHAPE_FIRST) && (xh <= SHAPE_LAST)) ? \ -+ shapetypes[xh-SHAPE_FIRST].type : SU -+#define SISOLATED(xh) shapetypes[xh-SHAPE_FIRST].form_b -+#define SFINAL(xh) xh+1 -+#define SINITIAL(xh) xh+2 -+#define SMEDIAL(xh) xh+3 -+ -+ -+/* function declarations */ -+int findIndexOfRun(unsigned char* level , int start, int count, int tlevel); -+unsigned char getType(CHARTYPE ch); -+unsigned char getCAPRtl(CHARTYPE ch); -+void doMirror(BLOCKTYPE ch); -+ -+typedef struct{ -+ unsigned char type; -+ unsigned short form_b; -+} shape_node; -+ -+/* Kept near the actual table, for verification. */ -+#define SHAPE_FIRST 0x621 -+#define SHAPE_LAST 0x668 -+/* very bad Memory alignment for 32-bit machines -+ * could split it to 2 arrays or promote type to 2 bytes type -+ */ -+shape_node shapetypes[] = { -+/* index, Typ, Iso */ -+/* 621 */ {SU, 0xFE80}, -+/* 622 */ {SR, 0xFE81}, -+/* 623 */ {SR, 0xFE83}, -+/* 624 */ {SR, 0xFE85}, -+/* 625 */ {SR, 0xFE87}, -+/* 626 */ {SD, 0xFE89}, -+/* 627 */ {SR, 0xFE8D}, -+/* 628 */ {SD, 0xFE8F}, -+/* 629 */ {SR, 0xFE93}, -+/* 62A */ {SD, 0xFE95}, -+/* 62B */ {SD, 0xFE99}, -+/* 62C */ {SD, 0xFE9D}, -+/* 62D */ {SD, 0xFEA1}, -+/* 62E */ {SD, 0xFEA5}, -+/* 62F */ {SR, 0xFEA9}, -+/* 630 */ {SR, 0xFEAB}, -+/* 631 */ {SR, 0xFEAD}, -+/* 632 */ {SR, 0xFEAF}, -+/* 633 */ {SD, 0xFEB1}, -+/* 634 */ {SD, 0xFEB5}, -+/* 635 */ {SD, 0xFEB9}, -+/* 636 */ {SD, 0xFEBD}, -+/* 637 */ {SD, 0xFEC1}, -+/* 638 */ {SD, 0xFEC5}, -+/* 639 */ {SD, 0xFEC9}, -+/* 63A */ {SD, 0xFECD}, -+/* 63B */ {SU, 0x0}, -+/* 63C */ {SU, 0x0}, -+/* 63D */ {SU, 0x0}, -+/* 63E */ {SU, 0x0}, -+/* 63F */ {SU, 0x0}, -+/* 640 */ {SC, 0x0}, -+/* 641 */ {SD, 0xFED1}, -+/* 642 */ {SD, 0xFED5}, -+/* 643 */ {SD, 0xFED9}, -+/* 644 */ {SD, 0xFEDD}, -+/* 645 */ {SD, 0xFEE1}, -+/* 646 */ {SD, 0xFEE5}, -+/* 647 */ {SD, 0xFEE9}, -+/* 648 */ {SR, 0xFEED}, -+/* 649 */ {SR, 0xFEEF}, /* SD */ -+/* 64A */ {SD, 0xFEF1}, -+/* 64B */ {SU, 0xFEF1}, -+/* 64C */ {SU, 0xFEF1}, -+/* 64D */ {SU, 0xFEF1}, -+/* 64E */ {SU, 0xFEF1}, -+/* 64F */ {SU, 0xFEF1}, -+/* 650 */ {SU,0xFEF1}, -+/* 651 */ {SU,0xFEF1}, -+/* 652 */ {SU,0xFEF1}, -+/* 653 */ {SU, 0xFEF1}, -+/* 654 */ {SU, 0xFEF1}, -+/* 655 */ {SU, 0xFEF1}, -+/* 656 */ {SU, 0xFEF1}, -+/* 657 */ {SU, 0xFEF1}, -+/* 658 */ {SU, 0xFEF1}, -+/* 659 */ {SU, 0xFEF1}, -+/* 65a */ {SU, 0xFEF1}, -+/* 65b */ {SU, 0xFEF1}, -+/* 65c */ {SU, 0xFEF1}, -+/* 65d */ {SU, 0xFEF1}, -+/* 65e */ {SU, 0xFEF1}, -+/* 65f */ {SU, 0xFEF1}, -+/* 660 */ {SU, 0xFEF1}, -+/* 661 */ {SU, 0xFEF1}, -+/* 662 */ {SU, 0xFEF1}, -+/* 663 */ {SU, 0xFEF1}, -+/* 664 */ {SU, 0xFEF1}, -+/* 665 */ {SU, 0xFEF1}, -+/* 666 */ {SU, 0xFEF1}, -+/* 667 */ {SU, 0xFEF1}, -+/* 668 */ {SU, 0xFEF1} -+}; -+ -+/* -+ * Flips the text buffer, according to max level, and -+ * all higher levels -+ * -+ * Input: -+ * from: text buffer, on which to apply flipping -+ * level: resolved levels buffer -+ * max: the maximum level found in this line (should be unsigned char) -+ * count: line size in wchar_t -+ */ -+void flipThisRun(BLOCKTYPE from, unsigned char* level, int max, int count) -+{ -+ int i, j, rcount, tlevel; -+ CHARTYPE temp; -+ -+ -+ j = i = 0; -+ while(i<count && j<count) -+ { -+ -+ /* find the start of the run of level=max */ -+ tlevel = max; -+ i = j = findIndexOfRun(level, i, count, max); -+ /* find the end of the run */ -+ while((tlevel <= level[i]) && (i < count)) -+ { -+ i++; -+ } -+ rcount = i-j; -+ for(; rcount>((i-j)/2); rcount--) -+ { -+ temp = GETCHAR(from, j+rcount-1); -+ GETCHAR(from, j+rcount-1) = GETCHAR(from, i-rcount); -+ GETCHAR(from, i-rcount) = temp; -+ } -+ } -+} -+ -+/* -+ * Finds the index of a run with level equals tlevel -+ */ -+int findIndexOfRun(unsigned char* level , int start, int count, int tlevel) -+{ -+ int i; -+ for(i=start; i<count; i++) -+ { -+ if(tlevel <= level[i]) -+ { -+ return i; -+ } -+ } -+ return count; -+} -+ -+unsigned char GetParagraphLevel(BLOCKTYPE line, int count) -+{ -+ int i; -+ for( i=0; i<count ; i++) -+ { -+ if(GetType(GETCHAR(line, i)) == R || GetType(/*line[i]*/ GETCHAR(line, i)) == AL) -+ return 1; -+ else if(GetType(GETCHAR(line, i)) == L) -+ return 0; -+ } -+ return 0; /* Compiler Nag-Stopper */ -+} -+ -+/* -+ * Returns character type of ch, by calling RLE table lookup -+ * function -+ */ -+unsigned char getCAPRtl(CHARTYPE ch) -+{ -+/* CAPRtl Charset */ -+int TypesFromChar[] = -+{ -+//0 1 2 3 4 5 6 7 8 9 a b c d e f -+ ON, ON, ON, ON, L, R, ON, ON, ON, ON, ON, ON, ON, B, RLO,RLE, /*00-0f*/ -+ LRO,LRE,PDF,WS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, /*10-1f*/ -+ -+ WS, ON, ON, ON, ET, ON, ON, ON, ON, ON, ON, ET, CS, ON, ES, ES, /*20-2f*/ -+ EN, EN, EN, EN, EN, EN, AN, AN, AN, AN, LRE, RLE, RLO, PDF, LRO, ON, /*30-3f*/ -+ R, AL, AL, AL, AL, AL, AL, R, R, R, R, R, R, R, R, R, /*40-4f*/ -+ R, R, R, R, R, R, R, R, R, R, R, ON, B, ON, ON, ON, /*50-5f*/ -+ NSM, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, /*60-6f*/ -+ L, L, L, L, L, L, L, L, L, L, L, ON, S, ON, ON, ON, /*70-7f*/ -+}; -+ -+//0 1 2 3 4 5 6 7 8 9 a b c d e f -+// ON, ON, ON, ON, L, R, ON, ON, ON, ON, ON, ON, ON, B, RLO,RLE, /*00-0f*/ -+//LRO,LRE,PDF,WS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, /*10-1f*/ -+ -+// WS, ON, ON, ON, ET, ON, ON, ON, ON, ON, ON, ET, CS, ON, ES, ES, /*20-2f*/ -+// EN, EN, EN, EN, EN, EN, AN, AN, AN, AN, CS, ON, ON, ON, ON, ON, /*30-3f*/ -+// R, AL, AL, AL, AL, AL, AL, R, R, R, R, R, R, R, R, R, /*40-4f*/ -+// R, R, R, R, R, R, R, R, R, R, R, ON, B, ON, ON, ON, /*50-5f*/ -+// NSM, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, /*60-6f*/ -+// L, L, L, L, L, L, L, L, L, L, L, ON, S, ON, ON, ON, /*70-7f*/ -+//}; -+ if(ch <0x7f) -+ return TypesFromChar[ch]; -+ else -+ return R; -+} -+ -+unsigned char getType(CHARTYPE ch) -+{ -+ static const struct { -+ CHARTYPE first, last, type; -+ } lookup[] = { -+ {0x0000, 0x0008, BN}, -+ {0x0009, 0x0009, S}, -+ {0x000a, 0x000a, B}, -+ {0x000b, 0x000b, S}, -+ {0x000c, 0x000c, WS}, -+ {0x000d, 0x000d, B}, -+ {0x000e, 0x001b, BN}, -+ {0x001c, 0x001e, B}, -+ {0x001f, 0x001f, S}, -+ {0x0020, 0x0020, WS}, -+ {0x0023, 0x0025, ET}, -+ {0x002b, 0x002b, ES}, -+ {0x002c, 0x002c, CS}, -+ {0x002d, 0x002d, ES}, -+ {0x002e, 0x002f, CS}, -+ {0x0030, 0x0039, EN}, -+ {0x003a, 0x003a, CS}, -+ {0x0041, 0x005a, L}, -+ {0x0061, 0x007a, L}, -+ {0x007f, 0x0084, BN}, -+ {0x0085, 0x0085, B}, -+ {0x0086, 0x009f, BN}, -+ {0x00a0, 0x00a0, CS}, -+ {0x00a2, 0x00a5, ET}, -+ {0x00aa, 0x00aa, L}, -+ {0x00ad, 0x00ad, BN}, -+ {0x00b0, 0x00b1, ET}, -+ {0x00b2, 0x00b3, EN}, -+ {0x00b5, 0x00b5, L}, -+ {0x00b9, 0x00b9, EN}, -+ {0x00ba, 0x00ba, L}, -+ {0x00c0, 0x00d6, L}, -+ {0x00d8, 0x00f6, L}, -+ {0x00f8, 0x0236, L}, -+ {0x0250, 0x02b8, L}, -+ {0x02bb, 0x02c1, L}, -+ {0x02d0, 0x02d1, L}, -+ {0x02e0, 0x02e4, L}, -+ {0x02ee, 0x02ee, L}, -+ {0x0300, 0x0357, NSM}, -+ {0x035d, 0x036f, NSM}, -+ {0x037a, 0x037a, L}, -+ {0x0386, 0x0386, L}, -+ {0x0388, 0x038a, L}, -+ {0x038c, 0x038c, L}, -+ {0x038e, 0x03a1, L}, -+ {0x03a3, 0x03ce, L}, -+ {0x03d0, 0x03f5, L}, -+ {0x03f7, 0x03fb, L}, -+ {0x0400, 0x0482, L}, -+ {0x0483, 0x0486, NSM}, -+ {0x0488, 0x0489, NSM}, -+ {0x048a, 0x04ce, L}, -+ {0x04d0, 0x04f5, L}, -+ {0x04f8, 0x04f9, L}, -+ {0x0500, 0x050f, L}, -+ {0x0531, 0x0556, L}, -+ {0x0559, 0x055f, L}, -+ {0x0561, 0x0587, L}, -+ {0x0589, 0x0589, L}, -+ {0x0591, 0x05a1, NSM}, -+ {0x05a3, 0x05b9, NSM}, -+ {0x05bb, 0x05bd, NSM}, -+ {0x05be, 0x05be, R}, -+ {0x05bf, 0x05bf, NSM}, -+ {0x05c0, 0x05c0, R}, -+ {0x05c1, 0x05c2, NSM}, -+ {0x05c3, 0x05c3, R}, -+ {0x05c4, 0x05c4, NSM}, -+ {0x05d0, 0x05ea, R}, -+ {0x05f0, 0x05f4, R}, -+ {0x0600, 0x0603, AL}, -+ {0x060c, 0x060c, CS}, -+ {0x060d, 0x060d, AL}, -+ {0x0610, 0x0615, NSM}, -+ {0x061b, 0x061b, AL}, -+ {0x061f, 0x061f, AL}, -+ {0x0621, 0x063a, AL}, -+ {0x0640, 0x064a, AL}, -+ {0x064b, 0x0658, NSM}, -+ {0x0660, 0x0669, AN}, -+ {0x066a, 0x066a, ET}, -+ {0x066b, 0x066c, AN}, -+ {0x066d, 0x066f, AL}, -+ {0x0670, 0x0670, NSM}, -+ {0x0671, 0x06d5, AL}, -+ {0x06d6, 0x06dc, NSM}, -+ {0x06dd, 0x06dd, AL}, -+ {0x06de, 0x06e4, NSM}, -+ {0x06e5, 0x06e6, AL}, -+ {0x06e7, 0x06e8, NSM}, -+ {0x06ea, 0x06ed, NSM}, -+ {0x06ee, 0x06ef, AL}, -+ {0x06f0, 0x06f9, EN}, -+ {0x06fa, 0x070d, AL}, -+ {0x070f, 0x070f, BN}, -+ {0x0710, 0x0710, AL}, -+ {0x0711, 0x0711, NSM}, -+ {0x0712, 0x072f, AL}, -+ {0x0730, 0x074a, NSM}, -+ {0x074d, 0x074f, AL}, -+ {0x0780, 0x07a5, AL}, -+ {0x07a6, 0x07b0, NSM}, -+ {0x07b1, 0x07b1, AL}, -+ {0x0901, 0x0902, NSM}, -+ {0x0903, 0x0939, L}, -+ {0x093c, 0x093c, NSM}, -+ {0x093d, 0x0940, L}, -+ {0x0941, 0x0948, NSM}, -+ {0x0949, 0x094c, L}, -+ {0x094d, 0x094d, NSM}, -+ {0x0950, 0x0950, L}, -+ {0x0951, 0x0954, NSM}, -+ {0x0958, 0x0961, L}, -+ {0x0962, 0x0963, NSM}, -+ {0x0964, 0x0970, L}, -+ {0x0981, 0x0981, NSM}, -+ {0x0982, 0x0983, L}, -+ {0x0985, 0x098c, L}, -+ {0x098f, 0x0990, L}, -+ {0x0993, 0x09a8, L}, -+ {0x09aa, 0x09b0, L}, -+ {0x09b2, 0x09b2, L}, -+ {0x09b6, 0x09b9, L}, -+ {0x09bc, 0x09bc, NSM}, -+ {0x09bd, 0x09c0, L}, -+ {0x09c1, 0x09c4, NSM}, -+ {0x09c7, 0x09c8, L}, -+ {0x09cb, 0x09cc, L}, -+ {0x09cd, 0x09cd, NSM}, -+ {0x09d7, 0x09d7, L}, -+ {0x09dc, 0x09dd, L}, -+ {0x09df, 0x09e1, L}, -+ {0x09e2, 0x09e3, NSM}, -+ {0x09e6, 0x09f1, L}, -+ {0x09f2, 0x09f3, ET}, -+ {0x09f4, 0x09fa, L}, -+ {0x0a01, 0x0a02, NSM}, -+ {0x0a03, 0x0a03, L}, -+ {0x0a05, 0x0a0a, L}, -+ {0x0a0f, 0x0a10, L}, -+ {0x0a13, 0x0a28, L}, -+ {0x0a2a, 0x0a30, L}, -+ {0x0a32, 0x0a33, L}, -+ {0x0a35, 0x0a36, L}, -+ {0x0a38, 0x0a39, L}, -+ {0x0a3c, 0x0a3c, NSM}, -+ {0x0a3e, 0x0a40, L}, -+ {0x0a41, 0x0a42, NSM}, -+ {0x0a47, 0x0a48, NSM}, -+ {0x0a4b, 0x0a4d, NSM}, -+ {0x0a59, 0x0a5c, L}, -+ {0x0a5e, 0x0a5e, L}, -+ {0x0a66, 0x0a6f, L}, -+ {0x0a70, 0x0a71, NSM}, -+ {0x0a72, 0x0a74, L}, -+ {0x0a81, 0x0a82, NSM}, -+ {0x0a83, 0x0a83, L}, -+ {0x0a85, 0x0a8d, L}, -+ {0x0a8f, 0x0a91, L}, -+ {0x0a93, 0x0aa8, L}, -+ {0x0aaa, 0x0ab0, L}, -+ {0x0ab2, 0x0ab3, L}, -+ {0x0ab5, 0x0ab9, L}, -+ {0x0abc, 0x0abc, NSM}, -+ {0x0abd, 0x0ac0, L}, -+ {0x0ac1, 0x0ac5, NSM}, -+ {0x0ac7, 0x0ac8, NSM}, -+ {0x0ac9, 0x0ac9, L}, -+ {0x0acb, 0x0acc, L}, -+ {0x0acd, 0x0acd, NSM}, -+ {0x0ad0, 0x0ad0, L}, -+ {0x0ae0, 0x0ae1, L}, -+ {0x0ae2, 0x0ae3, NSM}, -+ {0x0ae6, 0x0aef, L}, -+ {0x0af1, 0x0af1, ET}, -+ {0x0b01, 0x0b01, NSM}, -+ {0x0b02, 0x0b03, L}, -+ {0x0b05, 0x0b0c, L}, -+ {0x0b0f, 0x0b10, L}, -+ {0x0b13, 0x0b28, L}, -+ {0x0b2a, 0x0b30, L}, -+ {0x0b32, 0x0b33, L}, -+ {0x0b35, 0x0b39, L}, -+ {0x0b3c, 0x0b3c, NSM}, -+ {0x0b3d, 0x0b3e, L}, -+ {0x0b3f, 0x0b3f, NSM}, -+ {0x0b40, 0x0b40, L}, -+ {0x0b41, 0x0b43, NSM}, -+ {0x0b47, 0x0b48, L}, -+ {0x0b4b, 0x0b4c, L}, -+ {0x0b4d, 0x0b4d, NSM}, -+ {0x0b56, 0x0b56, NSM}, -+ {0x0b57, 0x0b57, L}, -+ {0x0b5c, 0x0b5d, L}, -+ {0x0b5f, 0x0b61, L}, -+ {0x0b66, 0x0b71, L}, -+ {0x0b82, 0x0b82, NSM}, -+ {0x0b83, 0x0b83, L}, -+ {0x0b85, 0x0b8a, L}, -+ {0x0b8e, 0x0b90, L}, -+ {0x0b92, 0x0b95, L}, -+ {0x0b99, 0x0b9a, L}, -+ {0x0b9c, 0x0b9c, L}, -+ {0x0b9e, 0x0b9f, L}, -+ {0x0ba3, 0x0ba4, L}, -+ {0x0ba8, 0x0baa, L}, -+ {0x0bae, 0x0bb5, L}, -+ {0x0bb7, 0x0bb9, L}, -+ {0x0bbe, 0x0bbf, L}, -+ {0x0bc0, 0x0bc0, NSM}, -+ {0x0bc1, 0x0bc2, L}, -+ {0x0bc6, 0x0bc8, L}, -+ {0x0bca, 0x0bcc, L}, -+ {0x0bcd, 0x0bcd, NSM}, -+ {0x0bd7, 0x0bd7, L}, -+ {0x0be7, 0x0bf2, L}, -+ {0x0bf9, 0x0bf9, ET}, -+ {0x0c01, 0x0c03, L}, -+ {0x0c05, 0x0c0c, L}, -+ {0x0c0e, 0x0c10, L}, -+ {0x0c12, 0x0c28, L}, -+ {0x0c2a, 0x0c33, L}, -+ {0x0c35, 0x0c39, L}, -+ {0x0c3e, 0x0c40, NSM}, -+ {0x0c41, 0x0c44, L}, -+ {0x0c46, 0x0c48, NSM}, -+ {0x0c4a, 0x0c4d, NSM}, -+ {0x0c55, 0x0c56, NSM}, -+ {0x0c60, 0x0c61, L}, -+ {0x0c66, 0x0c6f, L}, -+ {0x0c82, 0x0c83, L}, -+ {0x0c85, 0x0c8c, L}, -+ {0x0c8e, 0x0c90, L}, -+ {0x0c92, 0x0ca8, L}, -+ {0x0caa, 0x0cb3, L}, -+ {0x0cb5, 0x0cb9, L}, -+ {0x0cbc, 0x0cbc, NSM}, -+ {0x0cbd, 0x0cc4, L}, -+ {0x0cc6, 0x0cc8, L}, -+ {0x0cca, 0x0ccb, L}, -+ {0x0ccc, 0x0ccd, NSM}, -+ {0x0cd5, 0x0cd6, L}, -+ {0x0cde, 0x0cde, L}, -+ {0x0ce0, 0x0ce1, L}, -+ {0x0ce6, 0x0cef, L}, -+ {0x0d02, 0x0d03, L}, -+ {0x0d05, 0x0d0c, L}, -+ {0x0d0e, 0x0d10, L}, -+ {0x0d12, 0x0d28, L}, -+ {0x0d2a, 0x0d39, L}, -+ {0x0d3e, 0x0d40, L}, -+ {0x0d41, 0x0d43, NSM}, -+ {0x0d46, 0x0d48, L}, -+ {0x0d4a, 0x0d4c, L}, -+ {0x0d4d, 0x0d4d, NSM}, -+ {0x0d57, 0x0d57, L}, -+ {0x0d60, 0x0d61, L}, -+ {0x0d66, 0x0d6f, L}, -+ {0x0d82, 0x0d83, L}, -+ {0x0d85, 0x0d96, L}, -+ {0x0d9a, 0x0db1, L}, -+ {0x0db3, 0x0dbb, L}, -+ {0x0dbd, 0x0dbd, L}, -+ {0x0dc0, 0x0dc6, L}, -+ {0x0dca, 0x0dca, NSM}, -+ {0x0dcf, 0x0dd1, L}, -+ {0x0dd2, 0x0dd4, NSM}, -+ {0x0dd6, 0x0dd6, NSM}, -+ {0x0dd8, 0x0ddf, L}, -+ {0x0df2, 0x0df4, L}, -+ {0x0e01, 0x0e30, L}, -+ {0x0e31, 0x0e31, NSM}, -+ {0x0e32, 0x0e33, L}, -+ {0x0e34, 0x0e3a, NSM}, -+ {0x0e3f, 0x0e3f, ET}, -+ {0x0e40, 0x0e46, L}, -+ {0x0e47, 0x0e4e, NSM}, -+ {0x0e4f, 0x0e5b, L}, -+ {0x0e81, 0x0e82, L}, -+ {0x0e84, 0x0e84, L}, -+ {0x0e87, 0x0e88, L}, -+ {0x0e8a, 0x0e8a, L}, -+ {0x0e8d, 0x0e8d, L}, -+ {0x0e94, 0x0e97, L}, -+ {0x0e99, 0x0e9f, L}, -+ {0x0ea1, 0x0ea3, L}, -+ {0x0ea5, 0x0ea5, L}, -+ {0x0ea7, 0x0ea7, L}, -+ {0x0eaa, 0x0eab, L}, -+ {0x0ead, 0x0eb0, L}, -+ {0x0eb1, 0x0eb1, NSM}, -+ {0x0eb2, 0x0eb3, L}, -+ {0x0eb4, 0x0eb9, NSM}, -+ {0x0ebb, 0x0ebc, NSM}, -+ {0x0ebd, 0x0ebd, L}, -+ {0x0ec0, 0x0ec4, L}, -+ {0x0ec6, 0x0ec6, L}, -+ {0x0ec8, 0x0ecd, NSM}, -+ {0x0ed0, 0x0ed9, L}, -+ {0x0edc, 0x0edd, L}, -+ {0x0f00, 0x0f17, L}, -+ {0x0f18, 0x0f19, NSM}, -+ {0x0f1a, 0x0f34, L}, -+ {0x0f35, 0x0f35, NSM}, -+ {0x0f36, 0x0f36, L}, -+ {0x0f37, 0x0f37, NSM}, -+ {0x0f38, 0x0f38, L}, -+ {0x0f39, 0x0f39, NSM}, -+ {0x0f3e, 0x0f47, L}, -+ {0x0f49, 0x0f6a, L}, -+ {0x0f71, 0x0f7e, NSM}, -+ {0x0f7f, 0x0f7f, L}, -+ {0x0f80, 0x0f84, NSM}, -+ {0x0f85, 0x0f85, L}, -+ {0x0f86, 0x0f87, NSM}, -+ {0x0f88, 0x0f8b, L}, -+ {0x0f90, 0x0f97, NSM}, -+ {0x0f99, 0x0fbc, NSM}, -+ {0x0fbe, 0x0fc5, L}, -+ {0x0fc6, 0x0fc6, NSM}, -+ {0x0fc7, 0x0fcc, L}, -+ {0x0fcf, 0x0fcf, L}, -+ {0x1000, 0x1021, L}, -+ {0x1023, 0x1027, L}, -+ {0x1029, 0x102a, L}, -+ {0x102c, 0x102c, L}, -+ {0x102d, 0x1030, NSM}, -+ {0x1031, 0x1031, L}, -+ {0x1032, 0x1032, NSM}, -+ {0x1036, 0x1037, NSM}, -+ {0x1038, 0x1038, L}, -+ {0x1039, 0x1039, NSM}, -+ {0x1040, 0x1057, L}, -+ {0x1058, 0x1059, NSM}, -+ {0x10a0, 0x10c5, L}, -+ {0x10d0, 0x10f8, L}, -+ {0x10fb, 0x10fb, L}, -+ {0x1100, 0x1159, L}, -+ {0x115f, 0x11a2, L}, -+ {0x11a8, 0x11f9, L}, -+ {0x1200, 0x1206, L}, -+ {0x1208, 0x1246, L}, -+ {0x1248, 0x1248, L}, -+ {0x124a, 0x124d, L}, -+ {0x1250, 0x1256, L}, -+ {0x1258, 0x1258, L}, -+ {0x125a, 0x125d, L}, -+ {0x1260, 0x1286, L}, -+ {0x1288, 0x1288, L}, -+ {0x128a, 0x128d, L}, -+ {0x1290, 0x12ae, L}, -+ {0x12b0, 0x12b0, L}, -+ {0x12b2, 0x12b5, L}, -+ {0x12b8, 0x12be, L}, -+ {0x12c0, 0x12c0, L}, -+ {0x12c2, 0x12c5, L}, -+ {0x12c8, 0x12ce, L}, -+ {0x12d0, 0x12d6, L}, -+ {0x12d8, 0x12ee, L}, -+ {0x12f0, 0x130e, L}, -+ {0x1310, 0x1310, L}, -+ {0x1312, 0x1315, L}, -+ {0x1318, 0x131e, L}, -+ {0x1320, 0x1346, L}, -+ {0x1348, 0x135a, L}, -+ {0x1361, 0x137c, L}, -+ {0x13a0, 0x13f4, L}, -+ {0x1401, 0x1676, L}, -+ {0x1680, 0x1680, WS}, -+ {0x1681, 0x169a, L}, -+ {0x16a0, 0x16f0, L}, -+ {0x1700, 0x170c, L}, -+ {0x170e, 0x1711, L}, -+ {0x1712, 0x1714, NSM}, -+ {0x1720, 0x1731, L}, -+ {0x1732, 0x1734, NSM}, -+ {0x1735, 0x1736, L}, -+ {0x1740, 0x1751, L}, -+ {0x1752, 0x1753, NSM}, -+ {0x1760, 0x176c, L}, -+ {0x176e, 0x1770, L}, -+ {0x1772, 0x1773, NSM}, -+ {0x1780, 0x17b6, L}, -+ {0x17b7, 0x17bd, NSM}, -+ {0x17be, 0x17c5, L}, -+ {0x17c6, 0x17c6, NSM}, -+ {0x17c7, 0x17c8, L}, -+ {0x17c9, 0x17d3, NSM}, -+ {0x17d4, 0x17da, L}, -+ {0x17db, 0x17db, ET}, -+ {0x17dc, 0x17dc, L}, -+ {0x17dd, 0x17dd, NSM}, -+ {0x17e0, 0x17e9, L}, -+ {0x180b, 0x180d, NSM}, -+ {0x180e, 0x180e, WS}, -+ {0x1810, 0x1819, L}, -+ {0x1820, 0x1877, L}, -+ {0x1880, 0x18a8, L}, -+ {0x18a9, 0x18a9, NSM}, -+ {0x1900, 0x191c, L}, -+ {0x1920, 0x1922, NSM}, -+ {0x1923, 0x1926, L}, -+ {0x1927, 0x192b, NSM}, -+ {0x1930, 0x1931, L}, -+ {0x1932, 0x1932, NSM}, -+ {0x1933, 0x1938, L}, -+ {0x1939, 0x193b, NSM}, -+ {0x1946, 0x196d, L}, -+ {0x1970, 0x1974, L}, -+ {0x1d00, 0x1d6b, L}, -+ {0x1e00, 0x1e9b, L}, -+ {0x1ea0, 0x1ef9, L}, -+ {0x1f00, 0x1f15, L}, -+ {0x1f18, 0x1f1d, L}, -+ {0x1f20, 0x1f45, L}, -+ {0x1f48, 0x1f4d, L}, -+ {0x1f50, 0x1f57, L}, -+ {0x1f59, 0x1f59, L}, -+ {0x1f5b, 0x1f5b, L}, -+ {0x1f5d, 0x1f5d, L}, -+ {0x1f5f, 0x1f7d, L}, -+ {0x1f80, 0x1fb4, L}, -+ {0x1fb6, 0x1fbc, L}, -+ {0x1fbe, 0x1fbe, L}, -+ {0x1fc2, 0x1fc4, L}, -+ {0x1fc6, 0x1fcc, L}, -+ {0x1fd0, 0x1fd3, L}, -+ {0x1fd6, 0x1fdb, L}, -+ {0x1fe0, 0x1fec, L}, -+ {0x1ff2, 0x1ff4, L}, -+ {0x1ff6, 0x1ffc, L}, -+ {0x2000, 0x200a, WS}, -+ {0x200b, 0x200d, BN}, -+ {0x200e, 0x200e, L}, -+ {0x200f, 0x200f, R}, -+ {0x2028, 0x2028, WS}, -+ {0x2029, 0x2029, B}, -+ {0x202a, 0x202a, LRE}, -+ {0x202b, 0x202b, RLE}, -+ {0x202c, 0x202c, PDF}, -+ {0x202d, 0x202d, LRO}, -+ {0x202e, 0x202e, RLO}, -+ {0x202f, 0x202f, WS}, -+ {0x2030, 0x2034, ET}, -+ {0x2044, 0x2044, CS}, -+ {0x205f, 0x205f, WS}, -+ {0x2060, 0x2063, BN}, -+ {0x206a, 0x206f, BN}, -+ {0x2070, 0x2070, EN}, -+ {0x2071, 0x2071, L}, -+ {0x2074, 0x2079, EN}, -+ {0x207a, 0x207b, ET}, -+ {0x207f, 0x207f, L}, -+ {0x2080, 0x2089, EN}, -+ {0x208a, 0x208b, ET}, -+ {0x20a0, 0x20b1, ET}, -+ {0x20d0, 0x20ea, NSM}, -+ {0x2102, 0x2102, L}, -+ {0x2107, 0x2107, L}, -+ {0x210a, 0x2113, L}, -+ {0x2115, 0x2115, L}, -+ {0x2119, 0x211d, L}, -+ {0x2124, 0x2124, L}, -+ {0x2126, 0x2126, L}, -+ {0x2128, 0x2128, L}, -+ {0x212a, 0x212d, L}, -+ {0x212e, 0x212e, ET}, -+ {0x212f, 0x2131, L}, -+ {0x2133, 0x2139, L}, -+ {0x213d, 0x213f, L}, -+ {0x2145, 0x2149, L}, -+ {0x2160, 0x2183, L}, -+ {0x2212, 0x2213, ET}, -+ {0x2336, 0x237a, L}, -+ {0x2395, 0x2395, L}, -+ {0x2488, 0x249b, EN}, -+ {0x249c, 0x24e9, L}, -+ {0x2800, 0x28ff, L}, -+ {0x3000, 0x3000, WS}, -+ {0x3005, 0x3007, L}, -+ {0x3021, 0x3029, L}, -+ {0x302a, 0x302f, NSM}, -+ {0x3031, 0x3035, L}, -+ {0x3038, 0x303c, L}, -+ {0x3041, 0x3096, L}, -+ {0x3099, 0x309a, NSM}, -+ {0x309d, 0x309f, L}, -+ {0x30a1, 0x30fa, L}, -+ {0x30fc, 0x30ff, L}, -+ {0x3105, 0x312c, L}, -+ {0x3131, 0x318e, L}, -+ {0x3190, 0x31b7, L}, -+ {0x31f0, 0x321c, L}, -+ {0x3220, 0x3243, L}, -+ {0x3260, 0x327b, L}, -+ {0x327f, 0x32b0, L}, -+ {0x32c0, 0x32cb, L}, -+ {0x32d0, 0x32fe, L}, -+ {0x3300, 0x3376, L}, -+ {0x337b, 0x33dd, L}, -+ {0x33e0, 0x33fe, L}, -+ {0x3400, 0x4db5, L}, -+ {0x4e00, 0x9fa5, L}, -+ {0xa000, 0xa48c, L}, -+ {0xac00, 0xd7a3, L}, -+ {0xd800, 0xfa2d, L}, -+ {0xfa30, 0xfa6a, L}, -+ {0xfb00, 0xfb06, L}, -+ {0xfb13, 0xfb17, L}, -+ {0xfb1d, 0xfb1d, R}, -+ {0xfb1e, 0xfb1e, NSM}, -+ {0xfb1f, 0xfb28, R}, -+ {0xfb29, 0xfb29, ET}, -+ {0xfb2a, 0xfb36, R}, -+ {0xfb38, 0xfb3c, R}, -+ {0xfb3e, 0xfb3e, R}, -+ {0xfb40, 0xfb41, R}, -+ {0xfb43, 0xfb44, R}, -+ {0xfb46, 0xfb4f, R}, -+ {0xfb50, 0xfbb1, AL}, -+ {0xfbd3, 0xfd3d, AL}, -+ {0xfd50, 0xfd8f, AL}, -+ {0xfd92, 0xfdc7, AL}, -+ {0xfdf0, 0xfdfc, AL}, -+ {0xfe00, 0xfe0f, NSM}, -+ {0xfe20, 0xfe23, NSM}, -+ {0xfe50, 0xfe50, CS}, -+ {0xfe52, 0xfe52, CS}, -+ {0xfe55, 0xfe55, CS}, -+ {0xfe5f, 0xfe5f, ET}, -+ {0xfe62, 0xfe63, ET}, -+ {0xfe69, 0xfe6a, ET}, -+ {0xfe70, 0xfe74, AL}, -+ {0xfe76, 0xfefc, AL}, -+ {0xfeff, 0xfeff, BN}, -+ {0xff03, 0xff05, ET}, -+ {0xff0b, 0xff0b, ET}, -+ {0xff0c, 0xff0c, CS}, -+ {0xff0d, 0xff0d, ET}, -+ {0xff0e, 0xff0e, CS}, -+ {0xff0f, 0xff0f, ES}, -+ {0xff10, 0xff19, EN}, -+ {0xff1a, 0xff1a, CS}, -+ {0xff21, 0xff3a, L}, -+ {0xff41, 0xff5a, L}, -+ {0xff66, 0xffbe, L}, -+ {0xffc2, 0xffc7, L}, -+ {0xffca, 0xffcf, L}, -+ {0xffd2, 0xffd7, L}, -+ {0xffda, 0xffdc, L}, -+ {0xffe0, 0xffe1, ET}, -+ {0xffe5, 0xffe6, ET}, -+ }; -+ -+ int i, j, k; -+ -+ i = -1; -+ j = lenof(lookup); -+ -+ while (j - i > 1) { -+ k = (i + j) / 2; -+ if (ch < lookup[k].first) -+ j = k; -+ else if (ch > lookup[k].last) -+ i = k; -+ else -+ return (unsigned char)lookup[k].type; -+ } -+ -+ /* -+ * If we reach here, the character was not in any of the -+ * intervals listed in the lookup table. This means we return -+ * ON (`Other Neutrals'). This is the appropriate code for any -+ * character genuinely not listed in the Unicode table, and -+ * also the table above has deliberately left out any -+ * characters _explicitly_ listed as ON (to save space!). -+ */ -+ return ON; -+} -+ -+unsigned char getPreviousLevel(unsigned char* types, unsigned char* level, int from) -+{ -+ int skip = 0; -+ -+ while(--from > 0) -+ { -+ -+ switch(types[from]) -+ { -+ case LRE: -+ case LRO: -+ case RLE: -+ case RLO: -+ if(skip>0) -+ { -+ skip--; -+ break; -+ }else -+ return level[from-1]; -+ case PDF: -+ skip++; -+ break; -+ } -+ } -+ return 0; /* Compiler Nag-Stopper */ -+} -+ -+unsigned char getPreviousOverride(unsigned char* types, unsigned char* level, int from) -+{ -+ int skip = 1; -+ -+ from--; -+ while(from-- > 0) -+ { -+ switch(types[from]) -+ { -+ case LRE: -+ case RLE: -+ skip++; -+ break; -+ -+ case LRO: -+ if(skip>0) -+ { -+ skip--; -+ break; -+ }else -+ return L; -+ case RLO: -+ if(skip>0) -+ { -+ skip--; -+ break; -+ }else -+ return R; -+ case PDF: -+ skip++; -+ break; -+ } -+ } -+ return ON; -+} -+ -+ -+ -+/* The Main shaping function, and the only one to be used -+ * by the outside world. -+ * -+ * line: buffer to apply shaping to. this must be passed by doBidi() first -+ * to: output buffer for the shaped data -+ * from: start bidi at this index -+ * count: number of characters in line -+ */ -+int doShape(BLOCKTYPE line, CHARTYPE* to, int from, int count) -+{ -+ int i, j, ligFlag; -+ unsigned char prevTemp, nextTemp; -+ CHARTYPE tempChar; -+ -+ ligFlag = 0; -+ prevTemp = SU; -+ nextTemp = SU; -+ for(i=from; i<count; i++) -+ { -+ /* Get Previous and next Characters type */ -+ j=i; -+ while(--j >= 0) -+ { -+ //assert(j<count); -+ //assert(i<count); -+ if(GetType(GETCHAR(line, j)) != NSM) -+ { -+ prevTemp = STYPE(GETCHAR(line, j)); -+ break; -+ } -+ } -+ j=i; -+ while(++j < count) -+ { -+ //assert(j<count); -+ //assert(i<count); -+ if(GetType(GETCHAR(line, j)) != NSM) -+ { -+ nextTemp = STYPE(GETCHAR(line, j)); -+ break; -+ //HAQ -+ } else if(j == count-1) { -+ nextTemp = SU; -+ break; -+ } -+ } -+ -+ switch(STYPE(GETCHAR(line, i))) -+ { -+ case SC: -+ case SU: -+ to[i] = GETCHAR(line, i); -+ break; -+ -+ case SR: -+ if(prevTemp == SD || prevTemp == SC) -+ to[i] = SFINAL(SISOLATED(GETCHAR(line, i))); -+ else -+ to[i] = SISOLATED(GETCHAR(line, i)); -+ break; -+ -+ case SD: -+ /* Make Ligatures */ -+ if(GETCHAR(line, i) == 0x644) -+ { -+ j=i; -+ while(j++<count) -+ { -+ if(GetType(GETCHAR(line, j)) != NSM) -+ { -+ tempChar = GETCHAR(line, j); -+ break; -+ } -+ } -+ switch(tempChar) -+ { -+ case 0x622: -+ ligFlag = 1; -+ if(prevTemp == SD || prevTemp == SC) -+ to[i] = 0xFEF6; -+ else -+ to[i] = 0xFEF5; -+ break; -+ case 0x623: -+ ligFlag = 1; -+ if(prevTemp == SD || prevTemp == SC) -+ to[i] = 0xFEF8; -+ else -+ to[i] = 0xFEF7; -+ break; -+ case 0x625: -+ ligFlag = 1; -+ if(prevTemp == SD || prevTemp == SC) -+ to[i] = 0xFEFA; -+ else -+ to[i] = 0xFEF9; -+ break; -+ case 0x627: -+ ligFlag = 1; -+ if(prevTemp == SD || prevTemp == SC) -+ to[i] = 0xFEFC; -+ else -+ to[i] = 0xFEFB; -+ break; -+ } -+ if(ligFlag) -+ { -+ to[j] = 0x20; -+ i = j; -+ ligFlag = 0; -+ break; -+ } -+ } -+ //assert(j<count); -+ //assert(i<count); -+ if((prevTemp == SD) || (prevTemp == SC)) -+ { -+ if(nextTemp == SR || nextTemp == SD || nextTemp == SC) -+ to[i] = SMEDIAL(SISOLATED(GETCHAR(line, i))); -+ else -+ to[i] = SFINAL(SISOLATED(GETCHAR(line, i))); -+ break; -+ }else -+ { -+ if(nextTemp == SR || nextTemp == SD || nextTemp == SC) -+ to[i] = SINITIAL(SISOLATED(GETCHAR(line, i))); -+ else -+ to[i] = SISOLATED(GETCHAR(line, i)); -+ break; -+ } -+ -+ } -+ nextTemp = SU; -+ } -+ return 1; -+} -+ -+/* Rule (X1), (X2), (X3), (X4), (X5), (X6), (X7), (X8), (X9) */ -+void doTypes(BLOCKTYPE line, unsigned char paragraphLevel, unsigned char* types, -+ unsigned char* levels, int count, int fX) -+{ -+ -+ unsigned char tempType; -+ unsigned char currentEmbedding = paragraphLevel; -+ unsigned char currentOverride = ON; -+ int i; -+ -+ if(fX) -+ { -+ for( i=0; i<count; i++) -+ { -+ tempType = GetType(GETCHAR(line, i)); -+ switch(tempType) -+ { -+ case RLE: -+ currentEmbedding = levels[i] = leastGreaterOdd(currentEmbedding); -+ currentOverride = ON; -+ types[i] = BN; -+ break; -+ -+ case LRE: -+ currentEmbedding = levels[i] = leastGreaterEven(currentEmbedding); -+ currentOverride = ON; -+ types[i] = BN; -+ break; -+ -+ case RLO: -+ currentEmbedding = levels[i] = leastGreaterOdd(currentEmbedding); -+ currentOverride = R; -+ types[i] = BN; -+ break; -+ -+ case LRO: -+ currentEmbedding = levels[i] = leastGreaterEven(currentEmbedding); -+ currentOverride = L; -+ types[i] = BN; -+ break; -+ -+ case PDF: -+ levels[i] = currentEmbedding; -+ currentEmbedding = getPreviousLevel(types, levels, i); -+ currentOverride = getPreviousOverride(types, levels, i); -+ types[i] = BN; -+ break; -+ -+ /* Whitespace is treated as neutral for now */ -+ case WS: -+ case B: -+ case S: -+ levels[i] = currentEmbedding; -+ tempType = ON; -+ if(currentOverride != ON) -+ tempType = currentOverride; -+ break; -+ -+ default: -+ levels[i] = currentEmbedding; -+ if(currentOverride != ON) -+ tempType = currentOverride; -+ break; -+ -+ } -+ types[i] = tempType; -+ } -+ }else -+ { -+ for( i=0; i<count; i++) -+ { -+ tempType = GetType(GETCHAR(line, i)); -+ switch(tempType) -+ { -+ case WS: -+ case B: -+ case S: -+ levels[i] = currentEmbedding; -+ tempType = ON; -+ if(currentOverride != ON) -+ tempType = currentOverride; -+ break; -+ -+ default: -+ levels[i] = currentEmbedding; -+ if(currentOverride != ON) -+ tempType = currentOverride; -+ break; -+ -+ } -+ types[i] = tempType; -+ } -+ -+ } -+ -+} -+ -+/* Rule (W3) */ -+void doALtoR(unsigned char* types, int count) -+{ -+ int i=0; -+ for(; i<count; i++) -+ { -+ if(types[i] == AL) -+ types[i] = R; -+ } -+ -+} -+/* -+ * The Main Bidi Function, and the only function that should -+ * be used by the outside world. -+ * -+ * line: a buffer of size count containing text to apply -+ * the Bidirectional algorithm to. -+ */ -+int doBidi(BLOCKTYPE line, int count, int applyShape, int reorderCombining, int removeMarks) -+{ -+ unsigned char* types; -+ unsigned char* levels; -+ unsigned char paragraphLevel; -+ unsigned char tempType, tempTypeSec; -+ int i, j, imax, fX, fAL, fET, fNSM; -+ CHARTYPE* shapeTo; -+ -+ -+ fX = fAL = fET = fNSM = 0; -+ for(i=0; i<count; i++) -+ { -+ switch(GetType(line[i])) -+ { -+ case AL: -+ case R: -+ fAL = 1; -+ break; -+ case LRE: -+ case LRO: -+ case RLE: -+ case RLO: -+ case PDF: -+ case BN: -+ fX = 1; -+ break; -+ case ET: -+ fET = 1; -+ break; -+ case NSM: -+ fNSM = 1; -+ break; -+ } -+ } -+ -+ if(!fAL && !fX) -+ return 0; -+ -+ /* Initialize types, levels */ -+ types = (unsigned char*)malloc(sizeof(unsigned char) * count); -+ levels = (unsigned char*)malloc(sizeof(unsigned char) * count); -+ if(applyShape) -+ shapeTo = (CHARTYPE*)malloc(sizeof(CHARTYPE) * count); -+ -+ /* Rule (P1) NOT IMPLEMENTED -+ * P1. Split the text into separate paragraphs. A paragraph separator is -+ * kept with the previous paragraph. Within each paragraph, apply all the -+ * other rules of this algorithm. -+ */ -+ -+ /* Rule (P2), (P3) -+ * P2. In each paragraph, find the first character of type L, AL, or R. -+ * P3. If a character is found in P2 and it is of type AL or R, then set -+ * the paragraph embedding level to one; otherwise, set it to zero. -+ */ -+ paragraphLevel = GetParagraphLevel(line, count); -+ -+ /* Rule (X1), (X2), (X3), (X4), (X5), (X6), (X7), (X8), (X9) -+ * X1. Begin by setting the current embedding level to the paragraph -+ * embedding level. Set the directional override status to neutral. -+ * X2. With each RLE, compute the least greater odd embedding level. -+ * X3. With each LRE, compute the least greater even embedding level. -+ * X4. With each RLO, compute the least greater odd embedding level. -+ * X5. With each LRO, compute the least greater even embedding level. -+ * X6. For all types besides RLE, LRE, RLO, LRO, and PDF: -+ * a. Set the level of the current character to the current -+ * embedding level. -+ * b. Whenever the directional override status is not neutral, -+ * reset the current character type to the directional -+ * override status. -+ * X7. With each PDF, determine the matching embedding or override code. -+ * If there was a valid matching code, restore (pop) the last -+ * remembered (pushed) embedding level and directional override. -+ * X8. All explicit directional embeddings and overrides are completely -+ * terminated at the end of each paragraph. Paragraph separators are not -+ * included in the embedding. (Useless here) NOT IMPLEMENTED -+ * X9. Remove all RLE, LRE, RLO, LRO, PDF, and BN codes. -+ * Here, they're converted to BN. -+ */ -+ -+ doTypes(line, paragraphLevel, types, levels, count, fX); -+ -+ -+ /* Rule (W1) -+ * W1. Examine each non-spacing mark (NSM) in the level run, and change -+ * the type of the NSM to the type of the previous character. If the NSM -+ * is at the start of the level run, it will get the type of sor. -+ */ -+ -+ /* -+ * Clear BNs first -+ */ -+ if(fX) -+ { -+ for(i=0; i<count; i++) -+ { -+ if(types[i] == BN) -+ { -+ j=i; -+ while(types[--j] == ON); -+ levels[i] = levels[j]; -+ -+ j=i; -+ while(types[++j] == BN); -+ -+ if(levels[j] > levels[i]) -+ levels[i] = levels[j]; -+ -+ -+ -+ if((levels[i] % 2) == 0) -+ { -+ types[i] = L; -+ } -+ else -+ { -+ types[i] = R; -+ } -+ -+ } -+ } -+ } -+ -+ -+ if(fNSM) -+ { -+ if(types[0] == NSM) -+ types[0] = paragraphLevel; -+ -+ for(i=1; i<count; i++) -+ { -+ if(types[i] == NSM) -+ types[i] = types[i-1]; -+ /* Is this a safe assumption? -+ * I assumed the previous, IS a character. -+ */ -+ } -+ } -+ -+ /* BN TYPES !!!! */ -+ -+ if(fX) -+ { -+ for(i=0; i<count; i++) -+ { -+ if(types[i] == BN) -+ { -+ j=i; -+ while(--j>=0 && types[j] == ON); -+ tempType = types[j]; -+ j=i; -+ while(++j<count && types[j] == BN || types[j] == ON); -+ if(tempType != types[j]) -+ types[i] = tempType; -+ -+ } -+ } -+ } -+ -+ -+ /* Rule (W2) -+ * W2. Search backwards from each instance of a European number until the -+ * first strong type (R, L, AL, or sor) is found. If an AL is found, -+ * change the type of the European number to Arabic number. -+ */ -+ for(i=0; i<count; i++) -+ { -+ if(types[i] == EN) -+ { -+ j=i; -+ while(--j >= 0) -+ { -+ if(types[j] == AL) -+ { -+ types[i] = AN; -+ break; -+ } -+ else if(types[j] == R || types[j] == L) -+ { -+ break; -+ } -+ } -+ } -+ } -+ -+ /* Rule (W3) -+ * W3. Change all ALs to R. -+ * -+ * Optimization: on Rule Xn, we might set a flag on AL type -+ * to prevent this loop in L R lines only... -+ */ -+ doALtoR(types, count); -+ -+ /* Rule (W4) -+ * W4. A single European separator between two European numbers changes -+ * to a European number. A single common separator between two numbers -+ * of the same type changes to that type. -+ */ -+ for( i=0; i<(count-1); i++) -+ { -+ if(types[i] == ES) -+ { -+ if(types[i-1] == EN && types[i+1] == EN) -+ types[i] = EN; -+ }else if(types[i] == CS) -+ { -+ if(types[i-1] == EN && types[i+1] == EN) -+ types[i] = EN; -+ else if(types[i-1] == AN && types[i+1] == AN) -+ types[i] = AN; -+ } -+ } -+ -+ /* Rule (W5) -+ * W5. A sequence of European terminators adjacent to European numbers -+ * changes to all European numbers. -+ * -+ * Optimization: lots here... else ifs need rearrangement -+ */ -+ if(fET) -+ { -+ for(i=0; i<count; i++) -+ { -+ if(types[i] == ET) -+ { -+ if(types[i-1] == EN) -+ { -+ types[i] = EN; -+ continue; -+ }else if(types[i+1] == EN) -+ { -+ types[i] = EN; -+ continue; -+ }else if(types[i+1] == ET) -+ { -+ j=i; -+ while(j <count && types[j] == ET) -+ { -+ j++; -+ } -+ if(types[j] == EN) -+ types[i] = EN; -+ } -+ } -+ } -+ } -+ -+ /* Rule (W6) -+ * W6. Otherwise, separators and terminators change to Other Neutral: -+ */ -+ for(i=0; i<count; i++) -+ { -+ switch(types[i]) -+ { -+ case ES: -+ case ET: -+ case CS: -+ types[i] = ON; -+ break; -+ } -+ } -+ -+ /* Rule (W7) -+ * W7. Search backwards from each instance of a European number until -+ * the first strong type (R, L, or sor) is found. If an L is found, -+ * then change the type of the European number to L. -+ */ -+ -+ for(i=0; i<count; i++) -+ { -+ if(types[i] == EN) -+ { -+ j=i; -+ while(--j >= 0) -+ { -+ if(types[j] == L) -+ { -+ types[i] = L; -+ break; -+ } -+ else if(types[j] == R || types[j] == AL) -+ { -+ break; -+ } -+ -+ } -+ } -+ } -+ -+ -+ /* Rule (N1) -+ * N1. A sequence of neutrals takes the direction of the surrounding -+ * strong text if the text on both sides has the same direction. European -+ * and Arabic numbers are treated as though they were R. -+ */ -+ tempType = paragraphLevel; -+ for(i=0; i<count; i++) -+ { -+ if(types[i] == ON) -+ { -+ if(types[i-1] == R || types[i-1] == EN || types[i-1] == AN) -+ tempType = R; -+ else -+ tempType = L; -+ j=i; -+ -+ while(j < count) -+ { -+ tempTypeSec = types[j]; -+ if(tempTypeSec == ON || tempTypeSec == BN) -+ j++; -+ else -+ break; -+ } -+ -+ if(((types[j] == L || types[j] == LRE) && (tempType == L)) || -+ (((types[j] == R) || (types[j] == EN) || (types[j] == AN)) && (tempType == R))) -+ { -+ while(i<j) -+ { -+ types[i++] = tempType; -+ } -+ } -+ } -+ } -+ -+ -+ /* Rule (N2) -+ * N2. Any remaining neutrals take the embedding direction. -+ */ -+ for(i=0; i<count; i++) -+ { -+ if(types[i] == ON || types[i] == BN) -+ { -+ if((levels[i] % 2) == 0) -+ types[i] = L; -+ else -+ types[i] = R; -+ } -+ } -+ -+ /* Rule (I1) -+ * I1. For all characters with an even (left-to-right) embedding -+ * direction, those of type R go up one level and those of type AN or -+ * EN go up two levels. -+ */ -+ for(i=0; i<count; i++) -+ { -+ if((levels[i] % 2) == 0) -+ { -+ if(types[i] == R) -+ levels[i] += 1; -+ else if((types[i] == AN) || (types[i] == EN)) -+ levels[i] += 2; -+ }else -+ { -+ if((types[i] == L) || -+ (types[i] == EN) || -+ (types[i] == AN)) -+ levels[i] += 1; -+ } -+ } -+ -+ /* Rule (I2) -+ * I2. For all characters with an odd (right-to-left) embedding direction, -+ * those of type L, EN or AN go up one level. -+ */ -+/* -+ for(i=0; i<count; i++) -+ { -+ if((levels[i] % 2) == 1) -+ { -+ if(types[i] == L || types[i] == EN || types[i] == AN) -+ levels[i] += 1; -+ } -+ } -+*/ -+ /* Rule (L1) -+ * L1. On each line, reset the embedding level of the following characters -+ * to the paragraph embedding level: -+ * (1)segment separators, (2)paragraph separators, -+ * (3)any sequence of whitespace characters preceding -+ * a segment separator or paragraph separator, -+ * (4)and any sequence of white space characters -+ * at the end of the line. -+ * The types of characters used here are the original types, not those -+ * modified by the previous phase. -+ */ -+ -+ -+ -+ j=count-1; -+ while(j>0 && (GetType(GETCHAR(line, j)) == WS)) -+ { -+ j--; -+ } -+ if(j < (count-1)) -+ { -+ for(j++; j<count; j++) -+ levels[j] = paragraphLevel; -+ } -+ -+ for(i=0; i<count; i++) -+ { -+ tempType = GetType(GETCHAR(line, i)); -+ if(tempType == WS) -+ { -+ j=i; -+ while((++j < count) && ((tempType == WS) || (tempType == RLE)) ) -+ { -+ tempType = GetType(line[j]); -+ } -+ -+ if(GetType(GETCHAR(line, j)) == B || GetType(GETCHAR(line, j)) == S) -+ { -+ for(j--; j>=i ; j--) -+ { -+ levels[j] = paragraphLevel; -+ } -+ } -+ }else if(tempType == B || tempType == S) -+ levels[i] = paragraphLevel; -+ } -+ -+ /* Rule (L4) -+ * L4. A character that possesses the mirrored property as specified by -+ * Section 4.7, Mirrored, must be depicted by a mirrored glyph if the -+ * resolved directionality of that character is R. -+ */ -+ /* Note: this is implemented before L2 for efficiency */ -+ for(i=0; i<count; i++) -+ { -+ if((levels[i] % 2) == 1) -+ doMirror(&line[i]); -+ } -+ -+ -+ -+ /* Rule (L3) -+ * L3. Combining marks applied to a right-to-left base character will at -+ * this point precede their base character. If the rendering engine -+ * expects them to follow the base characters in the final display -+ * process, then the ordering of the marks and the base character must -+ * be reversed. -+ * Combining marks are reordered to the right of each character on an -+ * odd level. -+ */ -+ -+ if(fNSM && reorderCombining) -+ { -+ CHARTYPE temp; -+ int it; -+ for(i=0; i<count; i++) -+ { -+ if(GetType(GETCHAR(line, i)) == NSM && odd(levels[i])) -+ { -+ j=i; -+ while((++j < count) && (GetType(GETCHAR(line, j)) == NSM)); -+ j--; i--; -+ for(it=j; j>i; i++, j--) -+ { -+ temp = GETCHAR(line, i); -+ GETCHAR(line, i) = GETCHAR(line, j); -+ GETCHAR(line, j) = temp; -+ } -+ i=it+1; -+ } -+ } -+ } -+ -+ /* Shaping -+ * Shaping is Applied to each run of levels separately.... -+ */ -+ -+ if(applyShape) -+ { -+ -+ for(i=0; i<count; i++) -+ { -+ shapeTo[i] = GETCHAR(line, i); -+ } -+ -+ j=i=0; -+ while(j < count) -+ { -+ if(GetType(GETCHAR(line, j)) == AL) -+ { -+ if(j<count && j >= i ) -+ { -+ tempType = levels[j]; -+ i=j; -+ while((i++ < count) && (levels[i] == tempType)); -+ doShape(line, shapeTo, j, i); -+ j=i; -+ tempType = levels[j]; -+ -+ } -+ } -+ j++; -+ } -+ for(i=0; i<count; i++) -+ { -+ GETCHAR(line, i) = shapeTo[i]; -+ } -+ free(shapeTo); -+ } -+ -+ -+ -+ /* Rule (L2) -+ * L2. From the highest level found in the text to the lowest odd level on -+ * each line, including intermediate levels not actually present in the -+ * text, reverse any contiguous sequence of characters that are at that -+ * level or higher -+ */ -+ /* we flip the character string and leave the level array */ -+ imax = 0; -+ i=0; -+ tempType = levels[0]; -+ while(i < count) -+ { -+ if(levels[i] > tempType) -+ { -+ tempType = levels[i]; -+ imax=i; -+ } -+ i++; -+ } -+ /* maximum level in tempType, its index in imax. */ -+ while(tempType > 0) /* loop from highest level to the least odd, */ -+ { /* which i assume is 1 */ -+ flipThisRun(line, levels, tempType, count); -+ tempType--; -+ } -+ -+ /* The line should be reordered correctly, check for Explicits marks -+ * and remove them if removeMarks -+ */ -+ if(fX && removeMarks) -+ { -+ if(!GetParagraphLevel(line, count)) -+ { -+ for(i=0, j=0; i<count; i++) -+ { -+ tempType = GetType(GETCHAR(line, i)); -+ if(tempType != RLE && -+ tempType != LRE && -+ tempType != RLO && -+ tempType != LRO && -+ tempType != PDF) -+ GETCHAR(line, j++) = GETCHAR(line, i); -+ } -+ for(i=j; j<count; j++) -+ GETCHAR(line, j) = 0x20; -+ }else -+ { -+ for(j=i=count-1; i>=0; i--) -+ { -+ tempType = GetType(GETCHAR(line, i)); -+ if(tempType != RLE && -+ tempType != LRE && -+ tempType != RLO && -+ tempType != LRO && -+ tempType != PDF) -+ GETCHAR(line, j--) = GETCHAR(line, i); -+ } -+ for(i=j; j>=0; j--) -+ GETCHAR(line, j) = 0x20; -+ } -+ } -+ -+ -+ free(types); -+ free(levels); -+ /* if removeMarks is 1 and there were actual marks then return the new size */ -+ if(fX && removeMarks) return i; -+ return count; -+} -+ -+ -+/* -+ * Bad, Horrible function -+ * takes a pointer to a character that is checked for -+ * having a mirror glyph. -+ */ -+void doMirror(CHARTYPE* ch) -+{ -+ if ((*ch & 0xFF00) == 0) { -+ switch (*ch) { -+ case 0x0028: *ch = 0x0029; break; -+ case 0x0029: *ch = 0x0028; break; -+ case 0x003C: *ch = 0x003E; break; -+ case 0x003E: *ch = 0x003C; break; -+ case 0x005B: *ch = 0x005D; break; -+ case 0x005D: *ch = 0x005B; break; -+ case 0x007B: *ch = 0x007D; break; -+ case 0x007D: *ch = 0x007B; break; -+ case 0x00AB: *ch = 0x00BB; break; -+ case 0x00BB: *ch = 0x00AB; break; -+ } -+ } else if ((*ch & 0xFF00) == 0x2000) { -+ switch (*ch) { -+ case 0x2039: *ch = 0x203A; break; -+ case 0x203A: *ch = 0x2039; break; -+ case 0x2045: *ch = 0x2046; break; -+ case 0x2046: *ch = 0x2045; break; -+ case 0x207D: *ch = 0x207E; break; -+ case 0x207E: *ch = 0x207D; break; -+ case 0x208D: *ch = 0x208E; break; -+ case 0x208E: *ch = 0x208D; break; -+ } -+ } else if ((*ch & 0xFF00) == 0x2200) { -+ switch (*ch) { -+ case 0x2208: *ch = 0x220B; break; -+ case 0x2209: *ch = 0x220C; break; -+ case 0x220A: *ch = 0x220D; break; -+ case 0x220B: *ch = 0x2208; break; -+ case 0x220C: *ch = 0x2209; break; -+ case 0x220D: *ch = 0x220A; break; -+ case 0x2215: *ch = 0x29F5; break; -+ case 0x223C: *ch = 0x223D; break; -+ case 0x223D: *ch = 0x223C; break; -+ case 0x2243: *ch = 0x22CD; break; -+ case 0x2252: *ch = 0x2253; break; -+ case 0x2253: *ch = 0x2252; break; -+ case 0x2254: *ch = 0x2255; break; -+ case 0x2255: *ch = 0x2254; break; -+ case 0x2264: *ch = 0x2265; break; -+ case 0x2265: *ch = 0x2264; break; -+ case 0x2266: *ch = 0x2267; break; -+ case 0x2267: *ch = 0x2266; break; -+ case 0x2268: *ch = 0x2269; break; -+ case 0x2269: *ch = 0x2268; break; -+ case 0x226A: *ch = 0x226B; break; -+ case 0x226B: *ch = 0x226A; break; -+ case 0x226E: *ch = 0x226F; break; -+ case 0x226F: *ch = 0x226E; break; -+ case 0x2270: *ch = 0x2271; break; -+ case 0x2271: *ch = 0x2270; break; -+ case 0x2272: *ch = 0x2273; break; -+ case 0x2273: *ch = 0x2272; break; -+ case 0x2274: *ch = 0x2275; break; -+ case 0x2275: *ch = 0x2274; break; -+ case 0x2276: *ch = 0x2277; break; -+ case 0x2277: *ch = 0x2276; break; -+ case 0x2278: *ch = 0x2279; break; -+ case 0x2279: *ch = 0x2278; break; -+ case 0x227A: *ch = 0x227B; break; -+ case 0x227B: *ch = 0x227A; break; -+ case 0x227C: *ch = 0x227D; break; -+ case 0x227D: *ch = 0x227C; break; -+ case 0x227E: *ch = 0x227F; break; -+ case 0x227F: *ch = 0x227E; break; -+ case 0x2280: *ch = 0x2281; break; -+ case 0x2281: *ch = 0x2280; break; -+ case 0x2282: *ch = 0x2283; break; -+ case 0x2283: *ch = 0x2282; break; -+ case 0x2284: *ch = 0x2285; break; -+ case 0x2285: *ch = 0x2284; break; -+ case 0x2286: *ch = 0x2287; break; -+ case 0x2287: *ch = 0x2286; break; -+ case 0x2288: *ch = 0x2289; break; -+ case 0x2289: *ch = 0x2288; break; -+ case 0x228A: *ch = 0x228B; break; -+ case 0x228B: *ch = 0x228A; break; -+ case 0x228F: *ch = 0x2290; break; -+ case 0x2290: *ch = 0x228F; break; -+ case 0x2291: *ch = 0x2292; break; -+ case 0x2292: *ch = 0x2291; break; -+ case 0x2298: *ch = 0x29B8; break; -+ case 0x22A2: *ch = 0x22A3; break; -+ case 0x22A3: *ch = 0x22A2; break; -+ case 0x22A6: *ch = 0x2ADE; break; -+ case 0x22A8: *ch = 0x2AE4; break; -+ case 0x22A9: *ch = 0x2AE3; break; -+ case 0x22AB: *ch = 0x2AE5; break; -+ case 0x22B0: *ch = 0x22B1; break; -+ case 0x22B1: *ch = 0x22B0; break; -+ case 0x22B2: *ch = 0x22B3; break; -+ case 0x22B3: *ch = 0x22B2; break; -+ case 0x22B4: *ch = 0x22B5; break; -+ case 0x22B5: *ch = 0x22B4; break; -+ case 0x22B6: *ch = 0x22B7; break; -+ case 0x22B7: *ch = 0x22B6; break; -+ case 0x22C9: *ch = 0x22CA; break; -+ case 0x22CA: *ch = 0x22C9; break; -+ case 0x22CB: *ch = 0x22CC; break; -+ case 0x22CC: *ch = 0x22CB; break; -+ case 0x22CD: *ch = 0x2243; break; -+ case 0x22D0: *ch = 0x22D1; break; -+ case 0x22D1: *ch = 0x22D0; break; -+ case 0x22D6: *ch = 0x22D7; break; -+ case 0x22D7: *ch = 0x22D6; break; -+ case 0x22D8: *ch = 0x22D9; break; -+ case 0x22D9: *ch = 0x22D8; break; -+ case 0x22DA: *ch = 0x22DB; break; -+ case 0x22DB: *ch = 0x22DA; break; -+ case 0x22DC: *ch = 0x22DD; break; -+ case 0x22DD: *ch = 0x22DC; break; -+ case 0x22DE: *ch = 0x22DF; break; -+ case 0x22DF: *ch = 0x22DE; break; -+ case 0x22E0: *ch = 0x22E1; break; -+ case 0x22E1: *ch = 0x22E0; break; -+ case 0x22E2: *ch = 0x22E3; break; -+ case 0x22E3: *ch = 0x22E2; break; -+ case 0x22E4: *ch = 0x22E5; break; -+ case 0x22E5: *ch = 0x22E4; break; -+ case 0x22E6: *ch = 0x22E7; break; -+ case 0x22E7: *ch = 0x22E6; break; -+ case 0x22E8: *ch = 0x22E9; break; -+ case 0x22E9: *ch = 0x22E8; break; -+ case 0x22EA: *ch = 0x22EB; break; -+ case 0x22EB: *ch = 0x22EA; break; -+ case 0x22EC: *ch = 0x22ED; break; -+ case 0x22ED: *ch = 0x22EC; break; -+ case 0x22F0: *ch = 0x22F1; break; -+ case 0x22F1: *ch = 0x22F0; break; -+ case 0x22F2: *ch = 0x22FA; break; -+ case 0x22F3: *ch = 0x22FB; break; -+ case 0x22F4: *ch = 0x22FC; break; -+ case 0x22F6: *ch = 0x22FD; break; -+ case 0x22F7: *ch = 0x22FE; break; -+ case 0x22FA: *ch = 0x22F2; break; -+ case 0x22FB: *ch = 0x22F3; break; -+ case 0x22FC: *ch = 0x22F4; break; -+ case 0x22FD: *ch = 0x22F6; break; -+ case 0x22FE: *ch = 0x22F7; break; -+ } -+ } else if ((*ch & 0xFF00) == 0x2300) { -+ switch (*ch) { -+ case 0x2308: *ch = 0x2309; break; -+ case 0x2309: *ch = 0x2308; break; -+ case 0x230A: *ch = 0x230B; break; -+ case 0x230B: *ch = 0x230A; break; -+ case 0x2329: *ch = 0x232A; break; -+ case 0x232A: *ch = 0x2329; break; -+ } -+ } else if ((*ch & 0xFF00) == 0x2700) { -+ switch (*ch) { -+ case 0x2768: *ch = 0x2769; break; -+ case 0x2769: *ch = 0x2768; break; -+ case 0x276A: *ch = 0x276B; break; -+ case 0x276B: *ch = 0x276A; break; -+ case 0x276C: *ch = 0x276D; break; -+ case 0x276D: *ch = 0x276C; break; -+ case 0x276E: *ch = 0x276F; break; -+ case 0x276F: *ch = 0x276E; break; -+ case 0x2770: *ch = 0x2771; break; -+ case 0x2771: *ch = 0x2770; break; -+ case 0x2772: *ch = 0x2773; break; -+ case 0x2773: *ch = 0x2772; break; -+ case 0x2774: *ch = 0x2775; break; -+ case 0x2775: *ch = 0x2774; break; -+ case 0x27D5: *ch = 0x27D6; break; -+ case 0x27D6: *ch = 0x27D5; break; -+ case 0x27DD: *ch = 0x27DE; break; -+ case 0x27DE: *ch = 0x27DD; break; -+ case 0x27E2: *ch = 0x27E3; break; -+ case 0x27E3: *ch = 0x27E2; break; -+ case 0x27E4: *ch = 0x27E5; break; -+ case 0x27E5: *ch = 0x27E4; break; -+ case 0x27E6: *ch = 0x27E7; break; -+ case 0x27E7: *ch = 0x27E6; break; -+ case 0x27E8: *ch = 0x27E9; break; -+ case 0x27E9: *ch = 0x27E8; break; -+ case 0x27EA: *ch = 0x27EB; break; -+ case 0x27EB: *ch = 0x27EA; break; -+ } -+ } else if ((*ch & 0xFF00) == 0x2900) { -+ switch (*ch) { -+ case 0x2983: *ch = 0x2984; break; -+ case 0x2984: *ch = 0x2983; break; -+ case 0x2985: *ch = 0x2986; break; -+ case 0x2986: *ch = 0x2985; break; -+ case 0x2987: *ch = 0x2988; break; -+ case 0x2988: *ch = 0x2987; break; -+ case 0x2989: *ch = 0x298A; break; -+ case 0x298A: *ch = 0x2989; break; -+ case 0x298B: *ch = 0x298C; break; -+ case 0x298C: *ch = 0x298B; break; -+ case 0x298D: *ch = 0x2990; break; -+ case 0x298E: *ch = 0x298F; break; -+ case 0x298F: *ch = 0x298E; break; -+ case 0x2990: *ch = 0x298D; break; -+ case 0x2991: *ch = 0x2992; break; -+ case 0x2992: *ch = 0x2991; break; -+ case 0x2993: *ch = 0x2994; break; -+ case 0x2994: *ch = 0x2993; break; -+ case 0x2995: *ch = 0x2996; break; -+ case 0x2996: *ch = 0x2995; break; -+ case 0x2997: *ch = 0x2998; break; -+ case 0x2998: *ch = 0x2997; break; -+ case 0x29B8: *ch = 0x2298; break; -+ case 0x29C0: *ch = 0x29C1; break; -+ case 0x29C1: *ch = 0x29C0; break; -+ case 0x29C4: *ch = 0x29C5; break; -+ case 0x29C5: *ch = 0x29C4; break; -+ case 0x29CF: *ch = 0x29D0; break; -+ case 0x29D0: *ch = 0x29CF; break; -+ case 0x29D1: *ch = 0x29D2; break; -+ case 0x29D2: *ch = 0x29D1; break; -+ case 0x29D4: *ch = 0x29D5; break; -+ case 0x29D5: *ch = 0x29D4; break; -+ case 0x29D8: *ch = 0x29D9; break; -+ case 0x29D9: *ch = 0x29D8; break; -+ case 0x29DA: *ch = 0x29DB; break; -+ case 0x29DB: *ch = 0x29DA; break; -+ case 0x29F5: *ch = 0x2215; break; -+ case 0x29F8: *ch = 0x29F9; break; -+ case 0x29F9: *ch = 0x29F8; break; -+ case 0x29FC: *ch = 0x29FD; break; -+ case 0x29FD: *ch = 0x29FC; break; -+ } -+ } else if ((*ch & 0xFF00) == 0x2A00) { -+ switch (*ch) { -+ case 0x2A2B: *ch = 0x2A2C; break; -+ case 0x2A2C: *ch = 0x2A2B; break; -+ case 0x2A2D: *ch = 0x2A2C; break; -+ case 0x2A2E: *ch = 0x2A2D; break; -+ case 0x2A34: *ch = 0x2A35; break; -+ case 0x2A35: *ch = 0x2A34; break; -+ case 0x2A3C: *ch = 0x2A3D; break; -+ case 0x2A3D: *ch = 0x2A3C; break; -+ case 0x2A64: *ch = 0x2A65; break; -+ case 0x2A65: *ch = 0x2A64; break; -+ case 0x2A79: *ch = 0x2A7A; break; -+ case 0x2A7A: *ch = 0x2A79; break; -+ case 0x2A7D: *ch = 0x2A7E; break; -+ case 0x2A7E: *ch = 0x2A7D; break; -+ case 0x2A7F: *ch = 0x2A80; break; -+ case 0x2A80: *ch = 0x2A7F; break; -+ case 0x2A81: *ch = 0x2A82; break; -+ case 0x2A82: *ch = 0x2A81; break; -+ case 0x2A83: *ch = 0x2A84; break; -+ case 0x2A84: *ch = 0x2A83; break; -+ case 0x2A8B: *ch = 0x2A8C; break; -+ case 0x2A8C: *ch = 0x2A8B; break; -+ case 0x2A91: *ch = 0x2A92; break; -+ case 0x2A92: *ch = 0x2A91; break; -+ case 0x2A93: *ch = 0x2A94; break; -+ case 0x2A94: *ch = 0x2A93; break; -+ case 0x2A95: *ch = 0x2A96; break; -+ case 0x2A96: *ch = 0x2A95; break; -+ case 0x2A97: *ch = 0x2A98; break; -+ case 0x2A98: *ch = 0x2A97; break; -+ case 0x2A99: *ch = 0x2A9A; break; -+ case 0x2A9A: *ch = 0x2A99; break; -+ case 0x2A9B: *ch = 0x2A9C; break; -+ case 0x2A9C: *ch = 0x2A9B; break; -+ case 0x2AA1: *ch = 0x2AA2; break; -+ case 0x2AA2: *ch = 0x2AA1; break; -+ case 0x2AA6: *ch = 0x2AA7; break; -+ case 0x2AA7: *ch = 0x2AA6; break; -+ case 0x2AA8: *ch = 0x2AA9; break; -+ case 0x2AA9: *ch = 0x2AA8; break; -+ case 0x2AAA: *ch = 0x2AAB; break; -+ case 0x2AAB: *ch = 0x2AAA; break; -+ case 0x2AAC: *ch = 0x2AAD; break; -+ case 0x2AAD: *ch = 0x2AAC; break; -+ case 0x2AAF: *ch = 0x2AB0; break; -+ case 0x2AB0: *ch = 0x2AAF; break; -+ case 0x2AB3: *ch = 0x2AB4; break; -+ case 0x2AB4: *ch = 0x2AB3; break; -+ case 0x2ABB: *ch = 0x2ABC; break; -+ case 0x2ABC: *ch = 0x2ABB; break; -+ case 0x2ABD: *ch = 0x2ABE; break; -+ case 0x2ABE: *ch = 0x2ABD; break; -+ case 0x2ABF: *ch = 0x2AC0; break; -+ case 0x2AC0: *ch = 0x2ABF; break; -+ case 0x2AC1: *ch = 0x2AC2; break; -+ case 0x2AC2: *ch = 0x2AC1; break; -+ case 0x2AC3: *ch = 0x2AC4; break; -+ case 0x2AC4: *ch = 0x2AC3; break; -+ case 0x2AC5: *ch = 0x2AC6; break; -+ case 0x2AC6: *ch = 0x2AC5; break; -+ case 0x2ACD: *ch = 0x2ACE; break; -+ case 0x2ACE: *ch = 0x2ACD; break; -+ case 0x2ACF: *ch = 0x2AD0; break; -+ case 0x2AD0: *ch = 0x2ACF; break; -+ case 0x2AD1: *ch = 0x2AD2; break; -+ case 0x2AD2: *ch = 0x2AD1; break; -+ case 0x2AD3: *ch = 0x2AD4; break; -+ case 0x2AD4: *ch = 0x2AD3; break; -+ case 0x2AD5: *ch = 0x2AD6; break; -+ case 0x2AD6: *ch = 0x2AD5; break; -+ case 0x2ADE: *ch = 0x22A6; break; -+ case 0x2AE3: *ch = 0x22A9; break; -+ case 0x2AE4: *ch = 0x22A8; break; -+ case 0x2AE5: *ch = 0x22AB; break; -+ case 0x2AEC: *ch = 0x2AED; break; -+ case 0x2AED: *ch = 0x2AEC; break; -+ case 0x2AF7: *ch = 0x2AF8; break; -+ case 0x2AF8: *ch = 0x2AF7; break; -+ case 0x2AF9: *ch = 0x2AFA; break; -+ case 0x2AFA: *ch = 0x2AF9; break; -+ } -+ } else if ((*ch & 0xFF00) == 0x3000) { -+ switch (*ch) { -+ case 0x3008: *ch = 0x3009; break; -+ case 0x3009: *ch = 0x3008; break; -+ case 0x300A: *ch = 0x300B; break; -+ case 0x300B: *ch = 0x300A; break; -+ case 0x300C: *ch = 0x300D; break; -+ case 0x300D: *ch = 0x300C; break; -+ case 0x300E: *ch = 0x300F; break; -+ case 0x300F: *ch = 0x300E; break; -+ case 0x3010: *ch = 0x3011; break; -+ case 0x3011: *ch = 0x3010; break; -+ case 0x3014: *ch = 0x3015; break; -+ case 0x3015: *ch = 0x3014; break; -+ case 0x3016: *ch = 0x3017; break; -+ case 0x3017: *ch = 0x3016; break; -+ case 0x3018: *ch = 0x3019; break; -+ case 0x3019: *ch = 0x3018; break; -+ case 0x301A: *ch = 0x301B; break; -+ case 0x301B: *ch = 0x301A; break; -+ } -+ } else if ((*ch & 0xFF00) == 0xFF00) { -+ switch (*ch) { -+ case 0xFF08: *ch = 0xFF09; break; -+ case 0xFF09: *ch = 0xFF08; break; -+ case 0xFF1C: *ch = 0xFF1E; break; -+ case 0xFF1E: *ch = 0xFF1C; break; -+ case 0xFF3B: *ch = 0xFF3D; break; -+ case 0xFF3D: *ch = 0xFF3B; break; -+ case 0xFF5B: *ch = 0xFF5D; break; -+ case 0xFF5D: *ch = 0xFF5B; break; -+ case 0xFF5F: *ch = 0xFF60; break; -+ case 0xFF60: *ch = 0xFF5F; break; -+ case 0xFF62: *ch = 0xFF63; break; -+ case 0xFF63: *ch = 0xFF62; break; -+ } -+ } -+} -Index: qt-2.3.10-snapshot-20060120/src/qt.pro -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/qt.pro 2005-12-15 00:03:32.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/qt.pro 2006-01-20 21:09:56.404899280 +0100 -@@ -178,6 +178,7 @@ - $$KERNEL_H/qasyncimageio.h \ - $$KERNEL_H/qasyncio.h \ - $$KERNEL_H/qbitmap.h \ -+ $$KERNEL_H/qbidi.h \ - $$KERNEL_H/qbrush.h \ - $$KERNEL_H/qclipboard.h \ - $$KERNEL_H/qcolor.h \ -@@ -524,6 +525,8 @@ - kernel/qapplication.cpp \ - kernel/qasyncimageio.cpp \ - kernel/qasyncio.cpp \ -+ kernel/qbidi.cpp \ -+ kernel/minibidi.cpp \ - kernel/qbitmap.cpp \ - kernel/qclipboard.cpp \ - kernel/qcolor.cpp \ -Index: qt-2.3.10-snapshot-20060120/src/Makefile.in -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/Makefile.in 2006-01-20 20:57:33.109897296 +0100 -+++ qt-2.3.10-snapshot-20060120/src/Makefile.in 2006-01-20 21:09:56.409898520 +0100 -@@ -176,6 +176,8 @@ - kernel/qabstractlayout.o \ - kernel/qaccel.o \ - kernel/qapplication.o \ -+ kernel/qbidi.o \ -+ kernel/minibidi.o \ - kernel/qasyncimageio.o \ - kernel/qasyncio.o \ - kernel/qbitmap.o \ -@@ -4235,6 +4237,12 @@ - kernel/qthread.h \ - tools/qvaluestack.h - -+kernel/qbidi.o: kernel/qbidi.cpp \ -+ kernel/qbidi.h \ -+ tools/qstring.h -+ -+kernel/minibidi.o: kernel/minibidi.c -+ - kernel/qasyncimageio.o: kernel/qasyncimageio.cpp \ - kernel/qasyncimageio.h \ - kernel/qimage.h \ diff --git a/packages/qte/qte-2.3.12/c700-hardware.patch b/packages/qte/qte-2.3.12/c700-hardware.patch deleted file mode 100644 index a4ba2654dc..0000000000 --- a/packages/qte/qte-2.3.12/c700-hardware.patch +++ /dev/null @@ -1,114 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - -Index: qt-2.3.10-snapshot-20060120/src/kernel/qwindowsystem_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qwindowsystem_qws.cpp 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qwindowsystem_qws.cpp 2006-01-20 21:27:28.283989352 +0100 -@@ -178,7 +178,7 @@ - static QRect maxwindow_rect; - extern Q_EXPORT QRect qt_maxWindowRect; - static const char *defaultMouse = --#if defined(QT_QWS_CASSIOPEIA) || defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_YOPY) || defined(QWS_CUSTOMTOUCHPANEL) -+#if defined(QT_QWS_CASSIOPEIA) || defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_SLC700) || defined(QT_QWS_YOPY) || defined(QWS_CUSTOMTOUCHPANEL) - "TPanel" - #elif defined(QT_KEYPAD_MODE) - "None" -@@ -3324,7 +3324,7 @@ - void QWSServer::screenSaverSleep() - { - qt_screen->blank(TRUE); --#if !defined(QT_QWS_IPAQ) && !defined(QT_QWS_SL5XXX) -+#if !defined(QT_QWS_IPAQ) && !defined(QT_QWS_SL5XXX) && !defined(QT_QWS_SLC700) - d->screensavertimer->stop(); - #else - if ( screensaverinterval ) { -Index: qt-2.3.10-snapshot-20060120/src/kernel/qwsmouse_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qwsmouse_qws.cpp 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qwsmouse_qws.cpp 2006-01-20 21:28:39.035233528 +0100 -@@ -87,6 +87,19 @@ - #define QT_QWS_TP_PRESSURE_THRESHOLD 500 - #define QT_QWS_TP_MOVE_LIMIT 50 - #define QT_QWS_TP_JITTER_LIMIT 2 -+#elif defined(QT_QWS_SLC700) -+#define QT_QWS_SLC700_RAW -+typedef struct { -+ unsigned short pressure; -+ unsigned short x; -+ unsigned short y; -+ unsigned short millisecs; -+} TS_EVENT; -+#define QT_QWS_TP_SAMPLE_SIZE 10 -+#define QT_QWS_TP_MINIMUM_SAMPLES 4 -+#define QT_QWS_TP_PRESSURE_THRESHOLD 500 -+#define QT_QWS_TP_MOVE_LIMIT 50 -+#define QT_QWS_TP_JITTER_LIMIT 2 - #endif - - #ifndef QT_QWS_TP_SAMPLE_SIZE -@@ -592,7 +605,7 @@ - sub[nsub++] = new QAutoMouseSubHandler_intellimouse(fd); - notify(fd); - } --#if !defined(QT_QWS_IPAQ) && !defined(QT_QWS_SL5XXX) && !defined(QT_QWS_K2) -+#if !defined(QT_QWS_IPAQ) && !defined(QT_QWS_SL5XXX) && !defined(QT_QWS_K2) && !defined(QT_QWS_SLC700) - char fn[] = "/dev/ttyS?"; - for (int ch='0'; ch<='3'; ch++) { - fn[9] = ch; -@@ -1274,7 +1287,7 @@ - numSamples(0), skipCount(0) - { - mouseFD = -1; --#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_K2) -+#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_K2) || defined(QT_QWS_SLC700) - if ( dev.isEmpty() ) - #if defined(QT_QWS_IPAQ) - #ifdef QT_QWS_IPAQ_RAW -@@ -1283,7 +1296,7 @@ - dev = "/dev/h3600_ts"; - #endif - --#elif defined(QT_QWS_SL5XXX) || defined(QT_QWS_K2) -+#elif defined(QT_QWS_SL5XXX) || defined(QT_QWS_K2) || defined(QT_QWS_SLC700) - //# ifdef QT_QWS_SL5XXX_TSRAW - # if 0 - dev = "/dev/tsraw"; -@@ -1309,7 +1322,7 @@ - - QTPanelHandlerPrivate::~QTPanelHandlerPrivate() - { --#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_K2) -+#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_K2) || defined(QT_QWS_SLC700) - if (mouseFD >= 0) - close(mouseFD); - #endif -@@ -1317,7 +1330,7 @@ - - void QTPanelHandlerPrivate::readMouseData() - { --#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_K2) -+#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_K2) || defined(QT_QWS_SLC700) - if(!qt_screen) - return; - -@@ -1336,7 +1349,7 @@ - uchar *mb = mouseBuf+idx; - data = (TS_EVENT *) mb; - if(data->pressure >= QT_QWS_TP_PRESSURE_THRESHOLD) { --#ifdef QT_QWS_SL5XXX -+#if defined(QT_QWS_SL5XXX) || defined(QT_QWS_SLC700) - samples[currSample] = QPoint( 1000 - data->x, data->y ); - #else - samples[currSample] = QPoint( data->x, data->y ); -@@ -2017,7 +2030,7 @@ - handler = new QTSLibHandlerPrivate(mouseProtocol,mouseDev); - #elif defined(QT_QWS_YOPY) - handler = new QYopyTPanelHandlerPrivate(mouseProtocol,mouseDev); --#elif defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_K2) -+#elif defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_K2) || defined(QT_QWS_SLC700) - handler = new QTPanelHandlerPrivate(mouseProtocol,mouseDev); - #elif defined(QT_QWS_CASSIOPEIA) - handler = new QVrTPanelHandlerPrivate( mouseProtocol, mouseDev ); diff --git a/packages/qte/qte-2.3.12/c7x0-w100-accel.patch b/packages/qte/qte-2.3.12/c7x0-w100-accel.patch deleted file mode 100644 index 06a723447c..0000000000 --- a/packages/qte/qte-2.3.12/c7x0-w100-accel.patch +++ /dev/null @@ -1,3414 +0,0 @@ -ATI IMAGEON (W100) Accelerated support -Manuel Teira <manuel.teira@telefonica.net> - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - -Index: qt-2.3.10-snapshot-20060120/configure -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/configure 2006-01-20 21:15:58.395868288 +0100 -+++ qt-2.3.10-snapshot-20060120/configure 2006-01-20 21:17:39.451505496 +0100 -@@ -366,6 +366,9 @@ - -accel-matrox) - QWS_ACCEL_MATROX=y - ;; -+ -accel-w100) -+ QWS_ACCEL_W100=y -+ ;; - -qvfb) - QWS_QVFB=y - ;; -@@ -767,6 +770,10 @@ - then - QT_CXX="$QT_CXX -DQT_NO_QWS_MATROX" - fi -+if [ -z "$QWS_ACCEL_W100" -a -n "$EMB" ] -+then -+ QT_CXX="$QT_CXX -DQT_NO_QWS_W100" -+fi - if [ -z "$QWS_VNC" -a -n "$EMB" ] - then - QT_CXX="$QT_CXX -DQT_NO_QWS_VNC" -@@ -1398,6 +1405,7 @@ - -accel-voodoo3 ..... Enable Voodoo3 acceleration. - -accel-mach64 ...... Enable Mach64 acceleration. - -accel-matrox ...... Enable Matrox MGA acceleration. -+ -accel-w100 ........ Enable ATI Imageon w100 acceleration (experimental). - -qvfb .............. Enable X11-based Qt Virtual Frame Buffer. - -vnc ............... Enable VNC server (requires network module). - -@@ -1522,6 +1530,7 @@ - [ "x$JPEG" = "xyes" ] && QT_LIBS="${QT_LIBS} -ljpeg" - [ "x$MNG" = "xyes" ] && QT_LIBS="${QT_LIBS} -lmng -ljpeg" # assume JNG support - [ "x$NAS_SOUND" = "xyes" ] && QT_LIBS="${QT_LIBS} -laudio -lXt" # Xt junk in audio library -+[ "x$QWS_ACCEL_W100" = "xy" ] && QT_LIBS="${QT_LIBS} -laticore" # Aticore W100 support - QT_LIBS="$L_FLAGS $R_FLAGS $QT_LIBS $l_FLAGS" - - -Index: qt-2.3.10-snapshot-20060120/src/kernel/qgfxraster_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qgfxraster_qws.cpp 2006-01-20 21:09:56.399900040 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qgfxraster_qws.cpp 2006-01-20 21:17:39.454505040 +0100 -@@ -2699,7 +2699,6 @@ - } - #endif - // Bresenham algorithm from Graphics Gems -- - int ax=QABS(dx)*2; - int ay=QABS(dy)*2; - int sy=dy>0 ? 1 : -1; -@@ -5984,6 +5983,10 @@ - # include "qgfxmatrox_qws.cpp" - #endif - -+#if !defined(QT_NO_QWS_W100) -+# include "qgfxw100_qws.cpp" -+#endif -+ - #if !defined(QT_NO_QWS_VFB) - # include "qgfxvfb_qws.cpp" - #endif -@@ -6038,6 +6041,9 @@ - #if !defined(QT_NO_QWS_MATROX) - { "Matrox", qt_get_screen_matrox, 1 }, - #endif -+#if !defined(QT_NO_QWS_W100) -+ { "W100", qt_get_screen_w100, 1 }, -+#endif - #if !defined(QT_NO_QWS_TRANSFORMED) - { "Transformed", qt_get_screen_transformed, 0 }, - #endif -@@ -6078,6 +6084,8 @@ - qt_screen = driverTable[i].qt_get_screen( display_id ); - if ( qt_screen ) { - if ( qt_screen->connect( spec ) ) { -+ printf( "[%d]:Connected to screen '%s'\n", -+ getpid(), driverTable[i].name ); - return qt_screen; - } else { - delete qt_screen; -Index: qt-2.3.10-snapshot-20060120/src/3rdparty/kernel/aticore/aticore.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ qt-2.3.10-snapshot-20060120/src/3rdparty/kernel/aticore/aticore.h 2006-01-20 21:17:39.455504888 +0100 -@@ -0,0 +1,574 @@ -+/* -+ * AtiCore 2D acceleration API -+ * -+ */ -+ -+#include <inttypes.h> -+#include <sys/types.h> -+ -+#ifndef __W100API_H__ -+#define __W100API_H__ -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+#define SolidRop_GXclear 0x00 /* 0 */ -+#define SolidRop_GXand 0xa0 /* src AND dst */ -+#define SolidRop_GXandReverse 0x50 /* src AND NOT dst */ -+#define SolidRop_GXcopy 0xf0 /* src */ -+#define SolidRop_GXandInverted 0x0a /* NOT src AND dst */ -+#define SolidRop_GXnoop 0xaa /* dst */ -+#define SolidRop_GXxor 0x5a /* src XOR dst */ -+#define SolidRop_GXor 0xfa /* src OR dst */ -+#define SolidRop_GXnor 0x05 /* NOT src AND NOT dst */ -+#define SolidRop_GXequiv 0xa5 /* NOT src XOR dst */ -+#define SolidRop_GXinvert 0x55 /* NOT dst */ -+#define SolidRop_GXorReverse 0xf5 /* src OR NOT dst */ -+#define SolidRop_GXcopyInverted 0x0f /* NOT src */ -+#define SolidRop_GXorInverted 0xaf /* NOT src OR dst */ -+#define SolidRop_GXnand 0x5f /* NOT src OR NOT dst */ -+#define SolidRop_GXset 0xff /* 1 */ -+ -+#define BltRop_GXclear 0x00 /* 0 */ -+#define BltRop_GXand 0x88 /* src AND dst */ -+#define BltRop_GXandReverse 0x44 /* src AND NOT dst */ -+#define BltRop_GXcopy 0xcc /* src */ -+#define BltRop_GXandInverted 0x22 /* NOT src AND dst */ -+#define BltRop_GXnoop 0xaa /* dst */ -+#define BltRop_GXxor 0x66 /* src XOR dst */ -+#define BltRop_GXor 0xee /* src OR dst */ -+#define BltRop_GXnor 0x11 /* NOT src AND NOT dst */ -+#define BltRop_GXequiv 0x99 /* NOT src XOR dst */ -+#define BltRop_GXinvert 0x55 /* NOT dst */ -+#define BltRop_GXorReverse 0xdd /* src OR NOT dst */ -+#define BltRop_GXcopyInverted 0x33 /* NOT src */ -+#define BltRop_GXorInverted 0xbb /* NOT src OR dst */ -+#define BltRop_GXnand 0x77 /* NOT src OR NOT dst */ -+#define BltRop_GXset 0xff /* 1 */ -+ -+#define DSTTYPE_8BPP 2 //8bpp -+#define DSTTYPE_16BPP_1555 3 //16 bpp aRGB 1555 -+#define DSTTYPE_16BPP_444 5 //16 bpp aRGB 4444 -+ -+#define SRCTYPE_1BPP_OPA 0 //mono (expanded to frgd, bkgd) -+#define SRCTYPE_1BPP_TRA 1 //mono (expanded to frgd, leave_alone) -+#define SRCTYPE_EQU_DST 3 //color (same as DST) -+#define SRCTYPE_SOLID_COLOR_BLT 4 //solid color for Blt (use frgd) -+#define SRCTYPE_4BPP 5 //4 bpp -+#define SRCTYPE_12BPP_PACKED 6 //12 bpp packed -+ -+#define ROP3_SRCCOPY 0xcc -+#define ROP3_PATCOPY 0xf0 -+ -+#define OVLTYPE_YUV420 7 -+#define OVLTYPE_RGB565 8 -+ -+#define DP_BRUSH_8x8MONOOPA 0 //8x8 mono pattern (expanded to frgd, bkgd ) -+#define DP_BRUSH_8x8MONOTRA 1 //8x8 mono pattern (expanded to frgd, leave alone ) -+#define DP_PEN_32x1MONOOPA 6 //32x1 mono pattern (expanded to frgd, bkgd) -+#define DP_PEN_32x1MONOTRA 7 //32x1 mono pattern (expanded to frgd, leave alone) -+#define DP_BRUSH_8x8COLOR 10 //8x8 color pattern -+#define DP_BRUSH_SOLIDCOLOR 13 //solid color pattern (frgd) -+#define DB_BRUSH_NONE 15 //No brush used -+ -+ typedef struct { -+ int16_t XCoord; -+ int16_t YCoord; -+ } ATI_POINT; -+ -+ typedef struct { -+ int16_t XCoord; -+ int16_t YCoord; -+ int16_t Width; -+ int16_t Height; -+ } ATI_RECT; -+ -+ typedef struct { -+ int16_t X_Top_Left; // x coordinate of top left corner -+ int16_t Y_Top_Left; // y coordinate of top left corner -+ int16_t X_Bottom_Right; // x coordinate of bottom right corner -+ int16_t Y_Bottom_Right; // y coordinate of bottom right corner -+ } ATI_CLIPRECT; -+ -+ typedef struct { -+ uint32_t Count; -+ uint8_t ScaleXFactor; -+ uint8_t ScaleYFactor; -+ uint8_t BlendOn; -+ uint8_t dummy1; -+ } ATI_STRETCH; -+ -+ typedef struct { -+ uint32_t *lpSrcBitmap; /* ¥µ¡¼¥Õ¥§¥¹¤Î¥ª¥Õ¥»¥Ã¥È */ -+ uint16_t XCoord; /* +4 ³ÎÄê:¥µ¡¼¥Õ¥§¥¹Æâ¤ÎxºÂɸ */ -+ uint16_t YCoord; /* +6 ³ÎÄê:¥µ¡¼¥Õ¥§¥¹Æâ¤ÎyºÂɸ */ -+ uint16_t SrcPitch; /* +8 ³ÎÄê: */ -+ uint16_t SrcHeight; /* +10 ³ÎÄê: */ -+ uint16_t OverlayWidth; /* ¥ª¡¼¥Ð¥ì¥¤¤ÎÉý(Src¤È°ã¤¦Ãͤˤ·¤Æ¤â¡¢Æ°Åª¤Ë³ÈÂç½Ì¾®¤µ¤ì¤¿¤ê¤Ï¤·¤Ê¤¤¡¢°ÕÌ£¤¢¤ó¤Î¡©) */ -+ uint16_t OverlayHeight; -+ uint32_t lpOverlayKey; /* +16 ³ÎÄê:Ææ(¥«¥é¡¼¥¡¼¡©) */ -+ uint8_t OverlayFormat; /* +20 ³ÎÄê */ -+ uint8_t dummy1; -+ uint16_t dummy2; -+ } ATI_OVERLAYPROP; /* 24bytes? */ -+ -+ typedef struct { -+ int HInvert; -+ int VInvert; -+ } ATI_EXTVIDEOPROP; -+ -+ typedef struct { -+ ATI_EXTVIDEOPROP ExtVideoProp; -+ } ATI_UNKNOWN1; -+ -+ typedef struct { -+ unsigned long clr_cmp_fcn_src :3; -+ unsigned long :5; -+ unsigned long clr_cmp_fcn_dst :3; -+ unsigned long :13; -+ unsigned long clr_cmp_src :2; -+ unsigned long :6; -+ } clr_cmp_cntl_t; -+ -+ typedef struct { -+ uint16_t x; -+ uint16_t y; -+ uint16_t w; -+ uint16_t h; -+ clr_cmp_cntl_t cmp_cntl; -+ unsigned long tcolour; -+ } transbitblt_t; -+ -+ typedef struct { -+ uint32_t dummy1; -+ uint32_t dummy2; -+ uint8_t HExpansion; /* +8 ³ÎÄê */ -+ uint8_t VExpansion; /* +9 ³ÎÄê */ -+ uint8_t dummy3; -+ uint8_t dummy4; -+ uint8_t RConversion; /* +12 ³ÎÄê */ -+ uint8_t dummy5; -+ uint8_t dummy6; -+ uint8_t dummy7; -+ ATI_UNKNOWN1 x; -+ } ATI_EXTENDEDOVERLAYPROP; /* 16byte? */ -+ -+ /** -+ * AtiCore initialization. -+ * Sets up the shared memory area -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_ProcessAttach( void ); -+ -+ /** -+ * AtiCore finish. -+ * -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_ProcessDetach( void ); -+ -+ -+ /** -+ * Allocates a surface on the internal RAM. -+ * Perhaps there's a way to indicate to allocate on the -+ * internal RAM? -+ * @arg handle Reference to the returned surface handle -+ * @arg offset Returned offset of this surface on the video memory -+ * @arg size Size (bytes) to be reserved (16 multiple) -+ * @arg direction -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_AllocateSurface( uint16_t *handle, uint32_t *offset, -+ uint32_t size, uint32_t direction ); -+ -+ /** -+ * Deallocates a given surface. -+ * @arg handle Handle to the allocated surface -+ * (As returned by AllocateSurface) -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_DestroySurface( uint16_t handle ); -+ -+ /** -+ * Sets the kind of Raster Operation. -+ * @param rop Raster operation to be performed -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_SetRopOperation( uint32_t rop ); -+ -+ /** -+ * Sets the destination type for raster operation. -+ * @param dsttype -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_SetDstType( uint32_t dsttype ); -+ -+ /** -+ * Sets the source type for raster operation. -+ * @param srctype -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_SetSrcType( uint32_t srctype ); -+ -+ /** -+ * Sets Source clipping rectangle. -+ * @param cliprect Rectangle to perform clipping. -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_SetSrcClippingRect( ATI_CLIPRECT *cliprect ); -+ -+ /** -+ * Sets Destination clipping rectangle. -+ * @param cliprect Rectangle to perform clipping. -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_SetDstClippingRect(ATI_CLIPRECT *cliprect); -+ -+ /** -+ * Sets pitch and offset for source in a raster operation. -+ * @param pitch Pitch (line width) of source -+ * @param offset Offset of source -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_SetSrcPitchOffset( int pitch, int offset ); -+ -+ /** -+ * Sets pitch and offset destination source in a raster operation. -+ * @param pitch Pitch (line width) of destination -+ * @param offset Offset of destination (memory offset) -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_SetDstPitchOffset( int pitch, int offset ); -+ -+ /** -+ * Performs a BitBlt with source rotation. -+ * @param flags Rotation degree -+ * @param dstRect Rectangle for destination Bitblitting -+ * @param srcRect Rectangle for origin bitblitting -+ * @test Tested with specified flags parameter -+ */ -+ int AtiCore_BitBltFilpRotate( int flags, -+ ATI_RECT *dstRect, -+ ATI_RECT *srcRect); -+ -+ /** -+ * Performs a BitBlt with source stretching. -+ * @param option Unknown -+ * @param point Unknown -+ * @param srcRect Source blitting surface -+ * @test Untested -+ */ -+ int AtiCore_StretchBlt( ATI_STRETCH *option, -+ ATI_POINT *point, -+ ATI_RECT *srcRect); -+ -+ /** -+ * Waits for the FIFO to be idle at least msecs. -+ * @param msecs Maximum time to wait for FIFO to idle -+ * @return 1:success, 0:fail -+ * @test Untested -+ */ -+ int AtiCore_WaitComplete( int msec ); -+ -+ /** -+ * Allocates a new overlay handle. -+ * @param handle overlay -+ * @return 1:success, 0:fail -+ * @test Yes -+ */ -+ int AtiCore_AllocOverlay( uint16_t *handle ); -+ -+ /** -+ * Deallocates a overlay handle. -+ * @param handle overlay -+ * @return 1:success, 0:fail -+ * @test Yes -+ */ -+ int AtiCore_ReleaseOverlay( uint16_t handle ); -+ -+ /** -+ * Sets up an overlay given a handle an a set of properties. -+ * @param handle Allocated handle to setup the overlay. -+ * @param props Overlay properties struct -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_SetupOverlay( uint16_t handle, ATI_OVERLAYPROP *props ); -+ -+ /** -+ * Sets up extended overlay features. -+ * @param handle Allocated handle to an overlay -+ * @param props Extended overlay properties -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_SetupOverlayExtended( uint16_t handle, -+ ATI_EXTENDEDOVERLAYPROP *props ); -+ -+ /** -+ * Enable/Disable an overlayed surface. -+ * @param handle Overlay to be enabled/disabled -+ * @param enable 1: Enable, 0: Disable -+ * @return 1:success, 0:fail -+ * @test Tested -+ */ -+ int AtiCore_SetOverlayOnOff( uint16_t handle, int enable ); -+ -+ /** -+ * Sets up the overlay position for a given handle. -+ * @param handle Overlay Handle -+ * @param x X Coordinate (Seems to be a bug with x < 4 ) -+ * @param y Y Coordinate -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_SetOverlayPos( uint16_t handle, -+ uint16_t x, -+ uint16_t y ); -+ -+ /** -+ * Translates between physical/virtual addresses. -+ * @param offset VRAM offset to be translated -+ * @param viraddr Virtual address for VRAM -+ * @return 1:success,0:fail -+ */ -+ int AtiCore_SetupMemoryTransfer( uint32_t offset, -+ uint32_t *viraddr ); -+ -+ /** -+ * Related with the previous one. It seems to be necesary to be called -+ * but I'm not sure of its function. -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_TerminateMemoryTransfer( void ); -+ -+ /** -+ * Returns the frontbuffer pitch and offset. -+ * @param pitch Return value for the frontbuffer pitch (width) -+ * @param offset Return value for the frontbuffer offset -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_GetFrontBufferPitchOffset( uint32_t *pitch, -+ uint32_t *offset ); -+ -+ /** -+ * Changes display brighness ? -+ * @param brightness -64...63 -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_SetDisplayBrightness( int brightness ); -+ -+ /** -+ * Returns the amount of available internal/external memory. -+ * @param internal Pointer to return internal memory size -+ * @param external Pointer to return external memory size -+ * @return 1:success, 0:fail -+ */ -+ int GetAvailableVideoMem( uint32_t *internal, -+ uint32_t *external ); -+ -+/** -+ * -+ * -+ * -+ -+ { -+ (uint32_t) 0 -+ (uint32_t) 0 -+ (uint16_t) 480 -+ (uint16_t) 640 -+ (uint16_t) 480 -+ (uint16_t) 640 -+ (uint32_t) 5 -+ */ -+ -+ typedef struct { -+ uint32_t dummy1; -+ ATI_RECT Size; -+ uint16_t Width; -+ uint16_t Height; -+ uint32_t Flag; -+ } ATI_GRAPHICWINDOW; -+ -+ int AtiCore_SetupGraphicWindow(void* ); -+ -+ /** -+ * It seems to be necessary after AtiCore_ProcessAttach -+ * @param mode: 0xaaab for portrait, 0xaaaa for landscape -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_ProcessAttachSpecialMode( int mode ); -+ -+ /** -+ * Detach from the special mode. Whatever it means. -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_ProcessDetachSpecialMode( void ); -+ -+ /** -+ * Sets up the position of the Graphic viewport ? -+ * @param x X coordinate -+ * @param y Y coordinate -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_SetGraphicWindowPos( int x, int y ); -+ -+ /** -+ * Get the graphic viewport position. -+ * @param x Pointer to xcoord placeholder -+ * @param y Pointer to ycoord placeholder -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_GetGraphicWindowPos( int *x, int *y ); -+ -+ /** -+ * Sets up the frontbuffer position. -+ * @param offset VRAM offset to be used. -+ * @param x X Coordinate? -+ * @param y Y Coordinate? -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_SetFrontBuffer( int offset, int x, int y ); -+ -+ /** -+ * Enable/Disable the frontbuffer? -+ * @param enable 1 enables/ 0 disables -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_SetGraphicWindowOnOff( int enable ); -+ -+ /* -+ * Sets the foreground color. -+ * @param colour Color in 565 format (perhaps depends on the source format) -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_SetFrgColour( int colour ); -+ -+ /* -+ * Sets the background colour. -+ * @param colour Colour in 565 format (perhaps depends on the source format) -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_SetBkgColour( int colour ); -+ -+ /** -+ * Changes the painting brush -+ * @param btype Type of brush to use -+ * 4: Uses the pattern -+ * 6: SolidLine -+ * @param pattern Pointer to a 32 bit pattern -+ * @return 1:success, 0:fail -+ * @test Some values for btype produces a kind of antialiasing line -+ */ -+ int AtiCore_BrushType( int btype, unsigned int *pattern ); -+ -+ /** -+ * Performs a rectangle paint. -+ * @param nrects Number of rectangles to be painted -+ * @param rects Array of rectangles to be painted -+ * @return 1:success, 0:fail -+ * @test Tested with nrects==1 -+ */ -+ int AtiCore_PaintRect( int nrects , -+ ATI_RECT rects[] ); -+ -+ /** -+ * Draws a set of lines. -+ * @param npoints Number of points in the polyline set -+ * @param points Pointer to an array of ATI_POINT -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_Polyline( int npoints, ATI_POINT points[] ); -+ -+ int AtiCore_GetPitchOffsetProperty( void *, void *); -+ -+ int AtiCore_CursorOnOff( int, int ); -+ -+ /** -+ * Performs a BitBlt ROP operation. -+ * @param unk Unknown (Always set to 1) -+ * @param dstrect Bounding destination rect -+ * @param srcrect Bounding source rect -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_BitBlt( int unk, -+ ATI_RECT *dstrect, -+ ATI_RECT *srcrect ); -+ -+ /** -+ * Performs a Transparent BitBlt ROP operation. -+ * @param dstrect Transparent DstRect bitblt argument -+ * @param srcrect Transparent SrcRect bitblt argument -+ * @return 1:success, 0:fail -+ * @test Doesn't work. It sets to zero CLR_CMP_CNTL and CLR_CMP_MSK -+ */ -+ int AtiCore_TransBitBlt( transbitblt_t *dstrect, -+ transbitblt_t *srcrect ); -+ -+ int AtiCore_WakeUpCall( void ); -+ -+ /** -+ * Draws a set of pixels -+ * @param npoints Number of points to draw -+ * @param points Pointer to an array of ATI_POINT -+ * @return 1:success, 0:fail -+ */ -+ int AtiCore_DrawPixel( int npoints, ATI_POINT *points ); -+ -+ int AtiCore_SetSysClk( unsigned short in0 ); -+ int AtiCore_SetFastSysClk( unsigned short in0 ); -+ int AtiCore_SetSlowSysClk( unsigned short in0 ); -+ -+ int AtiCore_GetCursorPos( unsigned long in0, -+ unsigned short *x, -+ unsigned short *y ); -+ -+ -+ -+/* ================================================================ */ -+/* from libqte.so.2.3.2 */ -+/* -+AtiCore_AlphaBlend -+ -+AtiCore_Flush -+AtiCore_GammaCorrection -+AtiCore_GetCRC -+AtiCore_GetCursorPos -+AtiCore_GetDeviceInfo -+AtiCore_GetGPIO_Data -+AtiCore_GetGraphicExtended -+AtiCore_GetGraphicWindowPos -+AtiCore_GetLargestVideoMemBlock -+AtiCore_GetLastError -+AtiCore_GetMultiCRC -+AtiCore_GetOverlayPos -+AtiCore_Host -+AtiCore_LoadCursorBitMap -+AtiCore_PolyScanline -+AtiCore_ProcessAttachMinimal(void)? -+AtiCore_ProcessDetachMinimal(void)? -+AtiCore_ProcessDetachSpecialMode -+AtiCore_ReadCfgReg -+AtiCore_ReadMem(int, int)? -+AtiCore_ReadReg(int, int)? -+AtiCore_ScanlineShading -+AtiCore_SetApertures -+AtiCore_SetBytePixelOrder -+AtiCore_SetCursorPos -+AtiCore_SetDisplayParameters -+AtiCore_SetDriverBehaviour -+AtiCore_SetGPIO_Data -+AtiCore_SetOverlayPosUsingGraphicWindowXY -+AtiCore_SetPartialCursor -+AtiCore_SetupGraphicExtended -+AtiCore_SetupPM4 -+AtiCore_SmallText -+AtiCore_SubmitPM4Packet -+AtiCore_WriteCfgReg -+AtiCore_WriteMem -+AtiCore_WriteReg -+ */ -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif -Index: qt-2.3.10-snapshot-20060120/src/kernel/qgfxw100_qws.cpp -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qgfxw100_qws.cpp 2006-01-20 21:17:39.459504280 +0100 -@@ -0,0 +1,2709 @@ -+ /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil -*- */ -+/*************************************************************************** -+ -+** Imageon driver for qte using libAticore -+** Manuel Teira( 2005 ) -+** BUGS -+* - Enable again internal memory surfaces. -+****************************************************************************/ -+#include <unistd.h> -+#include <stdio.h> -+#include <stdlib.h> -+#include <errno.h> -+#include <string.h> -+#include <dirent.h> -+#include <fcntl.h> -+#include <sys/types.h> -+#include <sys/mman.h> -+#include <sys/time.h> -+#include <time.h> -+ -+#include <sys/ipc.h> -+#include <sys/shm.h> -+ -+#include <qapplication.h> -+ -+#ifndef __sparc__ -+#include <sys/io.h> -+#endif -+ -+#include "qgfxraster_qws.h" -+#include "qgfxlinuxfb_qws.h" -+#include <aticore/aticore.h> -+ -+#include <stdarg.h> -+ -+class W100Driver { -+public: -+ -+ typedef enum Loglevel { -+ ERROR = 0, -+ WARNING, -+ INFO -+ }; -+ -+ typedef enum Opcodes { -+ DRAWLINE = 0, -+ DRAWPOINT, -+ DRAWPOINTS, -+ FILLRECT, -+ SCROLL, -+ BITBLT, -+ POLYLINE, -+ EOO -+ }; -+ -+ typedef enum Retcodes { -+ codOK, -+ codError -+ }; -+ -+ -+ typedef struct Opcode { -+ QString str; -+ int index; -+ bool accelerated; -+ int hits; -+ int misses; -+ }; -+ -+ static Opcode lOpcodes[]; -+ -+ static QString level2str( int level ) -+ { -+ switch( level ) { -+ case ERROR: -+ return QString( "ERROR" ); -+ break; -+ case WARNING: -+ return QString( "WARNING" ); -+ break; -+ case INFO: -+ return QString( "INFO" ); -+ break; -+ default: -+ return QString( "UNKNOWN" ); -+ break; -+ } -+ } -+ -+ W100Driver(): -+ m_loglevel( 0 ), -+ m_logenabled( 0 ), -+ m_logcount( 0 ), -+ m_attached( false ) -+ { -+ m_pid = getpid(); -+ m_loglevel = 0; -+ char *var; -+ if ( var = getenv( "W100_DEBUG" ) ) { -+ if ( strtol( var, 0, 0 ) == 1 ) { -+ m_logenabled = 1; -+ } -+ } -+ -+ if ( m_logenabled ) { -+ if ( var = getenv( "W100_DEBUGLEVEL" ) ) { -+ if ( ( m_loglevel = strtol( var, 0, 0 ) ) < 0 ) { -+ m_loglevel = 0; -+ } -+ } -+ -+ QString path( "/mnt/card/w100/w100debug.log" ); -+ if ( var = getenv( "W100_DEBUGPATH" ) ) { -+ path = QString( var ) + "/w100debug.log"; -+ } -+ m_logfile = fopen( path.latin1(), "a" ); -+ if ( m_logfile == NULL ) m_logenabled = 0; -+ } -+ -+ Opcode *opcodePtr = lOpcodes; -+ while ( opcodePtr->index != EOO ) { -+ QString varName = "W100_ACCEL_" + opcodePtr->str; -+ char *varPtr; -+ if ( ( varPtr = getenv( varName.latin1() ) ) ) { -+ if ( ( strtol( varPtr, NULL, 0 ) == 0 ) || -+ ( strcmp( varPtr, "false" ) == 0 ) ) { -+ opcodePtr->accelerated = false; -+ } -+ } -+ opcodePtr++; -+ } -+ } -+ -+ ~W100Driver() -+ { -+ //Dump statistics about any opcode -+ Opcode *opcodePtr = lOpcodes; -+ while ( opcodePtr->index != EOO ) { -+ log( WARNING, "Opcode %s. Accelerated=%s. Hits=%d. Misses=%d", -+ opcodePtr->str.latin1(), -+ opcodePtr->accelerated ? "true" : "false", -+ opcodePtr->hits, -+ opcodePtr->misses ); -+ opcodePtr++; -+ } -+ if ( m_logenabled && m_logfile ) { -+ fclose( m_logfile ); -+ } -+ } -+ -+ bool accelerated( int opcode ) -+ { -+ if ( !m_attached ) { -+ log( WARNING, "Asking for accelerated '%s' when not attached", -+ lOpcodes[opcode].str.latin1() ); -+ return false; -+ } -+ if ( opcode < EOO ) { -+ if ( lOpcodes[opcode].accelerated ) { -+ return true; -+ } else { -+ log( WARNING, "Not accelerated '%s'", -+ lOpcodes[opcode].str.latin1() ); -+ return false; -+ } -+ } -+ return false; -+ } -+ -+ void addHit( int opcode ) -+ { -+ lOpcodes[opcode].hits++; -+ } -+ -+ void addMiss( int opcode ) -+ { -+ lOpcodes[opcode].misses++; -+ } -+ -+ void log( int level, const char *fmt, ... ) -+ { -+ if ( m_logenabled && ( level <= m_loglevel ) ) { -+ timeval tv; -+ char buffer[1024]; -+ va_list ap; -+ va_start( ap, fmt ); -+ vsnprintf( buffer, 1023, fmt, ap ); -+ va_end( ap ); -+ gettimeofday( &tv, NULL ); -+ fprintf( m_logfile, "(%010u.%06u)%d:%d:%s:%s\n", -+ tv.tv_sec, tv.tv_usec, -+ m_logcount++, -+ m_pid, -+ level2str( level ).latin1(), -+ buffer ); -+ fflush( m_logfile ); -+ } -+ } -+ -+ bool attached( void ) const -+ { -+ return m_attached; -+ } -+ -+ int processAttach( void ) -+ { -+ if ( !m_attached ) { -+ if ( AtiCore_ProcessAttach() ) { -+ log( WARNING, "Process attached succesfully" ); -+ m_attached = true; -+ return codOK; -+ } else { -+ log( WARNING, "Error attaching process" ); -+ } -+ } else { -+ log( WARNING, "Process already attached" ); -+ } -+ return codError; -+ } -+ -+ int processDetach( void ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_ProcessDetach() ) { -+ log( WARNING, "Process detached succesfully" ); -+ m_attached = false; -+ return codOK; -+ } else { -+ log( WARNING, "Error detaching process" ); -+ } -+ } else { -+ log( WARNING, "Trying to detach while not attached" ); -+ } -+ return codError; -+ } -+ -+ int allocateSurface( uint16_t *handle, uint32_t *offset, -+ uint32_t size, uint32_t direction ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_AllocateSurface( handle, offset, -+ size, direction ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in allocateSurface" ); -+ } -+ } else { -+ log( WARNING, "Trying to allocateSurface while not attached" ); -+ } -+ return codError; -+ } -+ -+ int destroySurface( uint16_t handle ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_DestroySurface( handle ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in destroySurface" ); -+ } -+ } else { -+ log( WARNING, "Trying to destroySurface while not attached" ); -+ } -+ return codError; -+ } -+ -+ int drawPixel( int npoints, ATI_POINT *points ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_DrawPixel( npoints, points ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in drawPixel" ); -+ } -+ } else { -+ log( WARNING, "Trying to drawPixel while not attached" ); -+ } -+ return codError; -+ } -+ -+ int setRopOperation( uint32_t rop ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_SetRopOperation( rop ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in setRopOperation" ); -+ } -+ } else { -+ log( WARNING, "Trying to setRopOperation while not attached" ); -+ } -+ return codError; -+ } -+ -+ int setDstType( uint32_t dtype ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_SetDstType( dtype ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in setDstType" ); -+ } -+ } else { -+ log( WARNING, "Trying to setDstType while not attached" ); -+ } -+ return codError; -+ } -+ -+ int setSrcType( uint32_t stype ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_SetSrcType( stype ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in setSrcType" ); -+ } -+ } else { -+ log( WARNING, "Trying to setSrcType while not attached" ); -+ } -+ return codError; -+ } -+ -+ int setSrcClippingRect( ATI_CLIPRECT *cliprect ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_SetSrcClippingRect( cliprect ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in setSrcClippingRect" ); -+ } -+ } else { -+ log( WARNING, "Trying to setSrcClippingRect while not attached" ); -+ } -+ return codError; -+ } -+ -+ int setDstClippingRect( ATI_CLIPRECT *cliprect ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_SetDstClippingRect( cliprect ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in setDstClippingRect" ); -+ } -+ } else { -+ log( WARNING, "Trying to setDstClippingRect while not attached" ); -+ } -+ return codError; -+ } -+ -+ int setSrcPitchOffset( int pitch, int offset ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_SetSrcPitchOffset( pitch, offset ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in setSrcPitchOffset" ); -+ } -+ } else { -+ log( WARNING, "Trying to setSrcPitchOffset while not attached" ); -+ } -+ return codError; -+ } -+ -+ int setDstPitchOffset( int pitch, int offset ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_SetDstPitchOffset( pitch, offset ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in setDstPitchOffset" ); -+ } -+ } else { -+ log( WARNING, "Trying to setDstPitchOffset while not attached" ); -+ } -+ return codError; -+ } -+ -+ int bitBltFlipRotate( int rot, -+ ATI_RECT *dstRect, -+ ATI_RECT *srcRect ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_BitBltFilpRotate( rot, dstRect, srcRect ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in bitBltFlipRotate" ); -+ } -+ } else { -+ log( WARNING, "Trying to bitBltFlipRotate while not attached" ); -+ } -+ return codError; -+ } -+ -+ int stretchBlt( ATI_STRETCH *option, -+ ATI_POINT *point, -+ ATI_RECT *srcRect ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_StretchBlt( option, point, srcRect ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in stretchBlt" ); -+ } -+ } else { -+ log( WARNING, "Trying to stretchBlt while not attached" ); -+ } -+ return codError; -+ } -+ -+ int waitComplete( int msec ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_WaitComplete( msec ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in waitComplete" ); -+ } -+ } else { -+ log( WARNING, "Trying to waitComplete while not attached" ); -+ } -+ return codError; -+ } -+ -+ int allocOverlay( uint16_t *handle ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_AllocOverlay( handle ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in allocOverlay" ); -+ } -+ } else { -+ log( WARNING, "Trying to allocOverlay while not attached" ); -+ } -+ return codError; -+ } -+ -+ int releaseOverlay( uint16_t handle ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_ReleaseOverlay( handle ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in releaseOverlay" ); -+ } -+ } else { -+ log( WARNING, "Trying to releaseOverlay while not attached" ); -+ } -+ return codError; -+ } -+ -+ int setupOverlay( uint16_t handle, ATI_OVERLAYPROP *prop ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_SetupOverlay( handle, prop ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in setupOverlay" ); -+ } -+ } else { -+ log( WARNING, "Trying to setupOverlay while not attached" ); -+ } -+ return codError; -+ } -+ -+ int setupOverlayExtended( uint16_t handle, -+ ATI_EXTENDEDOVERLAYPROP *prop ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_SetupOverlayExtended( handle, prop ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in setupOverlayExtended" ); -+ } -+ } else { -+ log( WARNING, "Trying to setupOverlayExtended while not attached" ); -+ } -+ return codError; -+ } -+ -+ int setOverlayOnOff( uint16_t handle, int isShow ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_SetOverlayOnOff( handle, isShow ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in setOverlayOnOff" ); -+ } -+ } else { -+ log( WARNING, "Trying to setOverlayOnOff while not attached" ); -+ } -+ return codError; -+ } -+ -+ int setOverlayPos( uint16_t handle, uint16_t x, uint16_t y ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_SetOverlayPos( handle, x, y ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in setOverlayPos" ); -+ } -+ } else { -+ log( WARNING, "Trying to setOverlayPos while not attached" ); -+ } -+ return codError; -+ } -+ -+ int setupMemoryTransfer( uint32_t offset, uint32_t *regdata ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_SetupMemoryTransfer( offset, regdata ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in setupMemoryTransfer" ); -+ } -+ } else { -+ log( WARNING, "Trying to setupMemoryTransfer while not attached" ); -+ } -+ return codError; -+ } -+ -+ int terminateMemoryTransfer( void ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_TerminateMemoryTransfer() ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in terminateMemoryTransfer" ); -+ } -+ } else { -+ log( WARNING, "Trying to terminateMemoryTransfer while not attached" ); -+ } -+ return codError; -+ } -+ -+ int getFrontBufferPitchOffset( uint32_t *pitch, uint32_t *offset ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_GetFrontBufferPitchOffset( pitch, offset ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in getFrontBufferPitchOffset" ); -+ } -+ } else { -+ log( WARNING, "Trying to getFrontBufferPitchOffset while not attached" ); -+ } -+ return codError; -+ } -+ -+ int setDisplayBrightness( int bri ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_SetDisplayBrightness( bri ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in setDisplayBrightness" ); -+ } -+ } else { -+ log( WARNING, "Trying to setDisplayBrighness while not attached" ); -+ } -+ return codError; -+ } -+ -+ int getAvailableVideoMem( uint32_t *internal, uint32_t *external ) -+ { -+ if ( m_attached ) { -+ if ( GetAvailableVideoMem( internal, external ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in getAvailableVideoMem" ); -+ } -+ } else { -+ log( WARNING, "Trying to getAvailableVideoMem while not attached" ); -+ } -+ return codError; -+ } -+ -+ int setupGraphicWindow( ATI_GRAPHICWINDOW *win ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_SetupGraphicWindow( ( void * ) win ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in setupGraphicWindow" ); -+ } -+ } else { -+ log( WARNING, "Trying to setupGraphicWindow while not attached" ); -+ } -+ return codError; -+ } -+ -+ int processAttachSpecialMode( int mode ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_ProcessAttachSpecialMode( mode ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in processAttachSpecialMode" ); -+ } -+ } else { -+ log( WARNING, "Trying to processAttachSpecialMode while not attached" ); -+ } -+ return codError; -+ } -+ -+ int processDetachSpecialMode( void ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_ProcessDetachSpecialMode() ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in processDetachSpecialMode" ); -+ } -+ } else { -+ log( WARNING, "Trying to processDetachSpecialMode while not attached" ); -+ } -+ return codError; -+ } -+ -+ int setGraphicWindowPos( int x, int y ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_SetGraphicWindowPos( x, y ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in setGraphicWindowPos" ); -+ } -+ } else { -+ log( WARNING, "Trying to setGraphicWindow while not attached" ); -+ } -+ return codError; -+ } -+ -+ int setFrontBuffer( int offset, int a, int b ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_SetFrontBuffer( offset, a, b ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in setFrontBuffer" ); -+ } -+ } else { -+ log( WARNING, "Trying to setFrontBuffer while not attached" ); -+ } -+ return codError; -+ } -+ -+ int setGraphicWindowOnOff( int val ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_SetGraphicWindowOnOff( val ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in setGraphicWindowOnOff" ); -+ } -+ } else { -+ log( WARNING, "Trying to setGraphicWindowOnOff while not attached" ); -+ } -+ } -+ -+ static unsigned long ccolor( unsigned int rgb ) -+ { -+ unsigned char r = ( rgb & 0xff0000 ) >> 19; -+ unsigned char g = ( rgb & 0xff00 ) >> 10; -+ unsigned char b = ( rgb & 0xff ) >> 3; -+ return ( ( ( ( unsigned short )0x1f & r ) << 11 ) | -+ ( ( ( unsigned short )0x3f & g ) << 5 ) | -+ ( ( ( unsigned short )0x1f & b ) ) ); -+ } -+ -+ int setFrgColour( int val ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_SetFrgColour( ccolor( val ) ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in setFrgColour" ); -+ } -+ } else { -+ log( WARNING, "Trying to setFrgColour while not attached" ); -+ } -+ return codError; -+ } -+ -+ int brushType( int type, unsigned int pattern ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_BrushType( type, &pattern ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in brushType" ); -+ } -+ } else { -+ log( WARNING, "Trying to brushType while not attached" ); -+ } -+ return codError; -+ } -+ -+ int paintRect( int flags, ATI_RECT *rect ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_PaintRect( flags, rect ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in paintRect" ); -+ } -+ } else { -+ log( WARNING, "Trying to paintRect while not attached" ); -+ } -+ return codError; -+ } -+ -+ int polyline( int npoints, ATI_POINT *points ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_Polyline( npoints, points ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in polyline" ); -+ } -+ } else { -+ log( WARNING, "Trying to polyline while not attached" ); -+ } -+ return codError; -+ } -+ -+ int getPitchOffsetProperty( void *pitch, void *offset ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_GetPitchOffsetProperty( pitch, offset ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in getPitchOffsetProperty" ); -+ } -+ } else { -+ log( WARNING, "Trying to getPitchOffsetProperty while not attached" ); -+ } -+ return codError; -+ } -+ -+ int cursorOnOff( int a, int b ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_CursorOnOff( a, b ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in cursorOnOff" ); -+ } -+ } else { -+ log( WARNING, "Trying to cursorOnOff while not attached" ); -+ } -+ return codError; -+ } -+ -+ int bitBlt( int flags, ATI_RECT *dst, ATI_RECT *src ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_BitBlt( flags, dst, src ) ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in bitBlt" ); -+ } -+ } else { -+ log( WARNING, "Trying to bitBlt while not attached" ); -+ } -+ return codError; -+ } -+ -+ int wakeUpCall( void ) -+ { -+ if ( m_attached ) { -+ if ( AtiCore_WakeUpCall() ) { -+ return codOK; -+ } else { -+ log( ERROR, "Error in wakeUpCall" ); -+ } -+ } else { -+ log( WARNING, "Trying to wakeupCall while not attached" ); -+ } -+ return codError; -+ } -+ -+private: -+ FILE *m_logfile; -+ int m_loglevel; -+ bool m_logenabled; -+ bool m_attached; -+ int m_pid; -+ int m_logcount; -+}; -+ -+W100Driver::Opcode W100Driver::lOpcodes[] = { -+ { "DRAWLINE", W100Driver::DRAWLINE, true, 0, 0 }, -+ { "DRAWPOINT", W100Driver::DRAWPOINT, true, 0, 0 }, -+ { "DRAWPOINTS", W100Driver::DRAWPOINTS, true, 0, 0 }, -+ { "FILLRECT", W100Driver::FILLRECT, true, 0, 0 }, -+ { "SCROLL", W100Driver::SCROLL, true, 0, 0 }, -+ { "BITBLT", W100Driver::BITBLT, true, 0, 0 }, -+ { "POLYLINE", W100Driver::POLYLINE, true, 0, 0 }, -+ { "" , W100Driver::EOO, false, 0, 0 } -+}; -+ -+W100Driver driver; -+ -+class QW100Screen; -+static QW100Screen *qt_w100_screen = 0; -+ -+class QW100Screen : public QLinuxFbScreen { -+public: -+ class HWSurface { -+ public: -+ HWSurface( void ): -+ m_handle( 0 ), -+ m_offset( 0 ), -+ m_addr( 0 ), -+ m_size( 0 ), -+ m_internal( false ), -+ m_clientid( -1 ) {}; -+ HWSurface( unsigned short handle, -+ uint32_t sOffset, -+ unsigned char *localAddr, -+ int amount, -+ bool internal, -+ int clientid ): -+ m_handle( handle ), -+ m_offset( sOffset ), -+ m_addr( localAddr ), -+ m_size( amount ), -+ m_internal( internal ), -+ m_clientid( clientid ) {}; -+ HWSurface( uint32_t sOffset, -+ unsigned char *localAddr, -+ bool internal, -+ int amount ): -+ m_handle( 0 ), -+ m_offset( sOffset ), -+ m_addr( localAddr ), -+ m_size( amount ), -+ m_internal( internal ), -+ m_clientid( -1 ) {}; -+ bool operator!=( HWSurface &other ) { -+ return( m_offset == other.getSOffset() ); -+ }; -+ HWSurface &operator=( const HWSurface &c ) { -+ m_handle = c.getHandle(); -+ m_offset = c.getSOffset(); -+ m_addr = c.getAddr(); -+ m_size = c.getSize(); -+ m_clientid= c.getCId(); -+ m_internal = c.internal(); -+ return( *this ); -+ }; -+ unsigned short getHandle( void ) const { return m_handle; }; -+ uint32_t getSOffset( void ) const { return m_offset; }; -+ unsigned char *getAddr( void ) const { return m_addr; }; -+ unsigned int getSize( void ) const { return m_size; }; -+ int getCId( void ) const { return m_clientid; }; -+ bool internal( void ) const { return m_internal; }; -+ -+ private: -+ unsigned short m_handle; -+ uint32_t m_offset; -+ unsigned char *m_addr; -+ int m_size; -+ bool m_internal; -+ int m_clientid; -+ }; -+ -+ QW100Screen( int display_id ); -+ virtual ~QW100Screen(); -+ virtual bool connect( const QString &spec ); -+ virtual void disconnect( void ); -+ virtual bool initDevice(); -+ virtual void shutdownDevice(); -+ virtual void restore(); -+ virtual bool useOffscreen() { return true; } -+ virtual QGfx * createGfx( unsigned char *, int, int, int, int); -+ virtual uchar *cache( int amount, int optim ); -+ virtual void uncache( uchar *c ); -+ virtual bool onCard( unsigned char *p ) const; -+ virtual bool onCard( unsigned char *p, ulong& offset ) const; -+ QMap< uchar*, HWSurface > *getPSurfaceMap( void ) const; -+ void clearCache( int clientId ); -+ -+ // Suspend/resume hooks -+ virtual void prepareToSuspend(); -+ virtual void prepareToResume(); -+ // Rotation stuff -+ enum Transformation { None, Rot90, Rot180, Rot270 }; -+ void setTransformation( Transformation t ); -+ Transformation transformation() const; -+ virtual bool isTransformed() const { return trans != None; }; -+ virtual QSize mapToDevice( const QSize & ) const; -+ virtual QSize mapFromDevice( const QSize & ) const; -+ virtual QPoint mapToDevice( const QPoint &, const QSize & ) const; -+ virtual QPoint mapFromDevice( const QPoint &, const QSize & ) const; -+ virtual QRect mapToDevice( const QRect &, const QSize & ) const; -+ virtual QRect mapFromDevice( const QRect &, const QSize & ) const; -+ virtual QImage mapToDevice( const QImage & ) const; -+ virtual QImage mapFromDevice( const QImage & ) const; -+ virtual QRegion mapToDevice( const QRegion &, const QSize & ) const; -+ virtual QRegion mapFromDevice( const QRegion &, const QSize & ) const; -+ virtual int transformOrientation() const; -+ -+protected: -+ bool w100init(); -+ void w100shutdown(); -+ Transformation trans; -+ static Transformation getTransSpec( const QString &dspec ); -+ static void clearCache( QScreen *instance, int clientId ); -+ QMap< uchar*, HWSurface > surfaceMap; -+ int vramoffset; -+ bool m_isServer; -+ virtual int pixmapLinestepAlignment() { return 128; } -+}; -+ -+template <const int depth, const int type> -+class QGfxW100 : public QGfxRaster<depth,type> { -+ -+public: -+ QGfxW100( unsigned char *b, int w, int h ); -+ virtual void drawLine( int, int, int, int); -+ virtual void fillRect( int, int, int, int); -+ virtual void blt( int, int, int, int, int, int ); -+ virtual void sync(); -+ virtual void setOffset( int x, int y ); -+ virtual void setPen( const QPen & p ); -+ -+ virtual void drawPolyline( const QPointArray &, int, int ); -+ virtual void drawPolygon( const QPointArray &, bool, int, int ); -+ virtual void drawPoint( int, int ); -+ virtual void drawPoints( const QPointArray &, int, int ); -+ virtual void scroll( int, int, int, int, int, int ); -+ virtual void tiledBlt( int rx, int ry, int w, int h ); -+ -+ inline int tx( int x, int y ) { -+ switch ( qt_w100_screen->transformation() ) { -+ case QW100Screen::Rot90: -+ return y - this->xoffs + this->yoffs; -+ case QW100Screen::Rot180: -+ return ( this->width - x - 1) - this->xoffs - this->xoffs; -+ case QW100Screen::Rot270: -+ return ( this->height - y - 1) - this->xoffs - this->yoffs; -+ default: -+ return x; -+ } -+ } -+ inline int ty( int x, int y ) { -+ switch ( qt_w100_screen->transformation() ) { -+ case QW100Screen::Rot90: -+ return (this->width - x - 1) - this->yoffs - this->xoffs; -+ case QW100Screen::Rot180: -+ return (this->height - y - 1) - this->yoffs - this->yoffs; -+ case QW100Screen::Rot270: -+ return x - this->yoffs + this->xoffs; -+ default: -+ return y; -+ } -+ } -+ -+protected: -+ bool checkDest( bool setsrc = false ); -+ bool checkSourceDest(); -+ virtual void setSourceWidgetOffset( int x, int y ); -+ void processSpans( int n, QPoint* point, int* width ); -+ bool inDraw; -+ -+ virtual void dDrawLine( int, int, int, int); -+ virtual void dFillRect( int, int, int, int); -+ virtual void dBlt( int, int, int, int, int, int ); -+ void dDrawPolyline( const QPointArray &, int, int ); -+ void dDrawPolygon( const QPointArray &, bool, int, int ); -+ void dDrawPoint( int, int ); -+ void dDrawPoints( const QPointArray &, int, int ); -+ void dScroll( int, int, int, int, int, int ); -+ void dTiledBlt( int rx, int ry, int w, int h ); -+}; -+ -+template<const int depth,const int type> -+QGfxW100<depth,type>::QGfxW100( unsigned char * b, int w, int h ) -+ : QGfxRaster<depth,type>(b, w, h), -+ inDraw( false ) -+{ -+} -+ -+template<const int depth,const int type> -+inline void QGfxW100<depth,type>::setOffset( int x, int y ) -+{ -+ QGfxRaster<depth,type>::setOffset( x, y ); -+} -+ -+namespace { -+ QString penStyleStr( const QPen &pen ) -+ { -+ QString res; -+ switch( pen.style() ) { -+ case Qt::NoPen: -+ res = "NoPen"; -+ break; -+ case Qt::SolidLine: -+ res = "SolidLine"; -+ break; -+ case Qt::DashLine: -+ res = "DashLine"; -+ break; -+ case Qt::DotLine: -+ res = "DotLine"; -+ break; -+ case Qt::DashDotLine: -+ res = "DashDotLine"; -+ break; -+ case Qt::DashDotDotLine: -+ res = "DashDotDotLine"; -+ break; -+ default: -+ res = "Unknown"; -+ } -+ return res; -+ } -+} -+ -+template<const int depth, const int type> -+inline void QGfxW100<depth,type>::setPen( const QPen &p ) -+{ -+ QGfxRaster<depth,type>::setPen( p ); -+} -+ -+template<const int depth,const int type> -+inline bool QGfxW100<depth,type>::checkSourceDest() -+{ -+ if ( !checkDest() ) { -+ return FALSE; -+ } -+ -+ int sourcepixelpitch; -+ ulong src_buffer_offset; -+ if ( this->srctype == this->SourcePen ) { -+ src_buffer_offset = -1; -+ return FALSE; -+ } else { -+ if ( !qt_screen->onCard( this->srcbits, src_buffer_offset ) ) { -+ return FALSE; -+ } -+ sourcepixelpitch = ( this->srclinestep * 8 ) / this->srcdepth; -+ driver.setSrcPitchOffset( sourcepixelpitch, -+ src_buffer_offset ); -+ } -+ return TRUE; -+} -+ -+template< const int depth, const int type> -+inline bool QGfxW100<depth, type>::checkDest( bool setsrc ) -+{ -+ //Main framebuffer should be registered as a hardware surface -+ ulong buffer_offset; -+ if ( !qt_screen->onCard( this->buffer, buffer_offset ) ) { -+ return FALSE; -+ } -+ int pixelstep = ( this->linestep() * 8 ) / depth; -+ driver.setDstPitchOffset( pixelstep, buffer_offset ); -+ if ( setsrc ) { -+ driver.setSrcPitchOffset( pixelstep, buffer_offset ); -+ } -+ return TRUE; -+} -+ -+template<const int depth,const int type> -+void QGfxW100<depth,type>::drawLine( int x1, int y1, int x2, int y2 ) -+{ -+ if ( inDraw ) { -+ dDrawLine( x1, y1, x2, y2 ); -+ } else { -+ inDraw = true; -+ dDrawLine( tx(x1,y1), ty(x1,y1), -+ tx(x2,y2), ty(x2,y2) ); -+ inDraw = false; -+ } -+} -+ -+template<const int depth,const int type> -+void QGfxW100<depth,type>::dDrawLine( int x1, int y1, int x2, int y2 ) -+{ -+ if ( ( this->ncliprect < 1) || -+ ( this->cpen.style() == this->NoPen ) ) { -+ return; -+ } -+ -+ if ( depth != 16 || -+ !driver.accelerated( W100Driver::DRAWLINE ) ) { -+ driver.addMiss( W100Driver::DRAWLINE ); -+ QGfxRaster<depth,type>::drawLine( x1, y1, x2, y2 ); -+ return; -+ } -+ -+ // Only handle 'normal' lines -+ if ( ( this->cpen.style() != this->SolidLine ) || -+ ( this->myrop != this->CopyROP ) || -+ ( this->cpen.width() > 1 ) || -+ ( this->dashedLines ) ) { -+ driver.addMiss( W100Driver::DRAWLINE ); -+ QGfxRaster<depth,type>::drawLine( x1, y1, x2, y2); -+ return; -+ } -+ -+ // Stop anyone else trying to access optype/lastop/the graphics engine -+ // to avoid synchronization problems with other processes -+ QWSDisplay::grab( true ); -+ if ( !checkDest() ) { -+ QWSDisplay::ungrab(); -+ driver.addMiss( W100Driver::DRAWLINE ); -+ QGfxRaster<depth,type>::drawLine( x1, y1, x2, y2 ); -+ return; -+ } -+ -+ -+ // Note that the last operation used the 2d engine -+ ( *optype ) = 1; -+ -+ // Add the offset of the gfx - used to make the origin the right -+ // place for windows -+ x1 += this->xoffs; -+ y1 += this->yoffs; -+ x2 += this->xoffs; -+ y2 += this->yoffs; -+ -+ QRect boundRect( x1 < x2 ? x1: x2, -+ y1 < y2 ? y1 : y2, -+ QABS( x2 - x1 ) + 1, -+ QABS( y2 - y1 ) + 1 ); -+ -+ GFX_START( boundRect ); -+ -+ // The clip region is defined as a series of rectangles -+ // We repeatedly set up the hardware clip rectangle to one of -+ // these rectangles and re-draw the line - an alternative approach -+ // would be to clip to the rectangle in software -+ -+ driver.setDstType( DSTTYPE_16BPP_1555 ); -+ driver.setSrcType( SRCTYPE_EQU_DST ); -+ driver.setRopOperation( ROP3_PATCOPY ); -+ driver.brushType( 6, 0 ); -+ driver.setFrgColour( this->cpen.color().rgb() ); -+ driver.addHit( W100Driver::DRAWLINE ); -+ -+ //The imageon seems not to write on the edge of the clip -+ //for the polyline op. -+ //We are using a three points array repeating the last point -+ //to get the last single point painted. -+ ATI_POINT points[3]; -+ points[0].XCoord = x1; -+ points[0].YCoord = y1; -+ points[1].XCoord = x2; -+ points[1].YCoord = y2; -+ points[2].XCoord = x2; -+ points[2].YCoord = y2; -+ for ( int loopc = 0; loopc < this->ncliprect; loopc++ ) { -+ if ( boundRect.intersects( this->cliprect[loopc] ) ) { -+ ATI_CLIPRECT clip; -+ clip.X_Top_Left = this->cliprect[loopc].x(); -+ clip.Y_Top_Left = this->cliprect[loopc].y(); -+ clip.X_Bottom_Right = this->cliprect[loopc].right() + 1; -+ clip.Y_Bottom_Right = this->cliprect[loopc].bottom() + 1; -+ driver.setDstClippingRect( &clip ); -+ driver.polyline( 3, points ); -+ } -+ } -+ -+ // Software mouse cursor stuff -+ GFX_END; -+ -+ // Release display again - not doing so will cause Qt/Embedded applications -+ // to deadlock -+ QWSDisplay::ungrab(); -+} -+ -+template< const int depth, const int type > -+void QGfxW100< depth, type>::drawPolyline( const QPointArray &a, -+ int index, -+ int npoints ) -+{ -+ if ( inDraw ) { -+ dDrawPolyline( a, index, npoints ); -+ } else { -+ inDraw = true; -+ QPointArray na( npoints ); -+ -+ for ( int i = 0; i < npoints; i++ ) { -+ int x, y; -+ a.point( i+index, &x, &y ); -+ na.setPoint( i, tx(x,y), ty(x,y) ); -+ } -+ -+ dDrawPolyline( na, 0, npoints ); -+ inDraw = false; -+ } -+} -+ -+template< const int depth, const int type > -+void QGfxW100< depth, type>::dDrawPolyline( const QPointArray &a, -+ int index, -+ int npoints ) -+{ -+ if ( ( this->ncliprect < 1 ) || -+ ( npoints < 1 ) || -+ ( this->cpen.style() == this->NoPen ) ) { -+ return; -+ } -+ -+ if ( depth != 16 || -+ !driver.accelerated( W100Driver::POLYLINE ) ) { -+ driver.addMiss( W100Driver::POLYLINE ); -+ QGfxRaster<depth,type>::drawPolyline( a, index, npoints ); -+ return; -+ } -+ -+ if ( this->cpen.style() != this->SolidLine || -+ this->myrop != this->CopyROP ) { -+ driver.addMiss( W100Driver::POLYLINE ); -+ QGfxRaster<depth,type>::drawPolyline( a, index, npoints ); -+ return; -+ } -+ -+ QWSDisplay::grab( TRUE ); -+ if ( !checkDest() ) { -+ QWSDisplay::ungrab(); -+ driver.addMiss( W100Driver::POLYLINE ); -+ QGfxRaster<depth,type>::drawPolyline( a, index, npoints ); -+ return; -+ } -+ -+ ( *optype ) = 1; -+ -+ driver.setDstType( DSTTYPE_16BPP_1555 ); -+ driver.setSrcType( SRCTYPE_EQU_DST ); -+ driver.setRopOperation( ROP3_PATCOPY ); -+ driver.brushType( 6, 0 ); -+ driver.setFrgColour( this->cpen.color().rgb() ); -+ -+ driver.addHit( W100Driver::POLYLINE ); -+ -+ ATI_POINT *points = new ATI_POINT[ npoints + 1 ]; -+ -+ for ( int i = 0; i < npoints; i++ ) { -+ points[i].XCoord = a[i+index].x() + this->xoffs; -+ points[i].YCoord = a[i+index].y() + this->yoffs; -+ } -+ //Hack to get the last point of the last line painted -+ points[ npoints ] = points[ npoints - 1 ]; -+ -+ -+ GFX_START( clipbounds ); -+ driver.setFrgColour( this->cpen.color().rgb() ); -+ driver.setRopOperation( ROP3_PATCOPY ); -+ for ( int loopc = 0; loopc < this->ncliprect; loopc++ ) { -+ ATI_CLIPRECT clip; -+ clip.X_Top_Left = this->cliprect[loopc].x(); -+ clip.Y_Top_Left = this->cliprect[loopc].y(); -+ clip.X_Bottom_Right = this->cliprect[loopc].right() + 1; -+ clip.Y_Bottom_Right = this->cliprect[loopc].bottom() + 1; -+ driver.setDstClippingRect( &clip ); -+ driver.polyline( npoints + 1, points ); -+ } -+ GFX_END; -+ -+ delete [] points; -+ -+ QWSDisplay::ungrab(); -+} -+ -+ -+template< const int depth, const int type > -+void QGfxW100< depth, type>::drawPolygon( const QPointArray &a, -+ bool w, int index, -+ int npoints ) -+{ -+ if ( inDraw || this->cpen.style()==this->NoPen || this->patternedbrush ) { -+ //slowpath -+ dDrawPolygon( a, w, index, npoints ); -+ } else { -+ inDraw = TRUE; -+ QPointArray na( npoints ); -+ -+ for ( int i = 0; i < npoints; i++ ) { -+ int x,y; -+ a.point( i+index, &x, &y ); -+ na.setPoint( i, tx(x,y), ty(x,y) ); -+ } -+ dDrawPolygon( na, w, 0, npoints ); -+ inDraw = FALSE; -+ } -+} -+ -+template< const int depth, const int type > -+void QGfxW100< depth, type>::dDrawPolygon( const QPointArray &a, bool w, int index, int npoints ) -+{ -+ QGfxRaster<depth,type>::drawPolygon( a, w, index, npoints ); -+} -+ -+template< const int depth, const int type > -+void QGfxW100< depth, type>::drawPoint( int x, int y ) -+{ -+ dDrawPoint( tx( x, y ), ty( x, y ) ); -+} -+ -+template< const int depth, const int type > -+void QGfxW100< depth, type>::dDrawPoint( int x, int y ) -+{ -+ -+ if ( this->ncliprect < 1 ) { -+ return; -+ } -+ -+ if ( depth != 16 || -+ !driver.accelerated( W100Driver::DRAWPOINT) ) { -+ driver.addMiss( W100Driver::DRAWPOINT ); -+ QGfxRaster<depth,type>::drawPoint( x, y ); -+ return; -+ } -+ -+ if ( this->cpen.style() != this->SolidLine || -+ this->myrop != this->CopyROP ) { -+ driver.addMiss( W100Driver::DRAWPOINT ); -+ QGfxRaster<depth,type>::drawPoint( x, y ); -+ return; -+ } -+ -+ QWSDisplay::grab( TRUE ); -+ if ( !checkDest() ) { -+ QWSDisplay::ungrab(); -+ driver.addMiss( W100Driver::DRAWPOINT ); -+ QGfxRaster<depth,type>::drawPoint( x, y ); -+ return; -+ } -+ -+ driver.addHit( W100Driver::DRAWPOINT ); -+ ( *optype ) = 1; -+ -+ ATI_POINT point; -+ point.XCoord = x + this->xoffs; -+ point.YCoord = y + this->yoffs; -+ -+ GFX_START( clipbounds ); -+ driver.setFrgColour( this->cpen.color().rgb() ); -+ driver.setRopOperation( ROP3_PATCOPY ); -+ for ( int loopc = 0; loopc < this->ncliprect; loopc++ ) { -+ ATI_CLIPRECT clip; -+ clip.X_Top_Left = this->cliprect[loopc].x(); -+ clip.Y_Top_Left = this->cliprect[loopc].y(); -+ clip.X_Bottom_Right = this->cliprect[loopc].right() + 1; -+ clip.Y_Bottom_Right = this->cliprect[loopc].bottom() + 1; -+ driver.setDstClippingRect( &clip ); -+ driver.drawPixel( 1, &point ); -+ } -+ GFX_END; -+ QWSDisplay::ungrab(); -+} -+ -+template< const int depth, const int type > -+void QGfxW100< depth, type>::drawPoints( const QPointArray &a, -+ int index, -+ int npoints ) -+{ -+ QPointArray na( npoints ); -+ -+ for ( int i = 0; i < npoints; i++ ) { -+ int x, y; -+ a.point( i+index, &x, &y ); -+ na.setPoint( i, tx( x, y ), ty( x, y ) ); -+ } -+ -+ dDrawPoints( na, 0, npoints ); -+} -+ -+template< const int depth, const int type > -+void QGfxW100< depth, type>::dDrawPoints( const QPointArray &a, -+ int index, -+ int npoints ) -+{ -+ if ( ( this->ncliprect < 1 ) || ( npoints < 1 ) ) { -+ return; -+ } -+ -+ if ( depth != 16 || -+ !driver.accelerated( W100Driver::DRAWPOINTS ) ) { -+ driver.addMiss( W100Driver::DRAWPOINTS ); -+ QGfxRaster<depth,type>::drawPoints( a, index, npoints ); -+ return; -+ } -+ -+ if ( this->cpen.style() != this->SolidLine || -+ this->myrop != this->CopyROP ) { -+ driver.addMiss( W100Driver::DRAWPOINTS ); -+ QGfxRaster<depth,type>::drawPoints( a, index, npoints ); -+ return; -+ } -+ -+ QWSDisplay::grab( TRUE ); -+ if ( !checkDest() ) { -+ QWSDisplay::ungrab(); -+ driver.addMiss( W100Driver::DRAWPOINTS ); -+ QGfxRaster<depth,type>::drawPoints( a, index, npoints ); -+ return; -+ } -+ -+ driver.addHit( W100Driver::DRAWPOINTS ); -+ ( *optype ) = 1; -+ -+ ATI_POINT *points = new ATI_POINT[ npoints ]; -+ for ( int i = 0; i < npoints; i++ ) { -+ points[i].XCoord = a[i+index].x() + this->xoffs; -+ points[i].YCoord = a[i+index].y() + this->yoffs; -+ } -+ -+ GFX_START( clipbounds ); -+ driver.setFrgColour( this->cpen.color().rgb() ); -+ driver.setRopOperation( ROP3_PATCOPY ); -+ for ( int loopc = 0; loopc < this->ncliprect; loopc++ ) { -+ ATI_CLIPRECT clip; -+ clip.X_Top_Left = this->cliprect[loopc].x(); -+ clip.Y_Top_Left = this->cliprect[loopc].y(); -+ clip.X_Bottom_Right = this->cliprect[loopc].right() + 1; -+ clip.Y_Bottom_Right = this->cliprect[loopc].bottom() + 1; -+ driver.setDstClippingRect( &clip ); -+ driver.drawPixel( npoints, points ); -+ } -+ GFX_END; -+ -+ delete [] points; -+ QWSDisplay::ungrab(); -+} -+ -+template <const int depth, const int type> -+void QGfxW100<depth,type>::scroll( int x, int y, int w, int h, int sx, int sy ) -+{ -+ if ( w == 0 || h == 0 ) -+ return; -+ QRect r; -+ QRect s; -+ if ( inDraw ) { -+ r = QRect( x, y, w, h ); -+ s = QRect( sx, sy, w, h ); -+ } else { -+ r.setCoords( tx(x,y), ty(x,y), tx(x+w-1,y+h-1), ty(x+w-1,y+h-1) ); -+ s.setCoords( tx(sx,sy), ty(sx,sy), tx(sx+w-1,sy+h-1), ty(sx+w-1,sy+h-1) ); -+ r = r.normalize(); -+ s = s.normalize(); -+ } -+ dScroll( r.x(), r.y(), r.width(), r.height(), s.x(), s.y() ); -+} -+ -+ -+template< const int depth, const int type > -+void QGfxW100< depth, type>::dScroll( int rx, int ry, -+ int w, int h, -+ int sx, int sy ) -+{ -+ if ( depth != 16 || -+ !driver.accelerated( W100Driver::SCROLL ) ) { -+ driver.addMiss( W100Driver::SCROLL ); -+ QGfxRaster<depth,type>::scroll( rx, ry, w, h, sx, sy ); -+ return; -+ } -+ -+ if ( this->ncliprect < 1 ) return; -+ -+ if ( ( w < 1 ) || ( h < 1 ) ) return; -+ -+ int dy = sy - ry; -+ int dx = sx - rx; -+ -+ if ( dx == 0 && dy == 0 ) return; -+ -+ -+ QWSDisplay::grab( TRUE ); -+ -+ if ( checkDest( true ) ) { -+ -+ rx += this->xoffs; -+ sx += this->xoffs; -+ ry += this->yoffs; -+ sy += this->yoffs; -+ -+ QRect boundRect( QMIN( rx , sx ), -+ QMIN( ry , sy ), -+ w + QABS( dx ) + 1, -+ h + QABS( dy ) + 1 ); -+ GFX_START( boundRect ); -+ ( *optype ) = 1; -+ -+ -+ //if ( driver.lastOp() != W100Driver::SCROLL ) { -+ driver.setRopOperation( ROP3_SRCCOPY ); -+ driver.setDstType( DSTTYPE_16BPP_1555 ); -+ driver.setSrcType( SRCTYPE_EQU_DST ); -+ //} -+ -+ driver.addHit( W100Driver::SCROLL ); -+ -+ ATI_RECT srcrect, dstrect; -+ -+ srcrect.XCoord = sx; -+ srcrect.YCoord = sy; -+ srcrect.Width = w; -+ srcrect.Height = h; -+ dstrect.XCoord = rx; -+ dstrect.YCoord = ry; -+ dstrect.Width = w; -+ dstrect.Height = h; -+ for ( int loopc = 0; loopc < this->ncliprect; loopc++ ) { -+ if ( boundRect.intersects( this->cliprect[loopc] ) ) { -+ ATI_CLIPRECT clip; -+ clip.X_Top_Left = this->cliprect[ loopc ].x(); -+ clip.Y_Top_Left = this->cliprect[ loopc ].y(); -+ clip.X_Bottom_Right = this->cliprect[ loopc ].right() + 1; -+ clip.Y_Bottom_Right = this->cliprect[ loopc ].bottom() + 1; -+ driver.setDstClippingRect( &clip ); -+ driver.bitBlt( 1, &dstrect, &srcrect ); -+ } -+ } -+ GFX_END; -+ QWSDisplay::ungrab(); -+ -+ } else { -+ QWSDisplay::ungrab(); -+ // software fallback -+ driver.addMiss( W100Driver::SCROLL ); -+ QGfxRaster<depth,type>::scroll( rx, ry, w, h, sx, sy ); -+ } -+} -+ -+template< const int depth, const int type > -+void QGfxW100< depth, type>::fillRect( int x, int y, int w, int h ) -+{ -+ if ( w == 0 || h == 0 ) -+ return; -+ QRect r( x, y, w, h ); -+ r.setCoords( tx( x, y ), ty( x, y ), -+ tx( x + w - 1, y + h - 1 ), ty( x + w - 1, y + h - 1 ) ); -+ r = r.normalize(); -+ inDraw = TRUE; -+ dFillRect( r.x(), r.y(), r.width(), r.height() ); -+ inDraw = FALSE; -+} -+ -+template< const int depth, const int type > -+void QGfxW100< depth, type>::dFillRect( int rx, int ry, int w, int h ) -+{ -+ if ( w <= 0 || h <= 0 || this->ncliprect < 1 ) return; -+ -+ if ( depth != 16 || -+ !driver.accelerated( W100Driver::FILLRECT ) ) { -+ driver.addMiss( W100Driver::FILLRECT ); -+ QGfxRaster<depth,type>::fillRect( rx, ry, w, h ); -+ return; -+ } -+ -+ if ( ( this->cbrush.style() != this->NoBrush ) && -+ ( this->cbrush.style() != this->SolidPattern ) ) { -+ driver.addMiss( W100Driver::FILLRECT ); -+ QGfxRaster<depth,type>::fillRect( rx, ry, w, h ); -+ return; -+ } -+ -+ if ( !checkDest() || ( this->myrop != this->CopyROP ) ) { -+ driver.addMiss( W100Driver::FILLRECT ); -+ QGfxRaster<depth,type>::fillRect( rx, ry, w, h ); -+ return; -+ } -+ -+ QWSDisplay::grab( TRUE ); -+ rx += this->xoffs; -+ ry += this->yoffs; -+ -+ QRect boundRect( rx, ry, w + 1, h + 1 ); -+ GFX_START( boundRect ); -+ -+ ( *optype ) = 1; -+ -+ driver.setDstType( DSTTYPE_16BPP_1555 ); -+ driver.setSrcType( SRCTYPE_EQU_DST ); -+ driver.setRopOperation( ROP3_PATCOPY ); -+ driver.brushType( 6, 0 ); -+ driver.setFrgColour( this->cbrush.color().rgb() ); -+ -+ driver.addHit( W100Driver::FILLRECT ); -+ -+ if ( this->cbrush.style() != this->NoBrush ) { -+ //Using all the cliprects -+ for ( int loopc = 0; loopc < this->ncliprect; loopc++ ) { -+ if ( boundRect.intersects( this->cliprect[loopc] ) ) { -+ ATI_CLIPRECT clip; -+ ATI_RECT rect; -+ -+ clip.X_Top_Left = this->cliprect[ loopc ].x(); -+ clip.Y_Top_Left = this->cliprect[ loopc ].y(); -+ clip.X_Bottom_Right = this->cliprect[ loopc ].right() + 1; -+ clip.Y_Bottom_Right = this->cliprect[ loopc ].bottom() + 1; -+ -+ driver.setDstClippingRect( &clip ); -+ rect.XCoord = rx; -+ rect.YCoord = ry; -+ rect.Width = w; -+ rect.Height = h; -+ driver.paintRect( 1, &rect ); -+ } -+ } -+ } -+ GFX_END; -+ -+ QWSDisplay::ungrab(); -+} -+ -+template <const int depth, const int type> -+void QGfxW100<depth,type>::blt( int x, int y, int w, int h, int sx, int sy ) -+{ -+ if ( w == 0 || h == 0 ) -+ return; -+ QRect r; -+ int rsx; -+ int rsy; -+ if ( inDraw ) { -+ r = QRect( x, y, w, h ); -+ rsx = sx; -+ rsy = sy; -+ } else { -+ r.setCoords( tx(x,y), ty(x,y), tx(x+w-1,y+h-1), ty(x+w-1,y+h-1) ); -+ r = r.normalize(); -+ switch ( qt_w100_screen->transformation() ) { -+ case QW100Screen::Rot90: -+ rsx = sy; -+ rsy = this->srcwidth - sx - w; -+ break; -+ case QW100Screen::Rot180: -+ rsx = this->srcwidth - sx - w; -+ rsy = this->srcheight - sy - h; -+ break; -+ case QW100Screen::Rot270: -+ rsx = this->srcheight - sy - h; -+ rsy = sx; -+ break; -+ default: -+ rsx = sx; -+ rsy = sy; -+ break; -+ } -+ } -+ dBlt( r.x(), r.y(), r.width(), r.height(), rsx, rsy ); -+} -+ -+template< const int depth, const int type > -+inline void QGfxW100< depth, type>::dBlt( int rx, int ry, -+ int w, int h, -+ int sx, int sy ) -+{ -+ if ( !w || !h || this->ncliprect < 1 ) { -+ return; -+ } -+ -+ if ( depth != 16 || -+ !driver.accelerated( W100Driver::BITBLT ) ) { -+ driver.addMiss( W100Driver::BITBLT ); -+ QGfxRaster<depth,type>::blt( rx, ry, w, h, sx, sy ); -+ return; -+ } -+ -+ if ( this->alphatype == this->BigEndianMask || -+ this->alphatype == this->LittleEndianMask || -+ this->alphatype == this->SeparateAlpha || -+ this->srctype == this->SourcePen || -+ ( this->myrop != this->CopyROP ) ) { -+ driver.addMiss( W100Driver::BITBLT ); -+ QGfxRaster<depth,type>::blt( rx, ry, w, h, sx, sy ); -+ return; -+ } -+ -+ if ( ( this->srcdepth != 16 ) || this->alphatype != this->IgnoreAlpha ) { -+ driver.addMiss( W100Driver::BITBLT ); -+ QGfxRaster<depth,type>::blt( rx, ry, w, h, sx, sy ); -+ return; -+ } -+ -+ QWSDisplay::grab( TRUE ); -+ -+ if ( checkSourceDest() ) { -+ QRect boundRect( rx + this->xoffs, ry + this->yoffs, -+ w + 1, h + 1 ); -+ GFX_START( boundRect ); -+ ( *optype ) = 1; -+ -+ driver.setRopOperation( ROP3_SRCCOPY ); -+ driver.setDstType( DSTTYPE_16BPP_1555 ); -+ driver.setSrcType( SRCTYPE_EQU_DST ); -+ -+ driver.addHit( W100Driver::BITBLT ); -+ -+ ATI_RECT rect1; -+ ATI_RECT rect2; -+ -+ rx += this->xoffs; -+ ry += this->yoffs; -+ -+ rect1.XCoord = this->srcwidgetoffs.x() + sx; -+ rect1.YCoord = this->srcwidgetoffs.y() + sy; -+ rect1.Width = w; -+ rect1.Height = h; -+ rect2.XCoord = rx; -+ rect2.YCoord = ry; -+ rect2.Width = w; -+ rect2.Height = h; -+ for(int loopc = 0; loopc < this->ncliprect; loopc++ ) { -+ if ( boundRect.intersects( this->cliprect[loopc] ) ) { -+ ATI_CLIPRECT clip; -+ clip.X_Top_Left = this->cliprect[ loopc ].x(); -+ clip.Y_Top_Left = this->cliprect[ loopc ].y(); -+ clip.X_Bottom_Right = this->cliprect[ loopc ].right() + 1; -+ clip.Y_Bottom_Right = this->cliprect[ loopc ].bottom() + 1; -+ driver.setDstClippingRect( &clip ); -+ driver.bitBlt( 1, &rect2, &rect1 ); -+ } -+ } -+ GFX_END; -+ -+ QWSDisplay::ungrab(); -+ return; -+ } else { -+ QWSDisplay::ungrab(); -+ driver.addMiss( W100Driver::BITBLT ); -+ QGfxRaster<depth,type>::blt( rx, ry, -+ w, h, sx, sy ); -+ } -+} -+ -+ -+template <const int depth, const int type> -+void QGfxW100<depth,type>::tiledBlt( int rx,int ry,int w,int h ) -+{ -+ if ( w <= 0 || h <= 0 ) -+ return; -+ QRect r; -+ if ( inDraw ) { -+ r = QRect(rx,ry,w,h); -+ } else { -+ r.setCoords( tx(rx,ry), ty(rx,ry), tx(rx+w-1,ry+h-1), ty(rx+w-1,ry+h-1) ); -+ r = r.normalize(); -+ } -+ -+ inDraw = TRUE; -+ -+ QPoint oldBrushOffs = this->brushoffs; -+ int brx, bry; -+ switch ( qt_w100_screen->transformation() ) { -+ case QW100Screen::Rot90: -+ brx = this->brushoffs.y(); -+ bry = this->srcwidth - this->brushoffs.x() - w; -+ break; -+ case QW100Screen::Rot180: -+ brx = this->srcwidth - this->brushoffs.x() - w; -+ bry = this->srcheight - this->brushoffs.y() - h; -+ break; -+ case QW100Screen::Rot270: -+ brx = this->srcheight - this->brushoffs.y() - h; -+ bry = this->brushoffs.x(); -+ break; -+ default: -+ brx = this->brushoffs.x(); -+ bry = this->brushoffs.y(); -+ break; -+ } -+ this->brushoffs = QPoint( brx, bry ); -+ -+ int oldsw = this->srcwidth; -+ int oldsh = this->srcheight; -+ QSize s = qt_screen->mapToDevice( QSize(this->srcwidth,this->srcheight) ); -+ this->srcwidth = s.width(); -+ this->srcheight = s.height(); -+ -+ dTiledBlt( r.x(), r.y(), r.width(), r.height() ); -+ -+ this->srcwidth = oldsw; -+ this->srcheight = oldsh; -+ this->brushoffs = oldBrushOffs; -+ inDraw = FALSE; -+} -+ -+ -+template <const int depth, const int type> -+void QGfxW100<depth,type>::dTiledBlt( int rx,int ry, int w,int h ) -+{ -+ if ( this->srcwidth == 0 || this->srcheight == 0 ) -+ return; -+ QGfxRaster<depth,type>::tiledBlt( rx, ry, w, h ); -+} -+ -+template<const int depth,const int type> -+void QGfxW100<depth,type>::sync() -+{ -+ driver.waitComplete( -1 ); -+} -+ -+template <const int depth, const int type> -+void QGfxW100<depth,type>::setSourceWidgetOffset(int x, int y) -+{ -+ if ( this->srcbits == this->buffer ) { -+ switch ( qt_w100_screen->transformation() ) { -+ case QW100Screen::Rot90: -+ this->srcwidgetoffs = QPoint( y, this->width - x - this->srcwidth ); -+ break; -+ case QW100Screen::Rot180: -+ this->srcwidgetoffs = QPoint( this->width - x - this->srcwidth, this->height - y - this->srcheight ); -+ break; -+ case QW100Screen::Rot270: -+ this->srcwidgetoffs = QPoint( this->height - y - this->srcheight, x ); -+ break; -+ default: -+ this->srcwidgetoffs = QPoint( x, y ); -+ break; -+ } -+ } else { -+ this->srcwidgetoffs = QPoint( x, y ); -+ } -+} -+ -+template <const int depth, const int type> -+void QGfxW100<depth,type>::processSpans( int n, QPoint* point, int* width ) -+{ -+ if ( inDraw || -+ this->patternedbrush && -+ this->srcwidth != 0 && -+ this->srcheight != 0 ) { -+ //in the patternedbrush case, we let blt do the transformation -+ // so we leave inDraw false. -+ QGfxRaster<depth,type>::processSpans( n, point, width ); -+ } else { -+ inDraw = true; -+ while (n--) { -+ if ( *width > 0 ) { -+ int x=tx(point->x(),point->y())+this->xoffs; -+ int y=ty(point->x(),point->y())+this->yoffs; -+ -+ switch( qt_w100_screen->transformation() ) { -+ case QW100Screen::Rot90: -+ this->vline( x, y-(*width-1), y ); -+ break; -+ case QW100Screen::Rot180: -+ this->hline( x - (*width-1), x, y ); -+ break; -+ case QW100Screen::Rot270: -+ this->vline( x, y, y+*width-1 ); -+ break; -+ default: -+ this->hline( x, x+*width-1, y ); -+ break; -+ } -+ } -+ point++; -+ width++; -+ } -+ inDraw = false; -+ } -+} -+ -+QW100Screen::QW100Screen( int display_id ) -+ :QLinuxFbScreen( display_id ), -+ vramoffset( 0 ), -+ m_isServer( false ) -+{ -+ qt_w100_screen = this; -+ vramoffset = 0; -+ clearCacheFunc = &clearCache; -+ trans = None; -+} -+ -+static const char *trans2str( QW100Screen::Transformation t ) -+{ -+ switch( t ) { -+ case QW100Screen::None: -+ return "None"; -+ break; -+ case QW100Screen::Rot90: -+ return "Rot90"; -+ break; -+ case QW100Screen::Rot180: -+ return "Rot180"; -+ break; -+ case QW100Screen::Rot270: -+ return "Rot270"; -+ break; -+ default: -+ return "Unknown"; -+ break; -+ } -+} -+ -+QW100Screen::Transformation QW100Screen::getTransSpec( const QString &dspec ) -+{ -+ Transformation mytrans = None; -+ if ( dspec.find( ":Rot270" ) >= 0 ) { -+ mytrans = Rot270; -+ } else if ( dspec.find( ":Rot180" ) >= 0 ) { -+ mytrans = Rot180; -+ } else if ( dspec.find( ":Rot90" ) >= 0 ) { -+ mytrans = Rot90; -+ } -+ return mytrans; -+} -+ -+bool QW100Screen::connect( const QString &displaySpec ) -+{ -+ driver.log( W100Driver::WARNING, "QW100Screen::connect('%s')", -+ displaySpec.latin1() ); -+ trans = getTransSpec( displaySpec ); -+ -+ if ( QLinuxFbScreen::connect( displaySpec ) ) { -+ vramoffset = ( w == 320 ) ? 0 : 0x0f000000; -+ if ( driver.processAttach() == W100Driver::codOK ) { -+ driver.processAttachSpecialMode( ( w == 480 ) ? 0xaaab : 0xaaaa ); -+ surfaceMap.clear(); -+ surfaceMap.insert( 0, HWSurface( vramoffset, -+ data , false, -+ w*h*d/8 ) ); -+ canaccel = true; -+ QSize s = mapFromDevice( QSize( w, h ) ); -+ w = s.width(); -+ h = s.height(); -+ return true; -+ } -+ } -+ return false; -+} -+ -+void QW100Screen::disconnect( void ) -+{ -+ driver.log( W100Driver::WARNING, "QW100Screen::disconnect()" ); -+ driver.processDetachSpecialMode(); -+ driver.processDetach(); -+ QLinuxFbScreen::disconnect(); -+ printf( "[%d]QW100Screen disconnected with %d surfaces\n", -+ getpid(), surfaceMap.count() ); -+ surfaceMap.clear(); -+} -+ -+void QW100Screen::prepareToSuspend( void ) -+{ -+ -+ driver.log( W100Driver::WARNING, -+ "QW100Screen::prepareToSuspend. Server = %s", -+ m_isServer ? "true" : "false" ); -+ -+ QWSDisplay::grab( true ); -+ driver.waitComplete( -1 ); -+ -+ if ( !driver.attached() ) { -+ driver.log( W100Driver::ERROR, "Driver was not attached. " ); -+ } else { -+ driver.processDetachSpecialMode(); -+ driver.processDetach(); -+ } -+ QWSDisplay::ungrab(); -+ -+ driver.log( W100Driver::WARNING, "prepareToSuspend done" ); -+ -+} -+ -+void QW100Screen::prepareToResume( void ) -+{ -+ -+ driver.log( W100Driver::WARNING, -+ "QW100Screen::prepareToResume. Server = %s", -+ m_isServer ? "true": "false" ); -+ -+ driver.processAttach(); -+ driver.processAttachSpecialMode( ( w == 480 ) ? 0xaaab : 0xaaaa ); -+ if ( m_isServer ) { -+ QWSDisplay::grab( true ); -+ w100init(); -+ QWSDisplay::ungrab(); -+ driver.log( W100Driver::WARNING, "W100 restarted" ); -+ } -+ driver.log( W100Driver::WARNING, "prepareToResume done" ); -+ -+} -+ -+QW100Screen::~QW100Screen() -+{ -+} -+ -+bool QW100Screen::w100init() -+{ -+ driver.log( W100Driver::WARNING, -+ "QW100Screen::w100init(%dx%d)", dw, dh ); -+ ATI_GRAPHICWINDOW win; -+ ATI_CLIPRECT clip; -+ uint16_t overlay; -+ -+ win.dummy1 = 0; -+ win.Size.XCoord = 0; -+ win.Size.YCoord = 0; -+ win.Size.Width = dw; -+ win.Size.Height = dh; -+ win.Width = dw > dh ? dh : dw; -+ win.Height = dw > dh ? dw : dh; -+ win.Flag = DSTTYPE_16BPP_444; -+ -+ driver.waitComplete( -1 ); -+ driver.setGraphicWindowOnOff( 0 ); -+ -+ driver.setupGraphicWindow( &win ); -+ driver.setGraphicWindowPos( 0, 0 ); -+ -+ driver.setFrontBuffer( vramoffset, 0, 0 ); -+ driver.setDstPitchOffset( dw, vramoffset ); -+ driver.setDstType( DSTTYPE_16BPP_444 ); -+ driver.setSrcPitchOffset( dw, vramoffset ); -+ driver.setSrcType( SRCTYPE_SOLID_COLOR_BLT ); -+ clip.X_Top_Left = 0; -+ clip.Y_Top_Left = 0; -+ clip.X_Bottom_Right = dw; -+ clip.Y_Bottom_Right = dh; -+ driver.setDstClippingRect( &clip ); -+ -+ clip.X_Top_Left = 0xE000; -+ clip.Y_Top_Left = 0xE000; -+ clip.X_Bottom_Right = 0x1FFF; -+ clip.Y_Bottom_Right = 0x1FFF; -+ -+ driver.setSrcClippingRect( &clip ); -+ -+ driver.setRopOperation( ROP3_SRCCOPY ); -+ driver.setGraphicWindowOnOff( 1 ); -+ driver.allocOverlay( &overlay ); -+ driver.setOverlayOnOff( overlay, 0 ); -+ driver.releaseOverlay( overlay ); -+ driver.setDstPitchOffset( dw, vramoffset ); -+ driver.setDstClippingRect( NULL ); -+ for ( int i = 0; i < dw * dh ; i++ ) { -+ *( data + i ) = 0; -+ } -+ driver.waitComplete( -1 ); -+ return true; -+} -+ -+void QW100Screen::w100shutdown() -+{ -+} -+ -+bool QW100Screen::initDevice() -+{ -+ QWSDisplay::grab( true ); -+ driver.log( W100Driver::WARNING, "initDevice( dw=%d, dh=%d )", -+ dw, dh ); -+ m_isServer = true; -+ -+ if ( !w100init() ) { -+ QWSDisplay::ungrab(); -+ return false; -+ } -+ -+ if ( QLinuxFbScreen::initDevice() ) { -+ //HACK -+ //Some sprite corruption seems to be avoided -+ //reserving some upper memory on the offscreen framebuffer memory -+ QLinuxFbScreen::cache( 65535 * 2, 0 ); -+ QWSDisplay::ungrab(); -+ return true; -+ } -+ QWSDisplay::ungrab(); -+ return false; -+} -+ -+void QW100Screen::shutdownDevice() -+{ -+ driver.log( W100Driver::WARNING, "Shutting down device" ); -+ QLinuxFbScreen::shutdownDevice(); -+} -+ -+void QW100Screen::restore() -+{ -+ driver.log( W100Driver::WARNING, "Restoring W100..." ); -+ QLinuxFbScreen::restore(); -+ driver.log( W100Driver::WARNING, "Restoring done" ); -+} -+ -+ -+QGfx *QW100Screen::createGfx( unsigned char *b, -+ int w, int h, int d, int linestep ) -+{ -+ //We need ALL the gfx created to be QGfxW100 to allow software -+ //drawing syncing after hardware operations -+ QGfx * ret=0; -+ if ( false ) { -+#ifndef QT_NO_QWS_DEPTH_1 -+ } else if ( d == 1 ) { -+ ret = new QGfxW100<1,0>( b, w, h ); -+#endif -+#ifndef QT_NO_QWS_DEPTH_4 -+ } else if ( d == 4 ) { -+ ret = new QGfxW100<4,0>( b, w, h ); -+#endif -+#ifndef QT_NO_QWS_DEPTH_8 -+ } else if ( d == 8 ) { -+ ret = new QGfxW100<8,0>( b, w, h ); -+#endif -+#ifndef QT_NO_QWS_DEPTH_16 -+ } else if ( d == 16 ) { -+ ret = new QGfxW100<16,0>( b, w, h ); -+#endif -+#ifndef QT_NO_QWS_DEPTH_24 -+ } else if ( d == 24 ) { -+ ret = new QGfxW100<24,0>( b, w, h ); -+#endif -+#ifndef QT_NO_QWS_DEPTH_32 -+ } else if ( d == 32 ) { -+ ret = new QGfxW100<32,0>( b, w, h ); -+#endif -+ } else { -+ qFatal( "Unsupported depth %d\n", d ); -+ ret = 0; -+ } -+ -+ ret->setLineStep( linestep ); -+ return ret; -+} -+ -+ -+uchar *QW100Screen::cache( int amount, int optim ) -+{ -+ unsigned short hSurface = 0; -+ uint32_t surfaceOffset = 0; -+ uchar* localAddr = 0; -+ bool internal = false; -+ -+ /* The size must have 0xF bit zeroed (16 multiple)*/ -+ /* Perhaps this is not needed anymore, after setting -+ * QW100Screen::pixmapLinestepAlignment to 128 -+ */ -+ amount = ( amount & 0x0F ) ? ( amount | 0x10 ) & ~0x0F : amount; -+ -+ /* Experimenting memory corruption with the -+ * internal AtiCore memory allocation routines -+ * disabled for now -+ */ -+#if 1 -+ if ( !( localAddr = QLinuxFbScreen::cache( amount, optim ) ) ) { -+ return( 0 ); -+ } -+ surfaceOffset = vramoffset + ( uint32_t ) localAddr - ( uint32_t )data; -+ -+#else -+ int retcode = 0; -+ qt_fbdpy->grab( true ); -+ retcode = driver.allocateSurface( &hSurface, -+ &surfaceOffset, -+ amount, 1 ); -+ qt_fbdpy->ungrab(); -+ if ( retcode ) { -+ internal = true; -+ driver.setupMemoryTransfer( surfaceOffset, -+ (uint32_t*) &localAddr ); -+ driver.terminateMemoryTransfer(); -+ } else { -+ // Try to use the offscreen framebuffer memory -+ // to allocate the surface. Use the qgfxlinuxfb routines -+ if ( !( localAddr = QLinuxFbScreen::cache( amount, optim ) ) ) { -+ return( 0 ); -+ } -+ //Distance between physical vram start and surface should be -+ //the same than distance between logical addresses -+ surfaceOffset = vramoffset + ( uint32_t ) localAddr - ( uint32_t ) data; -+ } -+#endif -+ -+ HWSurface surface( hSurface, surfaceOffset, -+ localAddr, amount, -+ internal, -+ qws_client_id ); -+ surfaceMap.insert( surface.getAddr(), surface ); -+ return( ( uchar* ) localAddr ); -+} -+ -+void QW100Screen::uncache( uchar *c ) -+{ -+ QMap< uchar*, HWSurface >::Iterator itr; -+ if ( ( itr = surfaceMap.find( c ) ) != surfaceMap.end() ) { -+ driver.waitComplete( -1 ); -+ if ( itr.data().internal() ) { -+ qt_fbdpy->grab( true ); -+ driver.destroySurface( itr.data().getHandle() ); -+ qt_fbdpy->ungrab(); -+ } else { -+ QLinuxFbScreen::uncache( c ); -+ } -+ surfaceMap.remove( itr ); -+ } -+} -+ -+bool QW100Screen::onCard( uchar *p ) const -+{ -+ QMap< uchar*, HWSurface >::ConstIterator itr = surfaceMap.begin(); -+ for ( ; itr != surfaceMap.end(); itr++ ) { -+ uchar *begin; -+ if ( ( begin = itr.data().getAddr() ) <= p ) { -+ if ( ( itr.data().getSize() + begin ) >= p ) { -+ return TRUE; -+ } -+ } -+ } -+ return FALSE; -+} -+ -+bool QW100Screen::onCard( unsigned char *p, ulong& offset ) const -+{ -+ QMap< uchar*, HWSurface >::ConstIterator itr; -+ for ( itr = surfaceMap.begin(); itr != surfaceMap.end(); itr++ ) { -+ uchar *begin; -+ if ( ( begin = itr.data().getAddr() ) <= p ) { -+ if ( ( itr.data().getSize() + begin ) >= p ) { -+ offset = itr.data().getSOffset() + ( p - begin ); -+ return TRUE; -+ } -+ } -+ } -+ return FALSE; -+} -+ -+QMap< uchar*, QW100Screen::HWSurface > -+*QW100Screen::getPSurfaceMap( void ) const -+{ -+ return ( QMap<uchar*,HWSurface> *) &surfaceMap; -+} -+ -+void QW100Screen::clearCache( int clientId ) -+{ -+ printf( "[%d] CLEARING CACHE FOR %d\n", getpid(), clientId ); -+ driver.log( W100Driver::WARNING, "Cleaning cache for '%d'", clientId ); -+ QMap< uchar*, HWSurface >::Iterator itr = surfaceMap.begin(); -+ while ( itr != surfaceMap.end() ) { -+ if ( itr.data().getCId() == clientId ) { -+ if ( itr.data().internal() ) { -+ qt_fbdpy->grab(); -+ driver.destroySurface( itr.data().getHandle() ); -+ qt_fbdpy->ungrab(); -+ } -+ surfaceMap.remove( itr ); -+ } -+ itr++; -+ } -+ QLinuxFbScreen::clearCache( this, clientId ); -+} -+ -+void QW100Screen::clearCache( QScreen *instance, int clientId ) -+{ -+ QW100Screen *screen = reinterpret_cast<QW100Screen *> ( instance ); -+ screen->clearCache( clientId ); -+} -+ -+void QW100Screen::setTransformation( Transformation t ) -+{ -+ qt_fbdpy->grab( true ); -+ trans = t; -+ -+ QSize s = mapFromDevice( QSize( dw,dh ) ); -+ w = s.width(); -+ h = s.height(); -+ qt_fbdpy->ungrab(); -+} -+ -+QW100Screen::Transformation QW100Screen::transformation( void ) const -+{ -+ return trans; -+} -+ -+QSize QW100Screen::mapToDevice( const QSize &s ) const -+{ -+ if ( trans == Rot90 || trans == Rot270 ) { -+ return QSize( s.height(), s.width() ); -+ } -+ -+ return s; -+} -+ -+QSize QW100Screen::mapFromDevice( const QSize &s ) const -+{ -+ if ( trans == Rot90 || trans == Rot270 ) { -+ return QSize( s.height(), s.width() ); -+ } -+ -+ return s; -+} -+ -+QPoint QW100Screen::mapToDevice( const QPoint &p, const QSize &s ) const -+{ -+ QPoint rp( p ); -+ -+ switch ( trans ) { -+ case Rot90: -+ rp.setX( p.y() ); -+ rp.setY( s.width() - p.x() - 1 ); -+ break; -+ case Rot180: -+ rp.setX( s.width() - p.x() - 1 ); -+ rp.setY( s.height() - p.y() - 1 ); -+ break; -+ case Rot270: -+ rp.setX( s.height() - p.y() - 1 ); -+ rp.setY( p.x() ); -+ break; -+ default: -+ break; -+ } -+ -+ return rp; -+} -+ -+QPoint QW100Screen::mapFromDevice( const QPoint &p, const QSize &s ) const -+{ -+ QPoint rp( p ); -+ -+ switch ( trans ) { -+ case Rot90: -+ rp.setX( s.height() - p.y() - 1 ); -+ rp.setY( p.x() ); -+ break; -+ case Rot180: -+ rp.setX( s.width() - p.x() - 1 ); -+ rp.setY( s.height() - p.y() - 1 ); -+ break; -+ case Rot270: -+ rp.setX( p.y() ); -+ rp.setY( s.width() - p.x() - 1 ); -+ break; -+ default: -+ break; -+ } -+ -+ return rp; -+} -+ -+QRect QW100Screen::mapToDevice( const QRect &r, const QSize &s ) const -+{ -+ QRect tr; -+ switch ( trans ) { -+ case Rot90: -+ tr.setCoords( r.y(), s.width() - r.x() - 1, -+ r.bottom(), s.width() - r.right() - 1 ); -+ break; -+ case Rot180: -+ tr.setCoords( s.width() - r.x() - 1, s.height() - r.y() - 1, -+ s.width() - r.right() - 1, s.height() - r.bottom() - 1 ); -+ break; -+ case Rot270: -+ tr.setCoords( s.height() - r.y() - 1, r.x(), -+ s.height() - r.bottom() - 1, r.right() ); -+ break; -+ default: -+ tr = r; -+ break; -+ } -+ -+ return tr.normalize(); -+} -+ -+QRect QW100Screen::mapFromDevice( const QRect &r, const QSize &s ) const -+{ -+ QRect tr; -+ switch ( trans ) { -+ case Rot90: -+ tr.setCoords( s.height() - r.y() - 1, r.x(), -+ s.height() - r.bottom() - 1, r.right() ); -+ break; -+ case Rot180: -+ tr.setCoords( s.width() - r.x() - 1, s.height() - r.y() - 1, -+ s.width() - r.right() - 1, s.height() - r.bottom() - 1 ); -+ break; -+ case Rot270: -+ tr.setCoords( r.y(), s.width() - r.x() - 1, -+ r.bottom(), s.width() - r.right() - 1 ); -+ break; -+ default: -+ tr = r; -+ break; -+ } -+ -+ return tr.normalize(); -+} -+ -+template<class T> -+static inline void rotateLoopTemplate( uchar *src, int srcBytesPerLine, -+ uchar *dst, int dstBytesPerLine, -+ int width, int height, -+ QW100Screen::Transformation trans, -+ bool mapToDevice ) -+{ -+ int dstXAdd = 0; -+ int dstYAdd = 0; -+ int dstXOfs = 0; -+ int dstYOfs = 0; -+ int srcYAdd = srcBytesPerLine - width * sizeof(T); -+ -+ if ( !mapToDevice ) { -+ if ( trans == QW100Screen::Rot90 ) -+ trans = QW100Screen::Rot270; -+ else if ( trans == QW100Screen::Rot270 ) -+ trans = QW100Screen::Rot90; -+ } -+ -+ switch ( trans ) { -+ case QW100Screen::Rot90: -+ dstXOfs = 0; -+ dstYOfs = width - 1; -+ dstXAdd = -dstBytesPerLine; -+ dstYAdd = 1 * sizeof(T) + width * dstBytesPerLine; -+ break; -+ case QW100Screen::Rot270: -+ dstXOfs = height - 1; -+ dstYOfs = 0; -+ dstXAdd = dstBytesPerLine; -+ dstYAdd = -1 * sizeof(T) - width * dstBytesPerLine; -+ break; -+ default: -+ dstXOfs = width - 1; -+ dstYOfs = height - 1; -+ dstXAdd = -1 * sizeof(T); -+ dstYAdd = -dstBytesPerLine + width * sizeof(T); -+ break; -+ }; -+ -+ T *dstPtr = (T *)(dst + dstYOfs * dstBytesPerLine) + dstXOfs; -+ T *srcPtr = (T *)src; -+ for ( int y = 0; y < height; y++ ) { -+ for ( int x = 0; x < width; x++ ) { -+ *dstPtr = *srcPtr++; -+ dstPtr = (T *)((uchar*)dstPtr + dstXAdd); // add dstXAdd number of bytes -+ } -+ srcPtr = (T *)((uchar*)srcPtr + srcYAdd); // add srcYAdd number of bytes -+ dstPtr = (T *)((uchar*)dstPtr + dstYAdd); // add dstYAdd number of bytes -+ } -+} -+ -+QImage QW100Screen::mapToDevice( const QImage &img ) const -+{ -+ if ( img.isNull() || trans == None ) -+ return img; -+ -+ int iw = img.width(); -+ int ih = img.height(); -+ int w = iw; -+ int h = ih; -+ if ( trans == Rot90 || trans == Rot270 ) { -+ w = ih; -+ h = iw; -+ } -+ -+ QImage rimg( w, h, img.depth(), img.numColors(), img.bitOrder() ); -+ -+ for ( int i = 0; i < img.numColors(); i++ ) { -+ rimg.colorTable()[i] = img.colorTable()[i]; -+ } -+ -+ // Optimized image rotation code for nice bit depths -+ int d = img.depth(); -+ if ( d == 8 || d == 16 || d == 32 ) { -+ int srcBytesPerLine = img.bytesPerLine(); -+ int dstBytesPerLine = rimg.bytesPerLine(); -+ uchar *srcBits = img.bits(); -+ uchar *dstBits = rimg.bits(); -+ switch ( d ) { -+ case 8: -+ rotateLoopTemplate<uchar>( srcBits, srcBytesPerLine, dstBits, dstBytesPerLine, iw, ih, trans, TRUE ); -+ break; -+ case 16: -+ rotateLoopTemplate<ushort>( srcBits, srcBytesPerLine, dstBits, dstBytesPerLine, iw, ih, trans, TRUE ); -+ break; -+ case 32: -+ rotateLoopTemplate<uint>( srcBits, srcBytesPerLine, dstBits, dstBytesPerLine, iw, ih, trans, TRUE ); -+ break; -+ } -+ rimg.setAlphaBuffer( img.hasAlphaBuffer() ); -+ rimg.setOffset( img.offset() ); -+ return rimg; -+ } -+ -+ // Slower fall back code for image rotation for 1-bit and other depths -+#define ROTATE_LOOP( X, Y, VAL ) \ -+ for ( int y = 0; y < ih; y++ ) { \ -+ for ( int x = 0; x < iw; x++ ) { \ -+ rimg.setPixel( X, Y, VAL ); \ -+ } \ -+ } \ -+ break; -+ -+ if ( img.depth() > 8 ) { -+ switch ( trans ) { -+ case Rot90: -+ ROTATE_LOOP( y, iw - x - 1, img.pixel(x, y) ) -+ case Rot270: -+ ROTATE_LOOP( ih - y - 1, x, img.pixel(x, y) ); -+ default: -+ ROTATE_LOOP( iw - x - 1, ih - y - 1, img.pixel(x, y) ); -+ } -+ } else { -+ switch ( trans ) { -+ case Rot90: -+ ROTATE_LOOP( y, iw - x - 1, img.pixelIndex(x, y) ); -+ case Rot270: -+ ROTATE_LOOP( ih - y - 1, x, img.pixelIndex(x, y) ); -+ default: -+ ROTATE_LOOP( iw - x - 1, ih - y - 1, img.pixelIndex(x, y) ); -+ } -+ } -+ -+#undef ROTATE_LOOP -+ -+ rimg.setAlphaBuffer( img.hasAlphaBuffer() ); -+ rimg.setOffset( img.offset() ); -+ -+ return rimg; -+} -+ -+QImage QW100Screen::mapFromDevice( const QImage &img ) const -+{ -+ if ( img.isNull() || trans == None ) -+ return img; -+ -+ int iw = img.width(); -+ int ih = img.height(); -+ int w = iw; -+ int h = ih; -+ if ( trans == Rot90 || trans == Rot270 ) { -+ w = ih; -+ h = iw; -+ } -+ -+ QImage rimg( w, h, img.depth(), img.numColors(), img.bitOrder() ); -+ -+ for ( int i = 0; i < img.numColors(); i++ ) { -+ rimg.colorTable()[i] = img.colorTable()[i]; -+ } -+ -+ // Optimized image rotation code for nice bit depths -+ int d = img.depth(); -+ if ( d == 8 || d == 16 || d == 32 ) { -+ int srcBytesPerLine = img.bytesPerLine(); -+ int dstBytesPerLine = rimg.bytesPerLine(); -+ uchar *srcBits = img.bits(); -+ uchar *dstBits = rimg.bits(); -+ switch ( d ) { -+ case 8: -+ rotateLoopTemplate<uchar>( srcBits, srcBytesPerLine, dstBits, dstBytesPerLine, iw, ih, trans, FALSE ); -+ break; -+ case 16: -+ rotateLoopTemplate<ushort>( srcBits, srcBytesPerLine, dstBits, dstBytesPerLine, iw, ih, trans, FALSE ); -+ break; -+ case 32: -+ rotateLoopTemplate<uint>( srcBits, srcBytesPerLine, dstBits, dstBytesPerLine, iw, ih, trans, FALSE ); -+ break; -+ } -+ rimg.setAlphaBuffer( img.hasAlphaBuffer() ); -+ rimg.setOffset( img.offset() ); -+ return rimg; -+ } -+ -+ // Slower fall back code for image rotation for 1-bit and other depths -+#define ROTATE_LOOP( X, Y, VAL ) \ -+ for ( int y = 0; y < ih; y++ ) { \ -+ for ( int x = 0; x < iw; x++ ) { \ -+ rimg.setPixel( X, Y, VAL ); \ -+ } \ -+ } \ -+ break; -+ -+ if ( img.depth() > 8 ) { -+ switch ( trans ) { -+ case Rot90: -+ ROTATE_LOOP( ih - y - 1, x, img.pixel(x, y) ); -+ case Rot270: -+ ROTATE_LOOP( y, iw - x - 1, img.pixel(x, y) ) -+ default: -+ ROTATE_LOOP( iw - x - 1, ih - y - 1, img.pixel(x, y) ); -+ } -+ } else { -+ switch ( trans ) { -+ case Rot90: -+ ROTATE_LOOP( ih - y - 1, x, img.pixelIndex(x, y) ); -+ case Rot270: -+ ROTATE_LOOP( y, iw - x - 1, img.pixelIndex(x, y) ); -+ default: -+ ROTATE_LOOP( iw - x - 1, ih - y - 1, img.pixelIndex(x, y) ); -+ } -+ } -+ -+#undef ROTATE_LOOP -+ -+ rimg.setAlphaBuffer( img.hasAlphaBuffer() ); -+ rimg.setOffset( img.offset() ); -+ -+ return rimg; -+} -+ -+QRegion QW100Screen::mapToDevice( const QRegion &rgn, const QSize &s ) const -+{ -+ if ( trans == None ) -+ return rgn; -+ -+ QRegion trgn; -+ QArray<QRect> a = rgn.rects(); -+ QRect tr; -+ const QRect *r = a.data(); -+ -+ int w = s.width(); -+ int h = s.height(); -+ int size = a.size(); -+ -+ switch ( trans ) { -+ case Rot270: -+ for ( int i = 0; i < size; i++, r++ ) { -+ tr.setCoords( h - r->y() - 1, r->x(), -+ h - r->bottom() - 1, r->right() ); -+ trgn |= tr.normalize(); -+ } -+ break; -+ case Rot90: -+ for ( int i = 0; i < size; i++, r++ ) { -+ tr.setCoords( r->y(), w - r->x() - 1, -+ r->bottom(), w - r->right() - 1 ); -+ trgn |= tr.normalize(); -+ } -+ break; -+ case Rot180: -+ for ( int i = 0; i < size; i++, r++ ) { -+ tr.setCoords( w - r->x() - 1, h - r->y() - 1, -+ w - r->right() - 1, h - r->bottom() - 1 ); -+ trgn |= tr.normalize(); -+ } -+ break; -+ default: -+ break; -+ } -+ return trgn; -+} -+ -+QRegion QW100Screen::mapFromDevice( const QRegion &rgn, const QSize &s ) const -+{ -+ if ( trans == None ) -+ return rgn; -+ -+ QRegion trgn; -+ QArray<QRect> a = rgn.rects(); -+ const QRect *r = a.data(); -+ QRect tr; -+ -+ int w = s.width(); -+ int h = s.height(); -+ int size = a.size(); -+ -+ switch ( trans ) { -+ case Rot270: -+ for ( int i = 0; i < size; i++, r++ ) { -+ tr.setCoords( r->y(), w - r->x() - 1, -+ r->bottom(), w - r->right() - 1 ); -+ trgn |= tr.normalize(); -+ } -+ break; -+ case Rot90: -+ for ( int i = 0; i < size; i++, r++ ) { -+ tr.setCoords( h - r->y() - 1, r->x(), -+ h - r->bottom() - 1, r->right() ); -+ trgn |= tr.normalize(); -+ } -+ break; -+ case Rot180: -+ for ( int i = 0; i < size; i++, r++ ) { -+ tr.setCoords( w - r->x() - 1, h - r->y() - 1, -+ w - r->right() - 1, h - r->bottom() - 1 ); -+ trgn |= tr.normalize(); -+ } -+ break; -+ default: -+ break; -+ } -+ -+ return trgn; -+} -+ -+/*! -+ 0 = none -+ 1..3 = rotates 90..270 -+ 4..7 = mirrored 0..3 -+*/ -+int QW100Screen::transformOrientation() const -+{ -+ return (int)trans; -+} -+ -+ -+void qws_w100Transformation( int t ) -+{ -+ if ( qt_w100_screen ) { -+ qt_w100_screen->setTransformation( static_cast<QW100Screen::Transformation>( t ) ); -+ } -+} -+ -+extern bool qws_accel; -+ -+extern "C" QScreen * qt_get_screen_w100( int display_id ) -+{ -+ return( new QW100Screen( display_id ) ); -+} -Index: qt-2.3.10-snapshot-20060120/src/kernel/qapplication_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qapplication_qws.cpp 2006-01-20 20:48:07.131939024 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qapplication_qws.cpp 2006-01-20 21:17:39.461503976 +0100 -@@ -1450,16 +1450,25 @@ - extern void qws_clearLoadedFonts(); - #endif - -+#ifndef QT_NO_QWS_W100 -+extern void qws_w100Transformation( int t ); -+#endif -+ - void QWSDisplay::setTransformation( int t ) - { --#ifndef QT_NO_QWS_TRANSFORMED -+#if !defined(QT_NO_QWS_TRANSFORMED) || !defined(QT_NO_QWS_W100) - QRect mwr = qt_screen->mapToDevice(qt_maxWindowRect, - QSize(qt_screen->width(), qt_screen->height()) ); - - QPixmapCache::clear(); - qws_clearLoadedFonts(); - qws_mapPixmaps( TRUE ); -+#ifndef QT_NO_QWS_TRANSFORMED - qws_setScreenTransformation( t ); -+#endif -+#ifndef QT_NO_QWS_W100 -+ qws_w100Transformation( t ); -+#endif - qws_mapPixmaps( FALSE ); - - if ( qt_fbdpy->d->directServerConnection() ) { diff --git a/packages/qte/qte-2.3.12/daemonize.patch b/packages/qte/qte-2.3.12/daemonize.patch deleted file mode 100644 index 49124b5dbc..0000000000 --- a/packages/qte/qte-2.3.12/daemonize.patch +++ /dev/null @@ -1,115 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - -Index: qt-2.3.10-snapshot-20060120/src/kernel/qapplication_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qapplication_qws.cpp 2006-01-20 20:46:52.639263632 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qapplication_qws.cpp 2006-01-20 20:48:07.131939024 +0100 -@@ -105,6 +105,7 @@ - - #include <sys/time.h> - #include <sys/times.h> -+#include <syslog.h> - - #if defined(_OS_AIX_) && defined(_CC_GNU_) - #include <sys/select.h> -@@ -164,6 +165,7 @@ - //these used to be environment variables, they are initialized from - //environment variables in - -+bool qws_daemon = TRUE; - bool qws_savefonts = FALSE; - bool qws_screen_is_interlaced=FALSE; //### should be detected - bool qws_shared_memory = FALSE; -@@ -1688,6 +1690,10 @@ - mwGeometry = argv[i]; - } else if ( arg == "-shared" ) { - qws_shared_memory = TRUE; -+ } else if ( arg == "-daemon" ) { -+ qws_daemon = TRUE; -+ } else if ( arg == "-nodaemon" ) { -+ qws_daemon = FALSE; - } else if ( arg == "-noshared" ) { - qws_shared_memory = FALSE; - } else if ( arg == "-savefonts" ) { -@@ -1745,6 +1751,78 @@ - qt_appType = type; - qws_single_process = TRUE; - -+ /* Daemonize the server process -- (C) Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> -+ * Added a new command line option which only is relevant if the application is created as a GuiServer. -+ * The option is -daemon respectively -nodaemon. If in daemon mode (which is the default now), the -+ * server will detach from the controlling terminal and continue as a daemon. This is done via the standard -+ * UNIX double fork magic. -+ */ -+ if ( qws_daemon ) -+ { -+ qWarning( "qt_init() - starting in daemon mode..." ); -+ -+ int pid1 = fork(); -+ if ( pid1 == -1 ) -+ { -+ qWarning( "qt_init() - can't perform initial fork: %s", strerror( errno ) ); -+ exit( -1 ); -+ } -+ if ( pid1 ) _exit( 0 ); // ok, first fork performed -+ -+ chdir( "/" ); -+ setsid(); -+ umask(0); -+ close(0); -+ close(1); -+ close(2); -+ -+ int fdnull = ::open( "/dev/null", O_RDWR ); -+ if ( fdnull == -1 ) -+ { -+ syslog( 3, "qt_init() - can't open /dev/null to redirect std{in|out|err}: %s", strerror( errno ) ); -+ exit( -1 ); -+ } -+ dup2( fdnull, 0 ); // stdin -+ dup2( fdnull, 1 ); // stdout -+ dup2( fdnull, 2 ); // stderr -+ -+ int pid2 = fork(); -+ if ( pid2 == -1 ) -+ { -+ syslog( 3, "qt_init() - can't perform initial fork: %s", strerror( errno ) ); -+ exit( -1 ); -+ } -+ if ( pid2 ) -+ { -+ syslog( 4, "qt_init() [%d] - successfully entered daemon mode", pid2 ); -+ _exit( 0 ); // ok, second fork performed -+ } -+ } -+ -+ /* -+ * , , -+ * /( )` -+ * \ \___ / | B E W A R E ! -+ * /- _ `-/ ' We are a DAEMON now! -+ * (/\/ \ \ /\ -+ * / / | ` \ -+ * O O ) / | -+ * `-^--'`< ' -+ * (_.) _ ) / -+ * `.___/` / -+ * `-----' / -+ * <----. __ / __ \ -+ * <----|====O)))==) \) /==== -+ * <----' `--' `.__,' \ -+ * | | -+ * \ / -+ * ______( (_ / \______ -+ * (FL) ,' ,-----' | \ -+ * `--{__________) \/ -+ * -+ */ -+ -+ - /* Allocate a dedicated virtual terminal -- (C) Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> - * Added a new command line option which only is relevant if the application is created as a GuiServer. - * The option is -terminal <num>, where <num> specifies the virtual terminal to be occupied by the server. diff --git a/packages/qte/qte-2.3.12/devfs.patch b/packages/qte/qte-2.3.12/devfs.patch deleted file mode 100644 index dd46d516ff..0000000000 --- a/packages/qte/qte-2.3.12/devfs.patch +++ /dev/null @@ -1,161 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - -Index: qt-2.3.10/configure -=================================================================== ---- qt-2.3.10.orig/configure 2005-07-03 12:26:10.000000000 +0200 -+++ qt-2.3.10/configure 2005-07-03 12:30:36.000000000 +0200 -@@ -412,6 +412,9 @@ - -visibility-hidden) - VISIBILITY=YES - ;; -+ -devfs) -+ DEVFS=yes -+ ;; - -no-g++-exceptions) - GPLUSPLUS_EXCEPTIONS=no - ;; -@@ -1302,6 +1305,8 @@ - -visibility-hidden . Use -fvisibility=hidden as default. This requires GCC 4.0 - or a special patched GCC to support the visibility attribute - -+ -devfs ............. Use devfs /dev paths. -+ - -no-g++-exceptions . Disable exceptions on platforms using the GNU C++ - compiler by using the -fno-exceptions flag. - -@@ -1374,6 +1379,10 @@ - then - QT_CXX="${QT_CXX} -DGCC_SUPPORTS_VISIBILITY -fvisibility=hidden" - fi -+if [ "x$DEVFS" = "xyes" ] -+then -+ QT_CXX="${QT_CXX} -DQT_QWS_DEVFS" -+fi - if [ "x$THREAD" = "xyes" ] - then - cat >src-mt.mk <<EOF -Index: qt-2.3.10/src/kernel/qgfxlinuxfb_qws.cpp -=================================================================== ---- qt-2.3.10.orig/src/kernel/qgfxlinuxfb_qws.cpp 2005-07-03 12:26:13.000000000 +0200 -+++ qt-2.3.10/src/kernel/qgfxlinuxfb_qws.cpp 2005-07-03 12:30:36.000000000 +0200 -@@ -101,11 +101,19 @@ - bool QLinuxFbScreen::connect( const QString &displaySpec ) - { - // Check for explicitly specified device -+#ifdef QT_QWS_DEVFS -+ QRegExp r( "/dev/fb/[0-9]+" ); -+#else - QRegExp r( "/dev/fb[0-9]+" ); -+#endif - int len; - int m = r.match( displaySpec, 0, &len ); - -+#ifdef QT_QWS_DEVFS -+ QString dev = (m>=0) ? displaySpec.mid( m, len ) : QString("/dev/fb/0"); -+#else - QString dev = (m>=0) ? displaySpec.mid( m, len ) : QString("/dev/fb0"); -+#endif - - fd=open( dev.latin1(), O_RDWR ); - if (fd<0) { -@@ -121,14 +129,22 @@ - - /* Get fixed screen information */ - if (ioctl(fd, FBIOGET_FSCREENINFO, &finfo)) { -+#ifdef QT_QWS_DEVFS -+ perror("reading /dev/fb/0"); -+#else - perror("reading /dev/fb0"); -+#endif - qWarning("Error reading fixed information"); - return FALSE; - } - - /* Get variable screen information */ - if (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo)) { -+#ifdef QT_QWS_DEVFS -+ perror("reading /dev/fb/0"); -+#else - perror("reading /dev/fb0"); -+#endif - qWarning("Error reading variable information"); - return FALSE; - } -@@ -165,7 +181,11 @@ - data += dataoffset; - - if ((int)data == -1) { -- perror("mapping /dev/fb0"); -+#ifdef QT_QWS_DEVFS -+ perror("reading /dev/fb/0"); -+#else -+ perror("reading /dev/fb0"); -+#endif - qWarning("Error: failed to map framebuffer device to memory."); - return FALSE; - } -@@ -229,7 +249,11 @@ - - static void writeTerm(const char* termctl, int sizeof_termctl) - { -+#ifdef QT_QWS_DEVFS -+ const char* tt[]={"/dev/vc/1","/dev/console","/dev/tty",0}; -+#else - const char* tt[]={"/dev/console","/dev/tty","/dev/tty0",0}; -+#endif - const char** dev=tt; - while (*dev) { - int tty=::open(*dev,O_WRONLY); -Index: qt-2.3.10/src/kernel/qkeyboard_qws.cpp -=================================================================== ---- qt-2.3.10.orig/src/kernel/qkeyboard_qws.cpp 2005-07-03 12:26:13.000000000 +0200 -+++ qt-2.3.10/src/kernel/qkeyboard_qws.cpp 2005-07-03 12:30:36.000000000 +0200 -@@ -1253,7 +1253,11 @@ - - QWSTtyKeyboardHandler::QWSTtyKeyboardHandler(const QString& device) - { -+#ifdef QT_QWS_DEVFS -+ kbdFD=open(device.isEmpty() ? "/dev/vc/1" : device.latin1(), O_RDWR | O_NDELAY, 0); -+#else - kbdFD=open(device.isEmpty() ? "/dev/tty0" : device.latin1(), O_RDWR | O_NDELAY, 0); -+#endif - - if ( kbdFD >= 0 ) { - QSocketNotifier *notifier; -Index: qt-2.3.10/src/kernel/qwindowsystem_qws.cpp -=================================================================== ---- qt-2.3.10.orig/src/kernel/qwindowsystem_qws.cpp 2005-07-03 12:26:11.000000000 +0200 -+++ qt-2.3.10/src/kernel/qwindowsystem_qws.cpp 2005-07-03 12:30:36.000000000 +0200 -@@ -836,7 +836,11 @@ - void openDevice() - { - if ( !sn ) { -+#ifdef QT_QWS_DEVFS -+ int fd = ::open("/dev/sound/dsp",O_RDWR); -+#else - int fd = ::open("/dev/dsp",O_RDWR); -+#endif - if ( fd < 0 ) { - // For debugging purposes - defined QT_NO_SOUND if you - // don't have sound hardware! -Index: qt-2.3.10/src/kernel/qsoundqss_qws.cpp -=================================================================== ---- qt-2.3.10.orig/src/kernel/qsoundqss_qws.cpp 2005-01-23 15:00:46.000000000 +0100 -+++ qt-2.3.10/src/kernel/qsoundqss_qws.cpp 2005-07-03 12:30:36.000000000 +0200 -@@ -1088,7 +1088,12 @@ - // Don't block open right away. - // - bool openOkay = false; -- if ((fd = ::open("/dev/dsp", O_WRONLY|O_NONBLOCK)) != -1) { -+#ifdef QT_QWS_DEVFS -+ if ((fd = ::open("/dev/sound/dsp", O_WRONLY|O_NONBLOCK)) != -1) -+#else -+ if ((fd = ::open("/dev/dsp", O_WRONLY|O_NONBLOCK)) != -1) -+#endif -+ { - int flags = fcntl(fd, F_GETFL); - flags &= ~O_NONBLOCK; - openOkay = (fcntl(fd, F_SETFL, flags) == 0); diff --git a/packages/qte/qte-2.3.12/encoding.patch b/packages/qte/qte-2.3.12/encoding.patch deleted file mode 100644 index 77626c48bf..0000000000 --- a/packages/qte/qte-2.3.12/encoding.patch +++ /dev/null @@ -1,36 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - -Index: qt-2.3.10-snapshot-20060120/src/tools/qstring.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/tools/qstring.cpp 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/tools/qstring.cpp 2006-01-20 20:49:57.610143784 +0100 -@@ -14468,7 +14468,11 @@ - return qt_winQString2MB( *this ); - #endif - #ifdef _WS_QWS_ -- return utf8(); // ##### if there is ANY 8 bit format supported? -+ QTextCodec* codec = QTextCodec::codecForLocale(); -+ return codec -+ ? codec->fromUnicode(*this) -+ : utf8(); -+ //return latin1(); // ##### if there is ANY 8 bit format supported? - #endif - #endif - } -@@ -14514,7 +14518,12 @@ - return qt_winMB2QString( local8Bit ); - #endif - #ifdef _WS_QWS_ -- return fromUtf8(local8Bit,len); -+ QTextCodec* codec = QTextCodec::codecForLocale(); -+ if( len < 0) len = qstrlen(local8Bit); -+ return codec -+ ? codec->toUnicode(local8Bit, len) -+ : QString::fromUtf8(local8Bit,len); -+// return fromLatin1(local8Bit,len); - #endif - #endif // QT_NO_TEXTCODEC - } diff --git a/packages/qte/qte-2.3.12/fix-errno-exception-spec.patch b/packages/qte/qte-2.3.12/fix-errno-exception-spec.patch deleted file mode 100644 index 19a5c134c8..0000000000 --- a/packages/qte/qte-2.3.12/fix-errno-exception-spec.patch +++ /dev/null @@ -1,16 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- qt-2.3.10/src/kernel/qsoundqss_qws.cpp~fix-errno-exception-spec.patch -+++ qt-2.3.10/src/kernel/qsoundqss_qws.cpp -@@ -51,8 +51,6 @@ - #include <sys/ioctl.h> - #include <sys/soundcard.h> - --extern int errno; -- - #define QT_QWS_SOUND_16BIT 1 // or 0, or undefined for always 0 - #define QT_QWS_SOUND_STEREO 1 // or 0, or undefined for always 0 - diff --git a/packages/qte/qte-2.3.12/fix-linuxfb-offscreenoverflow.patch b/packages/qte/qte-2.3.12/fix-linuxfb-offscreenoverflow.patch deleted file mode 100644 index a0bb12940c..0000000000 --- a/packages/qte/qte-2.3.12/fix-linuxfb-offscreenoverflow.patch +++ /dev/null @@ -1,24 +0,0 @@ -Fix an overflow when the amount of requested cache memory -is greater than the *lowest value -Manuel Teira <manuel.teira@telefonica.net> - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - -Index: qt-2.3.10-snapshot-20060120/src/kernel/qgfxlinuxfb_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qgfxlinuxfb_qws.cpp 2006-01-20 21:07:51.803841520 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qgfxlinuxfb_qws.cpp 2006-01-20 21:08:13.655519560 +0100 -@@ -616,6 +616,11 @@ - - // No free blocks in already-taken memory; get some more - // if we can -+ if ( amount >= (*lowest ) ) { -+ //Avoid this overflow -+ qt_fbdpy->ungrab(); -+ return 0; -+ } - unsigned int newlowest = (*lowest)-amount; - if (newlowest % align) { - newlowest -= align; diff --git a/packages/qte/qte-2.3.12/fix-linuxfb-setmode.patch b/packages/qte/qte-2.3.12/fix-linuxfb-setmode.patch deleted file mode 100644 index e6cb25c385..0000000000 --- a/packages/qte/qte-2.3.12/fix-linuxfb-setmode.patch +++ /dev/null @@ -1,36 +0,0 @@ -Set lstep properly on a mode change -Manuel Teira <manuel.teira@telefonica.net> - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - -Index: qt-2.3.10-snapshot-20060120/src/kernel/qgfxlinuxfb_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qgfxlinuxfb_qws.cpp 2006-01-20 20:46:52.641263328 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qgfxlinuxfb_qws.cpp 2006-01-20 21:07:51.803841520 +0100 -@@ -119,13 +119,6 @@ - memset( &finfo, 0, sizeof(fb_fix_screeninfo) ); // keep valgrind happy - memset( &vinfo, 0, sizeof(fb_var_screeninfo) ); // keep valgrind happy - -- /* Get fixed screen information */ -- if (ioctl(fd, FBIOGET_FSCREENINFO, &finfo)) { -- perror("reading /dev/fb0"); -- qWarning("Error reading fixed information"); -- return FALSE; -- } -- - /* Get variable screen information */ - if (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo)) { - perror("reading /dev/fb0"); -@@ -826,6 +819,10 @@ - qFatal("Error reading fixed information"); - } - -+ if (ioctl(fd, FBIOGET_FSCREENINFO, &finfo)) { -+ qFatal("Error reading changed fixed information in mode change"); -+ } -+ - w=vinfo.xres; - h=vinfo.yres; - d=vinfo.bits_per_pixel; diff --git a/packages/qte/qte-2.3.12/fix-qgfxraster.patch b/packages/qte/qte-2.3.12/fix-qgfxraster.patch deleted file mode 100644 index 26bbe1e957..0000000000 --- a/packages/qte/qte-2.3.12/fix-qgfxraster.patch +++ /dev/null @@ -1,30 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - -Index: qt-2.3.10-snapshot-20060120/src/kernel/qgfxraster_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qgfxraster_qws.cpp 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qgfxraster_qws.cpp 2006-01-20 20:50:26.577740040 +0100 -@@ -4076,13 +4076,14 @@ - for( loopc2=0;loopc2<frontadd;loopc2++ ) - *(alphaptr++)=get_value_32(16,(unsigned char **)&temppos); - -- PackType temp2; -- unsigned char * cp; -+ volatile PackType temp2; -+ volatile unsigned short int * cp; - for( loopc2=0;loopc2<count;loopc2++ ) { -- temp2=*((PackType *)temppos); -- cp=(unsigned char *)&temp2; -- *(alphaptr++)=get_value_32(16,&cp); -- *(alphaptr++)=get_value_32(16,&cp); -+ temp2=*reinterpret_cast<PackType *>(temppos); -+ cp=reinterpret_cast<volatile unsigned short int *>(&temp2); -+ *(alphaptr++)=qt_conv16ToRgb(*cp); -+ cp++; -+ *(alphaptr++)=qt_conv16ToRgb(*cp); - temppos += 2; - } - diff --git a/packages/qte/qte-2.3.12/fix-qscreen-sync.patch b/packages/qte/qte-2.3.12/fix-qscreen-sync.patch deleted file mode 100644 index 47929ee1f2..0000000000 --- a/packages/qte/qte-2.3.12/fix-qscreen-sync.patch +++ /dev/null @@ -1,17 +0,0 @@ -Add a sync member to QScreen class -Manuel Teira <manuel.teira@telefonica.net> - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- qt-2.3.10/src/kernel/qgfx_qws.h~fix-qscreen-sync -+++ qt-2.3.10/src/kernel/qgfx_qws.h -@@ -191,6 +191,7 @@ - virtual int pixmapOffsetAlignment() { return 64; } - virtual int pixmapLinestepAlignment() { return 64; } - -+ virtual void sync() {} - virtual bool onCard(unsigned char *) const; - virtual bool onCard(unsigned char *, ulong& out_offset) const; - diff --git a/packages/qte/qte-2.3.12/gcc3.patch b/packages/qte/qte-2.3.12/gcc3.patch deleted file mode 100644 index fc1656aa24..0000000000 --- a/packages/qte/qte-2.3.12/gcc3.patch +++ /dev/null @@ -1,27 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- qt-2.3.9-snapshot-20041211/src/tools/qcstring.h~gcc3 -+++ qt-2.3.9-snapshot-20041211/src/tools/qcstring.h -@@ -119,7 +119,7 @@ - // We want to keep source compatibility for 2.x - // ### TODO for 4.0: completely remove these and the cstr* functions - --#if !defined(QT_GENUINE_STR) -+#if 0 - - #undef strlen - #define strlen qstrlen ---- qt-2.3.9-snapshot-20041211/src/kernel/qwsdecoration_qws.h~gcc3 -+++ qt-2.3.9-snapshot-20041211/src/kernel/qwsdecoration_qws.h -@@ -50,7 +50,7 @@ - enum Region { None=0, All=1, Title=2, Top=3, Bottom=4, Left=5, Right=6, - TopLeft=7, TopRight=8, BottomLeft=9, BottomRight=10, - Close=11, Minimize=12, Maximize=13, Normalize=14, -- Menu=15, LastRegion=Menu }; -+ Menu=15, LastRegion=Menu, UserDefined = 100 }; - - virtual QRegion region(const QWidget *, const QRect &rect, Region r=All) = 0; - virtual void close( QWidget * ); diff --git a/packages/qte/qte-2.3.12/gcc4.patch b/packages/qte/qte-2.3.12/gcc4.patch deleted file mode 100644 index 550effd7ba..0000000000 --- a/packages/qte/qte-2.3.12/gcc4.patch +++ /dev/null @@ -1,16 +0,0 @@ - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - ---- qt-2.3.10/src/tools/qvaluestack.h~gcc4 2005-01-23 15:00:47.000000000 +0100 -+++ qt-2.3.10/src/tools/qvaluestack.h 2006-03-19 02:32:56.000000000 +0100 -@@ -54,7 +54,7 @@ - { - T elem( this->last() ); - if ( !this->isEmpty() ) -- remove( this->fromLast() ); -+ this->remove( this->fromLast() ); - return elem; - } - T& top() { return this->last(); } diff --git a/packages/qte/qte-2.3.12/handhelds.patch b/packages/qte/qte-2.3.12/handhelds.patch deleted file mode 100644 index c4e3c8ce59..0000000000 --- a/packages/qte/qte-2.3.12/handhelds.patch +++ /dev/null @@ -1,66 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - -Index: qt-2.3.10-snapshot-20060120/src/widgets/qcommonstyle.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/widgets/qcommonstyle.cpp 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/widgets/qcommonstyle.cpp 2006-01-20 21:03:08.477913608 +0100 -@@ -572,7 +572,7 @@ - bool enabled, bool active ) - { - #ifndef QT_NO_MENUBAR --#ifndef QT_NO_STYLE_SGI -+#if 1 // #ifndef QT_NO_STYLE_SGI - if (draw_menu_bar_impl != 0) { - QDrawMenuBarItemImpl impl = draw_menu_bar_impl; - (this->*impl)(p, x, y, w, h, mi, g, enabled, active); -Index: qt-2.3.10-snapshot-20060120/src/widgets/qlistview.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/widgets/qlistview.cpp 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/widgets/qlistview.cpp 2006-01-20 21:03:08.480913152 +0100 -@@ -5053,9 +5053,9 @@ - l = l->childItem ? l->childItem : l->siblingItem; - - if ( l && l->height() ) -- s.setHeight( s.height() + 10 * l->height() ); -- else -- s.setHeight( s.height() + 140 ); -+ s.setHeight( s.height() + 4 /*10*/ * l->height() ); -+ else // ^v much too big for handhelds -+ s.setHeight( s.height() + 30 /*140*/ ); - - if ( s.width() > s.height() * 3 ) - s.setHeight( s.width() / 3 ); -Index: qt-2.3.10-snapshot-20060120/src/kernel/qwindowsystem_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qwindowsystem_qws.cpp 2006-01-20 20:57:33.113896688 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qwindowsystem_qws.cpp 2006-01-20 21:03:08.482912848 +0100 -@@ -918,6 +918,18 @@ - { - } - -+static void catchSegvSignal( int ) -+{ -+#ifndef QT_NO_QWS_KEYBOARD -+ if ( qwsServer ) -+ qwsServer->closeKeyboard(); -+#endif -+ QWSServer::closedown(); -+ fprintf(stderr, "Segmentation fault.\n"); -+ exit(1); -+} -+ -+ - /*! - \class QWSServer qwindowsystem_qws.h - \brief Server-specific functionality in Qt/Embedded -@@ -1043,6 +1055,7 @@ - } - - signal(SIGPIPE, ignoreSignal); //we get it when we read -+ signal(SIGSEGV, catchSegvSignal); //recover the keyboard on crash - #endif - focusw = 0; - mouseGrabber = 0; diff --git a/packages/qte/qte-2.3.12/improve-calibration-r0.patch b/packages/qte/qte-2.3.12/improve-calibration-r0.patch deleted file mode 100644 index 9b11f52d83..0000000000 --- a/packages/qte/qte-2.3.12/improve-calibration-r0.patch +++ /dev/null @@ -1,159 +0,0 @@ -Index: qt-2.3.10-snapshot-20060120/src/kernel/qwsmouse_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qwsmouse_qws.cpp 2006-01-20 21:02:45.087469496 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qwsmouse_qws.cpp 2006-01-20 21:08:58.697672112 +0100 -@@ -14,10 +14,6 @@ - ** Foundation and appearing in the file LICENSE.GPL included in the - ** packaging of this file. - ** --** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition --** licenses for Qt/Embedded may use this file in accordance with the --** Qt Embedded Commercial License Agreement provided with the Software. --** - ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE - ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - ** -@@ -30,6 +26,12 @@ - ** - **********************************************************************/ - -+/* -+ * The 5 point algorithim in QTSLibHandlerPrivate::calibrate() is -+ * GPL only code and Copyright (C) 2001 Russel King. -+ * -+ * Taken from ts_calibrate.c from tslib -+ */ - #include "qwindowsystem_qws.h" - #include "qsocketnotifier.h" - #include "qwsevent_qws.h" -@@ -1810,6 +1812,7 @@ - - void QTSLibHandlerPrivate::calibrate( QWSPointerCalibrationData * cd) - { -+#ifdef ORIG_CALIBRATE - QPoint dev_tl = cd->devPoints[ QWSPointerCalibrationData::TopLeft ]; - QPoint dev_br = cd->devPoints[ QWSPointerCalibrationData::BottomRight ]; - QPoint screen_tl = cd->screenPoints[ QWSPointerCalibrationData::TopLeft ]; -@@ -1840,6 +1843,122 @@ - { - qDebug( "Could not save calibration: %s", calFile.latin1() ); - } -+ -+#else -+ int j; -+ float n, x, y, x2, y2, xy, z, zx, zy; -+ float det, cal_a, cal_b, cal_c, cal_d, cal_e, cal_f, cal_i; -+ float scaling = 65536.0; -+ int cal_x[5], cal_xfb[5], cal_y[5], cal_yfb[5], cal_o[7]; -+ -+ cal_x[0]=cd->devPoints[ QWSPointerCalibrationData::TopLeft ].x(); -+ cal_y[0]=cd->devPoints[ QWSPointerCalibrationData::TopLeft ].y(); -+ cal_x[1]=cd->devPoints[ QWSPointerCalibrationData::TopRight ].x(); -+ cal_y[1]=cd->devPoints[ QWSPointerCalibrationData::TopRight ].y(); -+ cal_x[2]=cd->devPoints[ QWSPointerCalibrationData::BottomLeft ].x(); -+ cal_y[2]=cd->devPoints[ QWSPointerCalibrationData::BottomLeft ].y(); -+ cal_x[3]=cd->devPoints[ QWSPointerCalibrationData::BottomRight ].x(); -+ cal_y[3]=cd->devPoints[ QWSPointerCalibrationData::BottomRight ].y(); -+ cal_x[4]=cd->devPoints[ QWSPointerCalibrationData::Center ].x(); -+ cal_y[4]=cd->devPoints[ QWSPointerCalibrationData::Center ].y(); -+ -+ cal_xfb[0]=cd->screenPoints[ QWSPointerCalibrationData::TopLeft ].x(); -+ cal_yfb[0]=cd->screenPoints[ QWSPointerCalibrationData::TopLeft ].y(); -+ cal_xfb[1]=cd->screenPoints[ QWSPointerCalibrationData::TopRight ].x(); -+ cal_yfb[1]=cd->screenPoints[ QWSPointerCalibrationData::TopRight ].y(); -+ cal_xfb[2]=cd->screenPoints[ QWSPointerCalibrationData::BottomLeft ].x(); -+ cal_yfb[2]=cd->screenPoints[ QWSPointerCalibrationData::BottomLeft ].y(); -+ cal_xfb[3]=cd->screenPoints[ QWSPointerCalibrationData::BottomRight ].x(); -+ cal_yfb[3]=cd->screenPoints[ QWSPointerCalibrationData::BottomRight ].y(); -+ cal_xfb[4]=cd->screenPoints[ QWSPointerCalibrationData::Center ].x(); -+ cal_yfb[4]=cd->screenPoints[ QWSPointerCalibrationData::Center ].y(); -+ -+ //qDebug("Top left : X = %4d Y = %4d", cal_x[0], cal_y[0]); -+ //qDebug("Top right: X = %4d Y = %4d", cal_x[1], cal_y[1]); -+ //qDebug("Bot left : X = %4d Y = %4d", cal_x[2], cal_y[2]); -+ //qDebug("Bot right: X = %4d Y = %4d", cal_x[3], cal_y[3]); -+ //qDebug("Middle: X = %4d Y = %4d", cal_x[4], cal_y[4]); -+ -+ // Get sums for matrix -+ n = x = y = x2 = y2 = xy = 0; -+ for(j=0;j<5;j++) { -+ n += 1.0; -+ x += (float)cal_x[j]; -+ y += (float)cal_y[j]; -+ x2 += (float)(cal_x[j]*cal_x[j]); -+ y2 += (float)(cal_y[j]*cal_y[j]); -+ xy += (float)(cal_x[j]*cal_y[j]); -+ } -+ -+ // Get determinant of matrix -- check if determinant is too small -+ det = n*(x2*y2 - xy*xy) + x*(xy*y - x*y2) + y*(x*xy - y*x2); -+ if(det < 0.1 && det > -0.1) { -+ qDebug("determinant is too small -- %f",det); -+ return;// false; -+ } -+ -+ // Get elements of inverse matrix -+ cal_a = (x2*y2 - xy*xy)/det; -+ cal_b = (xy*y - x*y2)/det; -+ cal_c = (x*xy - y*x2)/det; -+ cal_e = (n*y2 - y*y)/det; -+ cal_f = (x*y - n*xy)/det; -+ cal_i = (n*x2 - x*x)/det; -+ -+ // Get sums for x calibration -+ z = zx = zy = 0; -+ for(j=0;j<5;j++) { -+ z += (float)cal_xfb[j]; -+ zx += (float)(cal_xfb[j]*cal_x[j]); -+ zy += (float)(cal_xfb[j]*cal_y[j]); -+ } -+ -+ // Now multiply out to get the calibration for framebuffer x coord -+ cal_o[0] = (int)((cal_a*z + cal_b*zx + cal_c*zy)*(scaling)); -+ cal_o[1] = (int)((cal_b*z + cal_e*zx + cal_f*zy)*(scaling)); -+ cal_o[2] = (int)((cal_c*z + cal_f*zx + cal_i*zy)*(scaling)); -+ -+ qDebug("%f %f %f",(cal_a*z + cal_b*zx + cal_c*zy), (cal_b*z + cal_e*zx + cal_f*zy), (cal_c*z + cal_f*zx + cal_i*zy)); -+ -+ // Get sums for y calibration -+ z = zx = zy = 0; -+ for (j=0;j<5;j++) { -+ z += (float)cal_yfb[j]; -+ zx += (float)(cal_yfb[j]*cal_x[j]); -+ zy += (float)(cal_yfb[j]*cal_y[j]); -+ } -+ -+ // Now multiply out to get the calibration for framebuffer y coord -+ cal_o[3] = (int)((cal_a*z + cal_b*zx + cal_c*zy)*(scaling)); -+ cal_o[4] = (int)((cal_b*z + cal_e*zx + cal_f*zy)*(scaling)); -+ cal_o[5] = (int)((cal_c*z + cal_f*zx + cal_i*zy)*(scaling)); -+ -+ qDebug("%f %f %f",(cal_a*z + cal_b*zx + cal_c*zy), (cal_b*z + cal_e*zx + cal_f*zy), (cal_c*z + cal_f*zx + cal_i*zy)); -+ -+ -+ // If we got here, we're OK, so assign scaling to a[6] and return -+ cal_o[6] = (int) scaling; -+ -+ qDebug("Calibration constants: %d %d %d %d %d %d %d", -+ cal_o[0], cal_o[1], cal_o[2], -+ cal_o[3], cal_o[4], cal_o[5], -+ cal_o[6]); -+ -+ QString calFile = "/etc/pointercal"; -+#ifndef QT_NO_TEXTSTREAM -+ QFile file( calFile ); -+ if ( file.open( IO_WriteOnly ) ) { -+ QTextStream t( &file ); -+ t << cal_o[1] << " " << cal_o[2] << " " << cal_o[0] << " "; -+ t << cal_o[4] << " " << cal_o[5] << " " << cal_o[3] << " " << cal_o[6]; -+ file.flush(); closeTs(); -+ openTs(); -+ } else -+#endif -+ { -+ qDebug( "Could not save calibration: %s", calFile.latin1() ); -+ } -+#endif - } - - void QTSLibHandlerPrivate::readMouseData() diff --git a/packages/qte/qte-2.3.12/increase-qxml-robustness.patch b/packages/qte/qte-2.3.12/increase-qxml-robustness.patch deleted file mode 100644 index 3a29b4ab03..0000000000 --- a/packages/qte/qte-2.3.12/increase-qxml-robustness.patch +++ /dev/null @@ -1,17 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- qt-2.3.10/src/xml/qxml.cpp~xml -+++ qt-2.3.10/src/xml/qxml.cpp -@@ -809,6 +809,9 @@ - // ### The input source should not do the encoding detection! - void QXmlInputSource::readInput( QByteArray& rawData ) - { -+ // avoid crash if the array has less than 5 characters (skyhusker@handhelds.org) -+ if ( rawData.size() < 6 ) -+ return; - QBuffer buf( rawData ); - buf.open( IO_ReadOnly ); - QTextStream *stream = new QTextStream( &buf ); diff --git a/packages/qte/qte-2.3.12/ipaq-keyboard.patch b/packages/qte/qte-2.3.12/ipaq-keyboard.patch deleted file mode 100644 index 6aa33242f5..0000000000 --- a/packages/qte/qte-2.3.12/ipaq-keyboard.patch +++ /dev/null @@ -1,27 +0,0 @@ -Index: qt-2.3.10-snapshot-20060120/src/kernel/qkeyboard_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qkeyboard_qws.cpp 2006-01-20 21:22:10.391316384 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qkeyboard_qws.cpp 2006-01-20 21:25:41.190270072 +0100 -@@ -571,17 +571,17 @@ - { Qt::Key_Plus, '+' , '-' , 0xffff }, - { Qt::Key_Pause, 0xffff , 0xffff , 0xffff }, // 120 - { Qt::Key_F31, 0xffff , 0xffff , 0xffff }, // IM toggle -- { Qt::Key_F32, 0xffff , 0xffff , 0xffff }, // Sync -- { Qt::Key_F34, 0xffff , 0xffff , 0xffff }, // Power -- { Qt::Key_F35, 0xffff , 0xffff , 0xffff }, // Backlight -+ { Qt::Key_SysReq, 0xffff , 0xffff , 0xffff }, // iPAQ -+ { Qt::Key_F9, 0xffff , 0xffff , 0xffff }, // iPAQ -+ { Qt::Key_F10, 0xffff , 0xffff , 0xffff }, // iPAQ - #if defined(QT_KEYPAD_MODE) - { Qt::Key_Context1, 0xffff , 0xffff , 0xffff }, - { Qt::Key_Context2, 0xffff , 0xffff , 0xffff }, - { Qt::Key_Context3, 0xffff , 0xffff , 0xffff }, - { Qt::Key_Context4, 0xffff , 0xffff , 0xffff }, - #else -- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, -- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, -+ { Qt::Key_F13, 0xffff , 0xffff , 0xffff }, // iPAQ -+ { Qt::Key_F12, 0xffff , 0xffff , 0xffff }, // iPAQ - { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, - { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, - #endif diff --git a/packages/qte/qte-2.3.12/ipaq_sound_fix.patch b/packages/qte/qte-2.3.12/ipaq_sound_fix.patch deleted file mode 100644 index a5874b4d6c..0000000000 --- a/packages/qte/qte-2.3.12/ipaq_sound_fix.patch +++ /dev/null @@ -1,60 +0,0 @@ -Attention HACK ahead: - The OpenSoundSystem is just scary this is a special hack - for supporting iPAQ(s) at least h3870. - - Features: - -It does not crash when playing a 'null' file - -Change sound fragment size to 12 - -Force stereo on!!! (hardcoded at least uda1341 needs it) - - - -Index: qt-2.3.10-snapshot-20060120/src/kernel/qsoundqss_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qsoundqss_qws.cpp 2006-01-20 21:15:58.396868136 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qsoundqss_qws.cpp 2006-01-20 21:22:27.674688912 +0100 -@@ -73,7 +73,7 @@ - }; - - #if defined(QT_QWS_IPAQ) --static const int sound_fragment_size = 12; -+static const int sound_fragment_size = 14; - #else - static const int sound_fragment_size = 12; - #endif -@@ -520,8 +520,14 @@ - - int devSamples() - { -- int possible = (((max1+max2-out) / ((chunkdata.wBitsPerSample>>3)*chunkdata.channels)) -- *sound_speed)/chunkdata.samplesPerSec; -+ if ( !(chunkdata.wBitsPerSample>>3) || -+ !chunkdata.channels || -+ !sound_speed || -+ !chunkdata.samplesPerSec ) -+ return 0; -+ -+ int possible = (((max1+max2-out) / ((chunkdata.wBitsPerSample>>3 )*chunkdata.channels)) -+ *sound_speed)/chunkdata.samplesPerSec; - - return possible; - } -@@ -1510,12 +1516,14 @@ - if ( AFMT_U8 != v ) - qDebug("Want format %d got %d", AFMT_U8, v); - #endif -- v=sound_stereo; if ( ioctl(fd, SNDCTL_DSP_STEREO, &v) ) -+ v=1; if ( ioctl(fd, SNDCTL_DSP_STEREO, &v) ) - qWarning("Could not set stereo %d",v); - if ( sound_stereo != v ) -- qDebug("Want stereo %d got %d", sound_stereo, v); --#ifdef QT_QWS_SOUND_STEREO -- sound_stereo=v; -+ qDebug("Want stereo %d got %d", sound_stereo, v); -+#if defined(QT_QWS_IPAQ) -+ sound_stereo=1; -+#elif QT_QWS_SOUND_STEREO -+ sound_stereo=v; - #endif - v=sound_speed; if ( ioctl(fd, SNDCTL_DSP_SPEED, &sound_speed) ) - qWarning("Could not set speed %d",v); diff --git a/packages/qte/qte-2.3.12/kernel-keymap-CXK.patch b/packages/qte/qte-2.3.12/kernel-keymap-CXK.patch deleted file mode 100644 index 6aca81e97d..0000000000 --- a/packages/qte/qte-2.3.12/kernel-keymap-CXK.patch +++ /dev/null @@ -1,19 +0,0 @@ - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - ---- qt-2.3.10/src/kernel/qkeyboard_qws.cpp~kernel-keymap-CXK.patch 2005-05-05 19:34:05.000000000 +0200 -+++ qt-2.3.10/src/kernel/qkeyboard_qws.cpp 2005-05-05 19:35:47.000000000 +0200 -@@ -1809,7 +1809,11 @@ - case Qt::Key_Up: - case Qt::Key_Down: - mod_key = false; -+#if QT_QWS_SLCXK -+ if (qt_screen->transformOrientation() != 3) -+#else - if (qt_screen->isTransformed()) -+#endif - qtKeyCode = static_cast<Qt::Key>( xform_dirkey(static_cast<int>( qtKeyCode ) ) ); - break; - /* diff --git a/packages/qte/qte-2.3.12/kernel-keymap-corgi.patch b/packages/qte/qte-2.3.12/kernel-keymap-corgi.patch deleted file mode 100644 index 7611590322..0000000000 --- a/packages/qte/qte-2.3.12/kernel-keymap-corgi.patch +++ /dev/null @@ -1,25 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - -Index: qt-2.3.10-snapshot-20060120/src/kernel/qkeyboard_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qkeyboard_qws.cpp 2006-01-20 21:16:25.412761096 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qkeyboard_qws.cpp 2006-01-20 21:16:49.508098048 +0100 -@@ -420,6 +420,15 @@ - { 0x20ac, 0xffff , 0x20ac , 0x20ac }, // 73 Euro sign - { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 74 - { Qt::Key_F32, 0xffff , 0xffff , 0xffff }, // 75 Sync -+ { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 76 -+ { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 77 -+ { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 78 -+ { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 79 -+ { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 7a -+ { Qt::Key_Return, 0xffff , 0xffff , 0xffff }, // 7b -+ { Qt::Key_Escape, 0xffff , 0xffff , 0xffff }, // 7c -+ { Qt::Key_Up, 0xffff , 0xffff , 0xffff }, // 7d -+ { Qt::Key_Down, 0xffff , 0xffff , 0xffff }, // 7e - { 0, 0xffff , 0xffff , 0xffff } - }; - #else diff --git a/packages/qte/qte-2.3.12/kernel-keymap.patch b/packages/qte/qte-2.3.12/kernel-keymap.patch deleted file mode 100644 index 52771b0398..0000000000 --- a/packages/qte/qte-2.3.12/kernel-keymap.patch +++ /dev/null @@ -1,1042 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - -Index: qt-2.3.10-snapshot-20060120/src/kernel/qkeyboard_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qkeyboard_qws.cpp 2006-01-20 21:15:58.396868136 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qkeyboard_qws.cpp 2006-01-20 21:16:25.412761096 +0100 -@@ -30,6 +30,42 @@ - ** - **********************************************************************/ - -+/**************************************************************************** -+** -+** Keyboard Handling Redesign -+** Copyright 2003, Chris Larson <kergoth@handhelds.org> -+** Copyright 2004,2005 Holger Hans Peter Frether <freyther@handhelds.org> -+** -+** TODO: (key: . = in progress, x = completed) -+** -+** [.] Tty driver should load its initial keymap from the kernel, -+** thereby ensuring keymap consistency between X, console, and qt/e -+** [x] Read kernel keymappings. -+** [x] Read kernel keycode -> unicode map. -+** [x] Use them, along with the existing keyM, to push events up. -+** [x] Create a new table, from transformed keycode -> qt keycode, rather -+** than the existing raw keycode -> qt keycode. -+** [ ] Adapt handleKey to deal with keys that have no unicode value, such as -+** keypresses that are mapped to strings in the string table. (e.g. F keys) -+** [x] Cursor orientation change based on display rotation should not -+** be bound to Ipaq or 5xxx, but instead as a runtime choice based -+** on whether or not we're using a Transformed display driver. -+** [.] Double check that VT handling, particularly with regard to switching, -+** is handled properly. -+** [ ] Add a generic means of dealing with additional (outside the realm of -+** ctrl, alt, shift, altgr) modifiers. Also ensure a means of binding -+** a keypress/combination to a 'lock' of said additional modifiers. -+** -+** Holgers Todo -+** -+** [ ] Fix NumLock handling -+** [ ] Fix Keypad handling -+** [ ] Fix LED handling (LED_NUM and LED_CAP) don't seem to work -+** [ ] Fix CTRL+ALT+H (somehow takes the function of CTRL+ALT+BACKSPACE) -+** -+**********************************************************************/ -+ -+ - #include "qwindowsystem_qws.h" - #include "qwsutils_qws.h" - #include "qgfx_qws.h" -@@ -45,15 +81,18 @@ - #include <ctype.h> - - #include <unistd.h> --#ifdef _OS_LINUX_ --#include <linux/kd.h> --#endif -+#include <sys/wait.h> - #include <sys/ioctl.h> - #include <sys/types.h> - #include <sys/stat.h> - #include <fcntl.h> - #include <errno.h> - #include <signal.h> -+#include <termios.h> -+#ifdef _OS_LINUX_ -+#include <linux/kd.h> -+#include <linux/keyboard.h> -+#endif - - #ifdef QT_QWS_TIP2 - #include <qcopchannel_qws.h> -@@ -135,17 +174,6 @@ - }; - - --#ifdef QT_QWS_SL5XXX --#include <asm/sharp_char.h> --#endif -- --#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) --#define QT_QWS_AUTOREPEAT_MANUALLY --#endif -- -- -- --#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) - static int dir_keyrot = -1; - - static int xform_dirkey(int key) -@@ -169,7 +197,6 @@ - int xf = qt_screen->transformOrientation() + dir_keyrot; - return (key-Qt::Key_Left+xf)%4+Qt::Key_Left; - } --#endif - - #define VTSWITCHSIG SIGUSR2 - -@@ -300,11 +327,19 @@ - { Qt::Key_F35, 0xffff , 0xffff , 0xffff }, // 21 light - { Qt::Key_Escape, 0xffff , 0xffff , 0xffff }, // 22 - -+#ifdef QT_QWS_SL6000 -+ // Direction key code are for *UNROTATED* display. -+ { Qt::Key_Left, 0xffff , 0xffff , 0xffff }, // 23 -+ { Qt::Key_Up, 0xffff , 0xffff , 0xffff }, // 24 -+ { Qt::Key_Down, 0xffff , 0xffff , 0xffff }, // 25 -+ { Qt::Key_Right, 0xffff , 0xffff , 0xffff }, // 26 -+#else - // Direction key code are for *UNROTATED* display. -- { Qt::Key_Up, 0xffff , 0xffff , 0xffff }, // 23 -- { Qt::Key_Right, 0xffff , 0xffff , 0xffff }, // 24 -- { Qt::Key_Left, 0xffff , 0xffff , 0xffff }, // 25 -- { Qt::Key_Down, 0xffff , 0xffff , 0xffff }, // 26 -+ { Qt::Key_Up, 0xffff , 0xffff , 0xffff }, // 23 -+ { Qt::Key_Right, 0xffff , 0xffff , 0xffff }, // 24 -+ { Qt::Key_Left, 0xffff , 0xffff , 0xffff }, // 25 -+ { Qt::Key_Down, 0xffff , 0xffff , 0xffff }, // 26 -+#endif - - { Qt::Key_F33, 0xffff , 0xffff , 0xffff }, // 27 OK - { Qt::Key_F12, 0xffff , 0xffff , 0xffff }, // 28 40 home -@@ -369,7 +404,7 @@ - { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 63 - { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 64 - { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 65 -- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 66 -+ { Qt::Key_F14, 0xffff , 0xffff , 0xffff }, // 66 - { Qt::Key_Meta, 0xffff , 0xffff , 0xffff }, // 67 - { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 68 - { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 69 -@@ -649,12 +684,61 @@ - public: - QWSTtyKeyboardHandler(const QString&); - virtual ~QWSTtyKeyboardHandler(); -+ void readKeyboardMap(); -+ void readUnicodeMap(); -+ void handleKey(unsigned char code); - - private slots: - void readKeyboardData(); - - private: -+ void modifyModifier( int map, int modify, bool release ); -+ void modifyLock( unsigned int lock, bool release ); -+ void handleExtra( unsigned int key, bool release ); -+ static void restoreLeds(); -+ static void toggleLed(unsigned int); -+ int map_to_modif (); -+ -+private: - struct termios origTermData; -+ unsigned short acm[E_TABSZ]; -+ struct KeyMap { -+ enum ExtraKey{ -+ Key_AltGr = 0x01ffff, -+ Key_Console1 = 0x02ffff, -+ Key_Console2 = 0x03ffff, -+ Key_Console3 = 0x04ffff, -+ Key_Console4 = 0x05ffff, -+ Key_Console5 = 0x06ffff, -+ Key_Console6 = 0x07ffff, -+ Key_Console7 = 0x08ffff, -+ Key_Console8 = 0x09ffff, -+ Key_Console9 = 0x0affff, -+ Key_Console10 = 0x0bffff, -+ Key_Console11 = 0x0cffff, -+ Key_Console12 = 0x0dffff, -+ Key_NumLock = 0x0effff, -+ Key_ShiftLock = 0x0fffff, -+ Key_CtrlLock = 0x10ffff, -+ Key_AltLock = 0x11ffff, -+ Key_AltGrLock = 0x12ffff -+ }; -+ -+ KeyMap( Qt::Key _key = Qt::Key_unknown, unsigned short _code = 0 ) -+ : key( _key ), code( _code ) -+ {} -+ KeyMap( ExtraKey _key, unsigned short _code ) -+ : key( _key ), code( _code ) -+ {} -+ unsigned int key; // 16 Bit -+ unsigned short code; -+ }; -+ -+ KeyMap kernel_map[(1<<KG_CAPSSHIFT)][NR_KEYS]; -+ int current_map; -+ int modifier; -+ bool numlock : 1; -+ bool capslock : 1; - }; - - -@@ -814,6 +898,7 @@ - fn = FALSE; - - numLock = FALSE; -+#if 0 - sharp_kbdctl_modifstat st; - int dev = ::open("/dev/sharp_kbdctl", O_RDWR); - if( dev >= 0 ) { -@@ -825,6 +910,7 @@ - ::close(dev); - } - #endif -+#endif - #if defined(QT_QWS_IPAQ) - // iPAQ Action Key has ScanCode 0x60: 0x60|0x80 = 0xe0 == extended mode 1 ! - ipaq_return_pressed = FALSE; -@@ -957,7 +1043,7 @@ - } - } else if ( extended == 2 ) { - switch (code) { -- case 0x1d: -+ case 0x1d: - return; - case 0x45: - keyCode = Qt::Key_Pause; -@@ -1197,7 +1283,7 @@ - unicode = '`'; - } else - #endif -- -+ - if (bCtrl) - unicode = currentKey->ctrl_unicode; - else if (bCaps) -@@ -1250,9 +1336,12 @@ - // - // Tty keyboard - // -+#include "keyboard_linux_to_qt.h" - - QWSTtyKeyboardHandler::QWSTtyKeyboardHandler(const QString& device) -+ : current_map(0), modifier( 0 ), numlock( false ), capslock( false ) - { -+ restoreLeds(); - kbdFD=open(device.isEmpty() ? "/dev/tty0" : device.latin1(), O_RDWR | O_NDELAY, 0); - - if ( kbdFD >= 0 ) { -@@ -1268,11 +1357,7 @@ - tcgetattr( kbdFD, &termdata ); - - #if !defined(_OS_FREEBSD_) && !defined(_OS_SOLARIS_) --# ifdef QT_QWS_USE_KEYCODES -- ioctl(kbdFD, KDSKBMODE, K_MEDIUMRAW); --# else -- ioctl(kbdFD, KDSKBMODE, K_RAW); --# endif -+ ioctl(kbdFD, KDSKBMODE, K_MEDIUMRAW); - #endif - - termdata.c_iflag = (IGNPAR | IGNBRK) & (~PARMRK) & (~ISTRIP); -@@ -1285,6 +1370,9 @@ - cfsetospeed(&termdata, 9600); - tcsetattr(kbdFD, TCSANOW, &termdata); - -+ readUnicodeMap(); -+ readKeyboardMap(); -+ - signal(VTSWITCHSIG, vtSwitchHandler); - - #if !defined(_OS_FREEBSD_) && !defined(_OS_SOLARIS_) -@@ -1306,6 +1394,7 @@ - - QWSTtyKeyboardHandler::~QWSTtyKeyboardHandler() - { -+ restoreLeds(); - if (kbdFD >= 0) - { - -@@ -1334,13 +1423,451 @@ - kbdFD = -1; - } - } -+void QWSTtyKeyboardHandler::readUnicodeMap() -+{ -+ if (kbdFD < 0) -+ return; -+ if (ioctl(kbdFD,GIO_UNISCRNMAP,acm) != 0) -+ return; -+} -+ -+ -+void QWSTtyKeyboardHandler::readKeyboardMap() -+{ -+ struct kbentry kbe; -+ if (kbdFD < 0) -+ return; -+ -+ for (int map = 0; map < (1<<KG_CAPSSHIFT); ++map) { -+ unsigned short kval; -+ kbe.kb_table = map; -+ -+ for (int key = 0; key < NR_KEYS; ++key) { -+ kbe.kb_index = key; -+ -+ if (ioctl(kbdFD, KDGKBENT, &kbe) != 0) -+ continue; -+ -+ if ((kbe.kb_value == K_HOLE) || (kbe.kb_value == K_NOSUCHMAP)) -+ continue; -+ -+ kval = KVAL(kbe.kb_value); -+ switch (KTYP(kbe.kb_value)) { -+ /* -+ * Map asciis and letters to Qt KeyCodes -+ * via the map (0-255) -+ */ -+ case KT_LETTER: -+ case KT_LATIN: -+ kernel_map[map][key] = KeyMap( linux_to_qt[kval], kval ); -+ break; -+ -+ /* -+ * Handle the F Keys and map them -+ * to Qt -+ */ -+ case KT_FN: -+ if ( kval <= 19 ) -+ kernel_map[map][key] = KeyMap( static_cast<Qt::Key>( Qt::Key_F1 + kval ), kval ); -+ else if ( kval >= 31 && kval <= 33) -+ kernel_map[map][key] = KeyMap( static_cast<Qt::Key>( Qt::Key_F21 + kval ), kval ); -+ else if ( kval >= 34 && kval <= 45 ) { -+ int off = kval-34; -+ kernel_map[map][key] = KeyMap(static_cast<KeyMap::ExtraKey>( KeyMap::Key_Console1+off ), kval ); -+ }else -+ switch(kbe.kb_value ) { -+ case K_INSERT: -+ kernel_map[map][key] = KeyMap( Qt::Key_Insert, kval ); -+ break; -+ case K_REMOVE: -+ kernel_map[map][key] = KeyMap( Qt::Key_Delete, kval ); // right? -+ break; -+ case K_SELECT: -+ kernel_map[map][key] = KeyMap( Qt::Key_End , kval ); -+ break; -+ case K_PGUP: -+ kernel_map[map][key] = KeyMap( Qt::Key_Prior, kval ); -+ break; -+ case K_PGDN: -+ kernel_map[map][key] = KeyMap( Qt::Key_Next, kval ); -+ break; -+ case K_MACRO: -+ kernel_map[map][key] = KeyMap( Qt::Key_Menu, kval ); -+ break; -+ case K_HELP: -+ kernel_map[map][key] = KeyMap( Qt::Key_Help, kval ); -+ break; -+ case K_PAUSE: -+ kernel_map[map][key] = KeyMap( Qt::Key_Pause, kval ); -+ break; -+ case K_FIND: -+ case K_DO: -+ default: -+ kernel_map[map][key] = KeyMap( Qt::Key_unknown, kval ); -+ break; -+ } -+ break; -+ -+ case KT_SPEC: -+ switch ( kbe.kb_value ) { -+ case K_ENTER: -+ kernel_map[map][key] = KeyMap( Qt::Key_Enter, kval ); -+ break; -+ case K_CAPS: -+ kernel_map[map][key] = KeyMap( Qt::Key_CapsLock, kval ); -+ break; -+ case K_NUM: -+ kernel_map[map][key] = KeyMap( Qt::Key_NumLock, kval ); -+ break; -+ case K_HOLD: -+ kernel_map[map][key] = KeyMap( Qt::Key_ScrollLock, kval ); -+ break; -+ case K_HOLE: -+ case K_SH_REGS: -+ case K_SH_MEM: -+ case K_SH_STAT: -+ case K_BREAK: -+ case K_CONS: -+ case K_SCROLLFORW: -+ case K_SCROLLBACK: -+ case K_BOOT: -+ case K_CAPSON: -+ case K_COMPOSE: -+ case K_SAK: -+ case K_DECRCONSOLE: -+ case K_INCRCONSOLE: -+ case K_SPAWNCONSOLE: -+ case K_BARENUMLOCK: -+ default: -+ kernel_map[map][key] = KeyMap( Qt::Key_unknown, kval ); -+ break; -+ } -+ break; -+ case KT_PAD: -+ /* -+ * Number Values might be wrong -+ */ -+ switch(kbe.kb_value ) { -+ case K_P0: -+ kernel_map[map][key] = KeyMap( Qt::Key_0, kval ); -+ break; -+ case K_P1: -+ kernel_map[map][key] = KeyMap( Qt::Key_1, kval ); -+ break; -+ case K_P2: -+ kernel_map[map][key] = KeyMap( Qt::Key_2, kval ); -+ break; -+ case K_P3: -+ kernel_map[map][key] = KeyMap( Qt::Key_3, kval ); -+ break; -+ case K_P4: -+ kernel_map[map][key] = KeyMap( Qt::Key_4, kval ); -+ break; -+ case K_P5: -+ kernel_map[map][key] = KeyMap( Qt::Key_5, kval ); -+ break; -+ case K_P6: -+ kernel_map[map][key] = KeyMap( Qt::Key_6, kval ); -+ break; -+ case K_P7: -+ kernel_map[map][key] = KeyMap( Qt::Key_7, kval ); -+ break; -+ case K_P8: -+ kernel_map[map][key] = KeyMap( Qt::Key_8, kval ); -+ break; -+ case K_P9: -+ kernel_map[map][key] = KeyMap( Qt::Key_9, kval ); -+ break; -+ case K_PPLUS: -+ kernel_map[map][key] = KeyMap( Qt::Key_Plus, kval ); -+ break; -+ case K_PMINUS: -+ kernel_map[map][key] = KeyMap( Qt::Key_Minus, kval ); -+ break; -+ case K_PSTAR: -+ kernel_map[map][key] = KeyMap( Qt::Key_multiply, kval ); -+ break; -+ case K_PSLASH: -+ kernel_map[map][key] = KeyMap( Qt::Key_division, kval ); -+ break; -+ case K_PENTER: -+ kernel_map[map][key] = KeyMap( Qt::Key_Enter, kval ); -+ break; -+ case K_PCOMMA: -+ kernel_map[map][key] = KeyMap( Qt::Key_Comma, kval ) ; -+ break; -+ case K_PPLUSMINUS: -+ kernel_map[map][key] = KeyMap( Qt::Key_plusminus, kval ); -+ case K_PDOT: -+ break; -+ case K_PPARENL: -+ kernel_map[map][key] = KeyMap( Qt::Key_ParenLeft, kval ); -+ break; -+ case K_PPARENR: -+ kernel_map[map][key] = KeyMap( Qt::Key_ParenRight, kval ); -+ break; -+ default: -+ kernel_map[map][key] = KeyMap( Qt::Key_unknown, kval ); -+ break; -+ } -+ break; -+ case KT_DEAD: -+ switch(kbe.kb_value ) { -+ case K_DGRAVE: -+ case K_DACUTE: -+ case K_DCIRCM: -+ case K_DTILDE: -+ case K_DDIERE: -+ case K_DCEDIL: -+ default: -+ kernel_map[map][key] = KeyMap( Qt::Key_unknown, kval ); -+ break; -+ } -+ break; -+ -+ case KT_CONS: -+ kernel_map[map][key] = KeyMap( Qt::Key_unknown, kval ); -+ break; -+ -+ case KT_CUR: -+ switch(kbe.kb_value ) { -+ case K_DOWN: -+ kernel_map[map][key] = KeyMap( Qt::Key_Down, kval ); -+ break; -+ case K_LEFT: -+ kernel_map[map][key] = KeyMap( Qt::Key_Left, kval ); -+ break; -+ case K_RIGHT: -+ kernel_map[map][key] = KeyMap( Qt::Key_Right, kval ); -+ break; -+ case K_UP: -+ kernel_map[map][key] = KeyMap( Qt::Key_Up, kval ); -+ break; -+ } -+ break; -+ -+ case KT_SHIFT: -+ switch( kbe.kb_value ) { -+ case K_SHIFT: -+ kernel_map[map][key] = KeyMap( Qt::Key_Shift, kval ); -+ break; -+ case K_ALT: -+ kernel_map[map][key] = KeyMap( Qt::Key_Alt, kval ); -+ break; -+ case K_CTRL: -+ kernel_map[map][key] = KeyMap( Qt::Key_Control, kval ); -+ break; -+ case K_ALTGR: -+ kernel_map[map][key] = KeyMap( KeyMap::Key_AltGr, kval ); -+ break; -+ case K_SHIFTL: -+ case K_SHIFTR: -+ case K_CTRLL: -+ case K_CTRLR: -+ case K_CAPSSHIFT: -+ default: -+ kernel_map[map][key] = KeyMap( Qt::Key_unknown, kval ); -+ break; -+ } -+ break; -+ /* -+ * What is this for? -+ */ -+ case KT_ASCII: -+ case KT_LOCK: -+ case KT_SLOCK: -+ default: -+ kernel_map[map][key] = KeyMap( Qt::Key_unknown, kval ); -+ //qWarning("keycode %d, map %d, type %d, val %d, acm %c\n", key, map, KTYP(kbe.kb_value), kval, acm[kval]); -+ break; -+ } -+ } -+ } -+} -+int QWSTtyKeyboardHandler::map_to_modif() -+{ -+ int modifiers = 0; -+ -+ if (current_map & (1<<KG_ALT)) -+ modifiers |= Qt::AltButton; -+ else if (current_map & (1<<KG_CTRL)) -+ modifiers |= Qt::ControlButton; -+ else if (current_map & (1<<KG_SHIFT)) -+ modifiers |= Qt::ShiftButton; -+ -+ return modifiers; -+} -+ -+/* -+ * Handle Extra Keys for VT switching and Quitting -+ */ -+void QWSTtyKeyboardHandler::handleExtra( unsigned int key, bool release ) { -+ if ( !release ) { -+ int term = 0; -+ if ( (modifier & (1<<KG_ALT)) && (modifier & (1<<KG_CTRL)) ) { -+ if ( key == Qt::Key_Left ) -+ term = QMAX(vtQws -1, 1 ); -+ else if ( key == Qt::Key_Right ) -+ term = QMIN(vtQws +1, 12 ); -+ } -+ -+ if ( key >= KeyMap::Key_Console1 && key <= KeyMap::Key_Console12 ) -+ term = key - KeyMap::Key_Console1 + 1; -+ -+ if ( term != 0 ) { -+ current_map = modifier = 0; -+ numlock = capslock = false; -+ ioctl(kbdFD, VT_ACTIVATE, term ); -+ return; -+ } -+ } -+ -+ if ( (modifier & (1<<KG_ALT)) && (modifier & (1<<KG_CTRL) ) ) -+ if ( key == Qt::Key_Delete || key == Qt::Key_Backspace ) { -+ qWarning( "Instructed to quit on %d", key ); -+ qApp->quit(); -+ } -+} -+ -+/* -+ * apply modifier -+ */ -+void QWSTtyKeyboardHandler::modifyModifier( int map, int modify, bool release ) { -+ if (map != -1) { -+ if (release) -+ current_map &= ~map; -+ else -+ current_map |= map; -+ } -+ -+ if ( modify != -1 ) { -+ if (release) -+ modifier &= ~modify; -+ else -+ modifier |= modify; -+ } -+} -+ -+void QWSTtyKeyboardHandler::handleKey(unsigned char code) -+{ -+ int old_modifier = modifier; -+ bool release = false; -+ bool mod_key = true; -+ -+ if (code & 0x80) -+ { -+ release = true; -+ code &= 0x7f; -+ } -+ -+ KeyMap key_map = kernel_map[current_map][code]; -+ unsigned short unicode = acm[key_map.code]; -+ unsigned int qtKeyCode = key_map.key; -+ -+ if ( !release ) -+ qWarning( "KeyCode: %d KVAL: %d", qtKeyCode, key_map.code ); -+// qWarning( "Alt:%d Ctrl:%d Shift:%d Key = %d", modifier & (1<<KG_ALT), -+// modifier & (1<<KG_CTRL), -+// modifier & (1<<KG_SHIFT), key_map.key ); -+// qDebug("code %d, mCode %d, uni '%c', qtKeyCode %d", code, map.code, -+// QChar(unicode ).isPrint() ? -+// unicode : '?' , qtKeyCode); -+ -+ // Handle map changes based on press/release of modifiers -+ // hardcoded for now -+ int modif = -1; -+ int map = -1; -+ bool lock = false; -+ switch (qtKeyCode) -+ { -+ case Qt::Key_Alt: -+ case Qt::Key_F22: -+ modif = (1<<KG_ALT); -+ break; -+ case Qt::Key_Control: -+ modif = (1<<KG_CTRL); -+ map = modif; -+ break; -+ case Qt::Key_Shift: -+ modif = (1<<KG_SHIFT); -+ map = modif; -+ break; -+ case KeyMap::Key_AltGr: -+ map = (1<<KG_ALTGR ); -+ break; -+ case Qt::Key_Left: -+ case Qt::Key_Right: -+ case Qt::Key_Up: -+ case Qt::Key_Down: -+ mod_key = false; -+ if (qt_screen->isTransformed()) -+ qtKeyCode = static_cast<Qt::Key>( xform_dirkey(static_cast<int>( qtKeyCode ) ) ); -+ break; -+ /* -+ * handle lock, we don't handle scroll lock! -+ */ -+ case Qt::Key_CapsLock: -+ case Qt::Key_NumLock: -+ lock = true; -+ default: -+ mod_key = false; -+ break; -+ } -+ -+ -+ /* -+ * Change the Map. We handle locks a bit different -+ */ -+ if ( lock ) -+ modifyLock( qtKeyCode, release ); -+ else -+ modifyModifier( map, modif, release ); -+ -+ handleExtra( qtKeyCode, release ); -+ -+ /* -+ * do not repeat modifier keys -+ */ -+ if ( modifier == old_modifier && mod_key ) -+ return; -+ -+ processKeyEvent(unicode & 0xff, qtKeyCode, map_to_modif(), !release, 0); -+} - - void QWSTtyKeyboardHandler::readKeyboardData() - { - unsigned char buf[81]; - int n = ::read(kbdFD, buf, 80 ); - for ( int loop = 0; loop < n; loop++ ) -- doKey(buf[loop]); -+ handleKey(buf[loop]); -+} -+ -+void QWSTtyKeyboardHandler::modifyLock( unsigned int lock, bool release ) { -+ if ( !release ) -+ return; -+ -+ if ( lock == Qt::Key_CapsLock ) { -+ toggleLed( LED_CAP ); -+ capslock = !capslock; -+ }else if ( lock == Qt::Key_NumLock ) { -+ toggleLed( LED_NUM ); -+ numlock = !numlock; -+ } -+} -+ -+void QWSTtyKeyboardHandler::restoreLeds() { -+ unsigned int leds; -+ ioctl(kbdFD, KDGETLED, &leds ); -+ leds &= ~LED_CAP; -+ leds &= ~LED_NUM; -+ ioctl(kbdFD, KDSETLED, &leds ); -+} -+ -+void QWSTtyKeyboardHandler::toggleLed(unsigned int led) { -+ unsigned int leds; -+ int ret = ioctl(kbdFD, KDGETLED, &leds ); -+ leds = leds & led ? (leds & ~led) : (leds | led); -+ ret = ioctl(kbdFD, KDSETLED, &leds ); - } - - typedef struct { -@@ -1445,13 +1972,13 @@ - return; - #ifdef QT_QWS_TIP2 - // custom scan codes - translate them and create a key event immediately -- if( overrideMap && event.value == 0 || overrideMap->find( event.value ) ) -+ if( overrideMap && event.value == 0 || overrideMap->find( event.value ) ) - { - if( event.value ) - { - int modifiers = 0; - QWSServer::KeyMap *km = overrideMap->find( event.value ); -- switch( km->unicode ) -+ switch( km->unicode ) - { - case Key_Menu: - case Key_Back: -@@ -1479,14 +2006,14 @@ - TRUE, FALSE ); - } - lastPress = km; -- } -- else if( lastPress ) -+ } -+ else if( lastPress ) - { -- processKeyEvent( lastPress->unicode, lastPress->key_code, 0, -+ processKeyEvent( lastPress->unicode, lastPress->key_code, 0, - FALSE, FALSE ); - lastPress = 0; - } -- } -+ } - else - #endif - { -@@ -1854,10 +2381,10 @@ - handler = new QWSUsbKeyboardHandler(device); - } else if ( type == "TTY" ) { - handler = new QWSTtyKeyboardHandler(device); -- } -+ } - else if( type == "Samsung" ) { - handler = new QWSSamsungKeypadHandler(device); -- } -+ } - else { - qWarning( "Keyboard type %s:%s unsupported", spec.latin1(), device.latin1() ); - } -Index: qt-2.3.10-snapshot-20060120/src/kernel/keyboard_linux_to_qt.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ qt-2.3.10-snapshot-20060120/src/kernel/keyboard_linux_to_qt.h 2006-01-20 21:16:25.413760944 +0100 -@@ -0,0 +1,263 @@ -+/* -+ * Generated with a small python utility found at -+ * http://handhelds.org/~zecke/downloads/python_keytable_creator.py -+ */ -+ -+static const Qt::Key linux_to_qt[] = { -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_Backspace, -+Qt::Key_Tab, -+Qt::Key_unknown, // LineFeed -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, // No Symbol -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, // No Symbol -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_Escape, -+Qt::Key_unknown, -+Qt::Key_unknown, // No symbol -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_Space, -+Qt::Key_Exclam, -+Qt::Key_QuoteDbl, -+Qt::Key_NumberSign, -+Qt::Key_Dollar, -+Qt::Key_Percent, -+Qt::Key_Ampersand, -+Qt::Key_Apostrophe, -+Qt::Key_ParenLeft, -+Qt::Key_ParenRight, -+Qt::Key_Asterisk, -+Qt::Key_Plus, -+Qt::Key_Comma, -+Qt::Key_Minus, -+Qt::Key_Period, -+Qt::Key_Slash, -+Qt::Key_0, -+Qt::Key_1, -+Qt::Key_2, -+Qt::Key_3, -+Qt::Key_4, -+Qt::Key_5, -+Qt::Key_6, -+Qt::Key_7, -+Qt::Key_8, -+Qt::Key_9, -+Qt::Key_Colon, -+Qt::Key_Semicolon, -+Qt::Key_Less, -+Qt::Key_Equal, -+Qt::Key_Greater, -+Qt::Key_Question, -+Qt::Key_At, -+Qt::Key_A, -+Qt::Key_B, -+Qt::Key_C, -+Qt::Key_D, -+Qt::Key_E, -+Qt::Key_F, -+Qt::Key_G, -+Qt::Key_H, -+Qt::Key_I, -+Qt::Key_J, -+Qt::Key_K, -+Qt::Key_L, -+Qt::Key_M, -+Qt::Key_N, -+Qt::Key_O, -+Qt::Key_P, -+Qt::Key_Q, -+Qt::Key_R, -+Qt::Key_S, -+Qt::Key_T, -+Qt::Key_U, -+Qt::Key_V, -+Qt::Key_W, -+Qt::Key_X, -+Qt::Key_Y, -+Qt::Key_Z, -+Qt::Key_BracketLeft, -+Qt::Key_Backslash, -+Qt::Key_BracketRight, -+Qt::Key_AsciiCircum, -+Qt::Key_Underscore, -+Qt::Key_QuoteLeft, // grave -+Qt::Key_A, -+Qt::Key_B, -+Qt::Key_C, -+Qt::Key_D, -+Qt::Key_E, -+Qt::Key_F, -+Qt::Key_G, -+Qt::Key_H, -+Qt::Key_I, -+Qt::Key_J, -+Qt::Key_K, -+Qt::Key_L, -+Qt::Key_M, -+Qt::Key_N, -+Qt::Key_O, -+Qt::Key_P, -+Qt::Key_Q, -+Qt::Key_R, -+Qt::Key_S, -+Qt::Key_T, -+Qt::Key_U, -+Qt::Key_V, -+Qt::Key_W, -+Qt::Key_X, -+Qt::Key_Y, -+Qt::Key_Z, -+Qt::Key_BraceLeft, -+Qt::Key_Bar, -+Qt::Key_BraceRight, -+Qt::Key_AsciiTilde, -+Qt::Key_BackSpace, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_unknown, -+Qt::Key_nobreakspace, -+Qt::Key_exclamdown, -+Qt::Key_cent, -+Qt::Key_sterling, -+Qt::Key_currency, -+Qt::Key_yen, -+Qt::Key_brokenbar, -+Qt::Key_section, -+Qt::Key_diaeresis, -+Qt::Key_copyright, -+Qt::Key_ordfeminine, -+Qt::Key_guillemotleft, -+Qt::Key_notsign, -+Qt::Key_hyphen, -+Qt::Key_registered, -+Qt::Key_macron, -+Qt::Key_degree, -+Qt::Key_plusminus, -+Qt::Key_twosuperior, -+Qt::Key_threesuperior, -+Qt::Key_acute, -+Qt::Key_mu, -+Qt::Key_paragraph, -+Qt::Key_periodcentered, -+Qt::Key_cedilla, -+Qt::Key_onesuperior, -+Qt::Key_masculine, -+Qt::Key_guillemotright, -+Qt::Key_onequarter, -+Qt::Key_onehalf, -+Qt::Key_threequarters, -+Qt::Key_questiondown, -+Qt::Key_Agrave, -+Qt::Key_Aacute, -+Qt::Key_Acircumflex, -+Qt::Key_Atilde, -+Qt::Key_Adiaeresis, -+Qt::Key_Aring, -+Qt::Key_AE, -+Qt::Key_Ccedilla, -+Qt::Key_Egrave, -+Qt::Key_Eacute, -+Qt::Key_Ecircumflex, -+Qt::Key_Ediaeresis, -+Qt::Key_Igrave, -+Qt::Key_Iacute, -+Qt::Key_Icircumflex, -+Qt::Key_Idiaeresis, -+Qt::Key_ETH, -+Qt::Key_Ntilde, -+Qt::Key_Ograve, -+Qt::Key_Oacute, -+Qt::Key_Ocircumflex, -+Qt::Key_Otilde, -+Qt::Key_Odiaeresis, -+Qt::Key_multiply, -+Qt::Key_Ooblique, -+Qt::Key_Ugrave, -+Qt::Key_Uacute, -+Qt::Key_Ucircumflex, -+Qt::Key_Udiaeresis, -+Qt::Key_Yacute, -+Qt::Key_THORN, -+Qt::Key_ssharp, -+Qt::Key_agrave, -+Qt::Key_aacute, -+Qt::Key_acircumflex, -+Qt::Key_atilde, -+Qt::Key_adiaeresis, -+Qt::Key_aring, -+Qt::Key_ae, -+Qt::Key_ccedilla, -+Qt::Key_egrave, -+Qt::Key_eacute, -+Qt::Key_ecircumflex, -+Qt::Key_ediaeresis, -+Qt::Key_igrave, -+Qt::Key_iacute, -+Qt::Key_icircumflex, -+Qt::Key_idiaeresis, -+Qt::Key_eth, -+Qt::Key_ntilde, -+Qt::Key_ograve, -+Qt::Key_oacute, -+Qt::Key_ocircumflex, -+Qt::Key_otilde, -+Qt::Key_odiaeresis, -+Qt::Key_division, -+Qt::Key_oslash, -+Qt::Key_ugrave, -+Qt::Key_uacute, -+Qt::Key_ucircumflex, -+Qt::Key_udiaeresis, -+Qt::Key_yacute, -+Qt::Key_thorn, -+Qt::Key_ydiaeresis -+}; diff --git a/packages/qte/qte-2.3.12/key.patch b/packages/qte/qte-2.3.12/key.patch deleted file mode 100644 index 590ae9a7c6..0000000000 --- a/packages/qte/qte-2.3.12/key.patch +++ /dev/null @@ -1,90 +0,0 @@ - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - -Index: qt-2.3.10-snapshot-20060120/src/kernel/qkeyboard_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qkeyboard_qws.cpp 2006-01-20 20:57:47.547702416 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qkeyboard_qws.cpp 2006-01-20 21:09:23.001977296 +0100 -@@ -848,6 +848,9 @@ - bool release = false; - int keypad = 0; - -+#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) // need autorepeat implemented here? -+ bool repeatable = TRUE; -+ - #ifndef QT_QWS_USE_KEYCODES - #if defined(QT_QWS_IPAQ) - // map ipaq 'action' key (0x60, 0xe0) -@@ -984,9 +987,6 @@ - if ( currentKey ) - keyCode = currentKey->key_code; - --#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) // need autorepeat implemented here? -- bool repeatable = TRUE; -- - #if defined(QT_QWS_IPAQ) - switch (code) { - #if defined(QT_QWS_SL5XXX) -@@ -1061,25 +1061,23 @@ - repeatable = FALSE; - #endif - -+#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) - if ( qt_screen->isTransformed() - && keyCode >= Qt::Key_Left && keyCode <= Qt::Key_Down ) - { - keyCode = xform_dirkey(keyCode); - } -- --#ifdef QT_QWS_AUTOREPEAT_MANUALLY -- if ( repeatable && !release ) -- rep->start(prevuni,prevkey,modifiers); -- else -- rep->stop(); - #endif -+ - #endif - /* - Translate shift+Key_Tab to Key_Backtab - */ - if (( keyCode == Key_Tab ) && shift ) - keyCode = Key_Backtab; -+#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) - } -+#endif - - #ifndef QT_QWS_USE_KEYCODES - /* -@@ -1234,6 +1232,14 @@ - } else { - prevkey = prevuni = 0; - } -+ -+#ifdef QT_QWS_AUTOREPEAT_MANUALLY -+ if ( repeatable && !release ) -+ rep->start(prevuni,prevkey,modifiers); -+ else -+ rep->stop(); -+#endif -+ - } - #ifndef QT_QWS_USE_KEYCODES - extended = 0; -@@ -2059,6 +2065,7 @@ - press ? "press" : "release", - repeatable ? "true":"false" ); - -+#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) - if ( qt_screen->isTransformed() && k >= Qt::Key_Left && k <= Qt::Key_Down ) - { - qDebug( "SimpadButtonsHandler() - We are transformed! Correcting..." ); -@@ -2066,6 +2073,7 @@ - k = xform_dirkey( k ); - qDebug( "SimpadButtonsHandler() - Old Key: %d - New Key %d", oldK, k ); - } -+#endif - - if ( repeatable && press ) - repeater->start( repeatdelay, true ); diff --git a/packages/qte/qte-2.3.12/mnci-touchscreen.patch b/packages/qte/qte-2.3.12/mnci-touchscreen.patch deleted file mode 100644 index 570c2ff290..0000000000 --- a/packages/qte/qte-2.3.12/mnci-touchscreen.patch +++ /dev/null @@ -1,1987 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- qt-2.3.10/src/kernel/qwsmouse_qws.cpp~ramses-touchscreen -+++ qt-2.3.10/src/kernel/qwsmouse_qws.cpp -@@ -1,5 +1,5 @@ - /**************************************************************************** --** $Id: qt/src/kernel/qwsmouse_qws.cpp 2.3.10 edited 2005-01-24 $ -+** $Id: qt/src/kernel/qwsmouse_qws.cpp 2.3.7 edited 2003-02-04 $ - ** - ** Implementation of Qt/Embedded mouse drivers - ** -@@ -47,85 +47,32 @@ - #include <stdlib.h> - #include <stdio.h> - #include <sys/ioctl.h> --#include <sys/time.h> - #include <sys/types.h> - #include <sys/stat.h> - #include <fcntl.h> - #include <errno.h> - #include <termios.h> - -+ - #include <qgfx_qws.h> - #if !defined(_OS_QNX6_) - --#ifdef QT_QWS_CASSIOPEIA --#include <linux/tpanel.h> --#endif --#ifdef QT_QWS_TSLIB --#include <tslib.h> --#endif -- -- --//#define QT_QWS_K2 -- --#if defined(QT_QWS_IPAQ) || defined(QT_QWS_K2) --#define QT_QWS_IPAQ_RAW --typedef struct { -- unsigned short pressure; -- unsigned short x; -- unsigned short y; -- unsigned short pad; -- struct timeval stamp; --} TS_EVENT; --#elif defined(QT_QWS_SL5XXX) --#define QT_QWS_SL5XXX_RAW --typedef struct { -- long y; -- long x; -- long pressure; -- long long millisecs; --} TS_EVENT; --#define QT_QWS_TP_SAMPLE_SIZE 10 --#define QT_QWS_TP_MINIMUM_SAMPLES 4 --#define QT_QWS_TP_PRESSURE_THRESHOLD 500 --#define QT_QWS_TP_MOVE_LIMIT 50 --#define QT_QWS_TP_JITTER_LIMIT 2 --#elif defined(QT_QWS_SLC700) --#define QT_QWS_SLC700_RAW --typedef struct { -- unsigned short pressure; -- unsigned short x; -- unsigned short y; -- unsigned short millisecs; --} TS_EVENT; --#define QT_QWS_TP_SAMPLE_SIZE 10 --#define QT_QWS_TP_MINIMUM_SAMPLES 4 --#define QT_QWS_TP_PRESSURE_THRESHOLD 500 --#define QT_QWS_TP_MOVE_LIMIT 50 --#define QT_QWS_TP_JITTER_LIMIT 2 --#endif -- --#ifndef QT_QWS_TP_SAMPLE_SIZE --#define QT_QWS_TP_SAMPLE_SIZE 5 --#endif -- --#ifndef QT_QWS_TP_MINIMUM_SAMPLES --#define QT_QWS_TP_MINIMUM_SAMPLES 5 -+#ifndef QT_QWS_TP_PRESSURE_DOWN_THRESHOLD -+#define QT_QWS_TP_PRESSURE_DOWN_THRESHOLD 500 - #endif - --#ifndef QT_QWS_TP_PRESSURE_THRESHOLD --#define QT_QWS_TP_PRESSURE_THRESHOLD 1 -+#ifndef QT_QWS_TP_PRESSURE_UP_THRESHOLD -+#define QT_QWS_TP_PRESSURE_UP_THRESHOLD 450 - #endif - --#ifndef QT_QWS_TP_MOVE_LIMIT --#define QT_QWS_TP_MOVE_LIMIT 100 -+#ifndef QT_QWS_TP_TABLE_SIZE -+#define QT_QWS_TP_TABLE_SIZE 2 - #endif - --#ifndef QT_QWS_TP_JITTER_LIMIT --#define QT_QWS_TP_JITTER_LIMIT 2 -+#ifndef QT_QWS_TP_MOVE_MAX -+#define QT_QWS_TP_MOVE_MAX 100 - #endif - --//#define QWS_CUSTOMTOUCHPANEL -- - /*! - \class QWSMouseHandler qwsmouse_qws.h - \brief Mouse driver/handler for Qt/Embedded -@@ -168,8 +115,7 @@ - enum MouseProtocol { Unknown = -1, Auto = 0, - MouseMan, IntelliMouse, Microsoft, - QVFBMouse, TPanel, BusMouse, -- FirstAuto = MouseMan, -- LastAuto = Microsoft }; -+ }; - - static void limitToScreen( QPoint &pt ) - { -@@ -186,810 +132,14 @@ - } MouseConfig; - - static const MouseConfig mouseConfig[] = { --#ifndef QT_NO_QWS_MOUSE_AUTO - { "Auto", Auto }, --#endif --#ifndef QT_NO_QWS_MOUSE_PC -- { "MouseMan", MouseMan }, -- { "IntelliMouse", IntelliMouse }, -- { "USB", IntelliMouse }, -- { "Microsoft", Microsoft }, --#endif --#ifndef QT_NO_QWS_VFB - { "QVFbMouse", QVFBMouse }, --#endif - { "TPanel", TPanel }, -- { "BusMouse", BusMouse }, - { 0, Unknown } - }; - --#ifndef QT_NO_QWS_MOUSE_AUTO --/* -- * Automatic-detection mouse driver -- */ -- --class QAutoMouseSubHandler { --protected: -- enum { max_buf=32 }; -- -- int fd; -- -- uchar buffer[max_buf]; -- int nbuf; -- -- QPoint motion; -- int bstate; -- -- int goodness; -- int badness; -- -- virtual int tryData()=0; -- --public: -- QAutoMouseSubHandler(int f) : fd(f) -- { -- nbuf = bstate = goodness = badness = 0; -- } -- -- int file() const { return fd; } -- -- void closeIfNot(int& f) -- { -- if ( fd != f ) { -- f = fd; -- close(fd); -- } -- } -- -- void worse(int by=1) { badness+=by; } -- bool reliable() const { return goodness >= 5 && badness < 50; } -- int buttonState() const { return bstate; } -- bool motionPending() const { return motion!=QPoint(0,0); } -- QPoint takeMotion() { QPoint r=motion; motion=QPoint(0,0); return r; } -- -- void appendData(uchar* data, int length) -- { -- memcpy(buffer+nbuf, data, length); -- nbuf += length; -- } -- -- enum UsageResult { Insufficient, Motion, Button }; -- -- UsageResult useData() -- { -- int pbstate = bstate; -- int n = tryData(); -- if ( n > 0 ) { -- if ( n<nbuf ) -- memmove( buffer, buffer+n, nbuf-n ); -- nbuf -= n; -- return pbstate == bstate ? Motion : Button; -- } -- return Insufficient; -- } --}; -- --class QAutoMouseSubHandler_intellimouse : public QAutoMouseSubHandler { -- int packetsize; --public: -- QAutoMouseSubHandler_intellimouse(int f) : QAutoMouseSubHandler(f) -- { -- init(); -- } -- -- void init() -- { -- int n; -- uchar reply[20]; -- -- tcflush(fd,TCIOFLUSH); -- static const uchar initseq[] = { 243, 200, 243, 100, 243, 80 }; -- static const uchar query[] = { 0xf2 }; -- if (write(fd, initseq, sizeof(initseq))!=sizeof(initseq)) { -- badness = 100; -- return; -- } -- usleep(10000); -- tcflush(fd,TCIOFLUSH); -- if (write(fd, query, sizeof(query))!=sizeof(query)) { -- badness = 100; -- return; -- } -- usleep(10000); -- n = read(fd, reply, 20); -- if ( n > 0 ) { -- goodness = 10; -- switch ( reply[n-1] ) { -- case 3: -- case 4: -- packetsize = 4; -- break; -- default: -- packetsize = 3; -- } -- } else { -- badness = 100; -- } -- } -- -- int tryData() -- { -- if ( nbuf >= packetsize ) { -- //int overflow = (buffer[0]>>6 )& 0x03; -- -- if ( /*overflow ||*/ !(buffer[0] & 8) ) { -- badness++; -- return 1; -- } else { -- motion += -- QPoint((buffer[0] & 0x10) ? buffer[1]-256 : buffer[1], -- (buffer[0] & 0x20) ? 256-buffer[2] : -buffer[2]); -- int nbstate = buffer[0] & 0x7; -- if ( motion.x() || motion.y() || bstate != nbstate ) { -- bstate = nbstate; -- goodness++; -- } else { -- badness++; -- return 1; -- } -- } -- return packetsize; -- } -- return 0; -- } --}; -- --class QAutoMouseSubHandler_serial : public QAutoMouseSubHandler { --public: -- QAutoMouseSubHandler_serial(int f) : QAutoMouseSubHandler(f) -- { -- initSerial(); -- } -- --protected: -- void setflags(int f) -- { -- termios tty; -- tcgetattr(fd, &tty); -- tty.c_iflag = IGNBRK | IGNPAR; -- tty.c_oflag = 0; -- tty.c_lflag = 0; -- tty.c_cflag = f | CREAD | CLOCAL | HUPCL; --#if !defined(_OS_FREEBSD_) && !defined(_OS_SOLARIS_) -- tty.c_line = 0; --#endif -- tty.c_cc[VTIME] = 0; -- tty.c_cc[VMIN] = 1; -- tcsetattr(fd, TCSANOW, &tty); -- } -- --private: -- void initSerial() -- { -- int speed[4] = { B9600, B4800, B2400, B1200 }; -- -- for (int n = 0; n < 4; n++) { -- setflags(CSTOPB | speed[n]); -- write(fd, "*q", 2); -- usleep(10000); -- } -- } --}; -- --class QAutoMouseSubHandler_mousesystems : public QAutoMouseSubHandler_serial { --public: -- // ##### This driver has not been tested -- -- QAutoMouseSubHandler_mousesystems(int f) : QAutoMouseSubHandler_serial(f) -- { -- init(); -- } -- -- void init() -- { -- setflags(B1200|CS8|CSTOPB); -- // 60Hz -- if (write(fd, "R", 1)!=1) { -- badness = 100; -- return; -- } -- tcflush(fd,TCIOFLUSH); -- } -- -- int tryData() -- { -- if ( nbuf >= 5 ) { -- if ( (buffer[0] & 0xf8) != 0x80 ) { -- badness++; -- return 1; -- } -- motion += -- QPoint((signed char)buffer[1] + (signed char)buffer[3], -- -(signed char)buffer[2] + (signed char)buffer[4]); -- int t = ~buffer[0]; -- int nbstate = ((t&3) << 1) | ((t&4) >> 2); -- if ( motion.x() || motion.y() || bstate != nbstate ) { -- bstate = nbstate; -- goodness++; -- } else { -- badness++; -- return 1; -- } -- return 5; -- } -- return 0; -- } --}; -- --class QAutoMouseSubHandler_ms : public QAutoMouseSubHandler_serial { -- int mman; --public: -- QAutoMouseSubHandler_ms(int f) : QAutoMouseSubHandler_serial(f) -- { -- mman=0; -- init(); -- } -- -- void init() -- { -- setflags(B1200|CS7); -- // 60Hz -- if (write(fd, "R", 1)!=1) { -- badness = 100; -- return; -- } -- tcflush(fd,TCIOFLUSH); -- } -- -- int tryData() -- { -- if ( !(buffer[0] & 0x40) ) { -- if ( buffer[0] == 0x20 && (bstate & Qt::MidButton) ) { -- mman=1; // mouseman extension -- } -- return 1; -- } -- int extra = mman&&(bstate & Qt::MidButton); -- if ( nbuf >= 3+extra ) { -- int nbstate = 0; -- if ( buffer[0] == 0x40 && !bstate && !buffer[1] && !buffer[2] ) { -- nbstate = Qt::MidButton; -- } else { -- nbstate = ((buffer[0] & 0x20) >> 5) -- | ((buffer[0] & 0x10) >> 3); -- if ( extra && buffer[3] == 0x20 ) -- nbstate = Qt::MidButton; -- } -- -- if ( buffer[1] & 0x40 ) { -- badness++; -- return 1; -- } else { -- motion += -- QPoint((signed char)((buffer[0]&0x3)<<6) -- |(signed char)(buffer[1]&0x3f), -- (signed char)((buffer[0]&0xc)<<4) -- |(signed char)(buffer[2]&0x3f)); -- if ( motion.x() || motion.y() || bstate != nbstate ) { -- bstate = nbstate; -- goodness++; -- } else { -- badness++; -- return 1; -- } -- return 3+extra; -- } -- } -- return 0; -- } --}; -- --/* --QAutoMouseHandler::UsageResult QAutoMouseHandler::useDev(Dev& d) --{ -- if ( d.nbuf >= mouseData[d.protocol].bytesPerPacket ) { -- uchar *mb = d.buf; -- int bstate = 0; -- int dx = 0; -- int dy = 0; -- -- switch (mouseProtocol) { -- case MouseMan: -- case IntelliMouse: -- { -- bstate = mb[0] & 0x7; // assuming Qt::*Button order -- -- int overflow = (mb[0]>>6 )& 0x03; -- if (mouseProtocol == MouseMan && overflow) { -- //### wheel events signalled with overflow bit, ignore for now -- } -- else { -- bool xs = mb[0] & 0x10; -- bool ys = mb[0] & 0x20; -- dx = xs ? mb[1]-256 : mb[1]; -- dy = ys ? mb[2]-256 : mb[2]; -- } -- break; -- } -- case Microsoft: -- if ( ((mb[0] & 0x20) >> 3) ) { -- bstate |= Qt::LeftButton; -- } -- if ( ((mb[0] & 0x10) >> 4) ) { -- bstate |= Qt::RightButton; -- } -- -- dx=(signed char)(((mb[0] & 0x03) << 6) | (mb[1] & 0x3f)); -- dy=-(signed char)(((mb[0] & 0x0c) << 4) | (mb[2] & 0x3f)); -- -- break; -- } -- } -- } --*/ -- --#endif -- --class QAutoMouseHandler : public QWSMouseHandler { -- Q_OBJECT -- --public: -- QAutoMouseHandler(); -- ~QAutoMouseHandler(); -- --#ifndef QT_NO_QWS_MOUSE_AUTO --private: -- enum { max_dev=32 }; -- QAutoMouseSubHandler *sub[max_dev]; -- QList<QSocketNotifier> notifiers; -- int nsub; -- int retries; --#endif -- --private slots: -- void readMouseData(int); -- --private: --#ifndef QT_NO_QWS_MOUSE_AUTO -- void openDevices(); -- void closeDevices(); -- void notify(int fd); -- bool sendEvent(QAutoMouseSubHandler& h) -- { -- if ( h.reliable() ) { -- mousePos += h.takeMotion(); -- limitToScreen( mousePos ); --/* --qDebug("%d,%d %c%c%c", --mousePos.x(),mousePos.y(), --(h.buttonState()&Qt::LeftButton)?'L':'.', --(h.buttonState()&Qt::MidButton)?'M':'.', --(h.buttonState()&Qt::RightButton)?'R':'.'); --*/ -- emit mouseChanged(mousePos,h.buttonState()); -- return TRUE; -- } else { -- h.takeMotion(); -- if ( h.buttonState() & (Qt::RightButton|Qt::MidButton) ) { -- // Strange for the user to press right or middle without -- // a moving mouse! -- h.worse(); -- } -- return FALSE; -- } -- } --#endif --}; -- --QAutoMouseHandler::QAutoMouseHandler() --{ --#ifndef QT_NO_QWS_MOUSE_AUTO -- notifiers.setAutoDelete( TRUE ); -- retries = 0; -- openDevices(); --#endif --} -- --QAutoMouseHandler::~QAutoMouseHandler() --{ --#ifndef QT_NO_QWS_MOUSE_AUTO -- closeDevices(); --#endif --} -- --#ifndef QT_NO_QWS_MOUSE_AUTO --void QAutoMouseHandler::openDevices() --{ -- nsub=0; -- int fd; -- fd = open( "/dev/psaux", O_RDWR | O_NDELAY ); -- if ( fd >= 0 ) { -- sub[nsub++] = new QAutoMouseSubHandler_intellimouse(fd); -- notify(fd); -- } --#if !defined(QT_QWS_IPAQ) && !defined(QT_QWS_SL5XXX) && !defined(QT_QWS_K2) && !defined(QT_QWS_SLC700) -- char fn[] = "/dev/ttyS?"; -- for (int ch='0'; ch<='3'; ch++) { -- fn[9] = ch; -- fd = open( fn, O_RDWR | O_NDELAY ); -- if ( fd >= 0 ) { -- //sub[nsub++] = new QAutoMouseSubHandler_intellimouse(fd); -- sub[nsub++] = new QAutoMouseSubHandler_mousesystems(fd); -- sub[nsub++] = new QAutoMouseSubHandler_ms(fd); -- notify(fd); -- } -- } --#endif -- // ... --} -- --void QAutoMouseHandler::closeDevices() --{ -- int pfd=-1; -- for (int i=0; i<nsub; i++) { -- sub[i]->closeIfNot(pfd); -- delete sub[i]; -- } -- notifiers.clear(); --} -- --void QAutoMouseHandler::notify(int fd) --{ -- QSocketNotifier *mouseNotifier -- = new QSocketNotifier( fd, QSocketNotifier::Read, this ); -- connect(mouseNotifier, SIGNAL(activated(int)),this, SLOT(readMouseData(int))); -- notifiers.append( mouseNotifier ); --} --#endif -- --void QAutoMouseHandler::readMouseData(int fd) --{ --#ifndef QT_NO_QWS_MOUSE_AUTO -- for (;;) { -- uchar buf[8]; -- int n = read(fd, buf, 8); -- if ( n<=0 ) -- break; -- for (int i=0; i<nsub; i++) { -- QAutoMouseSubHandler& h = *sub[i]; -- if ( h.file() == fd ) { -- h.appendData(buf,n); -- for (;;) { -- switch ( h.useData() ) { -- case QAutoMouseSubHandler::Button: -- sendEvent(h); -- break; -- case QAutoMouseSubHandler::Insufficient: -- goto breakbreak; -- case QAutoMouseSubHandler::Motion: -- break; -- } -- } -- breakbreak: -- ; -- } -- } -- } -- bool any_reliable=FALSE; -- for (int i=0; i<nsub; i++) { -- QAutoMouseSubHandler& h = *sub[i]; -- if ( h.motionPending() ) -- sendEvent(h); -- any_reliable = any_reliable || h.reliable(); -- } -- if ( any_reliable ) { -- // ... get rid of all unreliable ones? All bad ones? -- } else if ( retries < 2 ) { -- // Try again - maybe the mouse was being moved when we tried to init. -- closeDevices(); -- openDevices(); -- retries++; -- } --#else -- Q_UNUSED( fd ); --#endif --} -- -- -- -- --/* -- * Standard mouse driver -- */ -- --typedef struct { -- int bytesPerPacket; --} MouseData; -- --static const MouseData mouseData[] = { -- { 3 }, // dummy for auto protocal, correction made by add by YYD -- { 3 }, // MouseMan -- { 4 }, // intelliMouse -- { 3 }, // Microsoft -- { 0 }, // QVFBMouse, -- { 0 }, // TPanel, -- { 3 }, // BusMouse, --}; -- -- --class QWSMouseHandlerPrivate : public QWSMouseHandler { -- Q_OBJECT --public: -- QWSMouseHandlerPrivate( MouseProtocol protocol, QString mouseDev ); -- ~QWSMouseHandlerPrivate(); -- --#ifndef QT_NO_QWS_MOUSE_PC --private: -- static const int mouseBufSize = 128; -- int mouseFD; -- int mouseIdx; -- uchar mouseBuf[mouseBufSize]; -- MouseProtocol mouseProtocol; -- void handleMouseData(); --#endif -- --private slots: -- void readMouseData(); -- --private: -- int obstate; --}; -- -- --void QWSMouseHandlerPrivate::readMouseData() --{ --#ifndef QT_NO_QWS_MOUSE_PC -- int n; -- if ( BusMouse == mouseProtocol ) { -- // a workaround of linux busmouse driver interface. -- // It'll only read 3 bytes a time and return all other buffer zeroed, thus cause protocol errors -- for (;;) { -- if ( mouseBufSize - mouseIdx < 3 ) -- break; -- n = read( mouseFD, mouseBuf+mouseIdx, 3 ); -- if ( n != 3 ) -- break; -- mouseIdx += 3; -- } -- } else { -- do { -- n = read(mouseFD, mouseBuf+mouseIdx, mouseBufSize-mouseIdx ); -- if ( n > 0 ) -- mouseIdx += n; -- } while ( n > 0 ); -- } -- handleMouseData(); --#endif --} -- -- --#ifndef QT_NO_QWS_MOUSE_PC --/* --*/ -- --void QWSMouseHandlerPrivate::handleMouseData() --{ -- static const int accel_limit = 5; -- static const int accel = 2; -- -- int idx = 0; -- int bstate = 0; -- int dx = 0, dy = 0; -- bool sendEvent = false; -- int tdx = 0, tdy = 0; -- -- while ( mouseIdx-idx >= mouseData[mouseProtocol].bytesPerPacket ) { -- //qDebug( "Got mouse data" ); -- uchar *mb = mouseBuf+idx; -- bstate = 0; -- dx = 0; -- dy = 0; -- sendEvent = false; -- switch (mouseProtocol) { -- case MouseMan: -- case IntelliMouse: -- { -- if (mb[0] & 0x01) -- bstate |= Qt::LeftButton; -- if (mb[0] & 0x02) -- bstate |= Qt::RightButton; -- if (mb[0] & 0x04) -- bstate |= Qt::MidButton; -- -- int overflow = (mb[0]>>6 )& 0x03; -- if (mouseProtocol == MouseMan && overflow) { -- //### wheel events signalled with overflow bit, ignore for now -- } -- else { -- bool xs = mb[0] & 0x10; -- bool ys = mb[0] & 0x20; -- dx = xs ? mb[1]-256 : mb[1]; -- dy = ys ? mb[2]-256 : mb[2]; - -- sendEvent = true; -- } --#if 0 //debug -- if (mouseProtocol == MouseMan) -- printf("(%2d) %02x %02x %02x ", idx, mb[0], mb[1], mb[2]); -- else -- printf("(%2d) %02x %02x %02x %02x ",idx,mb[0],mb[1],mb[2],mb[3]); -- const char *b1 = (mb[0] & 0x01) ? "b1":" ";//left -- const char *b2 = (mb[0] & 0x02) ? "b2":" ";//right -- const char *b3 = (mb[0] & 0x04) ? "b3":" ";//mid - -- if ( overflow ) -- printf( "Overflow%d %s %s %s (%4d,%4d)\n", overflow, -- b1, b2, b3, mousePos.x(), mousePos.y() ); -- else -- printf( "%s %s %s (%+3d,%+3d) (%4d,%4d)\n", -- b1, b2, b3, dx, dy, mousePos.x(), mousePos.y() ); --#endif -- break; -- } -- case Microsoft: -- if ( (mb[0] & 0x20) ) -- bstate |= Qt::LeftButton; -- if ( (mb[0] & 0x10) ) -- bstate |= Qt::RightButton; -- -- dx=(signed char)(((mb[0] & 0x03) << 6) | (mb[1] & 0x3f)); -- dy=-(signed char)(((mb[0] & 0x0c) << 4) | (mb[2] & 0x3f)); -- sendEvent=true; -- -- break; -- case BusMouse: -- if ( !(mb[0] & 0x04) ) -- bstate |= Qt::LeftButton; -- if ( !(mb[0] & 0x01) ) -- bstate |= Qt::RightButton; -- -- dx=(signed char)mb[1]; -- dy=(signed char)mb[2]; -- sendEvent=true; -- break; -- -- default: -- qWarning( "Unknown mouse protocol in QWSMouseHandlerPrivate" ); -- break; -- } -- if (sendEvent) { -- if ( QABS(dx) > accel_limit || QABS(dy) > accel_limit ) { -- dx *= accel; -- dy *= accel; -- } -- tdx += dx; -- tdy += dy; -- if ( bstate != obstate ) { -- mousePos += QPoint(tdx,-tdy); -- limitToScreen( mousePos ); -- emit mouseChanged(mousePos,bstate); -- sendEvent = FALSE; -- tdx = 0; -- tdy = 0; -- obstate = bstate; -- } -- } -- idx += mouseData[mouseProtocol].bytesPerPacket; -- } -- if ( sendEvent ) { -- mousePos += QPoint(tdx,-tdy); -- limitToScreen( mousePos ); -- emit mouseChanged(mousePos,bstate); -- } -- -- int surplus = mouseIdx - idx; -- for ( int i = 0; i < surplus; i++ ) -- mouseBuf[i] = mouseBuf[idx+i]; -- mouseIdx = surplus; --} --#endif -- -- --QWSMouseHandlerPrivate::QWSMouseHandlerPrivate( MouseProtocol protocol, -- QString mouseDev ) --{ --#ifndef QT_NO_QWS_MOUSE_PC -- mouseProtocol = protocol; -- -- if ( mouseDev.isEmpty() ) -- mouseDev = "/dev/mouse"; -- obstate = -1; -- mouseFD = -1; -- mouseFD = open( mouseDev.local8Bit().data(), O_RDWR | O_NDELAY); -- if ( mouseFD < 0 ) { -- mouseFD = open( mouseDev.local8Bit().data(), O_RDONLY | O_NDELAY); -- if ( mouseFD < 0 ) -- qDebug( "Cannot open %s (%s)", mouseDev.ascii(), -- strerror(errno)); -- } else { -- // Clear pending input -- tcflush(mouseFD,TCIFLUSH); -- -- bool ps2 = false; -- -- switch (mouseProtocol) { -- case MouseMan: -- ps2 = true; -- write(mouseFD,"",1); -- usleep(50000); -- write(mouseFD,"@EeI!",5); -- break; -- -- case IntelliMouse: { --// ps2 = true; -- const unsigned char init1[] = { 243, 200, 243, 100, 243, 80 }; -- const unsigned char init2[] = { 246, 230, 244, 243, 100, 232, 3 }; -- write(mouseFD,init1,sizeof(init1)); -- usleep(50000); -- write(mouseFD,init2,sizeof(init2)); -- } -- break; -- -- case Microsoft: -- struct termios tty; -- -- tcgetattr(mouseFD, &tty); -- -- tty.c_iflag = IGNBRK | IGNPAR; -- tty.c_oflag = 0; -- tty.c_lflag = 0; --#if !defined(_OS_FREEBSD_) && !defined(_OS_SOLARIS_) -- tty.c_line = 0; --#endif // _OS_FREEBSD_ -- tty.c_cc[VTIME] = 0; -- tty.c_cc[VMIN] = 1; -- tty.c_cflag = B1200 | CS7 | CREAD | CLOCAL | HUPCL; -- tcsetattr(mouseFD, TCSAFLUSH, &tty); /* set parameters */ -- break; -- -- case BusMouse: -- usleep(50000); -- break; -- -- default: -- qDebug("Unknown mouse protocol"); -- exit(1); -- } -- -- if (ps2) { -- char buf[] = { 246, 244 }; -- write(mouseFD,buf,1); -- write(mouseFD,buf+1,1); -- } -- -- usleep(50000); -- tcflush(mouseFD,TCIFLUSH); // ### doesn't seem to work. -- usleep(50000); -- tcflush(mouseFD,TCIFLUSH); // ### doesn't seem to work. -- -- char buf[100]; // busmouse driver will not read if bufsize < 3, YYD -- while (read(mouseFD, buf, 100) > 0) { } // eat unwanted replies -- -- mouseIdx = 0; -- -- QSocketNotifier *mouseNotifier; -- mouseNotifier = new QSocketNotifier( mouseFD, QSocketNotifier::Read, this ); -- connect(mouseNotifier, SIGNAL(activated(int)),this, SLOT(readMouseData())); -- } --#else -- Q_UNUSED(protocol); -- Q_UNUSED(mouseDev); --#endif --} -- --QWSMouseHandlerPrivate::~QWSMouseHandlerPrivate() --{ --#ifndef QT_NO_QWS_MOUSE_PC -- if (mouseFD >= 0) { -- tcflush(mouseFD,TCIFLUSH); // yyd. -- close(mouseFD); -- } --#endif --} -- --/* -- * -- */ - - QCalibratedMouseHandler::QCalibratedMouseHandler() - : samples(5), currSample(0), numSamples(0) -@@ -1030,7 +180,8 @@ - if ( file.open( IO_WriteOnly ) ) { - QTextStream t( &file ); - t << a << " " << b << " " << c << " "; -- t << d << " " << e << " " << f << " " << s; -+ t << d << " " << e << " " << f << " " << s << endl; -+ file.close(); - } else - #endif - { -@@ -1046,6 +197,7 @@ - if ( file.open( IO_ReadOnly ) ) { - QTextStream t( &file ); - t >> a >> b >> c >> d >> e >> f >> s; -+ file.close(); - } else - #endif - { -@@ -1073,12 +225,24 @@ - writeCalibration(); - } - -+void QCalibratedMouseHandler::setCalibration(int aa, int bb, int cc, int dd, int ee, int ff, int ss) -+{ -+ a = aa; -+ b = bb; -+ c = cc; -+ d = dd; -+ e = ee; -+ f = ff; -+ s = ss; -+} -+ - QPoint QCalibratedMouseHandler::transform( const QPoint &p ) - { - QPoint tp; - - tp.setX( (a * p.x() + b * p.y() + c) / s ); - tp.setY( (d * p.x() + e * p.y() + f) / s ); -+//qDebug("QCalibratedMouseHandler::transform(%d,%d) -> %d,%d)", p.x(), p.y(), tp.x(), tp.y() ); - - return tp; - } -@@ -1143,814 +307,192 @@ - return sent; - } - --/* -- * Handler for /dev/tpanel Linux kernel driver -- */ - --class QVrTPanelHandlerPrivate : public QCalibratedMouseHandler { -- Q_OBJECT --public: -- QVrTPanelHandlerPrivate(MouseProtocol, QString dev); -- ~QVrTPanelHandlerPrivate(); - --private: -- int mouseFD; -- MouseProtocol mouseProtocol; --private slots: -- void sendRelease(); -- void readMouseData(); --private: -- static const int mouseBufSize = 1280; -- QTimer *rtimer; -- int mouseIdx; -- uchar mouseBuf[mouseBufSize]; --}; - --#ifndef QT_QWS_CASSIOPEIA --QVrTPanelHandlerPrivate::QVrTPanelHandlerPrivate( MouseProtocol, QString ) : -- QCalibratedMouseHandler() --{ --} --#else --QVrTPanelHandlerPrivate::QVrTPanelHandlerPrivate( MouseProtocol, QString dev ) : -- QCalibratedMouseHandler() --{ -- if ( dev.isEmpty() ) -- dev = "/dev/tpanel"; -- -- if ((mouseFD = open( dev, O_RDONLY)) < 0) { -- qFatal( "Cannot open %s (%s)", dev.latin1(), strerror(errno)); -- } else { -- sleep(1); -- } -- -- struct scanparam s; -- s.interval = 20000; -- s.settletime = 480; -- if ( ioctl(mouseFD, TPSETSCANPARM, &s) < 0 -- || fcntl(mouseFD, F_SETFL, O_NONBLOCK) < 0 ) -- qWarning("Error initializing touch panel."); -- -- QSocketNotifier *mouseNotifier; -- mouseNotifier = new QSocketNotifier( mouseFD, QSocketNotifier::Read, -- this ); -- connect(mouseNotifier, SIGNAL(activated(int)),this, SLOT(readMouseData())); -- -- rtimer = new QTimer( this ); -- connect( rtimer, SIGNAL(timeout()), this, SLOT(sendRelease())); -- mouseIdx = 0; -- setFilterSize( 3 ); -- -- printf("\033[?25l"); fflush(stdout); // VT100 cursor off --} --#endif -- --QVrTPanelHandlerPrivate::~QVrTPanelHandlerPrivate() --{ -- if (mouseFD >= 0) -- close(mouseFD); --} -- --void QVrTPanelHandlerPrivate::sendRelease() --{ -- sendFiltered( mousePos, 0 ); --} - --void QVrTPanelHandlerPrivate::readMouseData() --{ --#ifdef QT_QWS_CASSIOPEIA -- if(!qt_screen) -- return; -- static bool pressed = FALSE; -- -- int n; -- do { -- n = read(mouseFD, mouseBuf+mouseIdx, mouseBufSize-mouseIdx ); -- if ( n > 0 ) -- mouseIdx += n; -- } while ( n > 0 && mouseIdx < mouseBufSize ); -- -- int idx = 0; -- while ( mouseIdx-idx >= (int)sizeof( short ) * 6 ) { -- uchar *mb = mouseBuf+idx; -- ushort *data = (ushort *) mb; -- if ( data[0] & 0x8000 ) { -- if ( data[5] > 750 ) { -- QPoint t(data[3]-data[4],data[2]-data[1]); -- if ( sendFiltered( t, Qt::LeftButton ) ) -- pressed = TRUE; -- if ( pressed ) -- rtimer->start( 200, TRUE ); // release unreliable -- } -- } else if ( pressed ) { -- rtimer->start( 50, TRUE ); -- pressed = FALSE; -- } -- idx += sizeof( ushort ) * 6; -- } -+struct input_event { -+ struct timeval time; -+ unsigned short type; -+ unsigned short code; -+ unsigned int value; -+}; - -- int surplus = mouseIdx - idx; -- for ( int i = 0; i < surplus; i++ ) -- mouseBuf[i] = mouseBuf[idx+i]; -- mouseIdx = surplus; - --#endif --} -+#define EV_ABS 0x03 -+#define ABS_X 0x00 -+#define ABS_Y 0x01 -+#define ABS_PRESSURE 0x18 - - --class QTPanelHandlerPrivate : public QCalibratedMouseHandler -+class QInputEventHandler : public QCalibratedMouseHandler - { - Q_OBJECT - public: -- QTPanelHandlerPrivate(MouseProtocol, QString dev); -- ~QTPanelHandlerPrivate(); -+ QInputEventHandler(MouseProtocol, QString dev); -+ ~QInputEventHandler(); -+ -+ virtual void calibrate( QWSPointerCalibrationData * ); -+ virtual void setCalibration(int aa, int bb, int cc, int dd, int ee, int ff, int ss); - - private: -- static const int mouseBufSize = 2048; -+ void init(); -+ void fini(); -+ - int mouseFD; -- QPoint oldmouse; -- QPoint oldTotalMousePos; -- bool waspressed; -- QPointArray samples; -- unsigned int currSample; -- unsigned int lastSample; -- unsigned int numSamples; -- int skipCount; -- int mouseIdx; -- uchar mouseBuf[mouseBufSize]; -+ struct input_event sample; -+ int myX, myY, myP, oldX, oldY, oldP; -+ int xtable[QT_QWS_TP_TABLE_SIZE]; -+ int ytable[QT_QWS_TP_TABLE_SIZE]; -+ int ptr; - - private slots: - void readMouseData(); - }; - - --QTPanelHandlerPrivate::QTPanelHandlerPrivate( MouseProtocol, QString dev ) -- : samples(QT_QWS_TP_SAMPLE_SIZE), currSample(0), lastSample(0), -- numSamples(0), skipCount(0) --{ -- Q_UNUSED(dev); --#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_K2) || defined(QT_QWS_SLC700) --#if defined(QT_QWS_IPAQ) --# ifdef QT_QWS_IPAQ_RAW -- if ((mouseFD = open( "/dev/h3600_tsraw", O_RDONLY | O_NDELAY)) < 0) { --# else -- if ((mouseFD = open( "/dev/h3600_ts", O_RDONLY | O_NDELAY)) < 0) { --# endif -- qWarning( "Cannot open /dev/h3600_ts (%s)", strerror(errno)); -- return; -- } --#elif defined(QT_QWS_SL5XXX) || defined(QT_QWS_K2) || defined(QT_QWS_SLC700) --//# ifdef QT_QWS_SL5XXX_TSRAW --# if 0 -- if ((mouseFD = open( "/dev/tsraw", O_RDONLY | O_NDELAY)) < 0) { -- qWarning( "Cannot open /dev/tsraw (%s)", strerror(errno)); -- return; -- } --# else -- if ((mouseFD = open( "/dev/ts", O_RDONLY | O_NDELAY)) < 0) { -- qWarning( "Cannot open /dev/ts (%s)", strerror(errno)); -- return; -- } --# endif --#elif defined(QT_QWS_SIMPAD ) -- if ((mouseFD = open( "/dev/touchscreen/ucb1x00", O_RDONLY | O_NONBLOCK )) < 0) { -- qWarning( "Cannot open /dev/touchscreen/ucb1x00 (%s)", strerror(errno)); -- return; -- } --#endif -- -- QSocketNotifier *mouseNotifier; -- mouseNotifier = new QSocketNotifier( mouseFD, QSocketNotifier::Read, -- this ); -- connect(mouseNotifier, SIGNAL(activated(int)),this, SLOT(readMouseData())); -- waspressed=FALSE; -- mouseIdx = 0; --#endif --} -- --QTPanelHandlerPrivate::~QTPanelHandlerPrivate() -+QInputEventHandler::QInputEventHandler( MouseProtocol, QString ) -+ : myP(-1) - { --#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_K2) || defined(QT_QWS_SLC700) || defined(QT_QWS_SIMPAD) -- if (mouseFD >= 0) -- close(mouseFD); --#endif -+ init(); - } - --void QTPanelHandlerPrivate::readMouseData() -+QInputEventHandler::~QInputEventHandler() - { --#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_K2) || defined(QT_QWS_SLC700) || defined(QT_QWS_SIMPAD) -- if(!qt_screen) -- return; -- -- int n; -- do { -- n = read(mouseFD, mouseBuf+mouseIdx, mouseBufSize-mouseIdx ); -- if ( n > 0 ) -- mouseIdx += n; -- } while ( n > 0 && mouseIdx < mouseBufSize ); -- -- TS_EVENT *data; -- int idx = 0; -- -- // perhaps we shouldn't be reading EVERY SAMPLE. -- while ( mouseIdx-idx >= (int)sizeof( TS_EVENT ) ) { -- uchar *mb = mouseBuf+idx; -- data = (TS_EVENT *) mb; -- if(data->pressure >= QT_QWS_TP_PRESSURE_THRESHOLD) { --#if defined(QT_QWS_SL5XXX) || defined(QT_QWS_SLC700) -- samples[currSample] = QPoint( 1000 - data->x, data->y ); --#else -- samples[currSample] = QPoint( data->x, data->y ); --#endif -- -- numSamples++; -- if ( numSamples >= QT_QWS_TP_MINIMUM_SAMPLES ) { -- int sampleCount = QMIN(numSamples + 1,samples.count()); -- -- // average the rest -- mousePos = QPoint( 0, 0 ); -- QPoint totalMousePos = oldTotalMousePos; -- totalMousePos += samples[currSample]; -- if(numSamples >= samples.count()) -- totalMousePos -= samples[lastSample]; -- -- mousePos = totalMousePos / (sampleCount - 1); -- --# if defined(QT_QWS_IPAQ_RAW) || defined(QT_QWS_SL5XXX_RAW) -- mousePos = transform( mousePos ); --# endif -- if(!waspressed) -- oldmouse = mousePos; -- QPoint dp = mousePos - oldmouse; -- int dxSqr = dp.x() * dp.x(); -- int dySqr = dp.y() * dp.y(); -- if ( dxSqr + dySqr < (QT_QWS_TP_MOVE_LIMIT * QT_QWS_TP_MOVE_LIMIT) ) { -- if ( waspressed ) { -- if ( (dxSqr + dySqr > (QT_QWS_TP_JITTER_LIMIT * QT_QWS_TP_JITTER_LIMIT) ) || skipCount > 2) { -- emit mouseChanged(mousePos,Qt::LeftButton); -- oldmouse = mousePos; -- skipCount = 0; -- } else { -- skipCount++; -- } -- } else { -- emit mouseChanged(mousePos,Qt::LeftButton); -- oldmouse=mousePos; -- waspressed=true; -- } -- -- // save recuring information -- currSample++; -- if (numSamples >= samples.count()) -- lastSample++; -- oldTotalMousePos = totalMousePos; -- } else { -- numSamples--; // don't use this sample, it was bad. -- } -- } else { -- // build up the average -- oldTotalMousePos += samples[currSample]; -- currSample++; -- } -- if ( currSample >= samples.count() ) -- currSample = 0; -- if ( lastSample >= samples.count() ) -- lastSample = 0; -- } else { -- currSample = 0; -- lastSample = 0; -- numSamples = 0; -- skipCount = 0; -- oldTotalMousePos = QPoint(0,0); -- if ( waspressed ) { -- emit mouseChanged(oldmouse,0); -- oldmouse = QPoint( -100, -100 ); -- waspressed=false; -- } -- } -- idx += sizeof( TS_EVENT ); -- } -+ fini(); - -- int surplus = mouseIdx - idx; -- for ( int i = 0; i < surplus; i++ ) -- mouseBuf[i] = mouseBuf[idx+i]; -- mouseIdx = surplus; --#endif - } - --// YOPY touch panel support based on changes contributed by Ron Victorelli --// (victorrj at icubed.com) to Custom TP driver. --// --class QYopyTPanelHandlerPrivate : public QWSMouseHandler { -- Q_OBJECT --public: -- QYopyTPanelHandlerPrivate(MouseProtocol, QString dev); -- ~QYopyTPanelHandlerPrivate(); -- --private: -- int mouseFD; -- int prevstate; --private slots: -- void readMouseData(); -- --}; -- --QYopyTPanelHandlerPrivate::QYopyTPanelHandlerPrivate( MouseProtocol, QString ) -+void QInputEventHandler::setCalibration(int aa, int bb, int cc, int dd, int ee, int ff, int ss) - { --#ifdef QT_QWS_YOPY -- if ((mouseFD = open( "/dev/ts", O_RDONLY)) < 0) { -- qWarning( "Cannot open /dev/ts (%s)", strerror(errno)); -- return; -- } else { -- sleep(1); -- } -- prevstate=0; -- QSocketNotifier *mouseNotifier; -- mouseNotifier = new QSocketNotifier( mouseFD, QSocketNotifier::Read, -- this ); -- connect(mouseNotifier, SIGNAL(activated(int)),this, SLOT(readMouseData())); --#endif --} -+ QCalibratedMouseHandler::setCalibration(aa, bb, cc, dd, ee, ff, ss); - --QYopyTPanelHandlerPrivate::~QYopyTPanelHandlerPrivate() --{ -- if (mouseFD >= 0) -- close(mouseFD); -+ writeCalibration(); -+ fini(); -+ init(); - } - --#define YOPY_XPOS(d) (d[1]&0x3FF) --#define YOPY_YPOS(d) (d[2]&0x3FF) --#define YOPY_PRES(d) (d[0]&0xFF) --#define YOPY_STAT(d) (d[3]&0x01 ) -- --struct YopyTPdata { -- -- unsigned char status; -- unsigned short xpos; -- unsigned short ypos; -- --}; -- --void QYopyTPanelHandlerPrivate::readMouseData() -+void QInputEventHandler::calibrate( QWSPointerCalibrationData *cd ) - { --#ifdef QT_QWS_YOPY -- if(!qt_screen) -- return; -- YopyTPdata data; -- -- unsigned int yopDat[4]; -- -- int ret; -- -- ret=read(mouseFD,&yopDat,sizeof(yopDat)); -+ QCalibratedMouseHandler::calibrate( cd ); - -- if(ret) { -- data.status= ( YOPY_PRES(yopDat) ) ? 1 : 0; -- data.xpos=YOPY_XPOS(yopDat); -- data.ypos=YOPY_YPOS(yopDat); -- QPoint q; -- q.setX(data.xpos); -- q.setY(data.ypos); -- mousePos=q; -- if(data.status && !prevstate) { -- emit mouseChanged(mousePos,Qt::LeftButton); -- } else if( !data.status && prevstate ) { -- emit mouseChanged(mousePos,0); -- } -- prevstate = data.status; -- } -- if(ret<0) { -- qDebug("Error %s",strerror(errno)); -- } --#endif -+ // write calibration data, and close and reopen -+ // tslib, in order to ensure it uses the new values -+ writeCalibration(); -+ fini(); -+ init(); - } - --class QCustomTPanelHandlerPrivate : public QWSMouseHandler { -- Q_OBJECT --public: -- QCustomTPanelHandlerPrivate(MouseProtocol, QString dev); -- ~QCustomTPanelHandlerPrivate(); -- --private: -- int mouseFD; --private slots: -- void readMouseData(); -- --}; -- --QCustomTPanelHandlerPrivate::QCustomTPanelHandlerPrivate( MouseProtocol, QString ) -+void QInputEventHandler::init() - { --#ifdef QWS_CUSTOMTOUCHPANEL -- if ((mouseFD = open( "/dev/ts", O_RDONLY)) < 0) { -- qWarning( "Cannot open /dev/ts (%s)", strerror(errno)); -+ if ((mouseFD = open( "/dev/input/event1", O_RDONLY)) < 0) { -+ qWarning( "Cannot open /dev/input/event1 (%s)", strerror(errno)); - return; -- } else { -- sleep(1); - } - - QSocketNotifier *mouseNotifier; -- mouseNotifier = new QSocketNotifier( mouseFD, QSocketNotifier::Read, -- this ); -+ mouseNotifier = new QSocketNotifier( mouseFD, QSocketNotifier::Read, this ); -+ setFilterSize(2); - connect(mouseNotifier, SIGNAL(activated(int)),this, SLOT(readMouseData())); --#endif - } - --QCustomTPanelHandlerPrivate::~QCustomTPanelHandlerPrivate() -+void QInputEventHandler::fini() - { - if (mouseFD >= 0) - close(mouseFD); - } - --struct CustomTPdata { -- -- unsigned char status; -- unsigned short xpos; -- unsigned short ypos; -- --}; -- --void QCustomTPanelHandlerPrivate::readMouseData() -+void QInputEventHandler::readMouseData() - { --#ifdef QWS_CUSTOMTOUCHPANEL -- if(!qt_screen) -- return; -- CustomTPdata data; -- -- unsigned char data2[5]; -- -- int ret; -- -- ret=read(mouseFD,data2,5); -+ if (!qt_screen) -+ return; - -- if(ret==5) { -- data.status=data2[0]; -- data.xpos=(data2[1] << 8) | data2[2]; -- data.ypos=(data2[3] << 8) | data2[4]; -- QPoint q; -- q.setX(data.xpos); -- q.setY(data.ypos); -- mousePos=q; -- if(data.status & 0x40) { -- emit mouseChanged(mousePos,Qt::LeftButton); -- } else { -- emit mouseChanged(mousePos,0); -+ unsigned int size = read(mouseFD, &sample, sizeof(sample)); -+ if (size < sizeof(sample)) { -+ qDebug("no input"); -+ return; -+ } -+ //qDebug("type,code,val: %d,%d,%d", sample.type, sample.code, sample.value); -+ if (sample.type == EV_ABS) { -+ if (sample.code == ABS_Y) { -+ myY = sample.value; -+ return; -+ } else -+ if (sample.code == ABS_X) { -+ myX = sample.value; -+ return; -+ } else -+ if (sample.code == ABS_PRESSURE) { -+ myP = sample.value; -+ } - } -- } -- if(ret<0) { -- qDebug("Error %s",strerror(errno)); -- } --#endif --} -- --/* -- * Virtual framebuffer mouse driver -- */ -- --#ifndef QT_NO_QWS_VFB --#include "qvfbhdr.h" --extern int qws_display_id; --#endif -- --class QVFbMouseHandlerPrivate : public QWSMouseHandler { -- Q_OBJECT --public: -- QVFbMouseHandlerPrivate(MouseProtocol, QString dev); -- ~QVFbMouseHandlerPrivate(); -- --#ifndef QT_NO_QWS_VFB -- bool isOpen() const { return mouseFD > 0; } -- --private: -- static const int mouseBufSize = 128; -- int mouseFD; -- int mouseIdx; -- uchar mouseBuf[mouseBufSize]; --#endif -- --private slots: -- void readMouseData(); --}; -- --QVFbMouseHandlerPrivate::QVFbMouseHandlerPrivate( MouseProtocol, QString mouseDev ) --{ --#ifndef QT_NO_QWS_VFB -- mouseFD = -1; -- if ( mouseDev.isEmpty() ) -- mouseDev = QString(QT_VFB_MOUSE_PIPE).arg(qws_display_id); -- -- if ((mouseFD = open( mouseDev.local8Bit().data(), O_RDWR | O_NDELAY)) < 0) { -- qDebug( "Cannot open %s (%s)", mouseDev.ascii(), -- strerror(errno)); -- } else { -- // Clear pending input -- char buf[2]; -- while (read(mouseFD, buf, 1) > 0) { } -- -- mouseIdx = 0; -- -- QSocketNotifier *mouseNotifier; -- mouseNotifier = new QSocketNotifier( mouseFD, QSocketNotifier::Read, this ); -- connect(mouseNotifier, SIGNAL(activated(int)),this, SLOT(readMouseData())); -- } --#endif --} -- --QVFbMouseHandlerPrivate::~QVFbMouseHandlerPrivate() --{ --#ifndef QT_NO_QWS_VFB -- if (mouseFD >= 0) -- close(mouseFD); --#endif --} -- --void QVFbMouseHandlerPrivate::readMouseData() --{ --#ifndef QT_NO_QWS_VFB -- int n; -- do { -- n = read(mouseFD, mouseBuf+mouseIdx, mouseBufSize-mouseIdx ); -- if ( n > 0 ) -- mouseIdx += n; -- } while ( n > 0 ); -- -- int idx = 0; -- while ( mouseIdx-idx >= int(sizeof( QPoint ) + sizeof( int )) ) { -- uchar *mb = mouseBuf+idx; -- QPoint *p = (QPoint *) mb; -- mb += sizeof( QPoint ); -- int *bstate = (int *)mb; -- mousePos = *p; -- limitToScreen( mousePos ); -- emit mouseChanged(mousePos, *bstate); -- idx += sizeof( QPoint ) + sizeof( int ); -- } -- -- int surplus = mouseIdx - idx; -- for ( int i = 0; i < surplus; i++ ) -- mouseBuf[i] = mouseBuf[idx+i]; -- mouseIdx = surplus; --#endif --} -- --/* -- mouse handler for tslib -- see http://cvs.arm.linux.org.uk/ -- */ --/* -- -- Copyright (C) 2003, 2004, 2005 Texas Instruments, Inc. -- Copyright (C) 2004, 2005 Holger Hans Peter Freyther -- 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 Texas Instruments, Inc 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 THE COPYRIGHT HOLDERS AND CONTRIBUTORS -- "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 THE -- COPYRIGHT OWNER OR CONTRIBUTORS 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. -- --*/ --class QTSLibHandlerPrivate : public QCalibratedMouseHandler --{ -- Q_OBJECT --public: -- QTSLibHandlerPrivate(); -- ~QTSLibHandlerPrivate(); -- -- virtual void clearCalibration(); -- virtual void calibrate( QWSPointerCalibrationData * ); -- static int sortByX( const void*, const void* ); -- static int sortByY( const void*, const void* ); -- --private: -- bool m_raw : 1; -- QSocketNotifier *m_notify; -- --#ifdef QT_QWS_TSLIB -- struct tsdev *m_ts; --#endif -- void openTs(); -- void closeTs(); -- void interpolateSample(); -- --private slots: -- void readMouseData(); -- --}; -- --QTSLibHandlerPrivate::QTSLibHandlerPrivate() -- : m_raw(false), m_notify(0 ) --{ -- openTs(); --} -- --QTSLibHandlerPrivate::~QTSLibHandlerPrivate() --{ -- closeTs(); --} -- --void QTSLibHandlerPrivate::openTs() --{ --#ifdef QT_QWS_TSLIB -- char *tsdevice; -- if((tsdevice = getenv("TSLIB_TSDEVICE")) != NULL) { -- m_ts = ts_open( tsdevice, 1 ); //1 = nonblocking, 0 = blocking mode -- } else { -- m_ts = ts_open( "/dev/ts", 1 ); -- } -- -- if (!m_ts) { -- qWarning( "Cannot open touchscreen (%s)", strerror( errno)); -- return; -- } -- -- if (ts_config( m_ts)) { -- qWarning( "Cannot configure touchscreen (%s)", strerror( errno)); -- return; -- } -- m_notify = new QSocketNotifier( ts_fd(m_ts), QSocketNotifier::Read, this ); -- connect( m_notify, SIGNAL(activated(int)),this, SLOT(readMouseData())); --#endif --} -- --void QTSLibHandlerPrivate::closeTs() --{ --#ifdef QT_QWS_TSLIB -- if (m_ts) -- ts_close(m_ts); -- m_ts = 0; --#endif -- -- delete m_notify; -- m_notify = 0; -- m_raw = false; --} -- --void QTSLibHandlerPrivate::clearCalibration() --{ -- m_raw = true; --} -- --void QTSLibHandlerPrivate::calibrate( QWSPointerCalibrationData * cd) --{ -- QPoint dev_tl = cd->devPoints[ QWSPointerCalibrationData::TopLeft ]; -- QPoint dev_br = cd->devPoints[ QWSPointerCalibrationData::BottomRight ]; -- QPoint screen_tl = cd->screenPoints[ QWSPointerCalibrationData::TopLeft ]; -- QPoint screen_br = cd->screenPoints[ QWSPointerCalibrationData::BottomRight ]; -- int a, b, c, d, e, f, s; -- -- s = 1 << 16; - -- a = s * (screen_tl.x() - screen_br.x() ) / (dev_tl.x() - dev_br.x()); -- b = 0; -- c = s * screen_tl.x() - a * dev_tl.x(); -+ // up->up -+ if (oldP==0 && myP==0) { -+ //qDebug("uu %d,%d,%d", myX,myY,myP); -+ return; -+ } - -- d = 0; -- e = s * (screen_tl.y() - screen_br.y() ) / (dev_tl.y() - dev_br.y()); -- f = s * screen_tl.y() - e * dev_tl.y(); -+ // up->down -+ if (oldP==0 && myP>QT_QWS_TP_PRESSURE_DOWN_THRESHOLD) { -+ //qDebug("ud %d,%d,%d", myX,myY,myP); - -- QString calFile = "/etc/pointercal"; --#ifndef QT_NO_TEXTSTREAM -- QFile file( calFile ); -- if ( file.open( IO_WriteOnly ) ) { -- QTextStream t( &file ); -- t << a << " " << b << " " << c << " "; -- t << d << " " << e << " " << f << " " << s; -- file.flush(); closeTs(); -- openTs(); -- } else --#endif -- { -- qDebug( "Could not save calibration: %s", calFile.latin1() ); -- } --} -+ xtable[0] = myX; -+ ytable[0] = myY; -+ ptr = 1; -+ oldX = myX; -+ oldY = myY; -+ oldP = myP; -+ return; -+ } - --void QTSLibHandlerPrivate::readMouseData() --{ --#ifdef QT_QWS_TSLIB -- if(!qt_screen) -- return; -+ // down->down -+ if (oldP>QT_QWS_TP_PRESSURE_DOWN_THRESHOLD && myP>QT_QWS_TP_PRESSURE_UP_THRESHOLD) { -+ //qDebug("dd %d,%d,%d (%d,%d)", myX,myY,myP, oldX,oldY); - -- /* -- * After clear Calibration -- * we're in raw mode and do some easy median -- * search. -- */ -- if ( m_raw ) -- return interpolateSample(); -+ int dxSqr = myX-oldX; dxSqr *= dxSqr; -+ int dySqr = myY-oldY; dySqr *= dySqr; -+ oldX = myX; -+ oldY = myY; -+ if (dxSqr+dySqr > QT_QWS_TP_MOVE_MAX*QT_QWS_TP_MOVE_MAX) { -+ //qWarning("distance too wide %d", dxSqr+dySqr); -+ return; -+ } - -- static struct ts_sample sample; -- static int ret; -+ if (ptr < QT_QWS_TP_TABLE_SIZE) { -+ xtable[ptr] = myX; -+ ytable[ptr++] = myY; -+ } - -- /* -- * Ok. We need to see if we can read more than one event -- * We do this not to lose an update. -- */ -- while ( true ) { -- if ((ret = ts_read(m_ts, &sample, 1)) != 1 ) -- return; -+ if (ptr == QT_QWS_TP_TABLE_SIZE) { -+ int i; -+ int mx = 0; -+ int my = 0; -+ for (i=0; i<QT_QWS_TP_TABLE_SIZE; i++) { -+ mx += xtable[i]; -+ my += ytable[i]; -+ if (i>0) { -+ xtable[i-1] = xtable[i]; -+ ytable[i-1] = ytable[i]; -+ } -+ } -+ ptr--; -+ mousePos = transform(QPoint(mx/QT_QWS_TP_TABLE_SIZE, my/QT_QWS_TP_TABLE_SIZE)); - -+ emit mouseChanged(mousePos, Qt::LeftButton); -+ } -+ return; -+ } - -- QPoint pos( sample.x, sample.y ); -- mouseChanged( pos, sample.pressure != 0 ? 1 : 0 ); -- } --#endif -+ // down->up -+ //qDebug("du %d,%d,%d", myX,myY,myP); -+ emit mouseChanged(mousePos, 0); -+ oldP = 0; - } - --/* -- * Lets take all down events and then sort them -- * and take the event in the middle. -- * -- * inspired by testutils.c -- */ --void QTSLibHandlerPrivate::interpolateSample() { --#ifdef QT_QWS_TSLIB --#define TSLIB_MAX_SAMPLES 25 -- static struct ts_sample samples[TSLIB_MAX_SAMPLES]; -- int index = 0; -- int read_samples = 0; -- int ret; -- -- do { -- /* do not access negative arrays */ -- if ( index < 0 ) -- index = 0; -- -- /* we're opened non-blocking */ -- if((ret= ts_read_raw(m_ts, &samples[index], 1 ) ) != 1 ) -- /* no event yet, so try again */ -- if (ret==-1 ) -- continue; -- -- read_samples++; -- index = (index+1)%TSLIB_MAX_SAMPLES; -- }while (samples[index == 0 ? (TSLIB_MAX_SAMPLES-1) : index-1].pressure != 0); -- -- /* -- * If we've wrapped around each sample is used otherwise -- * we will use the index -- */ -- index = read_samples >= TSLIB_MAX_SAMPLES ? -- (TSLIB_MAX_SAMPLES-1 ) : index; -- int x, y; -- -- /* -- * now let us use the median value -- * even index does not have an item in the middle -- * so let us take the average of n/2 and (n/2)-1 as the middle -- */ -- int m = index/2; -- ::qsort(samples, index, sizeof(ts_sample), QTSLibHandlerPrivate::sortByX); -- x = (index % 2 ) ? samples[m].x : -- ( samples[m-1].x + samples[m].x )/2; -- -- ::qsort(samples, index, sizeof(ts_sample), QTSLibHandlerPrivate::sortByY); -- y = (index % 2 ) ? samples[m].y : -- ( samples[m-1].y + samples[m].y )/2; - -- emit mouseChanged( QPoint(x, y), 1 ); -- emit mouseChanged( QPoint(0, 0), 0 ); --#endif --} - --int QTSLibHandlerPrivate::sortByX( const void* one, const void* two) { --#ifdef QT_QWS_TSLIB -- return reinterpret_cast<const struct ts_sample*>(one)->x - -- reinterpret_cast<const struct ts_sample*>(two)->x; --#else -- return 0; --#endif --} - --int QTSLibHandlerPrivate::sortByY( const void* one, const void* two) { --#ifdef QT_QWS_TSLIB -- return reinterpret_cast<const struct ts_sample*>(one)->y - -- reinterpret_cast<const struct ts_sample*>(two)->y; --#else -- return 0; --#endif --} --////// - - /* - * return a QWSMouseHandler that supports /a spec. -@@ -1977,7 +519,7 @@ - - if ( mouseProto == "USB" && mouseDev.isEmpty() ) - mouseDev = "/dev/input/mice"; -- -+ - MouseProtocol mouseProtocol = Unknown; - - int idx = 0; -@@ -1988,50 +530,7 @@ - idx++; - } - -- -- QWSMouseHandler *handler = 0; -- -- switch ( mouseProtocol ) { --#ifndef QT_NO_QWS_MOUSE_AUTO -- case Auto: -- handler = new QAutoMouseHandler(); -- break; --#endif -- --#ifndef QT_NO_QWS_MOUSE_PC -- case MouseMan: -- case IntelliMouse: -- case Microsoft: -- case BusMouse: -- handler = new QWSMouseHandlerPrivate( mouseProtocol, mouseDev ); -- break; --#endif -- --#ifndef QT_NO_QWS_VFB -- case QVFBMouse: -- handler = new QVFbMouseHandlerPrivate( mouseProtocol, mouseDev ); -- break; --#endif -- -- case TPanel: --#if defined(QWS_CUSTOMTOUCHPANEL) -- handler = new QCustomTPanelHandlerPrivate(mouseProtocol,mouseDev); --#elif defined(QT_QWS_TSLIB) -- handler = new QTSLibHandlerPrivate(); --#elif defined(QT_QWS_YOPY) -- handler = new QYopyTPanelHandlerPrivate(mouseProtocol,mouseDev); --#elif defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_K2) || defined(QT_QWS_SLC700) || defined(QT_QWS_SIMPAD) -- handler = new QTPanelHandlerPrivate(mouseProtocol,mouseDev); --#elif defined(QT_QWS_CASSIOPEIA) -- handler = new QVrTPanelHandlerPrivate( mouseProtocol, mouseDev ); --#endif -- break; -- -- default: -- qDebug( "Mouse type %s unsupported", spec.latin1() ); -- } -- -- return handler; -+ return new QInputEventHandler( mouseProtocol, mouseDev ); - } - - #include "qwsmouse_qws.moc" ---- qt-2.3.10/src/kernel/qwsmouse_qws.h~ramses-touchscreen -+++ qt-2.3.10/src/kernel/qwsmouse_qws.h -@@ -1,5 +1,5 @@ - /**************************************************************************** --** $Id: qt/src/kernel/qwsmouse_qws.h 2.3.10 edited 2005-01-24 $ -+** $Id: qt/src/kernel/qwsmouse_qws.h 2.3.7 edited 2001-10-03 $ - ** - ** Definition of Qt/FB central server classes - ** -@@ -70,6 +70,7 @@ - virtual void clearCalibration(); - virtual void calibrate( QWSPointerCalibrationData * ); - virtual void getCalibration( QWSPointerCalibrationData * ); -+ virtual void setCalibration(int aa, int bb, int cc, int dd, int ee, int ff, int ss); - - protected: - void readCalibration(); diff --git a/packages/qte/qte-2.3.12/mnci.patch b/packages/qte/qte-2.3.12/mnci.patch deleted file mode 100644 index c2e0e079d9..0000000000 --- a/packages/qte/qte-2.3.12/mnci.patch +++ /dev/null @@ -1,125 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- qt-2.3.10/src/kernel/qgfxlinuxfb_qws.cpp~ramses.patch -+++ qt-2.3.10/src/kernel/qgfxlinuxfb_qws.cpp -@@ -249,20 +249,12 @@ - - static void writeTerm(const char* termctl, int sizeof_termctl) - { --#ifdef QT_QWS_DEVFS -- const char* tt[]={"/dev/vc/1","/dev/console","/dev/tty",0}; --#else -- const char* tt[]={"/dev/console","/dev/tty","/dev/tty0",0}; --#endif -- const char** dev=tt; -- while (*dev) { -- int tty=::open(*dev,O_WRONLY); -+qWarning("writeTerm"); -+ int tty=::open("/dev/vc/2", O_WRONLY); - if ( tty>=0 ) { - ::write(tty,termctl,sizeof_termctl); - ::close(tty); - } -- dev++; -- } - } - - /*! -@@ -275,6 +267,7 @@ - - bool QLinuxFbScreen::initDevice() - { -+qWarning("QLinuxFbScreen::initDevice"); - /* Setting up the VT parameters is done in qapplication_qws.cpp - const char termctl[]="\033[9;0]\033[?33l\033[?25l"; - writeTerm(termctl,sizeof(termctl)); */ -@@ -765,9 +758,12 @@ - } - */ - -+qWarning("QLinuxFbScreen::shutdownDevice"); -+/* - // Blankin' screen, blinkin' cursor! - const char termctl[] = "\033[9;15]\033[?33h\033[?25h\033[?0c"; - writeTerm(termctl,sizeof(termctl)); -+*/ - } - - /*! ---- qt-2.3.10/src/kernel/qapplication_qws.cpp~ramses.patch -+++ qt-2.3.10/src/kernel/qapplication_qws.cpp -@@ -1756,8 +1756,6 @@ - */ - if ( qws_daemon ) - { -- qWarning( "qt_init() - starting in daemon mode..." ); -- - int pid1 = fork(); - if ( pid1 == -1 ) - { -@@ -1791,7 +1789,6 @@ - } - if ( pid2 ) - { -- syslog( 4, "qt_init() [%d] - successfully entered daemon mode", pid2 ); - _exit( 0 ); // ok, second fork performed - } - } -@@ -1828,9 +1825,12 @@ - #if defined(_OS_LINUX_) - if ( qws_terminal_id ) - { -- qDebug( "qt_init() - terminal specification is '%d'.", qws_terminal_id ); - struct vt_stat console_stat; -+#ifdef QT_QWS_DEVFS -+ int console_fd = ::open( QString().sprintf( "/dev/vc/%d", qws_terminal_id ).latin1(), O_RDWR ); -+#else - int console_fd = ::open( QString().sprintf( "/dev/tty%d", qws_terminal_id ).latin1(), O_RDWR ); -+#endif - if ( console_fd == -1) - { - qWarning( "qt_init() - can't open tty: %s", strerror( errno ) ); -@@ -1927,7 +1927,11 @@ - { - qDebug( "qt_cleanup() - switching back to virtual terminal #%d", qws_terminal_old ); - -+#ifdef QT_QWS_DEVFS -+ int console_fd = ::open( "/dev/vc/0", O_RDWR ); -+#else - int console_fd = ::open( "/dev/tty0", O_RDWR ); -+#endif - if ( console_fd == -1) - { - qWarning( "qt_init() - can't open tty: %s", strerror( errno ) ); ---- qt-2.3.10/src/kernel/qwindowsystem_qws.cpp~ramses.patch -+++ qt-2.3.10/src/kernel/qwindowsystem_qws.cpp -@@ -1791,6 +1791,7 @@ - } - - #ifndef QT_NO_QWS_KEYBOARD -+#ifndef QT_QWS_RAMSES - static int keyUnicode(int keycode) - { - const QWSServer::KeyMap *km = QWSServer::keyMap(); -@@ -1803,6 +1804,7 @@ - return 0xffff; - } - #endif -+#endif - /*! - Send a key event. You can use this to send key events generated by - "virtual keyboards". -@@ -1845,8 +1847,10 @@ - - event.simpleData.unicode = - #ifndef QT_NO_QWS_KEYBOARD -+#ifndef QT_QWS_RAMSES - unicode < 0 ? keyUnicode(keycode) : - #endif -+#endif - unicode; - event.simpleData.keycode = keycode; - event.simpleData.modifiers = modifiers; diff --git a/packages/qte/qte-2.3.12/no-moc.patch b/packages/qte/qte-2.3.12/no-moc.patch deleted file mode 100644 index 0b2cdea6df..0000000000 --- a/packages/qte/qte-2.3.12/no-moc.patch +++ /dev/null @@ -1,39 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - -Index: qt-2.3.10-snapshot-20060120/Makefile -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/Makefile 2006-01-20 01:09:29.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/Makefile 2006-01-20 20:49:03.232410456 +0100 -@@ -8,7 +8,7 @@ - init: FORCE - @$(MAKE) QTDIR=`pwd` all - --all: symlinks src-moc src-mt sub-src sub-tools sub-tutorial sub-examples -+all: symlinks src-mt sub-src sub-tools sub-tutorial sub-examples - @echo - @echo "The Qt library is now built in ./lib" - @echo "The Qt examples are built in the directories in ./examples" -@@ -31,10 +31,10 @@ - symlinks: .buildopts - @cd include; rm -f q*.h; for i in ../src/*/q*.h ../src/3rdparty/*/q*.h ../extensions/*/src/q*.h; do ln -s $$i .; done; rm -f q*_p.h - --sub-src: src-moc src-mt .buildopts FORCE -+sub-src: src-mt .buildopts FORCE - cd src; $(MAKE) - --src-mt: src-moc .buildopts FORCE -+src-mt: .buildopts FORCE - $(MAKE) -f src-mt.mk - - sub-tutorial: sub-src FORCE -@@ -44,7 +44,6 @@ - cd examples; $(MAKE) - - clean: -- cd src/moc; $(MAKE) clean - cd src; $(MAKE) clean - -rm src/tmp/*.o src/tmp/*.a src/allmoc.cpp - -find src/3rdparty -name '*.o' | xargs rm diff --git a/packages/qte/qte-2.3.12/qiconview-speed.patch b/packages/qte/qte-2.3.12/qiconview-speed.patch deleted file mode 100644 index bac9b9705f..0000000000 --- a/packages/qte/qte-2.3.12/qiconview-speed.patch +++ /dev/null @@ -1,122 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- qt-2.3.10-snapshot-20050131/src/iconview/qiconview.cpp~qiconview-speed -+++ qt-2.3.10-snapshot-20050131/src/iconview/qiconview.cpp -@@ -225,6 +225,7 @@ - QIconView::SelectionMode selectionMode; - QIconViewItem *currentItem, *tmpCurrentItem, *highlightedItem, *startDragItem, *pressedItem, *selectAnchor; - QRect *rubber; -+ QPixmap *backBuffer; - QTimer *scrollTimer, *adjustTimer, *updateTimer, *inputTimer, - *fullRedrawTimer; - int rastX, rastY, spacing; -@@ -2268,6 +2269,7 @@ - d->currentItem = 0; - d->highlightedItem = 0; - d->rubber = 0; -+ d->backBuffer = 0; - d->scrollTimer = 0; - d->startDragItem = 0; - d->tmpCurrentItem = 0; -@@ -2416,6 +2418,8 @@ - delete item; - item = tmp; - } -+ delete d->backBuffer; -+ d->backBuffer = 0; - delete d->fm; - d->fm = 0; - #ifndef QT_NO_TOOLTIP -@@ -2882,6 +2886,48 @@ - } - - /*! -+ This function grabs all paintevents that otherwise would have been -+ processed by the QScrollView::viewportPaintEvent(). Here we use a -+ doublebuffer to reduce 'on-paint' flickering on QIconView -+ (and of course its childs). -+ -+ \sa QScrollView::viewportPaintEvent(), QIconView::drawContents() -+*/ -+ -+void QIconView::bufferedPaintEvent( QPaintEvent* pe ) -+{ -+ QWidget* vp = viewport(); -+ QRect r = pe->rect() & vp->rect(); -+ int ex = r.x() + contentsX(); -+ int ey = r.y() + contentsY(); -+ int ew = r.width(); -+ int eh = r.height(); -+ -+ if ( !d->backBuffer ) -+ d->backBuffer = new QPixmap(vp->size()); -+ if ( d->backBuffer->size() != vp->size() ) { -+ //Resize function (with hysteesis). Uses a good compromise between memory -+ //consumption and speed (number) of resizes. -+ float newWidth = (float)vp->width(); -+ float newHeight = (float)vp->height(); -+ if ( newWidth > d->backBuffer->width() || newHeight > d->backBuffer->height() ) -+ { -+ newWidth *= 1.1892; -+ newHeight *= 1.1892; -+ d->backBuffer->resize( (int)newWidth, (int)newHeight ); -+ } else if ( 1.5*newWidth < d->backBuffer->width() || 1.5*newHeight < d->backBuffer->height() ) -+ d->backBuffer->resize( (int)newWidth, (int)newHeight ); -+ } -+ -+ QPainter p; -+ p.begin(d->backBuffer, vp); -+ drawContentsOffset(&p, contentsX(), contentsY(), ex, ey, ew, eh); -+ p.end(); -+ bitBlt(vp, r.x(), r.y(), d->backBuffer, r.x(), r.y(), ew, eh); -+} -+ -+/*! -+ - \reimp - */ - -@@ -4939,7 +4985,7 @@ - if ( !d->rubber ) - drawDragShapes( d->oldDragPos ); - } -- viewportPaintEvent( (QPaintEvent*)e ); -+ bufferedPaintEvent ((QPaintEvent*)e ); - if ( d->dragging ) { - if ( !d->rubber ) - drawDragShapes( d->oldDragPos ); -@@ -5377,11 +5423,19 @@ - return; - - if ( item->d->container1 && d->firstContainer ) { -- item->d->container1->items.removeRef( item ); -+ //Special-case checking of the last item, since this may be -+ //called a few times for the same item. -+ if (item->d->container1->items.last() == item) -+ item->d->container1->items.removeLast(); -+ else -+ item->d->container1->items.removeRef( item ); - } - item->d->container1 = 0; - if ( item->d->container2 && d->firstContainer ) { -- item->d->container2->items.removeRef( item ); -+ if (item->d->container2->items.last() == item) -+ item->d->container2->items.removeLast(); -+ else -+ item->d->container2->items.removeRef( item ); - } - item->d->container2 = 0; - ---- qt-2.3.10-snapshot-20050131/src/iconview/qiconview.h~qiconview-speed -+++ qt-2.3.10-snapshot-20050131/src/iconview/qiconview.h -@@ -444,6 +444,7 @@ - virtual void contentsDropEvent( QDropEvent *e ); - #endif - -+ void bufferedPaintEvent( QPaintEvent* ); - virtual void resizeEvent( QResizeEvent* e ); - virtual void keyPressEvent( QKeyEvent *e ); - virtual void focusInEvent( QFocusEvent *e ); diff --git a/packages/qte/qte-2.3.12/qpe.patch b/packages/qte/qte-2.3.12/qpe.patch deleted file mode 100644 index af2e31664a..0000000000 --- a/packages/qte/qte-2.3.12/qpe.patch +++ /dev/null @@ -1,105 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- /dev/null -+++ qt-2.3.9-snapshot-20041211/src/tools/qconfig-qpe.h -@@ -0,0 +1,97 @@ -+/********************************************************************** -+** Copyright (C) 2000 Trolltech AS. All rights reserved. -+** -+** This file is part of Qtopia Environment. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+#ifndef QT_H -+#endif // QT_H -+ -+// Empty leaves all features enabled. See doc/html/features.html for choices. -+ -+// Note that disabling some features will produce a libqt that is not -+// compatible with other libqt builds. Such modifications are only -+// supported on Qt/Embedded where reducing the library size is important -+// and where the application-suite is often a fixed set. -+ -+#ifndef QT_DLL -+#define QT_DLL // Internal -+#endif -+ -+#define QT_NO_QWS_CURSOR -+#define QT_NO_QWS_MOUSE_AUTO -+#ifndef QT_NO_CODECS -+#define QT_NO_CODECS -+#endif -+#define QT_NO_UNICODETABLES -+//#define QT_NO_IMAGEIO_BMP -+#define QT_NO_IMAGEIO_PPM -+//#define QT_NO_ASYNC_IO -+//#define QT_NO_ASYNC_IMAGE_IO -+#define QT_NO_FREETYPE -+#define QT_NO_BDF -+//#define QT_NO_FONTDATABASE -+#define QT_NO_DRAGANDDROP -+//#define QT_NO_CLIPBOARD -+#define QT_NO_PROPERTIES -+#define QT_NO_NETWORKPROTOCOL -+ -+#define QT_NO_IMAGE_TEXT -+ -+//#define QT_NO_TOOLTIP -+#define QT_NO_COLORNAMES -+#define QT_NO_TRANSFORMATIONS -+#define QT_NO_TRANSLATION_BUILDER -+#define QT_NO_COMPLEXTEXT -+#define QT_NO_PRINTER -+#define QT_NO_PICTURE -+//#define QT_NO_ICONVIEW -+#define QT_NO_DIAL -+#define QT_NO_SIZEGRIP -+#define QT_NO_WORKSPACE -+//#define QT_NO_TABLE -+//#define QT_NO_ACTION -+//#define QT_NO_SETTINGS -+#define QT_NO_STYLE_POCKETPC -+#ifndef QT_NO_STYLE_AQUA -+# define QT_NO_STYLE_AQUA -+#endif -+#define QT_NO_STYLE_MOTIF -+#define QT_NO_STYLE_PLATINUM -+#define QT_NO_FILEDIALOG -+#define QT_NO_FONTDIALOG -+#define QT_NO_PRINTDIALOG -+#define QT_NO_COLORDIALOG -+#define QT_NO_INPUTDIALOG -+//#define QT_NO_MESSAGEBOX -+#define QT_NO_PROGRESSDIALOG -+//#define QT_NO_TABDIALOG -+#define QT_NO_WIZARD -+#define QT_NO_EFFECTS -+//#define QT_NO_COMPONENT -+#define QT_NO_DOM -+#define QT_NO_SEMIMODAL -+//#define QT_NO_PROGRESSBAR -+#define QT_NO_SPLITTER -+ -+//#define QT_NO_QWS_SAVEFONTS -+//#define QT_NO_QWS_PROPERTIES -+ -+#define QT_NO_QWS_BEOS_WM_STYLE -+#define QT_NO_QWS_KDE2_WM_STYLE -+#define QT_NO_QWS_KDE_WM_STYLE -+#define QT_NO_QWS_WINDOWS_WM_STYLE -+ diff --git a/packages/qte/qte-2.3.12/qt-visibility.patch b/packages/qte/qte-2.3.12/qt-visibility.patch deleted file mode 100644 index 2b552b293f..0000000000 --- a/packages/qte/qte-2.3.12/qt-visibility.patch +++ /dev/null @@ -1,499 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - -Index: qt-2.3.10-snapshot-20060120/configure -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/configure 2005-09-21 05:48:39.000000000 +0200 -+++ qt-2.3.10-snapshot-20060120/configure 2006-01-20 20:50:52.536793664 +0100 -@@ -450,6 +450,9 @@ - -tslib) - TSLIB=yes - ;; -+ -visibility-hidden) -+ VISIBILITY=YES -+ ;; - -no-g++-exceptions) - GPLUSPLUS_EXCEPTIONS=no - ;; -@@ -1356,6 +1359,9 @@ - -tslib ............. Enable TSlib (touchscreen library) mouse handler. - See http://arm.linux.org.uk - -+ -visibility-hidden . Use -fvisibility=hidden as default. This requires GCC 4.0 -+ or a special patched GCC to support the visibility attribute -+ - -no-g++-exceptions . Disable exceptions on platforms using the GNU C++ - compiler by using the -fno-exceptions flag. - -@@ -1424,6 +1430,10 @@ - QT_CXX="${QT_CXX} -DQT_QWS_TSLIB" - QT_LIBS="${QT_LIBS} -lts" - fi -+if [ "x$VISIBILITY=" = "xyes" ] -+then -+ QT_CXX="${QT_CXX} -DGCC_SUPPORTS_VISIBILITY -fvisibility=hidden" -+fi - if [ "x$THREAD" = "xyes" ] - then - cat >src-mt.mk <<EOF -Index: qt-2.3.10-snapshot-20060120/src/tools/qglobal.h -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/tools/qglobal.h 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/tools/qglobal.h 2006-01-20 20:50:52.537793512 +0100 -@@ -503,6 +503,12 @@ - #undef QT_DLL - #endif - -+#ifdef GCC_SUPPORTS_VISIBILITY -+#ifndef Q_EXPORT -+ #define Q_EXPORT __attribute__((visibility("default"))) -+#endif -+#endif -+ - #ifndef Q_EXPORT - #define Q_EXPORT - #endif -Index: qt-2.3.10-snapshot-20060120/src/widgets/qscrollview.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/widgets/qscrollview.cpp 2006-01-20 01:08:04.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/widgets/qscrollview.cpp 2006-01-20 20:50:52.553791080 +0100 -@@ -703,7 +703,7 @@ - The surrounding environment (or application, if there is no - environment, may set this. Requires Qt >= 2.3.8. - */ --bool qt_left_hand_scrollbars = FALSE; -+bool Q_EXPORT qt_left_hand_scrollbars = FALSE; - - /*! - Updates scrollbars - all possibilities considered. You should never -Index: qt-2.3.10-snapshot-20060120/src/Makefile.in -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/Makefile.in 2006-01-20 01:09:33.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/Makefile.in 2006-01-20 20:50:52.558790320 +0100 -@@ -652,7 +652,7 @@ - network/qsocket.h \ - network/qsocketdevice.h - echo '#include "kernel/qt.h"' >allmoc.cpp -- $(CXX) -E -DQT_MOC_CPP $(CXXFLAGS) $(INCPATH) >allmoc.h allmoc.cpp -+ $(CXX) -E -DQT_MOC_CPP -DQ_EXPORT="" $(CXXFLAGS) $(INCPATH) >allmoc.h allmoc.cpp - $(MOC) -o allmoc.cpp allmoc.h - perl -pi -e 's{"allmoc.h"}{"kernel/qt.h"}' allmoc.cpp - rm allmoc.h -Index: qt-2.3.10-snapshot-20060120/src/kernel/qcopchannel_qws.h -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qcopchannel_qws.h 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qcopchannel_qws.h 2006-01-20 20:50:52.559790168 +0100 -@@ -42,7 +42,7 @@ - class QCopChannelPrivate; - class QWSClient; - --class QCopChannel : public QObject -+class Q_EXPORT QCopChannel : public QObject - { - Q_OBJECT - public: -Index: qt-2.3.10-snapshot-20060120/src/kernel/qfontmanager_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qfontmanager_qws.cpp 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qfontmanager_qws.cpp 2006-01-20 20:50:52.559790168 +0100 -@@ -68,7 +68,7 @@ - return r; - } - --QFontManager * qt_fontmanager=0; -+QFontManager Q_EXPORT *qt_fontmanager=0; - - /*! - \class QFontManager qfontmanager_qws.h -Index: qt-2.3.10-snapshot-20060120/src/kernel/qgfx_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qgfx_qws.cpp 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qgfx_qws.cpp 2006-01-20 20:50:52.560790016 +0100 -@@ -38,10 +38,10 @@ - #include <stdlib.h> - - #ifndef QT_NO_QWS_CURSOR --bool qt_sw_cursor=false; --QScreenCursor * qt_screencursor=0; -+bool Q_EXPORT qt_sw_cursor=false; -+QScreenCursor Q_EXPORT * qt_screencursor=0; - #endif --QScreen * qt_screen=0; -+QScreen Q_EXPORT * qt_screen=0; - - extern bool qws_screen_is_interlaced; //### hack, from qapplication_qws.cpp - -Index: qt-2.3.10-snapshot-20060120/src/kernel/qwindowsystem_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qwindowsystem_qws.cpp 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qwindowsystem_qws.cpp 2006-01-20 20:50:52.562789712 +0100 -@@ -89,7 +89,7 @@ - - extern void qt_setMaxWindowRect(const QRect& r); - --QWSServer *qwsServer=0; -+QWSServer Q_EXPORT *qwsServer=0; - - #define MOUSE 0 - #define KEY 1 -Index: qt-2.3.10-snapshot-20060120/src/kernel/qwsdecoration_qws.h -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qwsdecoration_qws.h 2006-01-20 20:49:30.348288216 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qwsdecoration_qws.h 2006-01-20 20:50:52.562789712 +0100 -@@ -41,7 +41,7 @@ - /* - Implements decoration styles - */ --class QWSDecoration -+class Q_EXPORT QWSDecoration - { - public: - QWSDecoration() {} -Index: qt-2.3.10-snapshot-20060120/src/kernel/qwindowsystem_qws.h -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qwindowsystem_qws.h 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qwindowsystem_qws.h 2006-01-20 20:50:52.563789560 +0100 -@@ -69,7 +69,7 @@ - - struct QWSWindowData; - --class QWSScreenSaver -+class Q_EXPORT QWSScreenSaver - { - public: - virtual ~QWSScreenSaver(); -@@ -77,7 +77,7 @@ - virtual bool save(int level)=0; - }; - --class QWSWindow -+class Q_EXPORT QWSWindow - { - friend class QWSServer; - public: -@@ -171,9 +171,9 @@ - struct QWSCommandStruct; - - #ifndef QT_NO_QWS_MULTIPROCESS --class QWSServer : public QWSServerSocket -+class Q_EXPORT QWSServer : public QWSServerSocket - #else --class QWSServer : public QObject -+class Q_EXPORT QWSServer : public QObject - #endif - { - friend class QCopChannel; -@@ -503,7 +503,7 @@ - - - #ifndef QT_NO_QWS_IM --class QWSInputMethod : public QObject -+class Q_EXPORT QWSInputMethod : public QObject - { - public: - QWSInputMethod(); -@@ -527,7 +527,7 @@ - #endif - - #ifndef QT_NO_QWS_FSIM --class QWSGestureMethod : public QObject -+class Q_EXPORT QWSGestureMethod : public QObject - { - public: - QWSGestureMethod(); -@@ -575,7 +575,7 @@ - - typedef QMap<int, QWSCursor*> QWSCursorMap; - --class QWSClient : public QObject -+class Q_EXPORT QWSClient : public QObject - { - Q_OBJECT - public: -Index: qt-2.3.10-snapshot-20060120/src/kernel/qwsdefaultdecoration_qws.h -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qwsdefaultdecoration_qws.h 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qwsdefaultdecoration_qws.h 2006-01-20 20:50:52.563789560 +0100 -@@ -44,7 +44,7 @@ - - - --class QWSDefaultDecoration : public QWSDecoration -+class Q_EXPORT QWSDefaultDecoration : public QWSDecoration - { - public: - QWSDefaultDecoration(); -Index: qt-2.3.10-snapshot-20060120/src/kernel/qwscommand_qws.h -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qwscommand_qws.h 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qwscommand_qws.h 2006-01-20 20:50:52.564789408 +0100 -@@ -47,8 +47,8 @@ - * - *********************************************************************/ - #ifndef QT_NO_QWS_MULTIPROCESS --void qws_write_command( QWSSocket *socket, int type, char *simpleData, int simpleLen, char *rawData, int rawLen ); --bool qws_read_command( QWSSocket *socket, char *&simpleData, int &simpleLen, char *&rawData, int &rawLen, int &bytesRead ); -+void Q_EXPORT qws_write_command( QWSSocket *socket, int type, char *simpleData, int simpleLen, char *rawData, int rawLen ); -+bool Q_EXPORT qws_read_command( QWSSocket *socket, char *&simpleData, int &simpleLen, char *&rawData, int &rawLen, int &bytesRead ); - #endif - /********************************************************************* - * -@@ -57,7 +57,7 @@ - *********************************************************************/ - - --struct QWSProtocolItem -+struct Q_EXPORT QWSProtocolItem - { - // ctor - dtor - QWSProtocolItem( int t, int len, char *ptr ) : type( t ), -Index: qt-2.3.10-snapshot-20060120/src/kernel/qfont_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qfont_qws.cpp 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qfont_qws.cpp 2006-01-20 20:50:52.565789256 +0100 -@@ -152,7 +152,7 @@ - static QFontCache *fontCache = 0; // cache of loaded fonts - static QFontDict *fontDict = 0; // dict of all loaded fonts - --void qws_clearLoadedFonts() -+void Q_EXPORT qws_clearLoadedFonts() - { - if (!fontDict) - return; -Index: qt-2.3.10-snapshot-20060120/src/kernel/qwscursor_qws.h -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qwscursor_qws.h 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qwscursor_qws.h 2006-01-20 20:50:52.565789256 +0100 -@@ -37,7 +37,7 @@ - #include <qimage.h> - #endif // QT_H - --class QWSCursor : public Qt -+class Q_EXPORT QWSCursor : public Qt - { - public: - QWSCursor() {} -Index: qt-2.3.10-snapshot-20060120/src/kernel/qwsevent_qws.h -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qwsevent_qws.h 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qwsevent_qws.h 2006-01-20 20:50:52.566789104 +0100 -@@ -40,7 +40,7 @@ - - struct QWSMouseEvent; - --struct QWSEvent : QWSProtocolItem { -+struct Q_EXPORT QWSEvent : QWSProtocolItem { - - QWSEvent( int t, int len, char *ptr ) : QWSProtocolItem(t,len,ptr) {} - -@@ -71,7 +71,7 @@ - - //All events must start with windowID - --struct QWSConnectedEvent : QWSEvent { -+struct Q_EXPORT QWSConnectedEvent : QWSEvent { - QWSConnectedEvent() - : QWSEvent( QWSEvent::Connected, sizeof( simpleData ), - (char*)&simpleData ) {} -@@ -90,7 +90,7 @@ - char *display; - }; - --struct QWSMaxWindowRectEvent : QWSEvent { -+struct Q_EXPORT QWSMaxWindowRectEvent : QWSEvent { - QWSMaxWindowRectEvent() - : QWSEvent( MaxWindowRect, sizeof( simpleData ), (char*)&simpleData ) { } - struct SimpleData { -@@ -99,7 +99,7 @@ - } simpleData; - }; - --struct QWSMouseEvent : QWSEvent { -+struct Q_EXPORT QWSMouseEvent : QWSEvent { - QWSMouseEvent() - : QWSEvent( QWSEvent::Mouse, sizeof( simpleData ), - (char*)&simpleData ) {} -@@ -110,7 +110,7 @@ - } simpleData; - }; - --struct QWSFocusEvent : QWSEvent { -+struct Q_EXPORT QWSFocusEvent : QWSEvent { - QWSFocusEvent() - : QWSEvent( QWSEvent::Focus, sizeof( simpleData ), (char*)&simpleData ) - { memset((char*)&simpleData,0,sizeof(simpleData)); } -@@ -120,7 +120,7 @@ - } simpleData; - }; - --struct QWSKeyEvent: QWSEvent { -+struct Q_EXPORT QWSKeyEvent: QWSEvent { - QWSKeyEvent() - : QWSEvent( QWSEvent::Key, sizeof( simpleData ), - (char*)&simpleData ) -@@ -136,7 +136,7 @@ - }; - - --struct QWSCreationEvent : QWSEvent { -+struct Q_EXPORT QWSCreationEvent : QWSEvent { - QWSCreationEvent() - : QWSEvent( QWSEvent::Creation, sizeof( simpleData ), - (char*)&simpleData ) {} -@@ -146,7 +146,7 @@ - }; - - #ifndef QT_NO_QWS_PROPERTIES --struct QWSPropertyNotifyEvent : QWSEvent { -+struct Q_EXPORT QWSPropertyNotifyEvent : QWSEvent { - QWSPropertyNotifyEvent() - : QWSEvent( QWSEvent::PropertyNotify, sizeof( simpleData ), - (char*)&simpleData ) {} -@@ -162,7 +162,7 @@ - }; - #endif - --struct QWSSelectionClearEvent : QWSEvent { -+struct Q_EXPORT QWSSelectionClearEvent : QWSEvent { - QWSSelectionClearEvent() - : QWSEvent( QWSEvent::SelectionClear, sizeof( simpleData ), - (char*)&simpleData ) {} -@@ -171,7 +171,7 @@ - } simpleData; - }; - --struct QWSSelectionRequestEvent : QWSEvent { -+struct Q_EXPORT QWSSelectionRequestEvent : QWSEvent { - QWSSelectionRequestEvent() - : QWSEvent( QWSEvent::SelectionRequest, sizeof( simpleData ), - (char*)&simpleData ) {} -@@ -184,7 +184,7 @@ - } simpleData; - }; - --struct QWSSelectionNotifyEvent : QWSEvent { -+struct Q_EXPORT QWSSelectionNotifyEvent : QWSEvent { - QWSSelectionNotifyEvent() - : QWSEvent( QWSEvent::SelectionNotify, sizeof( simpleData ), - (char*)&simpleData ) {} -@@ -198,7 +198,7 @@ - - //complex events: - --struct QWSRegionModifiedEvent : QWSEvent { -+struct Q_EXPORT QWSRegionModifiedEvent : QWSEvent { - QWSRegionModifiedEvent() - : QWSEvent( QWSEvent::RegionModified, sizeof( simpleData ), - (char*)&simpleData ) -@@ -218,7 +218,7 @@ - QRect *rectangles; - }; - #ifndef QT_NO_QWS_PROPERTIES --struct QWSPropertyReplyEvent : QWSEvent { -+struct Q_EXPORT QWSPropertyReplyEvent : QWSEvent { - QWSPropertyReplyEvent() - : QWSEvent( QWSEvent::PropertyReply, sizeof( simpleData ), - (char*)&simpleData ) {} -@@ -238,7 +238,7 @@ - #endif //QT_NO_QWS_PROPERTIES - - #ifndef QT_NO_COP --struct QWSQCopMessageEvent : QWSEvent { -+struct Q_EXPORT QWSQCopMessageEvent : QWSEvent { - QWSQCopMessageEvent() - : QWSEvent( QWSEvent::QCopMessage, sizeof( simpleData ), - (char*)&simpleData ) -@@ -268,7 +268,7 @@ - - #endif - --struct QWSWindowOperationEvent : QWSEvent { -+struct Q_EXPORT QWSWindowOperationEvent : QWSEvent { - QWSWindowOperationEvent() - : QWSEvent( WindowOperation, sizeof( simpleData ), (char*)&simpleData ) { } - -@@ -280,7 +280,7 @@ - }; - - #ifndef QT_NO_QWS_IM --struct QWSIMEvent : QWSEvent { -+struct Q_EXPORT QWSIMEvent : QWSEvent { - QWSIMEvent() - : QWSEvent( IMEvent, sizeof( simpleData ), (char*)&simpleData ) { } - -Index: qt-2.3.10-snapshot-20060120/src/kernel/qwsmanager_qws.h -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qwsmanager_qws.h 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qwsmanager_qws.h 2006-01-20 20:50:52.566789104 +0100 -@@ -48,7 +48,7 @@ - class QWSButton; - class QWSManager; - --class QWSManager : public QObject -+class Q_EXPORT QWSManager : public QObject - { - Q_OBJECT - -Index: qt-2.3.10-snapshot-20060120/src/kernel/qwsmouse_qws.h -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qwsmouse_qws.h 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qwsmouse_qws.h 2006-01-20 20:50:52.566789104 +0100 -@@ -38,7 +38,7 @@ - #include <qpointarray.h> - #endif // QT_H - --class QWSPointerCalibrationData -+class Q_EXPORT QWSPointerCalibrationData - { - public: - enum Location { TopLeft = 0, BottomLeft = 1, BottomRight = 2, TopRight = 3, -@@ -47,7 +47,7 @@ - QPoint screenPoints[5]; - }; - --class QWSMouseHandler : public QObject { -+class Q_EXPORT QWSMouseHandler : public QObject { - Q_OBJECT - public: - QWSMouseHandler(); -Index: qt-2.3.10-snapshot-20060120/src/kernel/qwsproperty_qws.h -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qwsproperty_qws.h 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qwsproperty_qws.h 2006-01-20 20:50:52.598784240 +0100 -@@ -47,7 +47,7 @@ - - class QWSPropertyManagerData; - --class QWSPropertyManager -+class Q_EXPORT QWSPropertyManager - { - public: - enum Mode { -Index: qt-2.3.10-snapshot-20060120/src/kernel/qlayoutengine.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qlayoutengine.cpp 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qlayoutengine.cpp 2006-01-20 20:50:52.598784240 +0100 -@@ -70,7 +70,7 @@ - pos and space give the interval (relative to parentWidget topLeft.) - */ - --void qGeomCalc( QArray<QLayoutStruct> &chain, int start, int count, int pos, -+void Q_EXPORT qGeomCalc( QArray<QLayoutStruct> &chain, int start, int count, int pos, - int space, int spacer ) - { - typedef int fixed; -Index: qt-2.3.10-snapshot-20060120/src/kernel/qfontmanager_qws.h -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qfontmanager_qws.h 2006-01-20 01:08:03.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qfontmanager_qws.h 2006-01-20 20:50:52.610782416 +0100 -@@ -84,7 +84,7 @@ - // e.g. Truetype Times, 10 point. There's only one of these though; - // we want to share generated glyphs - --class QRenderedFont { -+class Q_EXPORT QRenderedFont { - - public: - diff --git a/packages/qte/qte-2.3.12/qtabbar.patch b/packages/qte/qte-2.3.12/qtabbar.patch deleted file mode 100644 index f1697421f5..0000000000 --- a/packages/qte/qte-2.3.12/qtabbar.patch +++ /dev/null @@ -1,41 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - -Index: qt-2.3.10-snapshot-20060120/src/widgets/qtabbar.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/widgets/qtabbar.cpp 2006-01-20 01:08:04.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/widgets/qtabbar.cpp 2006-01-20 21:03:47.293012816 +0100 -@@ -260,7 +260,6 @@ - lstatic->insert( index, newTab ); - - layoutTabs(); -- updateArrowButtons(); - makeVisible( tab( currentTab() ) ); - - #ifndef QT_NO_ACCEL -@@ -282,7 +281,6 @@ - l->remove( t ); - lstatic->remove( t ); - layoutTabs(); -- updateArrowButtons(); - makeVisible( tab( currentTab() ) ); - update(); - } -@@ -887,6 +885,7 @@ - } - for ( t = lstatic->first(); t; t = lstatic->next() ) - t->r.setHeight( r.height() ); -+ updateArrowButtons(); - } - - /*! -@@ -978,7 +977,6 @@ - d->leftB->setGeometry( width() - 2*arrowWidth, 0, arrowWidth, height() ); - #endif - layoutTabs(); -- updateArrowButtons(); - makeVisible( tab( currentTab() )); - } - diff --git a/packages/qte/qte-2.3.12/qte-fix-iconsize.patch b/packages/qte/qte-2.3.12/qte-fix-iconsize.patch deleted file mode 100644 index 2b44ea69c0..0000000000 --- a/packages/qte/qte-2.3.12/qte-fix-iconsize.patch +++ /dev/null @@ -1,105 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - -Index: qt-2.3.10-snapshot-20060120/src/widgets/qpopupmenu.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/widgets/qpopupmenu.cpp 2006-01-20 01:08:04.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/widgets/qpopupmenu.cpp 2006-01-20 21:06:03.060373040 +0100 -@@ -820,7 +820,7 @@ - mi->custom()->setFont( font() ); - if ( mi->iconSet() != 0) - maxPMWidth = QMAX( maxPMWidth, -- mi->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width() + 4 ); -+ mi->iconSet()->pixmap().width() + 4 ); - } - - int dh = QApplication::desktop()->height(); -Index: qt-2.3.10-snapshot-20060120/src/widgets/qtabbar.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/widgets/qtabbar.cpp 2006-01-20 21:03:47.293012816 +0100 -+++ qt-2.3.10-snapshot-20060120/src/widgets/qtabbar.cpp 2006-01-20 21:06:03.061372888 +0100 -@@ -412,8 +412,8 @@ - int iw = 0; - int ih = 0; - if ( t->iconset != 0 ) { -- iw = t->iconset->pixmap( QIconSet::Small, QIconSet::Normal ).width(); -- ih = t->iconset->pixmap( QIconSet::Small, QIconSet::Normal ).height(); -+ iw = t->iconset->pixmap().width(); -+ ih = t->iconset->pixmap().height(); - if (!t->label.isEmpty()) - iw +=2; - } -@@ -440,7 +440,11 @@ - ? QIconSet::Normal : QIconSet::Disabled; - if ( mode == QIconSet::Normal && has_focus ) - mode = QIconSet::Active; -- QPixmap pixmap = t->iconset->pixmap( QIconSet::Small, mode ); -+ QPixmap pixmap; -+ if ( mode == QIconSet::Disabled ) -+ pixmap = t->iconset->pixmap( QIconSet::Automatic, QIconSet::Disabled ); -+ else -+ pixmap = t->iconset->pixmap(); - int pixw = pixmap.width(); - int pixh = pixmap.height(); - r.setLeft( r.left() + pixw + 2 ); -@@ -869,8 +873,8 @@ - int iw = 0; - int ih = 0; - if ( t->iconset != 0 ) { -- iw = t->iconset->pixmap( QIconSet::Small, QIconSet::Normal ).width(); -- ih = t->iconset->pixmap( QIconSet::Small, QIconSet::Normal ).height(); -+ iw = t->iconset->pixmap().width(); -+ ih = t->iconset->pixmap().height(); - if (!t->label.isNull()) - iw +=2; - } -@@ -914,8 +918,8 @@ - int iw = 0; - int ih = 0; - if ( t->iconset != 0 ) { -- iw = t->iconset->pixmap( QIconSet::Small, QIconSet::Normal ).width(); -- ih = t->iconset->pixmap( QIconSet::Small, QIconSet::Normal ).height(); -+ iw = t->iconset->pixmap().width(); -+ ih = t->iconset->pixmap().height(); - if (!t->label.isEmpty()) - iw +=2; - } -@@ -947,8 +951,8 @@ - int iw = 0; - int ih = 0; - if ( t->iconset != 0 ) { -- iw = t->iconset->pixmap( QIconSet::Small, QIconSet::Normal ).width(); -- ih = t->iconset->pixmap( QIconSet::Small, QIconSet::Normal ).height(); -+ iw = t->iconset->pixmap().width(); -+ ih = t->iconset->pixmap().height(); - if (!t->label.isEmpty()) - iw +=2; - } -Index: qt-2.3.10-snapshot-20060120/src/widgets/qwindowsstyle.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/widgets/qwindowsstyle.cpp 2006-01-20 01:08:04.000000000 +0100 -+++ qt-2.3.10-snapshot-20060120/src/widgets/qwindowsstyle.cpp 2006-01-20 21:06:03.062372736 +0100 -@@ -1182,7 +1182,7 @@ - h = fm.height() + 2*motifItemVMargin + 2*motifItemFrame; - - if ( !mi->isSeparator() && mi->iconSet() != 0 ) { -- h = QMAX( h, mi->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height() + 2*motifItemFrame ); -+ h = QMAX( h, mi->iconSet()->pixmap().height() + 2*motifItemFrame ); - } - if ( mi->custom() ) - h = QMAX( h, mi->custom()->sizeHint().height() + 2*motifItemVMargin + 2*motifItemFrame ); -@@ -1246,7 +1246,11 @@ - QIconSet::Mode mode = dis ? QIconSet::Disabled : QIconSet::Normal; - if (act && !dis ) - mode = QIconSet::Active; -- QPixmap pixmap = mi->iconSet()->pixmap( QIconSet::Small, mode ); -+ QPixmap pixmap; -+ if ( mode == QIconSet::Disabled ) -+ pixmap = mi->iconSet()->pixmap( QIconSet::Automatic, QIconSet::Disabled ); -+ else -+ pixmap = mi->iconSet()->pixmap(); - int pixw = pixmap.width(); - int pixh = pixmap.height(); - if ( act && !dis ) { diff --git a/packages/qte/qte-2.3.12/sharp_char.h b/packages/qte/qte-2.3.12/sharp_char.h deleted file mode 100644 index a70f5f690e..0000000000 --- a/packages/qte/qte-2.3.12/sharp_char.h +++ /dev/null @@ -1,309 +0,0 @@ -/* - * linux/include/asm/sharp_char.h - * - * sharp drivers definitions (SHARP) - * - * Copyright (C) 2001 SHARP - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * Change Log - * 12-Dec-2002 Sharp Corporation for Poodle and Corgi - */ - -#ifndef __ASM_SHARP_CHAR_H_INCLUDED -#define __ASM_SHARP_CHAR_H_INCLUDED - -/* - * If SHARPCHAR_USE_MISCDEV defined , misc driver architecture used instead of sharp_char - */ - -#define SHARPCHAR_USE_MISCDEV - -/* - * devices defines... - */ - -#ifndef SHARP_DEV_MAJOR -#define SHARP_DEV_MAJOR 11 -#endif - -#ifndef SHARP_DEV_MINOR_START -#define SHARP_DEV_MINOR_START 210 -#endif - -#define SHARP_DEV_MINOR_MAX 4 /* defines last minor number of SHARP device */ - -#define SHARP_LED_MINOR (SHARP_DEV_MINOR_START+0) -#define SHARP_BUZZER_MINOR (SHARP_DEV_MINOR_START+1) -#define SHARP_GSM_MINOR (SHARP_DEV_MINOR_START+2) -#define SHARP_AUDIOCTL_MINOR (SHARP_DEV_MINOR_START+3) -#define SHARP_KBDCTL_MINOR (SHARP_DEV_MINOR_START+4) - -/* - * ioctl defines... - */ - -#define SHARP_DEV_IOCTL_COMMAND_START 0x5680 - -/* --- for SHARP_LED device --- */ -#define SHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) -#define SHARP_LED_GETSTATUS (SHARP_LED_IOCTL_START) -#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1) -#define SHARP_LED_ISUPPORTED (SHARP_LED_IOCTL_START+2) - -typedef struct sharp_led_status { - int which; /* select which LED status is wanted. */ - int status; /* set new led status if you call SHARP_LED_SETSTATUS */ -} sharp_led_status; - -#define SHARP_LED_WHICH_MAX 15 /* last number of LED */ - -/* parameters for 'which' member */ -#define SHARP_LED_PDA 0 /* PDA status */ -#define SHARP_LED_DALARM 1 /* daily alarm */ -#define SHARP_LED_SALARM 2 /* schedule alarm */ -#define SHARP_LED_BATTERY 3 /* main battery status */ -#define SHARP_LED_ACSTATUS 4 /* AC line status */ -#define SHARP_LED_CHARGER 5 /* charger status */ -#define SHARP_LED_PHONE_RSSI 6 /* phone status (RSSI...) */ -#define SHARP_LED_PHONE_DIAL 7 /* phone status (dialing...) */ -#define SHARP_LED_PHONE_IN 8 /* phone status (incoming..) */ -#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */ -#define SHARP_LED_MAIL_SEND 10 /* mail status (sending...) */ -#define SHARP_LED_MAIL_QUEUE 11 /* mail to send is in queue */ -#define SHARP_LED_COLLIE_0 12 /* 1st pri. battery LED control */ -#define SHARP_LED_COLLIE_1 13 /* 1st pri. mail LED control */ -#define SHARP_LED_COMM 14 /* communication status */ -#define SHARP_LED_BROWSER 15 /* WWW browser status */ - -/* parameters for 'status' member */ -#define LED_PDA_RUNNING 0 /* for SHARP_LED_RUN */ -#define LED_PDA_SUSPENDED 1 /* for SHARP_LED_RUN */ -#define LED_PDA_OFF 2 /* for SHARP_LED_RUN */ -#define LED_PDA_ERROR 3 /* for SHARP_LED_RUN */ - -#define LED_DALARM_OFF 0 /* for SHARP_LED_DALARM */ -#define LED_DALARM_ON 1 /* for SHARP_LED_DALARM */ - -#define LED_SALARM_OFF 0 /* for SHARP_LED_SALARM */ -#define LED_SALARM_ON 1 /* for SHARP_LED_SALARM */ - -#define LED_BATTERY_GOOD 0 /* for SHARP_LED_BATTERY */ -#define LED_BATTERY_LOW 1 /* for SHARP_LED_BATTERY */ -#define LED_BATTERY_VERY_LOW 2 /* for SHARP_LED_BATTERY */ -#define LED_BATTERY_CRITICAL 3 /* for SHARP_LED_BATTERY */ - -#define LED_CHARGER_OFF 0 /* for SHARP_LED_CHARGER */ -#define LED_CHARGER_CHARGING 1 /* for SHARP_LED_CHARGER */ -#define LED_CHARGER_ERROR 2 /* for SHARP_LED_CHARGER */ -#define LED_CHARGER_FLASH 3 - -#define LED_AC_NOT_CONNECTED 0 /* for SHARP_LED_ACSTATUS */ -#define LED_AC_CONNECTED 1 /* for SHARP_LED_ACSTATUS */ - -#define LED_RSSI_OUT 0 /* for SHARP_LED_PHONE_RSSI */ -#define LED_RSSI_IN 1 /* for SHARP_LED_PHONE_RSSI */ - -#define LED_DIAL_OFF 0 /* for SHARP_LED_PHONE_DIAL */ -#define LED_DIAL_DIALING 1 /* for SHARP_LED_PHONE_DIAL */ -#define LED_DIAL_HOLDING 2 /* for SHARP_LED_PHONE_DIAL */ - -#define LED_PHONE_WAITING 0 /* for SHARP_LED_PHONE_IN */ -#define LED_PHONE_INCOMING 1 /* for SHARP_LED_PHONE_IN */ - -#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */ -#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */ -#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */ - -#define LED_SENDMAIL_OFF 0 /* for SHARP_LED_MAIL_SEND */ -#define LED_SENDMAIL_SENDING 1 /* for SHARP_LED_MAIL_SEND */ -#define LED_SENDMAIL_ERROR 2 /* for SHARP_LED_MAIL_SEND */ - -#define LED_MAILQUEUE_NOUNREAD 0 /* for SHARP_LED_MAIL_QUEUE */ -#define LED_MAILQUEUE_NEWMAIL 1 /* for SHARP_LED_MAIL_QUEUE */ -#define LED_MAILQUEUE_UNREAD 2 /* for SHARP_LED_MAIL_QUEUE */ - -#define LED_COLLIE_0_DEFAULT 0 /* for SHARP_LED_COLLIE_0 */ -#define LED_COLLIE_0_OFF 1 /* for SHARP_LED_COLLIE_0 */ -#define LED_COLLIE_0_ON 2 /* for SHARP_LED_COLLIE_0 */ -#define LED_COLLIE_0_FASTBLINK 3 /* for SHARP_LED_COLLIE_0 */ -#define LED_COLLIE_0_SLOWBLINK 4 /* for SHARP_LED_COLLIE_0 */ - -#define LED_COLLIE_1_DEFAULT 0 /* for SHARP_LED_COLLIE_1 */ -#define LED_COLLIE_1_OFF 1 /* for SHARP_LED_COLLIE_1 */ -#define LED_COLLIE_1_ON 2 /* for SHARP_LED_COLLIE_1 */ -#define LED_COLLIE_1_FLASHON 3 /* for SHARP_LED_COLLIE_1 */ -#define LED_COLLIE_1_FLASHOFF 4 /* for SHARP_LED_COLLIE_1 */ -#define LED_COLLIE_1_VFSTBLINK 5 /* for SHARP_LED_COLLIE_1 */ -#define LED_COLLIE_1_FASTBLINK 6 /* for SHARP_LED_COLLIE_1 */ -#define LED_COLLIE_1_NORMBLINK 7 /* for SHARP_LED_COLLIE_1 */ -#define LED_COLLIE_1_SLOWBLINK 8 /* for SHARP_LED_COLLIE_1 */ -#define LED_COLLIE_1_SOFTBLINK 9 /* for SHARP_LED_COLLIE_1 */ -#define LED_COLLIE_1_SOFTFLASH 10 /* for SHARP_LED_COLLIE_1 */ - -#define LED_COMM_OFFLINE 0 /* for SHARP_LED_COMM */ -#define LED_COMM_ONLINE 1 /* for SHARP_LED_COMM */ -#define LED_COMM_ERROR 2 /* for SHARP_LED_COMM */ - -#define LED_BROWSER_OFFLINE 0 /* for SHARP_LED_BROWSER */ -#define LED_BROWSER_ONLINE 1 /* for SHARP_LED_BROWSER */ -#define LED_BROWSER_ERROR 2 /* for SHARP_LED_BROWSER */ - - -/* --- for SHARP_BUZZER device --- */ -#define SHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) -#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) -#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1) -#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2) -#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3) -#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4) -#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5) -#define SHARP_BUZZER_SET_BUFFER (SHARP_BUZZER_IOCTL_START+6) - -typedef struct sharp_buzzer_status { /* this struct is used for setvolume/getvolume */ - int which; /* select which LED status is wanted. */ - int volume; /* set new buzzer volume if you call SHARP_BUZZER_SETVOLUME */ - int mute; /* set 1 to MUTE if you call SHARP_BUZZER_SETMUTE */ -} sharp_buzzer_status; - -#define SHARP_BUZ_WHICH_MAX 14 /* last number of buzzer */ - -#define SHARP_BUZ_ALL_SOUNDS -1 /* for setting volumes of ALL sounds at a time */ - -#define SHARP_BUZ_WRITESOUND 0 /* for sound datas through 'write' calls */ -#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ -#define SHARP_BUZ_KEYSOUND 2 /* key sound */ -#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */ -#define SHARP_PDA_WARNSOUND 4 /* warning occurred */ -#define SHARP_PDA_ERRORSOUND 5 /* error occurred */ -#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */ -#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */ -#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */ -#define SHARP_PDA_APPSTART 9 /* application start */ -#define SHARP_PDA_APPQUIT 10 /* application ends */ -#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ -#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */ -#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */ -#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */ - -#define SHARP_BUZ_VOLUME_OFF 0 -#define SHARP_BUZ_VOLUME_LOW 33 -#define SHARP_BUZ_VOLUME_MEDIUM 67 -#define SHARP_BUZ_VOLUME_HIGH 100 /* currentry , this is the maximum ... */ -#define SHARP_BUZ_VOLUME_MAX (SHARP_BUZ_VOLUME_HIGH) - -/* --- for SHARP_GSM device --- */ -#define SHARP_GSM_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) -#define SHARP_GSM_GETEXTSTATUS (SHARP_GSM_IOCTL_START+16) -#define SHARP_GSM_INFO_TELL_MODE (SHARP_GSM_IOCTL_START+17) -#define SHARP_IRIS_GETSYNCSTATUS (SHARP_GSM_IOCTL_START+18) -#define SHARP_IRIS_RECHECKDEVICE (SHARP_GSM_IOCTL_START+19) - - -#define GSM_PHONE_NO_POWER 0 /* for SHARP_GSM_INFO_TELL_MODE */ -#define GSM_PHONE_NO_CONNECTION 1 /* for SHARP_GSM_INFO_TELL_MODE */ -#define GSM_PHONE_IN_ANALOG_MODE 2 /* for SHARP_GSM_INFO_TELL_MODE */ -#define GSM_PHONE_IN_DATA_MODE 3 /* for SHARP_GSM_INFO_TELL_MODE */ - -#define IRIS_AUDIO_EXT_IS_NONE 0 -#define IRIS_AUDIO_EXT_IS_HEADPHONEMIC 1 -#define IRIS_AUDIO_EXT_IS_EXTSPEAKER 2 - -typedef struct sharp_gsmext_status { - int carkit; /* be set as 1 , if car-kit is connected */ - int headphone_mic; /* be set as 1 , if head-phone-microphone is inserted */ - int external_sp; /* be set as 1 , if external-speaker is inserted */ -} sharp_gsmext_status; - -typedef struct sharp_irisext_status { /* for SHARP_IRIS_GETSYNCSTATUS */ - int usb; - int uart; - int carkit; -} sharp_irisext_status; - -/* --- for SHARP_AUDIOCTL device --- */ -#define SHARP_AUDIOCTL_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) -#define SHARP_AUDIOCTL_ARCH_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START+0x10) -#define SHARP_IRIS_AUFIL_GETVAL (SHARP_AUDIOCTL_ARCH_IOCTL_START+0) -#define SHARP_IRIS_AUFIL_SETVAL (SHARP_AUDIOCTL_ARCH_IOCTL_START+1) -#define SHARP_IRIS_AMP_EXT_ON (SHARP_AUDIOCTL_ARCH_IOCTL_START+2) -#define SHARP_IRIS_AMP_EXT_OFF (SHARP_AUDIOCTL_ARCH_IOCTL_START+3) - - -#define SHARP_IRIS_AUFIL_FILTERON 0x01 /* Iris AudioCtl Specific. Enable Audio Filter */ - -/* --- for SHARP_AUDIOCTL device --- */ -#define SHARP_KBDCTL_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) -#define SHARP_KBDCTL_GETMODIFSTAT (SHARP_KBDCTL_IOCTL_START+0) -#define SHARP_KBDCTL_TOGGLEMODIFSTAT (SHARP_KBDCTL_IOCTL_START+1) -#define SHARP_KBDCTL_SETHOLDTH (SHARP_KBDCTL_IOCTL_START+2) -#define SHARP_KBDCTL_SETHOLDTH_GR (SHARP_KBDCTL_IOCTL_START+3) -#define SHARP_KBDCTL_HOLDINFO_SETHD (SHARP_KBDCTL_IOCTL_START+4) -#define SHARP_KBDCTL_HOLDINFO_SETSL (SHARP_KBDCTL_IOCTL_START+5) -#define SHARP_KBDCTL_HOLDINFO_DELHD (SHARP_KBDCTL_IOCTL_START+6) -#define SHARP_KBDCTL_HOLDINFO_DELSL (SHARP_KBDCTL_IOCTL_START+7) -#define SHARP_KBDCTL_HOLDINFO_RESTHD (SHARP_KBDCTL_IOCTL_START+8) -#define SHARP_KBDCTL_HOLDINFO_RESTSL (SHARP_KBDCTL_IOCTL_START+9) -#define SHARP_KBDCTL_HOLDINFO_RESTFULL (SHARP_KBDCTL_IOCTL_START+10) -#define IRIS_KBDCTL_ENABLEKEYBOARD (SHARP_KBDCTL_IOCTL_START+16) -#define IRIS_KBDCTL_DISABLEKEYBOARD (SHARP_KBDCTL_IOCTL_START+17) -#define SHARP_KBDCTL_SENDKEY (SHARP_KBDCTL_IOCTL_START+18) - -typedef struct sharp_kbdctl_modifstat { - int which; - int stat; -} sharp_kbdctl_modifstat; - -typedef struct sharp_kbdctl_holdstat { - int group; - int timeout; -} sharp_kbdctl_holdstat; - -typedef struct sharp_kbdctl_holdcustom { - int normal_hardcode; - int normal_slcode; - int hold_slcode; -} sharp_kbdctl_holdcustom; - -#define SHARP_EXTMODIF_2ND 0x01 -#define SHARP_EXTMODIF_CAPS 0x02 -#define SHARP_EXTMODIF_NUMLOCK 0x03 - -#define HOLDKEY_GROUP_NORMAL 0 -#define HOLDKEY_GROUP_POWER 1 - - -/* --- for AUDIO & REMOCON device --- */ -#define HPJACK_STATE_UNDETECT (-1) -#define HPJACK_STATE_NONE (0) -#define HPJACK_STATE_HEADPHONE (1) -#define HPJACK_STATE_REMOCON (2) - - -#endif /* __ASM_SHARP_CHAR_H_INCLUDED */ - - -//#define EXTERNAL_IO_BASE01 0xF8000000 -//#define EXTEND_GPIO_RED_LED (1<<4) -//#define EXTEND_GPIO_GREEN_LED (1<<5) -//unsigned short * pwEGPIO1 ; -//unsigned short gwExtendGpio1; -// pwEGPIO1 = (unsigned short *) EXTERNAL_IO_BASE01; - - - - - - - - - diff --git a/packages/qte/qte-2.3.12/simpad-defaultkbd.patch b/packages/qte/qte-2.3.12/simpad-defaultkbd.patch deleted file mode 100644 index 0bfff37ec4..0000000000 --- a/packages/qte/qte-2.3.12/simpad-defaultkbd.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: qt-2.3.10-snapshot-20060120/src/kernel/qwindowsystem_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qwindowsystem_qws.cpp 2006-01-20 21:03:08.482912848 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qwindowsystem_qws.cpp 2006-01-20 21:11:59.410199632 +0100 -@@ -2922,7 +2922,7 @@ - { - QString keyboards = getenv("QWS_KEYBOARD"); - if ( keyboards.isEmpty() ) { --#if defined( QT_QWS_CASSIOPEIA ) -+#if defined( QT_QWS_CASSIOPEIA ) || defined( QT_QWS_SIMPAD ) - keyboards = "Buttons"; - #elif !defined(QT_NO_QWS_VFB) - extern bool qvfbEnabled; diff --git a/packages/qte/qte-2.3.12/simpad.patch b/packages/qte/qte-2.3.12/simpad.patch deleted file mode 100644 index bf4367c319..0000000000 --- a/packages/qte/qte-2.3.12/simpad.patch +++ /dev/null @@ -1,392 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - -Index: qt-2.3.10-snapshot-20060120/src/kernel/qkeyboard_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qkeyboard_qws.cpp 2006-01-20 21:30:31.073201168 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qkeyboard_qws.cpp 2006-01-20 21:36:45.024351952 +0100 -@@ -37,6 +37,7 @@ - #include <qapplication.h> - #include <qsocketnotifier.h> - #include <qnamespace.h> -+#include <qdatetime.h> - #include <qtimer.h> - - #include <stdlib.h> -@@ -80,6 +81,60 @@ - #include <sys/vt.h> - #endif - -+/* -+ * SIMpad switches handler -+ * (C) 2003-2005 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> -+ */ -+ -+ -+ -+#include <linux/switches.h> -+#define SIMPAD_SWITCHES_DEVICE "/dev/misc/switches" -+ -+// switches from left top to right down over the SIMpad surface -+ -+#define SIMPAD_SWITCH_POWER 0x02 -+#define SIMPAD_SWITCH_UPPER 0x10 -+#define SIMPAD_SWITCH_UP 0x20 -+#define SIMPAD_SWITCH_DOWN 0x40 -+#define SIMPAD_SWITCH_LEFT 0x80 -+#define SIMPAD_SWITCH_RIGHT 0x100 -+#define SIMPAD_SWITCH_LOWER 0x8 -+ -+class QWSsimpadButtonsHandler : public QWSKeyboardHandler -+{ -+ Q_OBJECT -+ -+ public: -+ QWSsimpadButtonsHandler(); -+ virtual ~QWSsimpadButtonsHandler(); -+ -+ bool isOpen() { return fd > 0; } -+ -+ private slots: -+ void readSwitchesData(); -+ void autoRepeat(); -+ -+ private: -+ switches_mask_t switches; -+ -+ int fd; -+ int repeatdelay; -+ int repeatperiod; -+ -+ int lastCode; // last native code -+ int lastPress; // last press/release state -+ -+ int k; // last emitted Qt key code -+ int shiftKeyPressed; // true if one of the SHIFT keys has been pressed and not yet released -+ bool shiftUsed; // true if SHIFT has been used -+ -+ QTime eventTimer; // tracks time between raw events -+ QTimer* repeater; -+ QSocketNotifier *notifier; -+}; -+ -+ - #ifdef QT_QWS_SL5XXX - #include <asm/sharp_char.h> - #endif -@@ -165,9 +220,9 @@ - current = 0; - } - -- void setAutoRepeat(int d, int p) { if ( d > 0 ) repeatdelay=d; -+ void setAutoRepeat(int d, int p) { if ( d > 0 ) repeatdelay=d; - if ( p > 0 ) repeatperiod=p;} -- void getAutoRepeat(int *d ,int *p ) { if (d) *d=repeatdelay; -+ void getAutoRepeat(int *d ,int *p ) { if (d) *d=repeatdelay; - if (p) *p=repeatperiod; } - - void stop() -@@ -551,9 +606,9 @@ - - void doKey(uchar scancode); - -- -+ - void restoreLeds(); -- -+ - private: - bool shift; - bool alt; -@@ -809,7 +864,7 @@ - - #if !defined(QT_QWS_SL5XXX) - if (code == 224 --#if defined(QT_QWS_IPAQ) -+#if defined(QT_QWS_IPAQ) - && !ipaq_return_pressed - #endif - ) { -@@ -1778,9 +1833,11 @@ - } else { - type = spec; - } -- - if ( type == "Buttons" ) { --#if defined(QT_QWS_YOPY) -+#if defined(QT_QWS_SIMPAD) -+ qDebug( "QWSKeyboardHandler: using SIMpad switches handler..." ); -+ handler = new QWSsimpadButtonsHandler(); -+#elif defined(QT_QWS_YOPY) - handler = new QWSyopyButtonsHandler(); - #elif defined(QT_QWS_CASSIOPEIA) - handler = new QWSVr41xxButtonsHandler(); -@@ -1815,6 +1872,218 @@ - return keyM; - } - --#endif // QT_NO_QWS_KEYBOARD - -+/* -+ * SIMpad switches handler -+ * (C) 2003 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> -+ */ -+ -+ -+QWSsimpadButtonsHandler::QWSsimpadButtonsHandler() -+ :QWSKeyboardHandler(), fd( -1 ), -+ repeatdelay( 700 ), repeatperiod( 80 ), -+ lastCode( 0 ), lastPress( 0 ), -+ k( -1 ), shiftKeyPressed( 0 ), shiftUsed( false ) -+{ -+ qDebug( "SimpadButtonsHandler() - V4.1" ); -+ fd = ::open( SIMPAD_SWITCHES_DEVICE, O_RDWR | O_NDELAY, 0 ); -+ if ( fd < 0 ) -+ { -+ qWarning( "SimpadButtonsHandler(): can't open %s", SIMPAD_SWITCHES_DEVICE ); -+ return; -+ } -+ -+ notifier = new QSocketNotifier( fd, QSocketNotifier::Read, this ); -+ connect( notifier, SIGNAL( activated(int) ),this, SLOT( readSwitchesData() ) ); -+ -+ repeater = new QTimer(this); -+ connect(repeater, SIGNAL(timeout()), this, SLOT(autoRepeat())); -+ -+} -+ -+ -+QWSsimpadButtonsHandler::~QWSsimpadButtonsHandler() -+{ -+ qDebug( "~SimpadButtonsHandler()" ); -+ if ( fd > 0 ) -+ { -+ ::close( fd ); -+ fd = -1; -+ } -+} -+ -+ -+void QWSsimpadButtonsHandler::readSwitchesData() -+{ -+ qDebug( "SimpadButtonsHandler() - detected switches action" ); - -+ if ( ::read( fd, &switches, sizeof switches ) < 0 ) -+ { -+ qWarning( "SimpadButtonsHandler() - switches read error!" ); -+ return; -+ } -+ -+ qDebug( "SimpadButtonsHandler() - Shift: %0x [used: %0x] + Event = %0x | %0x", -+ shiftKeyPressed, shiftUsed, switches.events[0], switches.states[0] ); -+ -+ bool press = switches.states[0]; // == switches.event[0]; -+ int code = switches.events[0]; -+ -+ //========================================================================= -+ -+ /** -+ * Work around a bug in the kernel keyboard driver emitting -+ * bogus events when pressing multiple switches at once -+ **/ -+ -+ if ( lastCode == 0 ) -+ { -+ // first press ever -+ eventTimer.start(); -+ lastPress = press; -+ lastCode = code; -+ } -+ else -+ { -+ int interval = eventTimer.restart(); -+ qDebug( "event interval = %d", interval ); -+ if ( code == lastCode && interval < 10 ) -+ { -+ qDebug( "event interval too small - ignoring bogus event" ); -+ qDebug( "did I say i hate buggy kernel drivers? :-D" ); -+ return; -+ } -+ -+ lastPress = press; -+ lastCode = code; -+ } -+ -+ /** -+ * Actually it may also be a hardware problem, but I really don't like -+ * to review kernel code for further inquiry. So just being lazy and -+ * do the workaround in user space :-D -+ **/ -+ -+ //===================================================================== -+ -+ if ( shiftKeyPressed ) -+ { -+ // a shift key obviously is being held -+ qDebug( "while shift key is being held..." ); -+ -+ if ( code != shiftKeyPressed ) -+ { -+ // another key is being touched - that means shift mode for us! -+ qDebug( " another key is being touched -> shift use now = true" ); -+ -+ shiftUsed = true; -+ -+ if ( shiftKeyPressed == SIMPAD_SWITCH_LOWER ) // SHIFT 1 -+ { -+ qDebug( " shift mode 1" ); -+ switch(code) -+ { -+ case SIMPAD_SWITCH_UP: k = Qt::Key_F9; break; // Shift1-Up = Calendar -+ case SIMPAD_SWITCH_DOWN: k = Qt::Key_F10; break; // Shift1-Down = Contacts -+ case SIMPAD_SWITCH_LEFT: k = Qt::Key_F13; break; // Shift1-Left = Mail -+ case SIMPAD_SWITCH_RIGHT: k = Qt::Key_F11; break; // Shift1-Up = Menu -+ case SIMPAD_SWITCH_UPPER: k = Qt::Key_F12; break; // Shift1-Upper = Home -+ default: k=-1; qWarning( "SimpadButtonsHandler() - unhandled event for Shift 1 !" ); break; -+ } -+ } -+ else if ( shiftKeyPressed == SIMPAD_SWITCH_UPPER ) // SHIFT 2 -+ { -+ qDebug( " shift mode 2" ); -+ switch(code) -+ { -+ case SIMPAD_SWITCH_UP: k = Qt::Key_F5; break; // Shift2-Up = F5 -+ case SIMPAD_SWITCH_DOWN: k = Qt::Key_F6; break; // Shift2-Down = F6 -+ case SIMPAD_SWITCH_LEFT: k = Qt::Key_F7; break; // Shift2-Left = F7 -+ case SIMPAD_SWITCH_RIGHT: k = Qt::Key_F8; break; // Shift2-Up = F8 -+ case SIMPAD_SWITCH_LOWER: k = Qt::Key_F9; break; // Shift2-Lower = F9 -+ default: k=-1; qWarning( "SimpadButtonsHandler() - unhandled event for Shift 2!" ); break; -+ } -+ } -+ } -+ else -+ { -+ qDebug( " shift key has been released. checking if being used..." ); -+ shiftKeyPressed = 0; -+ -+ if ( !shiftUsed ) -+ { -+ qDebug( " ... has _not_ being used -> really emit the key" ); -+ k = ( code == SIMPAD_SWITCH_UPPER ? Qt::Key_Escape : Qt::Key_Return ); -+ qDebug( "Emitting key = %d (pressed)", k ); -+ processKeyEvent( 0, k, 0, true, true ); -+ qDebug( "Emitting key = %d (released)", k ); -+ processKeyEvent( 0, k, 0, false, true ); -+ return; -+ } -+ else -+ { -+ qDebug( " ... has being used -> doing nothing" ); -+ return; -+ } -+ } -+ } -+ else -+ { -+ qDebug( "standard mode - no shift yet..." ); -+ -+ switch(code) -+ { -+ case SIMPAD_SWITCH_UP: k = Qt::Key_Up; break; -+ case SIMPAD_SWITCH_DOWN: k = Qt::Key_Down; break; -+ case SIMPAD_SWITCH_LEFT: k = Qt::Key_Left; break; -+ case SIMPAD_SWITCH_RIGHT: k = Qt::Key_Right; break; -+ case SIMPAD_SWITCH_POWER: k = Qt::Key_F34; break; // Power Button -+ -+ case SIMPAD_SWITCH_UPPER: k=-1; shiftKeyPressed = press? code:0; shiftUsed = false; qDebug( "shiftkey pressed now = %d", shiftKeyPressed ); return; -+ case SIMPAD_SWITCH_LOWER: k=-1; shiftKeyPressed = press? code:0; shiftUsed = false; qDebug( "shiftkey pressed now = %d", shiftKeyPressed ); return; -+ -+ default: k=-1; qWarning( "SimpadButtonsHandler() - unhandled event!" ); break; -+ } -+ } -+ -+ if ( k == -1 ) -+ { -+ qDebug( "no key to emit - returning." ); -+ return; -+ } -+ -+ bool repeatable = ( k == Qt::Key_Up || k == Qt::Key_Down || -+ k == Qt::Key_Right || k == Qt::Key_Left ); -+ -+ qDebug( "key to emit = %d [%s] [repeat=%s]", k, -+ press ? "press" : "release", -+ repeatable ? "true":"false" ); -+ -+ if ( qt_screen->isTransformed() && k >= Qt::Key_Left && k <= Qt::Key_Down ) -+ { -+ qDebug( "SimpadButtonsHandler() - We are transformed! Correcting..." ); -+ int oldK = k; -+ k = xform_dirkey( k ); -+ qDebug( "SimpadButtonsHandler() - Old Key: %d - New Key %d", oldK, k ); -+ } -+ -+ if ( repeatable && press ) -+ repeater->start( repeatdelay, true ); -+ else -+ repeater->stop(); -+ -+ qwsServer->processKeyEvent( 0, k, 0, press, false ); -+} -+ -+ -+void QWSsimpadButtonsHandler::autoRepeat() -+{ -+ qDebug( "Emitting key = %d (released)", k ); -+ processKeyEvent( 0, k, 0, false, true ); -+ qDebug( "Emitting key = %d (pressed)", k ); -+ processKeyEvent( 0, k, 0, true, true ); -+ repeater->start(repeatperiod); -+} -+ -+ -+#endif // QT_NO_QWS_KEYBOARD -Index: qt-2.3.10-snapshot-20060120/src/kernel/qwsmouse_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qwsmouse_qws.cpp 2006-01-20 21:30:35.836477040 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qwsmouse_qws.cpp 2006-01-20 21:36:59.160202976 +0100 -@@ -47,6 +47,7 @@ - #include <stdlib.h> - #include <stdio.h> - #include <sys/ioctl.h> -+#include <sys/time.h> - #include <sys/types.h> - #include <sys/stat.h> - #include <fcntl.h> -@@ -73,6 +74,7 @@ - unsigned short x; - unsigned short y; - unsigned short pad; -+ struct timeval stamp; - } TS_EVENT; - #elif defined(QT_QWS_SL5XXX) - #define QT_QWS_SL5XXX_RAW -@@ -1292,6 +1294,8 @@ - #if defined(QT_QWS_IPAQ) - #ifdef QT_QWS_IPAQ_RAW - dev = "/dev/h3600_tsraw"; -+#elif defined(QT_QWS_SIMPAD) -+ dev = "/dev/touchscreen/usb1x00"; - #else - dev = "/dev/h3600_ts"; - #endif -@@ -1322,7 +1326,7 @@ - - QTPanelHandlerPrivate::~QTPanelHandlerPrivate() - { --#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_K2) || defined(QT_QWS_SLC700) -+#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_K2) || defined(QT_QWS_SLC700) || defined(QT_QWS_SIMPAD) - if (mouseFD >= 0) - close(mouseFD); - #endif -@@ -1330,7 +1334,7 @@ - - void QTPanelHandlerPrivate::readMouseData() - { --#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_K2) || defined(QT_QWS_SLC700) -+#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) || defined(QT_QWS_K2) || defined(QT_QWS_SLC700) || defined(QT_QWS_SIMPAD) - if(!qt_screen) - return; - diff --git a/packages/qte/qte-2.3.12/suspend-resume-hooks.patch b/packages/qte/qte-2.3.12/suspend-resume-hooks.patch deleted file mode 100644 index 34e6ba2133..0000000000 --- a/packages/qte/qte-2.3.12/suspend-resume-hooks.patch +++ /dev/null @@ -1,64 +0,0 @@ -Suspend/Resume hooks for QScreen and usage from QApplication -Manuel Teira <manuel.teira@telefonica.net> - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - ---- qt-2.3.10/src/kernel/qgfx_qws.h~suspend-resume-hooks -+++ qt-2.3.10/src/kernel/qgfx_qws.h -@@ -192,6 +192,8 @@ - virtual int pixmapLinestepAlignment() { return 64; } - - virtual void sync() {} -+ virtual void prepareToSuspend() {} -+ virtual void prepareToResume() {} - virtual bool onCard(unsigned char *) const; - virtual bool onCard(unsigned char *, ulong& out_offset) const; - ---- qt-2.3.10/src/kernel/qapplication_qws.cpp~suspend-resume-hooks -+++ qt-2.3.10/src/kernel/qapplication_qws.cpp -@@ -480,6 +480,7 @@ - int region_offset_window; - #ifndef QT_NO_COP - QWSQCopMessageEvent *qcop_response; -+ bool manageAPMMessage( QWSQCopMessageEvent *e ); - #endif - QWSEvent* current_event; - QValueList<int> unused_identifiers; -@@ -840,7 +841,7 @@ - QWSQCopMessageEvent *pe = (QWSQCopMessageEvent*)e; - if ( pe->simpleData.is_response ) { - qcop_response = pe; -- } else { -+ } else if ( !manageAPMMessage( pe ) ) { - queue.append(e); - } - #endif -@@ -851,6 +852,26 @@ - } - } - -+#ifndef QT_NO_COP -+bool QWSDisplayData::manageAPMMessage( QWSQCopMessageEvent *e ) -+{ -+ if ( e->channel.data() != QCString( "QPE/System" ) ) { -+ return FALSE; -+ } -+ if ( e->message.data() == QCString( "aboutToSuspend()" ) ) { -+ if ( qt_screen ) qt_screen->prepareToSuspend(); -+ delete e; -+ return TRUE; -+ } -+ if ( e->message.data() == QCString( "returnFromSuspend()" ) ) { -+ if ( qt_screen ) qt_screen->prepareToResume(); -+ delete e; -+ return TRUE; -+ } -+ return FALSE; -+} -+#endif -+ - void QWSDisplayData::offsetPendingExpose( int window, const QPoint &offset ) - { - if ( offset.isNull() ) diff --git a/packages/qte/qte-2.3.12/switches.h b/packages/qte/qte-2.3.12/switches.h deleted file mode 100644 index 37516b4c75..0000000000 --- a/packages/qte/qte-2.3.12/switches.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * linux/include/linux/switches.h - * - * Copyright (C) 2000 John Dorsey - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * 23 October 2000 - created. - */ - -#if !defined(_LINUX_SWITCHES_H) -#define _LINUX_SWITCHES_H - -#define SWITCHES_MASK_SIZE (128) - -typedef unsigned long switches_bitfield; - -#define SWITCHES_BITS (sizeof(switches_bitfield) * 8) -#define SWITCHES_NUM_FIELDS (SWITCHES_MASK_SIZE / SWITCHES_BITS) -#define SWITCHES_FIELD_SELECT(i) ((i) / SWITCHES_BITS) -#define SWITCHES_FIELD_MASK(i) ((switches_bitfield)(1 << (i) % \ - SWITCHES_BITS)) - -typedef struct switches_mask_t { - unsigned int count; - switches_bitfield events[SWITCHES_NUM_FIELDS]; - switches_bitfield states[SWITCHES_NUM_FIELDS]; -} switches_mask_t; - -#define SWITCHES_ZERO(m) \ -do { \ - unsigned int sz_i; \ - (m)->count = 0; \ - for(sz_i = 0; sz_i < SWITCHES_NUM_FIELDS; ++sz_i) \ - (m)->events[sz_i] = (m)->states[sz_i] = 0; \ -} while (0) - -/* `s' is the state of the switch, either 0 or non-zero: */ -#define SWITCHES_SET(m, i, s) \ -do { \ - ((m)->events[SWITCHES_FIELD_SELECT((i))] |= \ - SWITCHES_FIELD_MASK((i))); \ - if(s) \ - ((m)->states[SWITCHES_FIELD_SELECT((i))] |= \ - SWITCHES_FIELD_MASK((i))); \ - else \ - ((m)->states[SWITCHES_FIELD_SELECT((i))] &= \ - ~SWITCHES_FIELD_MASK((i))); \ - ++((m)->count); \ -} while (0) - -/* Should only use to clear an event set by SWITCHES_SET(): */ -#define SWITCHES_CLEAR(m, i) \ -do { \ - ((m)->events[SWITCHES_FIELD_SELECT((i))] &= \ - ~SWITCHES_FIELD_MASK((i))); \ - ((m)->states[SWITCHES_FIELD_SELECT((i))] &= \ - ~SWITCHES_FIELD_MASK((i))); \ - --((m)->count); \ -} - -#define SWITCHES_COUNT(m) ((m)->count) - -/* Returns 0 or non-zero: */ -#define SWITCHES_EVENT(m, i) \ -((m)->events[SWITCHES_FIELD_SELECT((i))] & SWITCHES_FIELD_MASK((i))) - -/* Returns 0 or non-zero: */ -#define SWITCHES_STATE(m, i) \ -((m)->states[SWITCHES_FIELD_SELECT((i))] & SWITCHES_FIELD_MASK((i))) - -#endif /* !defined(_LINUX_SWITCHES_H) */ diff --git a/packages/qte/qte-2.3.12/tslib.patch b/packages/qte/qte-2.3.12/tslib.patch deleted file mode 100644 index 47837d7a5d..0000000000 --- a/packages/qte/qte-2.3.12/tslib.patch +++ /dev/null @@ -1,53 +0,0 @@ -Index: qt-2.3.10/src/kernel/qwsmouse_qws.cpp -=================================================================== ---- qt-2.3.10.orig/src/kernel/qwsmouse_qws.cpp 2005-02-16 00:53:53.090339898 +0100 -+++ qt-2.3.10/src/kernel/qwsmouse_qws.cpp 2005-02-16 00:54:43.059069292 +0100 -@@ -1878,30 +1878,33 @@ - */ - void QTSLibHandlerPrivate::interpolateSample() { - #ifdef QT_QWS_TSLIB -- static struct ts_sample samples[25]; -- int index = -1; -+#define TSLIB_MAX_SAMPLES 25 -+ static struct ts_sample samples[TSLIB_MAX_SAMPLES]; -+ int index = 0; -+ int read_samples = 0; - int ret; - - do { -- /* fill only the last sample again */ -- if ( index >= 25 ) -- index = 24; -- -+ /* do not access negative arrays */ -+ if ( index < 0 ) -+ index = 0; -+ - /* we're opened non-blocking */ -- if((ret= ts_read_raw(m_ts, &samples[index], 1 ) ) != 1 ) { -+ if((ret= ts_read_raw(m_ts, &samples[index], 1 ) ) != 1 ) - /* no event yet, so try again */ -- if (ret==-1 ) { -- index--; -+ if (ret==-1 ) - continue; -- } -- } -- }while (samples[index++].pressure != 0); -+ -+ read_samples++; -+ index = (index+1)%TSLIB_MAX_SAMPLES; -+ }while (samples[index == 0 ? (TSLIB_MAX_SAMPLES-1) : index-1].pressure != 0); - - /* -- * index is maximal 25 and we at least one sample -+ * If we've wrapped around each sample is used otherwise -+ * we will use the index - */ -- if( index >= 25 ) -- index = 24; -+ index = read_samples >= TSLIB_MAX_SAMPLES ? -+ (TSLIB_MAX_SAMPLES-1 ) : index; - int x, y; - - /* diff --git a/packages/qte/qte-2.3.12/vt-switch.patch b/packages/qte/qte-2.3.12/vt-switch.patch deleted file mode 100644 index 92b8e5436a..0000000000 --- a/packages/qte/qte-2.3.12/vt-switch.patch +++ /dev/null @@ -1,184 +0,0 @@ - -# -# Patch managed by http://www.holgerschurig.de/patcher.html -# - -Index: qt-2.3.10-snapshot-20060120/src/kernel/qapplication_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qapplication_qws.cpp 2006-01-20 20:44:13.910394088 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qapplication_qws.cpp 2006-01-20 20:46:52.639263632 +0100 -@@ -125,6 +125,12 @@ - static int qt_thread_pipe[2]; - #endif - -+#if defined(_OS_LINUX_) -+#include <sys/ioctl.h> -+#include <linux/vt.h> -+#include <linux/kd.h> -+#endif -+ - const int qwsSharedRamSize = 32 * 1024; //Small amount to fit on small devices. - - // These are in qapplication.cpp in qt/main -@@ -165,6 +171,8 @@ - bool qws_accel = TRUE; // ### never set - const char *qws_display_spec = ":0"; - int qws_display_id = 0; -+int qws_terminal_id = 0; -+int qws_terminal_old = 0; - int qws_client_id = 0; - QWidget *qt_pressGrab = 0; - QWidget *qt_mouseGrb = 0; -@@ -1702,6 +1710,15 @@ - type = QApplication::GuiServer; - } else if ( arg == "-interlaced" ) { - qws_screen_is_interlaced = TRUE; -+ } else if ( arg == "-terminal" ) { -+ if ( ++i < argc ) -+ { -+ if ( ( qws_terminal_id = atoi( argv[i] ) ) < 1 ) -+ { -+ qWarning( "Ignoring Invalid Terminal Specification." ); -+ qws_terminal_id = 0; -+ } -+ } - } else if ( arg == "-display" ) { - if ( ++i < argc ) - qws_display_spec = argv[i]; -@@ -1727,6 +1744,53 @@ - if ( type == QApplication::GuiServer ) { - qt_appType = type; - qws_single_process = TRUE; -+ -+ /* Allocate a dedicated virtual terminal -- (C) Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> -+ * Added a new command line option which only is relevant if the application is created as a GuiServer. -+ * The option is -terminal <num>, where <num> specifies the virtual terminal to be occupied by the server. -+ * As default in Linux, 0 means the current virtual terminal. -+ */ -+ #if defined(_OS_LINUX_) -+ if ( qws_terminal_id ) -+ { -+ qDebug( "qt_init() - terminal specification is '%d'.", qws_terminal_id ); -+ struct vt_stat console_stat; -+ int console_fd = ::open( QString().sprintf( "/dev/tty%d", qws_terminal_id ).latin1(), O_RDWR ); -+ if ( console_fd == -1) -+ { -+ qWarning( "qt_init() - can't open tty: %s", strerror( errno ) ); -+ exit( -1 ); -+ } -+ if ( ioctl( console_fd, VT_GETSTATE, &console_stat ) == -1 ) -+ { -+ qWarning( "qt_init() - can't ioctl(VT_GETSTATE): %s", strerror( errno ) ); -+ exit( -1 ); -+ } -+ qws_terminal_old = console_stat.v_active; -+ qDebug( "qt_init() - active vt is #%d, switching to #%d as requested...", qws_terminal_old, qws_terminal_id ); -+ -+ if ( ioctl( console_fd, VT_ACTIVATE, qws_terminal_id ) == -1 ) -+ { -+ qWarning( "qt_init() - can't ioctl(VT_ACTIVATE): %s", strerror( errno ) ); -+ exit( -1 ); -+ } -+ if ( ioctl( console_fd, VT_WAITACTIVE, qws_terminal_id ) == -1 ) -+ { -+ qWarning( "qt_init() - can't ioctl(VT_WAITACTIVE): %s", strerror( errno ) ); -+ exit( -1 ); -+ } -+ if ( ioctl( console_fd, KDSETMODE, KD_GRAPHICS ) == -1 ) -+ { -+ qWarning( "qt_init() - can't ioctl(KDSETMODE:KD_GRAPHICS): %s", strerror( errno ) ); -+ exit( -1 ); -+ } -+ ::close( console_fd ); -+ } -+ else -+ { -+ qDebug( "QWSApplication::qt_init() - current terminal specified." ); -+ } -+ #endif - QWSServer::startup(flags); - setenv("QWS_DISPLAY", qws_display_spec, 0); - } -@@ -1777,7 +1841,36 @@ - QFontManager::cleanup(); - - if ( qws_single_process ) { -- QWSServer::closedown(); -+ qDebug( "qt_cleanup() - shutting down QWSServer..." ); -+#ifndef QT_NO_QWS_KEYBOARD -+ if ( qwsServer ) -+ qwsServer->closeKeyboard(); -+#endif -+ QWSServer::closedown(); -+#if defined(_OS_LINUX_) -+ if ( qws_terminal_old > 0 ) -+ { -+ qDebug( "qt_cleanup() - switching back to virtual terminal #%d", qws_terminal_old ); -+ -+ int console_fd = ::open( "/dev/tty0", O_RDWR ); -+ if ( console_fd == -1) -+ { -+ qWarning( "qt_init() - can't open tty: %s", strerror( errno ) ); -+ } -+ else -+ { -+ if ( ioctl( console_fd, KDSETMODE, KD_TEXT ) == -1 ) -+ { -+ qWarning( "qt_init() - can't ioctl(KDSETMODE:KD_TEXT): %s", strerror( errno ) ); -+ } -+ if ( ioctl( console_fd, VT_ACTIVATE, qws_terminal_old ) == -1 ) -+ { -+ qWarning( "qt_init() - can't ioctl(VT_ACTIVATE): %s", strerror( errno ) ); -+ } -+ ::close( console_fd ); -+ } -+ } -+#endif - } - if ( qt_is_gui_used ) { - delete qt_fbdpy; -Index: qt-2.3.10-snapshot-20060120/src/kernel/qkeyboard_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qkeyboard_qws.cpp 2006-01-20 20:44:13.911393936 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qkeyboard_qws.cpp 2006-01-20 20:46:52.640263480 +0100 -@@ -1247,6 +1247,24 @@ - { - if (kbdFD >= 0) - { -+ -+#if !defined(_OS_FREEBSD_) && !defined(_OS_SOLARIS_) -+ struct vt_mode vtMode; -+ ioctl(kbdFD, VT_GETMODE, &vtMode); -+ -+ /* Mickey says: "Better give up control of VT switching. -+ * Hey, I really hate that OS-will-reacquire-resources on process-death -+ * kind of thinking! -+ */ -+ vtMode.mode = VT_AUTO; -+ vtMode.relsig = 0; -+ vtMode.acqsig = 0; -+ ioctl(kbdFD, VT_SETMODE, &vtMode); -+ -+ signal(VTSWITCHSIG, 0); -+ qDebug( "~QWSTtyKeyboardHandler() - released VT." ); -+#endif -+ - #if !defined(_OS_FREEBSD_) && !defined(_OS_SOLARIS_) - ioctl(kbdFD, KDSKBMODE, K_XLATE); - #endif -Index: qt-2.3.10-snapshot-20060120/src/kernel/qgfxlinuxfb_qws.cpp -=================================================================== ---- qt-2.3.10-snapshot-20060120.orig/src/kernel/qgfxlinuxfb_qws.cpp 2006-01-20 20:44:13.911393936 +0100 -+++ qt-2.3.10-snapshot-20060120/src/kernel/qgfxlinuxfb_qws.cpp 2006-01-20 20:46:52.641263328 +0100 -@@ -255,9 +255,9 @@ - - bool QLinuxFbScreen::initDevice() - { -- // No blankin' screen, no blinkin' cursor!, no cursor! -+ /* Setting up the VT parameters is done in qapplication_qws.cpp - const char termctl[]="\033[9;0]\033[?33l\033[?25l"; -- writeTerm(termctl,sizeof(termctl)); -+ writeTerm(termctl,sizeof(termctl)); */ - - // Grab current mode so we can reset it - fb_var_screeninfo vinfo; diff --git a/packages/qte/qte-common_2.3.12.inc b/packages/qte/qte-common_2.3.12.inc deleted file mode 100644 index 4bb42a91c0..0000000000 --- a/packages/qte/qte-common_2.3.12.inc +++ /dev/null @@ -1,53 +0,0 @@ -require qte-common_2.3.10.inc -FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/qte-${PV}" - -SRC_URI = "http://ewi546.ewi.utwente.nl/mirror/hrw-oe-sources/qt-embedded-2.3.10-snapshot-20060120.tar.gz \ - file://qpe.patch;patch=1 \ - file://vt-switch.patch;patch=1 \ - file://daemonize.patch;patch=1 \ - file://no-moc.patch;patch=1 \ - file://gcc3.patch;patch=1 \ - file://gcc4.patch;patch=1 \ - file://c700-hardware.patch;patch=1 \ - file://encoding.patch;patch=1 \ - file://fix-qgfxraster.patch;patch=1 \ - file://qt-visibility.patch;patch=1 \ - file://simpad.patch;patch=1 \ - file://handhelds.patch;patch=1 \ - file://qiconview-speed.patch;patch=1 \ - file://qtabbar.patch;patch=1 \ - file://qte-fix-iconsize.patch;patch=1 \ - file://fix-linuxfb-setmode.patch;patch=1 \ - file://fix-linuxfb-offscreenoverflow.patch;patch=1 \ - file://fix-qscreen-sync.patch;patch=1 \ - file://improve-calibration-r0.patch;patch=1 \ - file://key.patch;patch=1 \ - file://bidimetrics.patch;patch=5 \ - file://simpad-defaultkbd.patch;patch=1 \ - file://fix-errno-exception-spec.patch;patch=1 \ - file://sharp_char.h \ - file://switches.h " - -SRC_URI_append_simpad = "file://devfs.patch;patch=1 " -SRC_URI_append_c7x0 = "file://kernel-keymap.patch;patch=1;pnum=0 file://kernel-keymap-corgi.patch;patch=1 \ - file://c7x0-w100-accel.patch;patch=1 file://suspend-resume-hooks.patch;patch=1 " -SRC_URI_append_spitz = "file://kernel-keymap.patch;patch=1;pnum=0 file://kernel-keymap-corgi.patch;patch=1 \ - file://kernel-keymap-CXK.patch;patch=1 " -SRC_URI_append_akita = "file://kernel-keymap.patch;patch=1;pnum=0 file://kernel-keymap-corgi.patch;patch=1 \ - file://kernel-keymap-CXK.patch;patch=1 " -SRC_URI_append_poodle = "file://kernel-keymap.patch;patch=1;pnum=0 " -SRC_URI_append_a780 = "file://kernel-keymap.patch;patch=1;pnum=0 " -SRC_URI_append_e680 = "file://kernel-keymap.patch;patch=1;pnum=0 " -SRC_URI_append_tosa = "file://kernel-keymap.patch;patch=1;pnum=0 " -SRC_URI_append_jornada7xx = "file://kernel-keymap.patch;patch=1;pnum=0 file://ipaq_sound_fix.patch;patch=1 " -SRC_URI_append_jornada56x = "file://kernel-keymap.patch;patch=1;pnum=0 file://ipaq_sound_fix.patch;patch=1 " -SRC_URI_append_h3600 = "file://ipaq-keyboard.patch;patch=1 file://ipaq_sound_fix.patch;patch=1 " -SRC_URI_append_h3900 = "file://ipaq-keyboard.patch;patch=1 file://ipaq_sound_fix.patch;patch=1 " -SRC_URI_append_h1910 = "file://ipaq-keyboard.patch;patch=1 file://ipaq_sound_fix.patch;patch=1 " - -S = "${WORKDIR}/qt-2.3.10-snapshot-20060120" -export QTDIR = "${S}" - -do_stage_append() { - install -m 0644 src/kernel/qsnoopdata_qws_p.h ${STAGING_DIR}/${HOST_SYS}/qt2/include/ -} diff --git a/packages/qte/qte-mt-static_2.3.12.bb b/packages/qte/qte-mt-static_2.3.12.bb deleted file mode 100644 index 8403528415..0000000000 --- a/packages/qte/qte-mt-static_2.3.12.bb +++ /dev/null @@ -1,24 +0,0 @@ -require qte-common_${PV}.inc -PR = "r4" - -DEFAULT_PREFERENCE = "-1" - -EXTRA_OECONF += "-static -thread" - -do_stage() { - rm -rf ${STAGING_DIR_HOST}/qt2 - install -d ${STAGING_DIR_HOST}/qt2/lib - oe_libinstall -a -C lib libqte-mt ${STAGING_DIR_HOST}/qt2/lib - rm -f include/qxt.h - install -d ${STAGING_DIR_HOST}/qt2/include - cp -pfLR include/* ${STAGING_DIR_HOST}/qt2/include - cp -pPR lib/fonts ${STAGING_DIR_HOST}/qt2/lib/ - install -m 0644 src/kernel/qsnoopdata_qws_p.h ${STAGING_DIR_HOST}/qt2/include/ -} - -do_install() { - : -} - -PACKAGE_ARCH = "${MACHINE_ARCH}" -FILES_${PN} = "${palmqtdir}" diff --git a/packages/qte/qte-mt_2.3.12.bb b/packages/qte/qte-mt_2.3.12.bb deleted file mode 100644 index 704081e639..0000000000 --- a/packages/qte/qte-mt_2.3.12.bb +++ /dev/null @@ -1,9 +0,0 @@ -require qte-common_${PV}.inc -PR = "r2" - -DEFAULT_PREFERENCE = "-1" - -EXTRA_OECONF += "-thread" - -PACKAGE_ARCH = "${MACHINE_ARCH}" -FILES_${PN} = "${palmqtdir}" diff --git a/packages/tslib/tslib/fic-gta01/.mtn2git_empty b/packages/scummvm/files/om-gta01/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/tslib/tslib/fic-gta01/.mtn2git_empty +++ b/packages/scummvm/files/om-gta01/.mtn2git_empty diff --git a/packages/scummvm/files/fic-gta01/openmoko-scummvm b/packages/scummvm/files/om-gta01/openmoko-scummvm index e8c5cb3984..e8c5cb3984 100755 --- a/packages/scummvm/files/fic-gta01/openmoko-scummvm +++ b/packages/scummvm/files/om-gta01/openmoko-scummvm diff --git a/packages/u-boot/u-boot-1.2.0/fic-gta01/.mtn2git_empty b/packages/squid/squid/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/u-boot/u-boot-1.2.0/fic-gta01/.mtn2git_empty +++ b/packages/squid/squid/.mtn2git_empty diff --git a/packages/squid/squid/fix_epoll_check.patch b/packages/squid/squid/fix_epoll_check.patch new file mode 100644 index 0000000000..8f195277fd --- /dev/null +++ b/packages/squid/squid/fix_epoll_check.patch @@ -0,0 +1,11 @@ +--- squid-2.6.STABLE14.orig/configure.in 2007-07-15 16:21:59.000000000 +0200 ++++ squid-2.6.STABLE14/configure.in 2008-03-25 17:15:53.000000000 +0100 +@@ -2416,7 +2416,7 @@ + + if test -n "$SELECT_TYPE"; then + : # Nothing to do +-elif test "$ac_cv_epoll_works" = "yes" ; then ++elif test "$ac_cv_func_epoll_ctl" = "yes" && "$ac_cv_epoll_works" = "yes" ; then + SELECT_TYPE="epoll" + elif test "$ac_cv_func_kqueue" = "yes" ; then + SELECT_TYPE="kqueue" diff --git a/packages/squid/squid/squid.init b/packages/squid/squid/squid.init new file mode 100644 index 0000000000..61d9de42dd --- /dev/null +++ b/packages/squid/squid/squid.init @@ -0,0 +1,70 @@ +#!/bin/sh +DAEMON=/usr/sbin/squid +NAME=squid +DESC="Squid HTTP proxy" +PIDFILE=/var/run/squid.pid +SQUID_ARGS="-D -sYC" + +test -f $DAEMON || exit 0 + +grepconf() { + w=" " # space tab + sq=/etc/$NAME.conf + # sed is cool. + res=`sed -ne ' + s/^'$1'['"$w"']\+[^'"$w"']\+['"$w"']\+\([^'"$w"']\+\).*$/\1/p; + t end; + d; + :end q' < $sq` + [ -n "$res" ] || res=$2 + echo "$res" +} + +start() { + owner=nobody + + cdr=`grepconf cache_dir /var/spool/$NAME` + if [ ! -d "$cdr/00" ]; then + mkdir -p $cdr + chown $owner $cdr + $DAEMON -z + fi + + ldr="/var/log/$NAME" + if [ ! -d "$ldr" ]; then + mkdir -p $ldr + chown $owner $ldr + fi + + start-stop-daemon -S -p $PIDFILE -x $DAEMON +} + +stop() { + start-stop-daemon -K -p $PIDFILE -x $DAEMON +} + +case "$1" in + start) + echo -n "Starting $DESC: $NAME... " + start + echo "done." + ;; + stop) + echo -n "Stopping $DESC: $NAME... " + stop + echo "done." + ;; + restart) + echo "Restarting $DESC: $NAME... " + stop + sleep 1 + start + echo "done." + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac + +exit 0 diff --git a/packages/squid/squid_2.6.STABLE14.bb b/packages/squid/squid_2.6.STABLE14.bb index beef3ba2b0..10c20c505e 100644 --- a/packages/squid/squid_2.6.STABLE14.bb +++ b/packages/squid/squid_2.6.STABLE14.bb @@ -1,18 +1,36 @@ DESCRIPTION = "Squid is a caching proxy for the Web supporting HTTP, HTTPS, FTP, and more" LICENSE = "GPLv2" - +PR = "r1" DEPENDS = "squid-native-${PV}" -SRC_URI = "http://www.squid-cache.org/Versions/v2/2.6/squid-${PV}.tar.bz2" +SRC_URI = "http://www.squid-cache.org/Versions/v2/2.6/squid-${PV}.tar.bz2 \ + file://fix_epoll_check.patch;patch=1 \ + file://squid.init" -inherit autotools +inherit autotools update-rc.d EXTRA_OECONF = "--disable-epoll --disable-nls" +logdir = ${localstatedir}/log/squid +EXTRA_OEMAKE = "\ + DEFAULT_CACHE_LOG=${logdir}/cache.log \ + DEFAULT_ACCESS_LOG=${logdir}/access.log \ + DEFAULT_STORE_LOG=${logdir}/store.log \ + DEFAULT_PID_FILE=${localstatedir}/run/squid.pid \ + DEFAULT_SWAP_DIR=${localstatedir}/spool/squid \ + " + +INITSCRIPT_NAME = "squid" + do_configure_append() { sed -i -e 's|./cf_gen |${STAGING_BINDIR_NATIVE}/cf_gen |g' src/Makefile } +do_install_append() { + install -d ${D}${sysconfdir}/init.d + install -m 755 ${WORKDIR}/squid.init ${D}${sysconfdir}/init.d/squid +} + # this packages the languages better and saves some space, installs # English as errors default and the others in locale package diff --git a/packages/uclibc/uclibc-0.9.29/fic-gta01/.mtn2git_empty b/packages/squidview/.mtn2git_empty index e69de29bb2..e69de29bb2 100644 --- a/packages/uclibc/uclibc-0.9.29/fic-gta01/.mtn2git_empty +++ b/packages/squidview/.mtn2git_empty diff --git a/packages/squidview/squidview_0.72.bb b/packages/squidview/squidview_0.72.bb new file mode 100644 index 0000000000..51dc085587 --- /dev/null +++ b/packages/squidview/squidview_0.72.bb @@ -0,0 +1,12 @@ +DESCRIPTION = "Interactive console program which monitors and displays squid logs" +SECTION = "console/network" +PRIORITY = "optional" +LICENSE = "GPL" +DEPENDS = "ncurses" +RDEPENDS = "squid" + +S = "${WORKDIR}/squidview-${PV}" + +SRC_URI = "http://www.rillion.net/squidview/squidview-${PV}.tar.gz" + +inherit autotools diff --git a/packages/strace/strace-4.5.14/strace-4.5.14-avr32-add-syscalls-up-to-sysvipc.patch b/packages/strace/strace-4.5.14/strace-4.5.14-avr32-add-syscalls-up-to-sysvipc.patch new file mode 100644 index 0000000000..78317ac942 --- /dev/null +++ b/packages/strace/strace-4.5.14/strace-4.5.14-avr32-add-syscalls-up-to-sysvipc.patch @@ -0,0 +1,75 @@ +Index: strace-4.5.14/linux/avr32/syscallent.h +=================================================================== +--- strace-4.5.14.orig/linux/avr32/syscallent.h 2007-02-19 07:48:12.000000000 +0100 ++++ strace-4.5.14/linux/avr32/syscallent.h 2007-02-19 08:01:24.000000000 +0100 +@@ -251,4 +251,57 @@ + { 3, TS, sys_tgkill, "tgkill" }, /* 221 */ + { 5, 0, printargs, "SYS_222" }, /* 222 */ + { 2, TF, sys_utimes, "utimes" }, /* 223 */ +- { 6, 0, printargs, "fadvise64_64" }, /* 224 */ ++ { 6, 0, sys_fadvise64_64, "fadvise64_64" }, /* 224 */ ++ { 3, 0, printargs, "cacheflush" }, /* 225 */ ++ { 0, 0, printargs, "vserver" }, /* 226 */ ++ { 4, 0, sys_mq_open, "mq_open" }, /* 227 */ ++ { 1, 0, sys_mq_unlink, "mq_unlink" }, /* 228 */ ++ { 5, 0, sys_mq_timedsend, "mq_timedsend" }, /* 229 */ ++ { 5, 0, sys_mq_timedreceive, "mq_timedreceive" }, /* 230 */ ++ { 2, 0, sys_mq_notify, "mq_notify" }, /* 231 */ ++ { 3, 0, sys_mq_getsetattr, "mq_getsetattr" }, /* 232 */ ++ { 4, 0, printargs, "kexec_load" }, /* 233 */ ++ { 1, 0, sys_waitid, "waitid" }, /* 234 */ ++ { 5, 0, printargs, "add_key" }, /* 235 */ ++ { 4, 0, printargs, "request_key" }, /* 236 */ ++ { 5, 0, printargs, "keyctl" }, /* 237 */ ++ { 3, 0, printargs, "ioprio_set" }, /* 238 */ ++ { 2, 0, printargs, "ioprio_get" }, /* 239 */ ++ { 1, 0, printargs, "inotify_init" }, /* 240 */ ++ { 3, 0, printargs, "inotify_add_watch" }, /* 241 */ ++ { 2, 0, printargs, "inotify_rm_watch" }, /* 242 */ ++ { 4, 0, printargs, "openat" }, /* 243 */ ++ { 3, 0, printargs, "mkdirat" }, /* 244 */ ++ { 4, 0, printargs, "mknodat" }, /* 245 */ ++ { 5, 0, printargs, "fchownat" }, /* 246 */ ++ { 3, 0, printargs, "futimesat" }, /* 247 */ ++ { 4, 0, sys_fstatfs64, "fstatat64" }, /* 248 */ ++ { 3, 0, printargs, "unlinkat" }, /* 249 */ ++ { 4, 0, printargs, "renameat" }, /* 250 */ ++ { 5, 0, printargs, "linkat" }, /* 251 */ ++ { 3, 0, printargs, "symlinkat" }, /* 252 */ ++ { 4, 0, printargs, "readlinkat" }, /* 253 */ ++ { 3, 0, printargs, "fchmodat" }, /* 254 */ ++ { 3, 0, printargs, "faccessat" }, /* 255 */ ++ { 6, 0, printargs, "pselect6" }, /* 256 */ ++ { 5, 0, printargs, "ppoll" }, /* 257 */ ++ { 1, 0, printargs, "unshare" }, /* 258 */ ++ { 2, 0, printargs, "set_robust_list" }, /* 259 */ ++ { 3, 0, printargs, "get_robust_list" }, /* 260 */ ++ { 6, 0, printargs, "splice" }, /* 261 */ ++ { 4, 0, printargs, "sync_file_range" }, /* 262 */ ++ { 4, 0, printargs, "tee" }, /* 263 */ ++ { 4, 0, printargs, "vmsplice" }, /* 264 */ ++ { 6, 0, printargs, "sys_epoll_pwait" }, /* 265 */ ++ { 2, TI, sys_msgget, "msgget" }, /* 266 */ ++ { 4, TI, sys_msgsnd, "msgsnd" }, /* 267 */ ++ { 5, TI, sys_msgrcv, "msgrcv" }, /* 268 */ ++ { 3, TI, sys_msgctl, "msgctl" }, /* 269 */ ++ { 3, TI, sys_semget, "semget" }, /* 270 */ ++ { 3, TI, sys_semop, "semop" }, /* 271 */ ++ { 4, TI, sys_semctl, "semctl" }, /* 272 */ ++ { 4, TI, sys_semtimedop, "semtimedop" }, /* 273 */ ++ { 3, TI, sys_shmat, "shmat" }, /* 274 */ ++ { 3, TI, sys_shmget, "shmget" }, /* 275 */ ++ { 1, TI, sys_shmdt, "shmdt" }, /* 276 */ ++ { 3, TI, sys_shmctl, "shmctl" }, /* 277 */ +Index: strace-4.5.14/system.c +=================================================================== +--- strace-4.5.14.orig/system.c 2007-02-19 07:48:12.000000000 +0100 ++++ strace-4.5.14/system.c 2007-02-19 07:48:12.000000000 +0100 +@@ -1578,7 +1578,6 @@ + { CTL_KERN, "CTL_KERN" }, + { CTL_VM, "CTL_VM" }, + { CTL_NET, "CTL_NET" }, +- /* was CTL_PROC */ + { CTL_FS, "CTL_FS" }, + { CTL_DEBUG, "CTL_DEBUG" }, + { CTL_DEV, "CTL_DEV" }, diff --git a/packages/strace/strace_4.5.14.bb b/packages/strace/strace_4.5.14.bb index f2838271ba..e65ac2d04e 100644 --- a/packages/strace/strace_4.5.14.bb +++ b/packages/strace/strace_4.5.14.bb @@ -12,11 +12,20 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/strace/strace-${PV}.tar.bz2 \ file://strace-fix-arm-bad-syscall.patch;patch=1 \ file://strace-undef-syscall.patch;patch=1 \ " + + + +# The strace-4.5.14-avr32.patch conflicts with some other patches. +# These patches are primarly for the ARM and SuperH, so we'll just +# not use them when building for the AVR32. +# The avr32 patch also includes the drop-ctl-proc.patch +# The AVR32 patches are from http://avr32linux.org/twiki/bin/view/Main/STrace +SRC_URI_avr32 = \ + "${SOURCEFORGE_MIRROR}/strace/strace-${PV}.tar.bz2 \ + file://strace-4.5.14-avr32.patch;patch=1 \ + file://strace-4.5.14-avr32-add-syscalls-up-to-sysvipc.patch;patch=1 \ + " -SRC_URI_avr32 = "${SOURCEFORGE_MIRROR}/strace/strace-${PV}.tar.bz2 \ - file://strace-4.5.14-avr32.patch;patch=1 \ - file://strace-4.5.14-add-syscalls-up-to-sysvipc.patch;patch=1 \ - " inherit autotools diff --git a/packages/tslib/tslib/om-gta01/.mtn2git_empty b/packages/tslib/tslib/om-gta01/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/tslib/tslib/om-gta01/.mtn2git_empty diff --git a/packages/tslib/tslib/fic-gta01/ts.conf b/packages/tslib/tslib/om-gta01/ts.conf index 82f712ef41..82f712ef41 100644 --- a/packages/tslib/tslib/fic-gta01/ts.conf +++ b/packages/tslib/tslib/om-gta01/ts.conf diff --git a/packages/u-boot/u-boot-1.2.0/om-gta01/.mtn2git_empty b/packages/u-boot/u-boot-1.2.0/om-gta01/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/u-boot/u-boot-1.2.0/om-gta01/.mtn2git_empty diff --git a/packages/u-boot/u-boot-1.2.0/fic-gta01/fw_env.config b/packages/u-boot/u-boot-1.2.0/om-gta01/fw_env.config index 9fe07672c5..9fe07672c5 100644 --- a/packages/u-boot/u-boot-1.2.0/fic-gta01/fw_env.config +++ b/packages/u-boot/u-boot-1.2.0/om-gta01/fw_env.config diff --git a/packages/uclibc/uclibc-0.9.29/om-gta01/.mtn2git_empty b/packages/uclibc/uclibc-0.9.29/om-gta01/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/uclibc/uclibc-0.9.29/om-gta01/.mtn2git_empty diff --git a/packages/uclibc/uclibc-0.9.29/fic-gta01/uClibc.machine b/packages/uclibc/uclibc-0.9.29/om-gta01/uClibc.machine index 898b73a33b..898b73a33b 100644 --- a/packages/uclibc/uclibc-0.9.29/fic-gta01/uClibc.machine +++ b/packages/uclibc/uclibc-0.9.29/om-gta01/uClibc.machine diff --git a/packages/uclibc/uclibc_0.9.29.bb b/packages/uclibc/uclibc_0.9.29.bb index 08eac1b7f0..ac97cb9fd9 100644 --- a/packages/uclibc/uclibc_0.9.29.bb +++ b/packages/uclibc/uclibc_0.9.29.bb @@ -7,7 +7,7 @@ # on whether the base patches apply to the selected (SRCDATE) svn release. # UCLIBC_BASE ?= "0.9.29" -PR = "r11" +PR = "r12" require uclibc.inc @@ -23,8 +23,10 @@ SRC_URI += "file://uClibc.machine file://uClibc.distro \ file://uClibc-0.9.29-fix-gethostent_r-failure-retval.patch;patch=1 \ file://uClibc-0.9.29-fix-internal_function-definition.patch;patch=1 \ file://uClibc-0.9.29-rm-whitespace.patch;patch=1 \ + file://uClibc-0.9.29-avr32-bzero.patch;patch=1 \ file://uClibc-0.9.29-nonposix_bashisms.patch;patch=1 \ -" + " + # mmap-unsigned-shift_bugid1303.patch # http://uclibc.org/lists/uclibc-cvs/2007-May/011360.html;patch=1" |