Merge branch 'master' into app_server
Conflicts: src/kits/app/Roster.cpp
This commit is contained in:
@@ -26,7 +26,7 @@ SYSTEM_BIN = [ FFilterByBuildFeatures
|
|||||||
route
|
route
|
||||||
safemode screen_blanker screeninfo screenmode setarch setmime settype
|
safemode screen_blanker screeninfo screenmode setarch setmime settype
|
||||||
setversion setvolume shutdown
|
setversion setvolume shutdown
|
||||||
strace su sysinfo
|
strace su sysinfo system_time
|
||||||
tcptester telnet telnetd top
|
tcptester telnet telnetd top
|
||||||
traceroute trash
|
traceroute trash
|
||||||
unchop unmount
|
unchop unmount
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ AddFilesToPackage develop lib : kernel.so : _KERNEL_ ;
|
|||||||
# additional libraries
|
# additional libraries
|
||||||
local developmentLibs =
|
local developmentLibs =
|
||||||
<revisioned>libroot_debug.so
|
<revisioned>libroot_debug.so
|
||||||
<revisioned>libroot_guarded.so
|
|
||||||
;
|
;
|
||||||
|
|
||||||
AddFilesToPackage lib : $(developmentLibs) ;
|
AddFilesToPackage lib : $(developmentLibs) ;
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
apr_util_devel-1.4.1-4
|
apr_util_devel-1.4.1-4
|
||||||
autoconf-2.69-6
|
autoconf-2.69-6
|
||||||
automake-1.13.1-4
|
automake-1.13.1-4
|
||||||
bash-4.3.39-1
|
bash-4.3.42-1
|
||||||
beam-1.2-1
|
beam-1.2-1
|
||||||
bepdf-1.2.0-1
|
bepdf-1.2.0-1
|
||||||
bescreencapture-1.9.4-1
|
bescreencapture-1.9.4-1
|
||||||
@@ -37,12 +37,12 @@ RemotePackageRepository HaikuPorts
|
|||||||
clang-3.4-3
|
clang-3.4-3
|
||||||
clang_analysis-3.4-3
|
clang_analysis-3.4-3
|
||||||
clipdinger-0.4-1
|
clipdinger-0.4-1
|
||||||
cmake-3.0.0_rc3-1
|
cmake-3.3.1-1
|
||||||
coreutils-8.24-1
|
coreutils-8.24-1
|
||||||
cpio-2.10-1
|
cpio-2.10-1
|
||||||
ctags-5.8-3
|
ctags-5.8-3
|
||||||
curl-7.43.0-1
|
curl-7.44.0-1
|
||||||
curl_devel-7.43.0-1
|
curl_devel-7.44.0-1
|
||||||
cvs-1.12.13.1-6
|
cvs-1.12.13.1-6
|
||||||
cvsps-2.2b1-1
|
cvsps-2.2b1-1
|
||||||
diffutils-3.3-2
|
diffutils-3.3-2
|
||||||
@@ -90,8 +90,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
gutenprint-5.2.10-1
|
gutenprint-5.2.10-1
|
||||||
gutenprint_devel-5.2.10-1
|
gutenprint_devel-5.2.10-1
|
||||||
gzip-1.6-2
|
gzip-1.6-2
|
||||||
haikuwebkit-1.4.10-1
|
haikuwebkit-1.4.12-1
|
||||||
haikuwebkit_devel-1.4.10-1
|
haikuwebkit_devel-1.4.12-1
|
||||||
help2man-1.46.6-1
|
help2man-1.46.6-1
|
||||||
htmldoc-1.8.27-3
|
htmldoc-1.8.27-3
|
||||||
icu-55.1-4
|
icu-55.1-4
|
||||||
@@ -124,8 +124,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
liblayout_devel-1.4.2-1
|
liblayout_devel-1.4.2-1
|
||||||
libogg-1.3.0-2
|
libogg-1.3.0-2
|
||||||
libogg_devel-1.3.0-2
|
libogg_devel-1.3.0-2
|
||||||
libpcap-1.7.3-1
|
libpcap-1.7.4-1
|
||||||
libpcap_devel-1.7.3-1
|
libpcap_devel-1.7.4-1
|
||||||
libpcre-8.21-5
|
libpcre-8.21-5
|
||||||
libpcre_devel-8.21-5
|
libpcre_devel-8.21-5
|
||||||
libpng-1.5.22-1
|
libpng-1.5.22-1
|
||||||
@@ -175,12 +175,14 @@ RemotePackageRepository HaikuPorts
|
|||||||
mpc_devel-1.0.3-1
|
mpc_devel-1.0.3-1
|
||||||
mpfr-3.1.3-1
|
mpfr-3.1.3-1
|
||||||
mpfr_devel-3.1.3-1
|
mpfr_devel-3.1.3-1
|
||||||
mpg123-1.22.3-1
|
mpg123-1.22.4-1
|
||||||
mpg123_devel-1.22.3-1
|
mpg123_devel-1.22.4-1
|
||||||
nano-2.4.2-1
|
nano-2.4.2-1
|
||||||
nasm-2.11.08-1
|
nasm-2.11.08-1
|
||||||
ncurses-5.9-10
|
ncurses-5.9-10
|
||||||
ncurses_devel-5.9-10
|
ncurses_devel-5.9-10
|
||||||
|
ncurses6-6.0-1
|
||||||
|
ncurses6_devel-6.0-1
|
||||||
neon-0.29.6-7
|
neon-0.29.6-7
|
||||||
neon_devel-0.29.6-7
|
neon_devel-0.29.6-7
|
||||||
netcat-1.10-1
|
netcat-1.10-1
|
||||||
@@ -218,7 +220,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
subversion-1.6.18-6
|
subversion-1.6.18-6
|
||||||
subversion_devel-1.6.18-6
|
subversion_devel-1.6.18-6
|
||||||
tar-1.27.1-2
|
tar-1.27.1-2
|
||||||
tcpdump-4.7.4-1
|
tcpdump-4.7.4-2
|
||||||
texinfo-4.13a-7
|
texinfo-4.13a-7
|
||||||
tiff-3.9.6-2
|
tiff-3.9.6-2
|
||||||
tiff_devel-3.9.6-2
|
tiff_devel-3.9.6-2
|
||||||
@@ -226,7 +228,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
tinyxml-2.6.2-1
|
tinyxml-2.6.2-1
|
||||||
tinyxml_devel-2.6.2-1
|
tinyxml_devel-2.6.2-1
|
||||||
transmission-2.84-3
|
transmission-2.84-3
|
||||||
unrar-5.1.5-1
|
unrar-5.3.2-1
|
||||||
unzip-6.0-2
|
unzip-6.0-2
|
||||||
vision-0.9.7.r949-3
|
vision-0.9.7.r949-3
|
||||||
vim-7.4-1
|
vim-7.4-1
|
||||||
@@ -236,7 +238,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
xml_parser-2.36-1
|
xml_parser-2.36-1
|
||||||
xz_utils-5.0.8-2
|
xz_utils-5.0.8-2
|
||||||
xz_utils_devel-5.0.8-2
|
xz_utils_devel-5.0.8-2
|
||||||
yasm-1.2.0-3
|
yasm-1.3.0-1
|
||||||
zip-3.0-2
|
zip-3.0-2
|
||||||
zlib-1.2.8-4
|
zlib-1.2.8-4
|
||||||
zlib_devel-1.2.8-4
|
zlib_devel-1.2.8-4
|
||||||
@@ -245,8 +247,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
binutils_x86_gcc2-2.17_2013_04_21-2
|
binutils_x86_gcc2-2.17_2013_04_21-2
|
||||||
bzip2_x86_gcc2-1.0.6-5
|
bzip2_x86_gcc2-1.0.6-5
|
||||||
bzip2_x86_gcc2_devel-1.0.6-5
|
bzip2_x86_gcc2_devel-1.0.6-5
|
||||||
curl_x86_gcc2-7.43.0-1
|
curl_x86_gcc2-7.44.0-1
|
||||||
curl_x86_gcc2_devel-7.43.0-1
|
curl_x86_gcc2_devel-7.44.0-1
|
||||||
expat_x86_gcc2-2.1.0-1
|
expat_x86_gcc2-2.1.0-1
|
||||||
expat_x86_gcc2_devel-2.1.0-1
|
expat_x86_gcc2_devel-2.1.0-1
|
||||||
ffmpeg_x86_gcc2-0.10.2-4
|
ffmpeg_x86_gcc2-0.10.2-4
|
||||||
@@ -303,6 +305,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
mesa_x86_gcc2_swrast-7.9.2-5
|
mesa_x86_gcc2_swrast-7.9.2-5
|
||||||
ncurses_x86_gcc2-5.9-10
|
ncurses_x86_gcc2-5.9-10
|
||||||
ncurses_x86_gcc2_devel-5.9-10
|
ncurses_x86_gcc2_devel-5.9-10
|
||||||
|
ncurses6_x86_gcc2-6.0-1
|
||||||
|
ncurses6_x86_gcc2_devel-6.0-1
|
||||||
openssl_x86_gcc2-1.0.0s-1
|
openssl_x86_gcc2-1.0.0s-1
|
||||||
openssl_x86_gcc2_devel-1.0.0s-1
|
openssl_x86_gcc2_devel-1.0.0s-1
|
||||||
pkgconfig_x86_gcc2-0.27.1-2
|
pkgconfig_x86_gcc2-0.27.1-2
|
||||||
@@ -419,6 +423,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
nano
|
nano
|
||||||
nasm
|
nasm
|
||||||
ncurses
|
ncurses
|
||||||
|
ncurses6
|
||||||
neon
|
neon
|
||||||
netcat
|
netcat
|
||||||
openssh
|
openssh
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
apr_util_devel-1.5.4-1
|
apr_util_devel-1.5.4-1
|
||||||
autoconf-2.69-6
|
autoconf-2.69-6
|
||||||
automake-1.13.1-4
|
automake-1.13.1-4
|
||||||
bash-4.3.39-1
|
bash-4.3.42-1
|
||||||
# bepdf-1.1.1~beta5_2013_04_28-1
|
# bepdf-1.1.1~beta5_2013_04_28-1
|
||||||
binutils-2.25_12015_07_31-1
|
binutils-2.25_12015_07_31-1
|
||||||
bison-2.6.5-1
|
bison-2.6.5-1
|
||||||
@@ -59,13 +59,13 @@ RemotePackageRepository HaikuPorts
|
|||||||
clang-3.5.1-1
|
clang-3.5.1-1
|
||||||
clang_analysis-3.5.1-1
|
clang_analysis-3.5.1-1
|
||||||
clipdinger-0.4-1
|
clipdinger-0.4-1
|
||||||
cmake-3.2.3-1
|
cmake-3.3.1-1
|
||||||
coreutils-8.24-1
|
coreutils-8.24-1
|
||||||
cppunit-1.12.1-2
|
cppunit-1.12.1-2
|
||||||
cppunit_devel-1.12.1-2
|
cppunit_devel-1.12.1-2
|
||||||
ctags-5.8-3
|
ctags-5.8-3
|
||||||
curl-7.43.0-1
|
curl-7.44.0-1
|
||||||
curl_devel-7.43.0-1
|
curl_devel-7.44.0-1
|
||||||
cvs-1.12.13.1-6
|
cvs-1.12.13.1-6
|
||||||
diffutils-3.3-2
|
diffutils-3.3-2
|
||||||
dos2unix-7.2.2-1
|
dos2unix-7.2.2-1
|
||||||
@@ -88,8 +88,9 @@ RemotePackageRepository HaikuPorts
|
|||||||
fontconfig-2.11.1-3
|
fontconfig-2.11.1-3
|
||||||
fontconfig_devel-2.11.1-3
|
fontconfig_devel-2.11.1-3
|
||||||
fossil-1.33-1
|
fossil-1.33-1
|
||||||
freetype-2.6-1
|
freeciv-2.5.1-1
|
||||||
freetype_devel-2.6-1
|
freetype-2.6-2
|
||||||
|
freetype_devel-2.6-2
|
||||||
fribidi-0.19.6-2
|
fribidi-0.19.6-2
|
||||||
fribidi_devel-0.19.6-2
|
fribidi_devel-0.19.6-2
|
||||||
gawk-4.1.0-2
|
gawk-4.1.0-2
|
||||||
@@ -128,17 +129,17 @@ RemotePackageRepository HaikuPorts
|
|||||||
gutenprint-5.2.10-1
|
gutenprint-5.2.10-1
|
||||||
gutenprint_devel-5.2.10-1
|
gutenprint_devel-5.2.10-1
|
||||||
gzip-1.6-2
|
gzip-1.6-2
|
||||||
haikuwebkit-1.4.10-1
|
haikuwebkit-1.4.12-1
|
||||||
haikuwebkit_devel-1.4.10-1
|
haikuwebkit_devel-1.4.12-1
|
||||||
handbrake-0.10.1-1
|
handbrake-0.10.1-1
|
||||||
harfbuzz-0.9.40-1
|
harfbuzz-0.9.40-1
|
||||||
harfbuzz_devel-0.9.40-1
|
harfbuzz_devel-0.9.40-1
|
||||||
help2man-1.46.6-1
|
help2man-1.46.6-1
|
||||||
htmldoc-1.8.27-3
|
htmldoc-1.8.27-3
|
||||||
icu-55.1-3
|
icu-55.1-5
|
||||||
icu_devel-55.1-3
|
icu_devel-55.1-5
|
||||||
icu54-54.1-1
|
icu54-54.1-2
|
||||||
icu54_devel-54.1-1
|
icu54_devel-54.1-2
|
||||||
intltool-0.40.6-4
|
intltool-0.40.6-4
|
||||||
jam-2.5_2012_10_12-2
|
jam-2.5_2012_10_12-2
|
||||||
jasper-1.900.1-4
|
jasper-1.900.1-4
|
||||||
@@ -153,6 +154,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
lcms-2.7-1
|
lcms-2.7-1
|
||||||
lcms_devel-2.7-1
|
lcms_devel-2.7-1
|
||||||
less-451-4
|
less-451-4
|
||||||
|
libasr-1.0.2-1
|
||||||
|
libasr_devel-1.0.2-1
|
||||||
libass-0.12.2-1
|
libass-0.12.2-1
|
||||||
libass_devel-0.12.2-1
|
libass_devel-0.12.2-1
|
||||||
libassuan-2.2.0-1
|
libassuan-2.2.0-1
|
||||||
@@ -177,6 +180,10 @@ RemotePackageRepository HaikuPorts
|
|||||||
libicns_devel-0.8.1-1
|
libicns_devel-0.8.1-1
|
||||||
libiconv-1.13.1-6
|
libiconv-1.13.1-6
|
||||||
libiconv_devel-1.13.1-6
|
libiconv_devel-1.13.1-6
|
||||||
|
libmad-0.15.1b-2
|
||||||
|
libmad_devel-0.15.1b-2
|
||||||
|
libmikmod-3.3.7-1
|
||||||
|
libmikmod_devel-3.3.7-1
|
||||||
libmkv-0.6.5.1-3
|
libmkv-0.6.5.1-3
|
||||||
libmkv_devel-0.6.5.1-3
|
libmkv_devel-0.6.5.1-3
|
||||||
libmp4v2-2.0.0-2
|
libmp4v2-2.0.0-2
|
||||||
@@ -185,8 +192,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
libmpeg2_devel-0.5.1-3
|
libmpeg2_devel-0.5.1-3
|
||||||
libogg-1.3.0-2
|
libogg-1.3.0-2
|
||||||
libogg_devel-1.3.0-2
|
libogg_devel-1.3.0-2
|
||||||
libpcap-1.7.3-1
|
libpcap-1.7.4-1
|
||||||
libpcap_devel-1.7.3-1
|
libpcap_devel-1.7.4-1
|
||||||
libpcre-8.21-5
|
libpcre-8.21-5
|
||||||
libpcre_devel-8.21-5
|
libpcre_devel-8.21-5
|
||||||
libpng-1.5.22-1
|
libpng-1.5.22-1
|
||||||
@@ -248,12 +255,14 @@ RemotePackageRepository HaikuPorts
|
|||||||
mpc_devel-1.0.3-1
|
mpc_devel-1.0.3-1
|
||||||
mpfr-3.1.3-1
|
mpfr-3.1.3-1
|
||||||
mpfr_devel-3.1.3-1
|
mpfr_devel-3.1.3-1
|
||||||
mpg123-1.22.3-1
|
mpg123-1.22.4-1
|
||||||
mpg123_devel-1.22.3-1
|
mpg123_devel-1.22.4-1
|
||||||
nano-2.4.2-1
|
nano-2.4.2-1
|
||||||
nasm-2.11.08-1
|
nasm-2.11.08-1
|
||||||
ncurses-5.9-10
|
ncurses-5.9-10
|
||||||
ncurses_devel-5.9-10
|
ncurses_devel-5.9-10
|
||||||
|
ncurses6-6.0-1
|
||||||
|
ncurses6_devel-6.0-1
|
||||||
neon-0.29.6-7
|
neon-0.29.6-7
|
||||||
neon_devel-0.29.6-7
|
neon_devel-0.29.6-7
|
||||||
netcat-1.10-1
|
netcat-1.10-1
|
||||||
@@ -285,6 +294,10 @@ RemotePackageRepository HaikuPorts
|
|||||||
sdl_gfx_devel-2.0.25-2
|
sdl_gfx_devel-2.0.25-2
|
||||||
sdl_image-1.2.12-5
|
sdl_image-1.2.12-5
|
||||||
sdl_image_devel-1.2.12-5
|
sdl_image_devel-1.2.12-5
|
||||||
|
sdl_mixer-1.2.12-6
|
||||||
|
sdl_mixer_devel-1.2.12-6
|
||||||
|
sdl_ttf-2.0.11-2
|
||||||
|
sdl_ttf_devel-2.0.11-2
|
||||||
sed-4.2.1-6
|
sed-4.2.1-6
|
||||||
serf-1.3.7-1
|
serf-1.3.7-1
|
||||||
serf_devel-1.3.7-1
|
serf_devel-1.3.7-1
|
||||||
@@ -298,7 +311,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
subversion-1.8.11-1
|
subversion-1.8.11-1
|
||||||
subversion_devel-1.8.11-1
|
subversion_devel-1.8.11-1
|
||||||
tar-1.27.1-2
|
tar-1.27.1-2
|
||||||
tcpdump-4.7.4-1
|
tcpdump-4.7.4-2
|
||||||
texinfo-4.13a-7
|
texinfo-4.13a-7
|
||||||
tiff-3.9.6-2
|
tiff-3.9.6-2
|
||||||
tiff_devel-3.9.6-2
|
tiff_devel-3.9.6-2
|
||||||
@@ -306,7 +319,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
tinyxml-2.6.2-1
|
tinyxml-2.6.2-1
|
||||||
tinyxml_devel-2.6.2-1
|
tinyxml_devel-2.6.2-1
|
||||||
transmission-2.84-3
|
transmission-2.84-3
|
||||||
unrar-5.1.5-1
|
unrar-5.3.2-1
|
||||||
unzip-6.0-2
|
unzip-6.0-2
|
||||||
vim-7.4-2
|
vim-7.4-2
|
||||||
vision-0.9.7.r949-3
|
vision-0.9.7.r949-3
|
||||||
@@ -318,7 +331,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
x264_devel-20140308-1
|
x264_devel-20140308-1
|
||||||
xz_utils-5.0.8-2
|
xz_utils-5.0.8-2
|
||||||
xz_utils_devel-5.0.8-2
|
xz_utils_devel-5.0.8-2
|
||||||
yasm-1.2.0-3
|
yasm-1.3.0-1
|
||||||
zip-3.0-2
|
zip-3.0-2
|
||||||
zlib-1.2.8-4
|
zlib-1.2.8-4
|
||||||
zlib_devel-1.2.8-4
|
zlib_devel-1.2.8-4
|
||||||
@@ -358,6 +371,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
flex
|
flex
|
||||||
fontconfig
|
fontconfig
|
||||||
fossil
|
fossil
|
||||||
|
freeciv
|
||||||
freetype
|
freetype
|
||||||
fribidi
|
fribidi
|
||||||
gawk
|
gawk
|
||||||
@@ -392,6 +406,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
lame
|
lame
|
||||||
lcms
|
lcms
|
||||||
less
|
less
|
||||||
|
libasr
|
||||||
libass
|
libass
|
||||||
libassuan
|
libassuan
|
||||||
libbluray
|
libbluray
|
||||||
@@ -404,6 +419,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
libgpg_error
|
libgpg_error
|
||||||
libicns
|
libicns
|
||||||
libiconv
|
libiconv
|
||||||
|
libmad
|
||||||
|
libmikmod
|
||||||
libmkv
|
libmkv
|
||||||
libmp4v2
|
libmp4v2
|
||||||
libmpeg2
|
libmpeg2
|
||||||
@@ -444,6 +461,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
nano
|
nano
|
||||||
nasm
|
nasm
|
||||||
ncurses
|
ncurses
|
||||||
|
ncurses6
|
||||||
neon
|
neon
|
||||||
netcat
|
netcat
|
||||||
ninja
|
ninja
|
||||||
@@ -466,6 +484,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
scons
|
scons
|
||||||
sdl_gfx
|
sdl_gfx
|
||||||
sdl_image
|
sdl_image
|
||||||
|
sdl_mixer
|
||||||
|
sdl_ttf
|
||||||
sed
|
sed
|
||||||
serf
|
serf
|
||||||
sharutils
|
sharutils
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
droid-113-1
|
droid-113-1
|
||||||
flare_x86_data-0.19-3
|
flare_x86_data-0.19-3
|
||||||
freedroidrpg_x86_data-0.15.1-1
|
freedroidrpg_x86_data-0.15.1-1
|
||||||
|
gws-0.1.8-1
|
||||||
|
haikuporter-1.0.0-1
|
||||||
hub-1.12.4-1
|
hub-1.12.4-1
|
||||||
openttd_gfx-0.4.7-1
|
openttd_gfx-0.4.7-1
|
||||||
openttd_msx-0.3.1-1
|
openttd_msx-0.3.1-1
|
||||||
@@ -43,7 +45,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
autoconf-2.69-5
|
autoconf-2.69-5
|
||||||
automake-1.13.1-4
|
automake-1.13.1-4
|
||||||
avra-1.3.0-1
|
avra-1.3.0-1
|
||||||
bash-4.3.39-1
|
bash-4.3.42-1
|
||||||
beae-1.2-3
|
beae-1.2-3
|
||||||
beam-1.2-1
|
beam-1.2-1
|
||||||
becjk-1.0.1-1
|
becjk-1.0.1-1
|
||||||
@@ -52,7 +54,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
belife-1.0.0-2
|
belife-1.0.0-2
|
||||||
bemines-1.0b2-1
|
bemines-1.0b2-1
|
||||||
bepdf-1.2.0-1
|
bepdf-1.2.0-1
|
||||||
bepodder-1.3.0-1
|
bepodder-1.3.0-2
|
||||||
bescreencapture-1.9.4-1
|
bescreencapture-1.9.4-1
|
||||||
bezilla-2.0.0.22-1
|
bezilla-2.0.0.22-1
|
||||||
binutils-2.17_2013_04_21-2
|
binutils-2.17_2013_04_21-2
|
||||||
@@ -79,8 +81,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
ctags-5.8-3
|
ctags-5.8-3
|
||||||
colors-2.3-1
|
colors-2.3-1
|
||||||
coreutils-8.24-1
|
coreutils-8.24-1
|
||||||
curl-7.43.0-1
|
curl-7.44.0-1
|
||||||
curl_devel-7.43.0-1
|
curl_devel-7.44.0-1
|
||||||
cvs-1.12.13.1-6
|
cvs-1.12.13.1-6
|
||||||
d52-3.4.1-1
|
d52-3.4.1-1
|
||||||
desknotes-1.1-4
|
desknotes-1.1-4
|
||||||
@@ -162,6 +164,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
gperf-3.0.4-1
|
gperf-3.0.4-1
|
||||||
gpgme-1.5.2-2
|
gpgme-1.5.2-2
|
||||||
gpgme_devel-1.5.2-2
|
gpgme_devel-1.5.2-2
|
||||||
|
grafx2-2.5-2
|
||||||
grep-2.20-1
|
grep-2.20-1
|
||||||
groff-1.20.1-3
|
groff-1.20.1-3
|
||||||
gtk_doc-1.20-1
|
gtk_doc-1.20-1
|
||||||
@@ -182,6 +185,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
imagemagick_devel-6.8.9_8-1
|
imagemagick_devel-6.8.9_8-1
|
||||||
intltool-0.40.6-4
|
intltool-0.40.6-4
|
||||||
itstool-2.0.2-1
|
itstool-2.0.2-1
|
||||||
|
jabber4haiku-1.2.1-1
|
||||||
jam-2.5_2012_10_12-2
|
jam-2.5_2012_10_12-2
|
||||||
jasper-1.900.1-4
|
jasper-1.900.1-4
|
||||||
jasper_devel-1.900.1-4
|
jasper_devel-1.900.1-4
|
||||||
@@ -260,8 +264,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
libogg_devel-1.3.0-2
|
libogg_devel-1.3.0-2
|
||||||
libpaper-1.1.24-1
|
libpaper-1.1.24-1
|
||||||
libpaper_devel-1.1.24-1
|
libpaper_devel-1.1.24-1
|
||||||
libpcap-1.7.3-1
|
libpcap-1.7.4-1
|
||||||
libpcap_devel-1.7.3-1
|
libpcap_devel-1.7.4-1
|
||||||
libpcre-8.21-5
|
libpcre-8.21-5
|
||||||
libpcre_devel-8.21-5
|
libpcre_devel-8.21-5
|
||||||
libpng-1.5.22-1
|
libpng-1.5.22-1
|
||||||
@@ -308,15 +312,15 @@ RemotePackageRepository HaikuPorts
|
|||||||
libxml2-2.8.0-9
|
libxml2-2.8.0-9
|
||||||
libxml2_devel-2.8.0-9
|
libxml2_devel-2.8.0-9
|
||||||
libxml2_python-2.8.0-9
|
libxml2_python-2.8.0-9
|
||||||
libxslt-1.1.28-4
|
libxslt-1.1.28-5
|
||||||
libxslt_devel-1.1.28-4
|
libxslt_devel-1.1.28-5
|
||||||
libzip-0.11.2-1
|
libzip-0.11.2-1
|
||||||
libzip_devel-0.11.2-1
|
libzip_devel-0.11.2-1
|
||||||
lighttpd-1.4.35-2
|
lighttpd-1.4.35-2
|
||||||
lighttpd_devel-1.4.35-2
|
lighttpd_devel-1.4.35-2
|
||||||
links-2.8-1
|
links-2.8-1
|
||||||
lmarbles-1.0.8-2
|
lmarbles-1.0.8-2
|
||||||
lnlauncher-1.1.2-1
|
lnlauncher-1.1.2-2
|
||||||
ltris-1.0.19-1
|
ltris-1.0.19-1
|
||||||
lua-5.2.1-6
|
lua-5.2.1-6
|
||||||
lua_devel-5.2.1-6
|
lua_devel-5.2.1-6
|
||||||
@@ -343,8 +347,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
moe-1.1.2-1
|
moe-1.1.2-1
|
||||||
mog-0.63.1548-1
|
mog-0.63.1548-1
|
||||||
most-pre5.1_15-1
|
most-pre5.1_15-1
|
||||||
mpg123-1.22.3-1
|
mpg123-1.22.4-1
|
||||||
mpg123_devel-1.22.3-1
|
mpg123_devel-1.22.4-1
|
||||||
mtr-0.73-1
|
mtr-0.73-1
|
||||||
multitalk-1.4-1
|
multitalk-1.4-1
|
||||||
mupdf-1.7-1
|
mupdf-1.7-1
|
||||||
@@ -356,6 +360,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
nasm-2.11.08-1
|
nasm-2.11.08-1
|
||||||
ncurses-5.9-9
|
ncurses-5.9-9
|
||||||
ncurses_devel-5.9-9
|
ncurses_devel-5.9-9
|
||||||
|
ncurses6-6.0-1
|
||||||
|
ncurses6_devel-6.0-1
|
||||||
neon-0.29.6-6
|
neon-0.29.6-6
|
||||||
neon_devel-0.29.6-6
|
neon_devel-0.29.6-6
|
||||||
netcat-1.10-1
|
netcat-1.10-1
|
||||||
@@ -464,7 +470,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
tar-1.26-6
|
tar-1.26-6
|
||||||
tcl-8.5.18-1
|
tcl-8.5.18-1
|
||||||
tcl_devel-8.5.18-1
|
tcl_devel-8.5.18-1
|
||||||
tcpdump-4.7.4-1
|
tcpdump-4.7.4-2
|
||||||
texinfo-4.13a-7
|
texinfo-4.13a-7
|
||||||
tiff-3.9.6-2
|
tiff-3.9.6-2
|
||||||
tiff_devel-3.9.6-2
|
tiff_devel-3.9.6-2
|
||||||
@@ -474,7 +480,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
twolame-0.3.13-1
|
twolame-0.3.13-1
|
||||||
twolame_devel-0.3.13-1
|
twolame_devel-0.3.13-1
|
||||||
ubertuber-0.9.11-1
|
ubertuber-0.9.11-1
|
||||||
unrar-5.2.6-1
|
unrar-5.3.2-1
|
||||||
unzip-6.0-2
|
unzip-6.0-2
|
||||||
util_macros-1.19.0-2
|
util_macros-1.19.0-2
|
||||||
vasm-1.7c-1
|
vasm-1.7c-1
|
||||||
@@ -499,7 +505,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
xrick-021212-2
|
xrick-021212-2
|
||||||
yab-1.7.5-2
|
yab-1.7.5-2
|
||||||
yab_ide-2.2.5-1
|
yab_ide-2.2.5-1
|
||||||
yasm-1.2.0-3
|
yasm-1.3.0-1
|
||||||
zip-3.0-2
|
zip-3.0-2
|
||||||
zlib-1.2.8-4
|
zlib-1.2.8-4
|
||||||
zlib_devel-1.2.8-4
|
zlib_devel-1.2.8-4
|
||||||
@@ -547,14 +553,16 @@ RemotePackageRepository HaikuPorts
|
|||||||
burnitnow_x86-0.1.0-1
|
burnitnow_x86-0.1.0-1
|
||||||
bzip2_x86-1.0.6-5
|
bzip2_x86-1.0.6-5
|
||||||
bzip2_x86_devel-1.0.6-5
|
bzip2_x86_devel-1.0.6-5
|
||||||
|
cairo_x86-1.12.18-1
|
||||||
|
cairo_x86_devel-1.12.18-1
|
||||||
capstone_x86-3.0.4-1
|
capstone_x86-3.0.4-1
|
||||||
capstone_x86_devel-3.0.4-1
|
capstone_x86_devel-3.0.4-1
|
||||||
cmake_x86-3.2.3-1
|
cmake_x86-3.3.1-1
|
||||||
confuse_x86-2.7-2
|
confuse_x86-2.7-2
|
||||||
confuse_x86_devel-2.7-2
|
confuse_x86_devel-2.7-2
|
||||||
copynametoclipboard-1.0.1-2
|
copynametoclipboard-1.0.1-2
|
||||||
curl_x86-7.43.0-1
|
curl_x86-7.44.0-1
|
||||||
curl_x86_devel-7.43.0-1
|
curl_x86_devel-7.44.0-1
|
||||||
cvsps_x86-2.2b1-1
|
cvsps_x86-2.2b1-1
|
||||||
dbus_x86-1.8.6-1
|
dbus_x86-1.8.6-1
|
||||||
dbus_x86_devel-1.8.6-1
|
dbus_x86_devel-1.8.6-1
|
||||||
@@ -584,8 +592,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
flare_x86-0.19-3
|
flare_x86-0.19-3
|
||||||
fluidsynth_x86-1.1.6-2
|
fluidsynth_x86-1.1.6-2
|
||||||
fluidsynth_x86_devel-1.1.6-2
|
fluidsynth_x86_devel-1.1.6-2
|
||||||
fontconfig_x86-2.11.1-2
|
fontconfig_x86-2.11.1-3
|
||||||
fontconfig_x86_devel-2.11.1-2
|
fontconfig_x86_devel-2.11.1-3
|
||||||
freedroidrpg_x86-0.15.1-1
|
freedroidrpg_x86-0.15.1-1
|
||||||
freetype_x86-2.6-1
|
freetype_x86-2.6-1
|
||||||
freetype_x86_devel-2.6-1
|
freetype_x86_devel-2.6-1
|
||||||
@@ -595,6 +603,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
gcc_x86_syslibs-4.8.5_2015_07_11-2
|
gcc_x86_syslibs-4.8.5_2015_07_11-2
|
||||||
gcc_x86_syslibs_devel-4.8.5_2015_07_11-2
|
gcc_x86_syslibs_devel-4.8.5_2015_07_11-2
|
||||||
gcc6809_x86-4.6.1-2
|
gcc6809_x86-4.6.1-2
|
||||||
|
gdk_pixbuf_x86-2.31.5-1
|
||||||
|
gdk_pixbuf_x86_devel-2.31.5-1
|
||||||
gettext_x86-0.18.1.1-6
|
gettext_x86-0.18.1.1-6
|
||||||
gettext_x86_libintl-0.18.1.1-6
|
gettext_x86_libintl-0.18.1.1-6
|
||||||
giflib_x86-5.1.0-1
|
giflib_x86-5.1.0-1
|
||||||
@@ -616,8 +626,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
graphite2_x86_devel-1.2.4-1
|
graphite2_x86_devel-1.2.4-1
|
||||||
guilib_x86-1.2.1-1
|
guilib_x86-1.2.1-1
|
||||||
guilib_x86_devel-1.2.1-1
|
guilib_x86_devel-1.2.1-1
|
||||||
haikuwebkit_x86-1.4.11-1
|
haikuwebkit_x86-1.4.12-1
|
||||||
haikuwebkit_x86_devel-1.4.11-1
|
haikuwebkit_x86_devel-1.4.12-1
|
||||||
harfbuzz_x86-0.9.39-1
|
harfbuzz_x86-0.9.39-1
|
||||||
harfbuzz_x86_devel-0.9.39-1
|
harfbuzz_x86_devel-0.9.39-1
|
||||||
icu_x86-55.1-1
|
icu_x86-55.1-1
|
||||||
@@ -721,6 +731,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
libtheora_x86_devel-1.1.1-2
|
libtheora_x86_devel-1.1.1-2
|
||||||
libtool_x86-2.4.2-1
|
libtool_x86-2.4.2-1
|
||||||
libtool_x86_libltdl-2.4.2-1
|
libtool_x86_libltdl-2.4.2-1
|
||||||
|
libtorrent_rasterbar_x86-1.0.6-1
|
||||||
|
libtorrent_rasterbar_x86_devel-1.0.6-1
|
||||||
libusb_x86-1.0.18-1
|
libusb_x86-1.0.18-1
|
||||||
libusb_x86_devel-1.0.18-1
|
libusb_x86_devel-1.0.18-1
|
||||||
libuuid_x86-1.0.3-2
|
libuuid_x86-1.0.3-2
|
||||||
@@ -733,8 +745,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
libwebp_x86_devel-0.4.1-1
|
libwebp_x86_devel-0.4.1-1
|
||||||
libxml2_x86-2.9.2-1
|
libxml2_x86-2.9.2-1
|
||||||
libxml2_x86_devel-2.9.2-1
|
libxml2_x86_devel-2.9.2-1
|
||||||
libxslt_x86-1.1.28-2
|
libxslt_x86-1.1.28-5
|
||||||
libxslt_x86_devel-1.1.28-2
|
libxslt_x86_devel-1.1.28-5
|
||||||
libzip_x86-0.11.2-1
|
libzip_x86-0.11.2-1
|
||||||
libzip_x86_devel-0.11.2-1
|
libzip_x86_devel-0.11.2-1
|
||||||
llvm_x86-3.5.2-1
|
llvm_x86-3.5.2-1
|
||||||
@@ -759,8 +771,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
mpd_x86-0.18.12_git-1
|
mpd_x86-0.18.12_git-1
|
||||||
mpfr_x86-3.1.3-1
|
mpfr_x86-3.1.3-1
|
||||||
mpfr_x86_devel-3.1.3-1
|
mpfr_x86_devel-3.1.3-1
|
||||||
mpg123_x86-1.22.3-1
|
mpg123_x86-1.22.4-1
|
||||||
mpg123_x86_devel-1.22.3-1
|
mpg123_x86_devel-1.22.4-1
|
||||||
mplayer_x86-1.1.1-3
|
mplayer_x86-1.1.1-3
|
||||||
mupdf_x86-1.7-1
|
mupdf_x86-1.7-1
|
||||||
mupdf_x86_devel-1.7-1
|
mupdf_x86_devel-1.7-1
|
||||||
@@ -768,6 +780,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
musicpc_x86-0.26-1
|
musicpc_x86-0.26-1
|
||||||
ncurses_x86-5.9-9
|
ncurses_x86-5.9-9
|
||||||
ncurses_x86_devel-5.9-9
|
ncurses_x86_devel-5.9-9
|
||||||
|
ncurses6_x86-6.0-1
|
||||||
|
ncurses6_x86_devel-6.0-1
|
||||||
ninja_x86-1.5.1-2
|
ninja_x86-1.5.1-2
|
||||||
ocp_x86-0.1.21_git-1
|
ocp_x86-0.1.21_git-1
|
||||||
openal_x86-1.13.0-2
|
openal_x86-1.13.0-2
|
||||||
@@ -780,6 +794,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
openssl_x86-1.0.0s-1
|
openssl_x86-1.0.0s-1
|
||||||
openssl_x86_devel-1.0.0s-1
|
openssl_x86_devel-1.0.0s-1
|
||||||
openttd_x86-1.3.3-1
|
openttd_x86-1.3.3-1
|
||||||
|
pango_x86-1.37.0-1
|
||||||
|
pango_x86_devel-1.37.0-1
|
||||||
pciutils_x86-3.2.1-1
|
pciutils_x86-3.2.1-1
|
||||||
pciutils_x86_devel-3.2.1-1
|
pciutils_x86_devel-3.2.1-1
|
||||||
physfs_x86-2.0.3-1
|
physfs_x86-2.0.3-1
|
||||||
@@ -792,6 +808,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
protrekkr_x86-2.5.4-2
|
protrekkr_x86-2.5.4-2
|
||||||
popt_x86-1.16-1
|
popt_x86-1.16-1
|
||||||
popt_x86_devel-1.16-1
|
popt_x86_devel-1.16-1
|
||||||
|
qbittorrent_x86-3.2.3-2
|
||||||
qemu_x86-2.1.2-1
|
qemu_x86-2.1.2-1
|
||||||
qca2_x86-2.0.3-1
|
qca2_x86-2.0.3-1
|
||||||
qca2_x86_devel-2.0.3-1
|
qca2_x86_devel-2.0.3-1
|
||||||
@@ -799,7 +816,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
qjson_x86_devel-0.8.1-1
|
qjson_x86_devel-0.8.1-1
|
||||||
qmplay2_x86-15.05.30-2
|
qmplay2_x86-15.05.30-2
|
||||||
quassel_x86-0.10.0-2
|
quassel_x86-0.10.0-2
|
||||||
quicklaunch-0.9.10-1
|
quicklaunch-0.9.11-1
|
||||||
qupzilla_x86-1.8.6-1
|
qupzilla_x86-1.8.6-1
|
||||||
radare2_x86-0.9.9-1
|
radare2_x86-0.9.9-1
|
||||||
radare2_x86_devel-0.9.9-1
|
radare2_x86_devel-0.9.9-1
|
||||||
@@ -854,6 +871,8 @@ RemotePackageRepository HaikuPorts
|
|||||||
vacuum_x86-1.2.5-1
|
vacuum_x86-1.2.5-1
|
||||||
vcmi_x86-0.94-1
|
vcmi_x86-0.94-1
|
||||||
wizznic_x86-0.9.9-2
|
wizznic_x86-0.9.9-2
|
||||||
|
xmlroff_x86-0.6.2-2
|
||||||
|
xmlroff_x86_devel-0.6.2-2
|
||||||
xz_utils_x86-5.0.8-2
|
xz_utils_x86-5.0.8-2
|
||||||
xz_utils_x86_devel-5.0.8-2
|
xz_utils_x86_devel-5.0.8-2
|
||||||
zlib_x86-1.2.8-4
|
zlib_x86-1.2.8-4
|
||||||
@@ -908,6 +927,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
burnitnow_x86
|
burnitnow_x86
|
||||||
bzip2
|
bzip2
|
||||||
bzr
|
bzr
|
||||||
|
cairo_x86
|
||||||
canna
|
canna
|
||||||
capitalbe
|
capitalbe
|
||||||
capstone_x86
|
capstone_x86
|
||||||
@@ -988,6 +1008,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
gettext
|
gettext
|
||||||
gettext_x86
|
gettext_x86
|
||||||
gdb
|
gdb
|
||||||
|
gdk_pixbuf_x86
|
||||||
giflib
|
giflib
|
||||||
git
|
git
|
||||||
glew
|
glew
|
||||||
@@ -1002,6 +1023,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
gperf
|
gperf
|
||||||
gpgme
|
gpgme
|
||||||
gpgme_x86
|
gpgme_x86
|
||||||
|
grafx2
|
||||||
graphite2_x86
|
graphite2_x86
|
||||||
grep
|
grep
|
||||||
groff
|
groff
|
||||||
@@ -1010,6 +1032,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
gutenprint
|
gutenprint
|
||||||
gyp
|
gyp
|
||||||
gzip
|
gzip
|
||||||
|
haikuporter
|
||||||
haikuwebkit_x86
|
haikuwebkit_x86
|
||||||
harfbuzz_x86
|
harfbuzz_x86
|
||||||
help2man
|
help2man
|
||||||
@@ -1021,6 +1044,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
imagemagick
|
imagemagick
|
||||||
intltool
|
intltool
|
||||||
itstool
|
itstool
|
||||||
|
jabber4haiku
|
||||||
jam
|
jam
|
||||||
jasper
|
jasper
|
||||||
jbig2dec
|
jbig2dec
|
||||||
@@ -1106,6 +1130,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
libtheora
|
libtheora
|
||||||
libtool
|
libtool
|
||||||
libtool_x86
|
libtool_x86
|
||||||
|
libtorrent_rasterbar_x86
|
||||||
libunistring
|
libunistring
|
||||||
libusb
|
libusb
|
||||||
libusb_x86
|
libusb_x86
|
||||||
@@ -1172,6 +1197,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
nano
|
nano
|
||||||
nasm
|
nasm
|
||||||
ncurses
|
ncurses
|
||||||
|
ncurses6
|
||||||
neon
|
neon
|
||||||
netcat
|
netcat
|
||||||
netpulse
|
netpulse
|
||||||
@@ -1189,6 +1215,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
openttd_x86
|
openttd_x86
|
||||||
p7zip
|
p7zip
|
||||||
paladin
|
paladin
|
||||||
|
pango_x86
|
||||||
paragui
|
paragui
|
||||||
patch
|
patch
|
||||||
pciutils
|
pciutils
|
||||||
@@ -1217,6 +1244,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
python_setuptools
|
python_setuptools
|
||||||
python_twisted
|
python_twisted
|
||||||
python_zope.interface
|
python_zope.interface
|
||||||
|
qbittorrent_x86
|
||||||
qemacs
|
qemacs
|
||||||
qemu_x86
|
qemu_x86
|
||||||
qca2_x86
|
qca2_x86
|
||||||
@@ -1305,6 +1333,7 @@ RemotePackageRepository HaikuPorts
|
|||||||
yasm
|
yasm
|
||||||
youtube_dl
|
youtube_dl
|
||||||
xcb_proto
|
xcb_proto
|
||||||
|
xmlroff_x86
|
||||||
xmlto
|
xmlto
|
||||||
xml_parser
|
xml_parser
|
||||||
xproto
|
xproto
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Enable query support BFS_Initialize_Parameter Activer le support des requêtes
|
Enable query support BFS_Initialize_Parameter Activer le support des requêtes
|
||||||
2048 (Recommended) BFS_Initialize_Parameter 2048 (Recommandé)
|
2048 (Recommended) BFS_Initialize_Parameter 2048 (Recommandé)
|
||||||
8192 (Mostly large files) BFS_Initialize_Parameter 8192 (Surtout des gros fichiers)
|
8192 (Mostly large files) BFS_Initialize_Parameter 8192 (Surtout des gros fichiers)
|
||||||
Disabling query support may speed up certain file system operations, but should only be used if one is absolutely certain that one will not need queries.\nAny volume that is intended for booting Haiku must have query support enabled. BFS_Initialize_Parameter Désactiver le support des requête peut accélérer certaines opérations du système de fichiers, mais vous devez être certains de ne jamais avoir besoin des requêtes.\nTout volume destiné à amorcer Haiku doit avoir le support des requête activé.
|
Disabling query support may speed up certain file system operations, but should only be used if one is absolutely certain that one will not need queries.\nAny volume that is intended for booting Haiku must have query support enabled. BFS_Initialize_Parameter Désactiver le support des requêtes peut accélérer certaines opérations du système de fichiers, mais vous devez être certain de ne jamais avoir besoin des requêtes.\nTout volume destiné à amorcer Haiku doit avoir le support des requêtes activé.
|
||||||
1024 (Mostly small files) BFS_Initialize_Parameter 1024 (Surtout des petits fichiers)
|
1024 (Mostly small files) BFS_Initialize_Parameter 1024 (Surtout des petits fichiers)
|
||||||
Blocksize: BFS_Initialize_Parameter Taille de bloc :
|
Blocksize: BFS_Initialize_Parameter Taille de bloc :
|
||||||
Name: BFS_Initialize_Parameter Nom :
|
Name: BFS_Initialize_Parameter Nom :
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ Output mapping AudioMixer Correspondances de sorties
|
|||||||
Allow input channel remapping AudioMixer Autoriser la réassignation des canaux d’entrées
|
Allow input channel remapping AudioMixer Autoriser la réassignation des canaux d’entrées
|
||||||
Resampling algorithm AudioMixer Algorithme de ré-échantillonnage
|
Resampling algorithm AudioMixer Algorithme de ré-échantillonnage
|
||||||
Attenuate mixer output by 3dB (like BeOS R5) AudioMixer Atténuer la sortie du mélangeur de 3 dB (comme BeOS R5)
|
Attenuate mixer output by 3dB (like BeOS R5) AudioMixer Atténuer la sortie du mélangeur de 3 dB (comme BeOS R5)
|
||||||
Display balance control for stereo connections AudioMixer Afficher le contrôle de balance pour des connexions stéréo
|
Display balance control for stereo connections AudioMixer Afficher le contrôle de balance pour les connexions stéréo
|
||||||
To output AudioMixer Vers la sortie
|
To output AudioMixer Vers la sortie
|
||||||
not connected AudioMixer débranché
|
not connected AudioMixer débranché
|
||||||
Refuse input format changes AudioMixer Refuser les changements de formats d’entrées
|
Refuse input format changes AudioMixer Refuser les changements de formats d’entrées
|
||||||
@@ -17,11 +17,11 @@ dB AudioMixer dB
|
|||||||
Gain controls AudioMixer Contrôles de gain
|
Gain controls AudioMixer Contrôles de gain
|
||||||
Input mapping AudioMixer Correspondances d’entrées
|
Input mapping AudioMixer Correspondances d’entrées
|
||||||
Mute AudioMixer Sourdine
|
Mute AudioMixer Sourdine
|
||||||
Input channel destinations AudioMixer Destination des canaux d’entrées
|
Input channel destinations AudioMixer Destinations des canaux d’entrées
|
||||||
To master AudioMixer Vers la sortie principale
|
To master AudioMixer Vers la sortie principale
|
||||||
Master output AudioMixer Sortie principale
|
Master output AudioMixer Sortie principale
|
||||||
Setup AudioMixer Réglages
|
Setup AudioMixer Réglages
|
||||||
Use non linear gain sliders (like BeOS R5) AudioMixer Utiliser les curseurs de gain non-linéaire (comme BeOS R5)
|
Use non linear gain sliders (like BeOS R5) AudioMixer Utiliser les curseurs de gain non-linéaires (comme BeOS R5)
|
||||||
Gain AudioMixer Gain
|
Gain AudioMixer Gain
|
||||||
Allow output channel remapping AudioMixer Autoriser la réassignation des canaux de sorties
|
Allow output channel remapping AudioMixer Autoriser la réassignation des canaux de sorties
|
||||||
Physical input channels AudioMixer Canaux d’entrées physiques
|
Physical input channels AudioMixer Canaux d’entrées physiques
|
||||||
|
|||||||
@@ -1,2 +1,10 @@
|
|||||||
1 hungarian x-vnd.Haiku-DNSClientService 3886749326
|
1 hungarian x-vnd.Haiku-DNSClientService 2825577357
|
||||||
|
DNS settings DNSClientServiceAddOn DNS-beállítások
|
||||||
|
Move down DNSSettingsView Mozgatás lefelé
|
||||||
|
DNS settings DNSSettingsView DNS-beállítások
|
||||||
|
Remove DNSSettingsView Eltávolítás
|
||||||
Domain: DNSSettingsView Tartomány:
|
Domain: DNSSettingsView Tartomány:
|
||||||
|
Add DNSSettingsView Hozzáad
|
||||||
|
Server: DNSSettingsView Kiszolgáló:
|
||||||
|
Move up DNSSettingsView Mozgatás felfelé
|
||||||
|
Apply DNSSettingsView Alkalmaz
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
1 hungarian x-vnd.Haiku-IPv4Interface 2854844856
|
||||||
|
IPv4 IPv4InterfaceAddOn IPv4
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
1 hungarian x-vnd.Haiku-IPv6Interface 1391114020
|
||||||
|
IPv6 IPv6InterfaceAddOn IPv6
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
1 russian x-vnd.Haiku-About 14540716
|
1 russian x-vnd.Haiku-About 3251436090
|
||||||
Copyright © 1999-2010 by the authors of Gutenprint. All rights reserved. AboutView Все права защищены © 1999-2010 авторы Gutenprint.
|
Copyright © 1999-2010 by the authors of Gutenprint. All rights reserved. AboutView Все права защищены © 1999-2010 авторы Gutenprint.
|
||||||
Copyright © 1996-2002, 2006 David Turner, Robert Wilhelm and Werner Lemberg. AboutView Все права защищены © 1996-2002, 2006 David Turner, Robert Wilhelm и Werner Lemberg.
|
Copyright © 1996-2002, 2006 David Turner, Robert Wilhelm and Werner Lemberg. AboutView Все права защищены © 1996-2002, 2006 David Turner, Robert Wilhelm и Werner Lemberg.
|
||||||
Past website & marketing:\n AboutView Старый вебсайт и маркетинг:\n
|
Past website & marketing:\n AboutView Старый вебсайт и маркетинг:\n
|
||||||
@@ -8,6 +8,7 @@ Copyright © 1996-2005 Julian R Seward. All rights reserved. AboutView Все
|
|||||||
%d MiB total AboutView Всего %d МБ
|
%d MiB total AboutView Всего %d МБ
|
||||||
Michael Phipps (project founder)\n\n AboutView Michael Phipps (основателю проекта)\n\n
|
Michael Phipps (project founder)\n\n AboutView Michael Phipps (основателю проекта)\n\n
|
||||||
%d MiB used (%d%%) AboutView %d МБ использовано (%d%%)
|
%d MiB used (%d%%) AboutView %d МБ использовано (%d%%)
|
||||||
|
Contains software from the GNU Project, released under the GPL and LGPL licenses:\nGNU C Library, GNU coretools, diffutils, findutils, sharutils, gawk, bison, m4, make, wget, ncurses, termcap, Bourne Again Shell.\nCopyright © The Free Software Foundation. AboutView Содержит программное обеспечение из проекта GNU, выпущен под лицензиями GPL и LGPL:\nGNU библиотека, GNU coretools, diffutils, findutils, sharutils, gawk, bison, m4, make, wget, ncurses, termcap, Bourne Again Shell.\n\nВсе права защищены © Фонд свободного программного обеспечения.
|
||||||
AboutSystem System name О системе
|
AboutSystem System name О системе
|
||||||
Copyright © 2003 Peter Hanappe and others. AboutView Все права защищены © 2003 Peter Hanappe и другие.
|
Copyright © 2003 Peter Hanappe and others. AboutView Все права защищены © 2003 Peter Hanappe и другие.
|
||||||
Copyright © 1994-1997 Mark Kilgard. All rights reserved. AboutView Все права защищены © 1994-1997 Mark Kilgard.
|
Copyright © 1994-1997 Mark Kilgard. All rights reserved. AboutView Все права защищены © 1994-1997 Mark Kilgard.
|
||||||
@@ -40,6 +41,7 @@ Copyright © 1996-1997 Jeff Prosise. All rights reserved. AboutView Все пр
|
|||||||
Copyright © 2006-2012 Kentaro Fukuchi AboutView Все права защищены © 2006-2012 Kentaro Fukuchi
|
Copyright © 2006-2012 Kentaro Fukuchi AboutView Все права защищены © 2006-2012 Kentaro Fukuchi
|
||||||
Copyright © 1994-2009, Thomas G. Lane, Guido Vollbeding. This software is based in part on the work of the Independent JPEG Group. AboutView Все права защищены © 1994-2009, Thomas G. Lane, Guido Vollbeding. Это программное обеспечение частично основано на работе Independent JPEG Group.
|
Copyright © 1994-2009, Thomas G. Lane, Guido Vollbeding. This software is based in part on the work of the Independent JPEG Group. AboutView Все права защищены © 1994-2009, Thomas G. Lane, Guido Vollbeding. Это программное обеспечение частично основано на работе Independent JPEG Group.
|
||||||
Past maintainers:\n AboutView Предыдущие разработчики:\n
|
Past maintainers:\n AboutView Предыдущие разработчики:\n
|
||||||
|
Contains software from the FreeBSD Project, released under the BSD license:\nftpd, ping, telnet, telnetd, traceroute\nCopyright © 1994-2008 The FreeBSD Project. All rights reserved. AboutView Содержит программное обеспечение из проекта FreeBSD, выпущен под лицензией BSD:\ncal, ftpd, ping, telnet, telnetd, tracerout\nВсе права защищены © 1994-2008 Проект FreeBSD.
|
||||||
GNU GPL v3 AboutWindow GNU GPL v3
|
GNU GPL v3 AboutWindow GNU GPL v3
|
||||||
\n\nSpecial thanks to:\n AboutView \n\nОсобая благодарность:\n
|
\n\nSpecial thanks to:\n AboutView \n\nОсобая благодарность:\n
|
||||||
\n…and probably some more we forgot to mention (sorry!)\n\n AboutView \n…а также те, кого мы забыли упомянуть (простите!)\n\n
|
\n…and probably some more we forgot to mention (sorry!)\n\n AboutView \n…а также те, кого мы забыли упомянуть (простите!)\n\n
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
1 russian x-vnd.Haiku-DriveSetup 1450212098
|
1 russian x-vnd.Haiku-DriveSetup 2321187933
|
||||||
DriveSetup System name Разметка диска
|
DriveSetup System name Разметка диска
|
||||||
Could not acquire partitioning information. MainWindow Невозможно получить информацию о разделах.
|
Could not acquire partitioning information. MainWindow Невозможно получить информацию о разделах.
|
||||||
Cancel AbstractParametersPanel Отмена
|
Cancel AbstractParametersPanel Отмена
|
||||||
@@ -44,6 +44,7 @@ Change ChangeParametersPanel Изменить
|
|||||||
Are you sure you want to write the changes back to disk now?\n\nAll data on the disk %s will be irretrievably lost if you do so! MainWindow Вы уверены, что хотите записать изменения на диск прямо сейчас?\n\nВсе данные на диске %s будут безвозвратно потеряны, если вы продолжите!
|
Are you sure you want to write the changes back to disk now?\n\nAll data on the disk %s will be irretrievably lost if you do so! MainWindow Вы уверены, что хотите записать изменения на диск прямо сейчас?\n\nВсе данные на диске %s будут безвозвратно потеряны, если вы продолжите!
|
||||||
Are you sure you want to delete the selected partition?\n\nAll data on the partition will be irretrievably lost if you do so! MainWindow Вы уверены, что хотите удалить выбранный раздел?\n\nВсе данные на этом разделе будут безвозвратно потеряны, если вы продолжите!
|
Are you sure you want to delete the selected partition?\n\nAll data on the partition will be irretrievably lost if you do so! MainWindow Вы уверены, что хотите удалить выбранный раздел?\n\nВсе данные на этом разделе будут безвозвратно потеряны, если вы продолжите!
|
||||||
Create… MainWindow Создать…
|
Create… MainWindow Создать…
|
||||||
|
Are you sure you want to format a raw disk? (Most people initialize the disk with a partitioning system first) You will be asked again before changes are written to the disk. MainWindow Вы уверены, что хотите отформатировать весь диск? (Обычно на диске сначала создаются разделы) Повторный запрос будет выдан непосредственно перед записью изменений на диск.
|
||||||
The disk has been successfully initialized.\n MainWindow Диск был успешно инициализирован.\n
|
The disk has been successfully initialized.\n MainWindow Диск был успешно инициализирован.\n
|
||||||
Could not unmount partition %s. MainWindow Невозможно отключить раздел %s.
|
Could not unmount partition %s. MainWindow Невозможно отключить раздел %s.
|
||||||
Failed to change the parameters of the partition. No changes have been written to disk. MainWindow Не удалось изменить параметры раздела. Изменения не были записаны на диск.
|
Failed to change the parameters of the partition. No changes have been written to disk. MainWindow Не удалось изменить параметры раздела. Изменения не были записаны на диск.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
1 portuguese (brazil) x-vnd.Haiku-HaikuDepot 3134988464
|
1 portuguese (brazil) x-vnd.Haiku-HaikuDepot 4123398005
|
||||||
Name PackageListView Nome
|
Name PackageListView Nome
|
||||||
Available packages MainWindow Pacotes disponíveis
|
Available packages MainWindow Pacotes disponíveis
|
||||||
Open %DeskbarLink% PackageManager Abrir %DeskbarLink%
|
Open %DeskbarLink% PackageManager Abrir %DeskbarLink%
|
||||||
@@ -133,6 +133,7 @@ If you do not provide an email address, you will not be able to reset your passw
|
|||||||
Authentication failed. Connection to the service failed. UserLoginWindow Autenticação falhou. Conexão ao serviço falhou.
|
Authentication failed. Connection to the service failed. UserLoginWindow Autenticação falhou. Conexão ao serviço falhou.
|
||||||
Cancel RatePackageWindow Cancelar
|
Cancel RatePackageWindow Cancelar
|
||||||
Package action failed PackageInfoView Ação do pacote falhou
|
Package action failed PackageInfoView Ação do pacote falhou
|
||||||
|
OK UserLoginWindow OK
|
||||||
Send RatePackageWindow Enviar
|
Send RatePackageWindow Enviar
|
||||||
Failed to create account UserLoginWindow Falhou ao criar conta
|
Failed to create account UserLoginWindow Falhou ao criar conta
|
||||||
There are problems with the data you entered:\n\n UserLoginWindow Existem problemas com os dados que você inseriu:\n\n
|
There are problems with the data you entered:\n\n UserLoginWindow Existem problemas com os dados que você inseriu:\n\n
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
1 russian x-vnd.Haiku-HaikuDepot 3588353727
|
1 russian x-vnd.Haiku-HaikuDepot 4273323974
|
||||||
Name PackageListView Имя
|
Name PackageListView Имя
|
||||||
Available packages MainWindow Доступные пакеты
|
Available packages MainWindow Доступные пакеты
|
||||||
Open %DeskbarLink% PackageManager Открыть %DeskbarLink%
|
Open %DeskbarLink% PackageManager Открыть %DeskbarLink%
|
||||||
@@ -53,6 +53,7 @@ The user name needs to be at least 3 letters long. UserLoginWindow Имя по
|
|||||||
Log in UserLoginWindow Войти…
|
Log in UserLoginWindow Войти…
|
||||||
Repeat pass phrase: UserLoginWindow Повторить пароль:
|
Repeat pass phrase: UserLoginWindow Повторить пароль:
|
||||||
Ratings PackageInfoView Оценки
|
Ratings PackageInfoView Оценки
|
||||||
|
But none could be listed here, sorry. UserLoginWindow Но не удалось определить с какими именно, извините.
|
||||||
System & Utilities Model Система и утилиты
|
System & Utilities Model Система и утилиты
|
||||||
Inactive PackageListView Неактивный
|
Inactive PackageListView Неактивный
|
||||||
Refresh depots MainWindow Обновить склады
|
Refresh depots MainWindow Обновить склады
|
||||||
@@ -89,6 +90,7 @@ Failed to create or update rating: %s\n RatePackageWindow Не удалось
|
|||||||
You need to be logged into an account before you can rate packages. MainWindow Вы должны войти в свою учётную запись перед тем как оценить пакет.
|
You need to be logged into an account before you can rate packages. MainWindow Вы должны войти в свою учётную запись перед тем как оценить пакет.
|
||||||
It responded with: RatePackageWindow Он ответил так:
|
It responded with: RatePackageWindow Он ответил так:
|
||||||
User name: UserLoginWindow Имя пользователя:
|
User name: UserLoginWindow Имя пользователя:
|
||||||
|
User Menu MainWindow Меню пользователя
|
||||||
Unstable but usable RatePackageWindow Нестабилен, но пригодный для использования
|
Unstable but usable RatePackageWindow Нестабилен, но пригодный для использования
|
||||||
The email address appears to be malformed. UserLoginWindow Некорректный адрес электронной почты.
|
The email address appears to be malformed. UserLoginWindow Некорректный адрес электронной почты.
|
||||||
Games Model Игры
|
Games Model Игры
|
||||||
@@ -131,6 +133,7 @@ If you do not provide an email address, you will not be able to reset your passw
|
|||||||
It responded with: UserLoginWindow Он ответил так:
|
It responded with: UserLoginWindow Он ответил так:
|
||||||
Authentication failed. Connection to the service failed. UserLoginWindow Неверный логин/пароль. Соединение с сервисом прервано.
|
Authentication failed. Connection to the service failed. UserLoginWindow Неверный логин/пароль. Соединение с сервисом прервано.
|
||||||
Cancel RatePackageWindow Отмена
|
Cancel RatePackageWindow Отмена
|
||||||
|
Package action failed PackageInfoView Действие с пакетом не удалось.
|
||||||
OK UserLoginWindow OK
|
OK UserLoginWindow OK
|
||||||
Send RatePackageWindow Отправить
|
Send RatePackageWindow Отправить
|
||||||
- no package size -
|
- no package size -
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
1 hungarian x-vnd.Be-MAIL 233997769
|
1 hungarian x-vnd.Be-MAIL 1310033600
|
||||||
View Mail Nézet
|
View Mail Nézet
|
||||||
%d - Date Mail %d - dátum
|
%d - Date Mail %d - dátum
|
||||||
Attach attributes: Mail Jellemzők csatolása:
|
Attach attributes: Mail Jellemzők csatolása:
|
||||||
@@ -146,6 +146,7 @@ Open attachment Mail Megnyitás
|
|||||||
sent B_USER_DIRECTORY/mail/sent Elküldött
|
sent B_USER_DIRECTORY/mail/sent Elküldött
|
||||||
(Date unavailable) Mail (A dátum nem elérhető)
|
(Date unavailable) Mail (A dátum nem elérhető)
|
||||||
Put your favorite e-mail queries and query templates in this folder. Mail Helyezze a kedvenc lekérdezéseket és a lekérdezési sablonokat ebbe a mappába.
|
Put your favorite e-mail queries and query templates in this folder. Mail Helyezze a kedvenc lekérdezéseket és a lekérdezési sablonokat ebbe a mappába.
|
||||||
|
Spam Mail Levélszemét
|
||||||
Reply Mail Válasz
|
Reply Mail Válasz
|
||||||
From: Mail Feladó:
|
From: Mail Feladó:
|
||||||
Couldn't open this signature. Sorry. Mail Sajnálom, de nem nyitható meg ez az aláírás.
|
Couldn't open this signature. Sorry. Mail Sajnálom, de nem nyitható meg ez az aláírás.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
1 polish x-vnd.Be-MAIL 233997769
|
1 polish x-vnd.Be-MAIL 1310033600
|
||||||
View Mail Widok
|
View Mail Widok
|
||||||
%d - Date Mail %d - Data
|
%d - Date Mail %d - Data
|
||||||
Attach attributes: Mail Dołączaj atrybuty:
|
Attach attributes: Mail Dołączaj atrybuty:
|
||||||
@@ -146,6 +146,7 @@ Open attachment Mail Otwórz załącznik
|
|||||||
sent B_USER_DIRECTORY/mail/sent sent
|
sent B_USER_DIRECTORY/mail/sent sent
|
||||||
(Date unavailable) Mail (Data niedostępna)
|
(Date unavailable) Mail (Data niedostępna)
|
||||||
Put your favorite e-mail queries and query templates in this folder. Mail Umieść swoje ulubione zapytania wiadomości i szablony zapytań w tym katalogu.
|
Put your favorite e-mail queries and query templates in this folder. Mail Umieść swoje ulubione zapytania wiadomości i szablony zapytań w tym katalogu.
|
||||||
|
Spam Mail Spam
|
||||||
Reply Mail Odpowiedz
|
Reply Mail Odpowiedz
|
||||||
From: Mail Od:
|
From: Mail Od:
|
||||||
Couldn't open this signature. Sorry. Mail Nie można otworzyć tej sygnaturki. Przepraszamy.
|
Couldn't open this signature. Sorry. Mail Nie można otworzyć tej sygnaturki. Przepraszamy.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
1 russian x-vnd.Be-MAIL 233997769
|
1 russian x-vnd.Be-MAIL 1310033600
|
||||||
View Mail Вид
|
View Mail Вид
|
||||||
%d - Date Mail %d - Дата
|
%d - Date Mail %d - Дата
|
||||||
Attach attributes: Mail Прикрепление атрибутов:
|
Attach attributes: Mail Прикрепление атрибутов:
|
||||||
@@ -146,6 +146,7 @@ Open attachment Mail Открыть вложение
|
|||||||
sent B_USER_DIRECTORY/mail/sent Отправленные
|
sent B_USER_DIRECTORY/mail/sent Отправленные
|
||||||
(Date unavailable) Mail (Дата недоступна)
|
(Date unavailable) Mail (Дата недоступна)
|
||||||
Put your favorite e-mail queries and query templates in this folder. Mail Перенесите в эту папку ваши почтовые запросы.
|
Put your favorite e-mail queries and query templates in this folder. Mail Перенесите в эту папку ваши почтовые запросы.
|
||||||
|
Spam Mail Спам
|
||||||
Reply Mail Ответить
|
Reply Mail Ответить
|
||||||
From: Mail От:
|
From: Mail От:
|
||||||
Couldn't open this signature. Sorry. Mail Невозможно открыть эту подпись. Извините.
|
Couldn't open this signature. Sorry. Mail Невозможно открыть эту подпись. Извините.
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
1 russian x-vnd.Haiku-MediaConverter 3111641182
|
1 russian x-vnd.Haiku-MediaConverter 341686525
|
||||||
Video using parameters form settings MediaConverter Видео использует параметры из настроек
|
Video using parameters form settings MediaConverter Видео использует параметры из настроек
|
||||||
|
{0, plural, one{The file was not recognized as a supported media file:} other{# files were not recognized as supported media files:}} MediaConverter {0, plural, one{Файл не был распознан как поддерживаемый медиафайл:} few{# файла не были распознаны как поддерживаемые медиафайлы:} other{# файлов не было распознано как поддерживаемые медиафайлы:}}
|
||||||
Video encoding: MediaConverter Кодирование видео:
|
Video encoding: MediaConverter Кодирование видео:
|
||||||
|
%u x %u, %.2ffps MediaFileInfo Width x Height, fps %u x %u, %.2fкадр/с
|
||||||
Error read audio frame %lld MediaConverter Ошибка чтения аудио кадра %lld
|
Error read audio frame %lld MediaConverter Ошибка чтения аудио кадра %lld
|
||||||
No audio Audio codecs list Без аудио
|
No audio Audio codecs list Без аудио
|
||||||
Error MediaConverter Ошибка
|
Error MediaConverter Ошибка
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
1 russian x-vnd.Haiku-Terminal 235954604
|
1 russian x-vnd.Haiku-Terminal 2918699501
|
||||||
Not found. Terminal TermWindow Текст не найден
|
Not found. Terminal TermWindow Текст не найден
|
||||||
Switch Terminals Terminal TermWindow Переключить терминалы
|
Switch Terminals Terminal TermWindow Переключить терминалы
|
||||||
Change directory Terminal TermView Сменить каталог
|
Change directory Terminal TermView Сменить каталог
|
||||||
@@ -34,6 +34,7 @@ Settings Terminal TermWindow Настройки
|
|||||||
Window size Terminal TermWindow Размер окна
|
Window size Terminal TermWindow Размер окна
|
||||||
Selected text Terminal AppearancePrefView Выделенного текста
|
Selected text Terminal AppearancePrefView Выделенного текста
|
||||||
Find Terminal FindWindow Найти
|
Find Terminal FindWindow Найти
|
||||||
|
The pattern specifying the window titles. The following placeholders\ncan be used: Terminal AppearancePrefView Этот шаблон описывает заголовки окна.\nВозможно использовать следующие переменные:\n
|
||||||
Appearance Terminal PrefWindow Внешний вид
|
Appearance Terminal PrefWindow Внешний вид
|
||||||
Tab title: Terminal AppearancePrefView Заголовок вкладки:
|
Tab title: Terminal AppearancePrefView Заголовок вкладки:
|
||||||
OK Terminal SetTitleWindow ОК
|
OK Terminal SetTitleWindow ОК
|
||||||
@@ -76,6 +77,7 @@ Midnight Terminal colors scheme Полночь
|
|||||||
Decrease Terminal TermWindow Уменьшить
|
Decrease Terminal TermWindow Уменьшить
|
||||||
Default Terminal colors scheme По умолчанию
|
Default Terminal colors scheme По умолчанию
|
||||||
Create link here Terminal TermView Создать ссылку здесь
|
Create link here Terminal TermView Создать ссылку здесь
|
||||||
|
The pattern specifying the tab titles. The following placeholders\ncan be used: Terminal AppearancePrefView Этот шаблон описывает заголовки вкладок.\nВозможно использовать следующие переменные:
|
||||||
Close Terminal TermWindow Закрыть
|
Close Terminal TermWindow Закрыть
|
||||||
Text Terminal AppearancePrefView Текста
|
Text Terminal AppearancePrefView Текста
|
||||||
Clear all Terminal TermWindow Очистить всё
|
Clear all Terminal TermWindow Очистить всё
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
1 german x-vnd.Haiku-libtracker 3987439873
|
1 german x-vnd.Haiku-libtracker 1787267522
|
||||||
OK WidgetAttributeText OK
|
OK WidgetAttributeText OK
|
||||||
Add-ons FilePanelPriv Add-ons
|
Add-ons FilePanelPriv Add-ons
|
||||||
Mount settings… ContainerWindow Einhänge-Einstellungen…
|
Mount settings… ContainerWindow Einhänge-Einstellungen…
|
||||||
@@ -19,6 +19,7 @@ Modified QueryPoseView Geändert
|
|||||||
Created ContainerWindow Erstellt
|
Created ContainerWindow Erstellt
|
||||||
Error %error loading add-On %name. ContainerWindow Fehler %error beim Laden von Add-On %name.
|
Error %error loading add-On %name. ContainerWindow Fehler %error beim Laden von Add-On %name.
|
||||||
If you %ifYouDoAction the settings folder, %osName may not behave properly!\n\nAre you sure you want to do this? FSUtils Wird der Settings-Ordner %ifYouDoAction, kann %osName vielleicht nicht mehr fehlerfrei arbeiten!
|
If you %ifYouDoAction the settings folder, %osName may not behave properly!\n\nAre you sure you want to do this? FSUtils Wird der Settings-Ordner %ifYouDoAction, kann %osName vielleicht nicht mehr fehlerfrei arbeiten!
|
||||||
|
Skip all FSUtils Alle überspringen
|
||||||
contains SelectionWindow enthält
|
contains SelectionWindow enthält
|
||||||
Sorry, you can't save things at the root of your system. FilePanelPriv Im Root-Verzeichnis des Systems kann leider nichts gespeichert werden.
|
Sorry, you can't save things at the root of your system. FilePanelPriv Im Root-Verzeichnis des Systems kann leider nichts gespeichert werden.
|
||||||
Show shared volumes on Desktop SettingsView Netzwerk-Laufwerke auf dem Desktop zeigen
|
Show shared volumes on Desktop SettingsView Netzwerk-Laufwerke auf dem Desktop zeigen
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
1 french x-vnd.Haiku-libtracker 4204393626
|
1 french x-vnd.Haiku-libtracker 2004221275
|
||||||
OK WidgetAttributeText OK
|
OK WidgetAttributeText OK
|
||||||
Add-ons FilePanelPriv Extensions
|
Add-ons FilePanelPriv Extensions
|
||||||
Mount settings… ContainerWindow Réglages du montage…
|
Mount settings… ContainerWindow Réglages du montage…
|
||||||
@@ -19,6 +19,7 @@ Modified QueryPoseView Modifié
|
|||||||
Created ContainerWindow Créé
|
Created ContainerWindow Créé
|
||||||
Error %error loading add-On %name. ContainerWindow Erreur %error au chargement de l’extension %name.
|
Error %error loading add-On %name. ContainerWindow Erreur %error au chargement de l’extension %name.
|
||||||
If you %ifYouDoAction the settings folder, %osName may not behave properly!\n\nAre you sure you want to do this? FSUtils Si vous %ifYouDoAction le dossier des réglages, %osName pourrait ne pas se comporter correctement !\n\nÊtes vous sûr de vouloir effectuer cette opération ?
|
If you %ifYouDoAction the settings folder, %osName may not behave properly!\n\nAre you sure you want to do this? FSUtils Si vous %ifYouDoAction le dossier des réglages, %osName pourrait ne pas se comporter correctement !\n\nÊtes vous sûr de vouloir effectuer cette opération ?
|
||||||
|
Skip all FSUtils Tout ignorer
|
||||||
contains SelectionWindow contient
|
contains SelectionWindow contient
|
||||||
Sorry, you can't save things at the root of your system. FilePanelPriv Désolé, vous ne pouvez rien sauvegarder à la racine de votre système.
|
Sorry, you can't save things at the root of your system. FilePanelPriv Désolé, vous ne pouvez rien sauvegarder à la racine de votre système.
|
||||||
Show shared volumes on Desktop SettingsView Afficher les volumes partagés sur le Bureau
|
Show shared volumes on Desktop SettingsView Afficher les volumes partagés sur le Bureau
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
1 hungarian x-vnd.Haiku-libtracker 4204393626
|
1 hungarian x-vnd.Haiku-libtracker 2004221275
|
||||||
OK WidgetAttributeText Rendben
|
OK WidgetAttributeText Rendben
|
||||||
Add-ons FilePanelPriv Kiegészítők
|
Add-ons FilePanelPriv Kiegészítők
|
||||||
Mount settings… ContainerWindow Csatolási beállítások…
|
Mount settings… ContainerWindow Csatolási beállítások…
|
||||||
@@ -19,6 +19,7 @@ Modified QueryPoseView Módosítva
|
|||||||
Created ContainerWindow Létrehozva
|
Created ContainerWindow Létrehozva
|
||||||
Error %error loading add-On %name. ContainerWindow Hiba a bővítmény (%name) betöltése közben: %error.
|
Error %error loading add-On %name. ContainerWindow Hiba a bővítmény (%name) betöltése közben: %error.
|
||||||
If you %ifYouDoAction the settings folder, %osName may not behave properly!\n\nAre you sure you want to do this? FSUtils Ha %ifYouDoAction a beállítások mappát, akkor lehet, hogy a %osName nem fog megfelelően működni!\n\nBiztosan folytatni akarja?
|
If you %ifYouDoAction the settings folder, %osName may not behave properly!\n\nAre you sure you want to do this? FSUtils Ha %ifYouDoAction a beállítások mappát, akkor lehet, hogy a %osName nem fog megfelelően működni!\n\nBiztosan folytatni akarja?
|
||||||
|
Skip all FSUtils Mindet kihagyja
|
||||||
contains SelectionWindow tartalmaz
|
contains SelectionWindow tartalmaz
|
||||||
Sorry, you can't save things at the root of your system. FilePanelPriv Sajnos nem lehet a rendszer gyökérmappájába menteni.
|
Sorry, you can't save things at the root of your system. FilePanelPriv Sajnos nem lehet a rendszer gyökérmappájába menteni.
|
||||||
Show shared volumes on Desktop SettingsView Megosztott lemezek megjelenítése az Asztalon
|
Show shared volumes on Desktop SettingsView Megosztott lemezek megjelenítése az Asztalon
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
1 japanese x-vnd.Haiku-libtracker 4204393626
|
1 japanese x-vnd.Haiku-libtracker 2004221275
|
||||||
OK WidgetAttributeText OK
|
OK WidgetAttributeText OK
|
||||||
Add-ons FilePanelPriv アドオン
|
Add-ons FilePanelPriv アドオン
|
||||||
Mount settings… ContainerWindow マウント設定…
|
Mount settings… ContainerWindow マウント設定…
|
||||||
@@ -19,6 +19,7 @@ Modified QueryPoseView 更新日時
|
|||||||
Created ContainerWindow 作成日時
|
Created ContainerWindow 作成日時
|
||||||
Error %error loading add-On %name. ContainerWindow %nameアドオンの読み込み中に%errorエラーが発生
|
Error %error loading add-On %name. ContainerWindow %nameアドオンの読み込み中に%errorエラーが発生
|
||||||
If you %ifYouDoAction the settings folder, %osName may not behave properly!\n\nAre you sure you want to do this? FSUtils settings フォルダーを%ifYouDoActionした場合、%osName が正常に動作しなくなる可能性があります。\n\n続けますか?
|
If you %ifYouDoAction the settings folder, %osName may not behave properly!\n\nAre you sure you want to do this? FSUtils settings フォルダーを%ifYouDoActionした場合、%osName が正常に動作しなくなる可能性があります。\n\n続けますか?
|
||||||
|
Skip all FSUtils すべてスキップ
|
||||||
contains SelectionWindow 含む
|
contains SelectionWindow 含む
|
||||||
Sorry, you can't save things at the root of your system. FilePanelPriv システムのルートフォルダーに保存は許可されていません。
|
Sorry, you can't save things at the root of your system. FilePanelPriv システムのルートフォルダーに保存は許可されていません。
|
||||||
Show shared volumes on Desktop SettingsView 共有ディスクをデスクトップに表示する
|
Show shared volumes on Desktop SettingsView 共有ディスクをデスクトップに表示する
|
||||||
|
|||||||
@@ -316,6 +316,16 @@
|
|||||||
entry_cache_add() function when it encounters an entry that might not yet
|
entry_cache_add() function when it encounters an entry that might not yet
|
||||||
be known to the entry cache and entry_cache_remove() when a directory
|
be known to the entry cache and entry_cache_remove() when a directory
|
||||||
entry has been removed.
|
entry has been removed.
|
||||||
|
The entry cache can also be used for negative caching. If the file system
|
||||||
|
determines that the requested entry is not present during a lookup, it can
|
||||||
|
cache this lookup failure by calling entry_cache_add_missing(). Further
|
||||||
|
calls to fs_vnode_ops::lookup() for the missing entry will then be
|
||||||
|
avoided.
|
||||||
|
Note that it is safe to call entry_cache_add() and
|
||||||
|
entry_cache_add_missing() with the same directory/name pair previously
|
||||||
|
given to either function to update a cache entry, without needing to call
|
||||||
|
entry_cache_remove() first. It is also safe to call entry_cache_remove()
|
||||||
|
for pairs that have never been added to the cache.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TODO:
|
// TODO:
|
||||||
|
|||||||
@@ -227,7 +227,7 @@ int32 button_index = alert->Go();
|
|||||||
See button_width for details.
|
See button_width for details.
|
||||||
\param spacing Determines how the buttons are spaced. Options are
|
\param spacing Determines how the buttons are spaced. Options are
|
||||||
\li \c B_EVEN_SPACING
|
\li \c B_EVEN_SPACING
|
||||||
\li \c B_OFFSET_SPACING
|
\li \c B_OFFSET_SPACING
|
||||||
|
|
||||||
See button_spacing for details.
|
See button_spacing for details.
|
||||||
\param type Constant that determines which alert icon is displayed.
|
\param type Constant that determines which alert icon is displayed.
|
||||||
@@ -408,7 +408,7 @@ int32 button_index = alert->Go();
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
\fn BTextView* BAlert::TextView() const
|
\fn BTextView* BAlert::TextView() const
|
||||||
\brief Returns a TextView containing the text of the Alert.
|
\brief Returns the Alert's TextView.
|
||||||
|
|
||||||
\since BeOS R3
|
\since BeOS R3
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -183,7 +183,9 @@ private:
|
|||||||
const BList* messageList, int argc,
|
const BList* messageList, int argc,
|
||||||
const char* const* args,
|
const char* const* args,
|
||||||
const char** environment,
|
const char** environment,
|
||||||
team_id* appTeam) const;
|
team_id* appTeam,
|
||||||
|
thread_id* appThread,
|
||||||
|
bool launchSuspended) const;
|
||||||
|
|
||||||
status_t _UpdateActiveApp(team_id team) const;
|
status_t _UpdateActiveApp(team_id team) const;
|
||||||
|
|
||||||
|
|||||||
@@ -104,6 +104,8 @@ extern status_t file_map_translate(void *map, off_t offset, size_t size,
|
|||||||
/* entry cache */
|
/* entry cache */
|
||||||
extern status_t entry_cache_add(dev_t mountID, ino_t dirID, const char* name,
|
extern status_t entry_cache_add(dev_t mountID, ino_t dirID, const char* name,
|
||||||
ino_t nodeID);
|
ino_t nodeID);
|
||||||
|
extern status_t entry_cache_add_missing(dev_t mountID, ino_t dirID,
|
||||||
|
const char* name);
|
||||||
extern status_t entry_cache_remove(dev_t mountID, ino_t dirID,
|
extern status_t entry_cache_remove(dev_t mountID, ino_t dirID,
|
||||||
const char* name);
|
const char* name);
|
||||||
|
|
||||||
|
|||||||
@@ -10,8 +10,7 @@ class BList;
|
|||||||
class BMidiLocalProducer;
|
class BMidiLocalProducer;
|
||||||
class BMidiLocalConsumer;
|
class BMidiLocalConsumer;
|
||||||
|
|
||||||
class BMidi
|
class BMidi {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
BMidi();
|
BMidi();
|
||||||
|
|||||||
@@ -15,6 +15,8 @@
|
|||||||
/* Synthesizer things */
|
/* Synthesizer things */
|
||||||
|
|
||||||
#define B_SYNTH_DIRECTORY B_SYSTEM_DATA_DIRECTORY
|
#define B_SYNTH_DIRECTORY B_SYSTEM_DATA_DIRECTORY
|
||||||
|
|
||||||
|
/* Deprecated */
|
||||||
#define B_BIG_SYNTH_FILE "synth/big_synth.sy"
|
#define B_BIG_SYNTH_FILE "synth/big_synth.sy"
|
||||||
#define B_LITTLE_SYNTH_FILE "synth/little_synth.sy"
|
#define B_LITTLE_SYNTH_FILE "synth/little_synth.sy"
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,7 @@ class BMidiProducer;
|
|||||||
|
|
||||||
namespace BPrivate { class BMidiPortGlue; }
|
namespace BPrivate { class BMidiPortGlue; }
|
||||||
|
|
||||||
class BMidiPort : public BMidi
|
class BMidiPort : public BMidi {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
BMidiPort(const char* name = NULL);
|
BMidiPort(const char* name = NULL);
|
||||||
|
|||||||
@@ -12,8 +12,7 @@ class BFile;
|
|||||||
class BList;
|
class BList;
|
||||||
class BMidiEvent;
|
class BMidiEvent;
|
||||||
|
|
||||||
class BMidiStore : public BMidi
|
class BMidiStore : public BMidi {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
BMidiStore();
|
BMidiStore();
|
||||||
|
|||||||
@@ -9,8 +9,7 @@
|
|||||||
|
|
||||||
class BSynth;
|
class BSynth;
|
||||||
|
|
||||||
class BMidiSynth : public BMidi
|
class BMidiSynth : public BMidi {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
BMidiSynth();
|
BMidiSynth();
|
||||||
|
|||||||
@@ -10,8 +10,7 @@ typedef void (*synth_file_hook)(int32 arg);
|
|||||||
|
|
||||||
class BMidiStore;
|
class BMidiStore;
|
||||||
|
|
||||||
class BMidiSynthFile : public BMidiSynth
|
class BMidiSynthFile : public BMidiSynth {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
BMidiSynthFile();
|
BMidiSynthFile();
|
||||||
|
|||||||
@@ -6,8 +6,7 @@
|
|||||||
#include <Midi.h>
|
#include <Midi.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
class BMidiText : public BMidi
|
class BMidiText : public BMidi {
|
||||||
{
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
BMidiText();
|
BMidiText();
|
||||||
|
|||||||
+11
-6
@@ -3,19 +3,19 @@
|
|||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Include guards are omitted, as assert.h is required
|
/* Include guards are only on part of the file, as assert.h is required
|
||||||
to support being included multiple times.
|
to support being included multiple times.
|
||||||
|
|
||||||
E.g. the following is required to be valid:
|
E.g. the following is required to be valid:
|
||||||
|
|
||||||
#undef NDEBUG
|
#undef NDEBUG
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
assert(0); // this assertion will be triggered
|
assert(0); // this assertion will be triggered
|
||||||
|
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
assert(0); // this assertion will not be triggered
|
assert(0); // this assertion will not be triggered
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -24,6 +24,9 @@
|
|||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
/* defining NDEBUG disables assert() functionality */
|
/* defining NDEBUG disables assert() functionality */
|
||||||
|
|
||||||
|
#ifndef _ASSERT_H_
|
||||||
|
#define _ASSERT_H_
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
@@ -40,6 +43,8 @@ extern void __assert_perror_fail(int error, const char *file,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif /* !_ASSERT_H_ */
|
||||||
|
|
||||||
#define assert(assertion) \
|
#define assert(assertion) \
|
||||||
((assertion) ? (void)0 : __assert_fail(#assertion, __FILE__, __LINE__, __PRETTY_FUNCTION__))
|
((assertion) ? (void)0 : __assert_fail(#assertion, __FILE__, __LINE__, __PRETTY_FUNCTION__))
|
||||||
|
|
||||||
|
|||||||
@@ -30,9 +30,10 @@ class BRoster::Private {
|
|||||||
|
|
||||||
status_t Launch(const char* mimeType, const entry_ref* ref,
|
status_t Launch(const char* mimeType, const entry_ref* ref,
|
||||||
const BList* messageList, int argc, const char* const* args,
|
const BList* messageList, int argc, const char* const* args,
|
||||||
const char** environment, team_id* appTeam)
|
const char** environment, team_id* appTeam,
|
||||||
|
thread_id* appThread, bool launchSuspended)
|
||||||
{ return fRoster->_LaunchApp(mimeType, ref, messageList, argc,
|
{ return fRoster->_LaunchApp(mimeType, ref, messageList, argc,
|
||||||
args, environment, appTeam); }
|
args, environment, appTeam, appThread, launchSuspended); }
|
||||||
|
|
||||||
status_t ShutDown(bool reboot, bool confirm, bool synchronous)
|
status_t ShutDown(bool reboot, bool confirm, bool synchronous)
|
||||||
{ return fRoster->_ShutDown(reboot, confirm, synchronous); }
|
{ return fRoster->_ShutDown(reboot, confirm, synchronous); }
|
||||||
|
|||||||
@@ -871,6 +871,7 @@
|
|||||||
|
|
||||||
/* entry cache */
|
/* entry cache */
|
||||||
#define entry_cache_add fssh_entry_cache_add
|
#define entry_cache_add fssh_entry_cache_add
|
||||||
|
#define entry_cache_add_missing fssh_entry_cache_add_missing
|
||||||
#define entry_cache_remove fssh_entry_cache_remove
|
#define entry_cache_remove fssh_entry_cache_remove
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|||||||
@@ -126,6 +126,8 @@ extern fssh_status_t fssh_file_map_translate(void *_map, fssh_off_t offset,
|
|||||||
extern fssh_status_t fssh_entry_cache_add(fssh_dev_t mountID,
|
extern fssh_status_t fssh_entry_cache_add(fssh_dev_t mountID,
|
||||||
fssh_ino_t dirID, const char* name,
|
fssh_ino_t dirID, const char* name,
|
||||||
fssh_ino_t nodeID);
|
fssh_ino_t nodeID);
|
||||||
|
extern fssh_status_t fssh_entry_cache_add_missing(fssh_dev_t mountID,
|
||||||
|
fssh_ino_t dirID, const char* name);
|
||||||
extern fssh_status_t fssh_entry_cache_remove(fssh_dev_t mountID,
|
extern fssh_status_t fssh_entry_cache_remove(fssh_dev_t mountID,
|
||||||
fssh_ino_t dirID, const char* name);
|
fssh_ino_t dirID, const char* name);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,168 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2004 DarkWyrm <[email protected]>
|
||||||
|
* Copyright 2013 FeemanLou
|
||||||
|
* Copyright 2014-2015 Haiku, Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Distributed under the terms of the MIT license.
|
||||||
|
*
|
||||||
|
* Originally written by DarkWyrm <[email protected]>
|
||||||
|
* Updated by FreemanLou as part of Google GCI 2013
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* DarkWyrm, [email protected]
|
||||||
|
* FeemanLou
|
||||||
|
* John Scipione, [email protected]
|
||||||
|
*/
|
||||||
|
#ifndef _ABSTRACT_SPINNER_H
|
||||||
|
#define _ABSTRACT_SPINNER_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <Control.h>
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
SPINNER_BUTTON_HORIZONTAL_ARROWS,
|
||||||
|
SPINNER_BUTTON_VERTICAL_ARROWS,
|
||||||
|
SPINNER_BUTTON_PLUS_MINUS
|
||||||
|
} spinner_button_style;
|
||||||
|
|
||||||
|
|
||||||
|
class BTextView;
|
||||||
|
class SpinnerButton;
|
||||||
|
class SpinnerTextView;
|
||||||
|
|
||||||
|
|
||||||
|
/*! BAbstractSpinner provides an input whose value can be nudged up or down
|
||||||
|
by way of two small buttons on the right.
|
||||||
|
*/
|
||||||
|
class BAbstractSpinner : public BControl {
|
||||||
|
public:
|
||||||
|
BAbstractSpinner(BRect frame, const char* name,
|
||||||
|
const char* label, BMessage* message,
|
||||||
|
uint32 resizingMode = B_FOLLOW_LEFT | B_FOLLOW_TOP,
|
||||||
|
uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
|
||||||
|
BAbstractSpinner(const char* name, const char* label,
|
||||||
|
BMessage* message,
|
||||||
|
uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
|
||||||
|
BAbstractSpinner(BMessage* data);
|
||||||
|
virtual ~BAbstractSpinner();
|
||||||
|
|
||||||
|
static BArchivable* Instantiate(BMessage* data);
|
||||||
|
virtual status_t Archive(BMessage* data, bool deep = true) const;
|
||||||
|
|
||||||
|
virtual status_t GetSupportedSuites(BMessage* message);
|
||||||
|
virtual BHandler* ResolveSpecifier(BMessage* message, int32 index,
|
||||||
|
BMessage* specifier, int32 form,
|
||||||
|
const char* property);
|
||||||
|
|
||||||
|
virtual void AttachedToWindow();
|
||||||
|
virtual void Draw(BRect updateRect);
|
||||||
|
virtual void FrameResized(float width, float height);
|
||||||
|
virtual void ValueChanged();
|
||||||
|
|
||||||
|
virtual void Decrement() = 0;
|
||||||
|
virtual void Increment() = 0;
|
||||||
|
virtual void MakeFocus(bool focus = true);
|
||||||
|
virtual void ResizeToPreferred();
|
||||||
|
virtual void SetFlags(uint32 flags);
|
||||||
|
virtual void WindowActivated(bool active);
|
||||||
|
|
||||||
|
alignment Alignment() const { return fAlignment; };
|
||||||
|
virtual void SetAlignment(alignment align);
|
||||||
|
|
||||||
|
spinner_button_style ButtonStyle() const { return fButtonStyle; };
|
||||||
|
virtual void SetButtonStyle(spinner_button_style buttonStyle);
|
||||||
|
|
||||||
|
float Divider() const { return fDivider; };
|
||||||
|
virtual void SetDivider(float position);
|
||||||
|
|
||||||
|
virtual void SetEnabled(bool enable);
|
||||||
|
|
||||||
|
virtual void SetLabel(const char* label);
|
||||||
|
|
||||||
|
virtual void SetValueFromText() = 0;
|
||||||
|
|
||||||
|
bool IsDecrementEnabled() const;
|
||||||
|
virtual void SetDecrementEnabled(bool enable);
|
||||||
|
|
||||||
|
bool IsIncrementEnabled() const;
|
||||||
|
virtual void SetIncrementEnabled(bool enable);
|
||||||
|
|
||||||
|
virtual BSize MinSize();
|
||||||
|
virtual BSize MaxSize();
|
||||||
|
virtual BSize PreferredSize();
|
||||||
|
virtual BAlignment LayoutAlignment();
|
||||||
|
|
||||||
|
BLayoutItem* CreateLabelLayoutItem();
|
||||||
|
BLayoutItem* CreateTextViewLayoutItem();
|
||||||
|
|
||||||
|
BTextView* TextView() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// FBC padding
|
||||||
|
virtual void _ReservedAbstractSpinner20();
|
||||||
|
virtual void _ReservedAbstractSpinner19();
|
||||||
|
virtual void _ReservedAbstractSpinner18();
|
||||||
|
virtual void _ReservedAbstractSpinner17();
|
||||||
|
virtual void _ReservedAbstractSpinner16();
|
||||||
|
virtual void _ReservedAbstractSpinner15();
|
||||||
|
virtual void _ReservedAbstractSpinner14();
|
||||||
|
virtual void _ReservedAbstractSpinner13();
|
||||||
|
virtual void _ReservedAbstractSpinner12();
|
||||||
|
virtual void _ReservedAbstractSpinner11();
|
||||||
|
virtual void _ReservedAbstractSpinner10();
|
||||||
|
virtual void _ReservedAbstractSpinner9();
|
||||||
|
virtual void _ReservedAbstractSpinner8();
|
||||||
|
virtual void _ReservedAbstractSpinner7();
|
||||||
|
virtual void _ReservedAbstractSpinner6();
|
||||||
|
virtual void _ReservedAbstractSpinner5();
|
||||||
|
virtual void _ReservedAbstractSpinner4();
|
||||||
|
virtual void _ReservedAbstractSpinner3();
|
||||||
|
virtual void _ReservedAbstractSpinner2();
|
||||||
|
virtual void _ReservedAbstractSpinner1();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual status_t AllArchived(BMessage* into) const;
|
||||||
|
virtual status_t AllUnarchived(const BMessage* from);
|
||||||
|
|
||||||
|
virtual void LayoutInvalidated(bool descendants);
|
||||||
|
virtual void DoLayout();
|
||||||
|
|
||||||
|
private:
|
||||||
|
class LabelLayoutItem;
|
||||||
|
class TextViewLayoutItem;
|
||||||
|
struct LayoutData;
|
||||||
|
|
||||||
|
friend class SpinnerButton;
|
||||||
|
friend class SpinnerTextView;
|
||||||
|
|
||||||
|
friend class LabelLayoutItem;
|
||||||
|
friend class TextViewLayoutItem;
|
||||||
|
friend struct LayoutData;
|
||||||
|
|
||||||
|
void _DrawLabel(BRect updateRect);
|
||||||
|
void _DrawTextView(BRect updateRect);
|
||||||
|
void _InitObject();
|
||||||
|
void _LayoutTextView();
|
||||||
|
void _UpdateFrame();
|
||||||
|
void _UpdateTextViewColors(bool enable);
|
||||||
|
void _ValidateLayoutData();
|
||||||
|
|
||||||
|
BAbstractSpinner& operator=(const BAbstractSpinner& other);
|
||||||
|
|
||||||
|
alignment fAlignment;
|
||||||
|
spinner_button_style fButtonStyle;
|
||||||
|
float fDivider;
|
||||||
|
|
||||||
|
LayoutData* fLayoutData;
|
||||||
|
|
||||||
|
SpinnerTextView* fTextView;
|
||||||
|
SpinnerButton* fIncrement;
|
||||||
|
SpinnerButton* fDecrement;
|
||||||
|
|
||||||
|
// FBC padding
|
||||||
|
uint32 _reserved[20];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // _ABSTRACT_SPINNER_H
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2015 Haiku, Inc. All rights reserved.
|
||||||
|
* Distributed under the terms of the MIT license.
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* John Scipione, jscipione@gmail.com
|
||||||
|
*/
|
||||||
|
#ifndef _DECIMAL_SPINNER_H
|
||||||
|
#define _DECIMAL_SPINNER_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <Spinner.h>
|
||||||
|
|
||||||
|
|
||||||
|
class BDecimalSpinner : public BAbstractSpinner {
|
||||||
|
public:
|
||||||
|
BDecimalSpinner(BRect frame, const char* name,
|
||||||
|
const char* label, BMessage* message,
|
||||||
|
uint32 resizingMode = B_FOLLOW_LEFT | B_FOLLOW_TOP,
|
||||||
|
uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
|
||||||
|
BDecimalSpinner(const char* name, const char* label,
|
||||||
|
BMessage* message,
|
||||||
|
uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
|
||||||
|
BDecimalSpinner(BMessage* data);
|
||||||
|
virtual ~BDecimalSpinner();
|
||||||
|
|
||||||
|
static BArchivable* Instantiate(BMessage* data);
|
||||||
|
virtual status_t Archive(BMessage* data, bool deep = true) const;
|
||||||
|
|
||||||
|
virtual status_t GetSupportedSuites(BMessage* message);
|
||||||
|
|
||||||
|
virtual void AttachedToWindow();
|
||||||
|
|
||||||
|
virtual void Increment();
|
||||||
|
virtual void Decrement();
|
||||||
|
|
||||||
|
virtual void SetEnabled(bool enable);
|
||||||
|
|
||||||
|
uint32 Precision() const { return fPrecision; };
|
||||||
|
virtual void SetPrecision(uint32 precision) { fPrecision = precision; };
|
||||||
|
|
||||||
|
double MaxValue() const { return fMaxValue; }
|
||||||
|
virtual void SetMaxValue(double max);
|
||||||
|
|
||||||
|
double MinValue() const { return fMinValue; }
|
||||||
|
virtual void SetMinValue(double min);
|
||||||
|
|
||||||
|
void Range(double* min, double* max);
|
||||||
|
virtual void SetRange(double min, double max);
|
||||||
|
|
||||||
|
double Step() const { return fStep; }
|
||||||
|
virtual void SetStep(double step) { fStep = step; };
|
||||||
|
|
||||||
|
double Value() const { return fValue; };
|
||||||
|
virtual void SetValue(int32 value);
|
||||||
|
virtual void SetValue(double value);
|
||||||
|
virtual void SetValueFromText();
|
||||||
|
|
||||||
|
private:
|
||||||
|
// FBC padding
|
||||||
|
virtual void _ReservedDecimalSpinner20();
|
||||||
|
virtual void _ReservedDecimalSpinner19();
|
||||||
|
virtual void _ReservedDecimalSpinner18();
|
||||||
|
virtual void _ReservedDecimalSpinner17();
|
||||||
|
virtual void _ReservedDecimalSpinner16();
|
||||||
|
virtual void _ReservedDecimalSpinner15();
|
||||||
|
virtual void _ReservedDecimalSpinner14();
|
||||||
|
virtual void _ReservedDecimalSpinner13();
|
||||||
|
virtual void _ReservedDecimalSpinner12();
|
||||||
|
virtual void _ReservedDecimalSpinner11();
|
||||||
|
virtual void _ReservedDecimalSpinner10();
|
||||||
|
virtual void _ReservedDecimalSpinner9();
|
||||||
|
virtual void _ReservedDecimalSpinner8();
|
||||||
|
virtual void _ReservedDecimalSpinner7();
|
||||||
|
virtual void _ReservedDecimalSpinner6();
|
||||||
|
virtual void _ReservedDecimalSpinner5();
|
||||||
|
virtual void _ReservedDecimalSpinner4();
|
||||||
|
virtual void _ReservedDecimalSpinner3();
|
||||||
|
virtual void _ReservedDecimalSpinner2();
|
||||||
|
virtual void _ReservedDecimalSpinner1();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void _InitObject();
|
||||||
|
|
||||||
|
double fMinValue;
|
||||||
|
double fMaxValue;
|
||||||
|
double fStep;
|
||||||
|
double fValue;
|
||||||
|
uint32 fPrecision;
|
||||||
|
|
||||||
|
// FBC padding
|
||||||
|
uint32 _reserved[20];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // _DECIMAL_SPINNER_H
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2015 Haiku, Inc. All rights reserved.
|
||||||
|
* Distributed under the terms of the MIT license.
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* John Scipione, jscipione@gmail.com
|
||||||
|
*/
|
||||||
|
#ifndef _SPINNER_H
|
||||||
|
#define _SPINNER_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <AbstractSpinner.h>
|
||||||
|
|
||||||
|
|
||||||
|
class BSpinner : public BAbstractSpinner {
|
||||||
|
public:
|
||||||
|
BSpinner(BRect frame, const char* name,
|
||||||
|
const char* label, BMessage* message,
|
||||||
|
uint32 resizingMode = B_FOLLOW_LEFT | B_FOLLOW_TOP,
|
||||||
|
uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
|
||||||
|
BSpinner(const char* name, const char* label,
|
||||||
|
BMessage* message,
|
||||||
|
uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
|
||||||
|
BSpinner(BMessage* data);
|
||||||
|
virtual ~BSpinner();
|
||||||
|
|
||||||
|
static BArchivable* Instantiate(BMessage* data);
|
||||||
|
virtual status_t Archive(BMessage* data, bool deep = true) const;
|
||||||
|
|
||||||
|
virtual void Increment();
|
||||||
|
virtual void Decrement();
|
||||||
|
|
||||||
|
virtual status_t GetSupportedSuites(BMessage* message);
|
||||||
|
|
||||||
|
virtual void AttachedToWindow();
|
||||||
|
|
||||||
|
virtual void SetEnabled(bool enable);
|
||||||
|
|
||||||
|
int32 MaxValue() const { return fMaxValue; }
|
||||||
|
virtual void SetMaxValue(int32 max);
|
||||||
|
|
||||||
|
int32 MinValue() const { return fMinValue; }
|
||||||
|
virtual void SetMinValue(int32 min);
|
||||||
|
|
||||||
|
void Range(int32* min, int32* max);
|
||||||
|
virtual void SetRange(int32 min, int32 max);
|
||||||
|
|
||||||
|
int32 Value() const { return fValue; };
|
||||||
|
virtual void SetValue(int32 value);
|
||||||
|
virtual void SetValueFromText();
|
||||||
|
|
||||||
|
private:
|
||||||
|
// FBC padding
|
||||||
|
virtual void _ReservedSpinner20();
|
||||||
|
virtual void _ReservedSpinner19();
|
||||||
|
virtual void _ReservedSpinner18();
|
||||||
|
virtual void _ReservedSpinner17();
|
||||||
|
virtual void _ReservedSpinner16();
|
||||||
|
virtual void _ReservedSpinner15();
|
||||||
|
virtual void _ReservedSpinner14();
|
||||||
|
virtual void _ReservedSpinner13();
|
||||||
|
virtual void _ReservedSpinner12();
|
||||||
|
virtual void _ReservedSpinner11();
|
||||||
|
virtual void _ReservedSpinner10();
|
||||||
|
virtual void _ReservedSpinner9();
|
||||||
|
virtual void _ReservedSpinner8();
|
||||||
|
virtual void _ReservedSpinner7();
|
||||||
|
virtual void _ReservedSpinner6();
|
||||||
|
virtual void _ReservedSpinner5();
|
||||||
|
virtual void _ReservedSpinner4();
|
||||||
|
virtual void _ReservedSpinner3();
|
||||||
|
virtual void _ReservedSpinner2();
|
||||||
|
virtual void _ReservedSpinner1();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void _InitObject();
|
||||||
|
|
||||||
|
int32 fMinValue;
|
||||||
|
int32 fMaxValue;
|
||||||
|
int32 fValue;
|
||||||
|
|
||||||
|
// FBC padding
|
||||||
|
uint32 _reserved[20];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // _SPINNER_H
|
||||||
@@ -302,7 +302,7 @@ thread_is_blocked(Thread* thread)
|
|||||||
especially with a client lock that uses the thread blocking API. After a
|
especially with a client lock that uses the thread blocking API. After a
|
||||||
blocked thread has been interrupted or the the time out occurred it cannot
|
blocked thread has been interrupted or the the time out occurred it cannot
|
||||||
acquire the client lock (or any other lock using the thread blocking API)
|
acquire the client lock (or any other lock using the thread blocking API)
|
||||||
without first making sure that the thread doesn't still appears to be
|
without first making sure that the thread doesn't still appear to be
|
||||||
waiting to other client code. Otherwise another thread could try to unblock
|
waiting to other client code. Otherwise another thread could try to unblock
|
||||||
it which could erroneously unblock the thread while already waiting on the
|
it which could erroneously unblock the thread while already waiting on the
|
||||||
client lock. So usually when interruptions or timeouts are possible a
|
client lock. So usually when interruptions or timeouts are possible a
|
||||||
|
|||||||
@@ -453,7 +453,7 @@ struct Thread : TeamThreadIteratorEntry<thread_id>, KernelReferenceable {
|
|||||||
// modified by the thread itself and
|
// modified by the thread itself and
|
||||||
// thus freely readable by it
|
// thus freely readable by it
|
||||||
|
|
||||||
void (*cancel_function)(int);
|
void (*cancel_function)(int);
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
uint8 parameters[SYSCALL_RESTART_PARAMETER_SIZE];
|
uint8 parameters[SYSCALL_RESTART_PARAMETER_SIZE];
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ status_t __flatten_process_args(const char* const* args, int32 argCount,
|
|||||||
char*** _flatArgs, size_t* _flatSize);
|
char*** _flatArgs, size_t* _flatSize);
|
||||||
void _call_atexit_hooks_for_range(addr_t start, addr_t size);
|
void _call_atexit_hooks_for_range(addr_t start, addr_t size);
|
||||||
void __init_env(const struct user_space_program_args *args);
|
void __init_env(const struct user_space_program_args *args);
|
||||||
|
void __init_env_post_heap(void);
|
||||||
status_t __init_heap(void);
|
status_t __init_heap(void);
|
||||||
void __init_heap_post_env(void);
|
|
||||||
void __heap_terminate_after(void);
|
void __heap_terminate_after(void);
|
||||||
|
|
||||||
void __init_time(addr_t commPageTable);
|
void __init_time(addr_t commPageTable);
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ public:
|
|||||||
BMediaRosterEx(status_t* out_error);
|
BMediaRosterEx(status_t* out_error);
|
||||||
virtual ~BMediaRosterEx();
|
virtual ~BMediaRosterEx();
|
||||||
|
|
||||||
|
virtual void Quit();
|
||||||
|
|
||||||
status_t SaveNodeConfiguration(BMediaNode* node);
|
status_t SaveNodeConfiguration(BMediaNode* node);
|
||||||
status_t LoadNodeConfiguration(media_addon_id addonid,
|
status_t LoadNodeConfiguration(media_addon_id addonid,
|
||||||
int32 flavorid, BMessage* out_msg);
|
int32 flavorid, BMessage* out_msg);
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2015 Haiku, Inc. All rights reserved.
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MIDI_SETTINGS_PRIVATE_H_
|
||||||
|
#define MIDI_SETTINGS_PRIVATE_H_
|
||||||
|
|
||||||
|
#include <StorageDefs.h>
|
||||||
|
#include <SupportDefs.h>
|
||||||
|
|
||||||
|
namespace BPrivate {
|
||||||
|
|
||||||
|
struct midi_settings {
|
||||||
|
char soundfont_file[B_FILE_NAME_LENGTH];
|
||||||
|
};
|
||||||
|
|
||||||
|
status_t read_midi_settings(struct midi_settings* settings);
|
||||||
|
status_t write_midi_settings(struct midi_settings settings);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* MIDI_SETTINGS_PRIVATE_H_ */
|
||||||
@@ -233,21 +233,21 @@ template<class Element, class ElementVec>
|
|||||||
int32
|
int32
|
||||||
OpenHashTable<Element, ElementVec>::ArraySize() const
|
OpenHashTable<Element, ElementVec>::ArraySize() const
|
||||||
{
|
{
|
||||||
return fArraySize;
|
return fArraySize;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class Element, class ElementVec>
|
template<class Element, class ElementVec>
|
||||||
int32
|
int32
|
||||||
OpenHashTable<Element, ElementVec>::VectorSize() const
|
OpenHashTable<Element, ElementVec>::VectorSize() const
|
||||||
{
|
{
|
||||||
return fElementVector->Size();
|
return fElementVector->Size();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class Element, class ElementVec>
|
template<class Element, class ElementVec>
|
||||||
int32
|
int32
|
||||||
OpenHashTable<Element, ElementVec>::CountElements() const
|
OpenHashTable<Element, ElementVec>::CountElements() const
|
||||||
{
|
{
|
||||||
return fElementCount;
|
return fElementCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -29,20 +29,21 @@ enum {
|
|||||||
CAP_SALP = (1 << 26), // Supports Aggressive Link Power Management
|
CAP_SALP = (1 << 26), // Supports Aggressive Link Power Management
|
||||||
CAP_SAL = (1 << 25), // Supports Activity LED
|
CAP_SAL = (1 << 25), // Supports Activity LED
|
||||||
CAP_SCLO = (1 << 24), // Supports Command List Override
|
CAP_SCLO = (1 << 24), // Supports Command List Override
|
||||||
CAP_ISS_MASK = 0xf, // Interface Speed Support
|
CAP_ISS_MASK = 0xf, // Interface Speed Support
|
||||||
CAP_ISS_SHIFT = 20,
|
CAP_ISS_SHIFT = 20,
|
||||||
CAP_SNZO = (1 << 19), // Supports Non-Zero DMA Offsets
|
CAP_SNZO = (1 << 19), // Supports Non-Zero DMA Offsets
|
||||||
CAP_SAM = (1 << 18), // Supports AHCI mode only
|
CAP_SAM = (1 << 18), // Supports AHCI mode only
|
||||||
CAP_SPM = (1 << 17), // Supports Port Multiplier
|
CAP_SPM = (1 << 17), // Supports Port Multiplier
|
||||||
CAP_FBSS = (1 << 16), // FIS-based Switching Supported
|
CAP_FBSS = (1 << 16), // FIS-based Switching Supported
|
||||||
CAP_PMD = (1 << 15), // PIO Multiple DRQ Block
|
CAP_PMD = (1 << 15), // PIO Multiple DRQ Block
|
||||||
CAP_SSC = (1 << 14), // Slumber State Capable
|
CAP_SSC = (1 << 14), // Slumber State Capable
|
||||||
CAP_PSC = (1 << 13), // Partial State Capable
|
CAP_PSC = (1 << 13), // Partial State Capable
|
||||||
CAP_NCS_MASK = 0x1f, // Number of Command Slots (zero-based number)
|
CAP_NCS_MASK = 0x1f, // Number of Command Slots
|
||||||
|
// (zero-based number)
|
||||||
CAP_NCS_SHIFT = 8,
|
CAP_NCS_SHIFT = 8,
|
||||||
CAP_CCCS = (1 << 7), // Command Completion Coalescing Supported
|
CAP_CCCS = (1 << 7), // Command Completion Coalescing Supported
|
||||||
CAP_EMS = (1 << 6), // Enclosure Management Supported
|
CAP_EMS = (1 << 6), // Enclosure Management Supported
|
||||||
CAP_SXS = (1 << 5), // Supports External SATA
|
CAP_SXS = (1 << 5), // Supports External SATA
|
||||||
CAP_NP_MASK = 0x1f, // Number of Ports (zero-based number)
|
CAP_NP_MASK = 0x1f, // Number of Ports (zero-based number)
|
||||||
CAP_NP_SHIFT = 0,
|
CAP_NP_SHIFT = 0,
|
||||||
};
|
};
|
||||||
@@ -73,19 +74,40 @@ enum {
|
|||||||
INT_SDB = (1 << 3), // Set Device Bits Interrupt/Enable
|
INT_SDB = (1 << 3), // Set Device Bits Interrupt/Enable
|
||||||
INT_DS = (1 << 2), // DMA Setup FIS Interrupt/Enable
|
INT_DS = (1 << 2), // DMA Setup FIS Interrupt/Enable
|
||||||
INT_PS = (1 << 1), // PIO Setup FIS Interrupt/Enable
|
INT_PS = (1 << 1), // PIO Setup FIS Interrupt/Enable
|
||||||
INT_DHR = (1 << 0), // Device to Host Register FIS Interrupt/Enable
|
INT_DHR = (1 << 0), // Device to Host Register FIS
|
||||||
|
// Interrupt/Enable
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Device Detection Initialization
|
||||||
|
#define SATA_CONTROL_DET_SHIFT 0
|
||||||
|
#define SATA_CONTROL_DET_MASK 0x0000000f
|
||||||
|
|
||||||
|
#define DET_NO_INITIALIZATION 0x0
|
||||||
|
#define DET_INITIALIZATION 0x1
|
||||||
|
|
||||||
|
// Speed Allowed
|
||||||
|
#define SATA_CONTROL_SPD_SHIFT 4
|
||||||
|
#define SATA_CONTROL_SPD_MASK 0x000000f0
|
||||||
|
|
||||||
|
// Interface Power Management Transitions Allowed
|
||||||
|
#define SATA_CONTROL_IPM_SHIFT 8
|
||||||
|
#define SATA_CONTROL_IPM_MASK 0x00000f00
|
||||||
|
|
||||||
|
#define IPM_TRANSITIONS_TO_PARTIAL_DISABLED 0x1
|
||||||
|
#define IPM_TRANSITIONS_TO_SLUMBER_DISABLED 0x2
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint32 clb; // Command List Base Address (alignment 1024 byte)
|
uint32 clb; // Command List Base Address
|
||||||
|
// (alignment 1024 byte)
|
||||||
uint32 clbu; // Command List Base Address Upper 32-Bits
|
uint32 clbu; // Command List Base Address Upper 32-Bits
|
||||||
uint32 fb; // FIS Base Address (alignment 256 byte)
|
uint32 fb; // FIS Base Address (alignment 256 byte)
|
||||||
uint32 fbu; // FIS Base Address Upper 32-Bits
|
uint32 fbu; // FIS Base Address Upper 32-Bits
|
||||||
uint32 is; // Interrupt Status **RWC**
|
uint32 is; // Interrupt Status **RWC**
|
||||||
uint32 ie; // Interrupt Enable
|
uint32 ie; // Interrupt Enable
|
||||||
uint32 cmd; // Command and Status
|
uint32 cmd; // Command and Status
|
||||||
uint32 res1; // Reserved
|
uint32 res1; // Reserved
|
||||||
uint32 tfd; // Task File Data
|
uint32 tfd; // Task File Data
|
||||||
uint32 sig; // Signature
|
uint32 sig; // Signature
|
||||||
uint32 ssts; // Serial ATA Status (SCR0: SStatus)
|
uint32 ssts; // Serial ATA Status (SCR0: SStatus)
|
||||||
@@ -102,9 +124,9 @@ typedef struct {
|
|||||||
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
PORT_CMD_ICC_ACTIVE = (1 << 28), // Interface Communication control
|
PORT_CMD_ICC_ACTIVE = (1 << 28), // Interface Communication control
|
||||||
PORT_CMD_ICC_SLUMBER = (6 << 28), // Interface Communication control
|
PORT_CMD_ICC_SLUMBER = (6 << 28), // Interface Communication control
|
||||||
PORT_CMD_ICC_MASK = (0xf<<28), // Interface Communication control
|
PORT_CMD_ICC_MASK = (0xf<<28), // Interface Communication control
|
||||||
PORT_CMD_ATAPI = (1 << 24), // Device is ATAPI
|
PORT_CMD_ATAPI = (1 << 24), // Device is ATAPI
|
||||||
PORT_CMD_CR = (1 << 15), // Command List Running (DMA active)
|
PORT_CMD_CR = (1 << 15), // Command List Running (DMA active)
|
||||||
PORT_CMD_FR = (1 << 14), // FIS Receive Running
|
PORT_CMD_FR = (1 << 14), // FIS Receive Running
|
||||||
@@ -136,17 +158,17 @@ enum {
|
|||||||
PORT_INT_DHR = (1 << 0), // Device to Host Register FIS Interrupt
|
PORT_INT_DHR = (1 << 0), // Device to Host Register FIS Interrupt
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PORT_INT_ERROR (PORT_INT_TFE | PORT_INT_HBF | PORT_INT_HBD \
|
#define PORT_INT_ERROR (PORT_INT_TFE | PORT_INT_HBF | PORT_INT_HBD \
|
||||||
| PORT_INT_IF | PORT_INT_INF | PORT_INT_OF \
|
| PORT_INT_IF | PORT_INT_INF | PORT_INT_OF \
|
||||||
| PORT_INT_IPM | PORT_INT_PRC | PORT_INT_PC \
|
| PORT_INT_IPM | PORT_INT_PRC | PORT_INT_PC \
|
||||||
| PORT_INT_UF)
|
| PORT_INT_UF)
|
||||||
|
|
||||||
#define PORT_INT_MASK (PORT_INT_ERROR | PORT_INT_DP | PORT_INT_SDB \
|
#define PORT_INT_MASK (PORT_INT_ERROR | PORT_INT_DP | PORT_INT_SDB \
|
||||||
| PORT_INT_DS | PORT_INT_PS | PORT_INT_DHR)
|
| PORT_INT_DS | PORT_INT_PS | PORT_INT_DHR)
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
ATA_BSY = 0x80,
|
ATA_BSY = 0x80,
|
||||||
ATA_DF = 0x20,
|
ATA_DF = 0x20,
|
||||||
ATA_DRQ = 0x08,
|
ATA_DRQ = 0x08,
|
||||||
ATA_ERR = 0x01,
|
ATA_ERR = 0x01,
|
||||||
};
|
};
|
||||||
@@ -154,11 +176,11 @@ enum {
|
|||||||
|
|
||||||
enum {
|
enum {
|
||||||
PORT_FBS_DWE_SHIFT = 16, // Device With Error
|
PORT_FBS_DWE_SHIFT = 16, // Device With Error
|
||||||
PORT_FBS_DWE_MASK = 0xf,
|
PORT_FBS_DWE_MASK = 0xf,
|
||||||
PORT_FBS_ADO_SHIFT = 12, // Active Device Optimization
|
PORT_FBS_ADO_SHIFT = 12, // Active Device Optimization
|
||||||
PORT_FBS_ADO_MASK = 0xf,
|
PORT_FBS_ADO_MASK = 0xf,
|
||||||
PORT_FBS_DEV_SHIFT = 8, // Device To Issue
|
PORT_FBS_DEV_SHIFT = 8, // Device To Issue
|
||||||
PORT_FBS_DEV_MASK = 0xf,
|
PORT_FBS_DEV_MASK = 0xf,
|
||||||
PORT_FBS_SDE = 0x04, // Single Device Error
|
PORT_FBS_SDE = 0x04, // Single Device Error
|
||||||
PORT_FBS_DEC = 0x02, // Device Error Clear
|
PORT_FBS_DEC = 0x02, // Device Error Clear
|
||||||
PORT_FBS_EN = 0x01, // Enable
|
PORT_FBS_EN = 0x01, // Enable
|
||||||
@@ -167,7 +189,7 @@ enum {
|
|||||||
|
|
||||||
enum {
|
enum {
|
||||||
PORT_DEVSLP_DM_SHIFT = 25, // DITO Multiplier
|
PORT_DEVSLP_DM_SHIFT = 25, // DITO Multiplier
|
||||||
PORT_DEVSLP_DM_MASK = 0xf,
|
PORT_DEVSLP_DM_MASK = 0xf,
|
||||||
PORT_DEVSLP_DITO_SHIFT = 15, // Device Sleep Idle Timeout
|
PORT_DEVSLP_DITO_SHIFT = 15, // Device Sleep Idle Timeout
|
||||||
PORT_DEVSLP_DITO_MASK = 0x3ff,
|
PORT_DEVSLP_DITO_MASK = 0x3ff,
|
||||||
PORT_DEVSLP_MDAT_SHIFT = 10, // Minimum Device Sleep Assertion Time
|
PORT_DEVSLP_MDAT_SHIFT = 10, // Minimum Device Sleep Assertion Time
|
||||||
@@ -180,12 +202,13 @@ enum {
|
|||||||
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
CAP2_DESO = (1 << 5), // DevSleep Entrance from Slumber Only
|
CAP2_DESO = (1 << 5), // DevSleep Entrance from Slumber Only
|
||||||
CAP2_SADM = (1 << 4), // Supports Aggressive Device Sleep Management
|
CAP2_SADM = (1 << 4), // Supports Aggressive Device Sleep
|
||||||
CAP2_SDS = (1 << 3), // Supports Device Sleep
|
// Management
|
||||||
CAP2_APST = (1 << 2), // Automatic Partial to Slumber Transitions
|
CAP2_SDS = (1 << 3), // Supports Device Sleep
|
||||||
CAP2_NVMP = (1 << 1), // NVMHCI Present
|
CAP2_APST = (1 << 2), // Automatic Partial to Slumber Transitions
|
||||||
CAP2_BOH = (1 << 0), // BIOS/OS Handoff
|
CAP2_NVMP = (1 << 1), // NVMHCI Present
|
||||||
|
CAP2_BOH = (1 << 0), // BIOS/OS Handoff
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -221,21 +244,22 @@ typedef struct {
|
|||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
union {
|
union {
|
||||||
struct {
|
struct {
|
||||||
uint16 cfl : 5; // command FIS length
|
uint16 cfl : 5; // command FIS length
|
||||||
uint16 a : 1; // ATAPI
|
uint16 a : 1; // ATAPI
|
||||||
uint16 w : 1; // Write
|
uint16 w : 1; // Write
|
||||||
uint16 p : 1; // Prefetchable
|
uint16 p : 1; // Prefetchable
|
||||||
uint16 r : 1; // Reset
|
uint16 r : 1; // Reset
|
||||||
uint16 b : 1; // Build In Self Test
|
uint16 b : 1; // Build In Self Test
|
||||||
uint16 c : 1; // Clear Busy upon R_OK
|
uint16 c : 1; // Clear Busy upon R_OK
|
||||||
uint16 : 1;
|
uint16 : 1;
|
||||||
uint16 pmp : 4; // Port Multiplier Port
|
uint16 pmp : 4; // Port Multiplier Port
|
||||||
uint16 prdtl; // physical region description table length;
|
uint16 prdtl; // physical region description table
|
||||||
} _PACKED;
|
// length;
|
||||||
uint32 prdtl_flags_cfl;
|
} _PACKED;
|
||||||
} _PACKED;
|
uint32 prdtl_flags_cfl;
|
||||||
|
} _PACKED;
|
||||||
uint32 prdbc; // PRD Byte Count
|
uint32 prdbc; // PRD Byte Count
|
||||||
uint32 ctba; // command table desciptor base address
|
uint32 ctba; // command table desciptor base address
|
||||||
// (alignment 128 byte)
|
// (alignment 128 byte)
|
||||||
@@ -251,16 +275,16 @@ typedef struct {
|
|||||||
// 1 - C bit (0x80)
|
// 1 - C bit (0x80)
|
||||||
// 2 - Command
|
// 2 - Command
|
||||||
// 3 - Features
|
// 3 - Features
|
||||||
// 4 - Sector Number (LBA Low, bits 0-7)
|
// 4 - Sector Number (LBA Low, bits 0-7)
|
||||||
// 5 - Cylinder Low (LBA Mid, bits 8-15)
|
// 5 - Cylinder Low (LBA Mid, bits 8-15)
|
||||||
// 6 - Cylinder High (LBA High, bits 16-23)
|
// 6 - Cylinder High (LBA High, bits 16-23)
|
||||||
// 7 - Device / Head (for 28-bit LBA commands, bits 24-27)
|
// 7 - Device / Head (for 28-bit LBA commands, bits 24-27)
|
||||||
// 8 - Sector Number expanded (LBA Low-previous, bits 24-31)
|
// 8 - Sector Number expanded (LBA Low-previous, bits 24-31)
|
||||||
// 9 - Cylinder Low expanded (LBA Mid-previous, bits 32-39)
|
// 9 - Cylinder Low expanded (LBA Mid-previous, bits 32-39)
|
||||||
// 10 - Cylinder High expanded (LBA High-previous, bits 40-47)
|
// 10 - Cylinder High expanded (LBA High-previous, bits 40-47)
|
||||||
// 11 - Features expanded
|
// 11 - Features expanded
|
||||||
// 12 - Sector Count (Sector count, bits 0-7)
|
// 12 - Sector Count (Sector count, bits 0-7)
|
||||||
// 13 - Sector Count expanded (Sector count, bits 8-15)
|
// 13 - Sector Count expanded (Sector count, bits 8-15)
|
||||||
// 14 - Reserved (0)
|
// 14 - Reserved (0)
|
||||||
// 15 - Control
|
// 15 - Control
|
||||||
// 16 - Reserved (0)
|
// 16 - Reserved (0)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2008-2014 Haiku, Inc. All rights reserved.
|
* Copyright 2008-2015 Haiku, Inc. All rights reserved.
|
||||||
* Copyright 2007-2009, Marcus Overhagen. All rights reserved.
|
* Copyright 2007-2009, Marcus Overhagen. All rights reserved.
|
||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
@@ -110,7 +110,9 @@ AHCIPort::Init1()
|
|||||||
// prdt follows after command table
|
// prdt follows after command table
|
||||||
|
|
||||||
// disable transitions to partial or slumber state
|
// disable transitions to partial or slumber state
|
||||||
fRegs->sctl |= 0x300;
|
fRegs->sctl = (fRegs->sctl & ~SATA_CONTROL_IPM_MASK)
|
||||||
|
| (IPM_TRANSITIONS_TO_PARTIAL_DISABLED
|
||||||
|
| IPM_TRANSITIONS_TO_SLUMBER_DISABLED) << SATA_CONTROL_IPM_SHIFT;
|
||||||
|
|
||||||
// clear IRQ status bits
|
// clear IRQ status bits
|
||||||
fRegs->is = fRegs->is;
|
fRegs->is = fRegs->is;
|
||||||
@@ -156,7 +158,12 @@ AHCIPort::Init2()
|
|||||||
TRACE("is 0x%08" B_PRIx32 "\n", fRegs->is);
|
TRACE("is 0x%08" B_PRIx32 "\n", fRegs->is);
|
||||||
TRACE("cmd 0x%08" B_PRIx32 "\n", fRegs->cmd);
|
TRACE("cmd 0x%08" B_PRIx32 "\n", fRegs->cmd);
|
||||||
TRACE("ssts 0x%08" B_PRIx32 "\n", fRegs->ssts);
|
TRACE("ssts 0x%08" B_PRIx32 "\n", fRegs->ssts);
|
||||||
TRACE("sctl 0x%08" B_PRIx32 "\n", fRegs->sctl);
|
TRACE("sctl.ipm 0x%02" B_PRIx32 "\n",
|
||||||
|
(fRegs->sctl & SATA_CONTROL_IPM_MASK) >> SATA_CONTROL_IPM_SHIFT);
|
||||||
|
TRACE("sctl.spd 0x%02" B_PRIx32 "\n",
|
||||||
|
(fRegs->sctl & SATA_CONTROL_SPD_MASK) >> SATA_CONTROL_SPD_SHIFT);
|
||||||
|
TRACE("sctl.det 0x%02" B_PRIx32 "\n",
|
||||||
|
(fRegs->sctl & SATA_CONTROL_DET_MASK) >> SATA_CONTROL_DET_SHIFT);
|
||||||
TRACE("serr 0x%08" B_PRIx32 "\n", fRegs->serr);
|
TRACE("serr 0x%08" B_PRIx32 "\n", fRegs->serr);
|
||||||
TRACE("sact 0x%08" B_PRIx32 "\n", fRegs->sact);
|
TRACE("sact 0x%08" B_PRIx32 "\n", fRegs->sact);
|
||||||
TRACE("tfd 0x%08" B_PRIx32 "\n", fRegs->tfd);
|
TRACE("tfd 0x%08" B_PRIx32 "\n", fRegs->tfd);
|
||||||
@@ -208,23 +215,13 @@ AHCIPort::Uninit()
|
|||||||
void
|
void
|
||||||
AHCIPort::ResetDevice()
|
AHCIPort::ResetDevice()
|
||||||
{
|
{
|
||||||
if (fRegs->cmd & PORT_CMD_ST)
|
|
||||||
TRACE("AHCIPort::ResetDevice PORT_CMD_ST set, behaviour undefined\n");
|
|
||||||
|
|
||||||
// perform a hard reset
|
// perform a hard reset
|
||||||
fRegs->sctl = (fRegs->sctl & ~0xf) | 1;
|
_HardReset();
|
||||||
FlushPostedWrites();
|
|
||||||
spin(1100);
|
|
||||||
fRegs->sctl &= ~0xf;
|
|
||||||
FlushPostedWrites();
|
|
||||||
|
|
||||||
if (wait_until_set(&fRegs->ssts, 0x1, 100000) < B_OK) {
|
if (wait_until_set(&fRegs->ssts, 0x1, 100000) < B_OK)
|
||||||
TRACE("AHCIPort::ResetDevice port %d no device detected\n", fIndex);
|
TRACE("AHCIPort::ResetDevice port %d no device detected\n", fIndex);
|
||||||
}
|
|
||||||
|
|
||||||
// clear error bits
|
_ClearErrorRegister();
|
||||||
fRegs->serr = fRegs->serr;
|
|
||||||
FlushPostedWrites();
|
|
||||||
|
|
||||||
if (fRegs->ssts & 1) {
|
if (fRegs->ssts & 1) {
|
||||||
if (wait_until_set(&fRegs->ssts, 0x3, 500000) < B_OK) {
|
if (wait_until_set(&fRegs->ssts, 0x3, 500000) < B_OK) {
|
||||||
@@ -233,9 +230,7 @@ AHCIPort::ResetDevice()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// clear error bits
|
_ClearErrorRegister();
|
||||||
fRegs->serr = fRegs->serr;
|
|
||||||
FlushPostedWrites();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -364,10 +359,15 @@ AHCIPort::InterruptErrorHandler(uint32 is)
|
|||||||
TRACE("AHCIPort::InterruptErrorHandler port %d, fCommandsActive 0x%08"
|
TRACE("AHCIPort::InterruptErrorHandler port %d, fCommandsActive 0x%08"
|
||||||
B_PRIx32 ", is 0x%08" B_PRIx32 ", ci 0x%08" B_PRIx32 "\n", fIndex,
|
B_PRIx32 ", is 0x%08" B_PRIx32 ", ci 0x%08" B_PRIx32 "\n", fIndex,
|
||||||
fCommandsActive, is, ci);
|
fCommandsActive, is, ci);
|
||||||
|
TRACE("ssts 0x%08" B_PRIx32 "\n", fRegs->ssts);
|
||||||
TRACE("ssts 0x%08" B_PRIx32 ", sctl 0x%08" B_PRIx32 ", serr 0x%08"
|
TRACE("sctl.ipm 0x%02" B_PRIx32 "\n",
|
||||||
B_PRIx32 ", sact 0x%08" B_PRIx32 "\n",
|
(fRegs->sctl & SATA_CONTROL_IPM_MASK) >> SATA_CONTROL_IPM_SHIFT);
|
||||||
fRegs->ssts, fRegs->sctl, fRegs->serr, fRegs->sact);
|
TRACE("sctl.spd 0x%02" B_PRIx32 "\n",
|
||||||
|
(fRegs->sctl & SATA_CONTROL_SPD_MASK) >> SATA_CONTROL_SPD_SHIFT);
|
||||||
|
TRACE("sctl.det 0x%02" B_PRIx32 "\n",
|
||||||
|
(fRegs->sctl & SATA_CONTROL_DET_MASK) >> SATA_CONTROL_DET_SHIFT);
|
||||||
|
TRACE("serr 0x%08" B_PRIx32 "\n", fRegs->serr);
|
||||||
|
TRACE("sact 0x%08" B_PRIx32 "\n", fRegs->sact);
|
||||||
}
|
}
|
||||||
|
|
||||||
// read and clear SError
|
// read and clear SError
|
||||||
@@ -413,7 +413,13 @@ AHCIPort::InterruptErrorHandler(uint32 is)
|
|||||||
}
|
}
|
||||||
if (is & PORT_INT_PC) {
|
if (is & PORT_INT_PC) {
|
||||||
TRACE("Port Connect Change\n");
|
TRACE("Port Connect Change\n");
|
||||||
// fResetPort = true;
|
// Spec v1.3, §6.2.2.3 Recovery of Unsolicited COMINIT
|
||||||
|
|
||||||
|
// perform a hard reset
|
||||||
|
_HardReset();
|
||||||
|
|
||||||
|
// clear error bits to clear PxSERR.DIAG.X
|
||||||
|
_ClearErrorRegister();
|
||||||
}
|
}
|
||||||
if (is & PORT_INT_UF) {
|
if (is & PORT_INT_UF) {
|
||||||
TRACE("Unknown FIS\n");
|
TRACE("Unknown FIS\n");
|
||||||
@@ -1224,3 +1230,31 @@ AHCIPort::ScsiGetRestrictions(bool* isATAPI, bool* noAutoSense,
|
|||||||
"maxBlocks %" B_PRIu32 "\n", fIndex, *isATAPI, *noAutoSense,
|
"maxBlocks %" B_PRIu32 "\n", fIndex, *isATAPI, *noAutoSense,
|
||||||
*maxBlocks);
|
*maxBlocks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
AHCIPort::_HardReset()
|
||||||
|
{
|
||||||
|
if ((fRegs->cmd & PORT_CMD_ST) != 0) {
|
||||||
|
// We shouldn't perform a reset, but at least document it
|
||||||
|
TRACE("AHCIPort::_HardReset() PORT_CMD_ST set, behaviour undefined\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
fRegs->sctl = (fRegs->sctl & ~SATA_CONTROL_DET_MASK)
|
||||||
|
| DET_INITIALIZATION << SATA_CONTROL_DET_SHIFT;
|
||||||
|
FlushPostedWrites();
|
||||||
|
spin(1100);
|
||||||
|
// You must wait 1ms at minimum
|
||||||
|
fRegs->sctl = (fRegs->sctl & ~SATA_CONTROL_DET_MASK)
|
||||||
|
| DET_NO_INITIALIZATION << SATA_CONTROL_DET_SHIFT;
|
||||||
|
FlushPostedWrites();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
AHCIPort::_ClearErrorRegister()
|
||||||
|
{
|
||||||
|
// clear error bits
|
||||||
|
fRegs->serr = fRegs->serr;
|
||||||
|
FlushPostedWrites();
|
||||||
|
}
|
||||||
|
|||||||
@@ -51,6 +51,8 @@ private:
|
|||||||
status_t WaitForTransfer(int *tfd, bigtime_t timeout);
|
status_t WaitForTransfer(int *tfd, bigtime_t timeout);
|
||||||
void FinishTransfer();
|
void FinishTransfer();
|
||||||
|
|
||||||
|
inline void _HardReset();
|
||||||
|
inline void _ClearErrorRegister();
|
||||||
|
|
||||||
// uint8 * SetCommandFis(volatile command_list_entry *cmd, volatile fis *fis, const void *data, size_t dataSize);
|
// uint8 * SetCommandFis(volatile command_list_entry *cmd, volatile fis *fis, const void *data, size_t dataSize);
|
||||||
status_t FillPrdTable(volatile prd *prdTable, int *prdCount, int prdMax, const void *data, size_t dataSize);
|
status_t FillPrdTable(volatile prd *prdTable, int *prdCount, int prdMax, const void *data, size_t dataSize);
|
||||||
|
|||||||
@@ -229,11 +229,12 @@ const struct supported_device {
|
|||||||
{0x6767, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD Caicos"},
|
{0x6767, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD Caicos"},
|
||||||
{0x6768, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD Caicos"},
|
{0x6768, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD Caicos"},
|
||||||
{0x6770, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD 6400"},
|
{0x6770, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD 6400"},
|
||||||
{0x6778, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD Caicos"},
|
{0x6778, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD 7470/8470"},
|
||||||
{0x6779, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD 6450"},
|
{0x6779, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD 6450/7450/8450"},
|
||||||
{0x68fa, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD 7350"},
|
{0x68fa, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD 7350"},
|
||||||
{0x677b, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD 7400"},
|
{0x677b, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD 7400"},
|
||||||
{0x6772, 5, 0, RADEON_CAICOS, CHIP_APU, "Radeon HD 7400A"},
|
{0x6772, 5, 0, RADEON_CAICOS, CHIP_APU, "Radeon HD 7400A"},
|
||||||
|
{0x6771, 5, 0, RADEON_CAICOS, CHIP_STD, "Radeon HD 8490"},
|
||||||
// Turks
|
// Turks
|
||||||
{0x6740, 5, 0, RADEON_TURKS, CHIP_MOBILE, "Radeon HD 6770M"},
|
{0x6740, 5, 0, RADEON_TURKS, CHIP_MOBILE, "Radeon HD 6770M"},
|
||||||
{0x6741, 5, 0, RADEON_TURKS, CHIP_MOBILE, "Radeon HD 6650M"},
|
{0x6741, 5, 0, RADEON_TURKS, CHIP_MOBILE, "Radeon HD 6650M"},
|
||||||
|
|||||||
@@ -587,6 +587,9 @@ bfs_lookup(fs_volume* _volume, fs_vnode* _directory, const char* file,
|
|||||||
status = tree->Find((uint8*)file, (uint16)strlen(file), _vnodeID);
|
status = tree->Find((uint8*)file, (uint16)strlen(file), _vnodeID);
|
||||||
if (status != B_OK) {
|
if (status != B_OK) {
|
||||||
//PRINT(("bfs_walk() could not find %Ld:\"%s\": %s\n", directory->BlockNumber(), file, strerror(status)));
|
//PRINT(("bfs_walk() could not find %Ld:\"%s\": %s\n", directory->BlockNumber(), file, strerror(status)));
|
||||||
|
if (status == B_ENTRY_NOT_FOUND)
|
||||||
|
entry_cache_add_missing(volume->ID(), directory->ID(), file);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,13 @@ entry_cache_add(dev_t mountID, ino_t dirID, const char* name, ino_t nodeID)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
entry_cache_add_missing(dev_t mountID, ino_t dirID, const char* name)
|
||||||
|
{
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
entry_cache_remove(dev_t mountID, ino_t dirID, const char* name)
|
entry_cache_remove(dev_t mountID, ino_t dirID, const char* name)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -445,6 +445,8 @@ InterfaceAddress::_Init(net_interface* netInterface, net_domain* netDomain)
|
|||||||
|
|
||||||
Interface::Interface(const char* interfaceName,
|
Interface::Interface(const char* interfaceName,
|
||||||
net_device_interface* deviceInterface)
|
net_device_interface* deviceInterface)
|
||||||
|
:
|
||||||
|
fBusy(false)
|
||||||
{
|
{
|
||||||
TRACE("Interface %p: new \"%s\", device interface %p\n", this,
|
TRACE("Interface %p: new \"%s\", device interface %p\n", this,
|
||||||
interfaceName, deviceInterface);
|
interfaceName, deviceInterface);
|
||||||
@@ -933,13 +935,13 @@ Interface::SetDown()
|
|||||||
if ((flags & IFF_UP) == 0)
|
if ((flags & IFF_UP) == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// TODO: We acquire also the net_interfaces lock here
|
|
||||||
// to avoid a lock inversion in the ipv6 protocol implementation
|
|
||||||
// (see ticket #9377).
|
|
||||||
// A better solution would be to avoid locking the interface lock (fLock)
|
|
||||||
// when calling the lower layers.
|
|
||||||
RecursiveLocker interfacesLocker(sLock);
|
RecursiveLocker interfacesLocker(sLock);
|
||||||
RecursiveLocker locker(fLock);
|
|
||||||
|
if (IsBusy())
|
||||||
|
return;
|
||||||
|
|
||||||
|
SetBusy(true);
|
||||||
|
interfacesLocker.Unlock();
|
||||||
|
|
||||||
DatalinkTable::Iterator iterator = fDatalinkTable.GetIterator();
|
DatalinkTable::Iterator iterator = fDatalinkTable.GetIterator();
|
||||||
while (domain_datalink* datalink = iterator.Next()) {
|
while (domain_datalink* datalink = iterator.Next()) {
|
||||||
@@ -947,6 +949,8 @@ Interface::SetDown()
|
|||||||
}
|
}
|
||||||
|
|
||||||
flags &= ~IFF_UP;
|
flags &= ~IFF_UP;
|
||||||
|
|
||||||
|
SetBusy(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1076,10 +1080,11 @@ Interface::_SetUp()
|
|||||||
if (status != B_OK)
|
if (status != B_OK)
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
|
RecursiveLocker interfacesLocker(sLock);
|
||||||
|
SetBusy(true);
|
||||||
|
interfacesLocker.Unlock();
|
||||||
|
|
||||||
// Propagate flag to all datalink protocols
|
// Propagate flag to all datalink protocols
|
||||||
|
|
||||||
RecursiveLocker locker(fLock);
|
|
||||||
|
|
||||||
DatalinkTable::Iterator iterator = fDatalinkTable.GetIterator();
|
DatalinkTable::Iterator iterator = fDatalinkTable.GetIterator();
|
||||||
while (domain_datalink* datalink = iterator.Next()) {
|
while (domain_datalink* datalink = iterator.Next()) {
|
||||||
status = datalink->first_info->interface_up(datalink->first_protocol);
|
status = datalink->first_info->interface_up(datalink->first_protocol);
|
||||||
@@ -1097,6 +1102,7 @@ Interface::_SetUp()
|
|||||||
}
|
}
|
||||||
|
|
||||||
down_device_interface(fDeviceInterface);
|
down_device_interface(fDeviceInterface);
|
||||||
|
SetBusy(false);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1109,6 +1115,8 @@ Interface::_SetUp()
|
|||||||
}
|
}
|
||||||
|
|
||||||
flags |= IFF_UP;
|
flags |= IFF_UP;
|
||||||
|
SetBusy(false);
|
||||||
|
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1409,7 +1417,7 @@ get_interface(net_domain* domain, uint32 index)
|
|||||||
interface = sInterfaces.First();
|
interface = sInterfaces.First();
|
||||||
else
|
else
|
||||||
interface = find_interface(index);
|
interface = find_interface(index);
|
||||||
if (interface == NULL)
|
if (interface == NULL || interface->IsBusy())
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (interface->CreateDomainDatalinkIfNeeded(domain) != B_OK)
|
if (interface->CreateDomainDatalinkIfNeeded(domain) != B_OK)
|
||||||
@@ -1426,7 +1434,7 @@ get_interface(net_domain* domain, const char* name)
|
|||||||
RecursiveLocker locker(sLock);
|
RecursiveLocker locker(sLock);
|
||||||
|
|
||||||
Interface* interface = find_interface(name);
|
Interface* interface = find_interface(name);
|
||||||
if (interface == NULL)
|
if (interface == NULL || interface->IsBusy())
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (interface->CreateDomainDatalinkIfNeeded(domain) != B_OK)
|
if (interface->CreateDomainDatalinkIfNeeded(domain) != B_OK)
|
||||||
@@ -1445,6 +1453,8 @@ get_interface_for_device(net_domain* domain, uint32 index)
|
|||||||
InterfaceList::Iterator iterator = sInterfaces.GetIterator();
|
InterfaceList::Iterator iterator = sInterfaces.GetIterator();
|
||||||
while (Interface* interface = iterator.Next()) {
|
while (Interface* interface = iterator.Next()) {
|
||||||
if (interface->device->index == index) {
|
if (interface->device->index == index) {
|
||||||
|
if (interface->IsBusy())
|
||||||
|
return NULL;
|
||||||
if (interface->CreateDomainDatalinkIfNeeded(domain) != B_OK)
|
if (interface->CreateDomainDatalinkIfNeeded(domain) != B_OK)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@@ -1470,6 +1480,8 @@ get_interface_for_link(net_domain* domain, const sockaddr* _linkAddress)
|
|||||||
|
|
||||||
InterfaceList::Iterator iterator = sInterfaces.GetIterator();
|
InterfaceList::Iterator iterator = sInterfaces.GetIterator();
|
||||||
while (Interface* interface = iterator.Next()) {
|
while (Interface* interface = iterator.Next()) {
|
||||||
|
if (interface->IsBusy())
|
||||||
|
continue;
|
||||||
// Test if the hardware address matches, or if the given interface
|
// Test if the hardware address matches, or if the given interface
|
||||||
// matches, or if at least the index matches.
|
// matches, or if at least the index matches.
|
||||||
if ((linkAddress.sdl_alen == interface->device->address.length
|
if ((linkAddress.sdl_alen == interface->device->address.length
|
||||||
@@ -1479,6 +1491,8 @@ get_interface_for_link(net_domain* domain, const sockaddr* _linkAddress)
|
|||||||
&& !strcmp(interface->name, (const char*)linkAddress.sdl_data))
|
&& !strcmp(interface->name, (const char*)linkAddress.sdl_data))
|
||||||
|| (linkAddress.sdl_nlen == 0 && linkAddress.sdl_alen == 0
|
|| (linkAddress.sdl_nlen == 0 && linkAddress.sdl_alen == 0
|
||||||
&& linkAddress.sdl_index == interface->index)) {
|
&& linkAddress.sdl_index == interface->index)) {
|
||||||
|
if (interface->IsBusy())
|
||||||
|
return NULL;
|
||||||
if (interface->CreateDomainDatalinkIfNeeded(domain) != B_OK)
|
if (interface->CreateDomainDatalinkIfNeeded(domain) != B_OK)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@@ -1516,6 +1530,9 @@ get_interface_address_for_destination(net_domain* domain,
|
|||||||
|
|
||||||
InterfaceList::Iterator iterator = sInterfaces.GetIterator();
|
InterfaceList::Iterator iterator = sInterfaces.GetIterator();
|
||||||
while (Interface* interface = iterator.Next()) {
|
while (Interface* interface = iterator.Next()) {
|
||||||
|
if (interface->IsBusy())
|
||||||
|
continue;
|
||||||
|
|
||||||
InterfaceAddress* address
|
InterfaceAddress* address
|
||||||
= interface->AddressForDestination(domain, destination);
|
= interface->AddressForDestination(domain, destination);
|
||||||
if (address != NULL)
|
if (address != NULL)
|
||||||
@@ -1543,6 +1560,8 @@ get_interface_address_for_link(net_domain* domain, const sockaddr* address,
|
|||||||
|
|
||||||
InterfaceList::Iterator iterator = sInterfaces.GetIterator();
|
InterfaceList::Iterator iterator = sInterfaces.GetIterator();
|
||||||
while (Interface* interface = iterator.Next()) {
|
while (Interface* interface = iterator.Next()) {
|
||||||
|
if (interface->IsBusy())
|
||||||
|
continue;
|
||||||
// Test if the hardware address matches, or if the given interface
|
// Test if the hardware address matches, or if the given interface
|
||||||
// matches, or if at least the index matches.
|
// matches, or if at least the index matches.
|
||||||
if (linkAddress.sdl_alen == interface->device->address.length
|
if (linkAddress.sdl_alen == interface->device->address.length
|
||||||
|
|||||||
@@ -152,6 +152,9 @@ public:
|
|||||||
domain_datalink* DomainDatalink(net_domain* domain)
|
domain_datalink* DomainDatalink(net_domain* domain)
|
||||||
{ return DomainDatalink(domain->family); }
|
{ return DomainDatalink(domain->family); }
|
||||||
|
|
||||||
|
inline void SetBusy(bool busy) { atomic_set(&fBusy, busy ? 1 : 0); };
|
||||||
|
inline bool IsBusy() const { return atomic_get((int32*)&fBusy) == 1 ;};
|
||||||
|
|
||||||
#if ENABLE_DEBUGGER_COMMANDS
|
#if ENABLE_DEBUGGER_COMMANDS
|
||||||
void Dump() const;
|
void Dump() const;
|
||||||
#endif
|
#endif
|
||||||
@@ -166,6 +169,7 @@ private:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
recursive_lock fLock;
|
recursive_lock fLock;
|
||||||
|
int32 fBusy;
|
||||||
net_device_interface* fDeviceInterface;
|
net_device_interface* fDeviceInterface;
|
||||||
AddressList fAddresses;
|
AddressList fAddresses;
|
||||||
DatalinkTable fDatalinkTable;
|
DatalinkTable fDatalinkTable;
|
||||||
|
|||||||
@@ -57,6 +57,10 @@
|
|||||||
// Otherwise the alternative code could simply be removed from this file.
|
// Otherwise the alternative code could simply be removed from this file.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if LIBAVCODEC_VERSION_INT > ((54 << 16) | (50 << 8))
|
||||||
|
typedef AVCodecID CodecID;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
struct wave_format_ex {
|
struct wave_format_ex {
|
||||||
uint16 format_tag;
|
uint16 format_tag;
|
||||||
@@ -409,10 +413,10 @@ AVCodecDecoder::_NegotiateAudioOutputFormat(media_format* inOutFormat)
|
|||||||
if (fRawDecodedAudio->opaque == NULL)
|
if (fRawDecodedAudio->opaque == NULL)
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
|
|
||||||
TRACE(" bit_rate = %d, sample_rate = %d, channels = %d, init = %d, "
|
TRACE(" bit_rate = %d, sample_rate = %d, channels = %d, "
|
||||||
"output frame size: %d, count: %ld, rate: %.2f\n",
|
"output frame size: %d, count: %ld, rate: %.2f\n",
|
||||||
fContext->bit_rate, fContext->sample_rate, fContext->channels,
|
fContext->bit_rate, fContext->sample_rate, fContext->channels,
|
||||||
result, fOutputFrameSize, fOutputFrameCount, fOutputFrameRate);
|
fOutputFrameSize, fOutputFrameCount, fOutputFrameRate);
|
||||||
|
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
@@ -716,7 +720,7 @@ AVCodecDecoder::_DecodeNextAudioFrame()
|
|||||||
dump_ffframe_audio(fRawDecodedAudio, "ffaudi");
|
dump_ffframe_audio(fRawDecodedAudio, "ffaudi");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
TRACE_AUDIO(" frame count: %lld current: %lld\n",
|
TRACE_AUDIO(" frame count: %ld current: %lld\n",
|
||||||
fRawDecodedAudio->nb_samples, fFrame);
|
fRawDecodedAudio->nb_samples, fFrame);
|
||||||
|
|
||||||
return B_OK;
|
return B_OK;
|
||||||
@@ -1193,7 +1197,7 @@ AVCodecDecoder::_DecodeNextVideoFrame()
|
|||||||
fRawDecodedPicture, &gotVideoFrame, &fTempPacket);
|
fRawDecodedPicture, &gotVideoFrame, &fTempPacket);
|
||||||
if (encodedDataSizeInBytes < 0) {
|
if (encodedDataSizeInBytes < 0) {
|
||||||
TRACE("[v] AVCodecDecoder: ignoring error in decoding frame %lld:"
|
TRACE("[v] AVCodecDecoder: ignoring error in decoding frame %lld:"
|
||||||
" %d\n", fFrame, len);
|
" %d\n", fFrame, encodedDataSizeInBytes);
|
||||||
// NOTE: An error from avcodec_decode_video2() is ignored by the
|
// NOTE: An error from avcodec_decode_video2() is ignored by the
|
||||||
// FFMPEG 0.10.2 example decoding_encoding.c. Only the packet
|
// FFMPEG 0.10.2 example decoding_encoding.c. Only the packet
|
||||||
// buffers are flushed accordingly
|
// buffers are flushed accordingly
|
||||||
|
|||||||
@@ -40,9 +40,9 @@ AVCodecEncoder::AVCodecEncoder(uint32 codecID, int bitRateScale)
|
|||||||
:
|
:
|
||||||
Encoder(),
|
Encoder(),
|
||||||
fBitRateScale(bitRateScale),
|
fBitRateScale(bitRateScale),
|
||||||
fCodecID((enum CodecID)codecID),
|
fCodecID((CodecID)codecID),
|
||||||
fCodec(NULL),
|
fCodec(NULL),
|
||||||
fOwnContext(avcodec_alloc_context()),
|
fOwnContext(avcodec_alloc_context3(NULL)),
|
||||||
fContext(fOwnContext),
|
fContext(fOwnContext),
|
||||||
fCodecInitStatus(CODEC_INIT_NEEDED),
|
fCodecInitStatus(CODEC_INIT_NEEDED),
|
||||||
|
|
||||||
@@ -494,7 +494,7 @@ AVCodecEncoder::_OpenCodecIfNeeded()
|
|||||||
fContext->strict_std_compliance = -2;
|
fContext->strict_std_compliance = -2;
|
||||||
|
|
||||||
// Open the codec
|
// Open the codec
|
||||||
int result = avcodec_open(fContext, fCodec);
|
int result = avcodec_open2(fContext, fCodec, NULL);
|
||||||
if (result >= 0)
|
if (result >= 0)
|
||||||
fCodecInitStatus = CODEC_INIT_DONE;
|
fCodecInitStatus = CODEC_INIT_DONE;
|
||||||
else
|
else
|
||||||
@@ -591,43 +591,78 @@ status_t
|
|||||||
AVCodecEncoder::_EncodeAudio(const uint8* buffer, size_t bufferSize,
|
AVCodecEncoder::_EncodeAudio(const uint8* buffer, size_t bufferSize,
|
||||||
int64 frameCount, media_encode_info* info)
|
int64 frameCount, media_encode_info* info)
|
||||||
{
|
{
|
||||||
// Encode one audio chunk/frame. The bufferSize has already been adapted
|
status_t ret;
|
||||||
// to the needed size for fContext->frame_size, or we are writing raw
|
|
||||||
// audio.
|
|
||||||
int usedBytes = avcodec_encode_audio(fContext, fChunkBuffer,
|
|
||||||
bufferSize, reinterpret_cast<const short*>(buffer));
|
|
||||||
|
|
||||||
if (usedBytes < 0) {
|
// Encode one audio chunk/frame.
|
||||||
TRACE(" avcodec_encode_audio() failed: %d\n", usedBytes);
|
AVPacket packet;
|
||||||
return B_ERROR;
|
av_init_packet(&packet);
|
||||||
|
// By leaving these NULL, we let the encoder allocate memory as it needs.
|
||||||
|
// This way we don't risk iving a too small buffer.
|
||||||
|
packet.data = NULL;
|
||||||
|
packet.size = 0;
|
||||||
|
|
||||||
|
// We need to wrap our input data into an AVFrame structure.
|
||||||
|
AVFrame frame;
|
||||||
|
int gotPacket = 0;
|
||||||
|
|
||||||
|
if (buffer) {
|
||||||
|
avcodec_get_frame_defaults(&frame);
|
||||||
|
|
||||||
|
frame.nb_samples = frameCount;
|
||||||
|
|
||||||
|
ret = avcodec_fill_audio_frame(&frame, fContext->channels,
|
||||||
|
fContext->sample_fmt, (const uint8_t *) buffer, bufferSize, 1);
|
||||||
|
|
||||||
|
if (ret != 0)
|
||||||
|
return B_ERROR;
|
||||||
|
|
||||||
|
/* Set the presentation time of the frame */
|
||||||
|
frame.pts = (bigtime_t)(fFramesWritten * 1000000LL
|
||||||
|
/ fInputFormat.u.raw_audio.frame_rate);
|
||||||
|
fFramesWritten += frame.nb_samples;
|
||||||
|
|
||||||
|
ret = avcodec_encode_audio2(fContext, &packet, &frame, &gotPacket);
|
||||||
|
} else {
|
||||||
|
// If called with NULL, ask the encoder to flush any buffers it may
|
||||||
|
// have pending.
|
||||||
|
ret = avcodec_encode_audio2(fContext, &packet, NULL, &gotPacket);
|
||||||
}
|
}
|
||||||
if (usedBytes == 0)
|
|
||||||
return B_OK;
|
|
||||||
|
|
||||||
// // Maybe we need to use this PTS to calculate start_time:
|
if (buffer && frame.extended_data != frame.data)
|
||||||
// if (fContext->coded_frame->pts != kNoPTSValue) {
|
av_freep(&frame.extended_data);
|
||||||
// TRACE(" codec frame PTS: %lld (codec time_base: %d/%d)\n",
|
|
||||||
// fContext->coded_frame->pts, fContext->time_base.num,
|
|
||||||
// fContext->time_base.den);
|
|
||||||
// } else {
|
|
||||||
// TRACE(" codec frame PTS: N/A (codec time_base: %d/%d)\n",
|
|
||||||
// fContext->time_base.num, fContext->time_base.den);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Setup media_encode_info, most important is the time stamp.
|
if (ret != 0) {
|
||||||
info->start_time = (bigtime_t)(fFramesWritten * 1000000LL
|
TRACE(" avcodec_encode_audio() failed: %ld\n", ret);
|
||||||
/ fInputFormat.u.raw_audio.frame_rate);
|
return B_ERROR;
|
||||||
info->flags = B_MEDIA_KEY_FRAME;
|
|
||||||
|
|
||||||
// Write the chunk
|
|
||||||
status_t ret = WriteChunk(fChunkBuffer, usedBytes, info);
|
|
||||||
if (ret != B_OK) {
|
|
||||||
TRACE(" error writing chunk: %s\n", strerror(ret));
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fFramesWritten += frameCount;
|
fFramesWritten += frameCount;
|
||||||
|
|
||||||
|
if (gotPacket) {
|
||||||
|
if (fContext->coded_frame) {
|
||||||
|
// Store information about the coded frame in the context.
|
||||||
|
fContext->coded_frame->pts = packet.pts;
|
||||||
|
fContext->coded_frame->key_frame = !!(packet.flags & AV_PKT_FLAG_KEY);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setup media_encode_info, most important is the time stamp.
|
||||||
|
info->start_time = packet.pts;
|
||||||
|
|
||||||
|
if (packet.flags & AV_PKT_FLAG_KEY)
|
||||||
|
info->flags = B_MEDIA_KEY_FRAME;
|
||||||
|
else
|
||||||
|
info->flags = 0;
|
||||||
|
|
||||||
|
// We got a packet out of the encoder, write it to the output stream
|
||||||
|
ret = WriteChunk(packet.data, packet.size, info);
|
||||||
|
if (ret != B_OK) {
|
||||||
|
TRACE(" error writing chunk: %s\n", strerror(ret));
|
||||||
|
av_free_packet(&packet);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
av_free_packet(&packet);
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,11 @@ extern "C" {
|
|||||||
#include "EncoderPlugin.h"
|
#include "EncoderPlugin.h"
|
||||||
|
|
||||||
|
|
||||||
|
#if LIBAVCODEC_VERSION_INT > ((54 << 16) | (50 << 8))
|
||||||
|
typedef AVCodecID CodecID;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
class AVCodecEncoder : public Encoder {
|
class AVCodecEncoder : public Encoder {
|
||||||
public:
|
public:
|
||||||
AVCodecEncoder(uint32 codecID,
|
AVCodecEncoder(uint32 codecID,
|
||||||
|
|||||||
@@ -257,7 +257,7 @@ StreamBase::Open()
|
|||||||
fContext->pb = fIOContext;
|
fContext->pb = fIOContext;
|
||||||
|
|
||||||
// Allocate our context and probe the input format
|
// Allocate our context and probe the input format
|
||||||
if (avformat_open_input(&fContext, "", NULL, NULL) < 0) {
|
if (avformat_open_input(&fContext, ".mod", NULL, NULL) < 0) {
|
||||||
TRACE("StreamBase::Open() - avformat_open_input() failed!\n");
|
TRACE("StreamBase::Open() - avformat_open_input() failed!\n");
|
||||||
// avformat_open_input() frees the context in case of failure
|
// avformat_open_input() frees the context in case of failure
|
||||||
fContext = NULL;
|
fContext = NULL;
|
||||||
@@ -1505,7 +1505,7 @@ AVFormatReader::Sniff(int32* _streamCount)
|
|||||||
streamDeleter.Detach();
|
streamDeleter.Detach();
|
||||||
|
|
||||||
#ifdef TRACE_AVFORMAT_READER
|
#ifdef TRACE_AVFORMAT_READER
|
||||||
dump_format(const_cast<AVFormatContext*>(stream->Context()), 0, "", 0);
|
av_dump_format(const_cast<AVFormatContext*>(stream->Context()), 0, "", 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (_streamCount != NULL)
|
if (_streamCount != NULL)
|
||||||
|
|||||||
@@ -53,6 +53,9 @@ static const size_t kIOBufferSize = 64 * 1024;
|
|||||||
#define OPEN_CODEC_CONTEXT 1
|
#define OPEN_CODEC_CONTEXT 1
|
||||||
#define GET_CONTEXT_DEFAULTS 0
|
#define GET_CONTEXT_DEFAULTS 0
|
||||||
|
|
||||||
|
#if LIBAVCODEC_VERSION_INT > ((54 << 16) | (50 << 8))
|
||||||
|
typedef AVCodecID CodecID;
|
||||||
|
#endif
|
||||||
|
|
||||||
// #pragma mark - AVFormatWriter::StreamCookie
|
// #pragma mark - AVFormatWriter::StreamCookie
|
||||||
|
|
||||||
@@ -109,7 +112,8 @@ AVFormatWriter::StreamCookie::Init(media_format* format,
|
|||||||
BAutolock _(fStreamLock);
|
BAutolock _(fStreamLock);
|
||||||
|
|
||||||
fPacket.stream_index = fContext->nb_streams;
|
fPacket.stream_index = fContext->nb_streams;
|
||||||
fStream = av_new_stream(fContext, fPacket.stream_index);
|
fStream = avformat_new_stream(fContext, NULL);
|
||||||
|
fStream->id = fPacket.stream_index;
|
||||||
|
|
||||||
if (fStream == NULL) {
|
if (fStream == NULL) {
|
||||||
TRACE(" failed to add new stream\n");
|
TRACE(" failed to add new stream\n");
|
||||||
@@ -200,6 +204,10 @@ AVFormatWriter::StreamCookie::Init(media_format* format,
|
|||||||
// Now negociate the actual format with the encoder
|
// Now negociate the actual format with the encoder
|
||||||
// First check if the requested format is acceptable
|
// First check if the requested format is acceptable
|
||||||
AVCodec* codec = avcodec_find_encoder(fStream->codec->codec_id);
|
AVCodec* codec = avcodec_find_encoder(fStream->codec->codec_id);
|
||||||
|
|
||||||
|
if (codec == NULL)
|
||||||
|
return B_MEDIA_BAD_FORMAT;
|
||||||
|
|
||||||
const enum AVSampleFormat *p = codec->sample_fmts;
|
const enum AVSampleFormat *p = codec->sample_fmts;
|
||||||
for (; *p != -1; p++) {
|
for (; *p != -1; p++) {
|
||||||
if (*p == fStream->codec->sample_fmt)
|
if (*p == fStream->codec->sample_fmt)
|
||||||
@@ -466,7 +474,7 @@ AVFormatWriter::CommitHeader()
|
|||||||
AVCodecContext* codecContext = stream->codec;
|
AVCodecContext* codecContext = stream->codec;
|
||||||
codecContext->strict_std_compliance = -2;
|
codecContext->strict_std_compliance = -2;
|
||||||
AVCodec* codec = avcodec_find_encoder(codecContext->codec_id);
|
AVCodec* codec = avcodec_find_encoder(codecContext->codec_id);
|
||||||
if (codec == NULL || avcodec_open(codecContext, codec) < 0) {
|
if (codec == NULL || avcodec_open2(codecContext, codec, NULL) < 0) {
|
||||||
TRACE(" stream[%u] - failed to open AVCodecContext\n", i);
|
TRACE(" stream[%u] - failed to open AVCodecContext\n", i);
|
||||||
}
|
}
|
||||||
TRACE(" stream[%u] time_base: (%d/%d), codec->time_base: (%d/%d)\n",
|
TRACE(" stream[%u] time_base: (%d/%d), codec->time_base: (%d/%d)\n",
|
||||||
|
|||||||
@@ -11,9 +11,15 @@ extern "C" {
|
|||||||
#include "avformat.h"
|
#include "avformat.h"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if LIBAVCODEC_VERSION_INT > ((54 << 16) | (50 << 8))
|
||||||
|
typedef AVCodecID CodecID;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
//XXX: newer versions have it in libavformat/internal.h
|
//XXX: newer versions have it in libavformat/internal.h
|
||||||
typedef struct AVCodecTag {
|
typedef struct AVCodecTag {
|
||||||
enum CodecID id;
|
CodecID id;
|
||||||
unsigned int tag;
|
unsigned int tag;
|
||||||
} AVCodecTag;
|
} AVCodecTag;
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,11 @@ extern "C" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if LIBAVCODEC_VERSION_INT > ((54 << 16) | (50 << 8))
|
||||||
|
typedef AVCodecID CodecID;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
struct EncoderDescription {
|
struct EncoderDescription {
|
||||||
media_codec_info codec_info;
|
media_codec_info codec_info;
|
||||||
media_format_family format_family;
|
media_format_family format_family;
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ manage_locks(void** _lock, enum AVLockOp operation)
|
|||||||
case AV_LOCK_CREATE:
|
case AV_LOCK_CREATE:
|
||||||
TRACE(" AV_LOCK_CREATE\n");
|
TRACE(" AV_LOCK_CREATE\n");
|
||||||
*lock = new(std::nothrow) BLocker("FFmpeg lock");
|
*lock = new(std::nothrow) BLocker("FFmpeg lock");
|
||||||
if (*lock == NULL)
|
if (*lock == NULL)
|
||||||
return 1;
|
return 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -318,6 +318,62 @@ const media_file_format gMuxerTable[] = {
|
|||||||
"webm",
|
"webm",
|
||||||
{ 0 }
|
{ 0 }
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
media_file_format::B_READABLE
|
||||||
|
| media_file_format::B_KNOWS_RAW_AUDIO
|
||||||
|
| media_file_format::B_KNOWS_ENCODED_AUDIO,
|
||||||
|
{ 0 },
|
||||||
|
B_MISC_FORMAT_FAMILY,
|
||||||
|
100,
|
||||||
|
{ 0 },
|
||||||
|
"audio/xm",
|
||||||
|
"Fast Tracker eXtended Module",
|
||||||
|
"xm",
|
||||||
|
"xm",
|
||||||
|
{ 0 }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
media_file_format::B_READABLE
|
||||||
|
| media_file_format::B_KNOWS_RAW_AUDIO
|
||||||
|
| media_file_format::B_KNOWS_ENCODED_AUDIO,
|
||||||
|
{ 0 },
|
||||||
|
B_MISC_FORMAT_FAMILY,
|
||||||
|
100,
|
||||||
|
{ 0 },
|
||||||
|
"audio/s3m",
|
||||||
|
"Scream Tracker 3",
|
||||||
|
"s3m",
|
||||||
|
"s3m",
|
||||||
|
{ 0 }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
media_file_format::B_READABLE
|
||||||
|
| media_file_format::B_KNOWS_RAW_AUDIO
|
||||||
|
| media_file_format::B_KNOWS_ENCODED_AUDIO,
|
||||||
|
{ 0 },
|
||||||
|
B_MISC_FORMAT_FAMILY,
|
||||||
|
100,
|
||||||
|
{ 0 },
|
||||||
|
"audio/it",
|
||||||
|
"Impulse Tracker",
|
||||||
|
"it",
|
||||||
|
"it",
|
||||||
|
{ 0 }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
media_file_format::B_READABLE
|
||||||
|
| media_file_format::B_KNOWS_RAW_AUDIO
|
||||||
|
| media_file_format::B_KNOWS_ENCODED_AUDIO,
|
||||||
|
{ 0 },
|
||||||
|
B_MISC_FORMAT_FAMILY,
|
||||||
|
100,
|
||||||
|
{ 0 },
|
||||||
|
"audio/x-mod",
|
||||||
|
"Protracker MOD",
|
||||||
|
"mod",
|
||||||
|
"mod",
|
||||||
|
{ 0 }
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const size_t gMuxerCount = sizeof(gMuxerTable) / sizeof(media_file_format);
|
const size_t gMuxerCount = sizeof(gMuxerTable) / sizeof(media_file_format);
|
||||||
|
|||||||
@@ -38,11 +38,11 @@ printf("ReadyToRun()\n");
|
|||||||
PostMessage(B_QUIT_REQUESTED);
|
PostMessage(B_QUIT_REQUESTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void ArgvReceived(int32 argc, char** argv)
|
virtual void ArgvReceived(int32 argc, char** argv)
|
||||||
{
|
{
|
||||||
printf("ArgvReceived()\n");
|
printf("ArgvReceived()\n");
|
||||||
for (int32 i = 0; i < argc; i++)
|
for (int32 i = 0; i < argc; i++)
|
||||||
printf(" arg %ld: \"%s\"\n", i, argv[i]);
|
printf(" arg %" B_PRId32 ": \"%s\"\n", i, argv[i]);
|
||||||
|
|
||||||
for (int32 i = 1; i < argc; i++) {
|
for (int32 i = 1; i < argc; i++) {
|
||||||
PathDataSource* dataSource = new(std::nothrow) PathDataSource;
|
PathDataSource* dataSource = new(std::nothrow) PathDataSource;
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ BigtimeChartAxisLegendSource::GetAxisLegends(const ChartDataRange& range,
|
|||||||
decomposed_bigtime decomposed;
|
decomposed_bigtime decomposed;
|
||||||
decompose_time(time, decomposed);
|
decompose_time(time, decomposed);
|
||||||
char buffer[128];
|
char buffer[128];
|
||||||
snprintf(buffer, sizeof(buffer), "%02lld:%02d:%02d.%06d",
|
snprintf(buffer, sizeof(buffer), "%02" B_PRIu64 ":%02d:%02d.%06d",
|
||||||
decomposed.hours, decomposed.minutes, decomposed.seconds,
|
decomposed.hours, decomposed.minutes, decomposed.seconds,
|
||||||
decomposed.micros);
|
decomposed.micros);
|
||||||
// TODO: Drop superfluous micro seconds digits, or even microseconds and seconds
|
// TODO: Drop superfluous micro seconds digits, or even microseconds and seconds
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ LegendChartAxis::_FilterLegends(int32 totalSize, int32 spacing,
|
|||||||
// Filter out all higher level legends colliding with lower level or
|
// Filter out all higher level legends colliding with lower level or
|
||||||
// preceeding same-level legends. We iterate backwards from the lower to
|
// preceeding same-level legends. We iterate backwards from the lower to
|
||||||
// the higher levels
|
// the higher levels
|
||||||
for (int32 level = std::max(minLevel, 0L); level <= maxLevel;) {
|
for (int32 level = std::max(minLevel, (int32)0); level <= maxLevel;) {
|
||||||
legendCount = fLegends.CountItems();
|
legendCount = fLegends.CountItems();
|
||||||
|
|
||||||
// get the first legend position/end
|
// get the first legend position/end
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ NanotimeChartAxisLegendSource::GetAxisLegends(const ChartDataRange& range,
|
|||||||
decomposed_nanotime decomposed;
|
decomposed_nanotime decomposed;
|
||||||
decompose_time(time, decomposed);
|
decompose_time(time, decomposed);
|
||||||
char buffer[128];
|
char buffer[128];
|
||||||
snprintf(buffer, sizeof(buffer), "%02lld:%02d:%02d.%09d",
|
snprintf(buffer, sizeof(buffer), "%02" B_PRId64 ":%02d:%02d.%09d",
|
||||||
decomposed.hours, decomposed.minutes, decomposed.seconds,
|
decomposed.hours, decomposed.minutes, decomposed.seconds,
|
||||||
decomposed.nanos);
|
decomposed.nanos);
|
||||||
// TODO: Drop superfluous nanoseconds digits, or even nanoseconds and seconds
|
// TODO: Drop superfluous nanoseconds digits, or even nanoseconds and seconds
|
||||||
|
|||||||
@@ -68,11 +68,11 @@ MainWindow::GeneralPage::SetModel(Model* model)
|
|||||||
fIdleTimeView->SetText(buffer);
|
fIdleTimeView->SetText(buffer);
|
||||||
|
|
||||||
// team count
|
// team count
|
||||||
snprintf(buffer, sizeof(buffer), "%ld", fModel->CountTeams());
|
snprintf(buffer, sizeof(buffer), "%" B_PRId32, fModel->CountTeams());
|
||||||
fTeamCountView->SetText(buffer);
|
fTeamCountView->SetText(buffer);
|
||||||
|
|
||||||
// threads
|
// threads
|
||||||
snprintf(buffer, sizeof(buffer), "%ld", fModel->CountThreads());
|
snprintf(buffer, sizeof(buffer), "%" B_PRId32, fModel->CountThreads());
|
||||||
fThreadCountView->SetText(buffer);
|
fThreadCountView->SetText(buffer);
|
||||||
} else {
|
} else {
|
||||||
fDataSourceView->SetText("");
|
fDataSourceView->SetText("");
|
||||||
|
|||||||
@@ -318,7 +318,7 @@ protected:
|
|||||||
int32 lineHeight = (int32)fFontInfo.lineHeight;
|
int32 lineHeight = (int32)fFontInfo.lineHeight;
|
||||||
minLine = (int32)rect.top / lineHeight;
|
minLine = (int32)rect.top / lineHeight;
|
||||||
maxLine = ((int32)ceilf(rect.bottom) + lineHeight - 1) / lineHeight;
|
maxLine = ((int32)ceilf(rect.bottom) + lineHeight - 1) / lineHeight;
|
||||||
minLine = std::max(minLine, 0L);
|
minLine = std::max(minLine, (int32)0);
|
||||||
maxLine = std::min(maxLine, CountLines() - 1);
|
maxLine = std::min(maxLine, CountLines() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1449,7 +1449,8 @@ printf("failed to read event!\n");
|
|||||||
Model::ThreadSchedulingState* thread = fState.LookupThread(
|
Model::ThreadSchedulingState* thread = fState.LookupThread(
|
||||||
event->thread);
|
event->thread);
|
||||||
if (thread == NULL) {
|
if (thread == NULL) {
|
||||||
printf("Schedule event for unknown thread: %ld\n", event->thread);
|
printf("Schedule event for unknown thread: %" B_PRId32 "\n",
|
||||||
|
event->thread);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1464,8 +1465,8 @@ printf("failed to read event!\n");
|
|||||||
|
|
||||||
thread = fState.LookupThread(event->previous_thread);
|
thread = fState.LookupThread(event->previous_thread);
|
||||||
if (thread == NULL) {
|
if (thread == NULL) {
|
||||||
printf("Schedule event for unknown previous thread: %ld\n",
|
printf("Schedule event for unknown previous thread: %" B_PRId32
|
||||||
event->previous_thread);
|
"\n", event->previous_thread);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1529,8 +1530,8 @@ printf("failed to read event!\n");
|
|||||||
Model::ThreadSchedulingState* thread = fState.LookupThread(
|
Model::ThreadSchedulingState* thread = fState.LookupThread(
|
||||||
event->thread);
|
event->thread);
|
||||||
if (thread == NULL) {
|
if (thread == NULL) {
|
||||||
printf("Enqueued in run queue event for unknown thread: %ld\n",
|
printf("Enqueued in run queue event for unknown thread: %" B_PRId32
|
||||||
event->thread);
|
"\n", event->thread);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1559,8 +1560,8 @@ printf("failed to read event!\n");
|
|||||||
Model::ThreadSchedulingState* thread = fState.LookupThread(
|
Model::ThreadSchedulingState* thread = fState.LookupThread(
|
||||||
event->thread);
|
event->thread);
|
||||||
if (thread == NULL) {
|
if (thread == NULL) {
|
||||||
printf("Removed from run queue event for unknown thread: %ld\n",
|
printf("Removed from run queue event for unknown thread: %" B_PRId32
|
||||||
event->thread);
|
"\n", event->thread);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -51,8 +51,8 @@ public:
|
|||||||
{
|
{
|
||||||
char buffer[128];
|
char buffer[128];
|
||||||
Model::Team* team = thread->GetTeam();
|
Model::Team* team = thread->GetTeam();
|
||||||
snprintf(buffer, sizeof(buffer), "%s (%ld)", team->Name(),
|
snprintf(buffer, sizeof(buffer), "%s (%" B_PRId32 ")",
|
||||||
team->ID());
|
team->Name(), team->ID());
|
||||||
value.SetTo(buffer);
|
value.SetTo(buffer);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ ThreadWindow::GeneralPage::SetModel(Model* model, Model::Thread* thread)
|
|||||||
|
|
||||||
// ID
|
// ID
|
||||||
char buffer[128];
|
char buffer[128];
|
||||||
snprintf(buffer, sizeof(buffer), "%ld", fThread->ID());
|
snprintf(buffer, sizeof(buffer), "%" B_PRId32, fThread->ID());
|
||||||
fThreadIDView->SetText(buffer);
|
fThreadIDView->SetText(buffer);
|
||||||
|
|
||||||
// team
|
// team
|
||||||
@@ -65,28 +65,28 @@ ThreadWindow::GeneralPage::SetModel(Model* model, Model::Thread* thread)
|
|||||||
char timeBuffer[64];
|
char timeBuffer[64];
|
||||||
format_nanotime(fThread->TotalRunTime(), timeBuffer,
|
format_nanotime(fThread->TotalRunTime(), timeBuffer,
|
||||||
sizeof(timeBuffer));
|
sizeof(timeBuffer));
|
||||||
snprintf(buffer, sizeof(buffer), "%s (%lld)", timeBuffer,
|
snprintf(buffer, sizeof(buffer), "%s (%" B_PRId64 ")", timeBuffer,
|
||||||
fThread->Runs());
|
fThread->Runs());
|
||||||
fRunTimeView->SetText(buffer);
|
fRunTimeView->SetText(buffer);
|
||||||
|
|
||||||
// wait time
|
// wait time
|
||||||
format_nanotime(fThread->TotalWaitTime(), timeBuffer,
|
format_nanotime(fThread->TotalWaitTime(), timeBuffer,
|
||||||
sizeof(timeBuffer));
|
sizeof(timeBuffer));
|
||||||
snprintf(buffer, sizeof(buffer), "%s (%lld)", timeBuffer,
|
snprintf(buffer, sizeof(buffer), "%s (%" B_PRId64 ")", timeBuffer,
|
||||||
fThread->Waits());
|
fThread->Waits());
|
||||||
fWaitTimeView->SetText(buffer);
|
fWaitTimeView->SetText(buffer);
|
||||||
|
|
||||||
// latencies
|
// latencies
|
||||||
format_nanotime(fThread->TotalLatency(), timeBuffer,
|
format_nanotime(fThread->TotalLatency(), timeBuffer,
|
||||||
sizeof(timeBuffer));
|
sizeof(timeBuffer));
|
||||||
snprintf(buffer, sizeof(buffer), "%s (%lld)", timeBuffer,
|
snprintf(buffer, sizeof(buffer), "%s (%" B_PRId64 ")", timeBuffer,
|
||||||
fThread->Latencies());
|
fThread->Latencies());
|
||||||
fLatencyView->SetText(buffer);
|
fLatencyView->SetText(buffer);
|
||||||
|
|
||||||
// preemptions
|
// preemptions
|
||||||
format_nanotime(fThread->TotalRerunTime(), timeBuffer,
|
format_nanotime(fThread->TotalRerunTime(), timeBuffer,
|
||||||
sizeof(timeBuffer));
|
sizeof(timeBuffer));
|
||||||
snprintf(buffer, sizeof(buffer), "%s (%lld)", timeBuffer,
|
snprintf(buffer, sizeof(buffer), "%s (%" B_PRId64 ")", timeBuffer,
|
||||||
fThread->Preemptions());
|
fThread->Preemptions());
|
||||||
fPreemptionView->SetText(buffer);
|
fPreemptionView->SetText(buffer);
|
||||||
|
|
||||||
|
|||||||
@@ -27,8 +27,8 @@ static BString
|
|||||||
get_window_name(Model::Thread* thread)
|
get_window_name(Model::Thread* thread)
|
||||||
{
|
{
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
snprintf(buffer, sizeof(buffer), "Thread: %s (%ld)", thread->Name(),
|
snprintf(buffer, sizeof(buffer), "Thread: %s (%" B_PRId32 ")",
|
||||||
thread->ID());
|
thread->Name(), thread->ID());
|
||||||
return BString(buffer);
|
return BString(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -785,7 +785,7 @@ Model::AddTeam(const system_profiler_team_added* event, nanotime_t time)
|
|||||||
{
|
{
|
||||||
Team* team = TeamByID(event->team);
|
Team* team = TeamByID(event->team);
|
||||||
if (team != NULL) {
|
if (team != NULL) {
|
||||||
fprintf(stderr, "Duplicate team: %ld\n", event->team);
|
fprintf(stderr, "Duplicate team: %" B_PRId32 "\n", event->team);
|
||||||
// TODO: User feedback!
|
// TODO: User feedback!
|
||||||
return team;
|
return team;
|
||||||
}
|
}
|
||||||
@@ -830,7 +830,7 @@ Model::AddThread(const system_profiler_thread_added* event, nanotime_t time)
|
|||||||
// check whether we do already know the thread
|
// check whether we do already know the thread
|
||||||
Thread* thread = ThreadByID(event->thread);
|
Thread* thread = ThreadByID(event->thread);
|
||||||
if (thread != NULL) {
|
if (thread != NULL) {
|
||||||
fprintf(stderr, "Duplicate thread: %ld\n", event->thread);
|
fprintf(stderr, "Duplicate thread: %" B_PRId32 "\n", event->thread);
|
||||||
// TODO: User feedback!
|
// TODO: User feedback!
|
||||||
return thread;
|
return thread;
|
||||||
}
|
}
|
||||||
@@ -838,7 +838,7 @@ Model::AddThread(const system_profiler_thread_added* event, nanotime_t time)
|
|||||||
// get its team
|
// get its team
|
||||||
Team* team = TeamByID(event->team);
|
Team* team = TeamByID(event->team);
|
||||||
if (team == NULL) {
|
if (team == NULL) {
|
||||||
fprintf(stderr, "No team for thread: %ld\n", event->thread);
|
fprintf(stderr, "No team for thread: %" B_PRId32 "\n", event->thread);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -721,9 +721,9 @@ ModelLoader::_ProcessEvent(uint32 event, uint32 cpu, const void* buffer,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("unsupported event type %lu, size: %lu\n", event, size);
|
printf("unsupported event type %" B_PRIu32 ", size: %" B_PRIuSIZE
|
||||||
return B_BAD_DATA;
|
"\n", event, size);
|
||||||
break;
|
return B_BAD_DATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
return B_OK;
|
return B_OK;
|
||||||
@@ -889,8 +889,10 @@ ModelLoader::_HandleTeamRemoved(system_profiler_team_removed* event)
|
|||||||
{
|
{
|
||||||
if (Model::Team* team = fModel->TeamByID(event->team))
|
if (Model::Team* team = fModel->TeamByID(event->team))
|
||||||
team->SetDeletionTime(fState->LastEventTime());
|
team->SetDeletionTime(fState->LastEventTime());
|
||||||
else
|
else {
|
||||||
printf("Warning: Removed event for unknown team: %ld\n", event->team);
|
printf("Warning: Removed event for unknown team: %" B_PRId32 "\n",
|
||||||
|
event->team);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -913,7 +915,7 @@ ModelLoader::_HandleThreadRemoved(system_profiler_thread_removed* event)
|
|||||||
{
|
{
|
||||||
ExtendedThreadSchedulingState* thread = fState->LookupThread(event->thread);
|
ExtendedThreadSchedulingState* thread = fState->LookupThread(event->thread);
|
||||||
if (thread == NULL) {
|
if (thread == NULL) {
|
||||||
printf("Warning: Removed event for unknown thread: %ld\n",
|
printf("Warning: Removed event for unknown thread: %" B_PRId32 "\n",
|
||||||
event->thread);
|
event->thread);
|
||||||
thread = _AddUnknownThread(event->thread);
|
thread = _AddUnknownThread(event->thread);
|
||||||
}
|
}
|
||||||
@@ -931,7 +933,7 @@ ModelLoader::_HandleThreadScheduled(uint32 cpu,
|
|||||||
|
|
||||||
ExtendedThreadSchedulingState* thread = fState->LookupThread(event->thread);
|
ExtendedThreadSchedulingState* thread = fState->LookupThread(event->thread);
|
||||||
if (thread == NULL) {
|
if (thread == NULL) {
|
||||||
printf("Warning: Schedule event for unknown thread: %ld\n",
|
printf("Warning: Schedule event for unknown thread: %" B_PRId32 "\n",
|
||||||
event->thread);
|
event->thread);
|
||||||
thread = _AddUnknownThread(event->thread);
|
thread = _AddUnknownThread(event->thread);
|
||||||
return;
|
return;
|
||||||
@@ -966,8 +968,8 @@ ModelLoader::_HandleThreadScheduled(uint32 cpu,
|
|||||||
|
|
||||||
thread = fState->LookupThread(event->previous_thread);
|
thread = fState->LookupThread(event->previous_thread);
|
||||||
if (thread == NULL) {
|
if (thread == NULL) {
|
||||||
printf("Warning: Schedule event for unknown previous thread: %ld\n",
|
printf("Warning: Schedule event for unknown previous thread: %" B_PRId32
|
||||||
event->previous_thread);
|
"\n", event->previous_thread);
|
||||||
thread = _AddUnknownThread(event->previous_thread);
|
thread = _AddUnknownThread(event->previous_thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1035,8 +1037,8 @@ ModelLoader::_HandleThreadEnqueuedInRunQueue(
|
|||||||
|
|
||||||
ExtendedThreadSchedulingState* thread = fState->LookupThread(event->thread);
|
ExtendedThreadSchedulingState* thread = fState->LookupThread(event->thread);
|
||||||
if (thread == NULL) {
|
if (thread == NULL) {
|
||||||
printf("Warning: Enqueued in run queue event for unknown thread: %ld\n",
|
printf("Warning: Enqueued in run queue event for unknown thread: %"
|
||||||
event->thread);
|
B_PRId32 "\n", event->thread);
|
||||||
thread = _AddUnknownThread(event->thread);
|
thread = _AddUnknownThread(event->thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1073,7 +1075,7 @@ ModelLoader::_HandleThreadRemovedFromRunQueue(uint32 cpu,
|
|||||||
ExtendedThreadSchedulingState* thread = fState->LookupThread(event->thread);
|
ExtendedThreadSchedulingState* thread = fState->LookupThread(event->thread);
|
||||||
if (thread == NULL) {
|
if (thread == NULL) {
|
||||||
printf("Warning: Removed from run queue event for unknown thread: "
|
printf("Warning: Removed from run queue event for unknown thread: "
|
||||||
"%ld\n", event->thread);
|
"%" B_PRId32 "\n", event->thread);
|
||||||
thread = _AddUnknownThread(event->thread);
|
thread = _AddUnknownThread(event->thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1112,8 +1114,8 @@ ModelLoader::_HandleIOSchedulerAdded(system_profiler_io_scheduler_added* event)
|
|||||||
{
|
{
|
||||||
Model::IOScheduler* scheduler = fModel->IOSchedulerByID(event->scheduler);
|
Model::IOScheduler* scheduler = fModel->IOSchedulerByID(event->scheduler);
|
||||||
if (scheduler != NULL) {
|
if (scheduler != NULL) {
|
||||||
printf("Warning: Duplicate added event for I/O scheduler %ld\n",
|
printf("Warning: Duplicate added event for I/O scheduler %" B_PRId32
|
||||||
event->scheduler);
|
"\n", event->scheduler);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1134,12 +1136,13 @@ ModelLoader::_HandleIORequestScheduled(io_request_scheduled* event)
|
|||||||
|
|
||||||
ExtendedThreadSchedulingState* thread = fState->LookupThread(event->thread);
|
ExtendedThreadSchedulingState* thread = fState->LookupThread(event->thread);
|
||||||
if (thread == NULL) {
|
if (thread == NULL) {
|
||||||
printf("Warning: I/O request for unknown thread %ld\n", event->thread);
|
printf("Warning: I/O request for unknown thread %" B_PRId32 "\n",
|
||||||
|
event->thread);
|
||||||
thread = _AddUnknownThread(event->thread);
|
thread = _AddUnknownThread(event->thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fModel->IOSchedulerByID(event->scheduler) == NULL) {
|
if (fModel->IOSchedulerByID(event->scheduler) == NULL) {
|
||||||
printf("Warning: I/O requests for unknown scheduler %ld\n",
|
printf("Warning: I/O requests for unknown scheduler %" B_PRId32 "\n",
|
||||||
event->scheduler);
|
event->scheduler);
|
||||||
// TODO: Add state for unknown scheduler, as we do for threads.
|
// TODO: Add state for unknown scheduler, as we do for threads.
|
||||||
return;
|
return;
|
||||||
@@ -1307,8 +1310,8 @@ ModelLoader::_AddThreadWaitObject(ExtendedThreadSchedulingState* thread,
|
|||||||
= fModel->WaitObjectGroupFor(type, object);
|
= fModel->WaitObjectGroupFor(type, object);
|
||||||
if (waitObjectGroup == NULL) {
|
if (waitObjectGroup == NULL) {
|
||||||
// The algorithm should prevent this case.
|
// The algorithm should prevent this case.
|
||||||
printf("ModelLoader::_AddThreadWaitObject(): Unknown wait object: type: %lu, "
|
printf("ModelLoader::_AddThreadWaitObject(): Unknown wait object: type:"
|
||||||
"object: %#lx\n", type, object);
|
" %" B_PRIu32 ", " "object: %#" B_PRIxADDR "\n", type, object);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -114,9 +114,9 @@ ThreadModelLoader::_Load()
|
|||||||
|
|
||||||
// create the groups
|
// create the groups
|
||||||
int32 waitObjectCount = waitObjects.CountItems();
|
int32 waitObjectCount = waitObjects.CountItems();
|
||||||
printf("%ld wait objects\n", waitObjectCount);
|
printf("%" B_PRId32 " wait objects\n", waitObjectCount);
|
||||||
for (int32 i = 0; i < waitObjectCount;) {
|
for (int32 i = 0; i < waitObjectCount;) {
|
||||||
printf("new wait object group at %ld\n", i);
|
printf("new wait object group at %" B_PRId32 "\n", i);
|
||||||
// collect the objects for this group
|
// collect the objects for this group
|
||||||
Model::ThreadWaitObject* firstObject = waitObjects.ItemAt(i);
|
Model::ThreadWaitObject* firstObject = waitObjects.ItemAt(i);
|
||||||
int32 k = i + 1;
|
int32 k = i + 1;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2009-2012, Ingo Weinhold, ingo_weinhold@gmx.de.
|
* Copyright 2009-2012, Ingo Weinhold, ingo_weinhold@gmx.de.
|
||||||
* Copyright 2011-2014, Rene Gollent, rene@gollent.com.
|
* Copyright 2011-2015, Rene Gollent, rene@gollent.com.
|
||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -26,6 +26,7 @@
|
|||||||
#include "GraphicalUserInterface.h"
|
#include "GraphicalUserInterface.h"
|
||||||
#include "ImageDebugLoadingStateHandlerRoster.h"
|
#include "ImageDebugLoadingStateHandlerRoster.h"
|
||||||
#include "MessageCodes.h"
|
#include "MessageCodes.h"
|
||||||
|
#include "ReportUserInterface.h"
|
||||||
#include "SettingsManager.h"
|
#include "SettingsManager.h"
|
||||||
#include "SignalSet.h"
|
#include "SignalSet.h"
|
||||||
#include "StartTeamWindow.h"
|
#include "StartTeamWindow.h"
|
||||||
@@ -143,7 +144,6 @@ parse_arguments(int argc, const char* const* argv, bool noOutput,
|
|||||||
|
|
||||||
case 's':
|
case 's':
|
||||||
{
|
{
|
||||||
options.useCLI = true;
|
|
||||||
options.saveReport = true;
|
options.saveReport = true;
|
||||||
options.reportPath = optarg;
|
options.reportPath = optarg;
|
||||||
break;
|
break;
|
||||||
@@ -393,6 +393,21 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class ReportDebugger : private TeamDebugger::Listener {
|
||||||
|
public:
|
||||||
|
ReportDebugger();
|
||||||
|
~ReportDebugger();
|
||||||
|
bool Run(const Options& options);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// TeamDebugger::Listener
|
||||||
|
virtual void TeamDebuggerStarted(TeamDebugger* debugger);
|
||||||
|
virtual void TeamDebuggerRestartRequested(
|
||||||
|
TeamDebugger* debugger);
|
||||||
|
virtual void TeamDebuggerQuit(TeamDebugger* debugger);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark - Debugger application class
|
// #pragma mark - Debugger application class
|
||||||
|
|
||||||
|
|
||||||
@@ -723,8 +738,7 @@ CliDebugger::Run(const Options& options)
|
|||||||
|
|
||||||
// create the command line UI
|
// create the command line UI
|
||||||
CommandLineUserInterface* userInterface
|
CommandLineUserInterface* userInterface
|
||||||
= new(std::nothrow) CommandLineUserInterface(options.saveReport,
|
= new(std::nothrow) CommandLineUserInterface();
|
||||||
options.reportPath, options.thread);
|
|
||||||
if (userInterface == NULL) {
|
if (userInterface == NULL) {
|
||||||
fprintf(stderr, "Error: Out of memory!\n");
|
fprintf(stderr, "Error: Out of memory!\n");
|
||||||
return false;
|
return false;
|
||||||
@@ -774,6 +788,89 @@ CliDebugger::TeamDebuggerQuit(TeamDebugger* debugger)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// #pragma mark - ReportDebugger
|
||||||
|
|
||||||
|
|
||||||
|
ReportDebugger::ReportDebugger()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ReportDebugger::~ReportDebugger()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
ReportDebugger::Run(const Options& options)
|
||||||
|
{
|
||||||
|
// initialize global objects and settings manager
|
||||||
|
status_t error = global_init();
|
||||||
|
if (error != B_OK) {
|
||||||
|
fprintf(stderr, "Error: Global initialization failed: %s\n",
|
||||||
|
strerror(error));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
SettingsManager settingsManager;
|
||||||
|
error = settingsManager.Init();
|
||||||
|
if (error != B_OK) {
|
||||||
|
fprintf(stderr, "Error: Settings manager initialization failed: "
|
||||||
|
"%s\n", strerror(error));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// create the report UI
|
||||||
|
ReportUserInterface* userInterface
|
||||||
|
= new(std::nothrow) ReportUserInterface(options.thread, options.reportPath);
|
||||||
|
if (userInterface == NULL) {
|
||||||
|
fprintf(stderr, "Error: Out of memory!\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
BReference<UserInterface> userInterfaceReference(userInterface, true);
|
||||||
|
|
||||||
|
// get/run the program to be debugged and start the team debugger
|
||||||
|
DebuggedProgramInfo programInfo;
|
||||||
|
if (!get_debugged_program(options, programInfo))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
TeamDebugger* teamDebugger = start_team_debugger(programInfo.team,
|
||||||
|
&settingsManager, this, programInfo.thread,
|
||||||
|
programInfo.commandLineArgc, programInfo.commandLineArgv,
|
||||||
|
programInfo.stopInMain, userInterface);
|
||||||
|
if (teamDebugger == NULL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
thread_id teamDebuggerThread = teamDebugger->Thread();
|
||||||
|
|
||||||
|
// run the input loop
|
||||||
|
userInterface->Run();
|
||||||
|
|
||||||
|
// wait for the team debugger thread to terminate
|
||||||
|
wait_for_thread(teamDebuggerThread, NULL);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ReportDebugger::TeamDebuggerStarted(TeamDebugger* debugger)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ReportDebugger::TeamDebuggerRestartRequested(TeamDebugger* debugger)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ReportDebugger::TeamDebuggerQuit(TeamDebugger* debugger)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark -
|
// #pragma mark -
|
||||||
|
|
||||||
|
|
||||||
@@ -792,6 +889,9 @@ main(int argc, const char* const* argv)
|
|||||||
if (options.useCLI) {
|
if (options.useCLI) {
|
||||||
CliDebugger debugger;
|
CliDebugger debugger;
|
||||||
return debugger.Run(options) ? 0 : 1;
|
return debugger.Run(options) ? 0 : 1;
|
||||||
|
} else if (options.saveReport) {
|
||||||
|
ReportDebugger debugger;
|
||||||
|
return debugger.Run(options) ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Debugger app;
|
Debugger app;
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui teams_window ] ;
|
|||||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui utility_windows ] ;
|
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui utility_windows ] ;
|
||||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui util ] ;
|
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui util ] ;
|
||||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui value ] ;
|
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface gui value ] ;
|
||||||
|
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface report ] ;
|
||||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface util ] ;
|
SEARCH_SOURCE += [ FDirName $(SUBDIR) user_interface util ] ;
|
||||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) util ] ;
|
SEARCH_SOURCE += [ FDirName $(SUBDIR) util ] ;
|
||||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) value ] ;
|
SEARCH_SOURCE += [ FDirName $(SUBDIR) value ] ;
|
||||||
@@ -321,6 +322,9 @@ local sources =
|
|||||||
TableCellValueRenderer.cpp
|
TableCellValueRenderer.cpp
|
||||||
TableCellValueRendererUtils.cpp
|
TableCellValueRendererUtils.cpp
|
||||||
|
|
||||||
|
# user_interface/report
|
||||||
|
ReportUserInterface.cpp
|
||||||
|
|
||||||
# user_interface/util
|
# user_interface/util
|
||||||
UiUtils.cpp
|
UiUtils.cpp
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#include <new>
|
#include <new>
|
||||||
|
|
||||||
#include <Entry.h>
|
#include <Entry.h>
|
||||||
|
#include <InterfaceDefs.h>
|
||||||
#include <Message.h>
|
#include <Message.h>
|
||||||
#include <StringList.h>
|
#include <StringList.h>
|
||||||
|
|
||||||
@@ -1369,10 +1370,37 @@ TeamDebugger::UserInterfaceQuitRequested(QuitOption quitOption)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
TeamDebugger::JobStarted(Job* job)
|
||||||
|
{
|
||||||
|
BString description(job->GetDescription());
|
||||||
|
if (!description.IsEmpty()) {
|
||||||
|
description.Append(B_UTF8_ELLIPSIS);
|
||||||
|
fUserInterface->NotifyBackgroundWorkStatus(description.String());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
TeamDebugger::JobDone(Job* job)
|
TeamDebugger::JobDone(Job* job)
|
||||||
{
|
{
|
||||||
TRACE_JOBS("TeamDebugger::JobDone(%p)\n", job);
|
TRACE_JOBS("TeamDebugger::JobDone(%p)\n", job);
|
||||||
|
_ResetUserBackgroundStatusIfNeeded();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
TeamDebugger::JobWaitingForInput(Job* job)
|
||||||
|
{
|
||||||
|
LoadImageDebugInfoJob* infoJob = dynamic_cast<LoadImageDebugInfoJob*>(job);
|
||||||
|
|
||||||
|
if (infoJob == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
BMessage message(MSG_DEBUG_INFO_NEEDS_USER_INPUT);
|
||||||
|
message.AddPointer("job", infoJob);
|
||||||
|
message.AddPointer("state", infoJob->GetLoadingState());
|
||||||
|
PostMessage(&message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1381,6 +1409,7 @@ TeamDebugger::JobFailed(Job* job)
|
|||||||
{
|
{
|
||||||
TRACE_JOBS("TeamDebugger::JobFailed(%p)\n", job);
|
TRACE_JOBS("TeamDebugger::JobFailed(%p)\n", job);
|
||||||
// TODO: notify user
|
// TODO: notify user
|
||||||
|
_ResetUserBackgroundStatusIfNeeded();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1390,20 +1419,7 @@ TeamDebugger::JobAborted(Job* job)
|
|||||||
TRACE_JOBS("TeamDebugger::JobAborted(%p)\n", job);
|
TRACE_JOBS("TeamDebugger::JobAborted(%p)\n", job);
|
||||||
// TODO: For a stack frame source loader thread we should reset the
|
// TODO: For a stack frame source loader thread we should reset the
|
||||||
// loading state! Asynchronously due to locking order.
|
// loading state! Asynchronously due to locking order.
|
||||||
}
|
_ResetUserBackgroundStatusIfNeeded();
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
TeamDebugger::ImageDebugInfoJobNeedsUserInput(Job* job,
|
|
||||||
ImageDebugInfoLoadingState* state)
|
|
||||||
{
|
|
||||||
TRACE_JOBS("TeamDebugger::DebugInfoJobNeedsUserInput(%p, %p)\n",
|
|
||||||
job, state);
|
|
||||||
|
|
||||||
BMessage message(MSG_DEBUG_INFO_NEEDS_USER_INPUT);
|
|
||||||
message.AddPointer("job", job);
|
|
||||||
message.AddPointer("state", state);
|
|
||||||
PostMessage(&message);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1908,7 +1924,6 @@ TeamDebugger::_HandleImageDebugInfoChanged(image_id imageID)
|
|||||||
|
|
||||||
bool handlePostExecSetup = fExecPending && image->Type() == B_APP_IMAGE
|
bool handlePostExecSetup = fExecPending && image->Type() == B_APP_IMAGE
|
||||||
&& state != IMAGE_DEBUG_INFO_LOADING;
|
&& state != IMAGE_DEBUG_INFO_LOADING;
|
||||||
|
|
||||||
// this needs to be done first so that breakpoints are loaded.
|
// this needs to be done first so that breakpoints are loaded.
|
||||||
// otherwise, UpdateImageBreakpoints() won't find the appropriate
|
// otherwise, UpdateImageBreakpoints() won't find the appropriate
|
||||||
// UserBreakpoints to create/install instances for.
|
// UserBreakpoints to create/install instances for.
|
||||||
@@ -1922,6 +1937,7 @@ TeamDebugger::_HandleImageDebugInfoChanged(image_id imageID)
|
|||||||
|
|
||||||
if (state == IMAGE_DEBUG_INFO_LOADED
|
if (state == IMAGE_DEBUG_INFO_LOADED
|
||||||
|| state == IMAGE_DEBUG_INFO_UNAVAILABLE) {
|
|| state == IMAGE_DEBUG_INFO_UNAVAILABLE) {
|
||||||
|
|
||||||
// update breakpoints in the image
|
// update breakpoints in the image
|
||||||
fBreakpointManager->UpdateImageBreakpoints(image);
|
fBreakpointManager->UpdateImageBreakpoints(image);
|
||||||
|
|
||||||
@@ -2486,6 +2502,14 @@ TeamDebugger::_NotifyUser(const char* title, const char* text,...)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
TeamDebugger::_ResetUserBackgroundStatusIfNeeded()
|
||||||
|
{
|
||||||
|
if (!fWorker->HasPendingJobs())
|
||||||
|
fUserInterface->NotifyBackgroundWorkStatus("Ready.");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark - Listener
|
// #pragma mark - Listener
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -32,8 +32,7 @@ class WatchpointManager;
|
|||||||
|
|
||||||
|
|
||||||
class TeamDebugger : public BLooper, private UserInterfaceListener,
|
class TeamDebugger : public BLooper, private UserInterfaceListener,
|
||||||
private JobListener, private ImageDebugInfoJobListener,
|
private JobListener, private Team::Listener {
|
||||||
private Team::Listener {
|
|
||||||
public:
|
public:
|
||||||
class Listener;
|
class Listener;
|
||||||
|
|
||||||
@@ -134,13 +133,12 @@ private:
|
|||||||
QuitOption quitOption);
|
QuitOption quitOption);
|
||||||
|
|
||||||
// JobListener
|
// JobListener
|
||||||
|
virtual void JobStarted(Job* job);
|
||||||
virtual void JobDone(Job* job);
|
virtual void JobDone(Job* job);
|
||||||
|
virtual void JobWaitingForInput(Job* job);
|
||||||
virtual void JobFailed(Job* job);
|
virtual void JobFailed(Job* job);
|
||||||
virtual void JobAborted(Job* job);
|
virtual void JobAborted(Job* job);
|
||||||
|
|
||||||
virtual void ImageDebugInfoJobNeedsUserInput(Job* job,
|
|
||||||
ImageDebugInfoLoadingState* state);
|
|
||||||
|
|
||||||
// Team::Listener
|
// Team::Listener
|
||||||
virtual void ThreadStateChanged(
|
virtual void ThreadStateChanged(
|
||||||
const ::Team::ThreadEvent& event);
|
const ::Team::ThreadEvent& event);
|
||||||
@@ -235,6 +233,11 @@ private:
|
|||||||
void _NotifyUser(const char* title,
|
void _NotifyUser(const char* title,
|
||||||
const char* text,...);
|
const char* text,...);
|
||||||
|
|
||||||
|
void _ResetUserBackgroundStatusIfNeeded();
|
||||||
|
// updates user interface to
|
||||||
|
// ready/completed message
|
||||||
|
// for background work status
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Listener* fListener;
|
Listener* fListener;
|
||||||
SettingsManager* fSettingsManager;
|
SettingsManager* fSettingsManager;
|
||||||
|
|||||||
@@ -76,14 +76,13 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
ThreadHandler::ThreadHandler(Thread* thread, Worker* worker,
|
ThreadHandler::ThreadHandler(Thread* thread, Worker* worker,
|
||||||
DebuggerInterface* debuggerInterface,
|
DebuggerInterface* debuggerInterface, JobListener* jobListener,
|
||||||
ImageDebugInfoJobListener* listener,
|
|
||||||
BreakpointManager* breakpointManager)
|
BreakpointManager* breakpointManager)
|
||||||
:
|
:
|
||||||
fThread(thread),
|
fThread(thread),
|
||||||
fWorker(worker),
|
fWorker(worker),
|
||||||
fDebuggerInterface(debuggerInterface),
|
fDebuggerInterface(debuggerInterface),
|
||||||
fDebugInfoJobListener(listener),
|
fJobListener(jobListener),
|
||||||
fBreakpointManager(breakpointManager),
|
fBreakpointManager(breakpointManager),
|
||||||
fStepMode(STEP_NONE),
|
fStepMode(STEP_NONE),
|
||||||
fStepStatement(NULL),
|
fStepStatement(NULL),
|
||||||
@@ -113,7 +112,7 @@ void
|
|||||||
ThreadHandler::Init()
|
ThreadHandler::Init()
|
||||||
{
|
{
|
||||||
fWorker->ScheduleJob(new(std::nothrow) GetThreadStateJob(fDebuggerInterface,
|
fWorker->ScheduleJob(new(std::nothrow) GetThreadStateJob(fDebuggerInterface,
|
||||||
fThread));
|
fThread), fJobListener);
|
||||||
fConditionWaitSem = create_sem(0, "breakpoint condition waiter");
|
fConditionWaitSem = create_sem(0, "breakpoint condition waiter");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -458,7 +457,8 @@ ThreadHandler::HandleThreadStateChanged()
|
|||||||
if (fThread->State() == THREAD_STATE_STOPPED
|
if (fThread->State() == THREAD_STATE_STOPPED
|
||||||
&& fThread->GetCpuState() == NULL) {
|
&& fThread->GetCpuState() == NULL) {
|
||||||
fWorker->ScheduleJob(
|
fWorker->ScheduleJob(
|
||||||
new(std::nothrow) GetCpuStateJob(fDebuggerInterface, fThread));
|
new(std::nothrow) GetCpuStateJob(fDebuggerInterface, fThread),
|
||||||
|
fJobListener);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -475,8 +475,8 @@ ThreadHandler::HandleCpuStateChanged()
|
|||||||
if (fThread->GetCpuState() != NULL && fThread->GetStackTrace() == NULL) {
|
if (fThread->GetCpuState() != NULL && fThread->GetStackTrace() == NULL) {
|
||||||
fWorker->ScheduleJob(
|
fWorker->ScheduleJob(
|
||||||
new(std::nothrow) GetStackTraceJob(fDebuggerInterface,
|
new(std::nothrow) GetStackTraceJob(fDebuggerInterface,
|
||||||
fDebugInfoJobListener, fDebuggerInterface->GetArchitecture(),
|
fJobListener, fDebuggerInterface->GetArchitecture(),
|
||||||
fThread));
|
fThread), fJobListener);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -954,7 +954,8 @@ ThreadHandler::_HandleBreakpointConditionIfNeeded(CpuState* cpuState)
|
|||||||
|
|
||||||
status_t error = fWorker->ScheduleJob(
|
status_t error = fWorker->ScheduleJob(
|
||||||
new(std::nothrow) ExpressionEvaluationJob(fThread->GetTeam(),
|
new(std::nothrow) ExpressionEvaluationJob(fThread->GetTeam(),
|
||||||
fDebuggerInterface, language, expressionInfo, frame, fThread));
|
fDebuggerInterface, language, expressionInfo, frame, fThread),
|
||||||
|
fJobListener);
|
||||||
|
|
||||||
BPrivate::ObjectDeleter<ExpressionEvaluationListener> deleter(
|
BPrivate::ObjectDeleter<ExpressionEvaluationListener> deleter(
|
||||||
listener);
|
listener);
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ class BreakpointManager;
|
|||||||
class DebuggerInterface;
|
class DebuggerInterface;
|
||||||
class ExpressionResult;
|
class ExpressionResult;
|
||||||
class ImageDebugInfoJobListener;
|
class ImageDebugInfoJobListener;
|
||||||
|
class JobListener;
|
||||||
class StackFrame;
|
class StackFrame;
|
||||||
class Statement;
|
class Statement;
|
||||||
class Worker;
|
class Worker;
|
||||||
@@ -30,7 +31,7 @@ class ThreadHandler : public BReferenceable, private ImageDebugInfoProvider,
|
|||||||
public:
|
public:
|
||||||
ThreadHandler(Thread* thread, Worker* worker,
|
ThreadHandler(Thread* thread, Worker* worker,
|
||||||
DebuggerInterface* debuggerInterface,
|
DebuggerInterface* debuggerInterface,
|
||||||
ImageDebugInfoJobListener* listener,
|
JobListener* listener,
|
||||||
BreakpointManager* breakpointManager);
|
BreakpointManager* breakpointManager);
|
||||||
~ThreadHandler();
|
~ThreadHandler();
|
||||||
|
|
||||||
@@ -117,7 +118,7 @@ private:
|
|||||||
Thread* fThread;
|
Thread* fThread;
|
||||||
Worker* fWorker;
|
Worker* fWorker;
|
||||||
DebuggerInterface* fDebuggerInterface;
|
DebuggerInterface* fDebuggerInterface;
|
||||||
ImageDebugInfoJobListener* fDebugInfoJobListener;
|
JobListener* fJobListener;
|
||||||
BreakpointManager* fBreakpointManager;
|
BreakpointManager* fBreakpointManager;
|
||||||
uint32 fStepMode;
|
uint32 fStepMode;
|
||||||
Statement* fStepStatement;
|
Statement* fStepStatement;
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
|
|
||||||
#include <Entry.h>
|
#include <Entry.h>
|
||||||
|
#include <InterfaceDefs.h>
|
||||||
#include <Path.h>
|
#include <Path.h>
|
||||||
#include <package/solver/Solver.h>
|
#include <package/solver/Solver.h>
|
||||||
#include <package/solver/SolverPackage.h>
|
#include <package/solver/SolverPackage.h>
|
||||||
@@ -108,6 +109,10 @@ DwarfLoadingStateHandler::HandleState(
|
|||||||
BString command;
|
BString command;
|
||||||
command.SetToFormat("/bin/pkgman install -y %s",
|
command.SetToFormat("/bin/pkgman install -y %s",
|
||||||
requiredPackage.String());
|
requiredPackage.String());
|
||||||
|
BString notification;
|
||||||
|
notification.SetToFormat("Installing package %s" B_UTF8_ELLIPSIS,
|
||||||
|
requiredPackage.String());
|
||||||
|
interface->NotifyBackgroundWorkStatus(notification);
|
||||||
int error = system(command.String());
|
int error = system(command.String());
|
||||||
if (interface->IsInteractive()) {
|
if (interface->IsInteractive()) {
|
||||||
if (WIFEXITED(error)) {
|
if (WIFEXITED(error)) {
|
||||||
|
|||||||
@@ -18,12 +18,11 @@
|
|||||||
|
|
||||||
|
|
||||||
GetStackTraceJob::GetStackTraceJob(DebuggerInterface* debuggerInterface,
|
GetStackTraceJob::GetStackTraceJob(DebuggerInterface* debuggerInterface,
|
||||||
ImageDebugInfoJobListener* listener, Architecture* architecture,
|
JobListener* listener, Architecture* architecture, Thread* thread)
|
||||||
Thread* thread)
|
|
||||||
:
|
:
|
||||||
fKey(thread, JOB_TYPE_GET_STACK_TRACE),
|
fKey(thread, JOB_TYPE_GET_STACK_TRACE),
|
||||||
fDebuggerInterface(debuggerInterface),
|
fDebuggerInterface(debuggerInterface),
|
||||||
fDebugInfoJobListener(listener),
|
fJobListener(listener),
|
||||||
fArchitecture(architecture),
|
fArchitecture(architecture),
|
||||||
fThread(thread)
|
fThread(thread)
|
||||||
{
|
{
|
||||||
@@ -32,6 +31,9 @@ GetStackTraceJob::GetStackTraceJob(DebuggerInterface* debuggerInterface,
|
|||||||
fCpuState = fThread->GetCpuState();
|
fCpuState = fThread->GetCpuState();
|
||||||
if (fCpuState != NULL)
|
if (fCpuState != NULL)
|
||||||
fCpuState->AcquireReference();
|
fCpuState->AcquireReference();
|
||||||
|
|
||||||
|
|
||||||
|
SetDescription("Retrieving stack trace for thread %" B_PRId32, fThread->ID());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -84,7 +86,7 @@ GetStackTraceJob::GetImageDebugInfo(Image* image, ImageDebugInfo*& _info)
|
|||||||
// schedule a job, if not loaded
|
// schedule a job, if not loaded
|
||||||
ImageDebugInfo* info;
|
ImageDebugInfo* info;
|
||||||
status_t error = LoadImageDebugInfoJob::ScheduleIfNecessary(GetWorker(),
|
status_t error = LoadImageDebugInfoJob::ScheduleIfNecessary(GetWorker(),
|
||||||
image, fDebugInfoJobListener, &info);
|
image, fJobListener, &info);
|
||||||
if (error != B_OK)
|
if (error != B_OK)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
|
|||||||
@@ -92,19 +92,11 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class ImageDebugInfoJobListener {
|
|
||||||
public:
|
|
||||||
virtual ~ImageDebugInfoJobListener();
|
|
||||||
virtual void ImageDebugInfoJobNeedsUserInput(Job* job,
|
|
||||||
ImageDebugInfoLoadingState* state);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class GetStackTraceJob : public Job, private ImageDebugInfoProvider {
|
class GetStackTraceJob : public Job, private ImageDebugInfoProvider {
|
||||||
public:
|
public:
|
||||||
GetStackTraceJob(
|
GetStackTraceJob(
|
||||||
DebuggerInterface* debuggerInterface,
|
DebuggerInterface* debuggerInterface,
|
||||||
ImageDebugInfoJobListener* listener,
|
JobListener* jobListener,
|
||||||
Architecture* architecture, Thread* thread);
|
Architecture* architecture, Thread* thread);
|
||||||
virtual ~GetStackTraceJob();
|
virtual ~GetStackTraceJob();
|
||||||
|
|
||||||
@@ -119,7 +111,7 @@ private:
|
|||||||
private:
|
private:
|
||||||
SimpleJobKey fKey;
|
SimpleJobKey fKey;
|
||||||
DebuggerInterface* fDebuggerInterface;
|
DebuggerInterface* fDebuggerInterface;
|
||||||
ImageDebugInfoJobListener* fDebugInfoJobListener;
|
JobListener* fJobListener;
|
||||||
Architecture* fArchitecture;
|
Architecture* fArchitecture;
|
||||||
Thread* fThread;
|
Thread* fThread;
|
||||||
CpuState* fCpuState;
|
CpuState* fCpuState;
|
||||||
@@ -128,8 +120,7 @@ private:
|
|||||||
|
|
||||||
class LoadImageDebugInfoJob : public Job {
|
class LoadImageDebugInfoJob : public Job {
|
||||||
public:
|
public:
|
||||||
LoadImageDebugInfoJob(Image* image,
|
LoadImageDebugInfoJob(Image* image);
|
||||||
ImageDebugInfoJobListener* listener);
|
|
||||||
virtual ~LoadImageDebugInfoJob();
|
virtual ~LoadImageDebugInfoJob();
|
||||||
|
|
||||||
virtual const JobKey& Key() const;
|
virtual const JobKey& Key() const;
|
||||||
@@ -137,7 +128,7 @@ public:
|
|||||||
|
|
||||||
static status_t ScheduleIfNecessary(Worker* worker,
|
static status_t ScheduleIfNecessary(Worker* worker,
|
||||||
Image* image,
|
Image* image,
|
||||||
ImageDebugInfoJobListener* listener,
|
JobListener* jobListener,
|
||||||
ImageDebugInfo** _imageDebugInfo = NULL);
|
ImageDebugInfo** _imageDebugInfo = NULL);
|
||||||
// If already loaded returns a
|
// If already loaded returns a
|
||||||
// reference, if desired. If not loaded
|
// reference, if desired. If not loaded
|
||||||
@@ -146,19 +137,16 @@ public:
|
|||||||
// if scheduling the job failed, or the
|
// if scheduling the job failed, or the
|
||||||
// debug info already failed to load
|
// debug info already failed to load
|
||||||
// earlier.
|
// earlier.
|
||||||
private:
|
|
||||||
void NotifyUserInputListener();
|
|
||||||
|
|
||||||
private:
|
|
||||||
typedef BObjectList<ImageDebugInfoJobListener> ListenerList;
|
|
||||||
|
|
||||||
|
ImageDebugInfoLoadingState*
|
||||||
|
GetLoadingState()
|
||||||
|
{ return &fState; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SimpleJobKey fKey;
|
SimpleJobKey fKey;
|
||||||
Image* fImage;
|
Image* fImage;
|
||||||
ImageDebugInfoLoadingState
|
ImageDebugInfoLoadingState
|
||||||
fState;
|
fState;
|
||||||
ImageDebugInfoJobListener* fListener;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -14,33 +14,19 @@
|
|||||||
#include "Team.h"
|
#include "Team.h"
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark - ImageDebugInfoJobListener
|
|
||||||
|
|
||||||
|
|
||||||
ImageDebugInfoJobListener::~ImageDebugInfoJobListener()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
ImageDebugInfoJobListener::ImageDebugInfoJobNeedsUserInput(Job* job,
|
|
||||||
ImageDebugInfoLoadingState* state)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark - LoadImageDebugInfoJob
|
// #pragma mark - LoadImageDebugInfoJob
|
||||||
|
|
||||||
|
|
||||||
LoadImageDebugInfoJob::LoadImageDebugInfoJob(Image* image,
|
LoadImageDebugInfoJob::LoadImageDebugInfoJob(Image* image)
|
||||||
ImageDebugInfoJobListener* listener)
|
|
||||||
:
|
:
|
||||||
fKey(image, JOB_TYPE_LOAD_IMAGE_DEBUG_INFO),
|
fKey(image, JOB_TYPE_LOAD_IMAGE_DEBUG_INFO),
|
||||||
fImage(image),
|
fImage(image),
|
||||||
fState(),
|
fState()
|
||||||
fListener(listener)
|
|
||||||
{
|
{
|
||||||
fImage->AcquireReference();
|
fImage->AcquireReference();
|
||||||
|
|
||||||
|
SetDescription("Loading debugging information for %s",
|
||||||
|
fImage->Name().String());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -74,7 +60,6 @@ LoadImageDebugInfoJob::Do()
|
|||||||
locker.Lock();
|
locker.Lock();
|
||||||
|
|
||||||
if (fState.UserInputRequired()) {
|
if (fState.UserInputRequired()) {
|
||||||
NotifyUserInputListener();
|
|
||||||
return WaitForUserInput();
|
return WaitForUserInput();
|
||||||
} else if (error == B_OK) {
|
} else if (error == B_OK) {
|
||||||
error = fImage->SetImageDebugInfo(debugInfo, IMAGE_DEBUG_INFO_LOADED);
|
error = fImage->SetImageDebugInfo(debugInfo, IMAGE_DEBUG_INFO_LOADED);
|
||||||
@@ -88,7 +73,7 @@ LoadImageDebugInfoJob::Do()
|
|||||||
|
|
||||||
/*static*/ status_t
|
/*static*/ status_t
|
||||||
LoadImageDebugInfoJob::ScheduleIfNecessary(Worker* worker, Image* image,
|
LoadImageDebugInfoJob::ScheduleIfNecessary(Worker* worker, Image* image,
|
||||||
ImageDebugInfoJobListener* listener, ImageDebugInfo** _imageDebugInfo)
|
JobListener* listener, ImageDebugInfo** _imageDebugInfo)
|
||||||
{
|
{
|
||||||
AutoLocker<Team> teamLocker(image->GetTeam());
|
AutoLocker<Team> teamLocker(image->GetTeam());
|
||||||
|
|
||||||
@@ -113,12 +98,12 @@ LoadImageDebugInfoJob::ScheduleIfNecessary(Worker* worker, Image* image,
|
|||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
|
|
||||||
// schedule a job
|
// schedule a job
|
||||||
LoadImageDebugInfoJob* job = new(std::nothrow) LoadImageDebugInfoJob(image,
|
LoadImageDebugInfoJob* job = new(std::nothrow) LoadImageDebugInfoJob(
|
||||||
listener);
|
image);
|
||||||
if (job == NULL)
|
if (job == NULL)
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
|
|
||||||
status_t error = worker->ScheduleJob(job);
|
status_t error = worker->ScheduleJob(job, listener);
|
||||||
if (error != B_OK) {
|
if (error != B_OK) {
|
||||||
image->SetImageDebugInfo(NULL, IMAGE_DEBUG_INFO_UNAVAILABLE);
|
image->SetImageDebugInfo(NULL, IMAGE_DEBUG_INFO_UNAVAILABLE);
|
||||||
return error;
|
return error;
|
||||||
@@ -130,12 +115,3 @@ LoadImageDebugInfoJob::ScheduleIfNecessary(Worker* worker, Image* image,
|
|||||||
*_imageDebugInfo = NULL;
|
*_imageDebugInfo = NULL;
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
LoadImageDebugInfoJob::NotifyUserInputListener()
|
|
||||||
{
|
|
||||||
if (fListener != NULL)
|
|
||||||
fListener->ImageDebugInfoJobNeedsUserInput(this, &fState);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,9 @@ LoadSourceCodeJob::LoadSourceCodeJob(
|
|||||||
fLoadForFunction(loadForFunction)
|
fLoadForFunction(loadForFunction)
|
||||||
{
|
{
|
||||||
fFunctionInstance->AcquireReference();
|
fFunctionInstance->AcquireReference();
|
||||||
|
|
||||||
|
SetDescription("Loading source code for function %s",
|
||||||
|
fFunctionInstance->PrettyName().String());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -66,6 +66,15 @@ public:
|
|||||||
virtual void NotifyUser(const char* title,
|
virtual void NotifyUser(const char* title,
|
||||||
const char* message,
|
const char* message,
|
||||||
user_notification_type type) = 0;
|
user_notification_type type) = 0;
|
||||||
|
virtual void NotifyBackgroundWorkStatus(const char* message)
|
||||||
|
= 0;
|
||||||
|
// this is used to inform the user about
|
||||||
|
// background processing work, but doesn't
|
||||||
|
// otherwise require any form of
|
||||||
|
// user interaction, i.e. for a status bar
|
||||||
|
// to indicate that debug information is
|
||||||
|
// being parsed.
|
||||||
|
|
||||||
virtual int32 SynchronouslyAskUser(const char* title,
|
virtual int32 SynchronouslyAskUser(const char* title,
|
||||||
const char* message, const char* choice1,
|
const char* message, const char* choice1,
|
||||||
const char* choice2, const char* choice3)
|
const char* choice2, const char* choice3)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2012-2014, Rene Gollent, rene@gollent.com.
|
* Copyright 2012-2015, Rene Gollent, rene@gollent.com.
|
||||||
* Copyright 2012, Ingo Weinhold, ingo_weinhold@gmx.de.
|
* Copyright 2012, Ingo Weinhold, ingo_weinhold@gmx.de.
|
||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
@@ -98,7 +98,6 @@ CliContext::CliContext()
|
|||||||
fInputLoopWaitingForEvents(0),
|
fInputLoopWaitingForEvents(0),
|
||||||
fEventsOccurred(0),
|
fEventsOccurred(0),
|
||||||
fInputLoopWaiting(false),
|
fInputLoopWaiting(false),
|
||||||
fInteractive(true),
|
|
||||||
fTerminating(false),
|
fTerminating(false),
|
||||||
fCurrentThread(NULL),
|
fCurrentThread(NULL),
|
||||||
fCurrentStackTrace(NULL),
|
fCurrentStackTrace(NULL),
|
||||||
@@ -219,13 +218,6 @@ CliContext::Terminating()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
CliContext::SetInteractive(bool interactive)
|
|
||||||
{
|
|
||||||
fInteractive = interactive;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
thread_id
|
thread_id
|
||||||
CliContext::CurrentThreadID() const
|
CliContext::CurrentThreadID() const
|
||||||
{
|
{
|
||||||
@@ -415,6 +407,7 @@ CliContext::ProcessPendingEvents()
|
|||||||
|
|
||||||
switch (event->Type()) {
|
switch (event->Type()) {
|
||||||
case EVENT_QUIT:
|
case EVENT_QUIT:
|
||||||
|
case EVENT_DEBUG_REPORT_CHANGED:
|
||||||
case EVENT_USER_INTERRUPT:
|
case EVENT_USER_INTERRUPT:
|
||||||
break;
|
break;
|
||||||
case EVENT_THREAD_ADDED:
|
case EVENT_THREAD_ADDED:
|
||||||
@@ -453,13 +446,6 @@ CliContext::ProcessPendingEvents()
|
|||||||
if (fExpressionValue != NULL)
|
if (fExpressionValue != NULL)
|
||||||
fExpressionValue->AcquireReference();
|
fExpressionValue->AcquireReference();
|
||||||
break;
|
break;
|
||||||
case EVENT_DEBUG_REPORT_CHANGED:
|
|
||||||
if (!IsInteractive()) {
|
|
||||||
Terminating();
|
|
||||||
QuitSession(true);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2012, Ingo Weinhold, ingo_weinhold@gmx.de.
|
* Copyright 2012, Ingo Weinhold, ingo_weinhold@gmx.de.
|
||||||
* Copyright 2014, Rene Gollent, rene@gollent.com.
|
* Copyright 2014-2015, Rene Gollent, rene@gollent.com.
|
||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
#ifndef CLI_CONTEXT_H
|
#ifndef CLI_CONTEXT_H
|
||||||
@@ -57,9 +57,6 @@ public:
|
|||||||
|
|
||||||
bool IsTerminating() const { return fTerminating; }
|
bool IsTerminating() const { return fTerminating; }
|
||||||
|
|
||||||
bool IsInteractive() const { return fInteractive; }
|
|
||||||
void SetInteractive(bool interactive);
|
|
||||||
|
|
||||||
// service methods for the input loop thread follow
|
// service methods for the input loop thread follow
|
||||||
|
|
||||||
Team* GetTeam() const { return fTeam; }
|
Team* GetTeam() const { return fTeam; }
|
||||||
@@ -150,7 +147,6 @@ private:
|
|||||||
uint32 fInputLoopWaitingForEvents;
|
uint32 fInputLoopWaitingForEvents;
|
||||||
uint32 fEventsOccurred;
|
uint32 fEventsOccurred;
|
||||||
bool fInputLoopWaiting;
|
bool fInputLoopWaiting;
|
||||||
bool fInteractive;
|
|
||||||
volatile bool fTerminating;
|
volatile bool fTerminating;
|
||||||
|
|
||||||
Thread* fCurrentThread;
|
Thread* fCurrentThread;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2011-2014, Rene Gollent, rene@gollent.com.
|
* Copyright 2011-2015, Rene Gollent, rene@gollent.com.
|
||||||
* Copyright 2012, Ingo Weinhold, ingo_weinhold@gmx.de.
|
* Copyright 2012, Ingo Weinhold, ingo_weinhold@gmx.de.
|
||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
@@ -93,13 +93,9 @@ private:
|
|||||||
// #pragma mark - CommandLineUserInterface
|
// #pragma mark - CommandLineUserInterface
|
||||||
|
|
||||||
|
|
||||||
CommandLineUserInterface::CommandLineUserInterface(bool saveReport,
|
CommandLineUserInterface::CommandLineUserInterface()
|
||||||
const char* reportPath, thread_id reportTargetThread)
|
|
||||||
:
|
:
|
||||||
fCommands(20, true),
|
fCommands(20, true),
|
||||||
fReportPath(reportPath),
|
|
||||||
fSaveReport(saveReport),
|
|
||||||
fReportTargetThread(reportTargetThread),
|
|
||||||
fShowSemaphore(-1),
|
fShowSemaphore(-1),
|
||||||
fShown(false),
|
fShown(false),
|
||||||
fTerminating(false)
|
fTerminating(false)
|
||||||
@@ -128,8 +124,6 @@ CommandLineUserInterface::Init(Team* team, UserInterfaceListener* listener)
|
|||||||
if (error != B_OK)
|
if (error != B_OK)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
fContext.SetInteractive(!fSaveReport);
|
|
||||||
|
|
||||||
error = _RegisterCommands();
|
error = _RegisterCommands();
|
||||||
if (error != B_OK)
|
if (error != B_OK)
|
||||||
return error;
|
return error;
|
||||||
@@ -138,8 +132,6 @@ CommandLineUserInterface::Init(Team* team, UserInterfaceListener* listener)
|
|||||||
if (fShowSemaphore < 0)
|
if (fShowSemaphore < 0)
|
||||||
return fShowSemaphore;
|
return fShowSemaphore;
|
||||||
|
|
||||||
team->AddListener(this);
|
|
||||||
|
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -176,9 +168,7 @@ CommandLineUserInterface::Terminate()
|
|||||||
bool
|
bool
|
||||||
CommandLineUserInterface::IsInteractive() const
|
CommandLineUserInterface::IsInteractive() const
|
||||||
{
|
{
|
||||||
// if we were invoked solely for the purpose of saving a crash report,
|
return true;
|
||||||
// then we're not taking user input into account.
|
|
||||||
return !fSaveReport;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -203,6 +193,12 @@ CommandLineUserInterface::NotifyUser(const char* title, const char* message,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
CommandLineUserInterface::NotifyBackgroundWorkStatus(const char* message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int32
|
int32
|
||||||
CommandLineUserInterface::SynchronouslyAskUser(const char* title,
|
CommandLineUserInterface::SynchronouslyAskUser(const char* title,
|
||||||
const char* message, const char* choice1, const char* choice2,
|
const char* message, const char* choice1, const char* choice2,
|
||||||
@@ -231,43 +227,12 @@ CommandLineUserInterface::Run()
|
|||||||
if (error != B_OK)
|
if (error != B_OK)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (fSaveReport) {
|
|
||||||
ArgumentVector args;
|
|
||||||
char buffer[256];
|
|
||||||
const char* parseErrorLocation;
|
|
||||||
if (_ReportTargetThreadStopNeeded()) {
|
|
||||||
snprintf(buffer, sizeof(buffer), "stop %" B_PRId32,
|
|
||||||
fReportTargetThread);
|
|
||||||
args.Parse(buffer, &parseErrorLocation);
|
|
||||||
_ExecuteCommand(args.ArgumentCount(), args.Arguments());
|
|
||||||
} else
|
|
||||||
_SubmitSaveReport();
|
|
||||||
}
|
|
||||||
|
|
||||||
_InputLoop();
|
_InputLoop();
|
||||||
// Release the Show() semaphore to signal Terminate().
|
// Release the Show() semaphore to signal Terminate().
|
||||||
release_sem(fShowSemaphore);
|
release_sem(fShowSemaphore);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
CommandLineUserInterface::ThreadStateChanged(const Team::ThreadEvent& event)
|
|
||||||
{
|
|
||||||
if (fSaveReport) {
|
|
||||||
Thread* thread = event.GetThread();
|
|
||||||
// If we were asked to attach/report on a specific thread
|
|
||||||
// rather than a team, and said thread was still
|
|
||||||
// running, when we attached, we need to wait for its corresponding
|
|
||||||
// stop state before generating a report, else we might not get its
|
|
||||||
// stack trace.
|
|
||||||
if (thread->ID() == fReportTargetThread
|
|
||||||
&& thread->State() == THREAD_STATE_STOPPED) {
|
|
||||||
_SubmitSaveReport();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*static*/ status_t
|
/*static*/ status_t
|
||||||
CommandLineUserInterface::_InputLoopEntry(void* data)
|
CommandLineUserInterface::_InputLoopEntry(void* data)
|
||||||
{
|
{
|
||||||
@@ -467,32 +432,3 @@ CommandLineUserInterface::_CompareCommandEntries(const CommandEntry* command1,
|
|||||||
{
|
{
|
||||||
return ::Compare(command1->Name(), command2->Name());
|
return ::Compare(command1->Name(), command2->Name());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
|
||||||
CommandLineUserInterface::_ReportTargetThreadStopNeeded() const
|
|
||||||
{
|
|
||||||
if (fReportTargetThread < 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
Team* team = fContext.GetTeam();
|
|
||||||
AutoLocker<Team> teamLocker(team);
|
|
||||||
Thread* thread = team->ThreadByID(fReportTargetThread);
|
|
||||||
if (thread == NULL)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return thread->State() != THREAD_STATE_STOPPED;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
CommandLineUserInterface::_SubmitSaveReport()
|
|
||||||
{
|
|
||||||
ArgumentVector args;
|
|
||||||
char buffer[256];
|
|
||||||
const char* parseErrorLocation;
|
|
||||||
snprintf(buffer, sizeof(buffer), "save-report %s",
|
|
||||||
fReportPath != NULL ? fReportPath : "");
|
|
||||||
args.Parse(buffer, &parseErrorLocation);
|
|
||||||
_ExecuteCommand(args.ArgumentCount(), args.Arguments());
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2011-2014, Rene Gollent, rene@gollent.com.
|
* Copyright 2011-2015, Rene Gollent, rene@gollent.com.
|
||||||
* Copyright 2012, Ingo Weinhold, ingo_weinhold@gmx.de.
|
* Copyright 2012, Ingo Weinhold, ingo_weinhold@gmx.de.
|
||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
@@ -17,12 +17,9 @@
|
|||||||
class CliCommand;
|
class CliCommand;
|
||||||
|
|
||||||
|
|
||||||
class CommandLineUserInterface : public UserInterface,
|
class CommandLineUserInterface : public UserInterface {
|
||||||
public ::Team::Listener {
|
|
||||||
public:
|
public:
|
||||||
CommandLineUserInterface(bool saveReport,
|
CommandLineUserInterface();
|
||||||
const char* reportPath,
|
|
||||||
thread_id reportTargetThread);
|
|
||||||
virtual ~CommandLineUserInterface();
|
virtual ~CommandLineUserInterface();
|
||||||
|
|
||||||
virtual const char* ID() const;
|
virtual const char* ID() const;
|
||||||
@@ -42,6 +39,8 @@ public:
|
|||||||
virtual void NotifyUser(const char* title,
|
virtual void NotifyUser(const char* title,
|
||||||
const char* message,
|
const char* message,
|
||||||
user_notification_type type);
|
user_notification_type type);
|
||||||
|
virtual void NotifyBackgroundWorkStatus(
|
||||||
|
const char* message);
|
||||||
virtual int32 SynchronouslyAskUser(const char* title,
|
virtual int32 SynchronouslyAskUser(const char* title,
|
||||||
const char* message, const char* choice1,
|
const char* message, const char* choice1,
|
||||||
const char* choice2, const char* choice3);
|
const char* choice2, const char* choice3);
|
||||||
@@ -52,10 +51,6 @@ public:
|
|||||||
// everything has been set up. Enters the
|
// everything has been set up. Enters the
|
||||||
// input loop.
|
// input loop.
|
||||||
|
|
||||||
// Team::Listener
|
|
||||||
virtual void ThreadStateChanged(
|
|
||||||
const Team::ThreadEvent& event);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct CommandEntry;
|
struct CommandEntry;
|
||||||
typedef BObjectList<CommandEntry> CommandList;
|
typedef BObjectList<CommandEntry> CommandList;
|
||||||
@@ -80,15 +75,9 @@ private:
|
|||||||
const CommandEntry* command1,
|
const CommandEntry* command1,
|
||||||
const CommandEntry* command2);
|
const CommandEntry* command2);
|
||||||
|
|
||||||
bool _ReportTargetThreadStopNeeded() const;
|
|
||||||
void _SubmitSaveReport();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CliContext fContext;
|
CliContext fContext;
|
||||||
CommandList fCommands;
|
CommandList fCommands;
|
||||||
const char* fReportPath;
|
|
||||||
bool fSaveReport;
|
|
||||||
thread_id fReportTargetThread;
|
|
||||||
sem_id fShowSemaphore;
|
sem_id fShowSemaphore;
|
||||||
bool fShown;
|
bool fShown;
|
||||||
volatile bool fTerminating;
|
volatile bool fTerminating;
|
||||||
|
|||||||
@@ -248,6 +248,13 @@ GraphicalUserInterface::NotifyUser(const char* title, const char* message,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
GraphicalUserInterface::NotifyBackgroundWorkStatus(const char* message)
|
||||||
|
{
|
||||||
|
fTeamWindow->DisplayBackgroundStatus(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int32
|
int32
|
||||||
GraphicalUserInterface::SynchronouslyAskUser(const char* title,
|
GraphicalUserInterface::SynchronouslyAskUser(const char* title,
|
||||||
const char* message, const char* choice1, const char* choice2,
|
const char* message, const char* choice1, const char* choice2,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
|
* Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
|
||||||
* Copyright 2014, Rene Gollent, rene@gollent.com.
|
* Copyright 2014-2015, Rene Gollent, rene@gollent.com.
|
||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
#ifndef GRAPHICAL_USER_INTERFACE_H
|
#ifndef GRAPHICAL_USER_INTERFACE_H
|
||||||
@@ -38,6 +38,8 @@ public:
|
|||||||
virtual void NotifyUser(const char* title,
|
virtual void NotifyUser(const char* title,
|
||||||
const char* message,
|
const char* message,
|
||||||
user_notification_type type);
|
user_notification_type type);
|
||||||
|
virtual void NotifyBackgroundWorkStatus(
|
||||||
|
const char* message);
|
||||||
virtual int32 SynchronouslyAskUser(const char* title,
|
virtual int32 SynchronouslyAskUser(const char* title,
|
||||||
const char* message, const char* choice1,
|
const char* message, const char* choice1,
|
||||||
const char* choice2, const char* choice3);
|
const char* choice2, const char* choice3);
|
||||||
|
|||||||
@@ -74,7 +74,8 @@ enum {
|
|||||||
MSG_LOCATE_SOURCE_IF_NEEDED = 'lsin',
|
MSG_LOCATE_SOURCE_IF_NEEDED = 'lsin',
|
||||||
MSG_SOURCE_ENTRY_QUERY_COMPLETE = 'seqc',
|
MSG_SOURCE_ENTRY_QUERY_COMPLETE = 'seqc',
|
||||||
MSG_CLEAR_STACK_TRACE = 'clst',
|
MSG_CLEAR_STACK_TRACE = 'clst',
|
||||||
MSG_HANDLE_LOAD_SETTINGS = 'hlst'
|
MSG_HANDLE_LOAD_SETTINGS = 'hlst',
|
||||||
|
MSG_UPDATE_STATUS_BAR = 'upsb'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -133,6 +134,7 @@ TeamWindow::TeamWindow(::Team* team, UserInterfaceListener* listener)
|
|||||||
fStepOutButton(NULL),
|
fStepOutButton(NULL),
|
||||||
fMenuBar(NULL),
|
fMenuBar(NULL),
|
||||||
fSourcePathView(NULL),
|
fSourcePathView(NULL),
|
||||||
|
fStatusBarView(NULL),
|
||||||
fConsoleOutputView(NULL),
|
fConsoleOutputView(NULL),
|
||||||
fFunctionSplitView(NULL),
|
fFunctionSplitView(NULL),
|
||||||
fSourceSplitView(NULL),
|
fSourceSplitView(NULL),
|
||||||
@@ -525,6 +527,13 @@ TeamWindow::MessageReceived(BMessage* message)
|
|||||||
_LoadSettings(settings);
|
_LoadSettings(settings);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case MSG_UPDATE_STATUS_BAR:
|
||||||
|
{
|
||||||
|
const char* messageText;
|
||||||
|
if (message->FindString("message", &messageText) == B_OK)
|
||||||
|
fStatusBarView->SetText(messageText);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case MSG_TEAM_RENAMED:
|
case MSG_TEAM_RENAMED:
|
||||||
{
|
{
|
||||||
_UpdateTitle();
|
_UpdateTitle();
|
||||||
@@ -725,6 +734,15 @@ TeamWindow::SaveSettings(GuiTeamUiSettings* settings)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
TeamWindow::DisplayBackgroundStatus(const char* message)
|
||||||
|
{
|
||||||
|
BMessage updateMessage(MSG_UPDATE_STATUS_BAR);
|
||||||
|
updateMessage.AddString("message", message);
|
||||||
|
PostMessage(&updateMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
TeamWindow::ThreadSelectionChanged(::Thread* thread)
|
TeamWindow::ThreadSelectionChanged(::Thread* thread)
|
||||||
{
|
{
|
||||||
@@ -995,7 +1013,11 @@ TeamWindow::_Init()
|
|||||||
.SetInsets(0.0)
|
.SetInsets(0.0)
|
||||||
.Add(fConsoleOutputView = ConsoleOutputView::Create())
|
.Add(fConsoleOutputView = ConsoleOutputView::Create())
|
||||||
.End()
|
.End()
|
||||||
.End();
|
.End()
|
||||||
|
.Add(fStatusBarView = new BStringView("status", "Ready."));
|
||||||
|
|
||||||
|
fStatusBarView->SetExplicitMinSize(BSize(50.0, B_SIZE_UNSET));
|
||||||
|
fStatusBarView->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET));
|
||||||
|
|
||||||
// add source view
|
// add source view
|
||||||
sourceScrollView->SetTarget(fSourceView = SourceView::Create(fTeam, this));
|
sourceScrollView->SetTarget(fSourceView = SourceView::Create(fTeam, this));
|
||||||
|
|||||||
@@ -71,6 +71,8 @@ public:
|
|||||||
status_t SaveSettings(
|
status_t SaveSettings(
|
||||||
GuiTeamUiSettings* settings);
|
GuiTeamUiSettings* settings);
|
||||||
|
|
||||||
|
void DisplayBackgroundStatus(const char* message);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum ActiveSourceObject {
|
enum ActiveSourceObject {
|
||||||
@@ -228,6 +230,7 @@ private:
|
|||||||
BButton* fStepOutButton;
|
BButton* fStepOutButton;
|
||||||
BMenuBar* fMenuBar;
|
BMenuBar* fMenuBar;
|
||||||
BStringView* fSourcePathView;
|
BStringView* fSourcePathView;
|
||||||
|
BStringView* fStatusBarView;
|
||||||
ConsoleOutputView* fConsoleOutputView;
|
ConsoleOutputView* fConsoleOutputView;
|
||||||
BSplitView* fFunctionSplitView;
|
BSplitView* fFunctionSplitView;
|
||||||
BSplitView* fSourceSplitView;
|
BSplitView* fSourceSplitView;
|
||||||
|
|||||||
@@ -0,0 +1,233 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2015, Rene Gollent, rene@gollent.com.
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "ReportUserInterface.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <Entry.h>
|
||||||
|
#include <FindDirectory.h>
|
||||||
|
#include <Path.h>
|
||||||
|
|
||||||
|
#include <AutoLocker.h>
|
||||||
|
|
||||||
|
#include "MessageCodes.h"
|
||||||
|
#include "UiUtils.h"
|
||||||
|
|
||||||
|
|
||||||
|
ReportUserInterface::ReportUserInterface(thread_id targetThread,
|
||||||
|
const char* reportPath)
|
||||||
|
:
|
||||||
|
fTeam(NULL),
|
||||||
|
fListener(NULL),
|
||||||
|
fTargetThread(targetThread),
|
||||||
|
fReportPath(reportPath),
|
||||||
|
fShowSemaphore(-1),
|
||||||
|
fReportSemaphore(-1),
|
||||||
|
fShown(false),
|
||||||
|
fTerminating(false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ReportUserInterface::~ReportUserInterface()
|
||||||
|
{
|
||||||
|
if (fShowSemaphore >= 0)
|
||||||
|
delete_sem(fShowSemaphore);
|
||||||
|
|
||||||
|
fTeam->RemoveListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char*
|
||||||
|
ReportUserInterface::ID() const
|
||||||
|
{
|
||||||
|
return "ReportUserInterface";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
ReportUserInterface::Init(Team* team, UserInterfaceListener* listener)
|
||||||
|
{
|
||||||
|
fShowSemaphore = create_sem(0, "show report");
|
||||||
|
if (fShowSemaphore < 0)
|
||||||
|
return fShowSemaphore;
|
||||||
|
|
||||||
|
fReportSemaphore = create_sem(0, "report generator wait");
|
||||||
|
if (fReportSemaphore < 0)
|
||||||
|
return fReportSemaphore;
|
||||||
|
|
||||||
|
fTeam = team;
|
||||||
|
fListener = listener;
|
||||||
|
|
||||||
|
fTeam->AddListener(this);
|
||||||
|
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ReportUserInterface::Show()
|
||||||
|
{
|
||||||
|
fShown = true;
|
||||||
|
release_sem(fShowSemaphore);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ReportUserInterface::Terminate()
|
||||||
|
{
|
||||||
|
fTerminating = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
ReportUserInterface::IsInteractive() const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
ReportUserInterface::LoadSettings(const TeamUiSettings* settings)
|
||||||
|
{
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
ReportUserInterface::SaveSettings(TeamUiSettings*& settings) const
|
||||||
|
{
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ReportUserInterface::NotifyUser(const char* title, const char* message,
|
||||||
|
user_notification_type type)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ReportUserInterface::NotifyBackgroundWorkStatus(const char* message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int32
|
||||||
|
ReportUserInterface::SynchronouslyAskUser(const char* title,
|
||||||
|
const char* message, const char* choice1, const char* choice2,
|
||||||
|
const char* choice3)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
ReportUserInterface::SynchronouslyAskUserForFile(entry_ref* _ref)
|
||||||
|
{
|
||||||
|
return B_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ReportUserInterface::Run()
|
||||||
|
{
|
||||||
|
// Wait for the Show() semaphore to be released.
|
||||||
|
status_t error;
|
||||||
|
do {
|
||||||
|
error = acquire_sem(fShowSemaphore);
|
||||||
|
} while (error == B_INTERRUPTED);
|
||||||
|
|
||||||
|
if (error != B_OK)
|
||||||
|
return;
|
||||||
|
|
||||||
|
bool waitNeeded = false;
|
||||||
|
if (fTargetThread > 0) {
|
||||||
|
AutoLocker< ::Team> teamLocker(fTeam);
|
||||||
|
::Thread* thread = fTeam->ThreadByID(fTargetThread);
|
||||||
|
if (thread == NULL)
|
||||||
|
waitNeeded = true;
|
||||||
|
else if (thread->State() != THREAD_STATE_STOPPED) {
|
||||||
|
waitNeeded = true;
|
||||||
|
fListener->ThreadActionRequested(fTargetThread, MSG_THREAD_STOP);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (waitNeeded) {
|
||||||
|
do {
|
||||||
|
error = acquire_sem(fShowSemaphore);
|
||||||
|
} while (error == B_INTERRUPTED);
|
||||||
|
|
||||||
|
if (error != B_OK)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
entry_ref ref;
|
||||||
|
if (fReportPath != NULL && fReportPath[0] == '/') {
|
||||||
|
error = get_ref_for_path(fReportPath, &ref);
|
||||||
|
} else {
|
||||||
|
char filename[B_FILE_NAME_LENGTH];
|
||||||
|
if (fReportPath != NULL)
|
||||||
|
strlcpy(filename, fReportPath, sizeof(filename));
|
||||||
|
else
|
||||||
|
UiUtils::ReportNameForTeam(fTeam, filename, sizeof(filename));
|
||||||
|
|
||||||
|
BPath path;
|
||||||
|
error = find_directory(B_DESKTOP_DIRECTORY, &path);
|
||||||
|
if (error == B_OK)
|
||||||
|
error = path.Append(filename);
|
||||||
|
if (error == B_OK)
|
||||||
|
error = get_ref_for_path(path.Path(), &ref);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (error != B_OK)
|
||||||
|
printf("Unable to get ref for report path %s\n", strerror(error));
|
||||||
|
else {
|
||||||
|
fListener->DebugReportRequested(&ref);
|
||||||
|
|
||||||
|
do {
|
||||||
|
error = acquire_sem(fReportSemaphore);
|
||||||
|
} while (error == B_INTERRUPTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
fListener->UserInterfaceQuitRequested(
|
||||||
|
UserInterfaceListener::QUIT_OPTION_ASK_KILL_TEAM);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ReportUserInterface::ThreadAdded(const Team::ThreadEvent& event)
|
||||||
|
{
|
||||||
|
::Thread* thread = event.GetThread();
|
||||||
|
if (thread->ID() != fTargetThread)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (thread->State() != THREAD_STATE_STOPPED)
|
||||||
|
fListener->ThreadActionRequested(thread->ID(), MSG_THREAD_STOP);
|
||||||
|
else
|
||||||
|
release_sem(fShowSemaphore);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ReportUserInterface::ThreadStateChanged(const Team::ThreadEvent& event)
|
||||||
|
{
|
||||||
|
::Thread* thread = event.GetThread();
|
||||||
|
if (thread->ID() != fTargetThread)
|
||||||
|
return;
|
||||||
|
else if (thread->State() == THREAD_STATE_STOPPED)
|
||||||
|
release_sem(fShowSemaphore);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ReportUserInterface::DebugReportChanged(const Team::DebugReportEvent& event)
|
||||||
|
{
|
||||||
|
printf("Debug report saved to %s\n", event.GetReportPath());
|
||||||
|
release_sem(fReportSemaphore);
|
||||||
|
}
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2015, Rene Gollent, rene@gollent.com.
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*/
|
||||||
|
#ifndef REPORT_USER_INTERFACE_H
|
||||||
|
#define REPORT_USER_INTERFACE_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <ObjectList.h>
|
||||||
|
#include <String.h>
|
||||||
|
|
||||||
|
#include "UserInterface.h"
|
||||||
|
#include "Team.h"
|
||||||
|
|
||||||
|
|
||||||
|
class ReportUserInterface : public UserInterface,
|
||||||
|
private Team::Listener {
|
||||||
|
public:
|
||||||
|
ReportUserInterface(thread_id targetThread,
|
||||||
|
const char* reportPath);
|
||||||
|
virtual ~ReportUserInterface();
|
||||||
|
|
||||||
|
virtual const char* ID() const;
|
||||||
|
|
||||||
|
virtual status_t Init(Team* team,
|
||||||
|
UserInterfaceListener* listener);
|
||||||
|
virtual void Show();
|
||||||
|
virtual void Terminate();
|
||||||
|
|
||||||
|
virtual bool IsInteractive() const;
|
||||||
|
|
||||||
|
virtual status_t LoadSettings(const TeamUiSettings* settings);
|
||||||
|
virtual status_t SaveSettings(TeamUiSettings*& settings) const;
|
||||||
|
|
||||||
|
virtual void NotifyUser(const char* title,
|
||||||
|
const char* message,
|
||||||
|
user_notification_type type);
|
||||||
|
virtual void NotifyBackgroundWorkStatus(
|
||||||
|
const char* message);
|
||||||
|
virtual int32 SynchronouslyAskUser(const char* title,
|
||||||
|
const char* message, const char* choice1,
|
||||||
|
const char* choice2, const char* choice3);
|
||||||
|
virtual status_t SynchronouslyAskUserForFile(entry_ref* _ref);
|
||||||
|
|
||||||
|
void Run();
|
||||||
|
|
||||||
|
// Team::Listener
|
||||||
|
virtual void ThreadAdded(const Team::ThreadEvent& event);
|
||||||
|
virtual void ThreadStateChanged(
|
||||||
|
const Team::ThreadEvent& event);
|
||||||
|
virtual void DebugReportChanged(
|
||||||
|
const Team::DebugReportEvent& event);
|
||||||
|
|
||||||
|
private:
|
||||||
|
::Team* fTeam;
|
||||||
|
UserInterfaceListener* fListener;
|
||||||
|
thread_id fTargetThread;
|
||||||
|
const char* fReportPath;
|
||||||
|
sem_id fShowSemaphore;
|
||||||
|
sem_id fReportSemaphore;
|
||||||
|
bool fShown;
|
||||||
|
volatile bool fTerminating;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif // REPORT_USER_INTERFACE_H
|
||||||
@@ -70,12 +70,24 @@ JobListener::~JobListener()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
JobListener::JobStarted(Job* job)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
JobListener::JobDone(Job* job)
|
JobListener::JobDone(Job* job)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
JobListener::JobWaitingForInput(Job* job)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
JobListener::JobFailed(Job* job)
|
JobListener::JobFailed(Job* job)
|
||||||
{
|
{
|
||||||
@@ -121,6 +133,15 @@ Job::WaitForUserInput()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
Job::SetDescription(const char* format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
va_start(args, format);
|
||||||
|
fDescription.SetToFormatVarArgs(format, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Job::SetWorker(Worker* worker)
|
Job::SetWorker(Worker* worker)
|
||||||
{
|
{
|
||||||
@@ -179,6 +200,13 @@ Job::NotifyListeners()
|
|||||||
for (int32 i = count - 1; i >= 0; i--) {
|
for (int32 i = count - 1; i >= 0; i--) {
|
||||||
JobListener* listener = fListeners.ItemAt(i);
|
JobListener* listener = fListeners.ItemAt(i);
|
||||||
switch (fState) {
|
switch (fState) {
|
||||||
|
case JOB_STATE_ACTIVE:
|
||||||
|
listener->JobStarted(this);
|
||||||
|
break;
|
||||||
|
case JOB_STATE_WAITING:
|
||||||
|
if (fWaitStatus == JOB_USER_INPUT_WAITING)
|
||||||
|
listener->JobWaitingForInput(this);
|
||||||
|
break;
|
||||||
case JOB_STATE_SUCCEEDED:
|
case JOB_STATE_SUCCEEDED:
|
||||||
listener->JobDone(this);
|
listener->JobDone(this);
|
||||||
break;
|
break;
|
||||||
@@ -342,6 +370,14 @@ Worker::ResumeJob(Job* job)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
Worker::HasPendingJobs()
|
||||||
|
{
|
||||||
|
AutoLocker<Worker> locker(this);
|
||||||
|
return !fJobs.IsEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
Worker::AddListener(const JobKey& key, JobListener* listener)
|
Worker::AddListener(const JobKey& key, JobListener* listener)
|
||||||
{
|
{
|
||||||
@@ -395,6 +431,7 @@ Worker::WaitForUserInput(Job* waitingJob)
|
|||||||
return B_INTERRUPTED;
|
return B_INTERRUPTED;
|
||||||
|
|
||||||
waitingJob->SetWaitStatus(JOB_USER_INPUT_WAITING);
|
waitingJob->SetWaitStatus(JOB_USER_INPUT_WAITING);
|
||||||
|
waitingJob->NotifyListeners();
|
||||||
fSuspendedJobs.Add(waitingJob);
|
fSuspendedJobs.Add(waitingJob);
|
||||||
|
|
||||||
return B_OK;
|
return B_OK;
|
||||||
@@ -451,6 +488,7 @@ Worker::_ProcessJobs()
|
|||||||
// process the next job
|
// process the next job
|
||||||
if (Job* job = fUnscheduledJobs.RemoveHead()) {
|
if (Job* job = fUnscheduledJobs.RemoveHead()) {
|
||||||
job->SetState(JOB_STATE_ACTIVE);
|
job->SetState(JOB_STATE_ACTIVE);
|
||||||
|
job->NotifyListeners();
|
||||||
|
|
||||||
locker.Unlock();
|
locker.Unlock();
|
||||||
status_t error = job->Do();
|
status_t error = job->Do();
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
#include <ObjectList.h>
|
#include <ObjectList.h>
|
||||||
#include <Referenceable.h>
|
#include <Referenceable.h>
|
||||||
|
#include <String.h>
|
||||||
#include <util/DoublyLinkedList.h>
|
#include <util/DoublyLinkedList.h>
|
||||||
#include <util/OpenHashTable.h>
|
#include <util/OpenHashTable.h>
|
||||||
|
|
||||||
@@ -69,7 +70,9 @@ class JobListener {
|
|||||||
public:
|
public:
|
||||||
virtual ~JobListener();
|
virtual ~JobListener();
|
||||||
|
|
||||||
|
virtual void JobStarted(Job* job);
|
||||||
virtual void JobDone(Job* job);
|
virtual void JobDone(Job* job);
|
||||||
|
virtual void JobWaitingForInput(Job* job);
|
||||||
virtual void JobFailed(Job* job);
|
virtual void JobFailed(Job* job);
|
||||||
virtual void JobAborted(Job* job);
|
virtual void JobAborted(Job* job);
|
||||||
};
|
};
|
||||||
@@ -89,9 +92,13 @@ public:
|
|||||||
Worker* GetWorker() const { return fWorker; }
|
Worker* GetWorker() const { return fWorker; }
|
||||||
job_state State() const { return fState; }
|
job_state State() const { return fState; }
|
||||||
|
|
||||||
|
const BString& GetDescription() const
|
||||||
|
{ return fDescription; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
job_wait_status WaitFor(const JobKey& key);
|
job_wait_status WaitFor(const JobKey& key);
|
||||||
status_t WaitForUserInput();
|
status_t WaitForUserInput();
|
||||||
|
void SetDescription(const char* format, ...);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend class Worker;
|
friend class Worker;
|
||||||
@@ -122,6 +129,7 @@ private:
|
|||||||
JobList fDependentJobs;
|
JobList fDependentJobs;
|
||||||
job_wait_status fWaitStatus;
|
job_wait_status fWaitStatus;
|
||||||
ListenerList fListeners;
|
ListenerList fListeners;
|
||||||
|
BString fDescription;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Job* fNext;
|
Job* fNext;
|
||||||
@@ -149,6 +157,8 @@ public:
|
|||||||
// only valid for jobs that are
|
// only valid for jobs that are
|
||||||
// suspended pending user input
|
// suspended pending user input
|
||||||
|
|
||||||
|
bool HasPendingJobs();
|
||||||
|
|
||||||
status_t AddListener(const JobKey& key,
|
status_t AddListener(const JobKey& key,
|
||||||
JobListener* listener);
|
JobListener* listener);
|
||||||
void RemoveListener(const JobKey& key,
|
void RemoveListener(const JobKey& key,
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user